Vi/Vim的使用方法
Linux必备技能,熟练掌握。

Vi / Vim的使用方法

一、vi/vim基本指令

vi/vim 共有三种模式:

  1. 命令模式(Command mode):进入vi的初始模式。
  2. 输入模式(Insert mode):按键 iao 进入,按键 ESC 退回命令模式。
  3. 底线命令模式(Last line mode):按冒号 : 进入,可以输入复杂命令。命令以回车运行,同时退回命令模式。

基本原则:大小写敏感!数字、次数加在命令前!     

(一)命令模式

  1. 屏幕显示
  • ctrl-e 翻一行(显示下一行);ctrl-d 翻半屏; ctrl-f 翻一屏
  • ctrl-y 往回翻一行(显示上边一行); ctrl-u 往回翻半屏; ctrl-b 往回翻一屏
  • zz 当前行居中;zt 当前行置顶;zb 当前行置底
  1. 方向导航
    hjkl
  • 20j 相当于按20下j
  1. 按键导航

1)绝对定位

  • 25G 跳至第25行行头(等同于:25
  • G 文件尾行的头;gg 文件首行的头

2)短距离相对定位

  • w 下一个“词头”;b 前一个“词头”
  • e 下一个“词尾”;ge 前一个“词尾”
  • fx 本行下一个x;Fx 本行上一个x
  • 0(零) 行头;^ 非空行头;$ 行尾

3)长距离相对定位

  • H 屏幕显示的第一行行首;M 屏显中间行行首;L 屏显尾行行首

4)其他

  • ctrl-o 上次的定位;ctrl-i 下次的定位 
  • % 下一个匹配的括号
  1. 查找
  • /字符串 查找下一个匹配;?字符串 向前查找上一个匹配
  • 查找后,n 再次查找;N 反向再次查找。
  1. 定位
  • mx 做x标记(x为26个字母);`x 跳转到x标记处;'x 跳转到x标记所在行行首
  1. 改写
  • rx 改写光标所在字符为x;R进入取代模式,持续改写,直到按ESC退出。
  • ~ 将光标所在字符进行大小写转换,并定位到下一个字符。
  • J 将光标所在行与下一行合并成一行(两行间用1个空格隔开)。
  1. 删除、复制、粘贴
  • x 删除当前一个字节;X 退格删除一个字节
  • d方向 删除(按方向)。例如:d$删除到行尾;5dw 删除一个词并执行5遍,即删除5个词。
    • 方向包括:0(零) 行头;^ 非空行头;$ 行尾;. 通配一个字符;等等。
  • D 删除包括当前位至行尾(等同于 d$
  • dd 删除当前行(等同于 :d
  • c方向 删除并转为输入模式(按方向)。
  • y方向 复制(按方向)。
  • yy 复制当前行
  • P 在光标处,粘贴上次删除的内容 (剪切粘贴);p 在光标后
  1. 重复
  • . 重复前一个动作。
  1. 撤销
  • u 撤销一次; ctrl-r 恢复撤销,重做。

(二)输入模式

  1. 进入输入模式:
  • i光标前;I行前
  • a光标后;A行尾
  • o下新建一行;O上新建一行
  1. 临时取代模式:
  • R 进入取代模式(Replace mode),输入将一直取代光标所在处的文字,直到按下ESC退出。
  • r 取代一次,例如rx用x取代光标所在字符。

(三)底线命令模式

  1. 查找替换
  • :s/找/换为 替换当前行第一次
  • :s/找/换为/标识 其中标识:g 替换当前行的所有;c 询问。例如::s/word1/word2/gc
    y 本次是;n 本次否;a 所有是;q 所有否;l 本次是后边全否)
  • 可以加范围:
    • :2,5 第二行至第五行;:2,,从第二行到最后。例如::2,5s/找/换为,第2至5行的每行第一个替换。
    • :. 当前行
    • :$ 最后一行
    • :% 所有行。例如::%s/找/换为/gc,全文全部替换,每次询问
    • :g/找/ 所有包含的行
    • :'x 标记x
  • /间隔符可以用#+替代
  1. 文件
  • :q 退出;:q! 不存盘退出(等同于ZQ);:x 存盘退出(等同于ZZ);:wq 强存盘退出

  • :w filename 另存为filename;:2,5w filename 2-5行另存为filename。 

  • :r filename 读取文件,并在当前行的下一行插入文件filename的内容。

  1. 临时运行外部命令
  • :!command 暂时离开 vi/vim,执行command并显示结果。例如 :!ls /home
  1. 设置
  • 显示/不显示行号::set number:set nonumber 默认。(带no是设回,默认)
  • 查找时,忽略大小写,均匹配::set ignorecase
  • 突出显示当前行::set cursorline
  • 自动缩进,即每行的缩进同上一节相同::set autoindent
  • 高亮搜索结果: :set hlsearch
  • 不自动换行::set nowrap
    通用:
  • :set XXX& 将XXX项设回默认值。

设置只对当前任务,关闭后再开无效。

如希望修改vim的默认设置,编辑vimrc文件(unix:/.vimrc;windows:目录/_vimrc)中添加:set  XXX

二、高级操作

(一)可视化选择模式

vi/vim 可以可视化选择,即进入可视模式(Visual Mode)。包括:

  • 字符选择模式: 选中光标经过的所有字符,普通模式下按 v 进入
  • 行选择模式:选中光标经过的所有行,普通模式下按 V 进入
  • 块可视化模式:选中一个矩形内的文本,普通模式下按 ctrl-V 进入
    退出按 ESC 或再按 v
  1. 可视化选择
    进入可视模式后,操作 hjkl 选中文本。o 转换前后选择焦点。此外还可通过:
  • v i[ 选中[]中间内容,不包括[]。其他括号类似。
  • v i" 选中"“中间内容
  • v it 选中中间的内容
  • v ib 选中一个block
  • v is 选中一个句子
  • v iw 选中一个单词
  • v ip 选中一个段落
    注意:v av i 类似,但包括边界,即包括[]。 注意:ai前可以加数字,代表多层。
  1. 选中后的操作
    1)传统 dcyp 等操作。
    2)J 将高亮显示的文本内容合并为一行,同时以空格来分隔各行。
    3)< 左缩进;> 右缩进;= 自动缩进。

(二)分割窗口

  1. 上下分屏::split filename 上下分屏(平均分);指定3行分屏 :3split filename
  • 注意新分出来的屏幕在上方,内容为filename,操作焦点转为新屏。
  • 如提供的filename不存在,新建filename。
  • :new 不指定filename的新建上下分屏。
  • :split 如不提供filename,新屏复现原屏内容。等同于ctrl+w s
  • 缩写:sp
  1. 左右分屏::vsplit filename;缩写 :vsp;新建分屏 :vertical new;等同ctrl+w v

  2. 切换分屏焦点:

  • crtl+w w
  • ctrl+w h,j,k,l
  • ctrl+w 上下左右
  1. 分屏互换位置
  • crtl+w r 互换分屏窗口位置;焦点不变、跟着换。
  1. 调节窗口大小
  • ctrl-w +ctrl-w -ctrl-w =
  1. 关闭分屏
  • :close 等同 ctrl+w c 关闭当前窗口
  • :only 仅保留当前分屏,关闭其他

最后修改于 2024-02-24