четверг, 5 ноября 2009 г.

Мой vimrc


Решил выложить свои настройки vim'а, возможно кому то будет интересно.

Примечание: данный конфиг не является актуальным,  свежий можете посмотреть здесь.




" ==============================================================================
" vim: fdm=marker fdc=2 foldlevelstart=0 sts=4 sw=4 tw=64 fileencoding=utf-8:
" Файл пользовательских настроек vim (7.3)
" Maintrainer: clericJ

"Text/Code Navigation
"    F1  Help
"    F2  Code Explorer
"    F3  Find Next
"    F4  

"Explore Buffers and Files
"    F5  Execute buffer
"    F6  Buffer Explorer
"    F7  List of Files in Directory
"    F8  File Explorer

"Manipulate Windows and Buffers
"    F9  Restore Last Session
"    F10 Toggle Fullscreen
"    F11 Close Current Window
"    F12 Delete Current Buffer

" ==============================================================================
" Установленные плагины и их зависимости {{{1
" "taglist"           просмотр списка тегов/навигатор по коду
" ( http://www.vim.org/scripts/script.php?script_id=273 )
"   util: ctags.exe
"
" "themes"
" дополнительные темы
"
" "matrix"
" для входа в матрицу ввести команду :Matrix
" ( http://www.vim.org/scripts/script.php?script_id=1189 )
"
" "fencview"
" работа с кодировками/авто-определение кодировок
" ( http://www.vim.org/scripts/script.php?script_id=1708 )
"   util: iconv.dll
"
" "NERD_commenter"
" работа с комментариями в коде
" ( http://www.vim.org/scripts/script.php?script_id=1218 )
"
" "NERD_Tree"
" просмотр файловой системы
" ( http://www.vim.org/scripts/script.php?script_id=1658 )
"
" "matchit"
" расширенная команда % для HTML, LaTX, ...
" ( http://www.vim.org/scripts/script.php?script_id=39 )
"
" "mru"
" показ последних открытых файлов
" ( http://www.vim.org/scripts/script.php?script_id=521 )
"
" "sessionman"
" удобное управление сессиями
" ( http://www.vim.org/scripts/script.php?script_id=2010 )
"
" "pyflakes"
" подсветка ошибок в коде на python на 'лету'
" ( http://www.vim.org/scripts/script.php?script_id=2441 )
" requires: python+
"
" "calendar"
" удобный календарь
" ( http://www.vim.org/scripts/script.php?script_id=52 )
"
" "fuzzyfinder"
" быстрый доступ к многим возможностям
" ( http://www.vim.org/scripts/script.php?script_id=1984 )
"
" "neocomplcache"
" улучшенное авто-завершение,
" авто-открытие списка авто-завершения, TextMate-like сниппеты
" ( http://www.vim.org/scripts/script.php?script_id=2620 )
"   util: ctags.exe 
"
" "ropevim"
" утилита для рефакторинга кода на python
" так-же включающая функции Code assist
" ( http://rope.sourceforge.net/ropevim.html )
" requires: python+
"
" "vcscommand"
" интеграция с системами контроля версий
" ( http://www.vim.org/scripts/script.php?script_id=90 )
"
" "css_color"
" Предпросмотр цветов в css файлах
" ( http://www.vim.org/scripts/script.php?script_id=2150 )
"
" "Mark"
" Подсветка всех слов в файле, которые совпадают с словом под курсором
" ( http://www.vim.org/scripts/script.php?script_id=2666 )
"
" "visualmark"
" Визуальная подсветка отметок в файле
" ( http://www.vim.org/scripts/script.php?script_id=1026 )
"
" "prettyprint"
" Печать переменных vim в более презентативном виде
" ( http://www.vim.org/scripts/script.php?script_id=2860 )
"
" "easytags"
" Автоматическая генерация и поддержание в актуальном состоянии
" файла с тэгами для ctags
" ( http://www.vim.org/scripts/script.php?script_id=3114 )
"
" "vimshell"
" Лучшая интеграция vim с системой (полноэкранный режим,
" открытие URL, фоновое выполнение системных команд)
" ( http://www.vim.org/scripts/script.php?script_id=3123 )
" }}}
" Замены стандартных файлов {{{
" syntax/python.vim     заменен
"}}}
" Изменения стандартных файлов {{{
" "plugin/sourceExplorer.vim"
" - В нескольких местах в функции SrcExpl_UpdateTags изменён формат команды exe,
"   вызывающий g:SrcExpl_updateTagsCmd:
"   было
"       exe "!" . g:SrcExpl_updateTagsCmd
"   стало
"       exe "silent!" . g:SrcExpl_updateTagsCmd
"   Изменение нужно для того чтобы команда выполнялась без
"   открытия окна терминала и не требовала нажатий Enter после
"   выполнения, т.е. выполнялась в silent режиме
" - В функции SrcExpl_ColorExpr заменена строка:
"       hi link SrcExpl_HighLight term=bold guifg=Black guibg=Magenta ctermfg=Black ctermbg=Magenta
"   на
"       hi link SrcExpl_HighLight Search
"   замена нужна для нормального отображения подсвечиваемого
"   слова в окне SourceExplorer
"
" "syntax/css.vim"
" В файл добавлен код плагина css_color
" ( http://www.vim.org/scripts/script.php?script_id=2150 )
" ==============================================================================
" "Primary"                 Приоритетные настройки {{{1
" ==============================================================================

