Update vim stuff
This commit is contained in:
@@ -39,6 +39,7 @@ alias ...='cd ../..'
|
|||||||
alias ....='cd ../../..'
|
alias ....='cd ../../..'
|
||||||
|
|
||||||
# Tools
|
# Tools
|
||||||
|
alias vim='vimx'
|
||||||
alias n='nvim'
|
alias n='nvim'
|
||||||
alias n.="nvim ."
|
alias n.="nvim ."
|
||||||
alias ns="nvim src"
|
alias ns="nvim src"
|
||||||
|
|||||||
292
config/dot/vim/vimrc
Normal file
292
config/dot/vim/vimrc
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
" =============================================================================
|
||||||
|
" ~/.vim/vimrc
|
||||||
|
" Vim config — no plugins, ported from Neovim config.
|
||||||
|
" Symlink: ln -sf ~/.local/share/Panama/config/dot/vim/vimrc ~/.vim/vimrc
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" GENERAL / COMPATIBILITY
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Disable Vi compatibility. Must be first.
|
||||||
|
set nocompatible
|
||||||
|
|
||||||
|
" Enable filetype detection, plugins, and indent files.
|
||||||
|
filetype plugin indent on
|
||||||
|
|
||||||
|
" Enable syntax highlighting.
|
||||||
|
syntax enable
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" LEADER KEY
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Must be set before any <leader> mappings.
|
||||||
|
let mapleader = ' '
|
||||||
|
let maplocalleader = '\'
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" LINE NUMBERS
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
set number " Absolute line number on current line
|
||||||
|
set relativenumber " Relative line numbers on all other lines
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" INDENTATION
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
set tabstop=2 " A <Tab> displays as 2 columns
|
||||||
|
set softtabstop=2 " <Tab> in insert mode inserts 2 spaces
|
||||||
|
set shiftwidth=2 " >> and << shift by 2 spaces
|
||||||
|
set expandtab " Use spaces instead of tab characters
|
||||||
|
set smartindent " Auto-indent new lines based on context
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" SWAP / UNDO
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
set noswapfile
|
||||||
|
|
||||||
|
" Persistent undo — ~/.vim/undodir must exist (it already does on this machine).
|
||||||
|
set undodir=~/.vim/undodir
|
||||||
|
set undofile
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" SEARCH
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
set hlsearch " Highlight all matches
|
||||||
|
set incsearch " Show matches as you type
|
||||||
|
set ignorecase " Case-insensitive by default...
|
||||||
|
set smartcase " ...unless the query has uppercase
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" APPEARANCE
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" 24-bit color — requires a true-color terminal (kitty, ghostty, etc.).
|
||||||
|
set termguicolors
|
||||||
|
|
||||||
|
" Keep 4 lines visible above/below cursor when scrolling.
|
||||||
|
set scrolloff=4
|
||||||
|
|
||||||
|
" Always show the sign column to prevent layout shifts.
|
||||||
|
set signcolumn=yes
|
||||||
|
|
||||||
|
" Reduce delay before CursorHold fires.
|
||||||
|
set updatetime=50
|
||||||
|
|
||||||
|
" Show invisible characters: trailing spaces and non-breaking spaces as ⋅,
|
||||||
|
" tabs as two spaces so they are visible but not distracting.
|
||||||
|
set list
|
||||||
|
set listchars=trail:⋅,nbsp:⋅,tab:\ \
|
||||||
|
|
||||||
|
" Always show statusline even with a single window.
|
||||||
|
set laststatus=2
|
||||||
|
|
||||||
|
" habamax is a good built-in dark theme in Vim 9+; fall back to slate.
|
||||||
|
if v:version >= 900
|
||||||
|
colorscheme habamax
|
||||||
|
else
|
||||||
|
colorscheme slate
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Transparent statusline background (mirrors the Neovim setup).
|
||||||
|
highlight StatusLine guibg=NONE ctermbg=NONE
|
||||||
|
highlight StatusLineNC guibg=NONE ctermbg=NONE
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" STATUS LINE
|
||||||
|
" =============================================================================
|
||||||
|
" Mirrors lualine layout: mode | filepath [+][RO] ... filetype | enc | line:col | %
|
||||||
|
|
||||||
|
set statusline=
|
||||||
|
set statusline+=\ %{toupper(mode())}
|
||||||
|
set statusline+=\ \|\ %f\ %m%r
|
||||||
|
set statusline+=%=
|
||||||
|
set statusline+=%y\ \|\ %{&fileencoding?&fileencoding:&encoding}
|
||||||
|
set statusline+=\ \|\ %l:%c\ \|\ %p%%\
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" MISCELLANEOUS
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
set ttyfast " Assume a fast terminal connection
|
||||||
|
set backspace=indent,eol,start " Backspace over everything in insert mode
|
||||||
|
set nowrap " Don't wrap long lines
|
||||||
|
set showcmd " Show partial commands in last line
|
||||||
|
set showmatch " Briefly jump to matching bracket on insert
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — WINDOW NAVIGATION
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
nnoremap <leader>h <C-w>h
|
||||||
|
nnoremap <leader>j <C-w>j
|
||||||
|
nnoremap <leader>k <C-w>k
|
||||||
|
nnoremap <leader>l <C-w>l
|
||||||
|
vnoremap <leader>h <C-w>h
|
||||||
|
vnoremap <leader>j <C-w>j
|
||||||
|
vnoremap <leader>k <C-w>k
|
||||||
|
vnoremap <leader>l <C-w>l
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — FILE OPERATIONS
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
nnoremap <leader>w :write<CR>
|
||||||
|
nnoremap <leader>q :quit<CR>
|
||||||
|
|
||||||
|
" Source the vimrc (mirrors <leader><leader>s in Neovim).
|
||||||
|
nnoremap <leader><leader>s :update<CR>:source $MYVIMRC<CR>
|
||||||
|
|
||||||
|
" Make the current file executable.
|
||||||
|
nnoremap <silent> <leader><leader>x :!chmod +x %<CR>
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — LINE MANIPULATION
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Move selected lines down / up in visual mode.
|
||||||
|
vnoremap J :m '>+1<CR>gv=gv
|
||||||
|
vnoremap K :m '<-2<CR>gv=gv
|
||||||
|
|
||||||
|
" Join lines in normal mode while keeping the cursor position fixed.
|
||||||
|
nnoremap J mzJ`z
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — SCROLL AND SEARCH WITH RECENTERING
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
nnoremap <C-d> <C-d>zz
|
||||||
|
nnoremap <C-u> <C-u>zz
|
||||||
|
|
||||||
|
" Next / previous search result: center view and open any fold.
|
||||||
|
nnoremap n nzzzv
|
||||||
|
nnoremap N Nzzzv
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — CLIPBOARD (SYSTEM)
|
||||||
|
" =============================================================================
|
||||||
|
" Requires Vim compiled with +clipboard.
|
||||||
|
" On Fedora, install vim-X11 if needed: sudo dnf install vim-X11
|
||||||
|
" Verify with :version — look for +clipboard.
|
||||||
|
|
||||||
|
nnoremap <leader>p "+p
|
||||||
|
nnoremap <leader>P "+P
|
||||||
|
vnoremap <leader>p "+p
|
||||||
|
vnoremap <leader>P "+P
|
||||||
|
|
||||||
|
nnoremap <leader>y "+y
|
||||||
|
vnoremap <leader>y "+y
|
||||||
|
nnoremap <leader>yy "+yy
|
||||||
|
|
||||||
|
" Yank entire buffer to system clipboard.
|
||||||
|
nnoremap <leader>YY :%y+<CR>
|
||||||
|
|
||||||
|
" Visual: replace selection from clipboard without clobbering the clipboard.
|
||||||
|
xnoremap <leader>v "_dP
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — VOID-REGISTER DELETE
|
||||||
|
" =============================================================================
|
||||||
|
" Delete without touching the unnamed register, preserving the last yank.
|
||||||
|
|
||||||
|
nnoremap <leader>d "_d
|
||||||
|
vnoremap <leader>d "_d
|
||||||
|
nnoremap <leader>dd "_dd
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — SEARCH AND REPLACE
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
" Replace the word under the cursor across the whole file.
|
||||||
|
" Cursor is placed inside the replacement text for immediate editing.
|
||||||
|
nnoremap <leader>sr :%s/\<<C-r><C-w>\>/<C-r><C-w>/gI<Left><Left><Left>
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — DISABLED KEYS
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
nnoremap Q <nop>
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" KEYMAPS — COMMENT TOGGLE (<leader>c)
|
||||||
|
" =============================================================================
|
||||||
|
" Toggles `// ` comments on the current line (normal) or each line in a
|
||||||
|
" visual selection. Not filetype-aware — works for C, C++, JS, TS, Go, Rust.
|
||||||
|
" For language-aware comments a plugin like vim-commentary would be needed.
|
||||||
|
|
||||||
|
function! ToggleComment() range
|
||||||
|
let l:first_line = getline(a:firstline)
|
||||||
|
if l:first_line =~ '^\s*\/\/ '
|
||||||
|
execute a:firstline . ',' . a:lastline . 's/^\(\s*\)\/\/ /\1/'
|
||||||
|
else
|
||||||
|
execute a:firstline . ',' . a:lastline . 's/^\(\s*\)/\1\/\/ /'
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
nnoremap <silent> <leader>c :call ToggleComment()<CR>
|
||||||
|
vnoremap <silent> <leader>c :call ToggleComment()<CR>
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" AUTOCOMMANDS
|
||||||
|
" =============================================================================
|
||||||
|
|
||||||
|
augroup VimRCGroup
|
||||||
|
autocmd!
|
||||||
|
|
||||||
|
" Strip trailing whitespace on every save.
|
||||||
|
autocmd BufWritePre * :%s/\s\+$//e
|
||||||
|
|
||||||
|
" Auto-source this vimrc whenever it is saved.
|
||||||
|
autocmd BufWritePost vimrc source $MYVIMRC
|
||||||
|
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
|
||||||
|
" =============================================================================
|
||||||
|
" HIGHLIGHT YANK
|
||||||
|
" =============================================================================
|
||||||
|
" Briefly highlights yanked text using IncSearch colors, then clears it.
|
||||||
|
" Implements Neovim's vim.highlight.on_yank() using matchadd + timer_start.
|
||||||
|
" Requires Vim 8.0.1422+ (for v:event) and Vim 8.0+ (for timer_start).
|
||||||
|
|
||||||
|
augroup HighlightYank
|
||||||
|
autocmd!
|
||||||
|
autocmd TextYankPost * call s:HighlightYank()
|
||||||
|
augroup END
|
||||||
|
|
||||||
|
function! s:HighlightYank()
|
||||||
|
if v:event.operator !=# 'y'
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l:match_id = matchadd('IncSearch',
|
||||||
|
\ '\%' . line("'[") . 'l\%' . col("'[") . 'c\_.*' .
|
||||||
|
\ '\%' . line("']") . 'l\%' . col("']") . 'c')
|
||||||
|
call timer_start(150, {-> s:ClearYankHighlight(l:match_id)})
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! s:ClearYankHighlight(match_id)
|
||||||
|
silent! call matchdelete(a:match_id)
|
||||||
|
endfunction
|
||||||
@@ -31,6 +31,20 @@ ln -s "$PANAMA_BASH/.bashrc" "$HOME/.bashrc"
|
|||||||
|
|
||||||
dirs=("espanso" "forge" "ghostty" "kitty" "nvim" "tmux")
|
dirs=("espanso" "forge" "ghostty" "kitty" "nvim" "tmux")
|
||||||
|
|
||||||
|
# --- Vim vimrc ---
|
||||||
|
echo -e "\n--- Setting up vim ---"
|
||||||
|
mkdir -p "$HOME/.vim"
|
||||||
|
if [ -L "$HOME/.vim/vimrc" ]; then
|
||||||
|
rm "$HOME/.vim/vimrc"
|
||||||
|
log "Removed old symlink at ~/.vim/vimrc"
|
||||||
|
fi
|
||||||
|
if [ -f "$HOME/.vim/vimrc" ]; then
|
||||||
|
mv "$HOME/.vim/vimrc" "$PANAMA_OLD/vimrc"
|
||||||
|
log "Moved existing ~/.vim/vimrc to $PANAMA_OLD/vimrc"
|
||||||
|
fi
|
||||||
|
ln -s "$PANAMA_DOT/vim/vimrc" "$HOME/.vim/vimrc"
|
||||||
|
log "Linked $PANAMA_DOT/vim/vimrc → ~/.vim/vimrc"
|
||||||
|
|
||||||
for dir in "${dirs[@]}"; do
|
for dir in "${dirs[@]}"; do
|
||||||
echo -e "\n--- Setting up $dir ---"
|
echo -e "\n--- Setting up $dir ---"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user