linux vi/vim

Posted 温昀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux vi/vim相关的知识,希望对你有一定的参考价值。

1.vi/vim快捷键位图

详细可以参考:https://www.runoob.com/w3cnote/all-vim-cheatsheat.html

2.vi/vim的三种模式

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode)输入模式(Insert mode)底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式:

用户刚刚启动 vi/vim,便进入了命令模式。

此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会在界面上输入一个字符i,i被当作了一个命令。

以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式:

在命令模式下按下i,a,o等就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。

底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件

按ESC键可随时退出底线命令模式。

3.vi/vim打开和新建文件

(1)打开文件:vi filename

(2)打开文件并到指定行:vi filename +[n],其中n为指定行数,如果不输入n,会到文件末尾行。

4.vi/vim的异常处理

如果vi/vim退出异常,在磁盘上可能会保存交换文件,此时输入vi filename会有E325提示。

此时,可用ls -la命令查看到一个“.filename.swp”文件

可以输入:recover恢复文件

再用rm .filename.swp命令删除这个文件,再次使用vi filename就不会报错了。如果不需要恢复直接执行rm .filename.swp命令删除这个文件即可。

5.vi/vim命令合集

(1)命令模式切换到编辑模式:

    ①.插入模式

    输入i,I,o,O,a,A等任何一个字母都可以进入vi插入模式。

  • i 在当前位置插入
  • I 在当前行首插入
  • a 在当前位置后插入
  • A 在当前行尾插入
  • o 在当前行之后插入一行
  • O 在当前行之前插入一行

    ②.取代模式

    输入r和R会进入取代模式。

  • r 只会取代光标所在的那一个字符一次
  • R 会一直取代光标所在的文字,直到按下 ESC 为止

(2)命令模式切换到底线命令模式:

    ①.写入

  • :w 将编辑的数据写入文件中
  • :w! 若文件属性为只读时,强制写入该文件。(能不能写入与用户对文件的权限有关)

    ②.离开

  • :q 离开vi
  • :q! 在vi模式下修改过文件但在离开vi时又不想保存可用
  • :wq 或 :x 保存写入或修改的数据后离开vi
  • :wq! 强制保存写入或修改的数据后离开
  • ZZ 注意ZZ前面不需要输入“:”,若文件没有改动,则不保存离开,若档案已经被改动过,则保存后离开

    ③.另存为

  • :w [filename] 将文件的数据保存为 filename 这个文件
  • :n1,n2 w [filename] 将 n1 行到 n2 行的数据另存为成 filename 这个文件

    ④.读入其他文件的数据

  • :r [filename] 在编辑的数据中,读入另一个文件的数据。亦即将 filename 这个档案内容加到游标所在行后面

    ⑤.暂时离开vi模式

  • :! command 暂时离开 vi 到指令行模式下执行 command 的显示结果

(3)命令模式

    ①.移动光标

