Как в vim добавить возврат каретки в регистр с помощью setreg?

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

vip:normal @g<CR>

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

qg<CR>jq

Если я наберу :registers, он покажет:

--- Registers ---

"g   ^Mj

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

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

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

Если я наберу :registers, он покажет:

--- Registers ---

"g   ^Mj

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

У меня есть следующее в моем .vimrc:

map <CR> :call MyFunction<CR>

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

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


person renick    schedule 07.12.2011    source источник
comment
Как вы вводили ^M в call setreg('g','^Mj')? Вы использовали ctrl-v ctrl-m? Или просто набрали каретку и букву М?   -  person sidyll    schedule 07.12.2011
comment
карет М... ах... я пытался набрать карету v каретку м и это не удалось. Я не знал, что вам действительно нужно набирать ctrl-v ctrl-m в режиме вставки, а не писать строку ^V^M. Спасибо за это! На самом деле нажатие этих клавиш сработало. Реестр установлен правильно. Я ценю вашу помощь.   -  person renick    schedule 07.12.2011
comment
ctrl-v ‹enter› — это то, что я обычно использую для получения ^M.   -  person overthink    schedule 07.12.2011


Ответы (3)


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

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

или проще

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

Дополнительная помощь

:h expr-quote
:h let-@
person Peter Rincker    schedule 07.12.2011

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

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

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

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

person Benoit    schedule 07.12.2011

Лучший ответ не всегда работает.
Предоставление \n помогло в моем случае.

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

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

person Aaron    schedule 19.07.2015
comment
\n фактически спас меня, когда мне понадобился ввод в конце моего макроса. \n в конце макроса дает вам ^J . в то время как \‹cr› и \‹c-m› и \r все приводят к ^M^J - person Possum Gallo; 07.10.2020