Vim
约 1486 个字 3 张图片 预计阅读时间 5 分钟
Abstract
虽不是目前最常用的工具,但是每次要用的时候都会有些生疏的工具。 🤦♂️
常见操作还是要重点掌握,并且熟练
Vim命令太过多,先放上Vim Cheat Sheet
都已经有VSCode这种强大的工具,见Stack Overflow survey 2023, Why Vim ?
- "选什么选,我全都要!",不如在VSCode里面试试这个插件
- Vim 在Shell中无可代替,如果你用SSH远程想进行编辑工作,Vim不二之选
- 它可以让你脱离鼠标,只用键盘就高效完成一系列操作 😎
- Vim(最流行的基于命令行的编辑器) + VScode(最流行的编辑器) 才是YYDS!!!- PS: Vim 学习之路比较陡峭
 
Vim 起源于Vi编辑器(1976), Vim之父——Bram Moolenaar .RIP.
Vim哲学
因为在编程时,大多数时间是在阅读和编辑,而非在写。故Vim 有多种操作模式
一定要分清当前是处于什么模式下!
- 普通模式(Normal mode): 默认的模式,无法输入字符,仅围绕文件移动并进行编辑
- 插入模式(Insert): 普通模式下摁i则进入了插入模式(Insert), 摁esc则返回普通模式
- 替换(Replace):用于替换文本
- 可视化(Visual): 用于选择文本块
- 命令行(Command-line): 用于执行命令
 
The end result is an editor that can match the speed at which you think.
Vim基础
插入
在 Insert 和 Normal 模式下切换!
- 按i可在闪烁光标的 前面 插入- 5ihello [ESC]→ 会写下 hello hello hello hello hello
 
- 按a可在闪烁光标的 后面 插入
- 按I可在 当前行的第一个字符前面 插入
- 按A可在 当前行最后面 插入
- 按o可在 当前行的下一行 插入
- 按O可在 当前行的上一行 插入
移动光标
均要在普通模式下进行输入
hjkl (对应←↓↑→)  , 也可以在前面加上数字 4e.g. 4j 向下移动4行
     PS: 不推荐用箭头,而是熟练用hjkl(开始会很难用,很不习惯,克服!!)
PS: 不推荐用箭头,而是熟练用hjkl(开始会很难用,很不习惯,克服!!)
- 0移动到当前行的 行头
- $移动到当前行的 行尾
- ^移动到本行非blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
- g_移动到本行最后一个不是blank字符的位置。
- NG 或 Ngg 或 :N其中N为数字,则跳转到第N行
- gg跳转到第一行
- G跳转到最后一行
- 按照 单词 进行移动- w到下一个单词的 开头(jump forwards to the start of a word)
- W到下一个单词的开头(可包含标点符号)
- e到下一个单词的 结尾(jump forwards to the end of a word)
- E移动到空白处之前的单词末尾
- b到上一个单词的 开头(jump backwards to the start of a word)
- B到上一个单词的开头(可包括标点符号)
 
- %匹配括号- (),{},[]移动, PS: 需要先把光标先移到括号上
- *和- #匹配光标当前所在的单词,(*是下一个,#是上一个)
- Screen: H(top of screen),M(middle of screen),L(bottom of screen)
- Scroll: Ctrl-u(up),Ctrl-d(down)
删除&复制&粘贴&撤销
- x删除当前光标所在的一个字符
- dd删除当前行,并把删除的行存到剪贴板里(即剪切)- d$: 删除从光标处到行尾的文本(常用于注释)
- d^: 删除从光标到行首
- dw: 删除一个单词,并存入剪贴板(删除n个单词- dnw)
- d0: 从光标处向前进行删除,并存入剪贴板
- :x,yd从第x行到第y行进行删除
 
- cw内容用 内容 替换从光标所在位置后到一个单词结尾的字符
- yy拷贝当前行; 同样的也可以前面加数字, e.g.- 3yy从光标处复制3行- 类比dd即可 (:a,by) 拷贝a~b行
 
- 类比
- p粘贴剪贴板的内容
- u撤销
- Ctrl + r取消撤销
- 对特殊符号里面的内容进行删除:- ci[: 删除[]里面的内容,并重新编辑
- [改为- ]也可以,当然(或"同理
- 等价dt]从当前删除到],也可以为)"等
 
- gcc注释此行
打开/保存/退出/改变文件
- :e <path/to/file>打开一个文件
- :wq→ 存盘 + 退出 (:w 存盘, :q 退出)
- :q!→ 退出不保存
- :qa!强行退出所有的正在编辑的文件,就算别的文件有更改
- :bn和- :bp→ 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件
查找和替换
普通模式下 /pattern 查找搜索 pattern 的字符串
- 若多个匹配项,按n匹配到下一个,按N找上一个字符串
部分替换:
- :s/[src]/[dst](只能在光标所在的行),- /i忽略大小写,- /g全部匹配- 比如:将此行的hello替换为world → :s/hello/world/ig
 
- 比如:将此行的hello替换为world → 
- 也可以制定范围,比如3~6行 → :3,6 s/hello/world/ig
全部替换::%s/[src][dst] , 默认不区分大小写
Vim 进阶
分屏
命令模式输入:sp 水平分屏,输入:vs 垂直分屏
- 或 ctrl + w + s水平;ctrl + w + v竖直
- ctrl + w + 方向键各窗口切换或者摁着ctrl按两下w进行来回切换
- Ctrl+w hjkl进行窗口间的切换,- :q进行退出窗口
:tabnew 创建多标签 gt下一个,gT上一个
Visual模式(块操作)
按v可视化选择状态,左下角出现VISUAL,选中块后,可以对块进行d(删除),y(复制),x(剪切)
shift + v 可选择一行,进行操作
ctrl + v 可进行竖向选择, 比如批量注释代码:
- 按ctrl+v,选中要注释的行 → 输入I,然后输入//→ 再输入esc
- 把要选的选中后,按=可进行代码对齐
Ctrl + s在Vim并非保存,而是锁定。进行随意输入并无反应,当按ctrl+q才正常(接触锁定)
TO DO:
- 可视化补充
- VIM配置 AND SO ON....
