Skip to main content

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 latest nvchad.
    • 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 xor sudo reboot.
  • 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]>.

References​