A comprehensive dotfile configuration for Linux systems featuring Neovim, Tmux, and Zsh with Oh My Zsh. Uses GNU Stow for automatic symlinking.
- Prerequisites
- Quick Start
- Setup Instructions
- Reference Guide
- Custom Keymaps
- Plugin Configuration
- Tmux Configuration
- Getting Help
- Plugin Management
- External Tools
- GNU Stow - for managing dotfile symlinks
- Git
- Curl
cd .dotfiles
chmod +x ./install.sh
./install.sh-
Install the latest Neovim:
curl -LO https://github.com/neovim/neovim/releases/latest/download/nvim.appimage chmod u+x nvim.appimage sudo ln -s ./nvim.appimage /usr/local/bin/nvim
-
Install Packer (plugin manager):
git clone --depth 1 https://github.com/wbthomason/packer.nvim \ ~/.local/share/nvim/site/pack/packer/start/packer.nvim -
Sync plugins in Neovim:
:PackerSync
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"- Normal mode - Navigate and manipulate text
- Insert mode - Type and edit text
- Visual mode - Select text
| Key | Action |
|---|---|
i |
Insert before cursor |
I |
Insert at beginning of line |
a |
Insert after cursor |
A |
Insert at end of line |
o |
New line below and insert |
O |
New line above and insert |
| Key | Action |
|---|---|
v |
Character-wise visual |
V |
Line-wise visual |
<C-v> |
Block visual |
| Key | Action |
|---|---|
h j k l |
Left, down, up, right |
w |
Next word start |
b |
Previous word start |
e |
End of word |
9 |
Beginning of line (remapped from 0) |
0 |
End of line (remapped from $) |
gg |
File start |
G |
File end |
<C-d> |
Scroll down half page |
<C-u> |
Scroll up half page |
{ |
Previous paragraph |
} |
Next paragraph |
| Command | Action |
|---|---|
ci{ |
Change inside braces |
ca( |
Change around parentheses |
di" |
Delete inside quotes |
da' |
Delete around single quotes |
yt{ |
Yank until next { |
dt' |
Delete until next ' |
| Key | Action |
|---|---|
x |
Delete character |
d |
Delete (combine with motions) |
y |
Yank/copy (combine with motions) |
p |
Paste after |
P |
Paste before |
u |
Undo |
<C-r> |
Redo |
/{pattern} " Search forward
?{pattern} " Search backward
n " Next match
N " Previous match
* " Search word under cursor forward
# " Search word under cursor backward:%s/{search}/{replace}/g " Replace all in file
:%s/{search}/{replace}/gc " Replace all with confirmation
:{start},{end}s/{search}/{replace}/g " Replace in rangeOur configuration includes these search enhancements:
set ignorecase smartcase " Smart case sensitivity
set incsearch hlsearch " Incremental search with highlightingClear search highlighting: <leader><CR>
:r {filename} " Insert file contents
:r !{command} " Insert command output
<leader>ps " Project-wide search (grep)| Key | Action |
|---|---|
gV |
Reselect last visual selection |
Y |
Yank to end of line |
<leader><leader> |
Switch between last two buffers |
<leader><CR> |
Clear search highlighting |
| Key | Action |
|---|---|
<leader>pf |
Fuzzy find files |
<leader>gf |
Find Git tracked files |
| Key | Action |
|---|---|
<leader>a |
Add file to Harpoon |
<C-h> <C-t> <C-n> <C-s> |
Navigate marked files |
<C-e> |
Open Harpoon quick menu |
| Command | Action |
|---|---|
cs"' |
Change " to ' |
cs({ |
Change ( to { |
ds' |
Delete surrounding ' |
ysiw] |
Surround word with [] |
yss" |
Surround line with "" |
| Key | Action |
|---|---|
<leader>u |
Toggle undo tree |
| Key | Action |
|---|---|
gd |
Go to definition |
gD |
Go to declaration |
gi |
Go to implementation |
go |
Go to type definition |
gr |
List references |
K |
Show documentation |
gs |
Show signature help |
<F2> |
Rename symbol |
<F3> |
Format buffer |
gl |
Show diagnostics |
[d ]d |
Navigate diagnostics |
| Key | Action |
|---|---|
<C-y> |
Accept completion |
<C-e> |
Cancel completion |
<Up> <Down> |
Navigate completions |
| Key | Action |
|---|---|
<C-y> |
Accept suggestion |
<C-]> |
Dismiss suggestion |
<M-[> <M-]> |
Cycle suggestions |
<M-Right> |
Accept next word |
<M-C-Right> |
Accept next line |
- Prefix key:
Ctrl-a(instead of defaultCtrl-b) - Escape time: Instant key registration
- New windows: Open in current path
- Auto-renumber: Windows renumber after closing
- History: 10,000 line scrollback buffer
# Sessions
tmux new -s session_name # Create named session
tmux attach -t session_name # Attach to session
tmux list-sessions # List sessions
# Windows & Panes
Ctrl-a c # New window
Ctrl-a % # Split vertically
Ctrl-a " # Split horizontally
Ctrl-a [0-9] # Switch to window number| Type | Prefix | Example |
|---|---|---|
| Normal mode | (none) | :help x |
| Visual mode | v_ |
:help v_u |
| Insert mode | i_ |
:help i_META |
| Command-line | : |
:help :quit |
| Options | ' |
:help 'textwidth' |
:LspInstall {server} " Install LSP server
:Mason " Open Mason package manager
:Copilot " Copilot commandsPlugins are managed with Packer. After making changes:
- Source the config:
:so - Sync plugins:
:PackerSync
ps aux | fzf # Search processes with fuzzy finding