vim让代码整齐美观的小技巧

左手 posted @ 2013年5月29日 20:54 in Vim with tags vim vim处理 vim换行符 vim缩进对齐 vim代码排版 , 15910 阅读

一、空格和Tab相关

空格和Tab是两种常见的排版缩进的字符,常见项目中的风格问题往往由此而起。vim可以很容易的处理好这些问题。首先我们要把这两个字符显示出来,默认这两个字符都是白的。使用如下方法设置:

" 显示tab和空格
set list
" 设置tab和空格样式
set lcs=tab:\|\ ,nbsp:%,trail:-
" 设定行首tab为灰色
highlight LeaderTab guifg=#666666
" 匹配行首tab
match LeaderTab /^\t/

上面的设置将Tab显示为|(竖线),将行尾的空格显示为-(减号)。原本看起来好象还挺整齐的代码,这下原形毕露了。如下图:

列举几种常见tab和空格编码问题:
1. 代码中Tab和空格混排
需求:将空格转为Tab或Tab转为空格
解决方法:先设置自己的缩进设置,例如我是用4个空格缩进:set ts=4 sts=4 sw=4 et,然后敲入:ret可将代码中原有的Tab转成4个空格。后续编辑中,Tab键自动生成4个空格,你删除的时候,按一个删除键,删除的也是4个空格。如果你是用4个空格宽度的Tab缩进的,使用:set ts=4 sts=4 sw=4 noet,然后敲入:ret即可。

2. 行尾多余的空格和Tab
需求:删除多余空格
解决方法:输入:%s/\s*$//ge,将行尾多余空格删除。

二、换行相关

因为开发人员工具设置不同,导致两个文件换行符不同,或者同一个文件中出现多种换行符。
1. 转换文件换行方式
解决方法:设置fileformat属性,:set ff=dos (\r\n win换行) :set ff=unix (\n unix/linux换行) :set ff=mac (\r Mac换行)

2. 换行符混排(常见的情况是Win换行和Unix换行混排,VIM中会将文件识别为unix换行,在行尾显示^M)
需求:统一换行符
解决方法:输入:%s/\r//ge,将多余\r去掉,这时全部剩下\n换行然后保存。如果需要保存为win换行设置:set ff=dos再保存即可。

三、缩进对齐

类似Python的编码风格以缩进代表层级。这种情况将缩进层次多了,有时候很难确定这一段代码是否和上一段代码在同一缩进水平上。自己写了一个简单的函数,通过设置cc的值,来显示一条纵向的线作参考线。效果如下:

代码如下:快捷键Alt+o向左、Alt+u向左移动参考线

" --------------------------------------------------
" [参考线切换] {{{
" --------------------------------------------------
fu! ReferenceLine(t)
	let ccnum = &cc
	if ccnum == '' | let ccnum = 0 | en
	let csw = &sw
	if a:t == 'add'
		let ccnum = ccnum + csw
		exec "setl cc=".ccnum
	elsei a:t == 'sub'
		let ccnum = ccnum - csw
		if ccnum >= 0 | exec "setl cc=".ccnum | en
	en
endf
nn <silent> <A-u> :call ReferenceLine('sub')<CR>
nn <silent> <A-o> :call ReferenceLine('add')<CR>
" }}}

四、赋值符号对齐

有时候我们可能希望我们一段的赋值代码都用=号对齐,象下图这样:

解决方法:安装Tabular插件,选中要对齐的代码,输入:Tab/= 让代码通过=两边对齐。

Avatar_small
依云 说:
2013年5月29日 22:39

Python 那个用 indent_guides 啦。

Avatar_small
依云 说:
2013年5月29日 22:39

还有 cursorcolumn 也许也有用?

Avatar_small
左手 说:
2013年5月30日 18:41

indent_guides 这个是该尝试下。@依云:

Avatar_small
黑客信仰 说:
2013年5月31日 08:59

不错哦,这段时间整emacs。结果搞的emacs没整好,vim也用不熟了。
得回头在搞搞了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter