Vim基本命令

Vim的几种模式

  • 正常模式:可以使用快捷键命令,或按:输入命令行。
  • 插入模式:可以输入文本,在正常模式下,按i、a、o等都可以进入插入模式。
  • 可视模式:正常模式下按v可以进入可视模式, 在可视模式下,移动光标可以选择文本。按V进入可
  • 视行模式, 总是整行整行的选中。ctrl+v进入可视块模式。
  • 替换模式:正常模式下,按R进入。

启动Vim

命令描述
vim -c cmd file在打开文件前,先执行指定的命令;
vim -r file恢复上次异常退出的文件;
vim -R file以只读的方式打开文件,但可以强制保存;
vim -M file以只读的方式打开文件,不可以强制保存;
vim -y num file将编辑窗口的大小设为num行;
vim + file从文件的末尾开始;
vim +num file从第num行开始;
vim +/string file打开file,并将光标停留在第一个找到的string上。
vim –remote file用已有的vim进程打开指定的文件。

文档操作

命令描述
:e file关闭当前编辑的文件,并开启新的文件。 如果对当前文件的修改未保存,vi会警告。
:e! file放弃对当前文件的修改,编辑新的文件。
:e+file开始新的文件,并从文件尾开始编辑。
:e+n file开始新的文件,并从第n行开始编辑。
:enew编译一个未命名的新文档。(CTRL-W n)
:e重新加载当前文档。
:e!重新加载当前文档,并丢弃已做的改动。
:e#或ctrl+^回到刚才编辑的文件,很实用。
:f或ctrl+g显示文档名,是否修改,和光标位置。
:f filename改变编辑的文件名,这时再保存相当于另存为。
gf打开以光标所在字符串为文件名的文件。
:w保存修改。
:n1,n2w filename选择性保存从某n1行到另n2行的内容。
:wq保存并退出。
ZZ保存并退出。
:x保存并退出。
:q[uit]退出当前窗口。(CTRL-W q或CTRL-W CTRL-Q)
:saveas newfilename –另存为
:browse e会打开一个文件浏览器让你选择要编辑的文件。 如果是终端中,则会打开netrw的文件浏览窗口; 如果是gvim,则会打开一个图形界面的浏览窗口。 实际上:browse后可以跟任何编辑文档的命令,如sp等。 用browse打开的起始目录可以由browsedir来设置:
:set browsedir=last用上次访问过的目录(默认);
:set browsedir=buffer用当前文件所在目录;
:set browsedir=current用当前工作目录;
:Sex水平分割一个窗口,浏览文件系统;
:Vex垂直分割一个窗口,浏览文件系统;

光标的移动

基本移动

以下移动都是在normal模式下。

命令描述
h或退格左移一个字符;
l或空格右移一个字符;
j下移一行;
k上移一行;
gj移动到一段内的下一行;
gk移动到一段内的上一行;
+或Enter把光标移至下一行第一个非空白字符。
-把光标移至上一行第一个非空白字符。
w前移一个单词,光标停在下一个单词开头;
W移动下一个单词开头,但忽略一些标点;
e前移一个单词,光标停在下一个单词末尾;
E移动到下一个单词末尾,如果词尾有标点,则移动到标点;
b后移一个单词,光标停在上一个单词开头;
B移动到上一个单词开头,忽略一些标点;
ge后移一个单词,光标停在上一个单词末尾;
gE同 ge ,不过‘单词’包含单词相邻的标点。
(前移1句。
)后移1句。
{前移1段。
}后移1段。
fc把光标移到同一行的下一个c字符处
Fc把光标移到同一行的上一个c字符处
tc把光标移到同一行的下一个c字符前
Tc把光标移到同一行的上一个c字符后
;配合f & t使用,重复一次
,配合f & t使用,反向重复一次
0移动到行首。
g0移到光标所在屏幕行行首。
^移动到本行第一个非空白字符。
g^同 ^ ,但是移动到当前屏幕行第一个非空字符处。
$移动到行尾。
g$移动光标所在屏幕行行尾。
n把光标移到递n列上。
nG到文件第n行。
:n移动到第n行。
😒移动到最后一行。
H把光标移到屏幕最顶端一行。
M把光标移到屏幕中间一行。
L把光标移到屏幕最底端一行。
gg到文件头部。
G到文件尾部。

