5

我的 .vimrc 中有这个命令:

vip:normal @g<CR>

当我通过输入缓冲区设置寄存器“g”时,它可以工作:

qg<CR>jq

如果我输入 :registers,它会显示:

--- Registers ---

"g   ^Mj

之后,键入@g 会导致回车,然后光标移动到下一行。^M 以特殊颜色出现。

但是,当我在 vimrc 中使用 setreg 命令时,如果我键入 @g,则什么也不会发生。

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

如果我输入 :registers,它会显示:

--- Registers ---

"g   ^Mj

^M 不是特殊颜色。

我的 .vimrc 中有以下内容:

map <CR> :call MyFunction<CR>

我要在寄存器中存储的回车是运行MyFunction。只要我手动填充缓冲区而不是使用 setreg,就会完美调用 MyFunction。

我哪里出错了?我的平台是Linux。

4

3 回答 3

10

您正在寻找"\<cr>""\r"

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

或更简单地说

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

如需更多帮助

:h expr-quote
:h let-@
于 2011-12-07T20:44:46.693 回答
5

一般来说,避免在 vim 脚本的行中使用 ascii 控制字符(低于 0x20)。如果您vimrc的行数不足,再次阅读时,vim 可能会检测到错误的行终止模式(mac?)

用于在字符串文字nr2char(13)中包含 a 。^M

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

否则,正如 sidyll 在他的评论中告诉你的那样,可以在插入模式下使用 CTRL-V 输入控制字符。

于 2011-12-07T16:24:37.737 回答
1

最佳答案并不总是有效。
提供\n在我的情况下成功了。

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

确保使用双引号。

于 2015-07-19T04:07:03.217 回答