vim练级攻略(精简版)

vim推荐配置:

cpp 复制代码
curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

0. 规定

Ctrl-λ 等价于 <C-λ>

: command 等价于 :command <回车>

n等价于数字

blank字符 等价于空格,tab,换行,回车等

1. 命令模式 -> NORMAL

<operation> 其他 <motion>

1.0 复制

  • yy 等价于 shift + y → 复制当前行
  • nyy → 从本行向下,复制n行
  • yw → 从光标开始复制到这个单词尾
  • nyw → 从光标开始复制到n个单词尾

1.1 删除字符

  • x→ 删除光标所在的一个字符 s → 删除光标所在的一个字符 并 进入插入模式
  • X→ 删除光标一个字符
  • nx→ 删除光标所在的n字符
  • nX→ 删除光标前n一个字符
  • dt字符→ 删除所有的内容,直到遇到字符
    • 比如dt"表示从当前光标开始 一直删除 直到''

1.2 查找

  • f + 字符 → 查找字符

  • df + 字符 → 从这个光标开始 一直 删除到字符结束

  • cf + 字符 → 从这个光标开始 一直 删除到字符结束 并进入插入模式

1.3 命令插入模式

  • i → 光标不动 并 进入插入模式
  • a → 光标向后 并 进入插入模式
  • o → 向下新增一行 并 进入插入模式
  • O向上 新增一行 并 进入插入模式
  • cw → 从光标位置 删除 连续字符 并 进入 插入模式**(可以有多种组合)**
  • cnw → 从光标位置 删除 连续n字符 并 进入 插入模式**(可以有多种组合)**
  • shfit + i→ 光标移动到行首 并 进入插入模式
  • shift + a→ 光标移动到行尾 并 进入插入模式

1.4 简单的光标移动

  • 0 → 数字零,到行头
  • <C-4>→ 到本行行尾
  • <C-6>→ 到本行第一个不是blank字符的位置
  • g_→ 到本行最后一个不是blank字符的位置

1.5 对文件操作

  • :e <path/to/file> → 打开文件
  • :w→ 保存文件
  • :q! → 退出文件 且 不保存
  • :xZZ:wq → 保存并退出 (:x 表示仅在需要时保存,ZZ不需要输入冒号并回车)
  • :saveas <path/to/file>另存为 <path/to/file>,还会打开这个文件
  • :bn:bp → 切换文件,下一个文件,上一个文件 (n表示next,p表示prev)
  • :n 文件名→ 切换到这个文件

1.6 重复命令

  1. . → (小数点) 可以重复上一次的命令
  2. N<command> → 重复某个命令N次

1.7 高效的光标移动

1.7. 1 按行移动

  • gg→ 到第一行
  • G → 到最后一行
  • 数字+G → 到第 几行,或者**: 数字**→到第几行
  • n + enter→ 向下跳几行

1.7.2 按单词移动

默认方式(字母,数字和下划线) 为分割符

  • w → 移动到下一个单词的开头。b 则表示 上一个单词的开头
  • e → 移动到本单词 或 下一个单词的结尾。

blank字符为分隔符

  • shift + w → 到下一个单词的开头,shift + b 则表示 上一个单词的开头
    • shift + e → 移动到本单词 或 下一个单词的结尾。

1.7.3 (最强)在同一行的光标移动

从左向右 (正方向)

  • f+字符→光标移动到这个字符处
  • t+字符→光标移动到这个字符的前一个位置

从右向左 (反方向)

  • shift + f+字符→光标移动到这个字符处
  • shift + t+字符→光标移动到这个字符的后一个位置

注:数字 + f + 字符 →移动到当前的第几个字符上

注:


1.8 字符大小写转换

  • ~→ 完成光标所在位置字符的大小写切换

  • n~ → 完成光标所在位置开始往后的n个字符的大小写切换

