# 使用Lua來配置nvim ###### tags: `TextEditor` `VIM` `NeoVIM` ## 1.設定檔路徑 nvim 吃配置檔的路徑如下 :::info /home/stephen/.config/nvim/ ::: 這些資料夾都不存在的話,就使用在你的使用者目錄下建一個 ```shell= mkdir .config //新增 .config 資料夾 cd .config //進入 .config 資料夾 mkdir nvim //新增 nvim 資料夾 cd nvim //進入 nvim 資料夾 ``` 以neovim來說,他吃的檔是==init.vim==,但現在有一種新的做法是採用==init.lua==來配置 :::info :pushpin: Want to learn more? ➜ [nvim-lua-guide](https://github.com/nanotee/nvim-lua-guide) ::: 先來在這個nvim資料夾下建立兩個檔案 ```shell= mkdir lua touch init.lua ``` ## 2. 安裝Packer.nvim 先clone Packer.nvim到你的電腦 ```shell= git clone https://github.com/wbthomason/packer.nvim\ ~/.local/share/nvim/site/pack/packer/start/packer.nvim ``` 注意這邊他是會安裝到你的`/.local/share/nvim/site/pack/packer/start/packer.nvim`這個路徑 :::info :pushpin: Want to learn more? ➜ [packer.nvim](https://github.com/wbthomason/packer.nvim) ::: 接下在我們在剛剛建立的lua資料夾內再來建立一個pluginsList資料夾並在裡面配置lua.lua ```shell= cd .config/nvim/lua mkdir pluginsList cd pluginsList touch lua.lua ``` 接下來編輯一下lua.lua的檔案 ```shell= local packer_exists = pcall(vim.cmd, [[packadd packer.nvim]]) return require("packer").startup( function() use {"wbthomason/packer.nvim", opt = true} end ) ``` 好,目前還是動不起來的,接下來要配置一下init.lua ## 3.init.lua 這邊來編輯一下init.lua , 可以先看一下這份文件[Neovim 0.5 features and the switch to init.lua](https://oroques.dev/notes/neovim-init/) ```shell= -- HELPERS ---------------------------------------------------- local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd') local fn = vim.fn -- to call Vim functions e.g. fn.bufnr() local g = vim.g -- a table to access global variables local scopes = {o = vim.o, b = vim.bo, w = vim.wo} -- Set CMD ---------------------------------------------------- cmd "syntax enable" cmd "syntax on" cmd "set number" -- Load Plugins ------------------------------------------------ require("pluginsList.lua") ``` 有了上面的配置就很方便來安裝插件了 基本上的流程就是你的插件配置會在/.config/nvim/lua資料夾下建立插件名稱資料夾 再用init.lua去呼叫他 ## 4.來安裝nvimTree試試 這邊去nvimTree的github看他會要求你安裝兩個插件 :::info :pushpin: Want to learn more? ➜ [nvim-tree](https://github.com/kyazdani42/nvim-tree.lua) ::: 所以我們先編輯 ==init.lua== ```shell= -- HELPERS ---------------------------------------------------- local cmd = vim.cmd -- to execute Vim commands e.g. cmd('pwd') local fn = vim.fn -- to call Vim functions e.g. fn.bufnr() local g = vim.g -- a table to access global variables local scopes = {o = vim.o, b = vim.bo, w = vim.wo} -- Set CMD 0--------------------------------------------------- cmd "syntax enable" cmd "syntax on" cmd "set number" --Load Plugins ------------------------------------------------ require("pluginsList.lua") require("nvimTree.lua") require("web-devicons.lua") ``` 然後在`/.config/nvim/lua/pluginsList`裡面的==lua.lua== ```shell= local packer_exists = pcall(vim.cmd, [[packadd packer.nvim]]) return require("packer").startup( function() use {"wbthomason/packer.nvim", opt = true} use {"kyazdani42/nvim-tree.lua"} use {"kyazdani42/nvim-web-devicons"} end ) ``` 接下來在`/.config/nvim/lua/`下個別為這兩個插件新增資料夾 ```shell= mkdir nvimTree mkdir web-devicons ``` 接著一樣在`/.config/nvim/lua/nvimTree` 下新增==lua.lua== ```shell= vim.cmd [[packadd nvim-tree.lua]] vim.o.termguicolors = true vim.g.nvim_tree_side = "left" vim.g.nvim_tree_width = 25 vim.g.nvim_tree_ignore = {".git", "node_modules", ".cache"} vim.g.nvim_tree_auto_open = 0 vim.g.nvim_tree_auto_close = 0 vim.g.nvim_tree_quit_on_open = 0 vim.g.nvim_tree_follow = 1 vim.g.nvim_tree_indent_markers = 1 vim.g.nvim_tree_hide_dotfiles = 1 vim.g.nvim_tree_git_hl = 1 vim.g.nvim_tree_root_folder_modifier = ":~" vim.g.nvim_tree_tab_open = 1 vim.g.nvim_tree_allow_resize = 1 vim.g.nvim_tree_show_icons = { git = 1, folders = 1, files = 1 } vim.g.nvim_tree_icons = { default = " ", symlink = " ", git = { unstaged = "✗", staged = "✓", unmerged = "", renamed = "➜", untracked = "★" }, folder = { default = "", open = "", symlink = "" } } local get_lua_cb = function(cb_name) return string.format(":lua require'nvim-tree'.on_keypress('%s')<CR>", cb_name) end -- Mappings for nvimtree vim.api.nvim_set_keymap( "n", "<C-n>", ":NvimTreeToggle<CR>", { noremap = true, silent = true } ) vim.g.nvim_tree_bindings = { ["<CR>"] = get_lua_cb("edit"), ["o"] = get_lua_cb("edit"), ["<2-LeftMouse>"] = get_lua_cb("edit"), ["<2-RightMouse>"] = get_lua_cb("cd"), ["<C-]>"] = get_lua_cb("cd"), ["<C-v>"] = get_lua_cb("vsplit"), ["<C-x>"] = get_lua_cb("split"), ["<C-t>"] = get_lua_cb("tabnew"), ["<BS>"] = get_lua_cb("close_node"), ["<S-CR>"] = get_lua_cb("close_node"), ["<Tab>"] = get_lua_cb("preview"), ["I"] = get_lua_cb("toggle_ignored"), ["H"] = get_lua_cb("toggle_dotfiles"), ["R"] = get_lua_cb("refresh"), ["a"] = get_lua_cb("create"), ["d"] = get_lua_cb("remove"), ["r"] = get_lua_cb("rename"), ["<C-r>"] = get_lua_cb("full_rename"), ["x"] = get_lua_cb("cut"), ["c"] = get_lua_cb("copy"), ["p"] = get_lua_cb("paste"), ["[c"] = get_lua_cb("prev_git_item"), ["]c"] = get_lua_cb("next_git_item"), ["-"] = get_lua_cb("dir_up"), ["q"] = get_lua_cb("close") } ``` 然後在/.config/nvim/lua/web-devicons 下新增==lua.lua== ```shell= vim.cmd [[packadd nvim-web-devicons]] require "nvim-web-devicons".setup { override = { html = { icon = "", color = "#DE8C92", name = "html" }, css = { icon = "", color = "#61afef", name = "css" }, js = { icon = "", color = "#EBCB8B", name = "js" }, ts = { icon = "ﯤ", color = "#519ABA", name = "ts" }, kt = { icon = "󱈙", color = "#ffcb91", name = "kt" }, png = { icon = " ", color = "#BD77DC", name = "png" }, jpg = { icon = " ", color = "#BD77DC", name = "jpg" }, jpeg = { icon = " ", color = "#BD77DC", name = "jpeg" }, mp3 = { icon = "", color = "#C8CCD4", name = "mp3" }, mp4 = { icon = "", color = "#C8CCD4", name = "mp4" }, out = { icon = "", color = "#C8CCD4", name = "out" }, Dockerfile = { icon = "", color = "#b8b5ff", name = "Dockerfile" }, rb = { icon = "", color = "#ff75a0", name = "rb" }, vue = { icon = "﵂", color = "#7eca9c", name = "vue" }, py = { icon = "", color = "#a7c5eb", name = "py" }, toml = { icon = "", color = "#61afef", name = "toml" }, lock = { icon = "", color = "#DE6B74", name = "lock" }, zip = { icon = "", color = "#EBCB8B", name = "zip" }, xz = { icon = "", color = "#EBCB8B", name = "xz" } } } ``` 好,到這邊就設定完成了 ## 5.安裝插件 進入到nvim後,在==normal mode==下 ```shell= :PackerInstall ``` 就會開始安裝你設定的插件 接著按下==CTRL+n==就可以呼叫出nvimTree囉 順便看一下資料夾大概是這個結構的 以後安裝lua的插件,就可依上述的方式添加 ![](https://i.imgur.com/c1Aibtt.png)