Neovim 是全球最受喜愛的編輯器。這可是有科學根據的
以下是 Neovim 2022 (Nvim 0.8) 開發的一些重點。
先從養眼的開始!
:set laststatus=3
'winbar'
就像每個視窗頂部的額外狀態列。它是 laststatus=3
的補充set winbar=%f
set laststatus=3
'winbar'
和 'statusline'
增加了對滑鼠點擊區域的支援 (就像 'tabline' 自 2016 年以來就有的功能):set cmdheight=0
:set mousescroll=ver:5,hor:2
:set rnu nu
:let &stc='%#NonText#%{&nu?v:lnum:""}%=%{&rnu&&(v:lnum%2)?"\ ".v:relnum:""}%#LineNr#%{&rnu&&!(v:lnum%2)?"\ ".v:relnum:""}'
:set jumpoptions=view
vim.lsp.start({ name = 'godot', cmd = vim.lsp.rpc.connect('127.0.0.1', 6008) })
LspAttach
、LspDetach
。範例vim.api.nvim_create_autocmd('LspAttach', {
group = yourGroupID,
callback = function(args)
local client = vim.lsp.get_client_by_id(args.data.client_id)
your_callbac_func(client, args.buf)
end
}
vim.lsp.get_active_clients()
學習了過濾(這將是 Lua stdlib 中的標準模式)get_active_clients({id=42})
get_active_clients({bufnr=99})
get_active_clients({name='tsserver'})
:set diffopt+=linematch:60
vim.g.editorconfig_enable = false
'inccommand'
功能(自 2017 年起),它會在您輸入時顯示 :substitute
(:s/foo/bar
) 的效果。:normal
和巨集增加了預覽功能:normal
、:global 等的即時預覽奠定了基礎。vim.api.nvim_create_user_command(
'MyCmd',
my_cmd,
{ …, preview = my_cmd_preview })
:write
命令增加了 ++p
旗標,因此如果父目錄/dir/不存在,則會建立它:edit parent/dir/file.txt
:write ++p
$XDG_STATE_HOME
(~/.local/state) 中,而不是 $XDG_CACHE_HOME
(~/.cache)。此變更僅影響 macOS/unix,Windows 位置不變。stdpath('log')
來取得建議的記錄檔位置。:help :Man
) 會在位置列表中顯示大綱(目錄)。現在大綱也列出旗標。before:
9.0ms: sourcing …/runtime/filetype.vim
after:
1.3ms: sourcing …/runtime/filetype.lua
nvim --startuptime
現在會報告 Lua require()
的時間。000.010 000.010: --- NVIM STARTING ---
000.198 000.188: event init
...
026.333 001.109 001.101: require('vim.lsp.protocol')
028.144 000.423 000.423: require('vim.lsp._snippet')
...
mouse=nvi
Type ":" (cmdline-mode) to temporarily disable mouse. Right-click shows a popup menu.
Try it!
nvim_cmd([list])
和「使用者命令預覽」奠定了基礎!而且對於定義自訂命令列 (:
) 行為非常有用。:echo nvim_parse_cmd('.,$g/foo/bar', {})
{
'cmd': 'global',
'args': ['/foo/bar'],
'mods': {…},
'magic': {'file': v:false, 'bar': v:false}
}
nvim_cmd()
以結構化的方式呼叫任何 Vim 舊式命令,例如 system([...])
。fnameescape()
:特殊字元由 magic
參數控制。nvim_cmd({cmd='vimgrep', args={'/%s/j', '**'}}, {})
vim.fs.find()
現在是尋找「根檔案」的正規方法,這對於 LSP 設定很常見。vim.cmd
是 Lua nvim_cmd
包裝器。它支援將 Ex 命令作為函數而不是字串呼叫vim.cmd.colorscheme('nightfox')
「Lua 外掛程式基本上與 vim 外掛程式相同,只是檔案副檔名是
.lua
而不是.vim
,且檔案包含 Lua 程式碼而不是 Vimscript。」
線上 Nvim 文件的自動產生已透過使用 Lua + tree-sitter 取代舊的 AWK 指令碼進行重寫。我們可以擁有美好的事物。
比較舊的佈局(左)和新的佈局(右)
Nvim 現在在 jobstart()
和 :terminal
作業中設定 $NVIM
環境變數,以便子程序明確地提示它們是 Nvim 的子程序。具有衝突「雙重目的」的舊 $NVIM_LISTEN_ADDRESS
不再傳遞給子程序。
Nvim UI 只是(反向)外掛程式。現在 nvim
本身也是一個自託管 UI:當您在終端機中執行 nvim
時,它會啟動 TUI 作為 nvim --embed
子程序。
就像 Nvim GUI 一樣,您可以將 nvim
TUI 連線到任何 Nvim 伺服器以查看其 UI!您現在可以試試看
./foo
啟動伺服器(在目前目錄中建立 foo
檔案)nvim --listen ./foo
./foo
相同的目錄中),將 nvim
連線到伺服器nvim --remote-ui --server ./foo
'insertmode'
選項,Vim 中使用此選項來實作「簡易 vim」。:help 'insertmode'
。:help lsp
) 大多數情況下是多餘的。Neovim 是一個基於 Vim 的文字編輯器,專為可擴充性和可用性而設計,以鼓勵新的應用程式和貢獻。
請訪問 #neovim:matrix.org 或 irc.libera.chat 上的 #neovim 與團隊聊天。