手動編輯檔案解決衝突_vimdiff,哪裡不同找哪裡,合併衝突也可以![視訊]
技術標籤:手動編輯檔案解決衝突
hello,這一期視訊介紹下 vimdiff 的使用,包括使用 vim 來比對檔案,合併程式碼衝突等(我會手動構造衝突來做個演示),希望對大家有幫助。
日常編輯檔案,程式碼或者合併程式碼衝突的時候,我們經常需要使用文字比較或者合併工具, 目前市面上有一些收費軟體比如 Beyond Compare等,也有一些好用的免費的軟體比如 meld/kdiff3 等,使用 IDEA 之類的 IDE 開發工具也可以實現程式碼合併,當然如果你懶得下載其他軟體,使用 vim 也可以進行文字的比較或者程式碼衝突合併,本次視訊將介紹 vimdiff 工具的使用,雖然比起商業軟體來說沒有那麼強大,但是很多場景下使用綽綽有餘了。
從一件事引入
記得有次同事給了我兩個比較長的命令,說明明看起來一樣就是執行起來一個能用,一個不能用,自己瞅了好久愣是沒看出來區別,拿給我看看。 我當時複製了下兩條命令直接貼到了 vim 裡比較了下,直接就看出了不同(實際上就是一個字元的區別,比如1和l這種有些字型下難以區分),文字比對工具在某些場景下很有用。
另外一個場景就是合併程式碼衝突,平常我們使用的比較多的是三路合併工具,如果你用過 IDEA 或者其他 Jetbrains 全家桶工具應該有體會。
什麼是 vimdiff
vim自帶的檔案比較工具。在一些場景下比如沒有軟體或者伺服器上可以方便地使用 vim 來比對文字或者解決程式碼衝突。
使用方式
vimdiff or vim -d file1 file2
vim會使用不同的顏色來標誌,當然你可以自定義這些配置。
使用vim 合併程式碼衝突
可以先配置 git 使用 vimdiff 作為合併工具。視訊裡會構造程式碼衝突做一個演示。
git config merge.tool vimdiff
+--------------------------------+ | LOCAL | BASE | REMOTE | +--------------------------------+ | MERGED | +--------------------------------+
- LOCAL - the head for the file(s) from the current branch on the machine that you are using.
- REMOTE - the head for files(s) from a remote location that you are trying to merge into your LOCAL branch.
- BASE - the common ancestor(s) of LOCAL and BASE.
- MERGED - the tag / HEAD object after the merge - this is saved as a new commit.
:diffg RE # get from REMOTE
:diffg BA # get from BASE
:diffg LO # get from LOCAL
]c - Jump to the next change.
[c - Jump to the previous change.
當然如果覺得麻煩,可以對映快捷鍵
let mapleader=','
let g:mapleader=','
if &diff
map <leader>1 :diffget LOCAL<CR>
map <leader>2 :diffget BASE<CR>
map <leader>3 :diffget REMOTE<CR>
endif
使用 Gdiff
其實如果使用了 fuguitive 外掛,我們在修改了程式碼之後,還可以使用 :Gdiff 來比對程式碼的修改。
替代品
Beyond Compare/kdiff3/meld/IDEA 合併工具等可以使用。
讀者可以自行嘗試並選擇一個自己喜歡的,但有些並不是免費軟體。
參考
https://stackoverflow.com/questions/14904644/how-do-i-use-vimdiff-to-resolve-a-conflict
https://www.grzegorowski.com/using-vim-or-neovim-nvim-as-a-git-mergetool/
https://gist.github.com/karenyyng/f19ff75c60f18b4b8149
https://kinboyw.github.io/2018/10/09/Use-Vimdiff-As-Git-Mergetool/
vimdiff 哪裡不同找哪裡https://www.zhihu.com/video/1117915480979013632