vi
文本编辑器
学习原因
- 很多Linux系统都会内置 ” vi ” 文本编辑器
- 很多软件的编辑接口都会主动调用vi,如
crontab, visudom, edquota
(主要原因) - 编辑速度快
模式切换
graph TB;
一般模式--:-->命令行模式;
命令行模式--esc-->一般模式;
一般模式--"a/i/o..."-->编辑模式;
编辑模式--esc-->一般模式;
在 vi 中,”数字” 是很有意义的!数字通常代表重复做几次的意思,也有可能是代表去到第几个什么什么的意思。如10x, 删除10个连续字符; 3dd, 连续删除3行;3gg,跳转到第三行
shift + 小写字母 = 大写字母
一般模式
vi 启动后的默认模式,此模式下可移动光标,删除,复制,粘贴数据。
移动光标
快捷键 | 动作 |
---|---|
h 或 向左方向键(←) | 光标向左移动一个字符 |
j 或 向下方向键(↓) | 光标向下移动一个字符 |
k 或 向上方向键(↑) | 光标向上移动一个字符 |
l 或 向右方向键(→) | 光标向右移动一个字符 |
ctrl + f | 屏幕”向下”移动一页,相当于 Page Down |
ctrl + b | 屏幕”向上”移动一页,相当于 Page Up |
ctrl + d | 屏幕”向下”移动半页 |
ctrl + u | 屏幕”向上”移动半页 |
+ | 光标移动到非空白字符的下一行行首 |
- | 光标移动到非空白字符的上一行行首 |
n + space | n 表示”数字”,按下数字后再按空格键,光标会向右移动 n 个字符 |
0 或功能键Home | 数字” 0 “,移动到行首 (常用) |
$ 或功能键End | 移动到行末(常用) |
H | 光标移动到屏幕上方第一行行首 |
M | 光标移动到屏幕中央行行首 |
L | 光标移动到屏幕下方最后一行行首 |
gg | 移动到文件第一行(常用) |
n + gg | n为数字,光标移动到文件的第n 行 |
G | 移动到这个文件的最后一行(常用) |
n + G | n 为数字,移动到这个文件的第 n 行 |
n + Enter | n 为数字,光标向下移动 n 行(常用) |
ctrl + o | 回到上一次光标所在的位置(完成跳转后才能使用) |
w | 移动到下一个单词的开头, (猜测,w=word) |
b | 移动到上一个单词的开头, (猜测, b=before) |
e | 到当前单词结尾, (猜测, e=end) |
f<单个字符> | 行内查找,向”后”搜索<字母>并跳转到第一个匹配的位置(常用) |
F<单个字符> | 向”前”搜索<字母>并跳转到第一个匹配的位置 |
查找与替换
命令 | 动作 |
---|---|
/word | 向光标之下寻找 word |
?word | 向光标之上寻找 word |
n | 重复前一个搜寻的动作。如果执行 /vbird 向下搜寻 vbird,按下 n 后,会向下继续搜寻 vbird;如果执行 ?vbird 的话,那么按下 n 则会向上继续搜寻 vbird |
N | 与 n 刚好相反,反向进行前一个搜寻动作。例如 /vbird 后,按下 N 则表示向上搜寻 vbird |
:n1,n2s/word1/word2/g | n1,n2 为数字,将行[n1, n2]中的word1替换为word2。如将100~200行中的1全部替换为a,则:“:100,200s/1/a/g”。(常用) |
---|---|
:1,$s/word1/word2/g | 将1~最后一行中的word1替换为word2 |
:1,$s/word1/word2/gc | 将1~最后一行中的word1替换为word2,替换前询问是否替换 |
删除,复制,粘贴
快捷键 | 动作 |
---|---|
x | 删除光标处的字符 |
X | 删除光标前的字符 |
nx | n 为数字,连续向后删除 n 个字符 |
D | 删除光标所在处~行尾的数据 |
dd | 删除光标所在的行 |
n + dd | n 为数字,删除光标所在的向下 n 行 |
d + 1 + gg | 删除光标所在行到第一行的数据 |
dG | 删除光标所在行到最后一行的数据 |
d$ | 删除光标所在处到行末的字符 |
d0 | 删除光标所在处到行首的字符 |
yy | 复制光标所在行 |
n + yy | n 为数字,复制光标所在的向下 n 行 |
y1G | 复制光标所在行到第一行的数据 |
yG | 复制光标所在行到最后一行的数据 |
y0 | 复制光标所在行到最后一行的数据 |
y$ | 复制光标所在处到行末的字符 |
p | 将复制的内容粘贴在光标下一行 |
P | 将复制的内容粘贴在光标上一行 |
J | 将光标所在行与下一行的数据合成一行 |
u | 撤销前一个动作,类似于windows中的ctrl + z |
U | 撤销当前行的所有修改 |
ctrl + r | 重复上一个动作 |
. | 重复上一个动作 |
编辑模式
在一般模式下,按以下字符可进入编辑模式,此时界面下方会出现INSERT/REPLACE,按 ” esc ” 返回一般模式
# 插入
i 从光标所在处插入
I 从所在行的第一个非空白字符处开始插入
a 从光标所在的下一个字符处开始插入
A 从光标所在行的最后一个字符处开始插入
o 在光标所在的下一行插入新的一行
O 在光标所在的上一行插入新的一行
# 替换
r 替换光标所在的那个字符
R 一直替换光标所在的文字, 直到按下 ESC 为止
命令行模式
在一般模式下按 ” : “可进入命令行模式,此模式下可进行读取文件,保存,设置,执行命令等操作
在vi中,! 经常具有强制的意思
操作 | 动作 |
---|---|
w | 将编辑的数据写入硬盘文件中(常用) |
w! | 若文件属性为” 只读 “时,强制写入该文件。不过,到底能不能写入, 还是与对该文件的文件权限有关 |
q | 离开 vi (常用) |
q! | 若曾修改过文件,又不想储存,使用 ! 为强制离开并且不存储修改 |
wq | 储存后离开,若为 :wq! 则为强制储存后离开 (常用) |
ZZ | 若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开! |
w [filename] | 另存为 |
r [filename] | 读入文件 |
n1,n2 w [filename] | 将行 [n1, n2] 的内容保存到 filename中 |
! command | 暂时离开vi,执行bash命令 |
set nu | 显示行号 |
set nonu | 与 set nu 相反,取消行号 |
ce | 使本行文本居中(center) |
ri | 使本行文本靠右(right) |
le | 使本行文本靠左(left) |
>, >> | 将光标所在行的数据向右缩进 |
<, << | 将光标所在行的数据向左缩进 |
n | 编辑下一个文件,vi 1.txt 2.txt 3.txt |
N | 编辑上一个文件 |
files | 列出目前打开的文件 |
块选择(visual block)
快捷键 | 做的 |
---|---|
v | 字符选择,选择光标经过的区域,再按一次取消选取 |
V | 行选择,选择光标经过的行,再按一次取消选取 |
ctrl + v | 块选择,块状选择数据,再按一次取消选取 |
y | 复制选中的数据 |
d | 删除选中的数据 |
p | 粘贴 |
多窗口
w = window
命令 | 动作 |
---|---|
sp filename | 上下分割窗口,打开文件 |
vsplit filename | 左右分割窗口,打开文件 |
ctrl + w + w | 将光标移到下一个窗口 |
ctrl + w+ j 或 ↓ | 光标移动到下方的窗口 |
ctrl + w + k 或 ↑ | 光标移动到上面的窗口 |
ctrl + w + h | 光标移动到左边的窗口 |
ctrl + w + l | 光标移动到右边的窗口 |
vim
“vim”,全称 “vi Improved”,”vi” 的增强版 。
记录
vim会将曾经做过的操作全部记录下来,保存在~/.viminfo。
vim配置
配置文件路径: ~/.vimrc
插件安装
参考链接
https://wizardforcel.gitbooks.io/vbird-linux-basic-4e/content/78.html