В vim, как я могу добавить возврат каретки в регистр, используя setreg? - PullRequest
4 голосов
/ 07 декабря 2011

У меня есть эта команда в моем .vimrc:

vip:normal @g<CR>

Когда я устанавливаю регистр 'g', набирая в буфере, вот так, это работает:

qg<CR>jq

Если я наберу: регистры, он показывает:

--- Registers ---

"g   ^Mj

После этого ввод @g приводит к возврату каретки, а затем курсор перемещается на следующую строку. ^ M появляется в специальном цвете.

Однако, когда я использую команду setreg в моем vimrc, если я набираю @g, ничего не происходит.

call setreg('g','^Mj')

Если я наберу: регистры, он показывает:

--- Registers ---

"g   ^Mj

^ M не имеет специального цвета.

В моем .vimrc есть следующее:

map <CR> :call MyFunction<CR>

Возврат каретки, который я хочу сохранить в реестре, - это запуск MyFunction. MyFunction вызывается идеально, если я заполняю буфер вручную, а не с помощью setreg.

Где я ошибся? Моя платформа Linux.

Ответы [ 3 ]

8 голосов
/ 08 декабря 2011

Вы ищете "\<cr>" или "\r"

call setreg('g',"\<cr>j")
call setreg('g',"\rj")

или более просто

let @g = "\<cr>j"
let @g = "\rj"

Для получения дополнительной помощи

:h expr-quote
:h let-@
3 голосов
/ 07 декабря 2011

В общем правиле избегайте управляющих символов ascii (ниже 0x20) внутри строк ваших скриптов vim. Когда вы снова прочитаете vimrc, если в нем недостаточно строк, vim может обнаружить шаблон завершения плохой строки (mac?)

Используйте nr2char(13) для включения ^M в строковый литерал.

call setreg('g', nr2char(13).'j')

В противном случае, как сказал вам sidyll в своем комментарии, управляющие символы можно вводить с помощью CTRL-V в режиме вставки.

0 голосов
/ 19 июля 2015

Верхний ответ не всегда работает.
При условии \n добился цели в моем случае.

:let @a="foo"
:let @a="\nbar"

Обязательно используйте двойные кавычки.

...