如何在缓冲区上运行perltidy脚本vim?

在我目前的工作中,我们的编码风格标准与通常所遵循的不同.幸运的是,我们提供了一个用于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兼容性的评论

相关文章

解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全...
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的...
      vim正则匹配:空行:/^$/  /^[\t]*$/注释...
$select-editorSelectaneditor.Tochangelater,run'sele...
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下...
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置...