Linux——vim/vi 文本操作

 

一、查找/替换

1. 查找

在normal模式下按下/即可进入查找模式,输入要查找的字符串并按下回车。 Vim会跳转到第一个匹配。按下n查找下一个,按下N查找上一个。

Vim查找支持正则表达式,例如/vim$匹配行尾的"vim"。 需要查找特殊字符需要转义,例如/vim\$匹配"vim$"

2. 大小写敏感查找

在查找模式中加入\c表示大小写不敏感查找,\C表示大小写敏感查找。例如:

/foo\c

将会查找所有的"foo","FOO","Foo"等字符串。

3. 大小写敏感配置

Vim 默认采用大小写敏感的查找,为了方便我们常常将其配置为大小写不敏感:

" 设置默认进行大小写不敏感查找
set ignorecase
" 如果有一个大写字母,则切换到大小写敏感查找
set smartcase 

将上述设置粘贴到你的~/.vimrc,重新打开Vim即可生效

4. 查找当前单词

在normal模式下按下*即可查找光标所在单词(word), 要求每次出现的前后为空白字符或标点符号。例如当前为foo, 可以匹配foo bar中的foo,但不可匹配foobar中的foo。 这在查找函数名、变量名时非常有用。

按下g*即可查找光标所在单词的字符序列,每次出现前后字符无要求。 即foo barfoobar中的foo均可被匹配到。

5. 查找与替换

:s(substitute)命令用来查找和替换字符串。语法如下:

:{作用范围}s/{目标}/{替换}/{替换标志}

例如:%s/foo/bar/g会在全局范围(%)查找foo并替换为bar,所有出现都会被替换(g

6. 作用范围

作用范围分为当前行、全文、选区等等。

当前行:

:s/foo/bar/g

全文:

:%s/foo/bar/g

选区,在Visual模式下选择区域后输入:,Vim即可自动补全为 :'<,'>

:'<,'>s/foo/bar/g

2-11行:

:5,12s/foo/bar/g

当前行.与接下来两行+2

:.,+2s/foo/bar/g

7. 替换标志

上文中命令结尾的g即是替换标志之一,表示全局global替换(即替换目标的所有出现)。 还有很多其他有用的替换标志:

空替换标志表示只替换从光标位置开始,目标的第一次出现:

:%s/foo/bar

i表示大小写不敏感查找,I表示大小写敏感:

:%s/foo/bar/i
# 等效于模式中的\c(不敏感)或\C(敏感)
:%s/foo\c/bar

c表示需要确认,例如全局查找"foo"替换为"bar"并且需要确认:

:%s/foo/bar/gc

回车后Vim会将光标移动到每一次"foo"出现的位置,并提示

replace with bar (y/n/a/q/l/^E/^Y)?

按下y表示替换,n表示不替换,a表示替换所有,q表示退出查找模式, l表示替换当前位置并退出。^E^Y是光标移动快捷键,参考: Vim中如何快速进行光标移

 

二、复制/粘贴/删除

1. 复制/粘贴

任务:将第9行至第15行的数据,复制到第16行

方法1:(强烈推荐)
:9,15 copy 16  或 :9,15 co 16
由此可有:
:9,15 move 16  或 :9,15 m 16 将第9行到第15行的文本内容到第16行的后面  

方法2:
光标移动到结束行,ma
光标移动到起始行,输入y'a
光标移动到需要复制的行,输入p,行前复制则输入大写P

方法3:
把光标移到第9行 shift + v
再把光标移动到第15行  ctrl + c
再把光标死去到第16行  p mysql

方法4:
光标移动到起始行,输入ma
光标移动到结束行,输入mb
光标移动到粘贴行,输入mc
然后输入:'a,'b, co 'c   把co换成m就是剪切
若要删除多行,则输入:'a,'b de

vi设置自动缩进:set smartindent
vi设置显示行号:set number 或 set nu

2. 删除

1)方法1

  • dd:删除一行
  • ndd:删除以当前行开始的n行
  • dw: 删除以当前字符开始的一个字符
  • ndw:删除以当前字符开始的n个字符
  • d$、D:删除以当前字符开始的一行字符
  • d): 删除到下一句的开始
  • d}:删除到下一段的开始
  • d回车:删除2行

 2)方法2

  1.  首先在命令模式下,输入“:set nu”显示行号;
  2.  通过行号确定你要删除的行;
  3.  命令输入“:32,65d”,然后回车,32-65行就被删除了。

 

