在我看来,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'