vim常见使用命令总结完整分享(二)

vim是linux下命令行一款经典编辑器,操作简单、功能强大,这是很多unix上元老级程序员的挚爱。这是我总结整理的vim最常用的命令集合,没事常阅读,最重要的是有问题了,尝试用这些东西去解决问题,不一定是高效快捷的,但起码是有效的。

复制/粘贴/删除

字符操作:
nx                    #向后删除 n 个字符,若没有 n 向后删除一个字符
nX                    #向前删除 n 个字符,若没有 n 向前删除一个字符
d0                    #那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
d$                    #删除游标所在处,到该行的最后一个字符
y0                    #复制光标所在的那个字符到该行行首的所有数据
y$                    #复制光标所在的那个字符到该行行尾的所有数据
p                     #将已复制的数据在光标下一列贴上
P                     #将已复制的数据在光标上一列贴上

行操作:
ndd                   #删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列
dnG                   #删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据
nyy                   #复制光标所在的向下 n 行,若无 n 复制游标所在的那一行
ynG                   #复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据
J                     #将光标所在列与下一列的数据结合成同一列

删除某区域:
可以重复的:
[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]
d:                   #表示删除操作
重复操作次数:         #num 表示操作重复次数
操作区域选择:
    h             #删除光标前一个字符
    l             #删除光标所在处的字符
    j             #删除本行与下一行
    k             #删除本行与上一行
    w             #删除光标开始到下一个单词词首处
    b             #删除光标开始到上一个单词词首处
    e             #删除光标开始到这个单词的结尾处
    (             #删除光标开始到句子结束处
    )             #删除光标开始到句子开始处
    {             #删除光标开始到段落开始处
    }             #删除光标开始到段落结束处
    $             #删除从光标开始处到行尾处
    G             #删除从光标所在行到行尾处
    /word         #删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用正则表达式 )
    ?word         #删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用正则表达式 )
    tc            #删除从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )
    Tc            #删除从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )
    fc            #删除从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )
    Fc            #删除从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )
    `c            #删除从光标开始到标记 c 这个位置
不可重复的:
[d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / " / ']
d:                     #表示删除操作
操作区域选择:
    0             #删除从光标所在处到某一行的开始位置
    ^             #删除到某一行的第一个字符位置(不包括空格或TAB字符)
    L             #删除直到屏幕上最后一行的内容
    H             #删除直到屏幕上第一行的内容
[d]+[i]+[ { / }[ / ]( / ) / " / ']
d:                     #表示删除操作
i:                     #表示 in 即在里面的意思
操作区域选择:
    {             #删除在 {} 中内容( 要求光标在 {} 内 )
    }             #删除在 {} 中内容( 要求光标在 {} 内 )
    [             #删除在 [] 中内容( 要求光标在 [] 内 )
    ]             #删除在 [] 中内容( 要求光标在 [] 内 )
    (             #删除在 () 中内容( 要求光标在 {} 内 )
    )             #删除在 () 中内容( 要求光标在 () 内 )
    "             #删除在 "" 中内容( 要求光标在 "" 内 )
    '             #删除在 '' 中内容( 要求光标在 '' 内 )

复制某区域:
可以重复的:
[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]
y:                      #表示复制操作
重复操作次数:           #num 表示操作重复次数
操作区域选择:
    h              #复制光标前一个字符
    l              #复制光标所在处的字符
    j              #复制本行与下一行
    k              #复制本行与上一行
    w              #复制光标开始到下一个单词词首处
    b              #复制光标开始到上一个单词词首处
    e              #复制光标开始到这个单词的结尾处
    (              #复制光标开始到句子结束处
    )              #复制光标开始到句子开始处
    {              #复制光标开始到段落开始处
    }              #复制光标开始到段落结束处
    $              #复制从光标开始处到行尾处
    G              #复制从光标所在行到行尾处
    /word          #复制从光标开始处到下个word字符串,不含word ( word 指代任意字符串,正则表达式 )
    ?word         #复制从光标开始处到上个word字符串,不含word ( word 指代任意字符串,正则表达式 )
    tc             #复制从光标开始处到下个 c 字符处,不含 c ( c  指代任意字符 )
    Tc             #复制从光标开始处到上个 c 字符处,不含 c ( c  指代任意字符 )
    fc             #复制从光标开始处到下个 c 字符处,含 c ( c  指代任意字符 )
    Fc             #复制从光标开始处到上个 c 字符处,含 c ( c  指代任意字符 )
    `c             #复制从光标开始到标记 c 这个位置
不可重复的:
[y]+[ 0 / ^ / H / L]
y:                     #表示复制操作
操作区域选择:
    0             #复制从光标所在处到某一行的开始位置
    ^             #复制到某一行的第一个字符位置(不包括空格或TAB字符)
    L             #复制直到屏幕上最后一行的内容
    H             #复制直到屏幕上第一行的内容
