vim 随记

来源:互联网 发布:ubuntu 安装 编辑:程序博客网 时间:2024/06/05 05:56

 

命令模式

 

三种命令模式

vim的三种命令模式:

  • 命令模式:用于输入命令,简单更改
  • 插入模式:用于插入文本,修改文本
  • 末行模式:用于输入命令,视化操作,查找替换等

三种模式之间的切换方式:

  • 命令模式进入到插入模式:输入文本插入命令(i,I,a,A,o,O)
  • 插入模式退出到命令模式:ESC
  • 命令模式进入到末行模式:冒号:
  • 末行模式退出到命令模式:Enter或者ESC.

 vim命令集合:http://www.cnblogs.com/kzloser/archive/2012/09/12/2681111.html

 

图释指令

光标移动-------------

按行移动:

按字符移动:

                  

插入命令-------------

常用命令-------------

 

普通模式下命令

复制,删除,粘贴

  • 粘贴:  把 vim 中缓存区的数据,粘贴到光标附近(即 p 为光标后, P为光标前)
  • 删除:  把 vim 中选中的删除数据先拷贝到缓冲区并覆盖原有数据,然后删除选中数据
  • 复制:  把 vim 中选中的数据拷贝的缓冲区并覆盖原有数据

例子:

现在有数据如下:

aaaaabbbbbcccccdddddfffff

 

假设我们的光标在第一个 b 这个位置, 在一般模式下输入 5x (即输入删除 5 个 b 的操作) 后结果为:

aaaaacccccdddddfffff

 

然后在按下 p (即在光标位置处后面粘贴缓冲区的数据),结果为:

aaaaacbbbbbccccdddddfffff

删除某区域内容:

可以重复的:

