在学习使用vim的过程中随手记录的一些小东西,以便后期查询。

修改vim的tab为4空格

1
2
3
4
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab / expandtab

说明:

其中 tabstop 表示一个 tab 显示出来是多少个空格的长度,默认 8。

softtabstop表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用 expandtab时特别有用。

shiftwidth表示每一级缩进的长度,一般设置成跟 softtabstop 一样。

当设置成expandtab时,缩进用空格来表示,noexpandtab 则是用制表符表示一个缩进。

根据文件类型来设置tab:

有些时候想为某些类型的文件设置不同的 tab 表现,如 python 用四个空格来表示一个缩进,
在我们的 javascript 约定中也是用四个空格来表示缩进,而 HTML 和 CSS 则喜欢用 tab 制
表符来缩进,那么可以做如下设置:

1
2
3
4
if has("autocmd")
autocmd FileType javascript setlocal ts=4 sts=4 sw=4 expandtab
autocmd FileType python setlocal ts=4 sts=4 sw=4 expandtab
endif

这样当开打的文件是 .js .py 的,都会用四个空格来缩进。


在 Vim 中可以用特殊的符号来表示一个 tab 制表符,这样 tab 制表符和空格就可以很容易的区分看来
在 vimrc 中加入就可以了:

1
2
set list
set listchars=tab:▸\ ,eol:¬

vim进入插入模式命令

1
2
3
4
5
6
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行

VIM光标操作

1
2
3
4
5
6
7
8
9
10
11
h: 光标向左移动一位
j: 光标向下移动一位
k: 光标向上移动一位
l: 光标向右移动一位
gg: 移动光标至文件首行
G: 移动光标到文件末尾
nG: 移动光标至第n行
^: 光标移至当前行的首字符
$: 光标移至当前行的尾字符
w: 光标向右移动一个单词
b: 光标向左移动一个单词

历史命令记录

1
q:进入命令历史编辑。

类似的还有 q/ 可以进入搜索历史编辑。
注意 q 后面如果跟随其它字母,是进入命令记录。

可以像编辑缓冲区一样编辑某个命令,然后回车执行。
也可以用 ctrl-c 退出历史编辑,但此时历史编辑窗口不关闭,可以参照之前的命令再自己输入。

其他快捷键整理

1
2
3
4
5
6
7
8
9
10
ctrl + [: 等于ESC
3j: 往下移动3行,类似的还有 3k、3h、3l
ctrl+b,ctrl+f 上下翻一页
ctrl+d,ctrl+u 上下翻半页
zt 可以置顶当前行,通常用来查看完整的下文,比如函数、类的定义
zz 将当前行移到屏幕中部
zb 移到底部。
H 可以移动到屏幕的首行
L 到屏幕尾行
M 到屏幕中间

清除历史查询留下的高亮显示

当我们查找完后,想去除匹配的高亮,与之对应有两种常用的方法:

  1. 在命令模式下,匹配一个更长或内容上没有的内容,使之覆盖原有匹配.
  2. 在命令模式下,按 : ,输入noh,此时屏幕上原来的匹配已取消

替换查找

1
%s/xx/xx/g 替换 g代表是否全部替换

自动缩进

在Vim中还可以进行自动缩进,主要有cindent、smartindent和autoindent三种。

1
set cindent

Vim可以很好的识别出C和Java等结构化程序设计语言,并且能用C语言的缩进格式来处理程序的缩进结构。
可以使用以下命令,启用cindent缩进结构:

1
set smartindent

在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),
则取消缩进形式。此外还增加了识别C语言关键字的功能。
如果一行是以#开头的,那么这种格式将会被特殊对待而不采用缩进格式。可以使用以下命令,启用smartindent缩进结构:

1
set autoindent

在这种缩进形式中,新增加的行和前一行使用相同的缩进形式。可以使用以下命令,启用autoindent缩进形式。

缩进的编辑

1
2
3
4
5
6
7
正常模式下
>> 增加缩进
<< 减小缩进
编辑模式下
Ctrl-Shift-t 增加缩进
Ctrl-Shift-d 减少缩进

参考文献

Vim 入门教程 http://blog.jobbole.com/86132/
Vim 光标快速移动技巧总结 http://blog.csdn.net/u011729865/article/details/50196545
Vim 中如何快速进行光标移动 http://www.tuicool.com/articles/FFFrq2E
Vim 字符串查找替换 http://blog.sina.com.cn/s/blog_94a93cff0101b5gv.html
Vim 命令参考 http://dsec.pku.edu.cn/~jinlong/vi/Vi.html