[y]+[i]+[ { / } / ( / ) / " / ' ]
y:                     #表示复制操作
i:                     #表示 in 即在里面的意思
操作区域选择:
    {             #复制在 {} 中内容( 要求光标在 {} 内 )
    }             #复制在 {} 中内容( 要求光标在 {} 内 )
    [             #复制在 [] 中内容( 要求光标在 [] 内 )
    ]             #复制在 [] 中内容( 要求光标在 [] 内 )
    (             #复制在 () 中内容( 要求光标在 {} 内 )
    )             #复制在 () 中内容( 要求光标在 () 内 )
    "             #复制在 "" 中内容( 要求光标在 "" 内 )
    '             #复制在 '' 中内容( 要求光标在 '' 内 )

高亮显示
/word         #将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式  )
?word         #将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式  )
gd            #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD            #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词
#             #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
*             #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
:nohl         #取消高亮显示
 
行移动操作
>>                   #将当前行右移一个单位
<<                   #将当前行左移一个单位(一个tab符)
==                   #自动缩进当前行 
书签
mc                   #把当前位置记录为书签 c ( c 为任意字符 )
                     #当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效
`c                   #将光标转移到书签 c 处( c 为任意字符 ) 
十六进制查看文本内容
:%!xxd               #按十六进制查看当前文件
:%!xxd -r            #从十六进制返回正常模式 
自动补全
[Ctrl+n]              #自动补全(前提是以前打过的单词)
[Ctrl+p]              #自动补全(前提是以前打过的单词) 
标记文本
进入标记文本模式
v              #进入标记文本模式,单字符模式
V              #进入标记文本模式,行模式
[ctrl+v]      #进入标记文本模式,列模式,类似于UE的列模式

对标记文本模式中区域选择
aw              #选中一个单词,含单词后的空格
as              #选中一个句子,含句号后的空格
ap              #选中一个段落,含段落后的空格
ab              #选中()括号中的所有内容,含()
aB              #选中{}括号中的所有内容,含{}
iw              #选中一个单词,不含单词后的空格
is              #选中一个句子,不含句号后的空格
ip              #选中一个段落,不含段落后的空格
ib              #选中()括号中的内容,不含()
iB              #选中{}括号中的内容,不含{}
除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]

移动标记文本模式中光标位置
o              #光标在选择区域中的对角线之间的跳转
O              #光标在选择区域中的横纵之间的跳转
当在 V 与 [ctrl]+[v] 模式中
我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些)

对标记文本模式中数据操作
~              #将选中块中的内容大小写翻转
u              #将选中块中的内容转成小写
U              #将选中块中的内容转成大写
y              #复制选中块中的内容
d/D/x/X    #删除选中块中的内容
 

 
窗口操作
:vne [filename]           #打开文件 filename,并把光标所在窗口沿横向分为两个窗口
:sp [filename]            #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:S [filename]             #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:new [filename]           #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
+------------------------------------------------------------------------------+
在 new 前面可以加的参数:
    leftabove       #当前窗口的左上方
    aboveleft       #同上
    rightbelow      #当前窗口的右下方
    belowright      #同上
    topleft         #整个 Vim 窗口的最上面或者最左边
    botright        #整个 Vim 窗口的最下面或者最右边
+------------------------------------------------------------------------------+
:only                     #关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败
:close                    #关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败
:vertical diffsplit [file]     #纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:diffsplit [file]              #横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:res -n                   #窗口高度减小n
:res +n                   #窗口高度增大n
[ctrl+w]+[=]              #窗口等宽
[ctrl+w]+[h]              #将光标移动到左方的窗口
[ctrl+w]+[←]              #将光标移动到左方的窗口
[ctrl+w]+[l]              #将光标移动到右方的窗口
[ctrl+w]+[→]              #将光标移动到右方的窗口
[ctrl+w]+[j]              #将光标移动到下方的窗口
[ctrl+w]+[↓]              #将光标移动到下方的窗口
[ctrl+w]+[k]              #将光标移动到上方的窗口
[ctrl+w]+[↑]              #将光标移动到上方的窗口
[ctrl+w]+[t]              #将光标移动到最上方的窗口
[ctrl+w]+[b]              #将光标移动到最下方的窗口
[ctrl+w]+[ctrl+r]         #将光标所在窗口下移
[ctrl+w]+[q]              #退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q
[ctrl+w]+[+]              #扩大所在窗口
[ctrl+w]+[-]              #缩小所在窗口

对所有窗口执行命令
:qall                    #退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的
:wall                    #保存所有修改过的窗口
:wqall                   #保存所有修改过的窗口并关闭,然后退出 vim
:qall!                   #强制退出所有窗口,然后退出 vim


多档案编辑
:n       #编辑下一个档案
:N       #编辑上一个档案
:files    #列出目前这个 vim 的开启的所有档案 
执行shell命令
:sh                     #打开 shell,可执行shell命令,输入exit退出shell返回到vim
:!cmd                   #直接执行 shell ( cmd 表示为任意 shell 命令 ) 
命令行下行操作
:n1,n2 co n3           #将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下
:n1,n2 m m3            #移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下
:n1,n2 d               #删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除
:n1,n2 y               #复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制
:[range]s/{pattern}/{string}/[flag] [count]    #字符替换
+------------------------------------------------------------------------------+
格式说明:
range   #表示行数
        %       #表示所有行
        n1,n2   #表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处
s       #表示substitution,替换的意思
pattern #表示被替换的字符串
string  #表示替换的字符串
flag    #表示标志,取值g,i,c等
        g    #表示global,全部
        i    #表示ignore,忽略大小写
        c    #表示confirm,一个一个交互确认替换
count   #表示从当前行到接下来的第几行,表示范围
+------------------------------------------------------------------------------+ 

你可能感兴趣的:(命令,vim)