MyTetra Share
Делитесь знаниями!
Регистры
Время создания: 12.06.2017 16:43
Раздел: vim - Основы
Запись: xintrea/mytetra_db_mcold/master/base/1497274990qn0f7z6y0p/text.html на raw.githubusercontent.com

Про регистры в Vim уже писали в предыдущих постах, но я решил собрать инфу воедино и немного дополнить. Прочитав эту статью, вы станете настоящими мастерами копи-пастинга (в хорошем смысле этого слова) :) Сложно представить себе работу в редакторе без использования операций скопировать/вырезать/вставить. Vim предоставляет очень мощные средства, для этого. Итак, регистры — это то, куда Vim складывает те куски текста, которые вы копируете с помощью y или удаляете с помощью c или d, но не только. Есть ещё несколько специальных регистров, куда Vim помещает, например, текст, который вы искали с помощью / или текст, который вы drag-n-dropнули в окно редактора. Чтобы указать, что вы хотите скопировать или удалить текст в определенный регистр, нужно указать его имя перед командой. Например, «ayy скопирует строку целиком в регистр »a. Но не во все регистры можно писать, некоторые из них только для чтения (и даже есть один только для записи). Ещё немного особой, Vimовской магии, связанной с регистрами, для затравки, чтобы было не лень дочитать до конца: — Vim хранит небольшую историю удалений, так что вы можете вставить удалённый ранее текст, даже если после этого вы удаляли или копировали другой текст. — Vim предоставляет вам 26 именованных «буфера обмена», в которые можно надолго складывать текст и он не будет потерян при операциях копирования или удаления. — Vim может копировать или удалять текст, не затирая содержимое регистра, а дополняя его. В Vim есть следующие типы регистров: 1. Безымянный регистр "". Эдакий «регистр по умолчанию». Сюда помещается текст, если вы при копировании или удалении не указали регистр. Однако, даже если вы явно копируете текст в регистр «a с помощью »ayy, текст всё равно появится и в "". Исключение составляет только специальный регистр "_, о котором ниже. При использовании этого регистра содержимое "" не меняется. 2. Нумерованные регистры «0 — »9.  Регистр «0 содержит последний текст, который был скопирован (y) без указания регистра. То есть обычный yank поместит текст в регистры »" и «0, а »my изменит содержимое регистров "" и «m, но оставит прежним содержимое »0. Регистр «1 содержит последний удалённый текст, при условии, что при удалении не был указан регистр и текст содержит хотя бы одну полную строку (иначе вместо »1 используется специальный регистр "-). Регистр «1 всё же используется, если удаление было сделано с применением команд перемещения %()`/?nN{ и }. При каждом последующем удалении текста старое содержимое регистра »1 помещается в регистр «2, содержимое »2 при этом оказывается в «3 и так далее, содержимое регистра »9 теряется, замещаясь содержимым регистра «8 до удаления. 3. Регистр »- содержит удалённый текст, если его было меньше, чем одна строка и при удалении явно не был указан регистр. 4. Именованные регистры «a — »z или «A — »Z. Если вам нужно часто вставлять один и тот же текст и вы не хотите, чтобы операции копирования или удаления затирали его, используйте именованные регистры «a — »z. Также, именованные регистры могут использоваться для того, чтобы «накапливать» удалённый или копируемый текст. Для этого используйте регистры «A — »Z. 5. Регистры только для чтения ":"."% и "# ": содержит последнее содержимое командной строки. ". содержит последний вставленный текст (этот текст можно также вставить в режиме вставки с помощью Ctrl+A) "% содержит имя текущего файла "# содержит имя альтернативного файла (файла, который редактировался перед текущим) 6. Регистр выражений "=. Особый магический регистр, используется не для того, чтобы хранить текст, а чтобы вставлять результаты вычислений выражений. Например в режиме вставки вы можете набрать Ctrl+R=5+5*5, нажать Enter и в текст вставится 30. Выражения могут быть и намного более сложными, использовать значения регистров, переменных или опций Vimа.

Подробнее в :help expression. 7. Регистры для выделений и drag-n-dropа "*"+ и "~. Регистры "* и "+ используются для общения с внешним миром. Под Win например содержимое этих регистров совпадает с содержимым буфера обмена Windows. То есть, для того, чтобы скопировать текст из Vim в другое приложение, вы копируете (или вырезаете) текст в регистр "* и потом вставляете его куда нужно. Чтобы скопировать текст из внешнего приложения в Vim вы копируете текст во внешнем приложении и вставляете его в Vim из регистра "*. Различие между регистрами "* и "+ есть только в X11. Они подробно описаны в :help x11-selection. Регистр только для чтения "~ содержит текст, который был перетащен в окно Vim. 8. Регистр «чёрная дыра» "_. Это регистр только для записи. Используется он для того, чтобы при удалении не изменить содержимое регистра по умолчанию "" и цифровых регистров «1 — »9. При вставке из этого регистра ничего не происходит. 9. Регистр последнего поиска "/. В нем хранится выражение, которое было использовано при последнем поиске. Содержимое используется также командами n и N, а также для подсветки текста при включенной опции 'hlsearch'. Для того, чтобы посмотреть содержимое регистров, воспользуйтесь командой :reg:reg без параметров покажет содержимое всех регистров. Для того, чтобы посмотреть только содержимое регистров «3 и »f напишите :reg 3f. Ну и напоследок. Вы можете изменять содержимое регистров при помощи команды :let. Для того, чтобы записать, например, в регистр "/ напишите :let @/ = «the». Или например, чтобы поместить в системный буфер обмена содержимое регистра m, в который вы перед этим «накопили» кучу полезного текста («My), можно написать :let @*=@m.

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования