Please enable Javascript to view the contents

Linux经验-vim操作记录

 ·  ☕ 5 分钟

模式

  • Normal模式:
  • Insert模式:
  • Visual模式:

撤销、恢复

撤销: u (小写 u)

恢复撤销: CTRL-R

1. 命令 command

非操作符命令

1.1 插入 INSERTION

i光标所在处进入插入模式 操作: i 输入字符
I 在光标所在行,行首进入插入模式 操作: I 输入字符

注意: 按下 将进入NORMAL模式, 或取消不想要的和部分完成的命令。

1.2 另开新行 Open

o 在光标下方打开一行,并进入Insert模式.
O 在光标上方打开一行,并进入Insert模式.

1.3 追加 Appending

a光标后追加字符 a 输入字符
A光标行尾追加字符 A 输入字符

i, I, a, A, o, O 相同点是:都会进入Insert模式,不同是:光标的位置不同。

1.4 替换 Replace

始终会保持在Normal模式,但光标会变为 _
输入 r后,光标会变成下划线,此时输入的字符会将当前字符替换,并立即返回Normal模式。

替换单字符: 替换光标所在字符 r 输入字符
持续替换: 进入Rplace,直至时结束 R 输入字符

1.5 粘贴 Paste

puts (pastes):通过 yy ye 命令复制的内容、通过 dd dw删除的内容等,都可以通过 p将其粘贴到其他位置。

光标字符后,粘贴内容 p

/<search phrase> 向下搜索 n 反向搜索 N

/ /目标字符串 n: 向下搜索,下一个 N: 反向搜索,上一个
? ?目标字符串 n: 反向搜索,上一个 N: 向下搜索,下一个
% 光标移动到 { [ ( , 然后键入%字符,光标会移动与之对应的 } ] )

1.7 替换 Substitute

命令格式是:
:[range]s/{old-string|pattern}/{string}/[flags]
[range] 指定行范围, %表示全文件 1,10表示1-10行 '<,'>可视模式选中范围
{old-string|pattern} 表示旧字符串,也可以使用正则
{string} 新字符串,
[flags] 标志, g表示全局替换 c交互 1,10跨行可自由组合

  • 单行内替换

:s/old/new 当前行,匹配到的第一个old,替换为new
:s/old/new/g 当前行,匹配到的所有 old,替换为new

  • 跨行替换

:1,10s/old/new/g 1-10行, 匹配到的所有old,替换为new
:’<,’>s/old/new/g 在可视模式选中的区域, 匹配到所有old,全部替换为new(操作步骤为:v进入可视模式visual, jkhl移动光标进行区域选择, :s/old/new/g 替换)。

  • 全文件替换

%s/old/new/g 全文件替换

  • 交互替换(c confirm确认)

:s/old/new/c 替换时会弹出确认对话框,每次替换前都会询问是否替换

  • 正则表达式替换(有问题)

:s/$\d+$/[new-\1]/g

命令格式

修改命令的格式如下:
operator [number] motion
说明:
operator - 操作符: 表示要做什么,例如 d 表示删除
[number] - 数字(可选): 表示重复后面的motion多少次
motion - 动作: 表示在文本上的移动动作。w (word)、e (end of word)、$ (end of the line)、0 (start of the line)等

注意:[number]operator 顺序可以互换,例如 d5l5dl 效果一样。

操作符 operator

删除 d

Delete 会将[number]motion的内容全部删除,并保持在Normal模式;

删除光标所在的一个字符 x

删除一个单词: 删除从光标到下一个字开头的中间内容 dw
删除一个单词: 删除从光标到当前字结尾的中间内容 de
删除从光标到当前行结尾的中间内容 d$
删除光标所在一整行内容 dd
左删除5个字符 d5h
右删除5个字符 d5l
删除光标所在行及以下10行内容 d10j 10dd
删除光标所在行至文件末尾内容 dG
删除光标所在行至文件开头内容 dgg

修改 c

Change 会将[number]motion的内容全部删除,并进入Insert模式;

删除从光标到下一个字开头的中间内容, 并进入Insert模式 cw
删除一个单词: 删除从光标到当前字结尾的中间内容, 并进入Insert模式 ce
删除从光标到当前行结尾的中间内容, 并进入Insert模式 c$
删除光标所在整行内容,并进入Insert模式, 并进入Insert模式 cc
左删除5个字符, 并进入Insert模式 c5h 5ch
右删除5个字符, 并进入Insert模式 c5l 5cl
删除光标所在行及以下10行内容, 并进入Insert模式 c10j 10cj 10cc
删除光标所在行至文件末尾内容, 并进入Insert模式 cG
删除光标所在行至文件开头内容, 并进入Insert模式 cgg

c是operator,i"是文本对象,表示 “ 在引号内( inside" )”
删除光标所在’‘内的所有内容, 并进入Insert模式 ci'
删除光标所在"“内的所有内容, 并进入Insert模式 ci"
删除光标所在{}内的所有内容, 并进入Insert模式 ci{
删除光标所在[]内的所有内容, 并进入Insert模式 ci[
删除光标所在()内的所有内容, 并进入Insert模式 ci(

复制 y

yanks(copy)

复制光标所在的一个字符 y

复制从光标到下一个字开头的中间内容 yw
复制从光标到当前字结尾的中间内容 ye
复制从光标到当前行结尾的中间内容 y$
复制光标所在一整行内容 yy
左复制5个字符 y5h 5yh
右复制5个字符 y5l 5yl
复制光标所在行及以下10行内容 y10j 10yj 10yy
复制光标所在行至文件末尾内容 yG
复制光标所在行至文件开头内容 ygg

custom复制:按 v进入Visual模式,再通过 hjkl 选择内容,再按 y 对内容进行复制,最后通过 p 在合适位置进行粘贴。

动作 motion

光标在文本上的移动行为

  • 基本:上下左右

光标可以既可以通过方向键移动,又可以通过hjkl移动。
h (left) j (down) k (up) l (right)

  • 中间:其他

移动到行尾 $
移动到行首 0
移动到下个单词首部 w
移动到当前单词末尾 e
移动到文件末尾 G
移动到文件开头 gg
移动到文件指定行(举例:第33行) 33G 或者 :33

  • 高级:配合Num

向下移动10行 10j
向上移动10行 10k
向左移动10个字符 10l
向右移动10个字符 10h
移动到右侧第10个单词首部 10w
移动到右侧第10个单词尾部 10e

设置 Set

命令格式如下:
:set options[x xx]

选项options:
‘ic’ ‘ignorecase’ 搜索、替换时, 忽略大小写(ic ignorecase)
‘is’ ‘incsearch’ 显示搜索短语的部分匹配结果
‘hls’ ‘hlsearch’ 高亮 (highlight) 所有匹配的字符串

可以通过option前增加no来关闭相应option, 例如 :set noic

分享

Hex
作者
Hex
CloudNative Developer

目录