let s:iswin = has('win32') || has('win64')
let s:lastsession_file = '~/lastsession.vim'

" Отключение совместимости с vi
set nocompatible

" Использовать англоязычное меню
set langmenu=en

if !has('python')
" Не загружать плагин, если в системе не установлен python
python << EOF
import vim
try:
    import os
except ImportError:
    vim.command('let let g:loaded_PyInteractive = 1')
EOF
endif

" ==============================================================================
" "Quick"                   Быстрые настройки {{{1
" ==============================================================================
" (0 - откл. 1 - вкл.)

" us - USer option
let s:us_folding        = 0     " Свертывание участков кода
let s:us_autosaveses    = 1     " Авто-сохранение сессий (загрузка посл. F6)
let s:us_linewrap       = 1     " Перенос длинных строк
let s:us_scratch_buffer = 0     " Сделать из безымянного буфера scratch буфер

" ==============================================================================
" "Includes"                Подключение доп.файлов настроек {{{1
" ==============================================================================

source $VIMRUNTIME/mswin.vim            " Windows-like настройки
behave mswin

" ==============================================================================
" "Basic"                   Базовые настройки {{{1
" ==============================================================================

" Включение подсветки синтаксиса
syntax on

" Включение определения типов файлов
filetype on
filetype plugin on
filetype indent on

" Отключение оповещения морганием и звуком
set novisualbell
set t_vb=

set helplang=en,ru

" Переход на предыдущую/следующую строку
set backspace=indent,eol,start

" Перемещать курсор на следующую строку при нажатии на клавиши вправо-влево и пр.
set whichwrap+=<,>,[,]

" История команд
set history=150

" Максимальное количество изменений, которые могут быть отменены
set undolevels=5000

" Не создавать резервные копии файлов
set nobackup

" Кодировка по умолчанию
set encoding=utf-8
set fileencoding=utf-8

set fileencodings=utf-8,cp1251,cp866,koi8-r

set fileformat=unix          " Формат файла по умолчанию
set fileformats=unix,dos,mac

" Не выгружать буфер, при переключении на другой
" Это позволяет редактировать несколько файлов в один и тот же момент без
" необходимости сохранения каждый раз когда переключаешься между ними
set hidden

set autoread            " Включение автоматического перечтения файла при изменении
set autochdir           " Автоматически устанавливать текущей, директорию отрытого файла
set browsedir=buffer    " Начинать обзор с каталога текущего буфера
set confirm             " Включение диалогов с запросами

" Опции авто-дополнения
set completeopt=longest,menuone

" Показывать все возможные кандидаты при авто-завершении команд
"set nowildmenu
set wildmode=list:longest,full

" Включение проверки орфографии, для русского и английского
set spelllang=ru_yo,en_us
"set spell

" Раскладка по умолчанию - английская
set iminsert=0

" Не перерисовывать окно при работе макросов
set lazyredraw

" ==============================================================================
" "View"                    Вид {{{1
" ==============================================================================

set ruler       " Включение отображения позиции курсора (всё время)

set mouse=a     " Подключение мыши
set mousehide   " Прятать указатель во время набора текста
set cursorline  " Включить подсветку текущей позиции курсора
set mousemodel=popup

if has('gui_running')

    " Шрифт по умолчанию
    if s:iswin
    set gfn=DejaVu_Sans_Mono:h10:cRUSSIAN,consolas:h11

    elseif has("gui_gtk2")
        set gfn=DejaVu\ Sans\ Mono\ 10
    endif

    " Цветовая схема по умолчанию
    colorscheme lucius

elseif s:iswin
    colorscheme desert
else
    colorscheme wombat256
endif

if s:iswin
    " Установка высоты и ширины окна
    winsize 90 30
endif

set guioptions+=b   " Включение горизонтального скролл-бара
set guioptions-=T   " Убрать toolbar
"set guioptions+=c   " Отключение графических диалогов
"set guioptions-=e   " Замена графических табов, текстовыми

set number          " Включение отображения номеров строк
set shortmess+=I    " Отключение приветственного сообщения
set showtabline=2   " Показывать по умлочанию строку со вкладками
set wildmenu        " Показывать меню в командной строке
                    " для выбора вариантов авто-дополнения
set showmatch       " Довсвечивать совпадающую скобку
set list            " Подсвечивать некоторые символы

" Установка символов для подсветки
set list listchars=tab:▹·,trail:·,extends:»,precedes:«,nbsp:×

" ==============================================================================
" "Statusline"               Статусная строка {{{1
" ==============================================================================

" Включение отображения незавершенных команд в статусной строке
set showcmd

" Всегда отображать статусную строку
set laststatus=2

