Linux学习总结之001-Vim命令总结

      本文基于Vim version8.0整理而来,详细的帮助信息请参考Vim官方文档中文版:http://vimcdoc.sourceforge.net/doc/help.html

目录

模式切换

快速移动

撤销重做

查看命令记录

快速删除(剪切)

文本对象操作

复制粘贴与寄存器

普通复制粘贴

寄存器

搜索替换

搜索

替换

多文件操作

自动补全

利用宏批量操作

可视化模式详解

其他命令

对齐文本

退出及保存


模式切换

Vim6种模式:

  1. Normal Mode 普通模式:在这种模式下可以移动光标等。
  2. Visual Mode 可视模式:在这种模式下可以选定一些字符、行、多列。
  3. Insert Mode 插入模式:在这种模式下可以编辑输入等。
  4. Command-Line 命令行模式:可以输入各种命令。
  5. Ex Mode Ex模式:多行的Command-Line模式,普通模式下按Q进入。
  6. Select Mode 选择模式。和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。

下面只介绍前4种常用的模式的切换:

 
普通模式(Normal Mode)---> 插入模式(Insert Mode)
i在当前光标处进行编辑
I在行首插入
a在光标后插入编辑
A在行末插入
o在当前行后插入一个新行
O在当前行前插入一个新行
cw替换从光标所在位置后到一个单词结尾的字符
普通模式(Normal Mode)---> 可视模式(Visual Mode)
v字符可视化模式,文本选择是以字符为单位的
V行可视化模式,文本选择是以行为单位
ctrl+v块可视化模式,可以选择一个矩形内的文本
普通模式(Normal Mode)---> 命令行模式(Command-Line Mode)
进入命令行模式
普通模式(Normal Mode)--->选择模式(Select Mode)
gh开始字符选择
gH开始行选择
g ctrl+H开始块选择

快速移动

在当前行移动光标:
h左移(h在hjkl最左边)
j下移(j像一个朝下的箭头)
k上移
l右移(l在hjkl最右边)
w/W

移动到下一个word/WORD开头

(word以非空白符分隔的单词,WORD以空白符分隔的单词)

e/E移动到下一个word/WORD结尾
b/B回到上一个word/WORD开头
0移动光标到当前行首
^移动光标到当前行的第一个字母位置
$移动光标到行尾
g_移动到行尾非空白字符

fx

Fx

移动光标到当前行的下一个 x字符 处。可以使用分号(;)/逗号(,)继续搜该行下一个/上一个。

大写F表示往回搜索

tx和上面的命令类似,但是是移动到 x 的左边一个位置。
( )移动到光标上/下一个句子
{ }移动到光标上/下一个段落
在整个文件移动光标:
gg/G移动光标到文件开头和结尾,可以使用ctrl+o快速返回

nG

移动光标到文件第n行
H/M/L移动光标到屏幕开头/中间/结尾
ctrl+u   crtl+f往文件开头上翻页/往文件结尾下翻页
zz设置光标所在行在屏幕中间
ma在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了
`a到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边
`.跳转到上次编辑的地方
*(一般模式)读取光标处的字符串,并且移动光标到它再次出现的地方
#(一般模式)和上面的类似,但是是往反方向寻找

 

撤销重做

一般模式下:
u撤销
ctrl+R重做

查看命令记录

命令行模式下:
:history查看所有命令行模式下输入的命令历史

:history search或者

:history / 或者

:history ?

查看搜索历史
普通模式下:
q/查看使用/输入的搜索历史
q?查看使用?输入的搜索历史
q:查看命令行历史

快速删除(剪切)

普通模式下:
x剪切当前字符,可在前面搭配数字执行多次,被剪切内容保存在剪贴板
X剪切光标所在前一个字符,可在前面搭配数字执行多次,被剪切内容保存在剪贴板
dw快速删除(剪切)单词w,可在前面搭配数字执行多次,不适用于中文,如果光标在单词中间,则只删除当前光标到该单词末尾的部分
dd删除(剪切)整行,可在前面搭配数字执行多次
d$或D删除(剪切)至行尾,可在前面搭配数字执行多次,被删除内容保存在剪贴板
d^删除(剪切)至行首,可在前面搭配数字执行多次,被删除(剪切)内容保存在剪贴板
dG删除(剪切)到文档结尾处,可在前面搭配数字执行多次,被删除(剪切)内容保存在剪贴板
d1G删除(剪切)至文档首部,可在前面搭配数字执行多次,被删除(剪切)内容保存在剪贴板
dtw删除(剪切)光标到下一个w字符(不包括w字符)
d3l从光标位置(包括光标位置)向右剪切3个字符

d3B

从当前光标位置(不包括光标位置)反向剪切3个单词
dH/dM/dL剪切从当前行至所显示屏幕顶行/屏幕中部/底部的全部行
c{motion}与d类似,但删除(剪切)后进入插入模式,比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。
s删除(剪切)当前字符并进入插入模式
S整行删除(剪切)并进入插入模式
rw替换当前字符为w
R连续替换字符

文本对象操作

[number]<command>[text object]

number表示次数,command是命令,例如d,c,y,text object为要操作的文本对象,例如单词w,句子s,段落p

iw表示inner word(不包括周围的空格),aw表示a word(包含在周围的空格)

此外还有:is,as, ip,ap

此外,还可以针对不同括号内的内容进行选择:例如:

i( 或者 i)选择()中的内容,例如vi(([2,3,4]
a( 或者a)选择()中的内容,包含括号本身,例如va(  [(1,2,3)]

<>

{}

[]

"

`

与上面类似

 

复制粘贴与寄存器

普通复制粘贴

 

命令行模式下:
set paste打开粘贴命令,保留粘贴的换行格式等
set nopaste关闭 粘贴命令
一般模式下:
yy复制当前行
nyyn表示大于1的数字,复制n行
yw从光标处复制一个单词,包括单词后的空格
ye从光标处复制一个单词,不包括单词后的空格

y$

从当前光标复制到行末
y0从当前光标位置(不包括光标位置)复制到行首
y3l从光标位置(包括光标位置)向右复制3个字符
y3B从当前光标位置(不包括光标位置)反向复制3个单词
p/P在光标前/后粘贴
gp/P粘贴完后光标移动到粘贴内容之后

寄存器

        很多编辑器都只提供了一个剪贴板。Vim 有很多。剪贴板在 Vim里面被称为寄存器(Registers)。最好使用小写字母来作为寄存器的名称,因为大写的有些被 Vim 占用了。

"a

双引号(")指定寄存器名称,例如:

"ayiw 复制一个单词到寄存器a中;

"bdd  剪切当前行到寄存器b中

:reg查看所有寄存器
:reg a查看寄存器a中的内容

 

查看寄存器帮助 :help registers

vim共有十种类型的寄存器: 
1. 无名寄存器 "",缓存最后一次操作内容;
2. 10 个编号寄存器 "0 到 "9
3. 行内删除寄存器 "-
4. 26 个命名的寄存器 "a 到 "z 或者 "A 到 "Z
5. 三个只读寄存器 ":、". 和 "%(". 包含最近插入的文本    "% 包含当前文件名     ": 包含最近执行过的命令行)
6. 轮换缓冲区寄存器 "#
7. 表达式寄存器 "=
8. 选择和拖放寄存器 "*、"+ 和 "~ 
9. 黑洞寄存器寄存器 "_
10. 最近搜索模式寄存器 "/

 

搜索替换

搜索

命令模式下,输入:nohlsearch  也可以:set nohlsearch; 当然,可以简写,noh或者set noh。

命令行模式或一般模式:
/w 或?搜索w字符串,n查看下一个匹配,N查看上一个匹配
*(一般模式)读取光标处的字符串,并且移动光标到它再次出现的地方
#(一般模式)和上面的类似,但是是往反方向寻找
命令行模式下:
nohlsearch或set nohlsearch不高亮显示搜索匹配内容,可以简写为noh或者set noh
set hlsearch高亮显示搜索匹配内容
  1. Vim查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\$匹配"vim$"

        默认情况下,Vim 的查找是大小写敏感的。因此,"include","INCLUDE",和 "Include"为三个各不相同的词,而一次查找将仅仅匹配其中的一个。 现在设定 'ignorecase' 选项: 

        :set ignorecase

      再查找 "include",现在它将匹配 "Include","INCLUDE" 和 "InClUDe"。
      你可以这样撤销这个选项: 

        :set noignorecase

      让我们保留这个设定,并查找 "INCLUDE"。它匹配的文本就跟查找 "include" 时一模一样。现在我们设定 'smartcase' 选项: 

        :set ignorecase smartcase

       如果你采用的模式里至少有一个大写字母,查找就成了大小写敏感的。可以这样理解,你不必键入大写字母,也能查找到含有大写字母的词,所以,你若键入大写字母,必然是因为你要大小写敏感的匹配。聪明! 设定了这两个选项,你会找到以下匹配:

        模式                    匹配    
        word                    word、Word、WORD、WoRd 等。
        Word                   Word
        WORD                WORD
        WoRd                  WoRd


单个模式里的大小写

如果你仅想忽略一个特定的模式里的大小写,那么,在模式前添加 "\c" 字符串就行了。添加 "\C" 将使该模式的匹配大小写敏感。这排除了 'ignorecase' 和 'smartcase' 选项的影响,当 "\c" 或 "\C" 起作用时,它们设成什么值无关紧要。

        模式                    匹配    
        \Cword                word
        \CWord               Word
        \cword                 word,Word,WORD,WoRd,等。
        \cWord                word,Word,WORD,WoRd,等。

    在一个查找模式中,"或" 运算符是 "\|"。例如: 

        /foo\|bar

        这个命令匹配了 "foo" 或 "bar"。更多的抉择可以连在后面: 

        /one\|two\|three

       匹配 "one"、"two" 或 "three"。

非贪婪重复模式匹配

/ab\{3,5}   匹配 “abbb”、“abbbb” 以及 “abbbbb”。

模式            匹配次数 
    \{,4}           0,1,2,3 或 4
    \{3,}           3,4,5 等等
    \{0,1}          0 或 1,同 \=
    \{0,}           0 或更多,同 *
    \{1,}           1 或更多,同 \+
    \{3}            3

还有另一种不太好理解的匹配方式,使用"{-n,m}"的形式。他表示匹配尽可能少的字符。
例如,以下命令:

/ab\{-1,3}
将匹配 “abbb” 中的 “ab”。-1就表示只匹配尽可能少的b,这里是一个b,然而这里的3就体现不出作用来了。
再举个例子:

/ab\{-1,3}c
将匹配"abc",“abbc”,“abbbc”。这里的-1又体现不出作用来了。
再进一步:

/ab\{-1,3}c\=
将能够匹配"abc",“abbc”,“abbbc”,“abbb” 中的 “ab”。当c存在时就会限制b的最大个数不能超过3,当c不存在时,会匹配尽可能少的b的个数。
 

Vim 能找寻含有换行符的模式。你需要指定换行符在哪儿出现,因为迄今为止所有我们曾经提到过的项,都不匹配换行符。
   用 "\n" 项可以在一个特定的位置查验一个换行符: 

        /the\nword

这个命令将在一行以 "the" 结尾,而下一行以 "word" 开头的地方找到匹配。如果还要匹配 "the word",那么你需要匹配一个空格或一个换行符。这可以用 "\_s" 表示: 

        /the\_sword

若要允许任意数量的空格: 

        /the\_s\+word

这个命令也匹配 "the  " 在行尾,及 "   word" 在下一行行首的情形。

"\s" 匹配空格字符,"\_s" 匹配空格字符或一个换行符。同理,"\a" 匹配一个字母字符,而 "\_a" 匹配一个字母字符或一个换行符。其它字符类和字符范围都可以通过插入一个 "_" 来更改其范围。

 

替换

substitute命令,查找并替换字符串,支持正则表达式。

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

或者:[range]s[ubstitute]+{pattern}+{string}+[flags] [count]

或者:[range]s[ubstitute]%{pattern}%{string}%[flags] [count]

对 [range] 指定的行把 {pattern} 的匹配替代成{string}。

[range]
不写range默认为光标所在的行
.光标所在行
.+1当前光标所在行的下面一行
1第1行
33第33行
$-1倒数第二行
22,33第22行到第33行
.,+2当前行与接下来2行
1,$第1行到最后一行
1,.第1行到当前行
.,$当前行到最后一行
%所有行
[flags]                           注:可组合使用
只对指定范围内的第一个匹配项进行替换
g对指定范围内的所有匹配项进行替换
c在替换前请求用户确认
i忽略模式的大小写。不使用 'ignorecase' 和 'smartcase' 选项
I不忽略模式的大小写。不使用 'ignorecase' 和 'smartcase' 选项
n报告匹配的次数,并不实际进行替代。注意,匹配的时候需要组合上g,才能对所有指定范围内的字符串进行匹配
e忽略执行过程中的错误

 

多文件操作

打开多个文件

vim还没有启动:
vim file1 file2 file3 同时打开file1 file2 file3...
vim已经启动:
:open file或者:e file打开一个新文件到缓冲区

 

Buffer(缓冲区)

     vim打开一个文件后会加载文件内容到缓冲区,之后的修改都是针对内存中的缓冲区,并不会直接保存文件,执行保存命令后才会把修改内容写入到文件。

:ls或者:buffers列举当前缓冲区

其输出可能像这样:

  1 #h   "help.txt"                      line 62 
  2 %a + "usr_21.txt"                line 1 
  3      "usr_toc.txt"                    line 1 

第一栏存放缓冲区号。你可以利用它来编辑文件,而不用键入文件名。紧随缓冲区号的是些标志位。然后是文件名,以及光标最后一次停留的行号。可能出现的标志位有以下这些 (自左至右):

u列表外缓冲区  unlisted-buffer
%当前缓冲区
#轮换缓冲区
a激活缓冲区,缓冲区被加载且显示
h隐藏缓冲区,缓冲区被加载但不显示
=只读缓冲区
-不可改缓冲区, 'modifiable' 选项不置位
+

已修改缓冲区

要从缓冲区列表上删除一个缓冲区,用这个命令:

        :bdelete 3

同样,这命令也适用文件名。
   如果你删除了一个激活的缓冲区 (显示在窗口中的缓冲区),你也就关闭了该窗口。如果你删除了当前缓冲区,你也就关闭了当前窗口。如果它是最后一个窗口,Vim 将找一个缓冲区来编辑。你无法什么也不编辑!

备注:即使用 ":bdelete" 命令删除了缓冲区以后,Vim 依然记得它。这个缓冲区实际上成了 "列表外" 缓冲区,它不再出现在 ":buffers" 命令所报告的列表中(ls前显示u标识: 列表外缓冲区)。不过 ":buffers!" 命令仍会列出 "列表外" 缓冲区 (没错,Vim 无所不能)。要让Vim 彻底忘记一个缓冲区,用 ":bwipe" 命令。


 切分窗口:

一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同缓冲区。

ctrl+w+s或者:sp水平分割窗口
ctrl+w+v或者:vs垂直分割窗口

在缓冲区间切换:

:b n 或 :b file跳转到第n个(file)缓冲区
:bpre或者:bp切换到前一个缓冲区(缓冲区循环)
:bnext或者:bn切换到下一个缓冲区(缓冲区列表循环)
:N切换到前一个缓冲区(缓冲区列表不循环,没有前一个缓冲区会提示)
:n切换到下一个缓冲区(缓冲区列表不循环,没有后一个缓冲区会提示)
:N!或者:next!放弃更改并切换到下一个缓冲区,:n!同理。
:wnext保存更改并切换到下一个缓冲区
:bfirst切换到第一个缓冲区
:blast切换到最后一个缓冲区

对于使用 :e 打开的文件,您无法使用 :n 或 :N 进行切换。要切换到另一个文件,请输入 :buffer,然后输入文件缓冲区编号。

在窗口间切换:

ctrl+ww依次向后切换到下一个窗格中
ctrl+w+h/j/k/l切换到前/下/上/后一个窗格

ctrl+w+方向键

同上

 

自动补全

ctrl+n或者ctrl+p

补全单词
先按ctrl+x再按ctrl+f补全文件名
先按ctrl+x再按ctrl+l补全整行

 

利用宏批量操作

Vim的宏分为录制和回放

使用q来录制宏,同时也是使用q结束录制,

使用q{register}选择要保存的寄存器,把录制的命令保存其中,寄存器通常是 {0-9a-z".=*+} ,例如qa

使用@{register}回放寄存器中保存的一些列命令,或者使用visual模式选择多行,输入:normal @{register}

 

可视化模式详解

 

gv重复选中前一次可视化模式时选中的文本
o光标移动到选中文本的另一结尾
O光标移动到选中文本的另一角落
J

合并成一行,同时以空格来分隔各行,例如:V10j,往下选中行,J合并成一行

gJ合并成一行,不在行间插入空格
:write file对选定文本块写入另外一个file
:sort对选中的文本进行排序
~对选中的文本进行大小写转换
u/U对选中的字符变小写/大写
<   >将选中字符右移或左移shiftwidth位置

在多行前增加内容:

ctrl+v进入块选择,I进入列插入状态,输入字符,再按esc即可。

在多行末尾增加内容:

ctrl+v进入块选择,$跳到行末尾,A进入列添加状态,输入字符,再按esc退出即可。

备注:可视化模式下,列的写入都是大写的I(插入),A(追加),C(删除并插入)

 

其他命令

一般模式下:
. (小数点符号)重复你输入的上一个命令。比如,你上个命令为“dw”(删除一个词),输入小数点(.)将会接着再删除一个词
:f 或 Ctrl+g显示当前正在编辑的文档名称 
:f 档名改变编辑中的文档名
:edit .打开当前目录下文件列表

 

对齐文本

居中对齐

要使一定范围包括的行居中,用以下命令: 

        :{range}center [width]

{range} 即是那些通常命令所能指定的范围。 [width] 是一个可选项,用来确定要居中的行的宽度。如果没有指定 [width],则默认使用 'textwidth' 的值。(如果'textwidth' 是 0,则默认为 80。)
    例如: 

        :1,5center 40

将得到下面的结果:

       I taught for a while. One 
       time, I was stopped by the 
     Fort Worth police, because my 
      homework was too hard. True 
                 story. 

右对齐

类似地,":right" 命令将使文本右对齐: 

        :1,5right 37

将得到这种结果:

            I taught for a while. One 
           time, I was stopped by the 
        Fort Worth police, because my 
          homework was too hard. True 
                               story. 

左对齐

我们使用这个命令: 

        :{range}left [margin]

和 ":center" ":right" 不同的是,":left" 的参数并不是行的宽度,而是左边的页边距。如果这个参数被省略了,文本将被紧靠在屏幕的左边缘 (用一个零页边距参数将得到一样的效果)。如果页边距是 5,文本将缩进五个空格。举个例子,使用以下命令: 

        :1left 5
        :2,5left

结果会是下面这样:

             I taught for a while. One 
        time, I was stopped by the 
        Fort Worth police, because my 
        homework was too hard. True 
        story. 

 

退出及保存

命令行模式下退出vim

:q退出,不保存
:q!强制退出,不保存
:x保存并退出
:wq保存并退出
:wq!强制保存并退出
:w <路径+文件名>另存为
:saveas <路径+文件名>另存为

普通模式下退出vim

shift+zz(即ZZ)保存并退出

 

使用vim时,如果你不小心按了 Ctrl + s(锁定屏幕)后,你会发现不能输入任何东西了,像死掉了一般,其实vim并没有死掉,这时vim只是停止向终端输出而已,要想退出这种状态,只需按Ctrl + q 即可恢复正常。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值