翻屏

命令描述
ctrl+f下翻一屏。
ctrl+b上翻一屏。
ctrl+d下翻半屏。
ctrl+u上翻半屏。
ctrl+e向下滚动一行。
ctrl+y向上滚动一行。
n%到文件n%的位置。
zz将当前行移动到屏幕中央。
zt将当前行移动到屏幕顶端。
zb将当前行移动到屏幕底端。

标记

使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。

命令描述
m{a-z}标记光标所在位置,局部标记,只用于当前文件。
m{A-Z}标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
`{a-z}移动到标记位置。
‘{a-z}移动到标记行的行首。
`{0-9}回到上[2-10]次关闭vim时最后离开的位置。
移动到上次编辑的位置。”也可以,不过“精确到列,而”精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。
`”移动到上次离开的地方。
`.移动到最后改动的地方。
:marks显示所有标记。
:delmarks a b删除标记a和b。
:delmarks a-c删除标记a、b和c。
:delmarks a c-f删除标记a、c、d、e、f。
:delmarks!删除当前缓冲区的所有标记。
:help mark-motions查看更多关于mark的知识。

插入文本

基本插入

命令描述
i在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线。
I在当前行第一个非空字符前插入;
gI在当前行第一列插入;
a在光标后插入;
A在当前行最后插入;
o在下面新建一行插入;
O在上面新建一行插入;
:r filename在当前位置插入另一个文件的内容。
:[n]r filename在第n行插入另一个文件的内容。
:r !date在光标处插入当前日期与时间。同理,
:r !command可以将其它shell命令的输出插入当前文档。

改写插入

命令描述
c[n]w改写光标后1(n)个词。
c[n]l改写光标后n个字母。
c[n]h改写光标前n个字母。
[n]cc修改当前[n]行。
[n]s以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
[n]S删除指定数目的行,并以所输入文本代替之。

注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。

剪切复制

剪切和复制、粘贴

命令描述
[n]x剪切光标右边n个字符,相当于d[n]l。
[n]X剪切光标左边n个字符,相当于d[n]h。
y复制在可视模式下选中的文本。
yy or Y复制整行文本。
y[n]复制一(n)个词。
y[n]l复制光标右边1(n)个字符。
y[n]h复制光标左边1(n)个字符。
yor D删除(剪切)当前位置到行尾的内容。
d[n]w删除(剪切)1(n)个单词
d[n]l删除(剪切)光标右边1(n)个字符。
d[n]h删除(剪切)光标左边1(n)个字符。
d0删除(剪切)当前位置到行首的内容
[n] dd删除(剪切)1(n)行。
:m,nd剪切m行到n行的内容。
d1G或dgg剪切光标以上的所有行。
dG剪切光标以下的所有行。
daw和das剪切一个词和剪切一个句子,即使光标不在词首和句首也没关系。
d/f这是一个比较高级的组合命令,它将删除当前位置 到下一个f之间的内容。
p在光标之后粘贴。
P在光标之前粘贴。

文本对象

命令描述
aw一个词
as一句。
ap一段。
ab一块(包含在圆括号中的)。
y, d, c, v都可以跟文本对象。

查找与替换

查找

命令描述
/something在后面的文本中查找something。
?something在前面的文本中查找something。
/pattern/+number将光标停在包含pattern的行后面第number行上。
/pattern/-number将光标停在包含pattern的行前面第number行上。
n向后查找下一个。
N向前查找下一个。

替换

命令描述
😒/old/new用new替换当前行第一个old。
😒/old/new/g用new替换当前行所有的old。
:n1,n2s/old/new/g用new替换文件n1行到n2行所有的old。
:%s/old/new/g用new替换文件中所有的old。
:%s/^/xxx/g在每一行的行首插入xxx,^表示行首。
:%s/表示行尾。

所有替换命令末尾加上c,每个替换都将需要用户确认。 如:%s/old/new/gc,加上i则忽略大小写(ignore)。
还有一种比替换更灵活的方式,它是匹配到某个模式后执行某种命令,
语法为 :[range]g/pattern/command
例如 :%g/^ xyz/normal dd。
表示对于以一个空格和xyz开头的行执行normal模式下的dd命令。
关于range的规定为:
如果不指定range,则表示当前行。
m,n: 从m行到n行。
0: 最开始一行(可能是这样)。
$: 最后一行
.: 当前行
%: 所有行

