Re: the pragmatic programmer 提到的操作

看板Editor (編輯器(vim/emacs))作者 (火星人)時間4年前 (2020/10/05 21:53), 4年前編輯推噓1(101)
留言2則, 1人參與, 4年前最新討論串3/4 (看更多)
※ 引述《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。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.241.160.63 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Editor/M.1601906031.A.B4C.html ※ 編輯: mars90226 (111.241.160.63 臺灣), 10/05/2020 22:03:04

10/05 22:47, 4年前 , 1F
大大厲害 不要老是只回我的文啊 發幾篇文章交流呀 哈
10/05 22:47, 1F

10/05 22:47, 4年前 , 2F
10/05 22:47, 2F
文章代碼(AID): #1VUoLljC (Editor)
文章代碼(AID): #1VUoLljC (Editor)