1.9 最强的光标移动

  • %: 匹配括号移动,包括 (, {, [.(需要把光标先移到括号上)
  • *#: 匹配光标当前所在的单词,移动光标到下一个(或上一个)
    匹配单词**(*是下一个,#是上一个)**

1.10 翻页

  • <C-b>→ 上翻一页
  • <C-f>→ 下翻一页
  • <C-u>→ 上翻半页
  • <C-d>→ 下翻半页

1.11 替换字符

  • r → 替换光标所在位置的字符
  • R → 替换光标所到位置的字符,直到按下**「Esc」**键为止

1.12 (重要)区域选择

<action>a<object><action>i<object>

  • action可以是任何的命令,如**d (删除), y (拷贝), v (可以视模式选择)**。

  • object 可能是: w 一个单词, W一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]

  • <action>a<object>(包括object),

  • <action>i<object>(包括object),

1.13 (重要)块操作: <C-v>

1.13.1 快速注释

  • 按下 ctrl+v 进入可视化模式;
  • 上下键(只是上下键)移动光标,选中多行的开头;
  • 按下大写的I,此时进入insert插入模式;
  • 输入要插入的注释符,如:#、//;
  • 按下ESC,就会看到多行代码被注释。

1.14 (重要)自动提示

<C-n><C-p>

  • <C-n> 表示自动补齐的下一个
  • <C-p> 表示自动补齐的上一个

1.15 宏录制: qa 操作序列 q, @a, @@

  • qa 把你的操作记录在寄存器 a
  • q : 停止录制
  • 于是 @a 会replay被录制的宏。
  • @@ 是一个快捷键用来replay最新录制的宏

1.15.1实际操作->快速编号

注 : Y 等价于 yy

  • qaYp<C-a>q
    • qa 开始录制
    • Yp 复制当前行,并粘贴
    • <C-a> 增加1
    • q 停止录制
  • 先预执行一次: @a → 在1下面写下 2
  • 重复执行多次 @@ → 在2 正面写下3
  • 现在做 5@@ 会创建新的5行,并把数据增加到 8

2. 可视化模式

  • v 进入单个选择
  • V 进入行选择
  • <C-v> 进入块选择

2.1 实际操作 -> 在所有行尾加;

  • <C-v>
  • 选中相关的行 (可使用 j<C-d> 或是 /pattern 或是 % 等......)
  • $ 到行最后
  • A+字符,按 ESC。

2.2 其他操作

  • J → 把所有的行连接起来(变成一行)
  • < 或**>** → 左右缩进
  • =→ 自动给缩进(非常好用)

3. 底行模式->COMMAND

  • : vs+文件名:分屏操作
  • :wq → 存盘 + 退出 (:w 存盘, :q 退出)
  • :help <command> → 显示相关命令的帮助。你也可以就输入 :help 而不跟命令
    (退出帮助需要输入:q)
  • :!cmd:不退出vim执行对应的命令(执行命令行,编译,运行,查看man等等)
  • /pattern → 搜索 pattern 的字符串(如果搜索出多个匹配,可按n键到下一个)

4. 分屏操作

4.1 分屏启动Vim

  1. vim -On file1 file2 ... 使用大写的O参数来垂直分屏。
  2. vim -on file1 file2 ...使用小写的o参数来水平分屏。

4.2 创建水平 && 垂直分屏

  1. :split → 创建水平分屏 等价于 <C-w>+ s
  2. :vsplit → 创建垂直分屏 等价于 <C-w>+ v
  3. :sp filename 上下分割,并打开一个新的文件。
  4. :vsp filename 左右分割,并打开一个新的文件。

4.3 关闭分屏

  1. **<C-w>**c 关闭当前窗口。
  2. **<C-w>**q 关闭当前窗口,如果只剩最后一个了,则退出Vim。

4.3 在分屏中移动光标

  • <C-w> + dir : dir就是方向,可以是 hjkl 或是 ←↓↑→ 中的一个,其用来切换分屏。

  • <C-w>+ w : 把光标移到下一个的屏中。

4.4 更改分屏的屏幕尺寸

  • <C-w> + =: 让所有的屏都有一样的高度。
  • <C-w> + : 增加高度
  • **<C-w> -****:**减少高度
  • <C-w>+_:最大化尺寸

5. vim改键位的操作

  • vim的配置文件都在vimrc里面
  • nnoremap 新按键 老按键
相关推荐
Dola_Pan12 分钟前
Linux文件IO(二)-文件操作使用详解
java·linux·服务器
城南云小白2 小时前
Linux网络服务只iptables防火墙工具
linux·服务器·网络
咩咩大主教2 小时前
C++基于select和epoll的TCP服务器
linux·服务器·c语言·开发语言·c++·tcp/ip·io多路复用
Flying_Fish_roe2 小时前
linux-网络管理-网络配置
linux·网络·php
FuLLovers2 小时前
2024-09-13 冯诺依曼体系结构 OS管理 进程
linux·开发语言
xuanyu223 小时前
Linux常用指令
linux·运维·人工智能
有时间要学习4 小时前
Linux——应用层自定义协议与序列化
linux·服务器·网络
阑梦清川4 小时前
简明linux系统编程--互斥锁--TCP--UDP初识
linux·udp·tcp·互斥锁·信号·解锁·加锁
hardStudy_h4 小时前
Linux——常用系统设置和快捷键操作指令
linux·运维·服务器
XF鸭5 小时前
TCP 和 UDP 协议的区别?
linux