On Debian-family systems, vim.tiny
may be providing the vim
command, through the alternatives system. If I bring in my dotfiles and haven’t installed a full vim package yet, such as vim-gtk3
, then dozens of errors might show up. vim.tiny
really does not support many features.
Other times, I run gvim -ZR
for quickly checking some code, to get read-only restricted mode. In that case, anything that wants to run a shell command will fail. Restricted mode is also a signal that I don’t trust the files I’m viewing, so I don’t want to process their modelines at all.
To deal with these scenarios, my vimrc is shaped like this (line count heavily reduced for illustration):
set nocompatible ruler laststatus=2 nomodeline modelines=2
if has('eval')
call plug#begin('~/.vim/plugged')
try
call system('true')
Plug 'dense-analysis/ale'
Plug 'mhinz/vim-signify' | set updatetime=150
Plug 'pskpatil/vim-securemodelines'
catch /E145/
endtry
Plug 'editorconfig/editorconfig-vim'
Plug 'luochen1990/rainbow'
Plug 'tpope/vim-sensible'
Plug 'sapphirecat/garden-vim'
Plug 'ekalinin/Dockerfile.vim', { 'for': 'Dockerfile' }
Plug 'rhysd/vim-gfm-syntax', { 'for': 'md' }
Plug 'wgwoods/vim-systemd-syntax', { 'for': 'service' }
call plug#end()
if !has('gui_running') && exists('&termguicolors')
set termguicolors
endif
let g:rainbow_active=1
colorscheme garden
endif
We start off with the universally-supported settings. Although I use the abbreviated forms in the editor, my vimrc has the full spelling, for self-documentation.
Next is the feature detection of if has('eval') … endif
. This ensures that vim.tiny
doesn’t process the block. Sadly, inverting the test and using the finish
command inside didn’t work.
If we have full vim, we start loading plugins, with a try-catch for restricted mode. If we can’t run the true
shell command, due to E145, we cancel the error and proceed without that subset of non-restricted plugins. Otherwise, ALE and signify would load in restricted mode, but throw errors as soon as we opened files.
After that, it’s pretty straightforward; we’re running in a full vim, loading things that can run in restricted mode. When the plugins are over, we finish by configuring and activating the ones that need it.