# 使用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的插件,就可依上述的方式添加
