VIM使用

VIM使用

一、三种模式简介

1.Normal模式

ESC | ctrl+[

2.Insert模式

小写 i (insert) 当前字母前面插入 | 大写 I 行首插入

小写 a (append) 当前字母后面插入 | 大写 A行末插入

小写 o (open a line below) 当前行下方插入空行并进入插入模式 | 大写 O当前行上方插入空行并进入插入模式

小写 s (substitute) 删除当前字符并进入插入模式 | 大写 S删除当前行并进入插入模式 (注意会有删除操作)

3.Visual模式 普通模式下使用v进行visual选择,例如

选择 普通模式 按v,左下角变成VISUAL,光标往右移动(会选中一段区域),eg:按d或x删除

选择行 大V整行选中,使用上下方向键,eg:按d或x删除

选择块 Ctrl + v 配合方向键可以选择一块区域,eg:按d或x删除

Command命令,普通模式下输入“:”之后执行命令,例如
:wq 保存退出
:vs 垂直分屏 vertical split
:sp 横向分屏 split
:%s /oldstr/newstr /g 全局替换
:syntax on 语法高亮
:set hls 高亮搜索
:set incsearch 增量搜索


二、移动

上下左右:h (←) j (↓) k (↑) l (→)

ADM-3A 终端机全貌.png
键盘.png

单词移动.png

单词移动

w/W 移到下一个word/WORD开头

e/E 移动到下一个word/WORD结尾 # 首次执行,若光标不在当前单词结尾,则会跳到本单词结尾

b/B 回到上一个word/WORD开头 # 首次执行,若光标不在当前单词开头,则会跳到本单词开头

其中 word -以非空白符分割的单词,WORD -以空白符分割的单词

行间搜索移动

f{char} 正向移动到下一个{char}字符上,F{char}表示反过来搜前面的字符

t{char} 正向移动到char的前一个字符,大写的T反过来向前,移动到char的后一个字符

; 重复上次的命令

, 反转方向执行上次的命令

Vim水平移动

0移动到行首第一个字符

$移动到行尾

Vim页面移动

gg/G 移动到文件的开头和结尾,可以使用Ctrl + o快速返回(可连续返回)

Ctrl + u/Ctrl + f 上下翻页(upword/forword)
Ctrl+u/Ctrl+d 上下翻半页(up/down)

标记跳转

m{mark} 标记

`{mark} 返回标记

三、文本对象

  • 操作方式:[number][text object]

    number 次数
    command 命令,d(delete),c(change),y(yank)
    text object 要操作的文本对象,比如单词w,句子s,段落p

  • 范围文本对象:

    ​ iw 当前单词 ; aw 当前单词及一个空格

  • 分隔符文本对象:i (in) 选择分隔符内部的文本,a (around) 选择包括分隔符在内的整个文本

    a) 一对圆括号 ; i) 圆括号内部

image.png

四、增删改查

Vim删除

  • Vim在Normal模式下:

    x 删除光标处字符 4x 删除4个字符
    dw/daw(d around word) 删除光标所在单词
    diw 不会删除单词周围的空格
    dd 删除当前行 5dd 删除5行

  • 插入模式下:
    ctrl+h 删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行(同样,这几个快捷键适用于终端)

Vim 快速修改

  • 常用有三个,r(replace),c(change),s(substitute)
  • normal模式下使用r可替换一个字符。s替换并进入插入模式
  • 使用c配合文本对象,快速修改

撤销操作

u (undo)表示撤销最后一次修改 #可以连续用

U 表示撤销对整行的修改 #只能用一次,再用旧是恢复撤销的内容,二者不断切换

Ctrl + r 恢复撤销的内容 #可以连续用

Vim查询

  • 使用/或?进行前向或者反向搜索

  • 使用n/N跳转到下一个或者上一个匹配

  • 使用*或者#进行光标所在单词的向前和向后匹配 # 得在查询时才能这样用

五、搜索替换

用途:代码中命名错误、重构代码

:[rang] s[ubstitute]/{pattern}/{string}/[flags]

  • rang:表示范围,比如:10,20 表示 10-20 行,% 表示全部。

  • pattern:表示要替换的模式(支持:正则)。

  • string:替换后的文本。

  • flags:替换标志位。g(global) 表示全局范围内执行;c(confirm) 表示确认,可以确认或拒绝修改;n(number)报告匹配到的次数而不替换。

Tips:

  • 单词精确匹配,可使用 <>,如::% s/\/world/g,将所有的 hello 替换为 world。

六、复制粘贴与寄存器

Normal模式复制粘贴

选中 v(visual) 复制 y(yank) 粘贴 p(put) 剪切 d(delete),剪贴dp

粘贴代码需要注意:默认设置autoindent(自动缩进),粘贴python代码缩进混乱

需要使用:set paste 和:set nopaste解决

Vim寄存器

Vim里操作的是寄存器而不是系统剪切板

默认我们使用d删除或者y复制的内容都放到了“无名寄存器”

  • 通过 "{register} 前缀可以指定寄存器,不指定默认用无名寄存器。

    • 如: "ayiw 复制一个单词到寄存器 a 中,"bdd删除当前行到寄存器 b 中。
  • 复制专用寄存器 "0 使用 y 复制文本同时会被 拷到复制寄存器 0

  • 系统剪贴板 "+ 可以在复制前加上 "+ 复制到系统剪贴板。注:需要支持 :echo has('clipboard') 返回结果为:1。

  • 其它一些寄存器,如: ". 上次插入的文本; "% 当前文件名。

Tips:

  • :set clipboard=unnamed 可以直接复制粘贴系统剪贴板的内容。

  • :reg a 查看寄存器a中的内容

  • :call setreg('a', '') 清空寄存器a的内容

  • 常见寄存器:

    "" 无名寄存器,缺省使用,""p等同于p

    "a等 有名寄存器a-z

    "0 复制专用寄存器,使用y复制文本同时会被拷贝到复制寄存器0

    "+ 系统剪贴板,可以在复制前加上 "+ 复制到系统剪贴板

    "% 当前文件名

    ". 上次插入的文本

七、宏(macro)批量操作

  • 使用 q 来进行录制,同时使用 q 来结束录制。

  • 使用 q{register} 选择要保存的寄存器,把录制的命令保存其中。

  • 使用 @{register} 回放寄存器中保存的一系列命令,达到批量操作。

例子:给多行url链接加上双引号

方法一:先使用q开始录制,给一行加上双引号,之后使用q退出;在剩下的所有行中回放录制的宏

录制 -->

qa #开始录制,保存在寄存器a(左下角出现recording @a)

I -> 加上前双引号 -> ESC #在行首插入双引号

A -> 加上后双引号 -> ESC #在行尾巴插入双引号

q #结束录制(左下角recording @a 消失)

回放 -->

1)一行行回放

j #到下一行

@a #回放寄存器a中的录制的操作

2)全篇回放

V #大V选中一行(左下角变成 --VISUAL LINE--)

G #选中行一直到结尾,即全选

: #进入命令行模式(左下角变为 :'<,'> )

normal @a #命令行模式下输入该命令,回车完成全部修改

八、Vim 补全

  • ctrl+n(nest),ctrl+p(previous)搜索文件内的关键词,匹配补全

  • ctrl+x+f 补全文件名。

你可能感兴趣的:(VIM使用)