230912_再学vim

Haoliang Tang Lv2

最早接触vim这个词是在看HBO的Silicon Valley里的emacs和vim之争,由于我很憧れのRichard Hendricks是emacs党,于是我也暗暗决心当个emacs党。

初めての使用と言うと、大三OS课,就会个最简单的:i插入,:wq保存退出

Why现在决定重新开学vim了?

vim的这套文本编辑的philosophy可能是编辑效率最快的,使いこなせば真的健步如飞。而も不局限于死的快捷键key binding,命令的组合可以玩出各种花样(eg.数字+dd:删多少行),这应该其他编辑器都做不到key binding命令如此强大。

只学一套快捷键key binding。vscode, jetbrains…都有自己的快捷键key binding (而且听说emacs的快捷键key binding很凌乱),不想用一个编辑器/IDE就要熟悉一套肌肉记忆。而且常见的编辑器/IDE都有vim插件,vscode的Vim, jetbrains的IdeaVim, emacs也有evil。

上次做AWS的OA算是第一次本机ssh连接服务器,纯命令行环境,要编辑nginx的配置文件只能用vim, nano之类的终端下的文本编辑器了。

所以,不管怎么样,vim都是必须身に付けるskillだ


普通模式 Normal mode

移动系

行首: 0 Home 本行第一个字符: ^

行尾: $ End

文件头: gg

文件尾: G

光标跳转到某一行: 绝对行号gg / 绝对行号G or :绝对行号,命令模式

光标向后移动一个单词: w(word) W(Shift + w以空格分割) Ctrl + ➡️

光标向前移动一个单词: b(back word) B(Shift + b以空格分割) Ctrl + ⬅️

单词尾: e

查找: / 然后输入要搜的东西,之后Enter,用n来跳转到下一个match,N上一个 Ctrl + f

如果此时光标已经在想查找的单词上了,*跳转到下一个匹配,#上一个 (可以方便找div, class之类的)

编辑系

撤销undo: u Ctrl + z

重做redo: Ctrl + r or 命令模式:redo

删字符: x 改字符s

删单词: dw de(这俩其实都是只从当前光标位置删到末尾) diw(inner 光标在中间としても删整个单词) daw(带后接空格)

删到某个特定字符为止: dt某特定字符 to dt)

删到行尾: d$ ($移动到行尾) 类似还有d0 dG dgg

删当前行: dd (其实相当于剪切Ctrl + xppaste后复制)

删tag<>中包起来的内容(即使有多行)(delete inner): dit cit(删完进insert模式) (前端常用) 删除整个tag: dat 注意和di<的区别

类似还有di", di( 注意是左括号

修改: c change其实就相当于是delete后进insert模式,命令和删除差不多,把d换成c即可

复制当前单词: yaw(yank )

复制到某个字符: yf某字符 yt某字符的话,那个字符没有被包含进来

缩进: >>, << 用法类似dd,可以>行数> or 行数>>

插入模式 Insert mode

i: 光标前插入

a: 光标后插入

I: 行首插入

A: 行尾插入

o: 向下新开一行

O: 向上新开一行

Insert模式下可以Ctrl + w删除单词,就像终端里的操作一样

命令模式 Command mode

不保存修改,强制退出用:q!

注意是先q后!,如果先!的话,后面接的会被认为是终端shell命令,比如:!ls

一些设置

1
2
:set number
:set relativenumber :set norelativenumber

在命令模式敲的设置只是一次性有效的。退出vim后,这些设置不会被保留。

所以需要一个设置的配置文件 ~/.vimrc

可视模式 Visual mode

从normal mode按v / V /Ctrl + v进入visual mode,然后主要做选中文本的操作

也有vi(, vi"之类的操作

选中的部分一个d全部删除,一个y全部复制,一个c修改…< >缩进

全选: ggVG Ctrl + a

注釈: gg移动到首行,v / V /Ctrl + v进可视模式(v选中字符,V选中行,Ctrl + v矩形块选),G光标移到最后一行,即全选

(ggvG的话最后一行只选中了第一个字符,ggVG才真正全部选中,因为V是行选)

选中内容以后就可以其他的操作了,比如:

  • d 删除选中内容
  • y 复制选中内容,仅vim内
  • “+y 复制选中内容到系统的剪贴板,供其他程序用

不过其实可以不用visual mode,就gg"+yG。原理就是ggyG,只不过调用了+寄存器(系统的剪贴板)

Ctrl + v块选,可以做到连续多行的同一位置的相同操作。方向键精调选中后,d删除,c修改,A光标后多行插入,I光标前多行插入

块选中一列数字后,g然后Ctrl+a循环递增

宏 Macros

https://www.youtube.com/watch?v=mYUk9N-1JZ8 最后两分钟的技巧

待续

https://www.youtube.com/watch?v=RZ4p-saaQkc

https://zhuanlan.zhihu.com/p/188499395

https://www.youtube.com/watch?v=80mWp6H4zEw

配置文件

参考资料

TheCW的视频

自分の知乎收藏夹

Vim Tutorial for Beginners

Lecture 3: Editors (vim) (2020)

https://missing.csail.mit.edu/2020/editors/

上手 IdeaVim 插件:在 WebStorm 和其他 JetBrains IDE 中获得 Vim 的强大功能

21天学会Emacs之第十三天:使用Evil

指尖飞舞:vscode + vim 高效开发(系列视频)

cheet sheet https://vim.rtorr.com/lang/en_us/

  • Title: 230912_再学vim
  • Author: Haoliang Tang
  • Created at : 2023-09-12 00:00:00
  • Updated at : 2023-11-02 20:28:09
  • Link: https://hl-tang.github.io/2023/09/12/230912_再学vim/
  • License: This work is licensed under CC BY-NC-SA 4.0.
 Comments