hi StatusLineBufferNumber guifg=fg guibg=bg gui=bold

" Формат статусной строки
set stl+=\ %#StatusLineBufferNumber#
set stl+=[%n]    " Номер буфера
set stl+=%*\
set stl+=%<
set stl+=%f      " Имя файла загруженного в буфер
set stl+=%*\
set stl+=[%{&ft} " Тип файла, загруженного в буфер, например [cpp]
set stl+=\ \|\
set stl+=%{&fileencoding} " Кодировка файла
set stl+=\ \|\
set stl+=%{&ff}] " Формат файла
set stl+=%=      " Выравнивание по правому краю
set stl+=\
set stl+=Line:
set stl+=\ %l/   " Номер строки
set stl+=%L      " Количество строк в буфере
set stl+=\
set stl+=Col:
set stl+=\ %3v   " Номер колонки
set stl+=\
set stl+=[%P]    " Позиция текста, отображаемого в окне
                 " по отношению к началу файла в процентах
set stl+=%#error#%m%*       " Флаг состояния несохранённых изменений
set stl+=%#warningmsg#%r%*  " Флаг состояния 'только для чтения

" Показ нескольких типов предупреждений связанных с некорректной работой с
" отступами:
" "[mixed-indenting]" - В случае если в файле для задания отступов совместно
" используются пробелы и символы табуляции
" "[expandtab-disabled]" - Если опция expandtab отключена, но в файле для
" задания отступов применяются пробелы
" "[expandtab-enabled]" - Если опция expandtab активна, но для задания
" отступов используются символы табуляции
set statusline+=%#error#
set statusline+=%{StatuslineTabWarning()}
set statusline+=%*

" ==============================================================================
" "Indent"                  Отступы и табуляция {{{1
" ==============================================================================

set autoindent                          " Наследовать отступы предыдущей строки
"set smartindent                         " Включить 'умные' отступы
set expandtab                           " Преобразование таба в пробелы
set shiftwidth=4                        " Размер табуляции по умолчанию
set softtabstop=4
set tabstop=4

" ==============================================================================
" "Search"                  Поиск текста {{{1
" ==============================================================================

set hlsearch        " Включение подсветки слов при поиске
set incsearch       " Использовать поиск по мере набора

" Использовать регистра-зависимый поиск (для 
" регистра-независимого использовать \с в конце строки шаблона)
set noignorecase

" В режиме поиска используется раскладка, заданная по умолчанию
set imsearch=-1

" ==============================================================================
" "Folding"                 Свертывание блоков текста {{{1
" ==============================================================================

if s:us_folding
    " Включение складок
    set foldenable

    " Ширина колонки
    "set foldcolumn=4

    " Опция задаёт значение опции 'foldlevel' в начале редактирования нового
    " буфера в окне. Её полезно использовать для закрытия всех складок в
    " файле в начале редактирования (при значении 0), закрытия некоторых
    " складок (при значении от 1) или открывания всех складок (при значении 99)
    set foldlevelstart=99

    " Опция задаёт метод образования складок для текущего окна.
    " Список возможных значений:
    "   manual  Складки создаются вручную.
    "   indent  Складка формируется строками с одинаковыми отступами.
    "   expr    Уровень складки для строки задаётся значением опции 'foldexpr'.
    "   marker  Складки задаются с использованием маркеров.
    "   syntax  Складки задаются в соответствии с правилами подсветки синтаксиса.
    "   diff    В складки помещаются неизменённые фрагменты текста
    set foldmethod=indent

    " Опция назначает максимальное количество вложений складок для методов
    " "indent" и "syntax". Опция позволяет избежать создания слишком
    " большого количества складок. Использование значения, большего, чем 20,
    " не работает, поскольку встроенное ограничение количества вложений в
    " складках соответствует 20
    set foldnestmax=3

else
    set foldmethod=manual

endif

" ==============================================================================
" "Sessions"                Сессии {{{1
" ==============================================================================

" Опции сессий
set sessionoptions=curdir,buffers,folds,tabpages,winpos,help

" Опции помогают переносить файлы сессий с *nix`ов в ms-windows и наоборот
set sessionoptions+=unix,slash

if s:us_autosaveses
    " Авто-сохранение сессии при закрытии vim`a (загрузка F6 в норм. режиме)
    exec 'autocmd VimLeavePre * silent mksession!' . s:lastsession_file
endif

" ==============================================================================
" "LineWrap"                Перенос длинных строк {{{1
" ==============================================================================

if s:us_linewrap
    " Задать ширину строки
    "set textwidth=79

    if v:version >= 703
        " Подсвечивать границы
        set colorcolumn=80
    endif
    " Перенос по словам
    set linebreak
else
    " Запретить перенос строк
    set nowrap

    " показывать символы > или < если есть, что слева/справа строки
    set listchars+=precedes:<,extends:>

endif

" ==============================================================================
" "User Shortcuts"          Горячие клавиши {{{1
" ==============================================================================