三、多行注释/取消注释

1.多行注释:

  1. 首先按esc进入命令行模式下,按下Ctrl + v,进入列(也叫区块)模式;
  2. 在行首使用上下键选择需要注释的多行;
  3. 按下键盘(大写)“I”键,进入插入模式;
  4. 然后输入注释符(“//”、“#”等);
  5. 最后按下“Esc”键。 注:在按下esc键后,稍等一会会出现注释。
 

2.取消多行注释:

  1. 首先按esc进入命令行模式下,按下Ctrl + v, 进入列模式;
  2. 选定要取消注释的多行;
  3. 按下“x”或者“d”. 注意:如果是“//”注释,那需要执行两次该操作,如果是“#”注释,一次即可
 
 

四、批量缩进

1. 方法1

  1. 在程序代码界面,按esc,退出编辑模式,到命令模式,并在英语输入法下输入“:”;
  2. 将所要批量缩进的行号写上,按照格式:“行号1,行号2>”输入命令,如要将2至9行批量缩进一个tab值,则命令为“2,9>”;
  3. 输入完毕后,按回车执行,可以看到2至9行全部缩进了一个tab值。
  4. 同样的,如果要缩回来一个tab值,则用命令“行号1,行号2<”即可

2. 方法2

在可视模式下选择要缩进的列,操作为:
  1. esc从编辑模式退到命令模式,将光标移到需要缩进的行的行首,然后按shift+v(或ctrl+v),可以看到该行已被选中,且左下角提示为“可视行”(可视块);
  2. 按键盘上的上下方向键(如果是ctrl+v则上下左右均可),如这里按向下的箭头,选中所有需要批量缩进的行;
  3. 选择好了之后,按shift+>,是向前缩进一个tab值,按shift+<,则是缩回一个tab值。

 

五、光标移动

 1. vim key

vim-key

2. 字符移动

在Vim的Normal模式里(如果你在Visual模式或者Insert模式,可以按<Esc>回到Normal模式), 通过hjkli来进行左下上右的光标移动。

在Vim中多数操作都支持数字前缀,比如10j可以向下移动10行。

3. 单词移动

多数情况下单词移动比字符移动更加高效。 w移动光标到下一个单词的词首,b移动光标到上一个单词的词首;e移动光标到下一个单词的结尾,ge移动光标到上一个单词的结尾。

单词移动同样支持数字前缀,比如4w可以向后移动4个单词。连续的标点符号算一个单词。

有趣的是,WBE具有同样的功能,只不过它是用空格来分隔单词的,可以跳地更远~

^到行首,$到行尾。

拷贝一行:^y$

4. 相对屏幕移动

通过c-f向下翻页,c-b向上翻页;c-e逐行下滚,c-y逐行上滚。这在几乎所有Unix软件中都是好使的,比如manless。 H可以移动到屏幕的首行,L到屏幕尾行,M到屏幕中间。

zt可以置顶当前行,通常用来查看完整的下文,比如函数、类的定义。 zz将当前行移到屏幕中部,zb移到底部。

5. 文件中移动

通过:10可以直接移动光标到文件第10行。如果你看不到行号,可以:set number。 gg移到文件首行,G移到尾行。

拷贝整个文件:ggyG

/xx可以查找某个单词xxn查找下一个,N查找上一个。 在光标跳转之后,可以通过c-o返回上一个光标位置,c-i跳到下一个光标位置。

?xx可以反向查找,q/q?可以列出查找历史。

6. 窗格间移动

参考另一篇文章:Vim 多文件编辑

 

六、多文件编辑

TODO

 

七、UNDO

撤销上一步操作,可以在普通模式下,使用‘u’键恢复;若有多步操作,则一直撤销,直到不能撤销为止。

 


参考资料:

  1. https://www.cnblogs.com/huxinga/p/7942194.html
  2. https://www.cnblogs.com/MMLoveMeMM/articles/3707287.html
  3. https://www.cnblogs.com/chinalorin/p/5830375.html
  4. https://jingyan.baidu.com/article/1612d5008ea0b8e20e1eee81.html
  5. https://harttle.land/2015/11/07/vim-cursor.html
  6. https://harttle.land/2015/11/12/vim-tabpage.html

 

posted @ 2019-01-15 18:31  怪猫佐良  阅读(721)  评论(0编辑  收藏  举报