在vim中,如何使用setreg将回车添加到寄存器?

时间:2011-12-07 13:18:26

标签: vim carriage-return vim-registers

我的.vimrc中有这个命令:

vip:normal @g<CR>

当我通过输入缓冲区来设置寄存器'g'时,它会起作用:

qg<CR>jq

如果我输入:register,则显示:

--- Registers ---

"g   ^Mj

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

然而,当我在我的vimrc中使用setreg命令时,如果我输入@g,则没有任何反应。

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

如果我输入:register,则显示:

--- Registers ---

"g   ^Mj

^ M不是特殊颜色。

我的.vimrc中有以下内容:

map <CR> :call MyFunction<CR>

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

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

3 个答案:

答案 0 :(得分:8)

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

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

或更简单

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

获取更多帮助

:h expr-quote
:h let-@

答案 1 :(得分:3)

在一般规则中,请避免使用vim脚本行内的ascii控制字符(低于0x20)。当你再次阅读vimrc时,如果没有足够的行,vim可以检测到错误的行终止模式(mac?)

使用nr2char(13)在字符串文字中包含^M

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

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

答案 2 :(得分:0)

最佳答案并不总是有效 提供\n就可以解决这个问题。

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

请务必使用双引号。