[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:                     表示删除操作
  • 操作区域选择:
    • d0             删除从光标所在处到某一行的开始位置
    • d^             删除到某一行的第一个字符位置(不包括空格或TAB字符)
    • dL              删除直到屏幕上最后一行的内容
    • dH             删除直到屏幕上第一行的内容

复制某区域内容:

可以重复的:

[y]+[num]+[ h/ j / k/ l / w/ b / e/ ( / )/ { / }/ $ / G/ /word / ?word/ tc / Tc/ fc / Fc /`c ]          

含义用法如删除类似

不可重复的:

 [y]+[0 / ^ / H /L ]

含义用法如删除类似

多加介绍个与上面用法相似的操作:

改变某区域内容:

可以重复的:

[c]+[num]+[ h/ j / k/ l / w/ b / e/ ( / )/ { / }/ $ / G/ /word / ?word/ tc / Tc/ fc / Fc /`c ]          

含义用法如删除类似

不可重复的:

 [c]+[0 / ^ / H /L ]

含义用法如删除类似

 

操作的组合

v 字符选择

操作流程:

v + 移动光标按键+ 数据操作键

  • v         开始选择字符的标志
  • 移动光标按键   移动光标确定选择区域(此处可以为多个移动光标的键值,但不能为组合键:如 [Ctrl]+[p] 等等) 
  • 数据操作键          对选择区域内的数据内容进行操作

例子[删除选择的字符区间 vwd(vwx)] :

现在有数据如下:

aaaaabbbbb ccccc

 

按下 v 键时(标志开始选择区域的操作):

aaaaa|bbbbb ccccc

 

按下 w 键时(选择操作区域,当然这里的 w 是可以换成 llllll [ 即六个小写的 L ]):

aaaaabbbbbccccc

 

按下 d/x 键时(对数据进行操作,即删除所选择区域中的数据):

aaaaaccccc

V 列选择

 

操作流程:

 

V + 移动光标按键+ 数据操作键

 

  • V         开始选择字符的标志
  • 移动光标按键   移动光标确定选择区域(此处可以为多个移动光标的键值或者没有键值当没有键值的时候操作区域为光标所在行,但不能为组合键:如 [Ctrl]+[p] 等等) 
  • 数据操作键          对选择区域内的数据内容进行操作

 

例子[删除本行和下行数据 Vjd(Vjx)] :

 

现在有数据如下:

aaaaa
bbbbb
ccccc

 

按下 V 键时(标志开始选择区域的操作):

aaaaa
bbbbb
ccccc

 

按下 j 键时(选择操作区域):

aaaaa
bbbbb
ccccc

 

按下 d/x 键时(对数据进行操作,即删除所选择区域中的数据):

ccccc

 

字符串搜索 

搜索字符串中的特殊字符

  • ^ (行开始指示符)
    当脱字符( 即 ^ ),作为搜索字符串的第一个字符时, vim 将每行的开始字符与搜索字符串进行匹配.
  • (任意字符指示符)
    句点( 即 . )可以与任意字符匹配,它可以出现在搜索字符串中的任意位置.当要查找句点符号时候可以用转义字符 \. 来查找句点符号
  • \< (字符开始指示符)
    这两个字符与单词的开始匹配
  • \> (字符结束指示符)
    这两个字符与单词的结束匹配
  • * (0个或者过个出现)
    这个字符时一个修饰符,它与某个字符的 0 次或者多次出现相匹配
  • [] (定义字符类)
    单个字符匹配的区间(这里想要了解的更详细的话可以参考 正则表达式 )例如 ds[ab] 代表的是 dsa 与 dsb

示例------

句子:

being kind to yourself in everyday life is one of the best things you can do for yourself. 

life will become lighter and your relationships will most likely improve

搜索字符串描述结果(以单词为单位)/you查找字符串 you 的下一次出现的位置 yourself,  you, yourself, your/\<you\>查找单词 you 的下一次出现的位置you/^be 查找以 be 开始的下一行being ... /^[a-z][a-z]查找以两个字符开头开始的下一行 being ... ,
life .../\<th 查找以 th 开头的单词 the thing /[a-m]e\>查找以 [a-m]e 为结尾的单词 life, the, life, become

 

 

命令行的命令

字符替换

语法格式:

[range]s/{pattern}/{string}/[flag] [count]


格式说明:

  • range  表示行数
    • %表示所有行
    • n1,n2 表示由 n1 行到 n2 行之间
  • s         表示substitution,替换的意思
  • pattern  表示被替换的字符串
  • string   表示替换的字符串
  • flag      表示标志,取值g,i,c等
    • g   表示global,全部
    • i  表示ignore,忽略大小写
    • c   表示confirm,一个一个交互确认替换
  • count   表示从当前行到接下来的第几行,表示范围

 

例子:

(1). 全部替换
参数g实现全部替换,否则只替换一个
:%s/{old-pattern}/new-text/g
(2). 行内替换
%代表所有行,去掉%表示当前行,只替换当前行
:s/{old-pattern}/new-text/g
(3). 指定行范围替换
对1到10行的结果替换
:1,10s/{old-pattern}/new-text/g
(4). 可视模式替换
如果你觉得数行数比较麻烦,可以使用可视模式,首先进入可视模式,然后选择行
列,最后输入:自动进入:'<,'>
后面加上s/{old-pattern}/new-text/g,则只替换选择区域的结果
:'<,'>s/{old-pattern}/new-text/g
(5). 整词替换,而不是部分匹配的单词
对单词匹配模式外包一个<和>
:s/\<blog\>/weibo/g //替换blog,但是cnblog,blogs则不会替换
(6). 多项替换
同时对多个匹配都替换成某一字符串
:%s/\(good\|nice\)/awesome/g //good和nice都将被替换成awesome
(7). 确认式替换
参数c让替换进行交互请求,需要你选择y,n,a,l,q
选择说明:

  • y 替换且跳转到下一个匹配结果
  • n 不替换且跳转到下一个匹配结果
  • a 替换所有并退出交互模式
  • l 替换当前并退出交互模式
  • q 退出交互模式

:s/{old-pattern}/new-text/gc
(8). 行首插入行号
把行首^替换成行号,可自定义具体形式
:%s/^/\=line(".")/g

 

录制

这个其实很简单,但也是很强大的功能,作用是记录你的操作,并把操作过程记录起来.然后可以用 @@ 来调用出来你刚刚记录的操作集合,从而简化了复杂操作的过程

过程:

  1. q                 //标志开始录制
  2. x                 //x 是这个录制的寄存器,x 可以是其它字符
  3. 操作过程
  4. q                 //标志录制结束,现在dd这个操作被定义到了 @x 这个命令里了

图释: