Vim 知识整理
10 Jun 2013继上次 Ubuntu 知识整理后, 今天对 Vim 进行一下整理.
Vim 教程推荐
作者的英文发音挺奇怪的, 不过我觉得还蛮好听的, 尤其是那些弹舌音.
关于 buffer 的快捷键
退出在 buffer 中的文件
:bd[num]
查看 buffer 中的文件
:ls
在 buffer 中切换
:bn[ext]
:bp[revious]
:bf[irst]
:b[num]
:b#
bp 与 b# 的区别是, bp 的上一个针对的是在 ls 命令中显示的顺序, 而 b# 代表的是切换到上一次访问文件. b[num] 切换到 ls 中显示的对应编号的文件.
假如你 ls 显示的内容是下面这样的:
1 # "file_a"
2 "file_b"
3 %a "file_c"
- bd 删除 file_c
- bd2 删除 file_b
- bn 切换到 file_a
- bp 切换到 file_b
- bf 切换到 file_a
- b2 切换到 file_b
- b# 切换到 file_a
expandtab, shiftwidth, softtabstop, tabstop 的区别与含义
" 使用空格代替 tab
set expandtab
" normal 模式下使用 >>, << 和 Insert 模式下使用 <C-t>, <C-d> 进行缩进的长度
set shiftwidth=4
" Insert 模式下使用 Tab 键进行缩进的长度
set softtabstop=4
" Tab 的长度. 如果没有开启 expandtab 选项, vim 会对缩进的空格进行转换, 假如缩进长度为 n, 将转换成 n / tabstop 个 tab 加 n % tabstop 个空格
set tabstop=8
要更好的理解这之间的区别就是要搞清楚缩进的含义. 缩进就是插入空格, 至于空格是否会被转换成制表符, 就需要看 expandtab 选项是否开启, 而空格如何转换成制表符则是根据 tabstop 的值来确定.
Note: 使用 set list 来显示不可见字符, 比如, 制表符对应的字符就是 ^I.
Vim 中删除空行
# :[range]g[lobal]/{pattern}/[cmd]
:g/^$/d
具体的关于 global 的使用方法可以使用 :h global 来查看手册.
zR 与 zi 的区别
zR: 设置 foldlevel 的值为最高值.
zi: 对 foldenable 的值取反.
Vim 中每一个 fold 都有一个开关的属性. 每次 set foldlevel 都会根据 foldlevel 的值修改每个 fold 的开关情况. set foldenable 则只设置全局是否开启折叠,并不会修改每个 fold 的开关情况.
这样的话 zR, zi 的区别就很好理解了
递增/递减数字
Ctrl-a/x: 光标所在位置如果是数字的话则加/减 1.
Vim 中限制替换区域
假如你有一段代码是这样的.
foo(){
// do something
}
bar() {
// do something
}
如果你希望使用 :s 命令在所有前面没有空格的大括号之前加上空格, 那么就需要使用到 \zs, \ze 来对替换区域进行限制.
:%s/)\zs{/ {/g
好吧, 我必须得承认这个例子举的很烂, 你完全可以不使用 \zs 来完成这个任务.
:%s/){/) {/g