在我目前的工作中,我们的编码风格标准与我通常遵循的标准不同。幸运的是,我们有perltidy
的固定RC文件,我可以申请重新格式化文件,然后再将其提交给我们的审核流程。
我有emacs的代码,我用它来通过缓冲区运行命令并用输出替换缓冲区,我已经适应了这个。但我有时在emacs和vim之间交替,并希望在那里具有相同的功能。我确信这个或类似的东西很简单,已经完成并重复了很多次。但我没有太多运气找到任何似乎做我需要的vim脚本的例子。实质上,这是能够击中一个键组合(如Ctrl-F6,我在emacs中使用的),并且缓冲区由perltidy
就地重新格式化。虽然我是一个舒服的vim用户,但我完全无法为vim写这类东西。
答案 0 :(得分:11)
在尝试@hobbs回答后,我注意到当通过perltidy
过滤整个缓冲区时,光标返回到字节1,我必须记下原始行号,以便我可以在{{{{{ 1}}完成。
基于@hobbs'和@ Ignacio的答案,我在:Tidy
添加了以下内容:
.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的兼容性
答案 1 :(得分:9)
通过外部程序过滤整个缓冲区的命令是:
:%!command
将以下内容放入~/.vimrc
以在正常模式下将其绑定到Ctrl-F6:
:nmap <C-F6> :%!command<CR>
增加乐趣:
:au Filetype perl nmap <C-F6> :%!command<CR>
这只会在编辑Perl文件时映射过滤器。
答案 2 :(得分:9)
我的整洁命令:
command -range=% -nargs=* Tidy <line1>,<line2>!
\perltidy (your default options go here) <args>
如果您使用视觉选择或提供范围,那么它将整理所选范围,否则它将使用整个文件。您可以在我编写(your default options go here)
的位置放置一组默认选项(如果有的话),但是您提供给:Tidy
的任何参数都将附加到perltidy
命令行,覆盖您的默认值。 (如果你使用.perltidyrc
你可能没有默认args - 那很好 - 但是你可能希望有一个默认值--profile=vim
来设置默认值只适用于你工作的时候vim。无论什么都有效。)
答案 3 :(得分:4)
将hobbs的答案更进一步,您可以将该命令映射到快捷键:
command -range=% -nargs=* Tidy <line1>,<line2>!perltidy -q
noremap <C-F6> :Tidy<CR>
还有一步:只在你处于Perl缓冲区时映射命令(因为你可能不希望在任何其他语言上运行perltidy):
autocmd BufRead,BufNewFile *.pl,*.plx,*.pm command! -range=% -nargs=* Tidy <line1>,<line2>!perltidy -q
autocmd BufRead,BufNewFile *.pl,*.plx,*.pm noremap <C-F6> :Tidy<CR>
现在您可以在没有活动选择的情况下按Ctrl-F6来格式化整个文件,或者使用活动选择来格式化该部分。
答案 4 :(得分:2)
与其创建新的键盘快捷键,不如替换body,html{}
命令的含义,该命令已经在人们的手指记忆中缩进了东西?是的,perlcritic不仅可以缩进,而且无论如何使用perlcritic时,您可能不想回到劣等的“ just indent” =
命令。因此,让我们覆盖它吧!
=
现在我们可以像以前一样使用filetype plugin indent on
autocmd FileType perl setlocal equalprg=perltidy
,但是增加了perlcritic的功能,而不仅仅是缩进行了:
=
最棒的是,您不必学习任何新的快捷方式,但可以继续使用已经使用的快捷方式,而且功能更强大。 :)
答案 5 :(得分:0)
我习惯使用面向行的视觉 Shift + V 选择文本然后按:我有{{1}在历史的某个地方,所以我向上箭头⇧点击一次或多次。