繁体   English   中英

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

[英]Is there a way to refer to the current selected text in a command in Vim?

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

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

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

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

:e  {something that  refers to what I selected} 

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

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>

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

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

  • y - 将选中的文本添加到未命名的寄存器中
  • :e + SPACE - 进入命令行模式并开始输入:edit命令
  • CTRL-R" - 插入刚刚拉出的文字

请参阅:help c_CTRL-R:help registers

BTW, CTRL-R也在插入模式下也一样,我经常使用它。 请参阅:help i_CTRL_R

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

  1. y选择所选文件名
  2. q:在仍处于正常模式时打开命令窗口
  3. i进入命令窗口内的插入模式并键入e
  4. Esc ape进入正常模式并按p粘贴被拉动的文件名
  5. 按Enter键

当然,如果您经常需要这样做,您应该创建一个宏并将其映射到一些易于记忆的组合键。

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

或者,对于当前选择的单词,存在Cr Cw

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM