Skip to content

Instantly share code, notes, and snippets.

@s3rgeym
Created December 3, 2021 08:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s3rgeym/b574c41b8ee35fe0faf0743ea1e1d3e2 to your computer and use it in GitHub Desktop.
Save s3rgeym/b574c41b8ee35fe0faf0743ea1e1d3e2 to your computer and use it in GitHub Desktop.
" Эти настройки используются при отстутствии пользовательского конфига
source $VIMRUNTIME/defaults.vim
call plug#begin('~/.vim/plugged')
" Убедитесь, что задана переменная окружения $MYVIMRC
autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
\| PlugInstall --sync | source $MYVIMRC
\| endif
" Настройки, которые должны быть по-умолчанию в каждом конфиге
" https://github.com/tpope/vim-sensible
Plug 'tpope/vim-sensible'
" Позволяет оборачивать строку в кавычки, теги и т.д.
" https://githib.com/tpope/vim-surround
Plug 'tpope/vim-surround'
" https://github.com/airblade/vim-gitgutter
Plug 'airblade/vim-gitgutter'
" Менеджер файлов
" https://github.com/scrooloose/nerdtree
Plug 'scrooloose/nerdtree'
nnoremap <C-n> :NERDTreeToggle<CR>
" Иконки для NerdTree
" https://github.com/ryanoasis/vim-devicons
Plug 'ryanoasis/vim-devicons'
" Работа с комментариями
" https://github.com/preservim/nerdcommenter
Plug 'preservim/nerdcommenter'
" Create default mappings
let g:NERDCreateDefaultMappings = 1
" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1
" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1
" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'
" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1
" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }
" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1
" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1
" Enable NERDCommenterToggle to check all selected lines is commented or not
let g:NERDToggleCheckAllLines = 1
" Поиск файлов
" https://github.com/junegunn/fzf.vim
Plug 'junegunn/fzf.vim'
nnoremap <silent> <C-p> :Files<CR>
" Автоподстановка по нажатию Tab
" https://github.com/ervandew/supertab
Plug 'ervandew/supertab'
" Разноцветные скобки разного уровня вложенности
" https://github.com/frazrepo/vim-rainbow
Plug 'frazrepo/vim-rainbow'
let g:rainbow_active = 1
" Автоматическое закрытие скобок
" https://github.com/jiangmiao/auto-pairs
Plug 'jiangmiao/auto-pairs'
" Вешает на ch backspacing
let g:AutoPairsMapCh = 0
" Единственная нормальная цветовая схема
" https://github.com/joshdick/onedark.vim
Plug 'joshdick/onedark.vim'
" Более информативная строка состояния
" https://github.com/itchyny/lightline.vim
Plug 'itchyny/lightline.vim'
let g:lightline = {
\ 'colorscheme': 'onedark',
\ 'separator': { 'left': "\ue0b0", 'right': "\ue0b2" },
\ 'subseparator': { 'left': "\ue0b1", 'right': "\ue0b3" },
\ }
" Линтер с автодополнением
" https://github.com/dense-analysis/ale
Plug 'dense-analysis/ale'
let g:ale_fixers = {
\ '*': ['remove_trailing_lines', 'trim_whitespace'],
\ 'javascript': ['eslint'],
\ 'python': ['black', 'isort'],
\ }
let g:ale_fix_on_save = 1
let g:ale_python_black_options = '-l 79 -S'
let g:ale_linters = {
\ 'javascript': ['eslint'],
\ 'python': ['pylsp'],
\ }
let g:ale_completion_enabled = 1
set omnifunc=ale#completion#OmniFunc
let g:ale_completion_autoimport = 1
" пакет, который ставится через системный пакетный менеджер, имеет другое
" имя исполняемого файла
let g:ale_python_pylsp_executable = 'pyls'
" Не работает
" let g:ale_linters.sh = ['language_server']
" let g:ale_sh_language_server_use_global = 1
nnoremap <silent> gd :ALEGoToDefinition -vsplit<CR>
" Всплывающий терминал
" https://github.com/voldikss/vim-floaterm
Plug 'voldikss/vim-floaterm'
let g:floaterm_keymap_toggle = '<F12>'
call plug#end()
set encoding=utf-8
" Показывать всплывающее меню с вариантами автодополнения при вводе
set completeopt=menu,menuone,preview,noselect,noinsert
" Табуляция и отступы
set ai et ts=2 sts=2 sw=2 cindent
set shiftround
" Умный, регистронезависимый поиск по тексту с подсветкой результатов
set hls ignorecase incsearch smartcase
" Показывать номера строк относительно текущей
set nu rnu
" Выделять текущую строку
set cul
" Показывать ограничитель длины строки
set cc=80
" Отображать специальные символы
set list
" Подсвечивать парные скобки
set showmatch
" Не разбивать слова при переносе строк
set wrap linebreak
" Строка состояния
set laststatus=2
set noshowmode
set splitright " don't split left
set splitbelow " don't split top
" Оптимизация
set lazyredraw
set ttyfast
" Не выгружать буфер из памяти при переключении между ними
set hidden
" Не использовать файлы подкачки, не создавать копии файлов
set noswapfile nobackup nowritebackup " noundofile
" Изменения в файле сохраняем в файл
set undofile undodir=$HOME/.vim/undo
" Используем системный буфер обмена при копировании
" yay -S gvim
set clipboard=unnamedplus
" Влияет на время после которого сработает событие CursorHold
set updatetime=250
" Используем режим отображения True Color
set termguicolors
" Используем темный вариант темы
set background=dark
colorscheme onedark
" Force saving files that require root permission
cnoremap w!! w !sudo tee > /dev/null %
" Leader Key
let mapleader=" "
nnoremap <Space> <Nop>
" Включение/выключение добавления отступов при вставке
set nopaste pastetoggle=<F2>
nnoremap <Leader>w :w<CR> " Сохранить буфер
nnoremap <Leader>q :q<CR> " Закрыть буфер
nnoremap <Leader>Q :qa!<CR> " Закрыть все без сохранения
" Выделить все
nnoremap <Leader>a ggVG
" Навигация между окнами
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Добавить/убрать отступы у выделенного блока
vnoremap > >gv
vnoremap < <gv
" Перемещение по перенесенным строкам
noremap j gj
noremap k gk
map <Up> k
map <Down> j
" Использования стрелочных функций при редактировании лучше избегать, так как
" при 10-пальцевом наборе нельзя убирать правую руку со второй половины
" клавиатупы
" Чтобы лишний не переключаться в нормальный режим...
imap <C-h> <Left>
imap <C-j> <Up>
imap <C-k> <Down>
imap <C-l> <Right>
" Переключению буферов
nnoremap <Leader>[ :bp<CR>
nnoremap <Leader>] :bn<CR>
" Убрать подсветку результатов поиска
nnoremap <silent> <C-l> :nohl<CR><C-l>
" Разбиение окна
nnoremap <Leader>s :sp<CR>
nnoremap <Leader>v :vsp<CR>
" Редактирование и применение конфига
nnoremap <Leader>ev :vsplit $MYVIMRC<CR>
nnoremap <Leader>sv :source $MYVIMRC<CR>
" Выполнить текущий файл
nnoremap <Leader>r :!%:p
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment