为何要学vim
- 所有的UNIX-like系统都会内置vi文本编辑器
- 很多软件的编辑接口都会主动调用vi(例如:crontab、visudo、edquota命令等)
- vim具有程序编辑的能力,可以主动地以字体颜色辨别语法的正确性,方便程序设计
vi 3种模式
一般命令行模式
按键 | 描述 |
---|---|
h | 光标左移 |
j | 光标下移 |
k | 光标上移 |
l | 光标右移 |
[ctrl]+f | 屏幕向下移动一页 |
[ctrl]+b | 屏幕向上移动一页 |
[ctrl]+d | 屏幕向下移动半页 |
[ctrl]+u | 屏幕向上移动半页 |
+ | 光标移动到非空格符的下一行 |
- | 光标移动到非空格符的上一行 |
0或[home] | 移动到这一行的最前面字符处 |
$或[end] | 移动到这一行的最后面字符处 |
H | 光标移动屏幕最上方那一行的第一个字符 |
M | 光标移动到屏幕的中央那一行的第一个字符 |
L | 光标移动带屏幕的最下方那一行的第一个字符 |
G | 移动到这个文件的最后一行 |
nG | n为数字,移动到这个文件的第n行 |
gg | 移动到这个文件的第一行,相当于1G |
n | n为数字,光标向下移动n行 |
按键 | 描述 |
---|---|
/word | 向下寻找字符串 |
?word | 向上寻找字符串 |
n | 重复前一个查找操作,继续向下查找 |
N | 反向,向上查找 |
:n1,n2s/word/word2/g | 在n1与n2行之间寻找word1替换为word2 |
:1,$s/word1/word2/g | 从一行到最后一行寻找word1,替换为word2 |
:1,$s/word1/word2/gc | 从一行到最后一行寻找word1,替换为word2,替换前提示确认 |
按键 | 描述 |
---|---|
x与X | x为向后删除(相当于[del]),X为向前删除(相当于[Backspace]) |
nx | n为数字,连续向后删除n个字符 |
dd | 删除(剪切)光标所在的那一整行 |
ndd | n为数字,删除(剪切)光标所在的向下n行 |
d1G | 删除(剪切)光标所在到第一行的所有数据 |
dG | 删除(剪切)光标所在到最后一行的所有数据 |
d$ | 删除(剪切)光标所在处,到该行的的最后一个字符 |
d0 | 删除(剪切)光标所在处,到改行的最前面一个字符 |
yy | 复制光标所在那一整行 |
nyy | n为数字,复制光标所在向下n行 |
y1G | 复制光标所在行到第一行的所有数据 |
yG | 复制光标所在行到最后一行的所有数据 |
y0 | 复制光标所在的那个字符到该行行首的所有数据 |
y$ | 复制光标所在的那个字符到该行行尾的所有数据 |
p与P | p为已复制的数据在光标下一行粘贴,P则为粘贴在上一行 |
J | 将光标所在行与下一行的数据结合成一行 |
c | 重复删除多个数据 |
u | 恢复前一个动作 |
[ctrl]+r | 重做上一个操作 |
. | 重复上一个操作 |
一般命令模式切换到编辑模式的可用的按键
按键 | 描述 |
---|---|
i与I | i为【从目前光标所在处插入】,I为【在目前所在行的第一个非空格字符处开始插入】 |
a与A | a为【从目前光标所在的下一个字符处开始插入】,A为【从光标所在行的最后一个字符处开始插入】 |
o与O | o为【在目前光标所在的下一行处插入新的一行】,O为【在目前光标所在的上一行处插入新的一行】 |
r与R | r只会替换光标所在的那个字符一次,R会一直替换光标所在的文字,知道按下[Esc]为止 |
[Esc] | 退出编辑模式 |
一般命令模式切换到命令行模式的可用按键
按键 | 描述 |
---|---|
:w | 将编辑的数据写入硬盘文件中 |
:w! | 强制写入该文件 |
:q | 退出vi |
:wq | 保存退出 |
ZZ | 若文件没有修改,则不保存退出,若文件已修改,则保存后退出 |
:w [filename] | 将编辑的数据保存成另一个文件 |
:r [filename] | 在编辑的数据中,读入另一个文件的数据,亦将【filename】这个文件内容加到光标所在行 |
:n1,n2 w [filename] | 将n1到n2的内容保存为filename这个文件 |
:! command | 暂时退出vi到命令行模式执行command的显示结果 |
:set | nu |
:set | nonu |
vim缓存
- O:打开文件为只读文件
- E:用正常的方式打开编辑文件,并不会加载缓存内容
- R:加载缓存的内容
- D:删除缓存
- Q:退出vim
- A:忽略操作
vim额外功能
按键 | 描述 |
---|---|
v | 字符选择 |
V | 行选择 |
[ctrl]+v | 可视区块,可以用矩形选择 |
y | 将反白的地方复制 |
d | 将反白的地方删除 |
p | 在光标处粘贴 |
按键 | 描述 |
---|---|
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出目前这个vim开启的所有文件 |
按键 | 描述 |
---|---|
:sp | [filename] |
[ctrl]+w+j/↓ | 光标移动到下方窗口 |
[ctrl]+w+k/↑ | 光标移动到上方窗口 |
[ctrl]+w+q | 关闭所在窗口 |
按键 | 描述 |
---|---|
[ctrl]+x->[ctrl]+n | 以文件的内容文字作为关键词补齐 |
[ctrl]+x->[ctrl]+f | 以当前的目录内的文件名作为关键词补齐 |
[ctrl]+x->[ctrl]+o | 以扩展名作为语法补充,以vim内置的关键词补齐 |
vim环境设置:/.vimrc、/.viminfo
按键 | 描述 |
---|---|
:set nu/nonu | 设置与取消行号 |
:set hlsearch/nohlsearch | 是否将查找的字符串反白,默认hlserach |
:set autoindent/noautoindent | 是否自动缩进 |
:set backup | 是否自动备份 |
:set ruler | 是否显示右下角状态栏说明 |
:set showmode | 是否显示–INSERT–之类的左下角的状态栏 |
:set backspace=(012) | 一般进入编辑模式可以删除任意字符,但是某些发行版则不许如此。此时设置为2时,就是可以删除任意值,0或1仅可删除刚刚输入的字符,而无法删除原本存在的文字 |
:set all | 显示目前所有环境参数设置值 |
:set | 显示与系统默认值不同的设置参数 |
:syntax on/off | 是否开启语法提示 |
:set bg=dark/light | 显示不同色调 |
笔记源自《鸟哥的Linux私房菜》