在我目前的工作中,我们的编码风格标准与通常所遵循的不同.幸运的是,我们提供了一个用于perltidy的罐头RC文件,在提交给我们的审查过程之前,我可以申请重新格式化文件.
我有一个emacs的代码,我用来在缓冲区上运行一个命令,并用输出替换缓冲区,我已经调整了这个.但我有时会在emacs和vim之间交替,并希望在那里有相同的功能.我相信这个或类似的东西很简单,已经完成并重新完成了很多次.但是我没有太多的运气找到任何似乎做我需要的vim脚本的例子.这实质上是能够击中一个关键组合(如Ctrl-F6,我在emac中使用的),并且缓冲区被perltidy原位重新格式化.虽然我是一个舒适的vim用户,但我完全无知地为vim写这样的东西.
尝试@hobbs答案后,我注意到,当通过perltidy过滤整个缓冲区时,光标返回到字节1,我不得不对原始行号进行心理记录,所以我可以回去:整理完成.
所以建立在@hobbs’和@ Ignacio的答案上,我将以下内容添加到我的.vimrc中:
"define :Tidy command to run perltidy on visual selection || entire buffer" command -range=% -nargs=* Tidy <line1>,<line2>!perltidy "run :Tidy on entire buffer and return cursor to (approximate) original position" fun DoTidy() let l = line(".") let c = col(".") :Tidy call cursor(l,c) endfun "shortcut for normal mode to run on entire buffer then return to current line" au Filetype perl nmap <F2> :call DoTidy()<CR> "shortcut for visual mode to run on the the current visual selection" au Filetype perl vmap <F2> :Tidy<CR>
(关闭“添加到SO语法高亮目的的注释(不是必需的,但有效的vim语法))
DoTidy()将光标返回原来的位置加或减最多X个字节,其中X是perltidy相对于原始光标位置添加/删除的字节数.但是,只要你保持整洁,这是相当微不足道的:).
[Vim版本:7.2]
编辑:更新DoTidy()以整合@ mikew的可读性和与Vim 7.0兼容性的评论