Vim:如何:获取缓冲区的一部分

Vim:如何:获取缓冲区的一部分,vim,Vim,众所周知,我们可以通过:so%来:source当前缓冲区 但有时我想:source只是缓冲区的一部分,而不是整个缓冲区。比如说,我刚刚在我的.vimrc中添加了一些内容,并希望对该部分进行源代码开发,但我不想重新对其余的内容进行源代码开发 我尝试了选择text和:以便(实际上是:”您可以定义以下命令,该命令在当前行或传递的范围内运行: ":[range]Execute Execute text lines as ex commands. " Handles |line-

众所周知,我们可以通过
:so%
:source
当前缓冲区

但有时我想
:source
只是缓冲区的一部分,而不是整个缓冲区。比如说,我刚刚在我的
.vimrc
中添加了一些内容,并希望对该部分进行源代码开发,但我不想重新对其余的内容进行源代码开发


我尝试了选择text和
:以便
(实际上是
:”您可以定义以下命令,该命令在当前行或传递的范围内运行:

":[range]Execute    Execute text lines as ex commands.
"           Handles |line-continuation|.
command! -bar -range Execute silent <line1>,<line2>yank z | let @z = substitute(@z, '\n\s*\\', '', 'g') | @z
”:[range]将文本行作为ex命令执行。
“句柄|行继续|。
命令!-bar-range执行静默,猛拉z | let@z=substitute(@z,'\n\s*\\',''g')|@z

多亏了Ingo Karkat,我采纳了他的主要思想并加以改进。我想改进的是:

  • 我们必须使用额外的用户指定命令
    :Execute
    ,而不是标准的
    :so
    (好的,我们可以将用户指定的命令命名为
    :so
    ,无论如何,使用新的大写版本的命令很烦人)
  • 几乎没有副作用:寄存器
    @z
    在执行命令后损坏

使用下面的脚本,我们可以像以前一样使用
:so{file}
命令,并且我们还可以在以下范围内使用它:
:“如果您只选择了一行,则以下工作正常:

yq:p<enter>
yq:p
这也将有助于:

y:<control-r>"<enter>
y:

为什么不使用以下映射来查找文件(或范围):

“获取当前文件的源代码
nmap vs:source%
“源一个可视范围
vmap vs y:@“

现在,您可以按
,vs
(如果您的mapleader是
),所选范围将被获取,否则,在正常模式下,当前文件将被获取。

非常感谢,我采纳了您的主要想法并对其进行了改进,如果您感兴趣,请查看我的答案。使用
cnoreabr
时需要小心。它们会在意外的地方扩展,例如搜索。有关更多@PeterRincke的信息,请参阅本文r、 谢谢你的留言,威尔。这就是为什么我如此喜欢宏(寄存器)的原因!只要一个“@”就行了!♪ 很少有用户知道命令模式下的宏和正常模式下的宏一样有用。
y:<control-r>"<enter>
" source the current file
nmap <leader>vs :source %<CR>
" source a visual range
vmap <leader>vs y:@"<CR>