Vim基本命令

by 少年2021-01-20
  • 1 赞
  • 0 收藏
  • 技术
  • 0 评论
  • 100 阅读
© 本文 by 少年 转载自 网络,如有任何版权问题可联系管理员进行处理。
笔记

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				向前查找下一个。


替换


:s/old/new			用new替换当前行第一个old。
:s/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行之间的内容做为命令输入执行命令。

---

转载请注明本文标题和链接:《 Vim基本命令
TAG: linux
评论

还没有评论奥,快来抢个沙发吧!

(有 0 条评论)