用了 3 年多的 LinuxMint 前陣子宣佈 LinuxMint 18.3 是 KDE edition 最後一個版本,然後 .. 就沒有然後了 T_T
索性昨天把系統重新裝成 Kubuntu 18.04 (真心很喜歡 KDE Plasma),不得不說重裝 Unix-like 系統感覺真的超好,重裝 / 保留 /home 的情況,Firefox / Chrome / Opera 全部都不需要重新設定 (設定檔保留於 /home)。
不過裝完 vim 8 之後,遇到一個很大的問題,一直在使用的 vim-copycat(georgefs/vim-copycat)
E319: Sorry, the command isn’t available in this version: python
vim-copycat(georgefs/vim-copycat) 是用於同步系統跟 vim 的剪貼板 (clipboard)
輸入指令:
1 | ~$ vim --version | grep python |
顯示:
1 | +comments +libcall -python +vreplace |
在 Kubuntu 18.04 使用 apt-get 安裝 Ubuntu repository 中的 vim 已經拿掉了 Python 2 的支援,導致 .vim/bundle/vim-copycat/plugin/copycat.vim 使用 Python 2 出現問題
例如:
1 | Error detected while processing /home/ming/.vim/bundle/vim-copycat/plugin/copycat.vim: |
我決定採用解決方式是將 Python 2 的代碼改成 Python 3,下面將一步一步紀錄這個過程。
事前準備:
1 | sudo pip3 install copycat-clipboard |
首先最直觀的根據錯誤紀錄將 .vim/bundle/vim-copycat/plugin/copycat.vim 中的 python 全部取代為 python 3
1 | \:1,$ s/python/python3/g |
儲存之後,接下來打開 vim 錯誤變成:
1 | Error detected while processing /home/ming/.vim/bundle/vim-copycat/plugin/copycat.vim: |
很明顯是 Python 2 的 print 用法,解決的方法很簡單,將所有 copycat.py 中的 print “” 改成 print(“”)
1 | :1,$ s/python/python3/g |
接下來錯誤變成
1 | Error detected while processing function <SNR>36_push_into_clip: |
一樣是 copycat.py,將 copycat.py 中的 smart_str 函數改為:
1 | 19 def smart_str(s, encoding='utf-8', errors='strict'): |
錯誤變成:
1 | Error detected while processing function <SNR>36_push_into_clip: |
將 copycat.py 中的 copy 函數改成:
1 | def copy(value=None, name=None): |
copy 函數正常後,現在已經可以正常複製,接下來 paste 錯誤訊息:
1 | Error detected while processing function <SNR>36_pop_from_clip: |
將 copycat.py 中的 paste 函數修改為:
1 | def paste(name=None): |
打開 copycat_plugin.py 將 set_to_vim 函數改成:
1 | def set_to_vim(name, value): |
完成!
取之於開源,回饋於開源
如果不想要手動改的話,可以參考:
https://github.com/iwdmb/vim-copycat
https://github.com/iwdmb/copycat
我 fork 了 vim-copycat and copycat(copycat-clipboard) 使其支援 Python 3 : )
copycat-clipboard3 pypi repository url:https://pypi.org/project/copycat-clipboard3/