我正在尝试非常酷的NERDtree,但我想做的是在所选文件上执行特殊命令或脚本。
例如,我想突出显示树中的图像文件,点击一些键并在原始文件中插入相应的XHTML标记(我有一个小脚本来进行格式化,我只需要运行它在文件上)。或者在选择modulename时按下另一个键时插入'require modulename'。或者,我想你明白了。
可以在NERDtree中完成,还是有其他插件允许这样做?
由于
修改
我想到了这个解决方案:我在浏览器窗口的光标下运行命令,将其输出捕获到寄存器中,切换回上一个窗口并粘贴寄存器的内容。
这种方法的问题是浏览器窗口中的文件没有引用它的完整路径,所以它只是一个文件名,因此除非你只使用cwd中的东西,否则基本上没用。
答案 0 :(得分:2)
经过研究,我发现了一个似乎完全符合我想要的解决方案。这段代码应插入~/.vim/nerdtree_plugin
下的文件(或其他操作系统下的等效目录)中:
call NERDTreeAddKeyMap({
\ 'key': 'b',
\ 'callback': 'NERDTreeInsertImage',
\ 'quickhelpText': 'Insert XHTML tag of image' })
function! NERDTreeInsertImage()
let n = g:NERDTreeFileNode.GetSelected()
if n != {}
let @i = system("~/perl/image.pl " . n.path.str())
normal ^Wp"ip
endif
endfunction
它向键b
添加一个映射,该键运行函数NERDTreeInsertImage()
,该函数在浏览器中获取所选文件的完整路径,并将其作为参数传递给我的perl脚本。当然^W
插入为<C-V><C-W>
。
希望这对其他一些Vim用户有用:)
@romainl这是非常简单的Perl脚本(需要ImageMagick模块):
#!/usr/bin/perl
use strict;
use warnings;
use Image::Magick;
my $source = $ARGV[0];
my $img = Image::Magick->new;
$img->Read($source);
my ( $width, $height ) = $img->Get('width', 'height');
print qq#<img src="$source" width="$width" height="$height" alt="">#;
答案 1 :(得分:0)
:!<cfile>
这将执行光标下的当前文件(在Windows中,这意味着它将打开与文件关联的默认程序)。我没有使用NERDTree,但如果文件突出显示,它可能无法正常工作(它会尝试通过您提供的命令过滤选择)。
您也可以使用它来对文件执行命令:
:!notepad <cfile>
根据您要执行的操作,您还可以获取文件的内容并通过脚本发送以进行过滤。根据您的示例,这听起来可能会有效。所选内容将被发送到您的程序(或脚本)的标准输入,并且选择将被其输出替换。例如,突出显示某些文字并按:
,您会看到:'<,'>
(这是当前选择的标记)。然后键入!
,然后输入您的命令。结果可能如下:
:'<,'>!myscript
执行此操作时,突出显示的部分将通过标准输入发送到myscript
,然后由myscript
的输出替换。