vim中添加快速单词查询功能

本文内容转载整理自网上的文章,Vim - 闲耘™.Wiki > 其它技巧 > 翻译取词,原始作者不详

从github上下载的一些开源项目提供的文档是英文的,在vim里面看文档遇到不认识的单词还得用鼠标取词去查询, 特别不方便。于是去网上找给vim添加便捷单词查询功能的方法,整理在下面

首先需要安装一个shell下运行的词典工具stardict,可以使用下面的命令来安装

sudo apt-get install sdcv stardict stardict-tools 

安装完成后可以在shell里面使用sdcv命令来查询单词,stardict并没有自带字典文件,需要自己去下载字典文件, 可以用搜索引擎搜索stardict-langdao-ec-gb-2.4.2.tar.bz2来寻找字典数据包的下载地址, 将下载下来的包解压后放入/usr/share/stardict/dic中,这里可能会碰到权限问题,可以用命令来完成。 现在使用sdcv命令查询单词就能出现内容了

ubuntu:~1 sdcv terminal
Found 1 items, similar to terminal.
-->朗道英汉字典5.0
-->terminal
['tә:minәl]
n. 终端机, 终点, 末端, 极限, 终点站
a. 终点的, 定期的, 致死的, 结尾的, 末端的, 晚期的
【计】 终端; 终端设备
【化】 接线端
【医】 终末的, 末端, 端
【经】 终站, 终点, 定期
  

下面就是给vim添加命令,让vim调用shell命令去查询单词,把结果显示到vim中,在vimrc中添加下面的函数, 需要查词的时候把光标移动到要查的词内,默认使用<leader>f进行查询,在左侧会打开一个窗口,显示查询结果。 快捷键和窗口的设置都可以通过修改下面的函数来进行自定义。网上提供的函数代码,打开查询结果的窗口后光标也会跟随到新窗口去, 还需要再通过命令跳转回文本窗口,不是很方便。我在函数后面加了一行命令 "wincmd p",来跳转回刚才的窗口,这样查词就方便多了

function! Mydict()
"执行sdcv命令查询单词的含义,返回的值保存在expl变量中
let expl=system('sdcv -n ' . expand("<cword>"))
"在每个窗口中执行命令,判断窗口中的文件名是否是dict-tmp,如果是,强制关闭
windo if expand("%")=="dict-tmp" |q!|endif	
"纵向分割窗口,宽度为25,新窗口的内容为dict-tmp文件的内容
25vsp dict-tmp
"设置查询结果窗口的属性,不缓存,不保留交换文件
setlocal buftype=nofile bufhidden=hide noswapfile
"将expl的内容显示到查询结果窗口
1s/^/\=expl/
"跳转回文本窗口
wincmd p
endfunction
"按键绑定,将调用函数并执行
nmap <leader>f :call Mydict()<CR>


—  原创作品许可 — 署名-非商业性使用-禁止演绎 3.0 未本地化版本 — CC BY-NC-ND 3.0   —