last time i too often feel the need to write both ‘prose’ and ‘code’ stuff. my fav editor is vim and i’m using it for any file editing purpose.
unfortunatelly, it can be very uncomfortable to use the same
vimrc for writing prose and code. when you are writing prose some plugins (or settings) which intended to use while writing code can make your ass burns (and vice-versa). you can use
autogroup to deal with it, but it’s very inflexible and makes your
vimrc looks ugly. you can also use filetype plugins, but as long as i can see, it’s inflexible too. also, actually i can be wrong with all this stuff and there is some more neat way to solve the problem instead of the next one.
the main idea is pretty simple - to split
vimrc into three parts. the first part is the core, where i have stored the common settings. the second and third parts are depending on first part and they contain appropriate settings for writing prose or code. such splitting is very scalable and makes possible to manage the whole
vimrc for such purpose instead of brainfucking with
autogroup or filetype plugins.
if you are already interested in, you can find the sources at the end of note.
here is just the very-generalized description of steps and tips to get a working solution:
create three files:
vimrc.prose. these files i have described above.
fill it with appropriate configuration stuff, move the common settings to
vimrc.coreand make others
sourceit. these things are very simple to implement and you can get in trouble just with per-mode plugins. actually it can be solved easily if you are using dein.
setting up shell aliases sometimes can be handy. i have done it like that:
alias vp="vim -u $XDG_CONFIG_HOME/vim/vimrc.prose" alias vc="vim -u $XDG_CONFIG_HOME/vim/vimrc.code"
to not care about current ‘mode’ in the most of situations, my
vimrcnow contains some logic to determine it and load appropriate config (generally it’s just sourcing
vimrc.code). for now the logic just depends on file extension and maybe it will be nice to make it use filetypes but seems like it’s not so easy as i thought in the beginning. my variant looks so (yea, that’s whole
let s:prose_types = ['md', 'txt'] if index(s:prose_types, expand('%:e')) != -1 source $XDG_CONFIG_HOME/vim/vimrc.prose else source $XDG_CONFIG_HOME/vim/vimrc.code endif
check the sources here.
have a nice day.