106.08.05 completor.vim supported rust in cygwin

因為我目前只會用到C、C++、Rust....
然後裝YCM不知道失敗幾次了QuQ
赫然發現 maralla/completor.vim
優點是不用另外編譯
而且也是非同步補全,不會讓vim卡死
C、C++我不知道為何可以正常使用沒出錯(?
但是Rust就一直不行
之前使用vim-racer也不行
推測是racer不支援cygwin的問題
主要原因可能是cygwin呼叫racer時若使用相對路徑則會發生找不到指定路徑
fork專案過來之後改個地方就解決了,就來記錄個OuO


首先這是沒有補全成功的模樣,並不會吐Error(這樣反而有些麻煩

先利用plugin的安裝機制獲得插件後進入修改
我因為fork過來了所以可以直接使用 Plugin 'aben20807/completor.vim'
(如果直接安裝我fork的就不用修改rust.py了
其他相關配置:
let g:completor_completion_delay=40
let g:completor_auto_close_doc=0
let g:completor_auto_trigger=1
let g:completor_min_chars=1
let g:completor_filesize_limit=4096
function! CompletorToggle()
    if g:completor_auto_trigger==0
        let g:completor_auto_trigger=1
    else
        let g:completor_auto_trigger=0
    endif
    set noshowmode
    redraw
    echohl WarningMsg
        echo "   ❖  completor ".((g:completor_auto_trigger==0)? "關閉": "開啟")." ❖ "
        echo ""
    echohl NONE
    set showmode
endfunction
inoremap <F7> <C-\><C-O>:call CompletorToggle()<CR>
inoremap <expr> <TAB> pumvisible() ?"\<C-n>": "\<TAB>"
inoremap <expr> <S-TAB> pumvisible() ?"\<C-p>": "\<S-TAB>"

然後我又去找了一下
其實設定racer.exe的位置並沒有用
let g:completor_racer_binary = '/path/to/racer' " not work QuQ
(只有doc這樣寫,程式碼完全沒這東西OAO
估計是要將racer所在的bin設定成環境變數然後會自動抓取

就來修改囉
$ cd ~/.vim/bundle/completor.vim

修改rust.py
$ vim pythonx/completers/rust.py

在from completor.compat import to_bytes下方加入這兩行
import platform
import os

接著找到prepare_request(self, action)函式
改成
    def prepare_request(self, action):
        line, col = self.cursor
        is_cygwin = platform.system().find("CYGWIN") != -1
        cmd = 'cygpath -a -w {}'.format(self.filename)
        cyg_filename = os.popen(cmd).read().strip().replace('\\', '\\\\')
        cmd = 'cygpath -a -w {}'.format(self.tempname)
        cyg_tempname = os.popen(cmd).read().strip().replace('\\', '\\\\')
        filename = cyg_filename if is_cygwin else quote(self.filename)
        tempname = cyg_tempname if is_cygwin else quote(self.tempname)
        return ' '.join([ACTION_MAP[action], str(line), str(col),filename, tempname])
儲存後退出就完成了

可以自動補全囉
雖然功能還是略少但這樣就夠了OuO
其他截圖:


參考資料:
Fix being unable to find file with `racer daemon` on Windows. #64
“inconsistent use of tabs and spaces in indentation”
Does Python have a ternary conditional operator?
Python String find() Method
Check if running in Windows Command Prompt vs Cygwin python
How can I determine the URL that a local Git repository was originally cloned from?
cygpath -a -w
aben20807/completor.vim

沒有留言:

張貼留言

^ Top