如果我在插入vimrc之前要测试几行vimscript,是否可以直观地进行选择,然后将其来源?
进行视觉选择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。


评论


甜! :D效果很好-之前我从未遇到过@ *,谢谢!

–the_velour_fog
15年11月13日在11:12

很高兴它对您有所帮助。我已经编辑了答案以提出另一种解决方案。

– saginaw
15年11月13日在11:20

不错,我尝试了您关于使用的建议: a实际上也很好:)我想vim会在行返回时读取^ M,并将每个人作为自己的行/命令执行?

–the_velour_fog
15年11月13日在11:54

老实说,这是一个很好的问题,我不知道。通常,如果我不删除此字符,则会出错。我很高兴它为您提供了没有错误的服务。也许对此主题有更多了解的人会向我们解释vim如何对待这种特殊字符。

– saginaw
15年11月13日在12:06

#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