Skip to content

Instantly share code, notes, and snippets.

@yart
Last active October 1, 2022 21:20
Show Gist options
  • Save yart/64076c744f79fceb75d8ce71cf99acc0 to your computer and use it in GitHub Desktop.
Save yart/64076c744f79fceb75d8ce71cf99acc0 to your computer and use it in GitHub Desktop.
.vimrc
" =====================================================================================================================
" =========================================== НАЧАЛО СЕКЦИИ ПЛАГИНОВ ==================================================
" =====================================================================================================================
" Задаёт директорию для плагинов
" - для Neovim: ~/.local/share/nvim/plugged
" - отменяет стандартные имена Vim-директорий, таких как 'plugin'
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-commentary'
Plug 'tpope/vim-surround' " двойные скобки, тэги, кавычки и т.д.
"
Plug 'lyokha/vim-xkbswitch' " запоминает раскладку в нормальном режиме и в режиме вставки
Plug 'tpope/vim-sensible'
Plug 'w0rp/ale'
Plug 'sheerun/vim-polyglot'
Plug 'dyng/ctrlsf.vim'
Plug 'jlanzarotta/bufexplorer' " удобное управление буферами
Plug 'vim-airline/vim-airline' " красивая статус-строка
Plug 'Valloric/YouCompleteMe'
" Plug 'jiangmiao/auto-pairs' (плохо работает с кириллицей — не даёт напечатать х и ъ, например
Plug 'tpope/vim-fugitive'
Plug 'tpope/vim-obsession'
Plug 'terryma/vim-multiple-cursors'
" Поддержка языков программирования
Plug 'vim-ruby/vim-ruby'
" Подсветка синтаксиса
Plug 'posva/vim-vue'
Plug 'othree/javascript-libraries-syntax.vim'
Plug 'ap/vim-css-color'
Plug 'ekalinin/Dockerfile.vim'
Plug 'shmup/vim-sql-syntax'
" Всякие полезные инструменты
Plug 'mattn/emmet-vim', { 'for': ['html','xhtml','css','sass','scss','xml','vue'] }
Plug 'iamcco/markdown-preview.vim'
Plug 'nathanaelkane/vim-indent-guides'
Plug 'majutsushi/tagbar'
" Плагины для Git
Plug 'airblade/vim-gitgutter'
" Плагины для поиска по проекту (чё-то не работает как надо)
" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
" Plug 'junegunn/fzf.vim'
" Плагины для NERDTree
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
Plug 'Xuyuanp/nerdtree-git-plugin'
" Цветовые схемы
Plug 'morhetz/gruvbox'
Plug 'sickill/vim-monokai'
Plug 'habamax/vim-gruvbit'
Plug 'habamax/vim-habanight'
Plug 'lourenci/github-colors'
Plug 'vv9k/vim-github-dark'
Plug 'nanotech/jellybeans.vim'
call plug#end()
" :PlugInstall
" =====================================================================================================================
" ============================================ КОНЕЦ СЕКЦИИ ПЛАГИНОВ ==================================================
" =====================================================================================================================
" УСТАНОВКА ЦВЕТОВОЙ СХЕМЫ
set termguicolors
" colorscheme gruvbox
" colorscheme monokai
" colorscheme gruvbit
" colorscheme habanight
" colorscheme github-colors
" colorscheme ghdark
colorscheme jellybeans
set background=dark
syntax enable
" АВТОПЕРЕКЛЮЧЕНИЕ РАСКЛАДКИ В РАЗНЫХ РЕЖИМАХ
let mapleader = "\\"
let g:XkbSwitchEnabled = 1
let g:XkbSwitchLib = '/usr/lib/libxkbswitch.so'
let g:XkbSwitchIMappings = ['ru']
" НЕКОТОРЫЕ НАСТРОЙКИ ДЛЯ JS ФАЙЛОВ
let g:used_javascript_libs = 'underscore,backbone,jquery,vue'
" УСТАНОВКА ОДНОЙ ДИРЕКТОРИИ ДЛЯ ВСЕХ SWAP ФАЙЛОВ
set directory=$HOME/.vim/swapfiles//
" НЕКОТОРЫЕ БАЗОВЫЕ НАСТРОЙКИ
set wrap linebreak " мягко переносит текст по словам на краю экрана
set colorcolumn=120 " показывает вертикальную черту на 120 символе
set autoread " автоматически перечитывает файл, если он был изменён снаружи
set nu " номера строк
set rnu " относительные номера строк
set expandtab " пробелы вместо табуляций
set tabstop=2 " ширина табуляции
set softtabstop=2 " это тоже, только для всяких внутренних отступов
set shiftwidth=2 " ширина сдвига блока по >
set hlsearch " подсветка поиска
set incsearch " поиск по мере ввода символов
set showcmd " включается история команд
set ruler " показывает положение курсора всегда
" Фолдинг по отступам
set foldenable
set foldlevel=100
set foldmethod=indent
" Поддержка мыши
set mouse=a
set mousemodel=popup
" Не выгружать буфер, когда переключаемся на другой
" Это позволяет редактировать несколько файлов в один и тот же момент без необходимости сохранения каждый раз
" когда переключаешься между ними
set hidden
" Включаем 'умные' отступы, например, авто отступ после `{`
set smartindent
" Подсвечивать линию текста, на которой находится курсор
set cursorline
highlight CursorLine guibg=#1c1c1c ctermbg=234
highlight CursorLine term=none cterm=none
" Triger `autoread` when files changes on disk
" https://unix.stackexchange.com/questions/149209/refresh-changed-content-of-file-opened-in-vim/383044#383044
" https://vi.stackexchange.com/questions/13692/prevent-focusgained-autocmd-running-in-command-line-editing-mode
autocmd FocusGained,BufEnter,CursorHold,CursorHoldI * if mode() != 'c' | checktime | endif
" Notification after file change
" https://vi.stackexchange.com/questions/13091/autocmd-event-for-autoread
autocmd FileChangedShellPost *
\ echohl WarningMsg | echo "File changed on disk. Buffer reloaded." | echohl None
" Поддержка ruby
autocmd FileType ruby compiler ruby
imap <S-CR> <CR><CR>end<Esc>-cc
let ruby_operators = 1
let ruby_pseudo_operators = 1
" Настройки для подсветки синтаксиса vue
autocmd FileType vue syntax sync fromstart
autocmd BufRead,BufNewFile *.vue setlocal filetype=vue " .html.pug.javascript.css.sass
" Настройки для плагина vim-indent-guides
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_auto_colors = 0
hi IndentGuidesOdd ctermbg=235
hi IndentGuidesEven ctermbg=236
" Настройка отображения специальных символов
set list listchars=tab:→\ ,trail:·
" =====================================================================================================================
" ======================================== НАЧАЛО СЕКЦИИ ПРИВЯЗКИ КЛАВИШ ==============================================
" =====================================================================================================================
" Комбинация клавиш ctrl+j - действует как Escape в режиме Insert
inoremap <C-j> <ESC>
map <C-a> :NERDTreeToggle<CR>
" просмотр списка буферов
nmap <C-b> <Esc>:BufExplorer<cr>
vmap <C-b> <esc>:BufExplorer<cr>
imap <C-b> <esc><esc>:BufExplorer<cr>
" Вертикальные переходы по длинным строкам
nnoremap j gj
nnoremap k gk
" копирование и вставка из/в внешнего буфера обмена
nnoremap <C-y> "+y
vnoremap <C-y> "+y
nnoremap <C-p> "+gP
vnoremap <C-p> "+gP
" проверка орфографии
map <F7> :setlocal spell spelllang=en<cr>
map <C-F7> :setlocal spell spelllang=ru<cr>
map <S-F7> :setlocal nospell<cr>
" выравнивание окон
nnoremap == <c-w>t<c-w>=11<c-w>+
" перемещение по окнам
nnoremap <c-h> <c-w>h
nnoremap <c-j> <c-w>j
nnoremap <c-k> <c-w>k
nnoremap <c-l> <c-w>l
" изменение размеров окон
nnoremap <c-left> <c-w><
nnoremap <c-down> <c-w>-
nnoremap <c-up> <c-w>+
nnoremap <c-right> <c-w>>
" tab в качестве CTRL+W
nnoremap <tab> <c-w>
nnoremap <tab><tab> <c-w><c-w>
" выход в нормальный режим в терминале
tnoremap <Esc> <C-\><C-n>
" Символ `@` в командном буфере разворачивается в путь до текущего файла.
" Крайне удобно использовать для открытия файла из той же директории,
" где находится текущий редактируемый файл
" cnoremap @ <c-r>=expand("%:h")<cr>/
" пока отключил, так как мешает в регулярках. Надо какой-то другой символ
" придумать.
" =====================================================================================================================
" ========================================= КОНЕЦ СЕКЦИИ ПРИВЯЗКИ КЛАВИШ ==============================================
" =====================================================================================================================
set encoding=utf-8
set termencoding=utf-8
let g:mkdp_path_to_chrome = "chromium-browser"
set clipboard=unnamedplus
" управление сессиями
fu! SaveSess()
execute 'mksession! ' . getcwd() . '/.session.vim'
endfunction
fu! RestoreSess()
if argc() == 0
if filereadable(getcwd() . '/.session.vim')
execute 'so ' . getcwd() . '/.session.vim'
if bufexists(1)
for l in range(1, bufnr('$'))
if bufwinnr(l) == -1
exec 'sbuffer ' . l
endif
endfor
endif
endif
endif
endfunction
autocmd VimLeave * call SaveSess()
autocmd VimEnter * nested call RestoreSess()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment