如何提升 Vim 技巧?

2021-01-19 10:11:13 +08:00
 FaiChou

自己已经不做互联网行业了, 但平时业余也写点脚本, 用 VSCode 感觉太重, 所以选择 Vim.

因为知道 Vim 有很多奇技淫巧, 但平时使用还是习惯那几个快捷键. 比如想删除一行再进行编辑, 之前习惯 dd 再 insert, 其实有更简便的 S; 再比如 a = "xyz" 想更换双引号为单引号, 使用 r 来一个一个替代, 其实有更简便的: 光标在 xyz 中, cs"'(change surrounding " to ').

尽管不知道这几个奇技淫巧也不耽误开发, 但学习了它会提升一定的效率. 自己闭门练习不会提升, 只会让效率低的快捷键成为码代码的习惯. 看他人使用 Vim 码代码会学习他人的 Vim 快捷键习惯. 除此之外 还有什么好的方法来学习这些奇技淫巧?

6584 次点击
所在节点    程序员
61 条回复
flashlight
2021-01-19 12:21:35 +08:00
用起来,发现自己做什么操作“麻烦”的适合就去查一下怎么能不麻烦的做这个操作
Nimrod
2021-01-19 12:22:28 +08:00
补充一个实用性没有那么强的网站 http://vimgolf.com/ ,用尽可能少的 keystroke 来完成目标
Meltdown
2021-01-19 12:45:59 +08:00
玩游戏 vimadventure
Leviathann
2021-01-19 12:50:59 +08:00
有个把函数参数作为文本对象的插件
daa 就是 delete a argument
fn(a1, |a2)
假设|是光标,daa 就会只剩下 fn(a1),
dia 就是 fn(a1, )
wuwukai007
2021-01-19 12:55:32 +08:00
ciw,在单词任意位置删除整个单词
FaiChou
2021-01-19 13:36:25 +08:00
@wuwukai007 #25 ciw -> change inner word 也可以使用 caw -> change a word

var x = 'https://xxx.|com', 光标在 | 位置, ci' -> 直接删除引号里面并插入.

这里面的 c 可以换成其他动词: y (yank), d (delete) 等

但我感觉这些知识都是入门级别的快捷键, 任何 cheatsheet 都会说. 所以 ..
gdtdpt
2021-01-19 13:40:06 +08:00
我记得某一本关于如何使用 Vim 的书里有说,Vim 里每种操作都有很多种方法,找一个自己习惯的就行了,不用拘泥于哪个最简便哪个最好。
有人喜欢 easymotion 快速移动,我喜欢 hjkl 慢慢移动,移动的过程中可以思考准备做什么或者之前写的有没有问题。
如果不熟就多用多练。
lululau
2021-01-19 13:52:51 +08:00
基本操作练练熟,看 :help vim,然后自己写个插件,Vim / Emacs 看不懂别人写的扩展,不会修改,自己不会写扩展的话,算不上会用
FaiChou
2021-01-19 13:55:04 +08:00
@gdtdpt #27 的确, 写了几年代码现在反思下, 用像 VSCode 等编辑器, 很多操作都是浪费时间的, 但浪费的时间刚好用来思考如何进行下一步代码的操作, 也就是说, 习惯了普通编辑器, 手速是超前脑速的, 手会经常停下来等待大脑.

