在我看来,vim是linux上内置的强大的文本编辑器。
基本操作
vim有三种模式:一般模式、编辑模式和命令行模式。 使用’i, I, o, O, a, A, r, R'按键可以从一般模式进入到编辑模式。 使用’:, /, ?‘按键可以从一般模式进入到命令行模式。 通过[ESC]按键可以从其他模式进入到一般模式。
一般模式可用快捷键
下面表格中的 n 都表示数字
光标移动
| 按键 | 说明 |
|---|---|
| h或向左箭头(←) | 光标向左移动一个字符 |
| j或向下箭头(↓) | 光标向下移动一个字符 |
| k或向上箭头(↑) | 光标向上移动一个字符 |
| l或向下箭头(→) | 光标向右移动一个字符 |
| [ctrl + f] | 屏幕向下移动一页,同[page down] |
| [ctrl + b] | 屏幕向上移动一页,同[page up] |
| [ctrl + d] | 屏幕向下移动半页 |
| [ctrl + u] | 屏幕向上移动半页 |
| + | 光标移动到非空格符的下一行 |
| - | 光标移动到非空格符的上一行 |
| n [space] | n 为数字,按下数字后,再按下空格,光标会向右移动这一行的n个字符 |
| 0 或 [Home] | 光标移动到这行最前面字符处 |
| $ 或 [End] | 光标移动到这行最后面字符处 |
| H | 光标移动到这个屏幕的最上方那行的第一个字符处 |
| M | 光标移动到这个屏幕的中央的那行的第一个字符处 |
| L | 光标移动到这个屏幕的最下方的那行的第一个字符处 |
| G | 光标移动到这个文件的最后一行 |
| nG | 光标移动到这个文件的第n行 |
| gg | 光标移动到文件的第一行 |
| N [enter] | 光标向下移动n行 |
查找
| 按键 | 说明 |
|---|---|
| :n1,n2s/word1/word2/g | n1, n2为数字,在第n1与n2行之间查找word1,并将该字符串替换为word2 |
| :1,$s/word1/word2/g | 全文查找word1,并将该字符串替换为word2 |
| :1,$s/word1/word2/gc | 全文查找word1,并将该字符串替换为word2,需要用户确认 |
使用正则表达示查找替换时,需要注意正则表达式的正确使用。其他符号同普通正则相同,但是以下需要转义:
| 元字符 | 含义 |
|---|---|
| \+ | 匹配1-任意个前一个字符 |
| \? | 匹配0-1个前一个字符 |
| \{n,m} | 匹配n-m个前一个字符 |
| \{n} | 匹配n个前一个字符 |
| \{n,} | 匹配n-任意个前一个字符 |
| \{,m} | 匹配0-m个 |
| \< | 匹配单词词首 |
| \> | 匹配单词词尾 |
删除、复制、粘贴
| 按键 | 说明 |
|---|---|
| x, X | x为向后删除一个字符,X为向前删除一个字符 |
| nx | 连续向后删除n个字符 |
| dd | 删除光标所在行 |
| ndd | 删除光标所在的向下n行 |
| d1G | 删除光标所在到第一行的所有数据 |
| dG | 删除从光标所在到最后一行的所有数据 |
| d$ | 删除光标所在处到该行的最后一个字符 |
| d0 | 删除光标所在处到该行最前面的一个字符 |
| yy | 复制光标所在的那一行 |
| nyy | 复制光标所在的向下n行 |
| y1G | 复制光标所在行到第一行的所有数据 |
| yG | 复制光标所在行到最后一行的所有数据 |
| y0 | 复制光标所在的字符到该行行首的所有数据 |
| y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
| p, P | p为将已复制的数据在光标下一行粘贴,P为粘贴在光标的上一行 |
| J | 将光标所在行与下一行的数据结合成同一行 |
| c | 重复删除多个数据,例如向下删除10行 [10cj] |
| u | 复原前一个操作 |
| [ctrl + r] | 重复上一个操作 |
. | 重复前一个操作 |
命令行模式命令
| 按键 | 说明 |
|---|---|
| :w | 将编辑的数据写入硬盘文件中 |
| :w! | 强制写入,不一定成功 |
| :q | 离开文件 |
| :q! | 强制离开而不保存文件 |
| :wq 或 :x | 保存后离开 |
| ZZ | 若文件没有改动,则不保存离开,若文件已经被改动,则保存后离开 |
| :w[filename] | 将编辑的数据保存成另一个文件 |
| :r[filename] | 在编辑的数据中,读入另一个文件,并将数据加到光标所在行后面 |
| :n1,n2 w[filename] | 将n1到n2的内容保存成名为filename的文件 |
多窗口功能
- 使用大写的O参数来垂直分屏
vim -O file1 file2
2.使用小写的o参数来水平分屏 bash vim -o file1 file2 3. 关闭当前窗口,不能关闭最后一个窗口 bash ctrl+w c 4. 关闭当前窗口,如果只剩下最后一个了,则退出vim bash ctrl+w q 5. 上下分割当前打开的文件 bash ctrl+w s 6. 上下分割,并打开一个新的文件 bash :sp filename 7. 左右分割当前打开的文件 bash Ctrl+w v 8. 左右分割,并打开一个新的文件 :vsp filename 9 把光标移到右边的屏 bash Ctrl+w l 10. 把光标移到左边的屏中 bash Ctrl+w h 11. 把光标移到上边的屏中 bash Ctrl+w k 12. 把光标移到下边的屏中 bash Ctrl+w j 13. 把光标移到下一个的屏中 bash Ctrl+w w 14. 向右移动屏幕 bash Ctrl+W L 15. 向左移动屏幕 bash Ctrl+w H 16. 向上移动屏幕 bash Ctrl+w K 17. 向下移动屏幕 bash Ctrl+W J
vim的一些设置
vim设置内容往往通过修改~/.vimrc来进行一些默认的设置(其注释是 “) 可以参考像 IDE 一样使用 vim
# 将不可见字符显示出来
set invlist
# 开启实时搜索功能
set incsearch
# 搜索时大小写不敏感
set ignorecase
# 关闭兼容模式
set nocompatible
# vim 自身命令行模式智能补全
set wildmenu
# 打开语法高亮
syntax on
# 自适应不同语言的智能缩进
filetype indent on
# 将制表符扩展为空格
set expandtab
# 设置编辑时制表符占用空格数
set tabstop=4
# 设置格式化时制表符占用空格数
set shiftwidth=4
# 让 vim 把连续数量的空格视为一个制表符
set softtabstop=4
set cindent
# 总是显示状态栏
set laststatus=2
# 显示光标当前位置
set ruler
# 开启行号显示
set number
# 高亮显示当前行/列
set cursorline
set cursorcolumn
# 高亮显示搜索结果
set hlsearch
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
set showmatch
# 禁止折行
set nowrap
# 设置状态栏主题风格
let g:Powerline_colorscheme='solarized256'