Vim Configurations
Introduction
Vim is great, but I'm currently using NeoVim (w/ NvChad) as my baseline. My usual workflow involves simplton stock Vi like behaviors for quick accesses and changes or NvChad level of customized distribution for more indepth and dedicated development or productivity.
NeoVim Config
This is a configuration isn't a "works everywhere" thing. This is the config that you'll setup on a dedicated developer laptop or workstation.
Pre-Requisites
- Connect to internet.
- Install tmux (>3.0):
apt-get install tmux
- Install
git
:apt-get install git
- Install a nerd font for all terminal apps
- Install Neovim from github release
- Note:
apt-get
version isn't new enough for latestnvchad
. - Extract into
/usr/local/nvim
- Add to path:
export PATH=$PATH:/usr/local/nvim/bin
- Add aliases for vi to nvim:
alias vi=nvim
. - Restart shell with new path:
bash
xorsudo reboot
.
- Note:
- Install
nvchad
via GitHub.git clone https://github.com/NvChad/starter ~/.config/nvim && nvim
NeoVim (~v0.10) Config
Add the following to ~/.config/nvim/lua/mappings.lua
:
vim.api.nvim_del_keymap('n', '<leader>b')
vim.api.nvim_del_keymap('n', '<leader>h')
vim.api.nvim_del_keymap('n', '<leader>v')
require("which-key").add({
mode = { "n" },
{ "<leader>bd", "<cmd>bd<CR>", desc = "Close Buffer" },
{ "<leader>bn", "<cmd>bn<CR>", desc = "New Buffer" },
{ "<leader>hp", "<cmd>Gitsigns preview_hunk<CR>", desc = "Git Hunk Preview" },
{ "<leader>hb", "<cmd>Gitsigns toggle_current_line_blame<CR>", desc = "Toggle Git Blame" },
{ "<C-h>", "<cmd>TmuxNavigateLeft<CR>", desc = "Pane Left" },
{ "<C-l>", "<cmd>TmuxNavigateRight<CR>", desc = "Pane Right" },
{ "<C-j>", "<cmd>TmuxNavigateDown<CR>", desc = "Pane Down" },
{ "<C-k>", "<cmd>TmuxNavigateUp<CR>", desc = "Pane Up" },
{ "<leader>hh", function()
require("nvchad.term").new { pos = "sp" }
end, desc = "new horiz term" },
{ "<leader>vv", function()
require("nvchad.term").new { pos = "vsp" }
end, desc = "new vert term" },
{ "<leader>ss", "<cmd>Telescope treesitter<CR>", desc = "Search Symbols in File" },
{ "<leader>sd", "<cmd>Telescope lsp_definitions<CR>", desc = "Search Symbol Definition" },
{ "<leader>sr", "<cmd>Telescope lsp_definitions<CR>", desc = "Search Symbol References" },
})
Add the following to ~/.config/nvim/lua/plugins/init.lua
:
{
"christoomey/vim-tmux-navigator",
lazy = false,
cmd = {
"TmuxNavigateLeft",
"TmuxNavigateDown",
"TmuxNavigateUp",
"TmuxNavigateRight",
"TmuxNavigatePrevious",
"TmuxNavigatorProcessList",
},
keys = {
{ "<c-h>", "<cmd><C-U>TmuxNavigateLeft<cr>" },
{ "<c-j>", "<cmd><C-U>TmuxNavigateDown<cr>" },
{ "<c-k>", "<cmd><C-U>TmuxNavigateUp<cr>" },
{ "<c-l>", "<cmd><C-U>TmuxNavigateRight<cr>" },
{ "<c-\\>", "<cmd><C-U>TmuxNavigatePrevious<cr>" },
},
},
Add the following to ~/.config/nvim/init.lua
:
# Allow tmux to control background color.
vim.cmd("hi Normal guibg=NONE")
Open/Restart nvim
and run Lazy sync
to install the plugin.
Features
Once complete, you'll have:
- Stock
nvchad
feature set. - All the above base config for tmux.
- Windows 1-indexed (better UX based on keyboard layout)
- Shift+
<Arrow>
for window switch in tmux. - Navigate between tmux and neovim with
<C-[hjkl]>
.