vscode開啟終端 在neovim中使用內建終端

2021-10-12 00:01:01 字數 3001 閱讀 2687

最近逐漸將編輯過程從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...