正则表达式

高级的查找替换就要用到正则表达式。

命令描述
\d表示十进制数(我猜的)
\s表示空格
\S非空字符
\a英文字母
| 表示 或
.表示.
{m,n}表示m到n个字符。这要和 \s与\a等连用,如 \a{m,n} 表示m 到n个英文字母。
{m,}表示m到无限多个字符。
**当前目录下的所有子目录。
:help pattern得到更多帮助。

统计字数

命令描述
g ^g可以统计文档字符数,行数。 将光标放在最后一个字符上,用字符数减去行数可以粗略统计中文文档的字数。 以上对 Mac 或 Unix 的文件格式适用。 如果是 Windows 文件格式(即换行符有两个字节),字数的统计方法为: 字符数 - 行数 * 2。

快速编辑

改变大小写

命令描述
~反转光标所在字符的大小写。
可视模式下的U或u把选中的文本变为大写或小写。
gu(U)接范围(如$,或G),可以把从光标当前位置到指定位置之间字母全部 转换成小写或大写。如ggguG,就是把开头到最后一行之间的字母全部变为小 写。再如gu5j,把当前行和下面四行全部变成小写。

替换(normal模式)

命令描述
r替换光标处的字符,同样支持汉字。
R进入替换模式,按esc回到正常模式。
###撤消与重做(normal模式)
[n] u取消一(n)个改动。
:undo 5撤销5个改变。
:undolist你的撤销历史。
ctrl + r重做最后的改动。
U取消当前行中所有的改动。
:earlier 4m回到4分钟前
:later 55s前进55秒

编程辅助

一些按键

命令描述
gd跳转到局部变量的定义处;
gD跳转到全局变量的定义处,从当前文件开头开始搜索;
g;上一个修改过的地方;
g,下一个修改过的地方;
[[跳转到上一个函数块开始,需要有单独一行的{。
]]跳转到下一个函数块开始,需要有单独一行的{。
[]跳转到上一个函数块结束,需要有单独一行的}。
][跳转到下一个函数块结束,需要有单独一行的}。
[{跳转到当前块开始处;
]}跳转到当前块结束处;
[/跳转到当前注释块开始处;
]/跳转到当前注释块结束处;
%不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。
ci’, di’, yi’修改、剪切或复制’之间的内容。
ca’, da’, ya’修改、剪切或复制’之间的内容,包含’。
ci”, di”, yi”修改、剪切或复制”之间的内容。
ca”, da”, ya”修改、剪切或复制”之间的内容,包含”。
ci(, di(, yi(修改、剪切或复制()之间的内容。
ca(, da(, ya(修改、剪切或复制()之间的内容,包含()。
ci[, di[, yi[修改、剪切或复制[]之间的内容。
ca[, da[, ya[修改、剪切或复制[]之间的内容,包含[]。
ci{, di{, yi{修改、剪切或复制{}之间的内容。
ca{, da{, ya{修改、剪切或复制{}之间的内容,包含{}。
ci<, di<, yi<修改、剪切或复制<>之间的内容。
ca<, da<, ya<修改、剪切或复制<>之间的内容,包含<>。

命令行模式下的快捷键:

上下方向键:上一条或者下一条命令。如果已经输入了部分命令,则找上一 条或者下一条匹配的命令。
左右方向键:左/右移一个字符。

命令描述
C-w向前删除一个单词。
C-h向前删除一个字符,等同于Backspace。
C-u从当前位置移动到命令行开头。
C-b移动到命令行开头。
C-e移动到命令行末尾。
Shift-Left左移一个单词。
Shift-Right右移一个单词。
@重复上一次的冒号命令。
q正常模式下,q然后按’:’,打开命令行历史缓冲区, 可以像编辑文件一样编辑命令。
q/和q?可以打开查找历史记录。
###执行外部命令
:! cmd执行外部命令。
:!!执行上一次的外部命令。
:sh调用shell,用exit返回vim。
:r !cmd将命令的返回结果插入文件当前位置。
:m,nw !cmd将文件的m行到n行之间的内容做为命令输入执行命令。

扫码关注了解更多扫码关注了解更多

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值