vim 常用命令

vim有4个模式:命令模式、插入模式、底行模式、可视模式。
光标移动:
gg:是让光标移到首行,在vim才有效,vi中无效
G :光标移到最后一行
H左、J下、K上、L右 或者 方向键进行选中

各模式下的常用操作:
命令模式(command mode):可以移动光标、删除字符等。
插入模式(insert mode):在此模式下进行文件编辑、修改、输入等操作。
末行模式(last line mode):可以保存文件、退出vi、设置vi、查找等功能
可视模式(visual mode):在此模式下可选中进行复制、删除、剪切等操作

如何进入各模式

命令模式:vi启动后默认进入的是命令模式,从这个模式使用命令可以切换到另外三种模式,同时无论在任何模式下只要按一下
[Esc]键都可以返回命令模式。
输入模式:在命令模式下按'i'可进入输入模式。
末行模式:在命令模式输入':'即可进入该模式。
可视模式:在命令模式下,有三种方式进入该模式
    1)小v进入visual模式,任意选中
    2)大V进入visual line模式,行为单位选中
    3)ctrl+v进入visual block模式,可以根据列进行选中,d剪切、y复制、p粘贴

命令模式下的操作:
1)删除操作
  x:删除光标处的单个字符
  dd;删除光标所在行
  dw:删除当前字符到单词尾包括空格的所有字符
  #x:3x删除光标处向右的三个字符
  #dd:3dd从当前行开始向下删除三行文本
  ggdG:删除所有内容。
  dgg:从开始位置删除到光标所占行。
  dG:删除光标所在行到结尾。

2)撤销操作
  u命令取消最近一次的操作,可以使用多次来恢复原有的操作
  U取消所有操作
  Ctrl+R可以恢复对使用u命令的操作

3)复制操作
  yy命令复制当前整行的内容到vi缓冲区
  yw复制当前光标所在位置到单词尾字符的内容到vi缓存区,相当于复制一个单词
  y$复制光标所在位置到行尾内容到缓存区
  y^复制光标所在位置到行首内容到缓存区
  #yy例如:5yy就是复制5行
  #yw例如:2yw就是复制两个单词

4)粘贴
  p小:将已复制的数据在光标下一行粘贴上
  P大:则为贴在光标的上一行

5)查找
  /pattern:回车,从光标位置开始向下查找
  n继续向下查找,N向上查找
  ?pattern:回车,从光标位置开始想上查找
  n继续向上查找,N向下查找

  pattern是需要匹配的字符串,例如:
  /hello<Enter> #查找hello
  /hello<Enter> #查找hello单词(注意前后的空格)
  除此之外,pattern还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,“/”为转义字符。
  /^hello<Enter> #查找以hello开始的行
  /hello$<Enter> #查找以hello结束的行
  //^hello<Enter> #查找^hello字符串

底行模式下的操作

1)退出
【:w】保存不退出
【:q】不保存退出
【:wq】保存退出
【:x】保存退出
【:q!】不保存强制退出
【:wq!】保存强制退出

2)显示行号,取消行号
:set nu
:set nonu

3)查看编码
:set fileencoding

4)替换
:[range]s/pattern/string/[c,e,g,i]
range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行至最后一行,也就是整篇文章,也可以 % 代表。 % 是目前编辑的文章,# 是前一次编辑的文章。
pattern 就是要被替换掉的字串,可以用 regexp 来表示。
string 将 pattern 由 string 所取代。
c confirm,每次替换前会询问。
e 不显示 error。
g globe,不询问,整行替换。
i ignore 不分大小写。
I ignore 大小写敏感。

示例
:s/oldstr/newstr/ #替换当前行第一个为oldstr为newstr
:s/oldstr/newstr/g #替换当前行所有oldstr为newstr
:n,$s/oldstr/newstr/ #替换第 n 行开始到最后一行中每一行的第一个oldstr为newstr
:n,$s/oldstr/newstr/g #替换第 n 行开始到最后一行中每一行所有oldstr为newstr
#(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/oldstr/newstr/ #(等同于 :g/lantian/s//sky/)替换每一行的第一个oldstr为newstr
:%s/oldstr/newstr/g #(等同于 :g/lantian/s//sky/g) 替换每一行中所有oldstr为newstr

:s#lantian/#sky/# 替换当前行第一个oldstr/为newstr/,可以使用 #或+ 作为分隔符,此时中间出现的 / 不会作为分隔符
:%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

恢复文件
vi在编辑某一个文件时,会生成一个临时文件,这个文件以 . 开头并以 .swp结尾。正常退出该文件自动删除,如果意外退出例如忽然断电,
该文件不会删除,我们在下次编辑时可以选择一下命令处理:
  O只读打开,不改变文件内容
  E继续编辑文件,不恢复.swp文件保存的内容
  R将恢复上次编辑以后未保存文件内容
  Q退出vi
  D删除.swp文件
  或者使用vi -r 文件名来恢复未保存的内容

相关文档:

https://www.cnblogs.com/luosongchao/p/3193153.html

https://www.cnblogs.com/logsharing/articles/8182850.html

—转载请注明出处
原文地址:https://www.cnblogs.com/landiss/p/13864776.html