最基本:
1.*关于退出:*
:wq! ----强制保存退出
:wq ---- 保存退出
: x ----- 作用和:wq 一样
ZZ ---- 作用和:wq一样,(注意Z是大写的,并且不是在命令模式)
:q ---- 退出
:q! --- 强制退出
========================================================
2.*关于移动:*
h : 在当前行向左移动一个字符
j: 移动到下一行
k:移动到上一行
l:在当前行向右移动一个字符
:n 将光标定位到第n行
: $ 将光标定位到最后一行
0 将光标定位到本行的行首
$ 将光标定位到本行的行尾
2$ 会移动到下一行的行尾,如此类推。
gg 跳到全文行首
G 将光标定位到本文章的最后一行,与: $功能相同。
n+ //向下跳n行
n- //向上跳n行
nG //跳到行号为n的行
H 将光标定位到屏幕的顶端
M 将光标定位到屏幕的中间
L 将光标定位到屏幕的底端
"90%" 移到差不多结尾的位置
Ctrl+u 向文件首翻半屏
Ctrl+d 向文件尾翻半屏
Ctrl+f 向文件尾翻一屏
Ctrl+b 向文件首翻一屏
:tabnew 在一个VI/vim的屏幕最上一排有不同的标签,用gt或者鼠标点切换标签.
ctrl + W W 左右窗口切换
Ctrl+g 在最后一行中显示光标所在位置的行数及文章的总行数
=============================================================
3.*关于搜索:*
/: 后面跟要查找的东西,在文件中向前搜索
?:后面跟要查找的东西,在文件中向后搜索
n: 向前重复搜索
N: 向后重复搜索
=============================================================
4.*关于复制*
yy: 复制光标当前行
nyy: 复制光标当前行到当前行以下的n-1行
:1,100 co 200 将1~100的内容复制到第200行。
:100,102 co $ 将100~102行的内容复制到最后一行。
==============================================================
5.*关于粘贴:*
p : 粘贴到当前行的下一行
P(大) : 粘贴到当前行的 上一行
粘帖系统剪切板的内容
==============================================================
6.*关于删除.剪切:*
dd 删除当前行
ndd 与nyy相似
dw 删除一个单词
ndw 与ndd相似
x 删除一个字符
nx 删除n个字符
dG 删除当前光标到文件末尾的所有内容。
d0 删除当前光标到本行行首的所有内容
d$ 删除当前光标到本行行尾的所有内容
:1,100d 删除1~100
:100d 删除第100行
:1,100 mo $ 将1~100行的内容移动到最后一行。
======================================================
7.*关于插入:*
i: 在当前位置的字符前面进入插入模式
I: 在当前行的开头进行插入
a: 在当前位置的字符后面进入插入模式
A: 在当前行的结尾进行插入
o: 在当前行下面打开一个新行进行插入
O:在当前行上面打开一个新行进行插入
J : //合并光标所在行及下一行为一行(依然在命令模式)
======================================================
8.*关于撤销:*
u: 撤销上一次的更改
U 取消对行所作的所有改变
ctrl+r 撤销你的撤销
. 这个命令是用来重复上一命令的
=======================================================
v ctrl+q (windows下)选定文本 横竖
实用编辑命令:
编码:
fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。
w或W: 将光标移到下一个字
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
% 用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。
< 文本缩进
> 文本
== 当前行自动缩进对齐(又称自动格式化)
n== 当前行---n+当前行自动缩进对齐
gg=G 当前文件所有行自动缩进对齐
/<c-r><c-w> 将当前单词添加到搜索栏
ctrl-o 暂时进入普通模式,执行完一个命令之后,Vim返回插入模式
ma 进行标记。a是我们对这一 行所做的标记的名称,做了这样的标记以后我们可以 ‘a 使我们快速的移到刚才我们所做标记的地方。这里’是单引号, :marks vi就会列出当前的所有的标记。
d‘a 来删掉这一行。
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
vaw 选择一个单词
vas 选择一个句子
vap 选择一个断落
以下命令可以对标点内的内容进行操作。
ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容
另外如果把上面的i改成a可以连配对标点一起操作。
fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。
w或W: 将光标移到下一个字
* 转到当前光标所指的单词下一次出现的地方
# 转到当前光标所指的单词上一次出现的地方
% 用来进行小括号、中括号和大括号的匹配。这要看当前光标指向的是什么符号了。
< 文本缩进
> 文本
== 当前行自动缩进对齐(又称自动格式化)
n== 当前行---n+当前行自动缩进对齐
gg=G 当前文件所有行自动缩进对齐
/<c-r><c-w> 将当前单词添加到搜索栏
ctrl-o 暂时进入普通模式,执行完一个命令之后,Vim返回插入模式
ma 进行标记。a是我们对这一 行所做的标记的名称,做了这样的标记以后我们可以 ‘a 使我们快速的移到刚才我们所做标记的地方。这里’是单引号, :marks vi就会列出当前的所有的标记。
d‘a 来删掉这一行。
'' 跳转到光标上次停靠的地方, 是两个', 而不是一个"
vaw 选择一个单词
vas 选择一个句子
vap 选择一个断落
以下命令可以对标点内的内容进行操作。
ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容
另外如果把上面的i改成a可以连配对标点一起操作。
[[ 跳转到代码块的开头去(但要求代码块中'{'必须单独占一行)
]p 和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。
将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排
使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中
]p 和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置。
将光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照C语言格式缩排
使用:reg命令可以看到所有寄存器中的内容,使用"+y或者"*y可以将visual mode下选择的内容拷贝到系统剪切板,使用"+p或者"*p可以将剪切板中的内容粘贴到VIM中
xp 可瞬间交换前后两个字
ddp 上下两行调换
dG 删除所有行
dt" → 删除所有的内容,直到遇到双引号
:3,$s/^/some string /g 在文件的第一行至最后一行的行首插入“some string”。
:%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
:%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
:3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”
:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除
:g/^/exec “s/^/”.strpart(line(”.”).” “, 0, 4) 在行首插入行号
:1,20s/^/\/\//g 注释1到20行 //
把光标放在"t"上,按"gUw",文本变为
" hello THE world! "
ddp 上下两行调换
dG 删除所有行
dt" → 删除所有的内容,直到遇到双引号
:3,$s/^/some string /g 在文件的第一行至最后一行的行首插入“some string”。
:%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
:%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
:3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”
:g/^\s*$/d 将所有不包含字符(空格也不包含)的空行删除
:g/^/exec “s/^/”.strpart(line(”.”).” “, 0, 4) 在行首插入行号
:1,20s/^/\/\//g 注释1到20行 //
把光标放在"t"上,按"gUw",文本变为
" hello THE world! "
把光标放在"t"上,按"gU$",文本变为
" hello THE WORLD! "
" hello THE WORLD! "
:r !date 导入当前时间
ggguG 把整个文章全部小写
ggguG 把整个文章全部小写
关于窗口
分屏命令总结:
:sp filename 在当前窗口上面新开一个窗口文件名为filename
:vsp filename在当前窗口左右开一个
Ctrl +w l 光标移动到右边,依此递推h j k
Ctrl +w = 让所有窗口对齐等高
Ctrl +w + 增加高度/宽度
Ctrl +w – 减少
Ctrl +w 9> 一次性增加9个单位的高度/宽度 ; < 减小
:tabnew 新建标签页
:tabf test* 在新tab中打开搜索到的文件
:tabs可以显示已打开标签页的列表
命令:tabc可以关闭当前标签页。而命令:tabo将关闭所有的标签页。
命令:tabp或gT将移动到上一个标签页
命令:tabn或gt可以移动到下一个标签页。
使用:tabdo命令,我们可以同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。
默认情况下,只有用户新建了标签页才会在窗口上方显示标签栏,这是由选项set showtabline=1决定的。如果我们希望总是显示标签栏,那么可以用set showtabline=2命令来设置。如果我们希望完全不显示标签栏,那么可以使用set showtabline=0来设置。
分屏命令总结:
:sp filename 在当前窗口上面新开一个窗口文件名为filename
:vsp filename在当前窗口左右开一个
Ctrl +w l 光标移动到右边,依此递推h j k
Ctrl +w = 让所有窗口对齐等高
Ctrl +w + 增加高度/宽度
Ctrl +w – 减少
Ctrl +w 9> 一次性增加9个单位的高度/宽度 ; < 减小
:tabnew 新建标签页
:tabf test* 在新tab中打开搜索到的文件
:tabs可以显示已打开标签页的列表
命令:tabc可以关闭当前标签页。而命令:tabo将关闭所有的标签页。
命令:tabp或gT将移动到上一个标签页
命令:tabn或gt可以移动到下一个标签页。
使用:tabdo命令,我们可以同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。
默认情况下,只有用户新建了标签页才会在窗口上方显示标签栏,这是由选项set showtabline=1决定的。如果我们希望总是显示标签栏,那么可以用set showtabline=2命令来设置。如果我们希望完全不显示标签栏,那么可以使用set showtabline=0来设置。
插入模式下输入ctrl+r,然后输入=,输入任意算数式,比如333*2,回车,即可看到结果。
般来说,如果没有重新设置过<leader>的话,就是\键。
般来说,如果没有重新设置过<leader>的话,就是\键。