Skip to content

Instantly share code, notes, and snippets.

View AndrewRadev's full-sized avatar

Andrew Radev AndrewRadev

View GitHub Profile
@AndrewRadev
AndrewRadev / command_line_window.vim
Created November 1, 2024 11:52
Command-line window replacement (not fully functional)
nnoremap <silent> q: :call <SID>Open(':')<cr>
function! s:Open(type) abort
botright 7new
let b:type = a:type
call s:Redraw(a:type)
normal! G
@AndrewRadev
AndrewRadev / placeholder_jump.vim
Last active October 18, 2024 08:36
Jump to placeholders with <c-j> and <c-k>
" Install by saving as plugin/placeholder_jump.vim in your config files.
"
" Search for <+text+>, <+other text+>, <++> etc, and enter select mode on top
" of the placeholders.
let s:placeholder_pattern = '<+.\{-}+>'
function! s:Next() abort
if search(s:placeholder_pattern)
exe "normal! va<o\<c-g>"
@AndrewRadev
AndrewRadev / cmarks.vim
Created October 1, 2024 19:25
Load marks into the quickfix list
command! Cmarks call s:Cmarks()
function! s:Cmarks() abort
let items = []
" Global marks:
let marklist = getmarklist()
" Local marks:
let marklist += getmarklist(bufnr())
for mark in marklist
@AndrewRadev
AndrewRadev / match_visual.vim
Created September 30, 2024 14:46
Match other instances of visually selected areas
" Install by saving as plugin/match_visual.vim in your Vim (or Neovim) config
" directory.
"
" Reimplementation of https://github.com/aaron-p1/match-visual.nvim
"
" Requires the function `getregion`, you have it if this expression prints 1:
"
" echo exists('*getregion')
"
if !exists('*getregion')
@AndrewRadev
AndrewRadev / markdown_open_link.vim
Last active September 29, 2024 20:07
Open a markdown link under the cursor (proof-of-concept)
@AndrewRadev
AndrewRadev / pophelp.vim
Last active September 29, 2024 20:07
Open Vim help in a resizable, movable popup window
" Save as ~/.vim/plugin/pophelp.vim
let s:popup = 0
command! -range=0 -nargs=* -complete=help
\ Pophelp call s:Open(<q-args>, <count>)
command! Popclose call s:Close()
function! s:Open(topic, count) abort
if a:topic == ''
@AndrewRadev
AndrewRadev / netrw_icons.vim
Last active September 29, 2024 20:06
Render icons in netrw
" Save as ~/.vim/ftplugin/netrw_icons.vim
if exists('b:netrw_icons_loaded')
finish
endif
let b:netrw_icons_loaded = 1
autocmd TextChanged <buffer> call s:NetrwAddIcons()
if empty(prop_type_get('netrw_file_icon', {'bufnr': bufnr('%')}))
@AndrewRadev
AndrewRadev / smart_scrolloff.vim
Last active September 10, 2024 08:36
Set 'scrolloff' to a fraction based on terminal size
" Reimplementation of https://github.com/tonymajestro/smart-scrolloff.nvim
" Place in `~/.vim/plugin/`
"
" Note that the value is based on `&lines`, which is the global number of
" lines available to Vim. If you'd like to scale scrolloff based on window
" size, you could use `line('w$') - line('w0')`. In that case, you'd update
" `&l:scrolloff`, the window-local option.
"
" See `:help 'scrolloff'`, `:help 'lines'`, and `:help getpos()` for more
" details.
@AndrewRadev
AndrewRadev / startuptime.txt
Last active April 29, 2024 14:29
Vim startuptime dump
times in msec
clock self+sourced self: sourced script
clock elapsed: other lines
000.013 000.013: --- VIM STARTING ---
000.147 000.134: Allocated generic buffers
000.259 000.112: locale set
000.270 000.011: GUI prepared
000.276 000.006: clipboard setup
000.280 000.004: window checked
@AndrewRadev
AndrewRadev / parse_ignore.vim
Last active April 12, 2024 16:39
Add "ignored" status to statusline
" As an example, put it in the statusline (you should not do this here, just put the %{} in your config):
let &statusline = substitute(&statusline, '%f', '%f%{get(b:,"ignore_status","")}', '')
"
" get(b:, "ignore_status", "") -> Get the key "ignore_status" from the
" dictionary b: (all buffer-local variables), defaulting to ""
"
augroup IgnoreStatus
autocmd!