代码之家  ›  专栏  ›  技术社区  ›  Matteo Riva

用于在文件上执行命令的VIM浏览器插件

vim
  •  2
  • Matteo Riva  · 技术社区  · 15 年前

    我正在尝试nerdtree,这很酷,但我想做的是对选定的文件执行特殊命令或脚本。

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

    是否可以在NerdTree中完成,或者是否有其他插件允许这样做?

    谢谢

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

    这种方法的问题在于,浏览器窗口中的文件没有对其完整路径的引用,因此它只是一个文件名,因此基本上是无用的,除非您只处理CWD中的内容。

    2 回复  |  直到 13 年前
        1
  •  2
  •   Matteo Riva    13 年前

    经过研究,我找到了一个解决方案,似乎完全符合我的要求。这段代码应该插入到 ~/.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用户有所帮助:)

    @这是非常简单的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="">#;
    
        2
  •  0
  •   jheddings    15 年前
    :!<cfile>
    

    这将在光标下执行当前文件(在Windows中,这意味着它将打开与该文件关联的默认程序)。我没有使用过nerdtree,但是如果突出显示该文件,它可能无法正常工作(它将尝试通过您提供的命令筛选所选内容)。

    还可以使用此命令对文件执行命令:

    :!notepad <cfile>
    

    根据您想做什么,您还可以获取文件的内容并通过脚本将其发送以进行筛选。基于您的示例,这听起来可能可行。所选内容将被发送到程序(或脚本)的标准输入,并且所选内容将被其输出替换。例如,突出显示一些文本并按 : 你应该看到 :'<,'> (是当前选择的标记)。然后类型 ! 接下来是你的命令。结果可能是:

    :'<,'>!myscript
    

    执行此操作时,突出显示的部分将在标准输入中发送到 myscript 然后替换为输出 米斯本 .