perl - 如何编写 vim 脚本以在缓冲区上运行 perltidy?

标签 perl vim

在我目前的工作中,我们的编码风格标准与我通常遵循的标准不同。幸运的是,我们有一个用于 perltidy 的 jar 装 RC 文件。我可以在将文件提交给我们的审核流程之前申请重新格式化文件。

我有 emacs 的代码,我用来在缓冲区上运行命令并将缓冲区替换为输出,我已经为此进行了调整。但我有时会在 emacs 和 vim 之间交替使用,并希望在那里拥有相同的功能。我确信这个或类似的东西很简单,并且已经完成并重新完成了很多次。但是我没有太多运气找到任何似乎可以满足我需要的 vim-script 示例。从本质上讲,这是为了能够点击一个组合键(比如我在 emacs 中使用的 Ctrl-F6)并通过 perltidy 重新格式化缓冲区。 .虽然我是一个舒适的 vim 用户,但我完全不知道为 vim 编写这种东西。

最佳答案

在尝试@hobbs 回答后,我注意到当通过 perltidy 过滤整个缓冲区时光标返回到第 1 个字节,我必须记下原始行号,以便在 :Tidy 之后返回。完全的。
因此,基于@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 current visual selection"
au Filetype perl vmap <F2> :Tidy<CR>
(关闭 " 添加到注释中以突出显示 SO 语法(不是必需的,但有效的 vim 语法))DoTidy()将光标返回到原来的位置加减至多X字节,其中 Xperltidy 添加/删除的字节数相对于原始光标位置。但是,只要您保持整洁,这就是相当微不足道的:)。
[Vim 版本:7.2]
编辑:更新 DoTidy()加入@mikew 的评论以提高可读性和与 Vim 7.0 的兼容性

关于perl - 如何编写 vim 脚本以在缓冲区上运行 perltidy?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345519/

相关文章:

go - 如何在 Go 终端的一部分中使用 Vim

regex - 如何使用Perl在字符串中找到子字符串?

perl - 如何告诉 DBD::CSV 使用逗号作为小数点分隔符?

perl - 我如何知道系统是否已开机?

vim - 如何设置和取消设置所有缓冲区的相对编号?

regex - 使用正则表达式帮助查找数字

perl - 如何检测格式错误的 UTF 字符

html - 使用 perl 去除 HTML 标签

vim - 如何自定义 CtrlP 提示符内的映射 - VIM

vim - 如何将 Vim 配置为在按回车键时不缩进当前行?