最近逐漸將編輯過程從vscode一步步轉移到了nvim上,主要還是在於乙個流暢度和lsp的使用上,vscode在同時啟動多個lsp的時候,會在所有lsp都返回結果之後才給出響應,這導致我這種同時使用ccls和clangd的人就十分難受,於是編輯過程逐漸開始轉移到vim上,但是總是有一些理由需要再看一眼vscode,其中乙個點就是終端
我一開始認為通過新建乙個視窗+視窗管理器(dwm/yabai)的方式會比vscode的彈出終端更好,可是實踐告訴我彈出終端可以選擇看見或者看不見才是最香的。尤其需要在專案中做一些檔案移動、重新命名之類的工作的時候vscode可以在終端中cp/mv完直接使用、直接在終端中用code指令在vscode中開啟檔案。這兩點使得vscode的工作和終端配合相當緊密且流暢。
這樣變成了兩個需要改進的點÷
我們需要在vim中實現vscode一樣的彈出終端
我們需要在vim終端中使用vim命令直接在源vim中開啟檔案
第一點其實有人已經做得差不多了,例如 @韋易笑寫的 vim 內建終端調教記中提到的外掛程式。但是這個外掛程式差一點點功能。在vscode中,如果你在shell中輸入了exit,shell退出的話會直接銷毀原來的terminal 視窗,這樣下次開啟terminal就是乙個全新的terminal了。 但是nvim中退出並不會銷毀buffer,下次啟動的時候還需要「按任意鍵繼續」這樣的操作,比較亂節奏。
現在的這個外掛程式已經沒有這個問題了一番搜尋之後我找到reddit上的乙個討論,找到了neovim中的改進方法
reddit 上關於nvim內建終端關閉的討論www.reddit.com
au termclose * call feedkeys("i")
但是這個改進方法僅僅當你把游標放在終端上,原理就是輸入exit
之後按乙個鍵,這對於我這種希望後台關閉的人來說還是不夠的。於是我按照原來的外掛程式中terminalclose
的寫法改了乙個terminalquit
函式出來處理這個問題,**如下
function! terminalquit()
let bid = get(t:, '__terminal_bid__', -1)
if bid < 0
return
endif
let name = bufname(bid)
if name == ''
return
endif
exec "bw! ". name
endfunc
au termclose * call terminalquit()
第二點就是怎麼從終端中開啟檔案了,其實外掛程式中有實現乙個drop
的指令,已經可以滿足需要了,但是我想更近一步,我可以自定義這個檔案的開啟方式,於是我開始尋找乙個可行的方案,最後找到了這個指令碼
gist上的乙個指令碼gist.github.com
打不開的朋友可以看看我小修改的版本
#!/usr/bin/env python
"""edit a file in the host nvim instance."""
from __future__ import print_function
import os
import sys
from neovim import attach
args = sys.ar**[1:]
if not args:
print("usage: {} ...".format(sys.ar**[0]))
sys.exit(1)
addr = os.environ.get("nvim_listen_address", none)
if not addr:
os.execvp('nvim', args)
nvim = attach("socket", path=addr)
def _setup():
nvim.input('') # exit terminal mode
chid = nvim.channel_id
nvim.command('augroup edit')
nvim.command('au bufenter call rpcnotify(, "n")'.format(chid))
nvim.command('au bufenter startinsert'.format(chid))
nvim.command('augroup end')
for x in args:
print(os.path.abspath(x))
nvim.vars['files_to_edit'] = [os.path.abspath(f) for f in args]
nvim.command('exe "tabnew ".remove(g:files_to_edit, 0)')
exit()
def _exit(*args):
nvim.vars['files_to_edit'] = none
nvim.command('augroup edit')
nvim.command('au!')
nvim.command('augroup end')
nvim.stop_loop()
nvim.run_loop(_exit, _exit, _setup)
然後就是用這個命令代替shell下的vim命令,就可以做到shell下直接用vim指令開啟新檔案了
if [ -n "$" ]; then
alias vim="~/.config/nvim/send_command_to_vim.py"
alias vi="~/.config/nvim/send_command_to_vim.py"
else
alias vim='nvim'
alias vi='nvim'
fi
在vscode中開啟conda的虛擬終端
之前用vscode的時候,都是終端執行失敗,然後vscode自動切換到python debug console的終端下。雖然最後能執行,但是問題最終沒有解決。這次看了網上的例子,自己再做了些總結 先展示一下我的setting.json配置 python.pythonpath 新增之後,debug會直...
配置vscode終端字型
在ubuntu 18.04.1lts 下的解決方案 親測可用 其他版本linux做參考。cd usr share fonts truetype sudo git clone 重新整理字型 sudo fc cache f v 回到 vs code的使用者設定.json 中加入以下 terminal.i...
vscode 右鍵開啟
windows registry editor version 5.00 hkey classes root shell vscode open with code icon d mysoft vscode microsoft vs code microsoft vs code code.exe h...