X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=etc%2Fvim%2Fvimrc;h=0a658c1c5b2fc5b3147059c68df327dcaffba9fa;hb=71bdc48d190a5369fff28a97c828db7b1edf10a9;hp=3ec9b039c75922a0b83f048af6cfa432097b373d;hpb=031ad3ac7432514b0ddbf1c10c9f1a99ba21a335;p=grml-etc-core.git diff --git a/etc/vim/vimrc b/etc/vim/vimrc index 3ec9b03..0a658c1 100644 --- a/etc/vim/vimrc +++ b/etc/vim/vimrc @@ -3,7 +3,6 @@ " Authors: grml-team (grml.org), (c) Michael Prokop " Bug-Reports: see http://grml.org/bugs/ " License: This file is licensed under the GPL v2. -" Latest change: Fre Mär 09 15:33:45 CET 2007 [mika] """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " All system-wide defaults are set in $VIMRUNTIME/debian.vim (usually just @@ -17,90 +16,351 @@ " This line should not be removed as it ensures that various options are " properly set to work with the Vim-related packages available in Debian. - runtime! debian.vim +runtime! debian.vim -" Uncomment the next line to make Vim more Vi-compatible -" NOTE: debian.vim sets 'nocompatible', but only if debian.vim is available, -" so let's make sure we run in nocompatible mode: +" | Begin of defaults.vim related stuff { +" | +" | Comments starting with a bar ('|') are added by the Grml-Team +" | and the settings below override the default.vim configuration everything +" | else is copied from $VIMRUNTIME/defaults.vim. +" | +" | Do *not* source $VIMRUNTIME/defaults.vim (in case no user vimrc is found), +" | since that prevents overwriting values we want to set in this file, +" | instead we set settings similar to what can be found in default.vim below +" | +" | Only do this part when Vim was compiled with the +eval feature. +if 1 + let g:skip_defaults_vim=1 +endif + +" Use Vim settings, rather than Vi settings (much better!). +" This must be first, because it changes other options as a side effect. +" Avoid side effects when it was already reset. +if &compatible set nocompatible +endif -" Setting 'compatible' changes numerous -" options, so any other options should be set AFTER setting 'compatible'. -" set compatible +" When the +eval feature is missing, the set command above will be skipped. +" Use a trick to reset compatible only when the +eval feature is missing. +silent! while 0 + set nocompatible +silent! endwhile - set backspace=indent,eol,start " more powerful backspacing +" Allow backspacing over everything in insert mode. +set backspace=indent,eol,start -" Now we set some defaults for the editor - set autoindent " always set autoindenting on -" set linebreak " Don't wrap words by default - set textwidth=0 " Don't wrap lines by default - set nobackup " Don't keep a backup file - set backupcopy=no " grml: Overwrite files/links with w! -" set backupcopy=yes " Keep a backup file - set viminfo='20,\"50 " read/write a .viminfo file, don't store more than - " 50 lines of registers - set history=50 " keep 50 lines of command line history - set ruler " show the cursor position all the time +set history=200 " keep 200 lines of command line history +set ruler " show the cursor position all the time +set showcmd " display incomplete commands +set wildmenu " display completion matches in a status line -" Suffixes that get lower priority when doing tab completion for filenames. -" These are files we are not likely to want to edit or read. - set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc +set ttimeout " time out for key codes +set ttimeoutlen=100 " wait up to 100ms after Esc for special key + +" Show @@@ in the last line if it is truncated. +" | This features is only available in later versions +if has("patch-7.4.2115") + set display=truncate +endif + +" Show a few lines of context around the cursor. Note that this makes the +" text scroll if you mouse-click near the start or end of the window. +set scrolloff=5 + +" Do incremental searching when it's possible to timeout. +if has('reltime') + set incsearch +endif + +" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it +" confusing. +set nrformats-=octal + +" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries. +if has('win32') + set guioptions-=t +endif + +" Don't use Ex mode, use Q for formatting. +" Revert with ":unmap Q". +map Q gq + +" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, +" so that you can undo CTRL-U after inserting a line break. +" Revert with ":iunmap ". +inoremap u + +" In many terminal emulators the mouse works just fine. By enabling it you +" can position the cursor, Visually select and scroll with the mouse. +" +" | We prefer to disable the mouse usage though and use what we're used +" | from older Vim versions. +" | +" | if has('mouse') +" | set mouse=a +" | endif +if has('mouse') + set mouse= +endif + +" Switch syntax highlighting on when the terminal has colors or when using the +" GUI (which always has colors). +if &t_Co > 2 || has("gui_running") + " Revert with ":syntax off". + syntax on + + " I like highlighting strings inside C comments. + " Revert with ":unlet c_comment_strings". + let c_comment_strings=1 +endif + +" Only do this part when Vim was compiled with the +eval feature. +if 1 + + " Enable file type detection. + " Use the default filetype settings, so that mail gets 'tw' set to 72, + " 'cindent' is on in C files, etc. + " Also load indent files, to automatically do language-dependent indenting. + " Revert with ":filetype off". + filetype plugin indent on + + " Put these in an autocmd group, so that you can revert them with: + " ":augroup vimStartup | au! | augroup END" + augroup vimStartup + au! + + " When editing a file, always jump to the last known cursor position. + " Don't do it when the position is invalid, when inside an event handler + " (happens when dropping a file on gvim) and for a commit message (it's + " likely a different one than last time). + autocmd BufReadPost * + \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' + \ | exe "normal! g`\"" + \ | endif + + augroup END + +endif + +" Convenient command to see the difference between the current buffer and the +" file it was loaded from, thus the changes you made. +" Only define it when not defined already. +" Revert with: ":delcommand DiffOrig". +if !exists(":DiffOrig") + command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis + \ | wincmd p | diffthis +endif + +if has('langmap') && exists('+langremap') + " Prevent that the langmap option applies to characters that result from a + " mapping. If set (default), this may break plugins (but it's backward + " compatible). + set nolangremap +endif + +" | End of defaults.vim related stuff } -" Make p in Visual mode replace the selected text with the "" register. - vnoremap p :let current_reg = @"gvdi=current_reg +" Begin of custom Grml configuration { +" The Grml-Team believes that the options and configuration values which override +" the Vim defaults are useful and helpful for our users. +" +" A lot of options are Grml defaults since the very start and we cleaned up as +" much as possible but if you do not like any of these settings feel free to +" change them back in your user vimrc or file a bug and tell us to change the +" default. +" +" The idea behind commented out options and configuration values is to show +" you interesting settings you should know about but we did not set them by +" default because they might have to much of an impact for everyone. +" +" If a commented option precedes an option set by us it usually shows the +" Vim default. -" Vim5 and later versions support syntax highlighting. -" Just load the main syntax file when Vim was compiled with "+syntax". - if has("syntax") - syntax on + set autoindent " always set autoindenting on + set dictionary=/usr/share/dict/words " used with CTRL-X CTRL-K + set esckeys " recognize keys that start with in insert mode + set formatoptions=cqrt " list of flags that tell how automatic formatting works + set laststatus=2 " when to use a status line for the last window + set nobackup " don't keep a backup file + set noerrorbells " don't ring the bell (beep or screen flash) for error messages + set nostartofline " keep cursor in the same column (if possible) when moving cursor + set pastetoggle= " don't change text when copy/pasting + set shortmess=at " list of flags to make messages shorter + set showmatch " show matching brackets. + set textwidth=0 " don't wrap lines by default + set viminfo=%,'100,<100,s10,h " what to store in .viminfo file + set visualbell " use a visual bell instead of beeping + set whichwrap=<,>,h,l " list of flags specifying which commands wrap to another line + +" set expandtab " Use appropriate number of spaces to insert a +" set linebreak " Don't wrap words by default + set ignorecase " Do case insensitive matching + set smartcase " Do smart case matching +" set autowrite " Automatically save before commands like :next and :make +" set nodigraph " enter characters that normally cannot be entered by an ordinary keyboard + +" list of strings used for list mode +" set list listchars=eol:$ + if (&encoding =~ 'utf-8') + set listchars=eol:$,precedes:«,extends:»,tab:»·,trail:· + else + set listchars=eol:$ endif -" Debian uses compressed helpfiles. We must inform vim that the main -" helpfiles is compressed. Other helpfiles are stated in the tags-file. -" set helpfile=$VIMRUNTIME/doc/help.txt.gz +" list of file names to search for tags +" set tags=./tags,tags + set tags=./tags,./TAGS,tags,TAGS,../tags,../../tags,../../../tags,../../../../tags -" If using a dark background within the editing area and syntax highlighting -" turn on this option as well - set background=dark +" When switching between different buffers you can't use undo without 'set hidden': + set hidden " Hide buffers when they are abandoned -" begin of grml specials: -" set list listchars=tab:»· -" set listchars=eol:$,precedes:«,extends:»,tab:··,trail:· -" end of grml specials +" Suffixes that get lower priority when doing tab completion for filenames. +" These are files we are not likely to want to edit or read. +" set suffixes=.bak,~,.o,.h,.info,.swp,.obj + set suffixes=.bak,~,.o,.h,.info,.swp,.obj,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc -" Uncomment the following to have Vim jump to the last position when -" reopening a file -" if has("autocmd") -" au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$") -" \| exe "normal g'\"" | endif -" endif +" set the screen hardstatus to vim(filename.ext) + if ((&term =~ '^screen') && ($VIM_PLEASE_SET_TITLE =~ '^yes$') || has('gui_running')) + set t_ts=k + set t_fs=\ + set title + if has("autocmd") + autocmd BufEnter * let &titlestring = "vim(" . expand("%:t") . ")" + endif + let &titleold = fnamemodify(&shell, ":t") + endif -" Uncomment the following to have Vim load indentation rules according to the -" detected filetype. Per default Debian Vim only load filetype specific -" plugins. +" autocommands: if has("autocmd") - filetype indent on + " when the file type is "mail" then set the textwidth to "70": + autocmd FileType mail set tw=70 endif -" The following are commented out as they cause vim to behave a lot -" differently from regular Vi. They are highly recommended though. - set showcmd " Show (partial) command in status line. - set showmatch " Show matching brackets. -" set ignorecase " Do case insensitive matching -" set smartcase " Do smart case matching -" set incsearch " Incremental search -" set autowrite " Automatically save before commands like :next and :make -" When switching between different buffers you can't use undo without 'set hidden': - set hidden " Hide buffers when they are abandoned -" set mouse=a " Enable mouse usage (all modes) in terminals - set wildmenu " command-line completion operates in an enhanced mode +" some useful mappings: + +" remove/delete trailing whitespace: + nmap ;tr :%s/\s\+$// + vmap ;tr :s/\s\+$// + +" execute the command in the current line (minus the first word, which +" is intended to be a shell prompt) and insert the output in the buffer + map ,e ^wy$:r!" + +" update timestamp + iab YDATE =strftime("%a %b %d %T %Z %Y") + map ,L 1G/Latest change:\s*/e+1CYDATE + +" Vim 7 brings cool new features - see ':he version7'! +" The coolest features of Vim7 by mika +" ==================================== +" 1) omni/intellisense completion: use CTRL-X CTRL-O in insert mode to start it [:he compl-omni] +" 2) internal grep: vimgrep foo bar [:he vimgrep] +" 3) tab pages: vim -p file1 file2 - then use the :tab command [:he tabpage] +" gt -> next tab +" gT -> previous tab +" 4) undo branches: :undolist / :earlier 2h / :later 2h +" instead of using u (undo) and CTRL-R (redo), you might experiment with g- +" and g+ to move through the text state [:he undolist] +" 5) browse remote directories via scp using netrw plugin: :edit scp://host//path/to/ [:he netrw.vim] +" 6) start editing the filename under the cursor and jump to the line +" number following the file name: press gF [:he gF] +" 7) press 'CTRL-W F' to start editing the filename under the cursor in a new +" window and jump to the line number following the file name. [:he CTRL-W_F] +" 8) spelling correction (see later for its configuration) [:he spell]: +" ]s -> Move to next misspelled word after the cursor. +" zg -> Add word under the cursor as a good word to the first name in 'spellfile' +" zw -> Like "zg" but mark the word as a wrong (bad) word. +" z= -> For the word under/after the cursor suggest correctly spelled words. +" 9) highlight active cursor line using 'set cursorline' [:he cursorline] +" 10) delete inner quotes inside HTML-code using cit (see its mapping later) [:he tag-blocks] +" +if version >= 700 + " Thanks for some ideas to Christian 'strcat' Schneider and Julius Plenz + " turn spelling on by default: + " set spell + " toggle spelling with F12 key: + map :set spell!:echo "Spell Check: " . strpart("OffOn", 3 * &spell, 3) + set spellfile=~/.vim/spellfile.add + " change language - get spell files from http://ftp.vim.org/pub/vim/runtime/spell/ => + " cd ~/.vim/spell && wget http://ftp.vim.org/pub/vim/runtime/spell/de.{latin1,utf-8}.spl + " change to german: + " set spelllang=de + " highlight spelling correction: + " highlight SpellBad term=reverse ctermbg=12 gui=undercurl guisp=Red " badly spelled word + " highlight SpellCap term=reverse ctermbg=9 gui=undercurl guisp=Blue " word with wrong caps + " highlight SpellRare term=reverse ctermbg=13 gui=undercurl guisp=Magenta " rare word + " highlight SpellLocale term=underline ctermbg=11 gui=undercurl guisp=DarkCyan " word only exists in other region - set pastetoggle= " don't change text when copy/pasting - set dictionary=/usr/share/dict/word " used with CTRL-X CTRL-K + " set maximum number of suggestions listed top 10 items: + set spellsuggest=best,10 + + " highlight matching parens: + " set matchpairs=(:),[:],{:},< :> + " let loaded_matchparen = 1 + " highlight MatchParen term=reverse ctermbg=7 guibg=cornsilk + + " highlight the cursor line and column: + " set cursorline + " highlight CursorLine term=reverse ctermbg=7 guibg=#333333 + " highlight CursorColumn guibg=#333333 + + " change inner tag - very useful e.g. within HTML-code! + " ci" will remove the text between quotes, also works for ' and ` + imap cit + + " use the popup menu also when there is only one match: + " set completeopt=menuone + " determine the maximum number of items to show in the popup menu for: + set pumheight=7 + " set completion highlighting: + " highlight Pmenu ctermbg=13 guifg=Black guibg=#BDDFFF " normal item + " highlight PmenuSel ctermbg=7 guifg=Black guibg=Orange " selected item + " highlight PmenuSbar ctermbg=7 guifg=#CCCCCC guibg=#CCCCCC " scrollbar + " highlight PmenuThumb cterm=reverse gui=reverse guifg=Black guibg=#AAAAAA " thumb of the scrollbar +endif + +" To enable persistent undo uncomment following section. +" The undo files will be stored in $HOME/.cache/vim + +" if version >= 703 +" " enable persistent-undo +" set undofile +" +" " store the persistent undo file in ~/.cache/vim +" set undodir=~/.cache/vim/ +" +" " create undodir directory if possible and does not exist yet +" let targetdir=$HOME . "/.cache/vim" +" if isdirectory(targetdir) != 1 && getftype(targetdir) == "" && exists("*mkdir") +" call mkdir(targetdir, "p", 0700) +" endif +" endif " Source a global configuration file if available -" Deprecated by Debian but still supported by grml if filereadable("/etc/vim/vimrc.local") source /etc/vim/vimrc.local endif -" EOF + +" source user-specific local configuration file +" +" NOTE: If this vimrc file is used as system vimrc the initialization of Vim looks like this: +" +" `system-vimrc (this file) + /etc/vim/vimrc.local + $HOME/.vimrc.local -> user-vimrc` +" +" This means that user-vimrc overrides the settings set in `$HOME/.vimrc.local`. +" +" If this file is used as user-vimrc the initialization of Vim looks like this +" +" `system-vimrc + /etc/vim/vimrc.local -> user-vimrc (this file) + /etc/vim/vimrc.local + $HOME/.vimrc.local` +" +" This means that `/etc/vim/vimrc.local` + `$HOME/.vimrc.local` overrides the +" settings set in the user-vimrc (and `/etc/vim/vimrc.local` is sourced twice). +" +" Either way, this might or might not be something a user would expect. + if filereadable(expand("$HOME/.vimrc.local")) + source $HOME/.vimrc.local + endif + +" End of custom Grml configuration } + +"# END OF FILE #################################################################