在VIM中调用外部命令并显示结果

作为vim的重度用户,在迫不得已的时候都不想从vim切换到其它应用(甚至是终端都不想,如windows下的cmd/linux下的bash),就像手不想离开键盘去拿鼠标一样。

于是我写了一个插件叫k.vim,这个插件最初的目的是在vim里调用一个命令行字典工具kv查询某个英文单词,然后把查询结果显示在vim中。

后来发现我需要经常测试某种脚本语言如php/python/javascript等的某种用法。

通常的做法是

  1. 用vim写一个脚本文件如test.php,test.py,test.js等。

  2. 打开终端,执行php test.phppython test.pynode test.js等。

  3. 回到vim修改脚本,再回到终端测试。如此反复。

使用方法

有了k.vim,你打开vim,写一段脚本,甚至不需要保存,只需设置文件类型,如

:Ft pyt<tab>

or

:set filetype=python

然后按键<leader>r,该段脚本的执行结果就会显示在一个vim的scratch(:help special-buffers)窗口。

autocmd FileType python     nnoremap <buffer> <leader>r :call k#RunMe('python', 'botri 10', "")<CR>

你可以按键<space><leader>关闭对应的scratch窗口。

nnoremap <silent> <space><leader> :call k#CloseConsole()<CR>

如果已经安装过kv,可以按键<leader><leader>获得光标所在单词的解释。

演示如下图

k.vim

其它命令

:Ri <command>           执行vim命令,并把结果显示在当前buffer,如:Ri version。
:Rc <command>           执行vim命令,并把结果显示在相应的scratch窗口,如:Rc verbose map。

:Ri !<command>          执行外部命令,并把结果显示在当前buffer,如:Ri !ls。
:Rc !<command>          执行外部命令,并把结果显示在相应的scratch窗口,如:Rc !dir。

安装

Bundle 'brookhong/k.vim'

或者,把k.vim放到.vim/plugin即可。

如果你也是ctrlp.vim的用户,推荐看看通过vim快速启动程序

如果你需要字典查询功能,按以下步骤安装kv:

  1. 编译kv, Windows 可以直接下载.
  2. 把kv(或者kv.exe)放到环境变量PATH包含的某个目录,如/usr/local/bin,C:\Windows\system32
  3. 下载或创建你自己的字典,并告诉vim你的字典放在哪里,设置按键

     " the plugin will scan this directory to create key mapping globally or specially for some type of file.
     let g:kdbDir = $HOME.'/kdb'
     " when press `<leader>,`, will translate word under the cursor, works for all kinds of files.
     let g:globalDBkeys = {
           \ 'oxford' : '<leader>,',
           \ }
     " when press `K` in normal mode or `C-j` in insert mode, will get referrence of function under the cursor, works for php file or C file.
     " for file-type dictionaries, the folder must be named same as the file type.
     let g:localDBkeys = {
           \ 'php' : ['K', '<C-j>'],
           \ 'c' : ['K', '<C-j>'],
           \ }