※ 引述《as23041248 (KAIKAIKAI)》之铭言:
: ※ 引述《descent (“雄辩是银,沉默是金”)》之铭言:
: 小弟使用的是 neovim 0.5
: : 第3章 - 基础工具
: : 怎么才算游刃有余的使用编辑器。这里有一个挑战列表, 你能完成多少?
: : 1. 当编辑文本时, 以字符、单词、行、段落为单位移动光标及进行选择。
: : 2. 当编辑程式码时, 在各种语法单元 (配对的分隔符、函数、模组......) 之间
: 通常我只拿来写程式,所以很多 text object 不太用到。
: 单行移动我会使用 f 配合 hjkl,在远一点会使用 / 搜寻或是 [( ]) [{ ]} %
: 等等 motion,最后我觉得还是选用 easymotion 或 vim-sneak 可以少很多折腾
配对用 %,函数的话我通常用 fzf.vim 提供的 :BTags,或是 coc.nvim 提供的 outline
模组的话,基本上应该是靠档名 + fzf.vim 提供的 :Files/:GFiles,看各语言规定。
平常在单一画面中移动,基本上都是靠 easymotion。
: 可以参考我的文章 #1VU3FViD (Editor)
: : 3. 做完修改后, 重新缩进程式码。
: 每一个程式语言 format 的格式不一样,我觉得用 vim 内建的不敷使用,
: 最后我使用 Chiel92/vim-autoformat 插件来解决
自动缩排程式码可以靠 ale + formatter。
: : 4. 用单个指令完成程式码块的注释或取消注释。
: tpope/vim-commentary 提供了 gc 能做到此事
: 也可以使用内建 <Ctrl-v> 达到效果
: 单个指令我是认输
我是用 tcomment,不过基本上差异不大。
如果需要用内建单一指令就可以注解的话,就不清楚了。
: : 5. Undo 并 Redo变更。
: 这还蛮常用的,但太复杂的 undo 和 redo 我使用 mbbill/undotree,虽然这插件
: 不常用,但是需要的时候你会很感谢它
我知道有 :earlier & :later,不过用 plugin 可以预览结果与时间比较方便。
这里我是用 vim-mundo。
: : 6. 把编辑窗口切割成多个面板, 然后在它们之间跳转。
: 这点并不难
: 切割窗口我最常使用 :sp :vs
: 跳转窗口的 key mapping
: noremap <C-j> <C-W>j
: noremap <C-k> <C-W>k
: noremap <C-h> <C-W>h
: noremap <C-l> <C-W>l
这部分也是最基础的操作,个人是用 <M-h>, <M-j>, <M-k>, <M-l>,
避免盖掉内建的 <C-l> redraw 的功能。
另外,我的 <C-j>, <C-k> 拿来用在切换 tab 上了。
: : 7. 跳转到特定的行号。
: XXG
:XX<CR>,输了一个字XD
: : 8. 对选出的多行进行排序。
: 我会用 V 选择所需的行,并且 !sort
这个可以直接用 vim 内建的 :sort,而且内建的 :sort 还有 :sort u 可以去除重复
: : 9. 搜索普通字符串, 或用正则表达式搜索, 然后重复上一次的搜索。
: 干忘了,是 & 吗
怎么觉得你想多了,应该是单纯的 n/N,XD
: : 10. 基于框选或某个模式匹配的结果, 临时创建多个光标, 并行地在多个光标处编辑文本
: 认输
这个我不清楚有没有内建功能,印象中是没有,我个人是用 vim-visual-multi,
主要功能是在 keyword 上按一个键 (默认是 <C-n>) 会自动选取目前 keyword 并
移动到下一个 keyword,此时可以同时编辑 keyword 或是可以继续按 <C-n> 选取
更多 keyword。
: : 11. 显示当前项目的编译错误。
: : 12. 跑一下当前项目的测试。
: 如果 C 的话使用 :make,再开 quickfix list
: 通常其他语言包也会支援,可以参考我的文章 #1VMmL8ym (Editor)
: 如果是 real time lint,我使用 LSP,现在很多 LSP plugin 可以使用
这部分应该是可以用 :make 搭配 compiler 就可以针对不同语言了,
针对不同语言 :set compiler。
不过如同你所说的,即时 lint 的话,还是要用 lsp plugin 才能达成。
: : 13. 能不能不用鼠标/触控板完成上面所有的任务?
: 为了不用鼠标,自虐,blame 了一下发现,下面的设定我竟然 2017 就塞了
: nnoremap <Left> <Nop>
: nnoremap <Right> <Nop>
: nnoremap <Up> <Nop>
: nnoremap <Down> <Nop>
: : 我用 vim, 8 我做不到
: 用内建的东西没几个人做得到呀,我塞了一堆自己需要的 plugin
: 感谢大大发出此文,让板上能热络点
: 偷偷广告一下自己的 vim 文章,希望有更多人看了文章来交流
: https://amikai.github.io/tags/vim/
上述的部分还真的不需要鼠标 & 触控板,
很多时候需要鼠标都是需要对 cursor 所在 keyword 做操作,
但是 vim 本身其实包含很多相关功能,像是 K 查询 keyword、ctrl-] 查询 tag,
# 跟 * 可以搜寻 keyword,gf 开启目前 keyword 所在的档名等等。
内建指令还不够用的话,在 command line mode 用 <C-r><C-w> 跟 <C-r><C-a> 也能
输入 cursor keyword 跟 cursor KEYWORD (keyword 前后一直扩展到空白为止的文字)
另外一个常见鼠标操作则是复制 & 贴上,这部分如果用 terminal 的话,
可以设定 system clipboard,也就是 "+ 跟 "*,在 Linux 上通常是用 X11 的剪贴簿。
设定完以后就不需要鼠标选取复制等 terminal emulator 的功能,
而是让 vim 直接把文字复制到 system clipboard,也能比较方便复制 text object。