而现在使用 Vim 就不一样了, 手就慢了下来, 因为生疏, 需要大脑去教手指去操作. 所以希望能练就「无他, 唯手熟尔」的境界.
guhuisec
2021-01-19 14:35:29 +08:00
我个人感觉自己用的最多的如下:
打开:vim 文件名
关闭:先按下 esc 键,进入 esc 模式,输入冒号,然后输入 w 就是保存;如果输入 wq 就保存退出;如果输入 q 就是退出。
进入 esc 模式,定位到文件最开始:按 2 下 g (小写 g )
进入 esc 模式,定位到文件最后:shift+g (大写的 G )
进入 esc 模式,定位到一行最前面:按 0 键
进入 esc 模式,定位到一行最后面:shift+4
按 v 进入虚拟模式:按 v 即可
格式化所选内容:先进入 v 虚拟模式进行内容选择,然后按=号即可,如果是格式化全部,先按 v 进入虚拟模式,按 2 下 g 进入文件最开始,然后 shift+g 定位到文件尾,然后按=号即可。比如你可以格式化 nginx.conf 这些文件或者其他的。
guhuisec
2021-01-19 14:37:10 +08:00
还有几个补充下:
esc 模式:按 d 或者 dd 剪切当前行;按 p 粘贴剪切的行。
Lumuy
2021-01-19 15:51:47 +08:00
https://thoughtbot.com/upcase/onramp-to-vim


现看一遍,再用用,过段时间再回来看一遍,周而复始。
用长了,所有编辑模式你都想切换为 vim 模式
xpresslink
2021-01-19 16:29:41 +08:00
VIM 在编辑文本上提供那些强大功能都要靠反直觉消耗脑力得到的。
但毕竟写代码时,Ctrl+C 、Ctrl+V 用得最多。
我觉得如果要是写代码还是用专用的 IDE 效率更高,用 VIM 写码不论你怎么配置做大项目的时候都很难受。
FaiChou
2021-01-19 16:30:58 +08:00
@guhuisec #31 你说的这些都是基础用法, cheatsheet 都能 cover 不过还是感谢回复
FaiChou
2021-01-19 16:37:09 +08:00
@xpresslink #33 IDE 用的通用习惯, 容易上手, 再加上 Emacs 的一些快捷键( ctrl+a 到行首, ctrl+e 到行尾, ctrl+k 删除至行尾, meta+b 退一个单词等)是挺有效率的, 但回想下, 这一套内容也是需要经过学习得来的, 比如 VSCode 里 option+下, 可以移动一行到下面, shift+option+下, 复制当前行.. Vim 也是学习, 相信经过练习任何人都能做到不用消耗脑力来驱使手指按键, 你懂的, 有些人就喜欢效率的工具.
ediron
2021-01-19 17:03:59 +08:00
推荐几个工具
一个可以直接内置到 Vim 中的 vim cheat,使用中可以随时查看快捷键:
https://github.com/lifepillar/vim-cheat40

一个中文的从入门到精通的 Vim 教程,很全面不止于使用层面,有高级的东西:
https://github.com/wsdjeg/vim-galore-zh_cn

其实 Vim 自带有入门教程的,命令行敲「 vimtutor 」就能进去,都是从很基础的开始一步步教学,不顾是原始是英文的,这里有一个项目,你按照教程 git clone 一下,就能把 Vim 官方文档汉化。再用「 vimtutor 」命令就可以查看中文教程:
https://github.com/yianwillis/vimcdoc

其实要想用的溜,除了多用还是要总结一套自己的键位习惯,可以多看看大佬们的 vimrc 文件都是怎么改的,觉得好的可以拿来用或者自己再改改。平时在用 Vim 时也可以利用多窗口,边用边记笔记。
zyfsuzy
2021-01-19 17:13:24 +08:00
放弃吧,编程不合适
vigack
2021-01-19 17:21:17 +08:00
@guhuisec 可以用 ZZ 替代 :wq, 节省一次按键:doge
huangmingyou
2021-01-19 17:24:05 +08:00
不常用的技巧学了也没用,两周就忘记了。
tiedan
2021-01-19 17:39:46 +08:00
个人比较喜欢的 -

:x 保存退出
f+要跳转的字母 行内跳转光标
ca,ci 修改
ctrl+f ctrl+b 翻页
( 向上跳转到空行和空行附近的一行
) 向下跳转到空行和空行附近的一行
{ } 和 ( ) 类似但不跳转空行的附近行
]] 跳转到下一个 {
[[ 跳转到上一个 {
][ 跳转下一个 }
[] 跳转到上一个 }
% 跳转到另一个花括号或圆括号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/746177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX