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

时间:2011-12-15 05:22:39

标签: vim

在我的C头文件中说我想要包含另一个尚未创建的文件:

#include "AnotherFile.h" /*not being created yet*/

现在,我在Visual Mode中选择文件,
      #include“AnotherFile.h

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

:e  {something that  refers to what I selected} 

4 个答案:

答案 0 :(得分:6)

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

function! W() range
  execute "e " .  getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]] 
endfu

然后您可以选择单词并输入:call W() + enter,这将打开新的缓冲区。

编辑如果修改了包含#include的缓冲区,则上述函数无效且无错误。在这种情况下,以下功能更适合:

function! W() range
  let l:fileName = getline("'<")[getpos("'<")[2]-1:getpos("'>")[2]] 
  new      
  execute "w " . l:fileName
endfu

编辑2 您还可以尝试输入:e <cfile>(请参阅:help <cfile>)。

编辑3 最后,在:help 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>

答案 1 :(得分:4)

在命令行模式CTRL-R后跟寄存器“name”插入指定寄存器的内容。

假设您刚刚选择了文件名,请按 y e SPACE CTRL + R ENTER 表示:

  • y - 将选定的文本移入未命名的注册
  • :e +空格 - 进入命令行模式并开始输入:edit命令
  • CTRL-R" - 只插入笨拙的文字

请参阅:help c_CTRL-R:help registers

BTW,CTRL-R在插入模式下也是如此,我经常使用它。见:help i_CTRL_R

答案 2 :(得分:1)

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

  1. y
  2. 按下选定的文件名
  3. 在正常模式下按q:打开命令窗口
  4. i进入命令窗口内的插入模式,然后输入e
  5. Esc猿进入正常模式,然后按p粘贴被取消的文件名
  6. 按Enter键
  7. 当然,如果您经常需要这样做,您应该创建一个宏并将其映射到一些易于记忆的组合键。

答案 3 :(得分:1)

大多数情况下,您只想从当前光标位置周围抽出有效的文件名。 Vim具有检测合理/有效文件名(isfname)的功能,您可以在不选择任何内容的情况下使用它,输入 C-r C-f

或者,当前选择的单词有 C-r C-w

正如其他人所提到的,您也可以使用 Cr <reg> 来引用任何寄存器(例如 Cr 为默认寄存器)