Redefining my vim workflow
I use vim for my everyday things. No, actually I use vim for everything.
And today I rewrote large parts of my vim configuration. Here's why.
Dead mappings
I removed a lot of mappings from my vimrc that I did not used.
For example: I had a mapping in normal mode that'd fire up fzf
for the
complete filetree I was in.
I didn't use it in months, maybe more, because I use netrw
(the vim-builtin
file manager).
I don't need plugins
Well, at least you don't need the most of them. First, I removed maybe three or four plugins I didn't use at all, for example the “linux-kernel-style” plugin or “Goyo” and “Limelight”. Not because I didn't like them (I do, believe me), but because I simply did not use them at all. I also removed everything with snippets, because I barely used them. So “UltiSnips” and all the snippet packages are gone now.
Then, for example, I had the vim plugin “vim-indent-guides” with a great snippet of viml I found online:
" Simple replacement for vim-indent-guides
"
" unicode characters explained:
" tab: \uBB == ">>"
" trail: \uB8 == "-" in red box
exec "set listchars=tab:\uBB\uBB,trail:\uB7,nbsp:~"
set list
This does the very same as indent-guides and even does more, because I can have a dot (unicode character \uB7) if there is trailing whitespace at the end of a line. I really like that!
vim as server
Because I'm running
XFCE, as explained in another post
for some time now (and I still like it), I figured that I could use gvim
instead of commandline vim.
But gvim
startup time is not that great – so I figured that I could use the
awesome vim server capability to have only one running vim instance.
So I re-configured my aliases to be
alias vim="vim -g --servername VIM --remote-tab-silent";
for example, so I automatically start in a running gvim instance (which has
the name VIM
by default).
If no vim instance is running, this automatically starts a new gvim
instance.
But because I'm a notorious :q
-hitting vimmer, I remapped :q
:
if has("gui_running")
cnoremap <silent> wq<CR> w<bar>bd<CR>
cnoremap <silent> q<CR> bd<CR>
cnoremap <silent> x<CR> bd<CR>
nmap <Leader>q :bd<CR>
endif
So when I hit :q
it actually executes bd
, which just closes the current
buffer.
If the current buffer is the last buffer, it enters an anonymous buffer
instead.
This is really awesome!
To actually close my vim session, I have to :quit
now, which is longer and
therefor I have more time to stop myself from doing that.
Edit 2017-03-06:
The code above did not completely work as intended, so I changed it to the following:
if has("gui_running")
fu! CloseWindowOrBuffer()
if winnr('$') == 1
if bufnr('$') == 1
:echo "Closing last instance not allowed"
else
:bd
endif
else
:close
endif
endf
nmap <Leader>q :call CloseWindowOrBuffer()
cnoremap <silent> wq<CR> w<CR>:call CloseWindowOrBuffer()<CR>
cnoremap <silent> q<CR> :call CloseWindowOrBuffer()<CR>
cnoremap <silent> x<CR> bd<CR>
else
nmap <Leader>q :q
endif
I'm still not sure whether this is what I want.
env!
Finally, I set my $EDITOR
and $GIT_EDITOR
variables to
export EDITOR="vim -g --servername VIM --remote-tab-wait-silent"
export GIT_EDITOR="vim -g --servername VIM --remote-tab-wait-silent"
To get the best experience when calling vim through scripts or other programs
like git
.
What I want to get from this
Well, I made my vim installation a lot less bloated.
By removing a bunch of plugins I made vim start up way faster, and by using
only one vim instance for all the things, even more.
Using gvim
, I can have pretty fonts and so on.
I wonder how these things work out for me...