" Открытие командной строки помощи (plugin-FuzzyFinder)
map <C-F1> :FufHelp<cr>
vmap <C-F1> <esc>:FufHelp<cr>
imap <C-F1> <esc>:FufHelp<cr>

" Список тегов (plugin-taglist)
nmap <F2> <Esc>:TlistToggle<cr>
vmap <F2> <esc>:TlistToggle<cr>
imap <F2> <esc><esc>:TlistToggle<cr>

" Найти следующее соответствие, все остальные так же подсвечиваются 
nmap <F3> :set hlsearch<CR>n
vmap <F3> <esc> :set hlsearch<CR>n i
imap <F3> <esc> :set hlsearch<CR>n i

" Отключение подсведки найденных выражений
nmap <C-F3> :nohlsearch<CR>
imap <C-F3> <Esc>:nohlsearch<CR>
vmap <C-F3> <Esc>:nohlsearchi<CR>gv

" Выполнение/Открытие файла
nmap <F5> <esc>:call <SID>OpenFileInDefaultApp()<cr>
vmap <F5> <esc>:call <SID>OpenFileInDefaultApp()<cr>i
imap <F5> <esc><esc>:call <SID>OpenFileInDefaultApp()<cr>i

" Просмотр списка буферов (plugin-fuzzyfinder)
map <F6> :FufBuffer<cr>
vmap <F6> <esc>:FufBuffer<cr>
imap <F6> <esc>:FufBuffer<cr>


" Список файлов в текущей директории (plugin-fuzzyfinder)
nmap <F7> <esc>:FufFile<cr>
vmap <F7> <esc>:FufFile<cr>
imap <F7> <esc>:FufFile<cr>

"" Навигатор по коду (plugin-sourceExplorer)
"map <F8> :SrcExplToggle<cr>
"vmap <F8> <esc>:SrcExplToggle<cr>
"imap <F8> <esc>:SrcExplToggle<cr>

"" Обновление файла тегов для CodeExplorer (plugin-sourceExplorer)
"map <C-F8> :call g:SrcExpl_UpdateTags()<cr>
"vmap <C-F8> <esc>:call g:SrcExpl_UpdateTags()<cr>i
"imap <C-F8> <esc>:call g:SrcExpl_UpdateTags()<cr>i

" Обозреватель файлов (plugin-NERD_Tree)
map <F8> :NERDTreeToggle<cr>
vmap <F8> <esc>:NERDTreeToggle<cr>
imap <F8> <esc>:NERDTreeToggle<cr>

" Загрузка последней сессии (работает если в
" секции "Сессии" определена команда авто-сохранения)
if s:us_autosaveses
    exec 'nmap <F9> <esc>:source ' . s:lastsession_file . '<cr>'
    exec 'vmap <F9> <esc>:source ' . s:lastsession_file . '<cr>'
    exec 'imap <F9> <esc>:source ' . s:lastsession_file . '<cr>i'
endif

" Полноэкранный режим (plugin-vimshell)
inoremap <F10> <C-o>:Fullscreen<CR>
nnoremap <F10> :Fullscreen<CR>

" Закрыть окно
map <F11> :close<cr>
vmap <F11> <esc>:close<cr>i
imap <F11> <esc>:close<cr>i

" Удалить буфер
map <F12> :bdelete<cr>
vmap <F12> <esc>:bdelete<cr>
imap <F12> <esc>:bdelete<cr>


" Создать базу данных для файлов в текущей директории
map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR>

" CTRL+Space для автозавершения (plugin-neocomplcache)
imap <C-Space> <C-X><C-U>

" Использование rope code assist, вместо omni completion
" для файлов python при нажатии CTRL+Space
" (plugin-ropevim)
""au FileType python imap <buffer> <C-space> <C-R>=RopeCodeAssistInsertMode()<cr>


" Добавление(Ctrl+Tab)/удаление(Ctrl+Shift+Tab) отступов
" работает только если выделить текст
map  ]v          [[V]]
"map  <C-S-tab>   [[V]]<
vmap <C-S-tab>   <
"map  <C-tab>     [[V]]>
vmap <C-tab>     >

" Раскрыть сниппет/переход по сниппету (plugin-neocomplcache)
imap <silent><C-j> <Plug>(neocomplcache_snippets_expand)
smap <silent><C-j> <Plug>(neocomplcache_snippets_expand)

" Поставить/убрать отметку перейти к следующей/предыдущей
" отметке (plugin-visualmark)
nmap mm <Plug>Vm_toggle_sign
nmap mn <Plug>Vm_goto_next_sign
nmap mp <Plug>Vm_goto_prev_sign

" Пометить/убрать все слова совподающие со словом под курсором (plugin-Mark)
nmap <silent>mw :call mark#MarkCurrentWord()<CR>

" Установка быстрой помощи по K для слова под курсором с помощью pydoc
" для файлов python (plugin-ropevim)
au FileType python nmap <buffer> <S-K> :call RopeShowDoc()<CR>

" Переход к определению для файлов python по gd выполняется с
" помощью rope (Plugin-ropevim)
au FileType python nmap <buffer> gd :call RopeGotoDefinition()<CR>

