※ 引述《mars90226 (火星人)》之铭言:
: ※ 引述《as23041248 (KAIKAIKAI)》之铭言:
: : 小弟使用的是 neovim 0.5
: : 通常我只拿来写程式,所以很多 text object 不太用到。
: : 单行移动我会使用 f 配合 hjkl,在远一点会使用 / 搜寻或是 [( ]) [{ ]} %
: : 等等 motion,最后我觉得还是选用 easymotion 或 vim-sneak 可以少很多折腾
: 配对用 %,函数的话我通常用 fzf.vim 提供的 :BTags,或是 coc.nvim 提供的 outline
: 模组的话,基本上应该是靠档名 + fzf.vim 提供的 :Files/:GFiles,看各语言规定。
: 平常在单一画面中移动,基本上都是靠 easymotion。
: : 可以参考我的文章 #1VU3FViD (Editor)
: : 每一个程式语言 format 的格式不一样,我觉得用 vim 内建的不敷使用,
: : 最后我使用 Chiel92/vim-autoformat 插件来解决
: 自动缩排程式码可以靠 ale + formatter。
: : tpope/vim-commentary 提供了 gc 能做到此事
: : 也可以使用内建 <Ctrl-v> 达到效果
: : 单个指令我是认输
: 我是用 tcomment,不过基本上差异不大。
: 如果需要用内建单一指令就可以注解的话,就不清楚了。
: : 这还蛮常用的,但太复杂的 undo 和 redo 我使用 mbbill/undotree,虽然这插件
: : 不常用,但是需要的时候你会很感谢它
: 我知道有 :earlier & :later,不过用 plugin 可以预览结果与时间比较方便。
: 这里我是用 vim-mundo。
: : 这点并不难
: : 切割窗口我最常使用 :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 上了。
: : XXG
: :XX<CR>,输了一个字XD
: : 我会用 V 选择所需的行,并且 !sort
: 这个可以直接用 vim 内建的 :sort,而且内建的 :sort 还有 :sort u 可以去除重复
: : 干忘了,是 & 吗
: 怎么觉得你想多了,应该是单纯的 n/N,XD
: : 认输
: 这个我不清楚有没有内建功能,印象中是没有,我个人是用 vim-visual-multi,
: 主要功能是在 keyword 上按一个键 (默认是 <C-n>) 会自动选取目前 keyword 并
: 移动到下一个 keyword,此时可以同时编辑 keyword 或是可以继续按 <C-n> 选取
: 更多 keyword。
visual-multi 功能其实很强大 支援 (visual) regex search
我个人会搭配 ipod825/msearch.vim 多选多个 pattern 做selection
但是他的 mapping system 设计的有点混乱 说明文件也不是很好懂
Customize 要花点时间
: : 如果 C 的话使用 :make,再开 quickfix list
: : 通常其他语言包也会支援,可以参考我的文章 #1VMmL8ym (Editor)
: : 如果是 real time lint,我使用 LSP,现在很多 LSP plugin 可以使用
: 这部分应该是可以用 :make 搭配 compiler 就可以针对不同语言了,
: 针对不同语言 :set compiler。
这部分好像有一个 general 的 plugin skywind3000/asyncrun.vim
虽然我自己应为平常工作想要更好的 customize 所以最后是用
neovim-remote 直接打进terminal里
类似下面这样(用vim script 在terminal 下 bash commands
bash 再用neovim-remote 呼叫vim的callback,
compile完毕跳转回用来compile的terminal...)
但是我想花一些时间应该可以帮他弄个patch满足我的需求
function! AndroidQuickfix()
cgetexpr uniq(filter(map(systemlist('cat /tmp/androidbuild'),
function('AndroidFixPath')), "!empty(v:val)"))
copen
endfunction
let cmd = 'set -o pipefail;'.
\'mmm -j '.target.' 2>&1 | tee /tmp/androidbuild;'.
\'if [[ $? -eq 0 ]];then'.
\ NvrSend('<c-\\><c-n><esc>:call
ReuseTerm("Tabdrop","Android")<cr>').
\ NvrSend('<c-\\><c-n><esc>:startinsert<cr>').
\'else'.
\ NvrSend('<c-\\><c-n><esc>:call
ReuseTerm("Tabdrop","Android")<cr>').
\ NvrSend('<c-\\><c-n><esc>:call AndroidQuickfix()<cr>').
\'fi'
call TermFeedRun(cmd)
: 不过如同你所说的,即时 lint 的话,还是要用 lsp plugin 才能达成。
: : 为了不用鼠标,自虐,blame 了一下发现,下面的设定我竟然 2017 就塞了
: : nnoremap <Left> <Nop>
: : nnoremap <Right> <Nop>
: : nnoremap <Up> <Nop>
: : nnoremap <Down> <Nop>
: : 用内建的东西没几个人做得到呀,我塞了一堆自己需要的 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。