如果在插入vimrc之前要测试几行vimscript,是否可以直观地进行选择,然后提供它们?
我努力了
- 进行视觉选择v,然后进行动作进行选择等,然后
:'<,'>so
但是vim给出了一个错误
不允许范围
也
:'<,'>w | so
给
采用 !写部分缓冲区
如何获得视觉选择的vimscript?
如果在插入vimrc之前要测试几行vimscript,是否可以直观地进行选择,然后提供它们?
我努力了
:'<,'>so
但是vim给出了一个错误
不允许范围
也
:'<,'>w | so
给
采用 !写部分缓冲区
如何获得视觉选择的vimscript?
Answers:
在命令行上单击,<C-u>
然后键入@*
并输入。
<C-u>
'<,'>
如果在视觉上选择了某些文本,将删除自动插入的视觉范围。
:@*
将执行*
寄存器的内容,其中包含当前在视觉上选择的内容。
即使已选择/突出显示的文本在您的网络浏览器中(firefox,chrome,...)也可以使用,但该*
寄存器将允许您直接在vim中对其进行访问。
如果在vim缓冲区中选择了文本,另一种解决方案是将其复制到命名寄存器中,例如通过键入来复制a寄存器"ay
。
然后,在命令行上键入:,<C-r>a
然后输入。
Ctrl+ r将给您以字符表示的提示"
(有关更多信息,请阅读:h c_Ctrl-r
)。
在此新提示下,如果您提供寄存器的名称,它将在命令行中插入其内容,您可以在执行之前对其进行编辑。
此外,如果您在未指定寄存器的情况下复制了一些文本,则可以从未命名的寄存器中访问“。
因此,假设您在文件中有一行vimscript并希望快速获取它,您可以使用复制它Y
,然后使用:在命令行中:<C-r>"
输入它并输入。
最后,如果使用最后一种解决方案,那么您必须意识到一个问题。
如果您在这样的命令行上看到一个奇怪的字符^M
,那就是脱字符号回车。您应该删除它,否则您可能会得到一个错误。
总之,您:
Y
:
<C-r>
进入注册提示"
以调用未命名的寄存器^M
字符: <C-r>a
它的建议, 但实际上也很好:)我猜vim ^M
在行返回时读了s-并将每个命令作为自己的单独行/命令执行?
与我的其他答案相比,更直接地针对该问题,您可以定义一个这样的映射(nnoremap
不选择,仅执行当前行;vnoremap
当可视模式处于活动状态时):
nnoremap <F2> :execute getline(".")<CR>
vnoremap <F2> :<C-u>for line in getline("'<", "'>") \| execute line \| endfor<CR>
在这两种情况下,“当前行”都是:execute
d,因此在可视版本中,:execute
通过可视选择逐行显示。
如另一个答案所述,在键入<C-u>
时,delete删除在命令行中弹出的范围说明:。这些|
字符需要转义,因为否则它们将被解释为vnoremap
命令。
这也可以转换为摆脱一些逃生体操的功能,但对我而言,这似乎并不是一个巨大的胜利。call
根据[nv]映射模式,基本上是将vnoremap扩展为多行并以一定范围进行编辑。
@*
,谢谢!