Storing vim settings with a document

VimSettings

Vim Problem Overview


Is there any way to save the state of vim settings with a document?

To clarify: I'm editing a document and I change a bunch of settings. I don't necessarily recall which; and I don't want to use these settings again, except for the current document. I don't want to manually try to remember what I've changed; or what the magic abbreviations are for the settings I've changed. I just want to have, say, for "mydoc.txt", a "mydoc.vim" file that puts me back where I left off, and the settings file would be saved automatically based on a vim setting, say, or maybe a ctrl-key does it before I exit. It would be handy if vim could automatically look for such a file.

And it would be preferable not to have to edit the settings into and out of the document itself.

Vim Solutions


Solution 1 - Vim

Yes, vim settings can be included within the document.

They are mostly found within comments, so they don't mess up the original file. An example for tab-specific settings is:

/* ex: set tabstop=8 expandtab: */

Note that this command works in most cases, however, servers are often setup without modeline turned on for security reasons. To turn on that feature add the following in your $HOME/.vimrc or the system $VIM/vimrc:

set modeline

Solution 2 - Vim

You can use Vim's Session support:

:mksession

you can later load this by either running vim -S Session.vim, or using source Session.vim

There are also vim addons to automate session loading/saving

Solution 3 - Vim

Here's how you save all your current settings to a file:

:redir > textfile.txt 
:set all 
:redir END

If you like, just rename that file to ~/.vimrc and away you go.

Solution 4 - Vim

You can save your settings globally by editing your .vimrc file.

Vim also lets you save settings per file by using modelines

Solution 5 - Vim

You could maybe save the file as a particular type, e.g. special filename format or extension, and then define an autocommand in your .vimrc for that filetype.

I do this for my makefiles to ensure that I have the various settings I need for specific files.

For example, here's my autocommand dec.

if has("autocmd")
  autocmd BufRead,BufNewFile Makefile*	:set noexpandtab
  autocmd BufRead,BufNewFile mirror.conf	:set noexpandtab
  autocmd BufRead,BufNewFile *.html*	:set shiftwidth=2
  autocmd BufRead,BufNewFile diff_files	:set autowrite
  autocmd BufRead,BufNewFile lbnamed*	:set ft=perl
  autocmd BufRead,BufNewFile *.t    	:set ft=perl
endif

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondkretzView Question on Stackoverflow
Solution 1 - VimypnosView Answer on Stackoverflow
Solution 2 - VimHasturkunView Answer on Stackoverflow
Solution 3 - VimHarley HolcombeView Answer on Stackoverflow
Solution 4 - VimMatthewdView Answer on Stackoverflow
Solution 5 - VimRob WellsView Answer on Stackoverflow