" 5 highlighting
+colorscheme phd
set nohlsearch " Stop the search highlighting
" 6 multiple windows
set title " Set title to the value of 'titlestring' or to 'filename - VIM'
set titleold= " string to restore the title to when exiting Vim
+" String to use for the Vim window title; with statusline printf items:
+" display filename, modification flag, full path, argument list status,
+" the current user, host and program name (to distinguish vim/view/etc).
+set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:p:h\")})%)%(\ %a%)\ -\ [%{$USER}@%{hostname()}]\ %{v:progname}
" 9 using the mouse
" 18 mapping
-set timeout timeoutlen=3000 " allow timing out up to 3 seconds halfway into a mapping
+set timeout timeoutlen=3000 ttimeoutlen=100 " allow timing out up to 3 seconds halfway into a mapping; 100 ms to wait for a key code or mapped key sequence to complete
+
+" 19 reading and writing files
+if v:version >= 703
+ set cryptmethod=blowfish " encryption method for file writing: zip or blowfish
+endif
+
+" 20 the swap file
+
+let myUndoDir = expand('~/tmp/vim/undo')
+if !isdirectory(myUndoDir)
+ " Create dirs
+ call mkdir(myUndoDir, 'p')
+endif
+
+" list of directories for the swap file; remove . (the current directory)
+if has("win32")
+ set directory=~/tmp/vim//,$TEMP//,c:/tmp//,c:/temp//
+else
+ set directory=~/tmp/vim//,~/tmp//,/var/tmp//,/tmp//
+endif
+" if a directory ends in two path separators "//"
+" or "\\", the swap file name will be built from the complete path to
+" the file with all path separators substituted to percent '%' signs.
+" This will ensure file name uniqueness in the preserve directory.
" 21 command line editing
set wildmenu " command-line completion shows a list of matches
set wildmode=longest,list:longest,full " Bash-vim completion behavior
+" Keep undo history across sessions by storing it in a file
+if has('persistent_undo')
+ let &undodir = myUndoDir
+ set undofile
+endif
+
" 22 executing external commands
if has("filterpipe")
set toolbar=icons,text " how to show the toolbar
endif
- " set guicursor+=a:blinkon0 " Stop cursor blinking
+ set guicursor+=a:blinkon0 " Stop cursor blinking
" Make shift-insert work like in Xterm
" map <S-Insert> <MiddleMouse>
" map! <S-Insert> <MiddleMouse>
-
- " Set nice colors
- " Background for normal text is light grey
- " Cursor is green
- " Text below the last line is darker grey
- " Status line is bright white on blue
- highlight Normal guibg=grey90
- highlight Cursor guibg=green guifg=NONE
- highlight NonText guibg=grey80
- highlight Constant guibg=grey90
- highlight Special gui=NONE guibg=grey90
- highlight StatusLine gui=bold guifg=white guibg=blue
-
" ----------
" From http://slobin.pp.ru/vim/_vimrc.html
" The <CR> key should select from completion menu without adding a newline
imap <expr> <CR> pumvisible() ? "<C-Y>" : "<CR>"
" ----------
-else
+else
if (&term =~ "linux") || ($BACKGROUND == 'DARK') || ($BACKGROUND == 'dark')
\ || has("win32")
" Background of the terminal is black or dark grey
endif
if (&term =~ "linux")
- set <BS>=\7f
- else
- highlight MoreMsg cterm=bold ctermfg=NONE
- highlight Question cterm=bold ctermfg=NONE
+ execute 'set t_kb=' . nr2char(127)
endif
if (&term =~ "rxvt") || (&term =~ "screen") || (&term =~ "term") || (&term =~ "vt100")
- set <BS>=\7f
+ execute 'set t_kb=' . nr2char(127)
" 'autoselect' to always put selected text on the clipboard;
" 'unnamed' to use the * register like unnamed register '*'
endif
if (&term =~ "screen")
- set ttymouse=xterm " Enable mouse codes under GNU screen
+ set ttymouse=xterm2 " Enable mouse codes under screen/tmux
if empty(&t_ts)
" Enable window title under screen/tmux
let &t_ts = "\e]2;"
let &t_fs = "\007"
endif
endif
-endif
-highlight SpellBad term=underline cterm=NONE ctermfg=white ctermbg=red guifg=white guibg=red " gui=undercurl guisp=red
-highlight StatusLine cterm=bold ctermfg=white ctermbg=blue gui=NONE guifg=white guibg=blue
-highlight Visual cterm=NONE ctermfg=white ctermbg=blue gui=NONE guifg=white guibg=blue " Selection highlighting
+ " Automatically set paste mode in Vim when pasting in bracketed paste mode
+ " https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode
+ function! WrapForTmux(s)
+ if !exists('$TMUX')
+ return a:s
+ endif
+
+ let tmux_start = "\<Esc>Ptmux;"
+ let tmux_end = "\<Esc>\\"
+
+ return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
+ endfunction
+
+ let &t_SI .= WrapForTmux("\<Esc>[?2004h")
+ let &t_EI .= WrapForTmux("\<Esc>[?2004l")
+
+ function! XTermPasteBegin()
+ set pastetoggle=<Esc>[201~
+ set paste
+ return ""
+ endfunction
+
+ inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()
+endif
" Multiline comments often confuse vim syntax highlighting - these maps
" allow to resynchronize; the first is faster, the second is more thorough
" Enable filetype detection
filetype plugin indent on
+runtime macros/matchit.vim
+
" Reread me after editing
autocmd BufWritePost ~/.vimrc source ~/.vimrc | syntax on
if version >= 700
" Save all files before running any quickfix command (grep, makeprg, etc.)
autocmd QuickFixCmdPre * wall
+" automatically close quickfix if it's the only window left
+autocmd WinEnter * if winnr('$') == 1 && &buftype == "quickfix" | quit | endif
endif
" Syntax highlighting
" Restore last known cursor position
function! RestorePosition()
- if exists('b:position_resored')
+ if exists('b:position_restored')
return
endif
if line("'\"") > 0
call cursor(line("'\""), col("'\""))
endif
- let b:position_resored = 1
+ let b:position_restored = 1
endfunction
" When editing a file, always jump to the last cursor position (if saved)
function! SetupEncoding(encoding)
- if !has("iconv") || exists('b:encoding_set')
+ if !has("iconv") || exists('b:encoding_set') || strlen(a:encoding) == 0
return
endif
- if strlen(a:encoding) > 0
- call RestorePosition()
- let b:encoding_set = 1
- execute "edit ++enc=" . a:encoding
- endif
+ call RestorePosition()
+ let b:encoding_set = 1
+ execute "edit ++enc=" . a:encoding
endfunction
function! W()
" let encodings=filter(split(&fileencodings, ','), 'v:val != "ucs-bom"')
let encodings = ['us-ascii']
- if $LC_CTYPE == 'ru_RU.UTF-8'
+ if $LC_CTYPE =~ 'UTF-8' " UTF-8 or en_US.UTF-8 or ru_RU.UTF-8 or such
let encodings += ['utf-8']
elseif $LC_CTYPE == 'ru_RU.KOI8-R'
let encodings += ['koi8-r', 'utf-8']
endif
+if has("python")
+python << END_OF_PYTHON
+import sys, os
+
+virtualenv_dir = os.environ.get('VIRTUAL_ENV')
+if virtualenv_dir:
+ sys.path.insert(0, virtualenv_dir)
+ activate_this = os.path.join(virtualenv_dir, 'bin', 'activate_this.py')
+ execfile(activate_this, dict(__file__=activate_this))
+END_OF_PYTHON
+endif
+
+
" ----------
" From http://slobin.pp.ru/vim/_vimrc.html
" Called automagically after every buffer read, enables fileencoding
-" setting from modeline (see Tip #911)
+" setting from modeline (see Tip #911: http://vim.wikia.com/wiki/VimTip911)
function! AutoEncoding()
- if exists("b:justloaded")
- unlet b:justloaded
- if &modified && &fileencoding != ""
- call SetupEncoding(&fileencoding)
- endif
+ if &modified && &fileencoding != ""
+ call SetupEncoding(&fileencoding)
+ else
+ redraw
endif
+ autocmd! auto-encoding
+ augroup! auto-encoding
endfunction
-" Magic autocommands installed here
-autocmd BufReadPost * let b:justloaded = 1
+augroup auto-encoding
+autocmd!
autocmd BufWinEnter * call AutoEncoding()
+augroup END
let CONVERT=1
endif
" ----------
-
" This has to go to the very end of ~/.vimrc to allow reading the .vimrc
set secure " safer working with script files in the current directory