是否有办法在Vim中的命令中引用当前选定的文本?

是否有办法在Vim中的命令中引用当前选定的文本?,vim,Vim,假设在我的C头文件中,我想包含另一个尚未创建的文件: #include "AnotherFile.h" /*not being created yet*/ 现在,我以可视模式选择文件, 包括另一个文件.h 如何使用我选择的名称创建新文件?我是说 我能想到的最接近的方法是创建一个函数: function! W() range execute "e " . getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]] endfu 编辑

假设在我的C头文件中,我想包含另一个尚未创建的文件:

#include "AnotherFile.h" /*not being created yet*/
现在,我以可视模式选择文件, 包括另一个文件.h

如何使用我选择的名称创建新文件?我是说


我能想到的最接近的方法是创建一个函数:

function! W() range
  execute "e " .  getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]] 
endfu
编辑2您也可以尝试键入:e请参阅:帮助

最后编辑3,在“帮助”下找到隐藏的gf

If you do want to edit a new file, use: >
        :e <cfile>
To make gf always work like that: 
        :map gf :e <cfile><CR>

假设您在视觉模式下选择了文件名:

按y键拖动选定的文件名 在正常模式下,按q:打开命令窗口 按i键进入命令窗口内的插入模式,然后键入e 退出到正常模式,然后按p键粘贴被拖动的文件名 按回车键 当然,如果您需要经常这样做,您应该创建一个宏并将其映射到一些易于记忆的组合键。

在命令行模式下,CTRL-R后跟register name插入指定寄存器的内容

假设您刚刚选择了文件名,请按y:e空格CTRL+R ENTER,这意味着:

y-将所选文本拖动到未命名寄存器中 :e+SPACE-进入命令行模式并开始键入:edit命令 CTRL-R-插入刚刚拖动的文本 请参阅:帮助c_CTRL-R,:帮助寄存器


顺便说一句,CTRL-R在插入模式下也有同样的功能,我经常使用它。请参阅:help i_CTRL_R

通常,您只需从当前光标位置周围拖动一个有效的文件名即可。Vim有一个检测合理/有效文件名isfname的功能,您可以在不选择任何内容的情况下使用它,键入C-rC-f

或者,对于当前选择的单词有C-rC-w


正如其他人所提到的,您也可以使用C-r引用任何寄存器,因此,例如上面的默认寄存器的C-r

EDIT2似乎是正确答案,不需要函数:当光标位于文件名上时,e工作,无论它是否被视觉选中。@Herbert:谢谢您的确认。只有在我测试了函数之后,我才想到编辑2。也许函数方法有助于满足更复杂的需求,所以我暂时把它放在这里。@René:是的,您在visul区域提取文本的方法在不同的上下文中可能会有用。将gf重新映射到编辑会破坏vim使用的内置解析算法。它将首先在不同的路径中搜索,然后尝试通过添加后缀等方式找到它。如果你没有这种魔力,请重新映射它,否则就别管它。
function! W() range
  let l:fileName = getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]] 
  new      
  execute "w " . l:fileName
endfu
If you do want to edit a new file, use: >
        :e <cfile>
To make gf always work like that: 
        :map gf :e <cfile><CR>