VIM浏览器插件,用于对文件执行命令

时间:2009-11-07 15:22:40

标签: vim

我正在尝试非常酷的NERDtree,但我想做的是在所选文件上执行特殊命令或脚本。

例如,我想突出显示树中的图像文件,点击一些键并在原始文件中插入相应的XHTML标记(我有一个小脚本来进行格式化,我只需要运行它在文件上)。或者在选择modulename时按下另一个键时插入'require modulename'。或者,我想你明白了。

可以在NERDtree中完成,还是有其他插件允许这样做?

由于

修改
我想到了这个解决方案:我在浏览器窗口的光标下运行命令,将其输出捕获到寄存器中,切换回上一个窗口并粘贴寄存器的内容。

这种方法的问题是浏览器窗口中的文件没有引用它的完整路径,所以它只是一个文件名,因此除非你只使用cwd中的东西,否则基本上没用。

2 个答案:

答案 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的输出替换。