" Комбинации оставленные по умолчанию:
"
"vis \cc    комментирование выделенного участка кода (plugin-NERD_commenter)
"vis \cu    разкомментирование выделенного участка кода (plugin-NERD_commenter)

" ==============================================================================
" "Menu"                    Меню {{{1
" ==============================================================================

" Работа с макросами
menu Tools.Macro.Record<tab>qm qm
imenu Tools.Macro.Record<tab>qm <esc>qm

menu Tools.Macro.Stop<tab>q q
imenu Tools.Macro.Stop<tab>q <esc>q

menu Tools.Macro.Run\ Last<tab>@m <esc>@m
imenu Tools.Macro.Run\ Last<tab>@m <esc>@m

" Открытие файла программой связанной с файлом
menu <silent> Run.Run<tab>\<F5> :call <SID>OpenFileInDefaultApp()<cr>
imenu <silent> Run.Run<tab>\<F5> <esc>:call <SID>OpenFileInDefaultApp()<cr>i

" Получение командной строки
menu <silent> Run.Command\ Line\ Parameters\ \.\.\. :call <SID>GetCmdline()<cr>
imenu <silent> Run.Command\ Line\ Parameters\ \.\.\. <ESC>:call <SID>GetCmdline()<cr>i

"Открытие/закрытие окна taglist (plugin-taglist)
menu <silent> Plugin.Tag\ List<tab><F2> :TlistToggle<cr>
imenu <silent> Plugin.Tag\ List<tab><F2> <ESC>:TlistToggle<cr>i

" Открытие/закрытие окна NERD_Tree (plugin-NERD_Tree)
menu <silent> Plugin.File\ Explorer<tab><F8> :NERDTreeToggle<cr>
imenu <silent> Plugin.File\ Explorer<tab><F8> <ESC>:NERDTreeToggle<cr>

" Меню плагина Fuzzy Finder (plugin-fuzzyFinder)
menu <silent> Plugin.Fuzzy\ Finder.Buffer<tab><F6> <ESC>:FufBuffer<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Buffer<tab><F6> <ESC>:FufBuffer<cr>

menu <silent> Plugin.Fuzzy\ Finder.File<tab><F7> <ESC>:FufFile<cr>
imenu <silent> Plugin.Fuzzy\ Finder.File<tab><F7> <ESC>:FufFile<cr>

menu <silent> Plugin.Fuzzy\ Finder.Dir  <esc>:FufDir<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Dir <esc>:FufDir<cr>

menu <silent> Plugin.Fuzzy\ Finder.MRU-File <esc>:FufMruFile<cr>
imenu <silent> Plugin.Fuzzy\ Finder.MRU-File <esc>:FufMruFile<cr>

menu <silent> Plugin.Fuzzy\ Finder.MRU-Command <esc>:FufMruCmd<cr>
imenu <silent> Plugin.Fuzzy\ Finder.MRU-Command <esc>:FufMruCmd<cr>

menu <silent> Plugin.Fuzzy\ Finder.Bookmark <esc>:FufBookmark<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Bookmark <esc>:FufBookmark<cr>

menu <silent> Plugin.Fuzzy\ Finder.Tag <esc>:FufTag<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Tag <esc>:FufTag<cr>

menu <silent> Plugin.Fuzzy\ Finder.Tagged\ File <esc>:FufTaggedFile<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Tagged\ File <esc>:FufTaggedFile<cr>

menu <silent> Plugin.Fuzzy\ Finder.Jump\ List <esc>: FufJumpList<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Jump\ List <esc>: FufJumpList<cr>

menu <silent> Plugin.Fuzzy\ Finder.Change\ List <esc>: FufChangeList<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Change\ List <esc>: FufChangeList<cr>

menu <silent> Plugin.Fuzzy\ Finder.Quickfix <esc>: FufQuickfix<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Quickfix <esc>: FufQuickfix<cr>

menu <silent> Plugin.Fuzzy\ Finder.Line <esc>: FufLine<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Line <esc>: FufLine<cr>

menu <silent> Plugin.Fuzzy\ Finder.Help<tab><Ctrl-F1> <ESC>: FufHelp<cr>
imenu <silent> Plugin.Fuzzy\ Finder.Help<tab><Ctrl-F1> <ESC>: FufHelp<cr>

" Загрузка последней сессии
" (работает если в секции "Сессии" определена команда авто-сохранения)
if s:us_autosaveses
    exec 'menu File.Load\ Last\ Session<tab><F6> :source'.s:lastsession_file.'<cr>'
    exec 'imenu File.Load\ Last\ Session<tab><F6> :source'.s:lastsession_file.'<cr>'
endif

" Переключение окна календаря (plugin-calendar)
menu .990 Plugin.Calendar <esc>:Calendar<cr>
imenu .990 Plugin.Calendar <esc>:Calendar<cr>

menu .998 Plugin.-usrsep99- :

" Обновление плагинов (plugin-getscript)
amenu .999 Plugin.Check\ Updates <esc>:GetLatestVimScripts<cr>

" Полноэкранный режим (plugin-vimshell)
amenu .998 Window.-usrsep99- :
amenu .999 Window.Toggle\ Fullscreen<tab><F10> <esc>:Fullscreen<cr>


" ==============================================================================
" "Popup-menu"              Всплывающее меню {{{1
" ==============================================================================

" ( plugin-vimshell )
vmenu .1 PopUp.Open <esc> :call xolox#shell#open_cmd(GetSelection())<cr>
vmenu .1 PopUp.-Usrsep1- :

amenu PopUp.-Usrsep1- :

" Работа с метками (plugin-visualmark)
nmenu PopUp.Mark.Set\ Mark<tab>mm <esc>mm

" Перемещение по меткам (plugin-visualmark)
nmenu PopUp.Mark.Next\ Mark<tab>mn <esc>mn
nmenu PopUp.Mark.Prev\ Mark<tab>mp <esc>mp

amenu PopUp.Mark.-Usrsep1- :

" Пометить/убрать все слова совподающие со словом под курсором (plugin-Mark)
imenu PopUp.Mark.Mark\ Words<tab>mw <esc>mw
nmenu PopUp.Mark.Mark\ Words<tab>mw <esc>mw

" Перемещение по меткам (plugin-Mark)
nmenu PopUp.Mark.Next\ Word<tab>\\* <esc>\*
imenu PopUp.Mark.Next\ Word<tab>\\* <esc>\*

" Переключение всплывающего меню neocomplcache
" (plugin-neocomplcache)
"nmenu PopUp.Toggle\ Neo\ PopUp\ menu :NeoComplCacheToggle<cr>
"imenu PopUp.Toggle\ Neo\ PopUp\ menu <esc>:NeoComplCacheToggle<cr>i

" Комментирование/раз комментирование участков текста
" (plugin-NERDCommenter)
nmenu PopUp.Source\ Code.Comment :call NERDComment(0,  "alignLeft")<CR>
vmenu PopUp.Source\ Code.Comment <ESC>:call NERDComment(1, "alignLeft")<CR>

nmenu PopUp.Source\ Code.Uncomment :call NERDComment(0, "uncomment")<CR>
vmenu PopUp.Source\ Code.Uncomment <ESC>:call NERDComment(1,  "uncomment")<CR>

nmenu PopUp.Source\ Code.Toggle :call NERDComment(0, "toggle")<CR>
vmenu PopUp.Source\ Code.Toggle <ESC>:call NERDComment(1,  "toggle")<CR>

vmenu PopUp.Source\ Code.-Usrsep1- :

" Добавление/удаление отступов к участкам кода
" (соотв. горячие клавиши клавиши должны быть определенны)
"nmenu <silent> PopUp.Source\ Code.Indent\ Block<tab><Ctrl-Tab> <C-tab>
vmenu <silent> PopUp.Source\ Code.Indent\ Block<tab><C-Tab> <C-tab>

"nmenu <silent>  PopUp.Source\ Code.Dedent\ Block<tab><C-S-Tab> <C-S-tab>
vmenu <silent>  PopUp.Source\ Code.Dedent\ Block<tab><C-S-Tab> <C-S-tab>

nmenu PopUp.Util.Context\ Help<tab><S-k> <S-k>
vmenu PopUp.Util.Context\ Help<tab><S-k> <esc><S-k>

" Открыть файл, в качестве имени используется слово под курсором
nmenu PopUp.Util.Open\ File\ Under\ Cursor<tab>gf gf
vmenu PopUp.Util.Open\ File\ Under\ Cursor<tab>gf gf

nmenu PopUp.Util.Jump\ Tag\ Under\ Cursor<tab><C-]> g<C-]>
vmenu PopUp.Util.Jump\ Tag\ Under\ Cursor<tab><C-]> g<C-]>

" Удалить лишние пробельные символы
nmenu <silent>  PopUp.Util.Clean\ Extra\ Spaces :call <SID>TrimWhiteSpace()<CR>

vmenu PopUp.Util.-Usrsep3- :

" Изменение регистра символов
vmenu PopUp.Util.Upper\ Case<tab>U U
vmenu PopUp.Util.Lower\ Case<tab>u u
vmenu PopUp.Util.Swap\ Case<tab>~ ~

au MenuPopup * call ToggleFTContextMenu("python","menu","PopUp.-Usrsep4-",":")

" Показ документации по объекту python над которым находится курсор
" (plugin-ropevim)
au MenuPopup * call ToggleFTContextMenu("python","nmenu","PopUp.Show\\ Documentation<tab><S-k>","RopeShowDoc()")
au MenuPopup * call ToggleFTContextMenu("python","imenu","PopUp.Show\\ Documentation><S-k>","RopeShowDoc()")

" Поиск места определения объекта под курсором (plugin-ropevim)
au MenuPopup * call ToggleFTContextMenu("python","imenu","PopUp.Goto\\ Definition<tab>gd","RopeGotoDefinition()")
au MenuPopup * call ToggleFTContextMenu("python","nmenu","PopUp.Goto\\ Definition<tab>gd","RopeGotoDefinition()")

" Поиск всех мест где используется объект, находящийся под
" курсором (plugin-ropevim)
au MenuPopup * call ToggleFTContextMenu("python","imenu","PopUp.Find\\ Occurrences","RopeFindOccurrences()")
au MenuPopup * call ToggleFTContextMenu("python","nmenu","PopUp.Find\\ Occurrences","RopeFindOccurrences()")

" Выполнить выделенный код (plugin-pyinteractive)
au MenuPopup * call ToggleFTContextMenu("python","vmenu","PopUp.Evaluate", "pyinteractive#EvaluateSelected(visualmode())")

" ==============================================================================
" "Plugin.TList"            {{{1
" ==============================================================================

let g:Tlist_Show_Menu = 0           " Показывать меню (0-выкл/1-вкл)
let g:Tlist_Show_One_File = 1       " Показывать список тегов только из текущего файла
let g:Tlist_Enable_Fold_Column = 0  " Показывать колонку свёртки (folding)

" ==============================================================================
" "Plugin.NERDTree"         {{{1
" ==============================================================================

" Установить положение окна NERDTree, "left" или "right"
let NERDTreeWinPos = 'right'

let NERDTreeShowBookmarks = 1
let NERDTreeIgnore = ['\~$', '*.pyc', '*.pyo']
let NERDChristmasTree = 0

" ==============================================================================
" "Plugin.SourceExplorer"   {{{1
" ==============================================================================

" Установка ширины окна SourceExplorer
let g:SrcExpl_winHeight = 8

" Интервал в миллисекундах (ms) для следующего обновления окна
let g:SrcExpl_refreshTime = 100

" Установка клавиши отвечающей за переход
" определению, по умолчанию "Enter"
let g:SrcExpl_jumpKey = "<ENTER>"

" Установка клавиши отвечающий за обратный переход от
" определения, назад к коду, по умолчанию "Space"
let g:SrcExpl_gobackKey = "<SPACE>"

" // In order to Avoid conflicts, the Source Explorer should know what plugins
" // are using buffers. And you need add their bufname into the list below
" // according to the command ":buffers!"
let g:SrcExpl_pluginList = [
        \ "__Tag_List__",
        \ "_NERD_tree_",
        \ "Source_Explorer"
    \ ]
" // Enable/Disable the local definition searching, and note that this is not
" // guaranteed to work, the Source Explorer doesn't check the syntax for now.
" // It only searches for a match with the keyword according to command 'gd'
let g:SrcExpl_searchLocalDef = 1

" Включение опции обновления файла тегов во время открытия окна
" Source Explorer
let g:SrcExpl_isUpdateTags = 1

" Параметры вызова ctags
let g:SrcExpl_updateTagsCmd = "ctags --sort=foldcase -R ."

" Автоматическое обновление файла тегов, после сохранения текущего файла
autocmd BufWritePost * :execute "silent!" . g:SrcExpl_updateTagsCmd

" ==============================================================================
" "Plugin.MRU" {{{1
" ==============================================================================

" Задание количества отображаемых в меню файлов
let g:MRU_Max_Entries = 10

" ==============================================================================
" "Plugin.GetLastestVimScripts" {{{1
" ==============================================================================

" Отключение авто-инсталляции скачанных скриптов
let g:GetLatestVimScripts_allowautoinstall= 0

" ==============================================================================
" "Plugin.neocomplcache" {{{1
" ==============================================================================

let g:neocomplcache_enable_at_startup = 1
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_enable_ignore_case = 0

" Если не выставить эту опцию то вырезание а затем вставка (в insert mode)
" через виндовые хоткеи страшно глючит
let g:neocomplcache_disable_select_mode_mappings = 1

" Включение/отключение автоматики Активация по Ctrl+Space
let g:neocomplcache_disable_auto_complete = 0

" ==============================================================================
" "Plugin.ropevim" {{{1
" ==============================================================================

let g:ropevim_vim_completion = 1

" ==============================================================================
" "Plugin.pythoncyntax" {{{1
" ==============================================================================

" Настройка подсветки синтаксиса для python (работает для
" расширенного syntax файла python)
let g:python_highlight_all = 1
let g:python_highlight_indent_errors = 0
let g:python_highlight_space_errors = 0
let g:python_highlight_doctests = 0

" ==============================================================================
" "Plugin.tohtml" {{{1
" ==============================================================================

let g:html_use_css = 1      " Использовать CSS1
let g:html_number_lines = 0 " При генерации не добавлять номера строк
let g:use_xhtml = 1         " Использовать XHTML

" ==============================================================================
" "Plugin.Calendar" {{{1
" ==============================================================================

let g:calendar_monday = 1   " Неделя начинается с понедельника

" ==============================================================================
" "Plugin.vimshell" {{{1
" ==============================================================================

" Отключение клавиатурных привязок плагина
let g:shell_mappings_enabled = 0

" ==============================================================================
" "Functions"               Пользовательские функции {{{1
" ==============================================================================

let s:cmdline = ""

