自己已经不做互联网行业了, 但平时业余也写点脚本, 用 VSCode 感觉太重, 所以选择 Vim.
因为知道 Vim 有很多奇技淫巧, 但平时使用还是习惯那几个快捷键. 比如想删除一行再进行编辑, 之前习惯 dd 再 insert, 其实有更简便的 S; 再比如 a = "xyz"
想更换双引号为单引号, 使用 r 来一个一个替代, 其实有更简便的: 光标在 xyz 中, cs"'
(change surrounding " to ').
尽管不知道这几个奇技淫巧也不耽误开发, 但学习了它会提升一定的效率. 自己闭门练习不会提升, 只会让效率低的快捷键成为码代码的习惯. 看他人使用 Vim 码代码会学习他人的 Vim 快捷键习惯. 除此之外 还有什么好的方法来学习这些奇技淫巧?
1
jdhao 2021-01-19 10:14:19 +08:00
编辑的时候,多想想有没有更快捷的方式,然后去搜索,八成是有比你现在编辑的方式更快的方案。
|
2
nthhdy 2021-01-19 10:16:49 +08:00
需求驱动。多用 vim 处理数据、做开发、读代码,这中间就会遇到各种需求的
|
3
ysn2233 2021-01-19 10:17:50 +08:00
多用就习惯了
|
5
lbyo 2021-01-19 10:22:18 +08:00
学到了,VSCode + Vim 目前体验不错
|
6
xubeiyan 2021-01-19 10:22:20 +08:00 via Android 2
有个 missing semester of computer science,你去搜一下。其中就有讲这个一节课
|
7
perapera 2021-01-19 10:26:52 +08:00
我自己的方法是拿张纸把自己的需求和相应的键位写下来,然后放在最显眼的地方,dd 用烦了就看一眼,一眼就能看到,久而久之就习惯了,要是一直不看就说明旧的键位也很顺手(不过楼主说的两个键位我从来没用过,学习了,哈哈
|
8
jasonyang9 2021-01-19 10:35:32 +08:00
change surrounding 是不是需要插件的,我试了无效。
|
9
anzu 2021-01-19 10:35:48 +08:00
比起 S 更习惯用 cc,我觉得与其找两个键,不如一个键重复两次。推荐看《 vim 实用技巧》,当你从入门到熟练后,可以试着放慢编辑速度,稍微思考或查找是否有更高效的快捷键组合。有些人用了 vim 后感觉没有提高的原因之一就是,他们一直在使用低效的入门快捷键组合。
|
10
Chingim 2021-01-19 10:36:01 +08:00
有本书可以翻翻 Practical Vim
|
11
Chingim 2021-01-19 10:36:54 +08:00 2
@jasonyang9 tpope/vim-surround
|
12
northisland 2021-01-19 10:40:22 +08:00 1
|
13
rationa1cuzz 2021-01-19 10:41:15 +08:00
还是要多用,多搜
|
14
rainfd 2021-01-19 10:48:50 +08:00
看书《 Vim 实用技巧》,看 vim 相关的博客,自己研究太慢了,不如别人总结
|
15
FaiChou OP @northisland #12 谢谢, vim 的 chectsheet 太多了 感谢再提供一个
|
16
unicloud 2021-01-19 11:03:31 +08:00
除了多用、多总结,真的没有什么捷径;即便有一百个人告诉你如何如何,还是得自己练习。
|
17
itgoyo 2021-01-19 11:20:29 +08:00
Vim 更多的是肌肉记忆,关于技巧啥的《 Vim 使用技巧》书里面的操作过一遍即便足够了解 Vim 的基本操作了,后面更多的就是看你用不用到所谓的 Vim 插件了,但是很多 vim 的插件,IDE 要么有类似的功能,要么已经有 dalao 移植了 vim 的功能过来,根据实际情况来吧,如果是 C,Python 、Go 这种确实 vim 也可以,但是你让我来写前端代码,对不起我还是选择 VSCode 或者是 Atom 、Sublime Text
|
18
AmoreLee 2021-01-19 11:39:44 +08:00
|
19
Qcui 2021-01-19 11:54:54 +08:00 1
上面大佬说到了 cc,让我想起,一个单词重复两次就是针对一行操作的这句话,比如:
y: 复制,yy: 复制一行 d: 删除,dd: 删除一行 c: 修改,cc: 修改一行 其它的有大佬补充没? |
20
cmdOptionKana 2021-01-19 12:13:24 +08:00
终极技巧:IDEA 或 VScode + vim 插件。
|
21
flashlight 2021-01-19 12:21:35 +08:00
用起来,发现自己做什么操作“麻烦”的适合就去查一下怎么能不麻烦的做这个操作
|
22
Nimrod 2021-01-19 12:22:28 +08:00
补充一个实用性没有那么强的网站 http://vimgolf.com/ ,用尽可能少的 keystroke 来完成目标
|
23
Meltdown 2021-01-19 12:45:59 +08:00 via Android
玩游戏 vimadventure
|
24
Leviathann 2021-01-19 12:50:59 +08:00 via iPhone
有个把函数参数作为文本对象的插件
daa 就是 delete a argument fn(a1, |a2) 假设|是光标,daa 就会只剩下 fn(a1), dia 就是 fn(a1, ) |
25
wuwukai007 2021-01-19 12:55:32 +08:00 via Android 1
ciw,在单词任意位置删除整个单词
|
26
FaiChou OP @wuwukai007 #25 ciw -> change inner word 也可以使用 caw -> change a word
var x = 'https://xxx.|com', 光标在 | 位置, ci' -> 直接删除引号里面并插入. 这里面的 c 可以换成其他动词: y (yank), d (delete) 等 但我感觉这些知识都是入门级别的快捷键, 任何 cheatsheet 都会说. 所以 .. |
27
gdtdpt 2021-01-19 13:40:06 +08:00
我记得某一本关于如何使用 Vim 的书里有说,Vim 里每种操作都有很多种方法,找一个自己习惯的就行了,不用拘泥于哪个最简便哪个最好。
有人喜欢 easymotion 快速移动,我喜欢 hjkl 慢慢移动,移动的过程中可以思考准备做什么或者之前写的有没有问题。 如果不熟就多用多练。 |
28
lululau 2021-01-19 13:52:51 +08:00
基本操作练练熟,看 :help vim,然后自己写个插件,Vim / Emacs 看不懂别人写的扩展,不会修改,自己不会写扩展的话,算不上会用
|
29
FaiChou OP @gdtdpt #27 的确, 写了几年代码现在反思下, 用像 VSCode 等编辑器, 很多操作都是浪费时间的, 但浪费的时间刚好用来思考如何进行下一步代码的操作, 也就是说, 习惯了普通编辑器, 手速是超前脑速的, 手会经常停下来等待大脑.
而现在使用 Vim 就不一样了, 手就慢了下来, 因为生疏, 需要大脑去教手指去操作. 所以希望能练就「无他, 唯手熟尔」的境界. |
30
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 这些文件或者其他的。 |
31
guhuisec 2021-01-19 14:37:10 +08:00
还有几个补充下:
esc 模式:按 d 或者 dd 剪切当前行;按 p 粘贴剪切的行。 |
32
Lumuy 2021-01-19 15:51:47 +08:00
|
33
xpresslink 2021-01-19 16:29:41 +08:00
VIM 在编辑文本上提供那些强大功能都要靠反直觉消耗脑力得到的。
但毕竟写代码时,Ctrl+C 、Ctrl+V 用得最多。 我觉得如果要是写代码还是用专用的 IDE 效率更高,用 VIM 写码不论你怎么配置做大项目的时候都很难受。 |
35
FaiChou OP @xpresslink #33 IDE 用的通用习惯, 容易上手, 再加上 Emacs 的一些快捷键( ctrl+a 到行首, ctrl+e 到行尾, ctrl+k 删除至行尾, meta+b 退一个单词等)是挺有效率的, 但回想下, 这一套内容也是需要经过学习得来的, 比如 VSCode 里 option+下, 可以移动一行到下面, shift+option+下, 复制当前行.. Vim 也是学习, 相信经过练习任何人都能做到不用消耗脑力来驱使手指按键, 你懂的, 有些人就喜欢效率的工具.
|
36
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 时也可以利用多窗口,边用边记笔记。 |
37
zyfsuzy 2021-01-19 17:13:24 +08:00
放弃吧,编程不合适
|
39
huangmingyou 2021-01-19 17:24:05 +08:00
不常用的技巧学了也没用,两周就忘记了。
|
40
tiedan 2021-01-19 17:39:46 +08:00
个人比较喜欢的 -
:x 保存退出 f+要跳转的字母 行内跳转光标 ca,ci 修改 ctrl+f ctrl+b 翻页 ( 向上跳转到空行和空行附近的一行 ) 向下跳转到空行和空行附近的一行 { } 和 ( ) 类似但不跳转空行的附近行 ]] 跳转到下一个 { [[ 跳转到上一个 { ][ 跳转下一个 } [] 跳转到上一个 } % 跳转到另一个花括号或圆括号 |
41
zhuangzhuang1988 2021-01-19 17:54:58 +08:00 via Android
放弃
|
42
zeroDev 2021-01-19 17:57:29 +08:00 via Android
用这个软件刷题: Vim Master
|
43
iSecret 2021-01-19 17:57:32 +08:00
说一个大佬之前教我的一个命令,用得比较多,比如 a = "bcdef" 需要删除 "" 中的内容,命令是 di",同理还有 ' ( [ { 等等。
|
44
moyupoi 2021-01-19 17:57:36 +08:00 via iPhone 1
《穿越到异世界居然能用 vim 修改能力值》
|
45
jswh 2021-01-19 18:10:06 +08:00
用 vim 除了快捷键,主要还有宏录制
|
46
blessingsi 2021-01-19 18:11:27 +08:00
感觉日常使用是不够的,因为会自动用自己最熟悉的方式。需要看书,然后跟着练一练。这样下次用的时候才能想起来。
|
48
NeezerGu 2021-01-19 18:30:31 +08:00
放弃吧,我试过,最后发现就算看了也经常记不住。
我已经算是比较频繁使用 vim 的人了。。。 总归还是要需求驱动。就是当你使用个几个月甚至更久,突然感觉最近有个 xx 行为,感觉比较低效,但又应该可以用更快捷的办法来取代,这时候再去对这个行为进行搜索会更加有效一些。 比如你说的 ddi 和 S 。 开玩笑说如果你 ddi 按的比 S 还快,你干嘛还要切换? |
49
zengming00 2021-01-19 19:30:08 +08:00
有些时候 vim 的宏用得相当爽
|
50
FaiChou OP @NeezerGu 学习不就是这样的吗,比如 OC 里写代理模式比较快,但后来学习了 block 更便捷,所以要学习。虽然 S 可能最后真比三个键要慢,但就像 react hooks 那位老哥讲的: 老了,不喜欢敲那么多键(他在解释为什么用 let 而不是 const )
|
51
bxqqq 2021-01-19 23:11:36 +08:00
因为大部分人连 vimtutor 都没有过一遍,七零八碎不如直接看文档。
|
52
R0ckyY2 2021-01-19 23:39:00 +08:00
多用 + 遇到问题找 Google
|
53
AnnatarHe 2021-01-19 23:45:57 +08:00
经常看用 vim 的人写代码打字,可以的话找线下同事,不行只能找线上视频,youtube 有挺多.
贡献一个 vim 技巧: early 10h 恢复到 10h 前的状态,常用来撤销操作 |
54
namelosw 2021-01-20 00:16:03 +08:00 via iPad
我不用 S,我用 cc,感觉表达起来比较流畅,因为 c 的组合更多。感觉重要的不是奇技淫巧,而是能用按键组合流畅地表达,就跟描述需求一样,而不是机械地地挪动光标插入删除,这样手脑一致不会互相卡,专注的时候就会忘记自己在打字。
很多东西能想到明确规则但不知道怎么按,比如给 text 外面加层 span tag,就会卡住一下,打断这种节奏。至于是 S 还是 cc 其实是完全无所谓的。 不过看你已经比较熟悉 Vim 了,感觉其实比较适合找一些 casts 看,很多时候都是无意看别人用的时候才意识到还能这么用。好像有个 Vimcasts,不过我没看过,感兴趣可以试试。 |
55
catcn 2021-01-20 00:19:09 +08:00
VS 和 VS Code 都开启 VIM 模式,字体放得大大的。
别人想过来我电脑敲代码,就像是开自动挡的老司机碰到了手动挡。 马上不敢抢键盘了。 |
56
booscopy 2021-01-20 00:24:36 +08:00
play vim-adventures.com
|
57
jupiter157 2021-01-20 05:45:12 +08:00
inoremap jk <esc>
用 jk 替换 esc,从此再也不需要按 esc 了 |
58
byzf 2021-01-20 07:27:26 +08:00
题外话,vim 说实话我现在很难去定义到底有没有带来什么实质上的便利,有很多人发表过高见说看不出来鼠标多点一下到底有什么损失。
陆陆续续地从 syntastic 到 ycm,nvim,deoplete 帮他们测各种 bug,各个平台测 vim 的花式 gui 的 bug,体验各种轮子自带的 bug 以及任何新环境都想试试 vim 是个什么情况所花的时间,还有迁移到 vscode-vim,vs-vim, jetbrains-vim 里面各种配置和 bug 的时间,加起来至少有大几百小时,我很难说我省下来一点点效率能覆盖这些时间。 这种学了之后不会更新的技巧其实没什么去快速学习的必要,每年偶尔看一遍有啥新功能有啥新插件就差不多了。 |
59
micolore 2021-01-20 08:20:13 +08:00 via iPhone
不用很难记住那么的快捷键,我也配置了很多插件,经常 idea 启动,然后就记不起来原来的配置了。
|
60
eve1yb0dy 2021-01-20 09:55:12 +08:00
大 S 学习了
|