==================
vi command
==================
vi a.txt
用vi编辑器编辑a.txt,如果不存在则建立空文件,默认是一般模式;
---
a(光标后) i(光标前) r(替换光标字符) o(下一行) A(行尾) I(行首) R(同r) O(上一行)
都可从 一般模式 进入 编辑模式
---
Esc
可以从 编辑模式 进入 一般模式
---
:
从 一般模式 进入 命令模式,输入取消、保存等指令
---
/
从 一般模式 进入 命令模式,可以进行搜索;
---
wq
命令默认下,保持文件,并退出;
q
命令默认下,退出;
q!
命令默认下,取消对文件的修改,并退出;
---
=========
一般模式
=========
h 或 左箭头
左
j 或 下箭头
下
k 或 上箭头
上
l 或 右箭头
右
---
ctrl+f
向前翻页
ctrl+b
向后翻页
ctrl+d
向前翻半页
ctrl+u
向后翻半页
---
0 或 home
移动到该行第一个字符
$ 或 end
移动到该行最后一个字符
n<space>
向右移动n个字符
---
G
移动到最后一行
[i] gg
移动到第 i 行,省略 i 则移动到第1行,
n<Enter>
向下移动n行
---
={motion}
apply motion to specify lines, the default motion is indenting,
e.g.
gg=G
apply indenting to whole file,
---
w
后1个单词 词首
e
后1个单词 词尾,(当前如果在单词中,且不是词尾,则到当前单词的词尾,)
b
前1个单词 词首
---
/word
向下搜索 word
?word
向上搜索 word
---
x
向后删除1个
3x
向后删除3个
X
向前删除1个
4X
向前删除4个
---
dd
删除/剪切 整行
3dd
删除/剪切 包括当前行向下的3行
dw
删除/剪切 单词
3dw
删除/剪切 当前向右的3个单词
d光标移动
删除/剪切 光标移动的 字符 或 行,输入d 然后移动光标,如果光标向左则删除左边的1个字符,向右则删除当前字符(相当于 x),向上则删除当前行和上一行,向下则删除当前行和下一行,跳转行则删除2行之间(包括2行)的所有行,
---
yy
复制所在行
3yy
包括当前行复制向下3行
yw
复制 光标之后的第1个单词,光标当前所在单词仅复制光标及其后的部分(而不是整个单词),光标后的第1个空白符也被复制(如果存在),
3yw
复制 光标之后的3个单词,
---
p
粘贴在当前行下
P
粘贴在当前行上
---
u
undo
ctrl + r
redo
---
:i
跳转到第 i 行
---
ctrl + shift + >>
shift right current line
2 ctrl + shift + >>
shift right 2 line
ctrl + shift + <<
shift left current line
2 ctrl + shift + <<
shift left 2 line
=========
一般模式 ---> 编辑模式
=========
i
在当前光标前插入字符
I
在当前行首前插入字符
---
a
在当前光标后插入字符
A
在当前行尾插入字符
---
o
在当前行 下 新开一行,插入字符
O
在当前行 上 新开一行,插入字符
---
r,R
准备替换当前字符,替换后仍回到一般模式
=========
编辑模式 ---> 一般模式
=========
Esc
退出编辑模式,进入一般模式
---
=========
一般模式 ---> 命令行模式
=========
:
进入命令行模式
---
=========
命令行模式
=========
w
保存
w!
强制保存,即使是只读文件,只要用户的权限够,就可以保存
q
退出vi,如果文件已经改变且尚未保存则报错;
q!
取消修改,并退出vi
wq
保存并退出
wq!
强制保存并退出
---
w b.txt
当前文档另存为b.txt
---
r c.txt
将c.txt的内容加入到 当前文档中 光标处,
---
set nu
显示行号
set nonu
取消行号
---
set ai
自动缩进
set noai
不自动缩进
---
set list
显示 tab 和 行尾 字符, tab 用 ^I 表示,行尾用 $ 表示,
set nolist
不显示 tab 和 行尾 字符,
---
set tablestop=x
设置 tab 的大小,
---
set all
查看 当前设置
---
help [command]
显示帮助,用 :q 退出帮助
---
n
切换到下个文件
e#
切换到上个文件
---
[a,b|% ]s/xx/yy[/gic]
将 xx 替换为 yy,
a b 分别指定 起始 和 结尾 行号,如果未指定则默认对当前行起作用, . 表示当前行, $ 表示末行, % 表示所有行
g 表示替换所有的匹配,如果 未指定 g 则仅替换每行中的第1个匹配,
i 表示忽略大小写,如果 未指定 i 则大小写敏感,
c 表示是否对每次替换进行确认,如果指定 c,则每个匹配的替换要确认,输入 y 或 n 确认,
支持通配符,特殊字符要用 \ 转义,如 \. ,
例子:
s/xx/yy
将当前行中 第1个 xx 替换为 yy
10,$ s/xx/yy
从第10行 到末尾,将每行中 第1个 xx 替换为 yy
% s/xx/yy/g
所有行中 所有的 xx 替换为 yy
% s/\./y/g
所有行中 所有的 . 替换为 y
% s/\ \+/\ /g
替换所有的连续空格为1个空格,
% s/tesT/abcdef/gi
替换所有 test(不区分大小写),
% s/test/abcdef/gc
替换所有 test,每次替换都要求确认,
=========
一般模式 ---> 搜索模式
=========
/
向下搜索
?
向上搜索
n
下一处
shift+n
上一处
---