Vim函数内如何将内容复制到指定寄存器?
在Vim函数中使用寄存器复制内容的解决方法
我完全懂你被这个问题困扰一整天的感受!在Vim脚本里直接写普通模式的按键序列确实会被当成注释,不过有两个不用修改注释选项的实用方法,完美解决你的需求:
方法1:使用:normal命令执行普通模式操作
:normal命令的核心作用就是让Vim在脚本环境中执行普通模式的按键序列,这样就能避开注释识别的问题。你只需要把原本在普通模式下的按键序列放在:normal后面就行:
function MyFunction() " 执行普通模式的"kyw操作,将当前单词复制到k寄存器 normal "kyw endfunction
这个命令和你手动在普通模式下输入"kyw的效果完全一致,而且不会被当成注释。如果需要执行带特殊按键的操作(比如包含<CR>或<Esc>),可以用:normal!(带感叹号会忽略用户自定义的映射),不过你的场景用普通的:normal就足够了。
方法2:使用Vim内置的yank()函数
如果你想更“脚本化”地完成复制操作,Vim提供了yank()函数,可以直接指定要复制的内容和目标寄存器:
function MyFunction() " 复制当前光标下的单词到k寄存器 call yank(expand('<cword>'), 'k') endfunction
这里expand('<cword>')会获取当前光标所在的单词,yank()的第二个参数是目标寄存器名(不需要加引号)。这种方法的好处是可以直接操作文本内容,不需要模拟按键,适合更复杂的脚本逻辑。
如果需要复制特定范围的内容(比如从当前行到第10行),还可以结合Vim的范围表达式:
call yank(getline('.', 10), 'k')
两种方法都不用修改Vim的注释设置,你可以根据自己的需求选择——如果想和手动操作逻辑保持一致,选:normal;如果需要更灵活的文本控制,选yank()函数。
内容的提问来源于stack exchange,提问作者Peter Kay
相关产品推荐
相关产品推荐

