#extends phd_pp_ru
#implements respond
#attr $Title = ".vimrc"
#attr $Copyright = 2003
#attr $First = "profile.html"
#attr $Prev = "procmailrc.html"
#attr $Next = "gvimrc.html"
#attr $Last = "pdbrc.py.html"
#attr $alternates = (("Plain text version", "text/plain", "vimrc"),)
#def body_html
#raw
"
" User configuration file for Vi IMproved
"
" Text version here
"
" Generated by gvim :runtime syntax/2html.vim
"
" A number of scripts mentioned in the file are available here.
"
" User configuration file for Vi IMproved.
"
" Requires vim 6.0, recommends 7.0+.
" 1 important
" No, it is not VI, it is VIM! It is important to set this first, because this
" command resets many other options.
set nocompatible
" Set behavior to xterm, not mswin
behave xterm
" 2 moving around, searching and patterns
set ignorecase " Ignore case in search patterns
set smartcase " Match 'word' case-insensitive and 'Word' case-sensitive
set nostartofline " Keep cursor's column
set whichwrap=b,s,h,l,<,>,[,],~ " Wrap to the previous/next line on all keys and ~ command
" 4 displaying text
set display=lastline,uhex " Show the last line instead of '@'; show non-printable chars as <hex>
set lazyredraw " Do not update screen while executing macros
set list " listchars only works with 'list'
set listchars=tab:>_,trail:_,extends:+ " Show tabs, trailing spaces, long lines
set wrap " Visually wrap long lines
" With 'set wrap' wrap long lines at a character in 'breakat'
" Please note 'nolist' is required to use 'linebreak'
set linebreak showbreak=+\
set sidescroll=1 " The minimal number of columns to scroll horizontally
" 5 syntax highlighting
set nohlsearch " Stop the search highlighting
syntax off
" 6 multiple windows
set hidden " Don't unload a buffer when no longer shown in a window; allow to switch between buffers/windows when the buffer was modified
set laststatus=2 " Always show status line
set splitbelow " A new window is put below of the current one
set splitright " A new window is put right of the current one
" 8 terminal
set ttyfast " terminal connection is fast
set title " Set title to the value of 'titlestring' or to 'filename - VIM'
set titleold= " string to restore the title to when exiting Vim
" 9 using the mouse
set mouse=ar " Use mouse in all modes, plus hit-return
" 12 messages and info
set ruler " Show cursor position below each window
set showcmd " Show (partial) command keys in the status line
" Short message for [Modified];
" overwrite message for writing a file with subsequent message;
" truncate long file messages
set shortmess=mot
" 14 editing text
set backspace=indent,eol,start
set complete+=k " Scan spell dictionaries for completion in addition to standard places
set infercase " adjust case of a keyword completion match
set nojoinspaces " Do not insert two spaces after a '.', '?' and '!' with a join command
set nrformats=hex " I seldom edit octal numbers, but very often dates like 2001-02-01
" Default value 'croql' is a compromise for both natural and programming
" languages, but as any compromise it works good for neither natural nor
" programming languages. This value is good for natural texts,
" let ftplugins to set values suitable for programming languages.
set formatoptions=2t " list of flags that tell how automatic formatting works
" 15 tabs and indenting
set expandtab " expand <Tab> to spaces in Insert mode
set shiftwidth=3 " number of spaces used for each step of (auto)indent
set smarttab " a <Tab> in an indent inserts 'shiftwidth' spaces
set softtabstop=3 " number of spaces to insert for a <Tab>
set noautoindent " Do not automatically set the indent of a new line
" 18 mapping
set timeout timeoutlen=3000 " allow timing out up to 3 seconds halfway into a mapping
" 21 command line editing
set history=1000 " how many command lines are remembered
set suffixes+=.pyc,.pyo " list of file name extensions that have a lower priority
set wildignore+=*.py[co] " Ignore these patterns when completing file names
set wildmenu " command-line completion shows a list of matches
set wildmode=longest,list:longest,full " Bash-vim completion behavior
" 22 executing external commands
if has("filterpipe")
set noshelltemp " Use pipes on Unix
endif
" 25 multi-byte characters
" Automatically detected character encodings
set fileencodings=ucs-bom,us-ascii,utf-8
if has("win32")
set fileencodings+=cp1251,cp866
else
set fileencodings+=koi8-r
endif
set fileencodings+=latin1
" 26 various
" c - convert viminfo to the current encoding; h - disable the effect of 'hlsearch';
" ' - number of files for which the marks are remembered;
" < - maximum number of lines saved for a register; s - maximum size of an item in Kbytes
set viminfo=c,h,'50,<1000,s10
" ----------
if has("gui_running")
set background=light
else
if (&term =~ "linux") || ($BACKGROUND == 'DARK') || ($BACKGROUND == 'dark')
" Set background to dark to have nicer syntax highlighting.
set background=dark
else
set background=light
endif
if (&term =~ "linux")
set <BS>=<7f>
else
highlight MoreMsg cterm=bold ctermfg=NONE
highlight Question cterm=bold ctermfg=NONE
endif
if (&term =~ "term") || (&term =~ "rxvt") || (&term =~ "vt100") || (&term == "screen")
set <BS>=<7f>
" 'autoselect' to always put selected text on the clipboard;
" 'unnamed' to use the * register like unnamed register '*'
" for all yank, delete and put operations;
" This allows to use mouse for copy/paste in local xterm,
" but prevents to save the unnamed register between sessions.
" set clipboard=autoselect,unnamed,exclude:cons\|linux
if has ("terminfo")
set t_Co=16
" set t_Co=256
else
set t_Co=8
set t_Sf=<Esc>[3%dm
set t_Sb=<Esc>[4%dm
endif
endif
if (&term == "screen")
set ttymouse=xterm " Enable mouse codes under GNU screen
endif
endif
highlight SpellBad cterm=NONE ctermfg=white ctermbg=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
" And of course, the ever important syntax highlighting
" This has to go last because of the if stuff above
syntax on
" Multiline comments often confuse vim syntax highlighting - these maps
" allow to resynchronize; the first is faster, the second is more complete
nmap ,sc :syntax sync clear<Enter>
nmap ,ss :syntax sync fromstart<Enter>
" AUTOCOMMANDS
" Enable filetype detection
filetype plugin indent on
" Reread me after editing
autocmd BufWritePost ~/.vimrc source ~/.vimrc
" Save all files before running any quickfix command (grep, makeprg, etc.)
autocmd QuickFixCmdPre * wall
" Setup encoding; used in filetype plugins
autocmd BufReadPre * let b:_encoding_set = 0
function! SetupEncoding(encoding)
if !has("iconv") || b:_encoding_set
return
endif
if strlen(a:encoding) > 0
let save_line = line("'\"")
let save_column = col("'\"")
let b:_goto_pos = 0
let b:_encoding_set = 1
execute "edit ++enc=" . a:encoding
call cursor(save_line, save_column)
endif
endfunction
" Restore cursor position?
" Default is True - restore the position.
" Can be set to False in SetupEncoding() below;
" it restores the position itself.
autocmd BufReadPre * let b:_goto_pos = 1
function! RestorePosition()
if b:_goto_pos
if line("'\"") > 0
if line("'\"") <= line("$")
execute "norm `\""
else
execute "norm $"
endif
endif
endif
endfunction
" When editing a file, always jump to the last cursor position (if saved)
autocmd BufReadPost * call RestorePosition()
" Text and mail options
autocmd BufNewFile,BufReadPost *.txt,*README*,/tmp/pico.*,~/tmp/mutt* setlocal textwidth=75
autocmd BufReadPost ~/tmp/*.txt setlocal textwidth=0
" For SpamCop
autocmd BufReadPre ~/tmp/mutt* nmap <Esc>z 9G3|,b
" http://lwn.net/Articles/226514/
augroup gpg
autocmd!
autocmd BufReadPre,FileReadPre *.gpg set viminfo=
autocmd BufReadPre,FileReadPre *.gpg setlocal noswapfile
autocmd BufReadPost *.gpg :%!gpg -q -d
autocmd BufReadPost *.gpg | redraw
autocmd BufWritePre *.gpg :%!gpg --default-recipient-self -q -e -a
autocmd BufWritePost *.gpg u
autocmd VimLeave *.gpg :!clear
" For OpenSSL:
" BufReadPost: use "openssl bf -d -a"
" BufWritePre: use "openssl bf -salt -a"
augroup END
function! SetWrap()
setlocal wrap
map <Up> gk
map <Down> gj
let b:wrap = 1
endfunction
function! SetNoWrap()
setlocal nowrap
map <Up> k
map <Down> j
let b:wrap = 0
endfunction
command! SetWrap call SetWrap()
command! SetNoWrap call SetNoWrap()
autocmd BufReadPost * if !exists("b:wrap") | call SetWrap() | endif
" MAPPINGS
" Do not unindent #-comment
inoremap # X<C-H>#
" map <C-A> <Home>
" map <C-E> <End>
" map <C-Z> :shell<CR>
" WEB BROWSERS
let s:URL_re="\\v(((https?|ftp|gopher|telnet)://|(mailto|file|news|about|ed2k|irc|sip|magnet):)[^' \t<>\"]+|(www|web|w3)[a-z0-9_-]*\\.[a-z0-9._-]+\\.[^' \t<>\"]+)[a-z0-9/]"
function! ExtractURL()
let line = getline('.')
let parts = split(line, s:URL_re . '\zs')
if len(parts) == 0
throw 'ExtractURLCannotFindURL' " No URL found
endif
let length = 0
let column = col('.')
for p in parts
let save_length = length
let length += len(p)
if length >= column
break
endif
endfor
let pos = match(p, s:URL_re)
if pos == -1
throw 'ExtractURLCannotFindURL' " No URL found
endif
if save_length + pos >= column " cursor left of the URL
throw 'ExtractURLCannotFindURL'
endif
return strpart(p, pos)
endfunction
function! CleanupURL(url)
let url = substitute(a:url, '[#%]', '\\&', 'g')
let url = substitute(url, ' ', '%20', 'g')
return url
endfunction
function! OpenURL(url, newwin)
execute "!webbrowser " . a:newwin . " '" . CleanupURL(a:url) . "'"
endfunction
function! ExtractOpenURL(newwin)
try
let url = ExtractURL()
catch /^ExtractURLCannotFindURL$/
echoerr 'No URL found under cursor'
return
endtry
call OpenURL(url, a:newwin)
endfunction
function! EncodeOpenURL(url, newwin)
execute "!webbrowser-encode-url " . a:newwin . " '" . CleanupURL(a:url) . "'"
endfunction
" Send current link to a browser
nmap ,b :call ExtractOpenURL('')<CR>
nmap ,w :call ExtractOpenURL('-n')<CR>
nmap ,t :call ExtractOpenURL('-t')<CR>
" Send visual block to a browser
vmap ,b ""y:call OpenURL('<C-R>"', '')<CR>
vmap ,w ""y:call OpenURL('<C-R>"', '-n')<CR>
vmap ,t ""y:call OpenURL('<C-R>"', '-t')<CR>
" Encode and send visual block to a browser
vmap ,B ""y:call EncodeOpenURL('<C-R>"', '')<CR>
vmap ,W ""y:call EncodeOpenURL('<C-R>"', '-n')<CR>
vmap ,T ""y:call EncodeOpenURL('<C-R>"', '-t')<CR>
" Send current file's name to a browser
nmap ,B :call EncodeOpenURL('file:' . expand("%:p"), '')<CR>
nmap ,W :call EncodeOpenURL('file:' . expand("%:p"), '-n')<CR>
nmap ,T :call EncodeOpenURL('file:' . expand("%:p"), '-t')<CR>
" SPELLING
if has("spell") " Works in 7.0+
" Use builtin spellchecker
nmap \sv :syntax off <BAR> setlocal spell<CR>
" Clear
nmap \sn :syntax on <BAR> setlocal nospell<CR>
endif
" Russian letters mapped in normal mode
"if has("keymap")
" set keymap=russian-jcuken
"endif
if has("langmap")
if v:version >= 702
" langmap in utf-8 mode requires at least Vim 7.2.109
scriptencoding utf-8
set langmap=Ñ<91>`Ð<81>~â<84><96>#йqÑ<86>wÑ<83>eкrеtнyгuÑ<88>iÑ<89>oзpÑ<85>[Ñ<8a>]Ñ<84>aÑ<8b>sвdаfпgÑ<80>hоjлkдlж\\;Ñ<8d>'
\Ñ<8f>zÑ<87>xÑ<81>cмvиbÑ<82>nÑ<8c>mб\\,Ñ<8e>.Ð<99>QЦWУEÐ<9a>RÐ<95>TÐ<9d>YÐ<93>UШIЩOÐ<97>PÐ¥{Ъ}
\ФAЫSÐ<92>DÐ<90>FÐ<9f>GÐ<a0>HÐ<9e>JÐ<9b>KÐ<94>LÐ<96>:Ð\\"ЯZЧXСCÐ<9c>VÐ<98>BТNЬMÐ<91><Ю>
elseif &encoding != 'utf-8'
scriptencoding koi8-r
set langmap=£`³~ÊqÃwÕeËrÅtÎyÇuÛiÝoÚpÈ[ß]ÆaÙs×dÁfÐgÒhÏjÌkÄlÖ\\;Ü'
\ÑzÞxÓcÍvÉbÔnØmÂ\\,À.êQãWõEëRåTîYçUûIýOúPè{ÿ}
\æAùS÷DáFðGòHïJìKäLö:ü\\"ñZþXóCíVéBôNøMâ<à>
endif
scriptencoding us-ascii
endif
function! W()
" let encodings=filter(split(&fileencodings, ','), 'v:val != "ucs-bom"')
if has("win32")
let encodings = ['us-ascii', 'cp1251', 'cp866', 'utf-8']
else
let encodings = ['us-ascii', 'koi8-r', 'utf-8']
endif
for e in encodings
try
execute 'set fileencoding=' . e
w
break
catch /E513: write error, conversion failed/
continue
endtry
endfor
if &modified
throw '"' . expand('%') . '" E513: write error, conversion failed; tried ' . join(encodings, ',')
else
if has("spell")
call SetupSpell()
endif
endif
endfunction
command! W call W()
function! SlowTerm()
set laststatus=1
set noruler
set shortmess=aoOtT
set noshowcmd
set scrolljump=5 " The minimal number of lines to scroll vertically when the cursor gets of the screen
set sidescroll=5
set nottyfast
set nowildmenu
set wildmode=list:longest
syntax off
highlight NonText cterm=NONE ctermfg=NONE
endfunction
if exists("$SLOWTERM")
call SlowTerm()
endif
if has("win32")
" Protect filename with double quotes
function! QuoteFilename(filename)
return '"' . a:filename . '"'
endfunction
else
" Protect filename with single quotes
function! QuoteFilename(filename)
return "'" . substitute(a:filename, "'", "'\"'\"'", "g") . "'"
endfunction
endif
" ----------
" From http://slobin.pp.ru/vim/_vimrc.html
" The <Tab> key jumps forth and back in normal mode
map <expr> <Tab> (virtcol(".") / &sts + 1) * &sts + 1 . "\|"
map <expr> <S-Tab> (virtcol(".") / &sts - 1) * &sts + 1 . "\|"
" Called automagically after every buffer read, enables fileencoding
" setting from modeline (see Tip #911)
function! AutoEncoding()
if exists("b:justloaded")
unlet b:justloaded
if &modified && &fileencoding != ""
call SetupEncoding(&fileencoding)
endif
endif
endfunction
" Magic autocommands installed here
autocmd BufReadPost * let b:justloaded = 1
autocmd BufWinEnter * call AutoEncoding()
if has("spell")
function! SetupSpell()
if &fileencoding =~ 'ascii'
setlocal spelllang=en spellfile=~/.vim/spell/en.ascii.add
elseif &fileencoding == 'koi8-r'
setlocal spelllang=en,ru spellfile=~/.vim/spell/en.ascii.add,~/.vim/spell/ru.koi8-r.add
elseif &fileencoding == 'utf-8'
setlocal spelllang=en,ru spellfile=~/.vim/spell/en.ascii.add,~/.vim/spell/ru.utf-8.add
else
setlocal spelllang= spellfile=
endif
endfunction
autocmd BufReadPost * call SetupSpell()
endif
if has("python")
python << END_OF_PYTHON
import vim, sys, rlcompleter, unicodedata
from itertools import *
vim_complete = rlcompleter.Completer().complete
def vim_comp_list():
"""Implementation of CompList() function"""
arglead = vim.eval("a:ArgLead")
fence = int(vim.eval("match(a:ArgLead, '\(\w\|\.\)*$')"))
left, right = arglead[:fence], arglead[fence:]
try:
completions = (vim_complete(right, i) for i in count())
candidates = list(takewhile(bool, completions))
except NameError:
candidates = []
suggestions = [left + x for x in candidates]
vim.command("return " + repr(suggestions))
def vim_calc(command):
"""Implementation of :Calc command"""
global _
try:
result = eval(command)
except SyntaxError:
exec command in globals()
else:
if result != None:
print result
_ = result
xx = ''.join('\\x%02x' % ord(x) for x in str(_))
vim.command('let @" = "%s"' % xx)
def vim_pydo(command):
"""Implementation of :Pydo command"""
codeobj = compile(command, "command", "eval")
line1 = vim.current.range.start
line2 = vim.current.range.end
delta = 0
for numz in range(line1, line2+1):
line = vim.current.buffer[numz-delta]
line = unicode(line)
num = numz + 1
words = line.split()
result = eval(codeobj, globals(), locals())
if result is None or result is False:
del vim.current.buffer[numz-delta]
delta += 1
continue
if isinstance(result, list) or isinstance(result, tuple):
result = " ".join(map(str, result))
else:
result = str(result)
vim.current.buffer[numz-delta] = result
def vim_unicode_name():
"""Helper function for <F11> key mapping"""
try:
char = vim.eval("matchstr(getline('.'), '.', col('.') - 1)")
print map(unicodedata.name, char.decode(vim.eval("&encoding")))
except (AttributeError, ValueError), target:
print "%s: %s" % (target.__class__.__name__, target.message)
END_OF_PYTHON
" Custom completion for python expressions
function! CompList(ArgLead, CmdLine, CursorPos)
python vim_comp_list()
endfunction
" Python command line calculator
command! -nargs=+ -range -complete=customlist,CompList Calc
\ <line1>,<line2> python vim_calc(<q-args>)
" Python text range filter
command! -nargs=+ -range -complete=customlist,CompList Pydo
\ <line1>,<line2> python vim_pydo(<q-args>)
" Display unicode name for the character under cursor
command! Uname python vim_unicode_name()
command! UName call Uname()
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
#end raw
#end def
$phd_pp_ru.respond(self)