| title | Nvim and Lua Setup |
|---|---|
| description | getting started with nvim and lua |
| author | haimtran |
| publishedDate | 20/02/2023 |
| date | 2023-20-02 |
- project structure
- basic lau to configure nvim
- how to install plugins with packer and configure in after
- telescope and telescope filer browser
- nerd-font
- lsp and langugae server
- tmux to fix the true color issue
- fish shell and configuration
- Install Node
- Install nvim at least 0.9.0
- Install Packer package management
First, let download Node from offical site
wget https://nodejs.org/dist/v18.16.1/node-v18.16.1-linux-x64.tar.xzThen extract and update the PATH
tar -xvzf node-v18.16.1-linux-x64.tar.xzUpdate the PATH
echo 'PATH=/home/ec2-user/node-v18.16.1-linux-x64/bin:$PATH' >> ~/.bashrcSecond, let download nvim at least 0.9.0 from official site
wget https://github.com/neovim/neovim/releases/download/v0.9.0/nvim-linux64.tar.gzExtract and upload the PATH
tar -xvzf nvim-linux64.tar.gzUpload the PATH
echo 'PATH=/home/ec2-user/nvim/nvim-linux64/bin:$PATH' >> ~/.bashrcThird, install the Packer package manager for nvim by following offical docs
git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvimLet create a config director for nvim in ~/.config as
mdkir ~/.config/nvim Then setup the project structure as below
- init.lua
- after/plugin
|--prettier.rc.lua
|--telescope.rc.lua
|--web-devicons.rc.lua
- plugin
|--packer-compiled.lua
|--null-ls.rc.lua
|--lspconfig.lua
|--lspsaga.lua
- lua
|--entest
|--base.lua
|--maps.lua
|--highlight.lua
|--macos.lua
|--plugins.lua
according to the nvim documentation, all dirs in the runtimepath will be searcherd for for the plugin here.
vim.cmd("autocmd!")
vim.scriptencoding = 'utf-8'
vim.opt.encoding = 'utf-8'
vim.opt.fileencoding = 'utf-8'
-- Leader key
vim.g.mapleader = ','
vim.wo.number = true
vim.opt.title = true
vim.opt.autoindent = true
vim.opt.smartindent = true
vim.opt.hlsearch = true
vim.opt.backup = false
vim.opt.showcmd = true
vim.opt.cmdheight = 1
vim.opt.laststatus = 2
vim.opt.expandtab = true
vim.opt.scrolloff = 10
vim.opt.shell = 'fish'
vim.opt.backupskip = { '/tmp/*', '/private/tmp/*' }
vim.opt.inccommand = 'split'
vim.opt.ignorecase = true -- Case insensitive searching UNLESS /C or capital in search
vim.opt.smarttab = true
vim.opt.breakindent = true
vim.opt.shiftwidth = 2
vim.opt.tabstop = 2
vim.opt.wrap = false -- No Wrap lines
vim.opt.backspace = { 'start', 'eol', 'indent' }
vim.opt.path:append { '**' } -- Finding files - Search down into subfolders
vim.opt.wildignore:append { '*/node_modules/*' }
install packer for Lunix here
git clone --depth 1 https://github.com/wbthomason/packer.nvim\
~/.local/share/nvim/site/pack/packer/start/packer.nvimbasic example, install prettier plugin, require in the below file
lua/entest/plugins.lau with content so packer will install prettier
local status, packer = pcall(require, "packer")
if (not status) then
print("Packer is not installed")
return
end
vim.cmd [[packadd packer.nvim]]
packer.startup(function(use)
use 'wbthomason/packer.nvim'
use { "MunifTanjim/prettier.nvim" }
end)basic commands
:PackerSync - pay attention before removing things
:PackerComplie
:PackerClean
:PackerUpdate configure prettier after loaded the package
after/plugin/prettier.rc.lua with content
local status, prettier = pcall(require, "prettier")
if (not status) then return end
prettier.setup {
print_width = 80,
bin = 'prettier',
filetypes = {
"python",
"css",
"javascript",
"javascriptreact",
"typescript",
"typescriptreact",
"json",
"scss",
"less"
}
}install lsp client
use 'neovim/nvim-lspconfig' -- LSPthen need to install cmp (auto completion), syntax highlight, auto tag, etc. Put below in the file
lua/entest/plugins.luacontent
use 'hrsh7th/cmp-buffer' -- nvim-cmp source for buffer words
use 'hrsh7th/cmp-nvim-lsp' -- nvim-cmp source for neovim's built-in LSP
use 'hrsh7th/nvim-cmp' -- Completion
use 'neovim/nvim-lspconfig' -- LSP
use 'williamboman/mason.nvim'
use 'williamboman/mason-lspconfig.nvim'also update after/plugin/
plugin/lspconfig.lua
after/plugin/cmp.rc.lua
after/plugin/autopairs.rc.lua install lsp server for python
npm i -g pyrightinstall lsp server for typescript
npm i typescript-language-serverinstall telescope in lua/entest/plugins.lua
use 'nvim-telescope/telescope.nvim'
use 'nvim-telescope/telescope-file-browser.nvim'configure telescope in after/plugins/telescope.rc.lua
local status, telescope = pcall(require, "telescope")
if (not status) then return end
local actions = require('telescope.actions')
local builtin = require("telescope.builtin")
local function telescope_buffer_dir()
return vim.fn.expand('%:p:h')
end
local fb_actions = require "telescope".extensions.file_browser.actions
telescope.setup {
defaults = {
mappings = {
n = {
["q"] = actions.close
},
},
},
extensions = {
file_browser = {
theme = "dropdown",
-- disables netrw
hijack_netrw = true,
mappings = {
-- your custom insert mode mappings
["i"] = {
["<C-w>"] = function() vim.cmd('normal vbd') end,
},
["n"] = {
-- your custom normal mode mappings
["N"] = fb_actions.create,
["h"] = fb_actions.goto_parent_dir,
["/"] = function()
vim.cmd('startinsert')
end
},
},
},
},
}
telescope.load_extension("file_browser")
-- find files
vim.keymap.set('n', ';f', function()
builtin.find_files({
no_ignore = false,
hidden = true
})
end)
-- file explore
vim.keymap.set("n", "sf", function()
telescope.extensions.file_browser.file_browser({
path = "%:p:h",
cwd = telescope_buffer_dir(),
respect_gitignore = false,
hidden = true,
grouped = true,
previewer = false,
initial_mode = "normal",
layout_config = { height = 40 }
})
end)dependencies, might need to brew install for macos
- sharkd/fd for greph filder
- nvim-treesister
basic setup and mappings here
telescope file browser
- seletection by tab
- rename, move, copy here
- need to disable loading netrw by default
- for macos brew install or manually install and then terminal (Iterm) setting to select hack nerd font. the font help display icons such as git
- for linux -- download nerdfont for Linux here -- install nerdfont for Linux here
download the nerdfont
unzip to ~/.local/share/fonts/
sudo fc-cache -fv
tmux can be used to fix the non-true-color terminal issue
- run fish_config to select a font
- the fish backgroud color does not work
- customize fish_variables and fish_prompt.fish function
# VERSION: 3.0
SETUVAR __fish_initialized:3400
SETUVAR fish_color_autosuggestion:666
SETUVAR fish_color_cancel:\x2d\x2dreverse
SETUVAR fish_color_command:normal
SETUVAR fish_color_comment:888\x1e\x2d\x2ditalics
SETUVAR fish_color_cwd:white
SETUVAR fish_color_cwd_root:A00
SETUVAR fish_color_end:009900
SETUVAR fish_color_error:F22
SETUVAR fish_color_escape:0AA
SETUVAR fish_color_history_current:0AA
SETUVAR fish_color_host:normal
SETUVAR fish_color_host_remote:\x1d
SETUVAR fish_color_keyword:\x1d
SETUVAR fish_color_match:0AA
SETUVAR fish_color_normal:B2B2B2
SETUVAR fish_color_operator:0AA
SETUVAR fish_color_option:\x1d
SETUVAR fish_color_param:ccccff
SETUVAR fish_color_quote:9ce781
SETUVAR fish_color_redirection:FFF
SETUVAR fish_color_search_match:\x2d\x2dbackground\x3d533
SETUVAR fish_color_selection:\x2d\x2dbackground\x3dB218B2
SETUVAR fish_color_status:red
SETUVAR fish_color_user:brgreen
SETUVAR fish_color_valid_path:\x2d\x2d
SETUVAR fish_key_bindings:fish_default_key_bindings
SETUVAR fish_pager_color_background:\x1d
SETUVAR fish_pager_color_completion:BBB
SETUVAR fish_pager_color_description:666
SETUVAR fish_pager_color_prefix:0AA\x1e\x2d\x2d
SETUVAR fish_pager_color_progress:0AA
SETUVAR fish_pager_color_secondary_background:\x1d
SETUVAR fish_pager_color_secondary_completion:\x1d
SETUVAR fish_pager_color_secondary_description:\x1d
SETUVAR fish_pager_color_secondary_prefix:\x1d
SETUVAR fish_pager_color_selected_background:\x2d\x2dbackground\x3d333
SETUVAR fish_pager_color_selected_completion:\x1d
SETUVAR fish_pager_color_selected_description:\x1d
SETUVAR fish_pager_color_selected_prefix:\x1d
Important
Please install prettier and typescript-language-server globally
npm i -g prettiernpm install -g typescript-language-server typescriptshow function documentation or show hover
Cmd K Cmd I- clipboard
- if live_grep does not work, please install ripgrep for Linux
- nvim docs here
- lua docs here
- remove treesister and nvim-tree with neovim 8.0
- replace sumneko_lua by lua_ls with neovim 8.0
- LspInstall tailwinss or other langugae servers or npm install
- checkheath to see which install has error
- PackerStatus to see status of plugins
- LSPInfor error edit ~/.local/share/.../packer/.../lspinfo.lua
- comment nvim_set_option_value to fix LSPInfor error
- disable icons in telescope and vim.opt.laststatus = 0