进行视觉选择v,然后进行动作进行选择等,然后
:'<,'>so
但是vim给出了错误
不允许范围
还
:'<,'>w | so
给予
使用!写局部缓冲区
如何获取视觉选择的vimscript?
#1 楼
在命令行上,单击<C-u>
,然后键入@*
,然后输入。<C-u>
将删除在视觉上选择了某些文本后自动插入的可视范围'<,'>
。:@*
将执行*
寄存器的内容,其中包含当前在视觉上选择的内容。即使选择/突出显示的文本在您的Web浏览器中(firefox,chrome,...),它也会可以使用
*
寄存器直接在vim中进行访问。如果在vim缓冲区中选择了文本,另一种解决方案是将其复制到命名寄存器中,例如通过键入
"ay
来注册一个寄存器。然后在命令行中键入:<C-r>a
并输入。Ctrl + r将为您提供一种由字符"
表示的提示(有关更多信息,请阅读:h c_Ctrl-r
) 。在此新提示下,如果输入寄存器名称,其内容将插入命令行中,您将可以在执行前对其进行编辑。
除了复制某些文本而不指定寄存器外,还可以从未命名的寄存器“。”访问它。 vimscript放在文件中并想快速获取它,您可以使用
Y
复制它,然后在命令行使用以下命令获取它::<C-r>"
并输入。最后,如果使用最后一种解决方案,
如果您在命令行中看到一个像
^M
这样的奇怪字符,它是回车符的插入符号。您应该删除它,否则可能会得到一个错误。 br /> 总之,您:
用
Y
复制vimscript行用
:
切换到命令模式< br按下
<C-r>
进入寄存器提示键入
"
调用未命名的寄存器按下退格键以删除
^M
字符并按下enter。
#2 楼
与我的其他答案相比,更直接地针对该问题,您可以定义一个这样的映射(nnoremap
不选择,只执行当前行; vnoremap
当可视模式处于活动状态时):nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>
在这两种情况下,“当前行”均为
:execute
d,因此在可视版本中,您将通过可视化选择在一行中逐行重复。答案是,当键入:时,
:execute
删除在命令行中弹出的范围说明。需要对<C-u>
字符进行转义,因为否则它们将被解释为|
命令的末尾。也可以将其转换为函数,以摆脱一些转义体操,但实际上并没有。对我来说,这似乎不是一个巨大的胜利。基本上,它将是vnoremap扩展为多行,并根据[nv]映射模式进行一定范围的设置。
评论
哦,可视模式映射会执行整行,因此如果您以块或字符的方式执行,它将忽略行内的起点和终点。
–dash-tom-bang
16年6月6日在18:09
#3 楼
我实际上做的有点不同,我只是在vimrc中进行编辑,并在每次编写时重新获得它。 (我有一组级联的vimrc文件,因此可以更改其中的任何一个。)if $MYVIMRC != ''
autocmd BufWritePost *vimrc source $MYVIMRC
endif
评论
甜! :D效果很好-之前我从未遇到过@ *,谢谢!
–the_velour_fog
15年11月13日在11:12
很高兴它对您有所帮助。我已经编辑了答案以提出另一种解决方案。
– saginaw
15年11月13日在11:20
不错,我尝试了您关于使用的建议:
–the_velour_fog
15年11月13日在11:54
老实说,这是一个很好的问题,我不知道。通常,如果我不删除此字符,则会出错。我很高兴它为您提供了没有错误的服务。也许对此主题有更多了解的人会向我们解释vim如何对待这种特殊字符。
– saginaw
15年11月13日在12:06