vim 增删改查

文本操作无非就是增、删、改、查。那vim怎么快速有效增、删、改、查呢?


这里  指的是从vim命令模式切换到输入模式的方法。( 通过 [Esc] 键切换到命令模式 )

如当前打开的文本如下:

[V]im is a highly configurable text editor for efficiently creating

and changing any kind of text.

( 方括号表示光标所在位置)

i    光标左侧输入

I    光标所在行的行首输入(等效组合键:0 + i

a    光标右侧输入

A    光标所在行的行尾输入(等效组合键:$ + a

o    在光标所在行的下一行增添新行,光标位于新行的行首

O    在光标所在行的上一行增添新行,光标位于新行的行首

那问题来了? 如果在光标所在行的下一行不添加新行,而是把光标移动到旧行的行首,怎么操作呢?这时需要组合键 j + I (光标移动到下一行的行首),同样 k + I (光标移动到上一行的行首)

小写 i 表示 insert,大写 I 可以记为小写的 i 的夸张动作,i 在光标左侧输入,I 则在光标所在行最左侧输入。小写 a 表示 append,大写 A 可以记为小写 a 的夸张动作,a 在光标右侧输入,A 则在光标所在行最右侧输入。

大写命令可以记为小写命令的夸张动作(如 a 和 A)或反向动作(如 o 和 O)

w + i    光标所在单词的下一个单词的词首输入(w 表示 word,向右移动一个word)

b + i    光标所在单词的上一个单词的词首输入 (b 是 w的反向动作backward,向左移动一个word)

e + a    光标所在单词的词尾输入 (e 表示 end,向右移动到词尾)


dd    删除光标所在行

ndd    n 是数字,删除光标所在行和向下 n 行

d0    删除光标所在处到所在行的行首

d$    删除光标所在处到所在行的行尾 (等效命令 D )

dG    删除当前行到末行之间的所有数据

d1G    删除当前行到首行之间的所有数据

dw,de    删除光标所在位置至词尾, 区别是光标删除后停留位置。dw光标停留在下一个单词的词首,de光标停留在向右数第一个空格


cc    删除光标所在行,并切换到输入模式

cw    删除光标位置至单词词尾,并切换到输入模式

C    删除光标位置至本行末尾,并切换到输入模式 (大写 C)

替换

:s/cerr/cout    把当前行第一次出现的 cerr 替换为 cout (s 表示 substitute 替换)

:s/cerr/cout/g    把当前行所有出现的 cerr 全部替换为 cout (g global全局)

:50,100s/cerr/cout/g    把第50行至100行的所有 cerr 替换为 cout

:1,$s/cerr/cout/g    整个文件中的 cerr 替换为cout (% 等价于 1,$。所以还可以写成:%s/cerr/cout/g

在替换命令尾部加上c (confirm 用于确认),在替换每一个old前都会提示并确认:

:%s/cerr/cout/gc 替换前提示?y表示替换,n表示放弃


字符查询

f + [字符]    在光标所在行向右搜索第一个相同字符

如vim内容如下;

[v]im is interesting  and fun.

(方括号表示光标所在位置)

在命令模式下输入 ft 光标移动至 t 字符

vim is in[t]eresting  and fun.

字符串查询

/pattern + [Enter]

pattern 为所有查询字符串,Enter键后被匹配字符串高亮显示,小写 n 查找下一个匹配项,大写 查找上一个匹配项

统计字符串出现次数

:%s/pattern//gn    

(% 表示 1,$

    s 表示 substitute 替换

    /pattern所要查询字符串

    // 替代文本应该放在这里,两个斜杠中间没有任何字符表示无替代文本

    g 全局内替换,没有这个参数,只在每行第一个匹配进行替换。Replace all occurences in the line. Without this argument, replacement occurs only for the first occurence in each line.

    n 计数,统计)

你可能感兴趣的:(vim 增删改查)