" Открытие файла приложением определённым по умолчанию
function! s:OpenFileInDefaultApp()
    if s:cmdline == ""
        execute '!"%"'
        "execute 'call system(shellescape(expand("<cfile>") ' . s:cmdline . '))'
    else
        execute '!"% ' . s:cmdline . '"'
    endif
endfunction

" Получение от пользователя командной строки с которой будет запускаться
" скрипт
function! <SID>GetCmdline()
    let s:cmdline=inputdialog("Enter command line parameters:", s:cmdline, s:cmdline)
endfunction

" Регистрация\удаление контекстного меню для конкретного типа файла
" lang (str)            - тип файла (например xml)
" menucommand (str)     - команда меню (например imenu)
" menuitem (str)        - название пункта меню
" action (str)          - функция выполняющая действие при
"                         активации пункта меню
function! ToggleFTContextMenu(lang, menucommand, menuitem, action)
    let command = a:menucommand . " " . a:menuitem . " <ESC>:call " . a:action . "<CR>"
    if &filetype == a:lang
        execute command
    else
        execute "silent! aunmenu " . a:menuitem
    endif
endfunction

" Удаление лишних пробелов в файле
function! <SID>TrimWhiteSpace()
    normal ma
    :retab
    :%s/\s\+$//eg
    normal 'a
endfunction

" Функция возвращает выделенный текст
function! GetSelection()
    " "unused"
        let l:line = getline("'<")
        let l:line = strpart(l:line, col("'<") - 1, col("'>") - col("'<") + 1)
        return l:line
endfunction

"recalculate the tab warning flag when idle and after writing
autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning

" Функция возвращает "[mixed-indenting]" если для отступов в
" файле совместно используются пробелы и символы табуляции.
" Если же выставлена опция "expandtab" и в файле присутствуют
" символы табуляции то возвращаемое значение будет "[expandtab-enabled]".
" Так же в противоположном случае: если опция "expandtab" не задана
" но в файле для отступов используются пробелы возвращаемым
" значением будет "[expandtab-disabled]". В остальных случаях
" результатом функции будет пустая строка
function! StatuslineTabWarning()
    if !exists("b:statusline_tab_warning")
        let b:statusline_tab_warning = ''

        if !&modifiable
            return b:statusline_tab_warning
        endif

        let tabs = search('^\t', 'nw') != 0

        "find spaces that arent used as alignment in the first indent column
        let spaces = search('^ \{' . &ts . ',}[^\t]', 'nw') != 0

        if tabs && spaces
            let b:statusline_tab_warning = '[mixed-indenting]'
        elseif (spaces && !&expandtab)
            let b:statusline_tab_warning = '[expandtab-disabled]'
        elseif (tabs && &expandtab)
            let b:statusline_tab_warning = '[expandtab-enabled]'
        else
            let b:statusline_tab_warning = ''
        endif
    endif
    return b:statusline_tab_warning
endfunction

" Сделать из безымянного буфера scratch буфер
if s:us_scratch_buffer
    augroup vimrc-scratch-buffer
        autocmd!
        autocmd BufEnter * call s:scratch_buffer()
        autocmd FileType qfreplace autocmd! vimrc-scratch * <buffer>

        function! s:scratch_buffer()
            if exists('b:scratch_buffer') || bufname('%') != '' || &l:buftype != ''
                return
            endif
            let b:scratch_buffer = 1
            setlocal buftype=nofile nobuflisted noswapfile bufhidden=hide

            augroup vimrc-scratch
                autocmd! * <buffer>
                autocmd BufWriteCmd <buffer> call s:scratch_on_BufWriteCmd()
            augroup END
        endfunction

        function! s:scratch_on_BufWriteCmd()
            silent! setl buftype< buflisted< swapfile< bufhidden< nomodified
            autocmd! vimrc-scratch * <buffer>
            unlet! b:scratch_buffer
            execute 'saveas' . (v:cmdbang ? '!' : '') ' <afile>'
            filetype detect
        endfunction
    augroup END
endif
"function! PythonVarInfoBalloonExpr()
"    if &filetype!="python"
"        return ""
"    endif
"    v:beval_text
"endfunction

"set bexpr=PythonVarInfoBalloonExpr()
"set ballooneval

" ==============================================================================
" "Fix"                     Способы устранения непоняток с настройками {{{1
"
" Узнать из какого файла переменная была установлена посл. раз
"   :verbose set переменная
"
" Список всех переменных
"   :let
"
" Список всех пользовательских функций
"   :function
"
" Список всех привязок
"   :map
"
" Показывает значения всех опций, которые отличаются от настроек по умолчанию.
"   :set
" ==============================================================================
"}}}

3 комментария:

  1. Спасибо! Очень помогло!

    ОтветитьУдалить
  2. Отличный конфиг, спасибо!

    ОтветитьУдалить
  3. спасибо! отлично оформленный конфиг.
    особенно понравилась подсветка пробелов в строке.
    >> " Установка символов для подсветки
    >> set list listchars=...

    ОтветитьУдалить