X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=vimrc;h=c9726f2bbcfc6e85b5e19bded501f4b55a350713;hb=dce50a55e017a8b4af94e3a5d97d12dce38da551;hp=e268673748a764a24cb91eaaf6ff540066ef2e56;hpb=4ea4a534a42b4ea3407bfe541a42521c6d0301fa;p=config%2Fdotfiles.git diff --git a/vimrc b/vimrc index e268673..c9726f2 100644 --- a/vimrc +++ b/vimrc @@ -1,6 +1,6 @@ " Vim main configuration file. -" Copyright (C) 2008-2013 Simon Ruderich +" Copyright (C) 2008-2016 Simon Ruderich " " This file is free software: you can redistribute it and/or modify " it under the terms of the GNU General Public License as published by @@ -41,6 +41,16 @@ endif " Make sure Vim (and not Vi) settings are used. set nocompatible +" Disallow :autocmd, shell and write commands in .vimrc and .exrc files in the +" current directory. Only used if 'exrc' is enabled (off by default), +" precaution just in case somebody enables 'exrc'. +set secure + +" Try to use pipes instead of temporary files. Prevents some auto commands +" from running for temporary files but also prevents the file's content to be +" written to disk. +set noshelltemp + " Use UTF-8 for all internal data (buffers, registers, etc.). This doesn't " affect reading files in different encodings, see 'fileencodings' for that. set encoding=utf-8 @@ -57,6 +67,8 @@ if filewritable('~/.tmp') == 2 || filewritable('~/tmp') == 2 endif " But store them in ~/.tmp or ~/tmp (already set by default) if available. set directory^=~/.tmp +" Never use /tmp which gets cleaned on reboot. +set directory-=/tmp " Disable modelines as they may cause security problems. Instead use " securemodelines (Vim script #1876). @@ -159,7 +171,8 @@ endif " existing files. set fileencodings=utf-8,latin1 -" Always use unix line-endings for new files. +" Always use unix line-endings for new files. DOS line endings in existing +" files are recognized. set fileformats=unix,dos " Wrap text after 78 characters. @@ -258,7 +271,7 @@ set number if exists('+numberwidth') set numberwidth=1 endif -" Display the ruler with current line/file position. If 'statusline' is used +" Display the ruler with current line/file position. If 'statusline' is used, " then this only affects . set ruler " Display partial commands in the status line. @@ -449,10 +462,10 @@ if has('statusline') set statusline+=: if has('modify_fname') && v:version >= 700 " some functions need 7.0 set statusline+=%{SRF()} " path to current file - set statusline+=\ " space after path else - set statusline+=%f\ " path to current file in buffer + set statusline+=%f " path to current file in buffer endif + set statusline+=\ " space after path set statusline+=%h " [help] if buffer is help file set statusline+=%w " [Preview] if buffer is preview buffer set statusline+=%m " [+] if buffer was modified, @@ -488,6 +501,13 @@ inoremap jk " Also for command mode, thanks to http://github.com/mitechie/pyvim " (2010-10-15). cnoremap jk +" And fix my typos ... +inoremap JK +inoremap Jk +inoremap jK +cnoremap JK +cnoremap Jk +cnoremap jK " Disable arrow keys for all modes except command modes. Thanks to James Vega " (http://git.jamessan.com/?p=etc/vim.git;a=summary). @@ -511,6 +531,11 @@ cmap cnoremap cnoremap +" Use :tjump to lookup tags (instead of :tag) which lists all available tags +" if there's more than one match. This is really helpful in larger projects +" where tags may occur multiple times. +nnoremap g + if has('eval') " Don't move the cursor to the first column for certain scroll commands (, , ). Thanks to jamessan in #vim on Freenode (2011-08-31 @@ -538,6 +563,10 @@ if has('eval') \ :call TemporaryNostartofline("C-U>") endif +" Let Y yank to the end of the line, similar to D and C. Use yy if you want to +" yank a line. This fixes a weird inconsistency in Vi(m). +nnoremap Y y$ + " Write before suspending, thanks to deryni in #vim on Freenode (2011-05-09 " 20:02 CEST). To suspend without saving either unmap this or use :stop. " Only the current buffer is written, thus switching to another buffer works @@ -597,6 +626,21 @@ nnoremap 8 :8buffer nnoremap 9 :9buffer nnoremap 0 :10buffer +" Use real tabs instead of soft tabs. +if has('eval') +" Switch from soft tabs to real tabs. + function! s:UseTabs() + setlocal noexpandtab shiftwidth=8 softtabstop=8 + endfunction + nnoremap t :call UseTabs() +endif +" Enable "verbatim" mode. Used to view files with long lines or without syntax +" coloring. 'list' is not changed, see next mapping. +nnoremap v :setlocal nowrap nospell synmaxcol=0 + \ :2match +" Toggle 'list'. +nnoremap l :set invlist + " Make last active window the only window. Similar to o. nnoremap O po @@ -613,11 +657,6 @@ else nmap sd endif -" Add semicolon to the end of the line. Thanks to -" http://www.van-laarhoven.org/vim/.vimrc for this idea and godlygeek in #vim -" on Freenode for an improved version which doesn't clobber any marks. -nnoremap ; :call setline(line('.'), getline('.') . ';') - if has('eval') " * and # for selections in visual mode. Thanks to " http://got-ravings.blogspot.com/2008/07/vim-pr0n-visual-search-mappings.html @@ -746,7 +785,11 @@ inoreabbrev completly completely " Activate syntax coloring. if has('syntax') - syntax enable + " But only if it wasn't already active. Prevents breaking the syntax + " coloring when reloading the vimrc. Thanks to johnLate for the idea. + if !exists('g:syntax_on') + syntax enable + endif " Don't highlight more than 500 columns as I normally don't have that long " lines and they slow down syntax coloring. Thanks to Derek Wyatt @@ -792,9 +835,9 @@ if has('syntax') if exists('*matchadd') " Highlight some important keywords in all documents. - let l:todos = ['TODO', 'XXX', 'FIXME', + let l:todos = ['TODO', 'XXX', 'FIXME', 'NOTE', \ 'CHANGED', 'REMOVED', 'DELETED'] - " Compatibility fix for Vim 6.4 which can't handle for in function + " Compatibility fix for Vim 6.4 which can't parse for in functions " (without function it's ignored). execute ' for l:x in l:todos' \ '| call matchadd("Todo", l:x)' @@ -831,32 +874,32 @@ if has('syntax') " C let g:c_no_if0_fold = 1 " fix weird double fold in #if0 in recent versions - " Haskell. + " Haskell let g:hs_highlight_delimiters = 1 let g:hs_highlight_boolean = 1 let g:hs_highlight_types = 1 let g:hs_highlight_more_types = 1 - " Java. + " Java let g:java_highlight_java_lang_ids = 1 " color java.lang.* identifiers - " Perl. + " Perl let g:perl_fold = 1 let g:perl_fold_blocks = 1 let g:perl_nofold_packages = 1 let g:perl_include_pod = 1 " syntax coloring for PODs - " PHP. + " PHP let g:php_folding = 3 " fold functions let g:php_short_tags = 0 " no short tags (), not always usable let g:php_sql_query = 1 " highlight SQL queries in strings - " Python. + " Python let g:python_highlight_all = 1 - " Shell. + " Shell let g:sh_noisk = 1 " don't add . to 'iskeyword' let g:sh_is_posix = 1 " POSIX shell (e.g. dash) is compatible enough let g:sh_fold_enabled = 7 " functions (1), heredoc (2) and if/do/for (4) - " Vim. + " Vim let g:vimsyn_embed = 0 " don't highlight embedded languages let g:vimsyn_folding = 'af' " folding for autogroups (a) and functions (f) - " XML. + " XML let g:xml_syntax_folding = 1 endif @@ -931,7 +974,7 @@ endif " AUTO COMMANDS " Use a custom auto group to prevent problems when the vimrc files is sourced -" twice. +" multiple times. if has('autocmd') augroup vimrc @@ -979,16 +1022,17 @@ if has('autocmd') endif " Display a warning when editing a file which contains "do not edit" (ignoring -" the case) in the first lines of the file, for example template files which -" were preprocessed or auto-generated files. Especially useful when the header -" is not displayed on the first screen, e.g. when the old position is -" restored. +" the case) and similar messages in the first lines of the file, for example +" template files which were preprocessed or auto-generated files. Especially +" useful when the header is not displayed on the first screen, e.g. when the +" old position is restored. function! s:SearchForDoNotEditHeader() " Only search the first 20 lines to prevent false positives, e.g. " in scripts which write files containing this warning and ignore " the case (\c). (Can't use search()'s {stopline} as we might not " start searching from the top.) - let l:match = search('\cdo not edit', 'n') + let l:search = '\c\(do not \(edit\|modify\)\|autogenerated by\)' + let l:match = search(l:search, 'n') if l:match == 0 || l:match > 20 return endif @@ -1013,8 +1057,7 @@ if has('autocmd') autocmd FileType gitcommit let g:secure_modelines_allowed_items = [] | \ setlocal textwidth=72 " Fix 'include' setting for shell files to recognize '.' and 'source' -" commands. Use &l:include instead of setlocal which requires excessive -" escaping of \. +" commands. autocmd FileType sh let &l:include = '^\s*\(\.\|source\)\s\+' " Use the same comment string as for Vim files in Vimperator files. autocmd FileType vimperator setlocal commentstring=\"%s