![](/img/trans.png)
[英]How to pipe visually selected text to a UNIX command and append output to current buffer in 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
假设您在可视模式下选择了文件名:
y
选择所选文件名 q:
在仍处于正常模式时打开命令窗口 i
进入命令窗口内的插入模式并键入e
Esc
ape进入正常模式并按p
粘贴被拉动的文件名 当然,如果您经常需要这样做,您应该创建一个宏并将其映射到一些易于记忆的组合键。
大多数情况下,您只想从当前光标位置周围抽出有效的文件名。 Vim具有检测合理/有效文件名( isfname
)的功能,您可以在不选择任何内容的情况下使用它,输入Cr Cf
或者,对于当前选择的单词,存在Cr Cw 。
正如其他人所提到的,您也可以使用Cr <reg>
来引用任何寄存器(例如,对于默认寄存器,例如Cr “ )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.