上下左右移动 行内移动 行数移动 屏幕移动 程序的段落移动 程序的段落切换 

  • [n]h 或 键盘左箭头([n]←)光标向左移动n个字符
  • [n]j 或 键盘下箭头([n]↓)光标向下移动n行
  • [n]k 或 键盘上箭头([n]↑)光标向上移动n行
  • [n]l 或 键盘右箭头([n]→)光标向右移动n个字符
  • [n]w 向后移动n个单词
  • [n]b 向前移动n个单词
  • [n]+空格符向右移动n个字符
  • 0或者Home键 到行首
  • ^ 到行首第一个不是空白字符的位置
  • $ 到行尾
  • n$ 到下面n行行尾
  • gg 到文件开头
  • G 到文件行尾
  • [n]gg 或 [n]G 或 :n 到第n行
  • [n]+enter键 向下移动n行
  • + 到非空格符的下一行
  • - 到非空格符的上一行
  • Control键+f 屏幕向下移动一页
  • Control键+b 屏幕向上移动一页
  • Control键+d 屏幕向下移动半页
  • Control键+u 屏幕向上移动半页
  • Control键+e 向下移动一行
  • Control键+y 向上移动一行
  • H 到屏幕顶部第一个字符
  • M 到屏幕中间第一个字符
  • L 到屏幕底部第一个字符
  • { 上一段
  • } 下一段
  • % 括号匹配及切换

    ②.搜索

  • /str str表示查找的内容,查找到指定内容之后可以使用n:查找下一个,N:查找上一个
  • ?str 向光标之上寻找一个字符串名称为str的字符串
  • * 向后查找当前光标所在单词
  • # 向前查找当前光标所在单词

    ③.替换

  • r 替换当前字符
  • R 一直替换当前行光标后字符
  • :%s/word1/word2/g word1替换成word2,全局替换,替换所有匹配
  • :s/word1/word2/g 可视区域替换,需要先选择要替换的范围
  • :%s/word1/word2/gc 确认替换,在替换时会有提示
  • :n1,n2s/word1/word2/g n1 与 n2 为数字。在第 n1 与 n2 行之间寻找 word1 这个字符串,并将该字符串取代为 word2 
  • :1,$s/word1/word2/g 或 :%s/word1/word2/g 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2
  • :s/word1/word2/ 用word2替换word1,替换当前行的第一个匹配
  • :%s/word1/word2/ 用word2替换word1,替换所有行的第一个匹配
  • :1,$s/word1/word2/gc 或 :%s/word1/word2/gc 从第一行到最后一行寻找 word1 字符串,并将该字符串取代为 word2 ,且在取代前显示提示字符给用户确认 (confirm) 是否需要取代。y为确认替换,n为不替换,a为替换所有,q为退出替换

    ④.删除

  • x 或 dl 删除光标所在字符,或者在一行当中选中的文字
  • nx 删除当前光标向后n个字符
  • X 或 dh 为向前删除一个字符
  • dd 删除光标所在一整行
  • dj 删除上一行
  • dk 删除下一行
  • dw 从光标位置删除到单词末尾
  • d} 从光标位置删除到段落结尾
  • nd 删除当前行开始的n行
  • ndd 删除光标所在向下n行
  • d1G 删除光标所在到第一行的所有数据
  • dG 删除光标所在到最后一行的所有数据
  • d$ 或 D 删除光标所在处到该行的最后一个字符
  • d0 删除光标所在处到该行第一个字符 
  • kdgg 删除当前行之前的所有行(不包括当前行)
  • jdG 删除当前行之后的所有行(不包括当前行)
  • :n1,n2d 删除n1到n2行
  • :n1,$d 删除n1行及以后所有行
  • J 删除两行之间的空格

    ⑤.复制

  • yy 复制游标所在那一行的所有数据
  • nyy n为数字,复制光标所在的向下 n 行
  • y1G 复制游标所在行到第一行的所有数据
  • yG 复制游标所在行到最后一行的所有数据
  • y0 复制光标所在的那个字符到该行行首的所有数据
  • y$ 复制光标所在的那个字符到该行行尾的所有数据

    ⑥.粘贴

  • p 将已复制的数据贴在光标下一行
  • P 将已复制的数据贴在游标上一行!

    ⑦.标记与定位

  • m[flag] 添加标记,flag可以是a-z或者A-Z之间的任意一个字母
  • \'[flag] 直接定位到flag所在位置

    ⑧.剪切

  • 在vi中,删除操作其实就相当于剪切操作
  • 正常模式下按v(逐字)或V(逐行)进入可视模式,然后用h、j、k、l等命令移动即可选择某些行或字符,再按d即可剪切
  • ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴
  • :n1,n2d 将n1到n2行剪切。利用p命令可将剪切后的内容进行粘贴。
  • :n1,n2 m n3 将第n1到n2行移动到第n3行之后。

    ⑨.撤销和重做

  • u 撤销上次命令
  • U 撤销对整行的操作
  • Control键+r 重做,即恢复撤销的命令

    ⑩.重复执行和缩进

  • . 重复执行前一个操作
  • >> 向右增加缩进
  • << 向左增加缩进

(4)可视模式

    可视模式可以和移动光标命令连用,如ggVG可以选中所有内容。

  • v 可视模式,从光标位置开始按照正常模式选择文本
  • V 可视行模式,选中光标经过的所有行
  • Control键+v 可视块模式,垂直方向选中文本

   

以上是关于linux vi/vim的主要内容,如果未能解决你的问题,请参考以下文章

linux基础知识都有哪些

Linux汇总一——Linux程序管理,Linux终端,Linux命令格式命令类型及Linux命令帮助

Linux学习导航

Linux 文件/目录管理(初级)

Linux 内核Linux 内核源码结构 ( 下载 Linux 内核源码 | 使用 VSCode 阅读 Linux 内核源码 )

嵌入式linux怎么学