[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Настройка Vim и работа в нём.



----- User "Артём Н." on 2012-10-16 20:08:47 wrote:
>Поделитесь вашими vimrc и полезными советами по настройке и работе в Vim.
>Интересно всё.
>Хочется конфиг, который будет работать и на windows и на unix-подобных.
Ниже моё что есть. Сразу скажу что под Windows понятия не имею как он
работает или нет и имеются следующие плагины установленные (без них ни
ногой):
* surround
* mark
* fugitive
* easymotion
и ряд других но или их нет в конфиге этом или вырезал за неинтересностью
(настройки vimwiki, vimchat, pyflakes, pep8, snipmate

                             ----- >8 -----

set t_Co=8  " пусть не больше 8 цветов (для 256-цветного tmux-а)

" Базовые настройки включающие всякий функционал
syntax on
filetype on
filetype plugin on
set nocompatible
set cryptmethod=blowfish
set encoding=utf-8

" Настройки по работе с поведением текста, в основном кодом программ
set autoindent
set tabstop=4
set shiftwidth=4
set smarttab
set expandtab
set nojoinspaces
set backspace=indent,eol
set viminfo='100,<50,s10,h,%

" Относительная нумерация строк и показ чего же я ввожу
set relativenumber
set showcmd
set showmatch
set cursorline
set colorcolumn=80

" Поиск игнорируя регистр и полезности касательно него
set ignorecase
set smartcase
set hlsearch
set incsearch

" Настройки строки состояния
hi User1 ctermbg=blue ctermfg=green
hi User2 ctermbg=green ctermfg=black
hi User3 ctermbg=yellow ctermfg=blue
set laststatus=2
set statusline=%n\|%F%m%r%h%w%q\ %=
set statusline+=%1*%Y[%{strlen(&fenc)?&fenc:&enc},%{&ff}]
set statusline+=%2*[%l/%L]
set statusline+=[%c%V:0x%B]
set statusline+=%3*%{fugitive#statusline()}
set statusline+=%*\ %P

" Используется для быстрого переключения между режимами для того чтобы
" вставлять выделяемый текст: красного столбца, fold-ов
function CCinv()
    if exists('&foldcolumn') && &foldcolumn == 1
        set colorcolumn=
        set foldcolumn=0
        set foldlevel=999
    else
        set colorcolumn=80
        set foldcolumn=1
        set foldlevel=0
    endif
endfunction

" Просто функция очистки регистров
function ClearRegisters()
    for chr in split("abcdefghijklmnopqrstuvwxyz", '\zs')
        execute "let @" . chr . "=''" 
    endfor
endfunction

" Сохранять ли текущий view или нет после выхода из буфера
function s:ViewSaving()
    let s:ignored = ["passmandb", "fugitive:", "secure=+", "=+tmp=+"]
    let s:need_view = 1
    for ignore in s:ignored
        if match(expand("%"), ignore) != -1
            let s:need_view = 0
        endif
    endfor
    if s:need_view
        mkview
    endif
endfunction
autocmd BufWinLeave *.* call s:ViewSaving()
autocmd BufWinEnter *.* silent loadview 

" Настройки fold-ов
set foldmethod=indent
set foldenable
set foldcolumn=1
set foldnestmax=3

set pastetoggle=<F2>  " режим вставки отформатированного текста
:map <F3> :set relativenumber!<CR>:call CCinv()<CR>zR  " помощь для выделения
:map <F4> :nohlsearch<CR>:MarkClear<CR>  " очистка подсветок поиска и mark-ов
:map <F6> :Explore<CR>  " вызов файлового менеджера
:map <F7> "cyiw:execute "Gvsplit " . @c<CR>zR  " открытие коммита под курсором
:map <F8> :close<CR>  " закрыть буфер
:map <F9> :registers<CR>  " показать регистры
:map <F10> ysiw"  " обрамить текущее слово в кавычки
:map <F11> :cprevious<CR>  " предыдущий элемент QuickFix-а
:map <F12> :cnext<CR>  " следующий элемент QuickFix-а
:cmap w72 set textwidth=72  " ширина строки для форматирования 72
:cmap SP setlocal spell spelllang=ru,en  " проверка орфографии
:cmap CE :set expandtab<CR>:center<CR>:set noexpandtab<CR>  " центрирование
:nmap F f<space>  " переход на ближайший пробел
:digraphs .3 8230  " троеточие
:digraphs \"6 8222  " грустный смайл
:digraphs ou 9785  " весёлый смайл
:digraphs \|\| 8741  " конкатенация
:map ,cs 1G/^Subject: <CR>yypIX-Old-<ESC>-W  " замена темы письма

" При yank-е производить сдвиг нумерованных регистров, также заполняя @1
function s:yankstack()
    if @" != @1 && @" != "TODO"
        for rn in range(9, 2, -1)
            execute "let @" . rn . "=@" . (rn - 1)
        endfor
        let @1=@"
    endif
    return "y"
endfunction
exec 'nnoremap <expr>' 'y' '<SID>yankstack()'
exec 'xnoremap <expr>' 'y' '<SID>yankstack()'

" Покороче вызов easymotion-а
let g:EasyMotion_mapping_b = '<leader>b'
let g:EasyMotion_mapping_w = '<leader>w'

-- 
Happy hacking, Sergey Matveev            .
[CYPHERPUNKS.RU][FSF][FSFE][EFF] fellow ..:


Reply to: