Last active
March 5, 2025 17:11
-
-
Save s3rgeym/9b2810072c6183d84ed1d236b5fc5f61 to your computer and use it in GitHub Desktop.
Превращаем Vim в VS Code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" Включаем современные возможности Vim | |
set nocompatible | |
if !exists('$MYVIMRC') | |
let $MYVIMRC = expand('<sfile>:p') | |
endif | |
if empty(glob('~/.vim/autoload/plug.vim')) | |
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs | |
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim | |
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC | |
endif | |
call plug#begin('~/.vim/plugged') | |
" Добавляем плагины сюда | |
" Настройки по умолчанию для Vim | |
Plug 'tpope/vim-sensible' | |
" Файловый менеджер | |
Plug 'preservim/nerdtree' | |
" Нечеткий поиск | |
Plug 'junegunn/fzf.vim' | |
" Плагин для многокурсорного редактирования в Vim: | |
" 1. Нажмите Ctrl-N на слове, чтобы создать курсор. Повторное нажатие Ctrl-N выделяет следующее совпадение. | |
" 2. Используйте Ctrl-Up/Down для добавления курсоров на строки выше/ниже. | |
" 3. Используйте Shift-Left/Right для выделения отдельных символов. | |
" 4. Перейдите в режим редактирования (например, нажмите 'i' для вставки), чтобы одновременно изменять текст на всех курсорах. | |
Plug 'mg979/vim-visual-multi', {'branch': 'master'} | |
" Быстрое перемещение: `s` (вперед) или `S` (назад) + 2 символа. Используйте `;` и `,` для навигации по результатам. | |
Plug 'justinmk/vim-sneak' | |
" Автоматическое закрытие скобок и кавычек | |
Plug 'jiangmiao/auto-pairs' | |
" Оборачивает текст по сочетанию клавиш кавычками, тегами и тп | |
Plug 'tpope/vim-surround' | |
" Комментирование строк кода | |
" gc — комментировать блок | |
" gcc — комментировать строку | |
Plug 'tpope/vim-commentary' | |
" Показываем изменения в Git | |
Plug 'airblade/vim-gitgutter' | |
" Содержит команды для работы с Git | |
Plug 'tpope/vim-fugitive' | |
" Задание настроек форматирования через .editorconfig | |
Plug 'editorconfig/editorconfig-vim' | |
" Линтинг и форматирование | |
Plug 'dense-analysis/ale' | |
" Автодополнение и языковая поддержка | |
Plug 'neoclide/coc.nvim', {'branch': 'release'} | |
" Дебаггер | |
Plug 'puremourning/vimspector' | |
" Строка статуса | |
Plug 'vim-airline/vim-airline' | |
" Тема для vim-airline | |
Plug 'vim-airline/vim-airline-themes' | |
" Иконки для файлов и папок | |
Plug 'ryanoasis/vim-devicons' | |
" Выделение отступов цветом | |
Plug 'nathanaelkane/vim-indent-guides' | |
" Разноцветная подсветка скобок | |
Plug 'luochen1990/rainbow' | |
" Темы | |
" joshdick/onedark.vim | |
" sickill/vim-monokai | |
" rakr/vim-one | |
Plug 'tomasiser/vim-code-dark' | |
call plug#end() | |
" Автоматически ставим отсутствующие плагины | |
" :PlugUpgrade — для обновления самого plug.vim | |
" :PlugClean — для удаления неиспользуемых плагинов | |
autocmd VimEnter * | |
\ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) | |
\| PlugInstall --sync | q | |
\| endif | |
" Основные настройки | |
" Все настройки можно посмотреть с помощью :set | |
" Увеличить историю команд до 1000 | |
set history=1000 | |
" Разрешить переключение буферов без сохранения | |
set hidden | |
" Отключить звуковые сигналы ошибок | |
set noerrorbells | |
" Отключить визуальные сигналы ошибок | |
set novisualbell | |
" Не ограничивать длину строки | |
set textwidth=0 | |
" Отображение интерфейса | |
" Показывать номера строк | |
set number | |
" Отображение специальных символов (например, табы и пробелы) | |
set list listchars=tab:→\ ,trail:·,nbsp:␣,extends:❯,precedes:❮ | |
" Подсвечивать текущую строку | |
set cursorline | |
" Подсвечивать заданные колонки (например, для ограничения длины строки) | |
set cc=81 | |
" Показывать частичные команды в строке состояния | |
set showcmd | |
" Включить поддержку всплывающих подсказок в терминальных версиях Vim | |
set balloonevalterm | |
" Отступы и форматирование | |
" Установить количество пробелов для отображения символа табуляции | |
set tabstop=4 | |
" Установить ширину отступа в пробелах при автоформатировании | |
set shiftwidth=2 | |
" Установить количество пробелов, вставляемых при нажатии Tab | |
set softtabstop=2 | |
" Преобразовывать символы табуляции в пробелы | |
set expandtab | |
" Сохранять отступ предыдущей строки | |
set autoindent | |
" Автоматически добавлять отступ для вложенных блоков кода | |
set smartindent | |
" Использовать стиль отступов для C-подобных языков | |
set cindent | |
" Включить поддержку отступов и плагинов для типов файлов | |
filetype plugin indent on | |
" Поиск | |
" Игнорировать регистр символов при поиске | |
set ignorecase | |
" Учитывать регистр, если запрос содержит заглавные буквы | |
set smartcase | |
" Подсвечивать все совпадения найденного текста | |
set hlsearch | |
" Показывать совпадения по мере ввода поискового запроса | |
set incsearch | |
" Работа с файлами | |
" Установить кодировку текста редактора в UTF-8 | |
set encoding=utf-8 | |
" Установить кодировку сохраняемых файлов в UTF-8 | |
set fileencoding=utf-8 | |
" Определить список кодировок для автоматического определения файла | |
set fileencodings=utf-8,cp1251,koi8-r,cp866 | |
" Автоматически перечитывать файлы, если они изменены извне | |
set autoread | |
" Отключает создание резервных копий, swap-файлов и временных файлов | |
set nobackup nowritebackup noswapfile noundofile | |
" Установить задержку в миллисекундах для записи swap-файлов и события CursorHold | |
set updatetime=300 | |
" Обновлять содержимое буфера при переключении окон или изменении фокуса | |
autocmd FocusGained,BufEnter * checktime | |
" Командная строка | |
" Включить автодополнение в командной строке | |
set wildmenu | |
" Настроить поведение автодополнения (наиболее длинный, затем полный путь) | |
set wildmode=longest,full | |
" Игнорировать указанные типы файлов при автодополнении | |
set wildignore=*.pyc,*.o,*.obj,*~ | |
" Управление окнами | |
" Открывать новые окна ниже текущего | |
set splitbelow | |
" Открывать новые окна справа от текущего | |
set splitright | |
" Прокрутка и перенос строк | |
" Включить перенос строк | |
set wrap | |
" Переносить строки по словам | |
set linebreak | |
" Установить символ, отображаемый при переносе строки | |
set showbreak=↪\ | |
" Оставлять n строк вокруг курсора при вертикальной прокрутке | |
set scrolloff=2 | |
" Настройки, влияющие на производительность | |
" Указать, что соединение с терминалом быстрое (ускоряет отрисовку) | |
set ttyfast | |
" Откладывать перерисовку экрана для ускорения работы при выполнении макросов | |
set lazyredraw | |
" Мышь и клавиатура | |
" Включить поддержку мыши | |
set mouse=a | |
" Установить протокол мыши для более точной обработки событий мыши | |
"set ttymouse=sgr | |
" Изменять курсор в зависимости от режима | |
let &t_SI = "\e[6 q" " INSERT mode | |
let &t_SR = "\e[4 q" " REPLACE mode | |
let &t_EI = "\e[2 q" " NORMAL mode | |
" Использовать системный буфер обмена | |
set clipboard=unnamedplus | |
" Установить задержку в миллисекундах для сочетаний клавиш | |
set timeoutlen=750 | |
" Включить выделение текста с помощью Shift и стрелок | |
set keymodel=startsel,stopsel | |
" Разрешить переход курсора между строками с помощью h, l, <, >, [, ] | |
set whichwrap+=h,l,<,>,[,] | |
" Установить протоколы обработки клавиш для различных терминалов | |
"set keyprotocol=kitty:kitty,foot:kitty,wezterm:kitty,xterm:mok2 | |
" Установить клавишу Leader (пробел) | |
let g:mapleader = "\<Space>" | |
" В Vim сочетания клавиш работают иначе: он обрабатывает символы, а не коды клавиш, что вызывает проблемы при переключении языков, например, с русского на английский. Чтобы избежать переключения раскладки системы, используйте встроенную поддержку русской раскладки в Vim. Переключайтесь между раскладками с помощью <C-^> (Ctrl + 6). Этот метод работает даже без русской локали. | |
set keymap=russian-jcukenwin | |
" Установить английскую раскладку по умолчанию | |
set iminsert=0 | |
" Установить английский язык поиска по умолчанию | |
set imsearch=0 | |
" Переключение в режим для вставки текста без автоматического форматирования | |
set pastetoggle=<F2> | |
" Различные сочетания клавиш | |
" Чтобы проверить не задано ли пльзовательское сочетание можно использовать | |
" `:map x` или `:verbose map x`, и `:help ctrl-n` для встроенных. | |
" Чтобы лишний раз Shift не нажимать | |
" Может конфликтовать с vim-sneak | |
"nnoremap ; : | |
" Копировать всю строку | |
"nnoremap Y y$ | |
" Смена раскладки | |
inoremap <C-L> <C-^> | |
" Выделить только что вставленный текст | |
nnoremap <leader>V V`] | |
" Убрать подсветку результатов поиска | |
" silent скрывает вывод команды | |
nnoremap <silent> <leader>h :nohl<cr> | |
" Переход в нормальный режим | |
inoremap <C-c> <Esc> | |
vnoremap <C-c> <Esc> | |
" Выделение всего текста | |
nnoremap <C-a> ggVG | |
inoremap <C-a> <Esc>ggVG | |
" Добавление и удаление отступов | |
nnoremap > >> | |
nnoremap < << | |
vnoremap < <gv | |
vnoremap > >gv | |
" Выбор окна с зажатым Ctrl | |
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-w>> | |
nnoremap _ <C-w>< | |
"nnoremap <M-Down> <C-w>+ | |
"nnoremap <M-Up> <C-w>- | |
" Разбиение окон | |
nnoremap <leader><CR> :vsplit<CR> | |
" Хотя gt, gT для табов легко запомнить | |
nnoremap <M-Left> :tabprevious<CR> | |
nnoremap <M-Right> :tabnext<CR> | |
nnoremap <M-Up> :bp<CR> | |
nnoremap <M-Down> :bn<CR> | |
" Выбрать буфер из списка | |
nnoremap <leader>l :ls<CR>:b<Space> | |
" Закрыть буфер | |
" https://github.com/preservim/nerdtree/issues/400 | |
noremap <C-x> :bp<cr>:bd #<cr> | |
inoremap <C-x> <Esc>:bp<cr>:bd #<cr> | |
" Список вкладок | |
nnoremap <leader>tl :tabs<CR> | |
" Открыть новую вкладку | |
nnoremap <leader>tn :tabnew<CR> | |
" Закрыть текущую вкладку | |
nnoremap <leader>tc :tabclose<CR> | |
" Закрыть все вкладки, кроме текущей | |
nnoremap <leader>to :tabonly<CR> | |
" Переместить текущую вкладку | |
nnoremap <leader>tm :tabmove<CR> | |
" Открыть файл в новой вкладке | |
nnoremap <leader>te :tabedit | | |
" Выбор вкладки | |
nnoremap <leader>1 1gt | |
nnoremap <leader>2 2gt | |
nnoremap <leader>3 3gt | |
nnoremap <leader>4 4gt | |
nnoremap <leader>5 5gt | |
nnoremap <leader>6 6gt | |
nnoremap <leader>7 7gt | |
nnoremap <leader>8 8gt | |
nnoremap <leader>9 9gt | |
nnoremap <leader>0 :tablast<CR> | |
" Скрыть/раскрыть блок кода | |
nnoremap <leader>z za | |
" Сохранение и закрытие | |
nnoremap <leader>w :w<CR> | |
nnoremap <leader>q :q<CR> | |
nnoremap <leader>Q :qa<CR> | |
" Сохранить файлов с sudo | |
cmap w!! w !sudo tee > /dev/null % | |
" Редактирование конфига в новой вкладке | |
nnoremap <leader>ev :e $MYVIMRC<CR> | |
" Применить конфиг | |
nnoremap <leader>sv :so $MYVIMRC<CR> | |
" Показать все текущие сопоставления клавиш | |
"nnoremap <Leader>m :<C-u>map<CR> | |
" Работа с терминалом | |
" Открыть терминал (Ctrl-t уже используется для тегов, но они бесполезны с LSP) | |
nnoremap <C-t> :<C-u>term<CR> | |
" Размер терминала | |
set termwinsize=10x0 | |
" Переключение в режим прокрутки терминала | |
" Для прокрутки используйте j, k, gg, G, Ctrl+f, Ctrl+b | |
" Для выхода из этого режима надо нажать i или a | |
tnoremap <C-x> <C-\><C-n> | |
" Настройки плагинов | |
" NERDTree | |
" Показать или скрыть файловый проводник | |
nnoremap <leader>t :NERDTreeToggle<CR> | |
" Показывать скрытые файлы | |
let NERDTreeShowHidden=1 | |
augroup NERDTreeConfig | |
au! | |
autocmd StdinReadPre * let s:std_in=1 | |
" Автозапуск NERDTree, если Vim запущен без указания файла | |
autocmd VimEnter * if argc() == 0 && !exists('s:std_in') | NERDTree | endif | |
" Автозапуск NERDTree при открытии файла или если Vim запущен с stdin | |
autocmd VimEnter * NERDTree | if argc() > 0 || exists("s:std_in") | wincmd p | endif | |
" Автозапуск NERDTree при открытии директории | |
autocmd VimEnter * if argc() == 1 && isdirectory(argv()[0]) && !exists('s:std_in') | execute 'NERDTree' argv()[0] | wincmd p | enew | execute 'cd '.argv()[0] | endif | |
" Выходим из Vim, если в единственной вкладке осталось одно окно с NERDTree | |
autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | call feedkeys(":quit\<CR>:\<BS>") | endif | |
" Выходим из Vim, если осталось только одно окно с NERDTree (независимо от количества вкладок) | |
"autocmd BufEnter * if winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | call feedkeys(":quit\<CR>:\<BS>") | endif | |
" Автоматически обновляем список файлов в проводнике | |
autocmd BufEnter NERD_tree_* | execute 'normal R' | |
augroup END | |
" fzf | |
" Размеры всплывающего окна для поиска | |
let g:fzf_layout = { 'window': { 'width': 0.8, 'height': 0.6 } } | |
" Если вместо Ctrl-C нажать Esc, то чтобы вернуть фокус нужно нажать i | |
" Поиск по имени файла в текущем проекте | |
nnoremap <leader>f :Files<CR> | |
" Рекурсивный поиск по содержимому | |
nnoremap <leader>g :Rg<CR> | |
" Поиск в открытых буферах | |
nnoremap <leader>b :Buffers<CR> | |
" Поиск строк в текущем буфере | |
nnoremap <leader>/ :BLines<space><CR> | |
" Включаем label-mode как альтернативу easymotion | |
let g:sneak#label = 1 | |
" Настройки для EditorConfig | |
" Если установлен editorconfig, то используем его | |
if executable('editorconfig') | |
let g:EditorConfig_core_mode = 'external_command' | |
let g:EditorConfig_exec_path = exepath('editorconfig') | |
endif | |
" yay -S ruff python-{isort,rope} | |
" ALE | |
" Включаем автодополнение | |
let g:ale_completion_enabled = 1 | |
" Постоянно отображать столбец для значков (например, ошибок) | |
set signcolumn=yes | |
" Установка omnifunc для использования ALE | |
set omnifunc=ale#completion#OmniFunc | |
" Задаем линтеры для различных языков | |
let g:ale_linters = { | |
\ 'python': ['ruff'], | |
\ 'javascript': ['eslint', 'tsserver'], | |
\ 'json': ['jsonlint'], | |
\ 'html': ['htmlhint'], | |
\ 'css': ['stylelint'], | |
\ 'go': ['gopls'], | |
\ 'bash': ['shellcheck'], | |
\} | |
" Устанавливаем форматтеры для различных языков | |
let g:ale_fixers = { | |
\ '*': ['remove_trailing_lines', 'trim_whitespace'], | |
\ 'python': ['ruff_format', 'isort'], | |
\ 'javascript': ['eslint', 'prettier'], | |
\ 'json': ['prettier'], | |
\ 'html': ['prettier'], | |
\ 'css': ['stylelint', 'prettier'], | |
\ 'go': ['gofmt'], | |
\ 'bash': ['shfmt'], | |
\} | |
" Автоматическое исправление при сохранении | |
let g:ale_fix_on_save = 1 | |
" Запускать только указанные в настройках линтеры | |
"let g:ale_linters_explicit = 1 | |
" Не показывать ошибки о пробелах в конце строки | |
let g:ale_warn_about_trailing_whitespace = 0 | |
" Показывать текст ошибки только для текущей строки | |
let g:ale_virtualtext_cursor = 'current' | |
" Запускать линтинг только после сохранения файла | |
"let g:ale_lint_on_text_changed = 0 | |
"let g:ale_lint_on_enter = 0 | |
"let g:ale_lint_on_save = 1 | |
" Всегда использовать signcolumn | |
let g:ale_sign_column_always = 1 | |
" Поддержка ale в airline | |
let g:airline#extensions#ale#enabled = 1 | |
" Переходы между ошибками | |
nmap <silent> <leader>k <Plug>(ale_previous_wrap) | |
nmap <silent> <leader>j <Plug>(ale_next_wrap) | |
" Настройки coc.nvim | |
" :CocConfig — некоторые настройки можно задать только так | |
" :CocInstall <extension> — поставить расширение | |
" :CocList extensions — список установленных расширений | |
" :CocInstall coc-marketplace — добавить маркетплейс | |
" :CocList marketplace — поиск расширений в маркетплейсе | |
" Список расширений, которые будут установлены автоматически: | |
let g:coc_global_extensions = [ | |
\ 'coc-css', | |
\ 'coc-git', | |
\ 'coc-go', | |
\ 'coc-html', | |
\ 'coc-json', | |
\ 'coc-marketplace', | |
\ 'coc-pyright', | |
\ 'coc-sh', | |
\ 'coc-tsserver', | |
\ 'coc-vetur', | |
\ 'coc-vimlsp', | |
\ 'coc-yaml', | |
\ ] | |
" Пример конфига: | |
" https://github.com/neoclide/coc.nvim#example-vim-configuration | |
" Все это конфликтует с SuperTab, а потому его лучше не использовать | |
" Выбор вариантов с Tab и Shift+Tab | |
inoremap <silent><expr> <TAB> | |
\ coc#pum#visible() ? coc#pum#next(1) : | |
\ CheckBackspace() ? "\<Tab>" : | |
\ coc#refresh() | |
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" | |
" Подтверждение выбора в автодополнении | |
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() | |
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>" | |
function! CheckBackspace() abort | |
let col = col('.') - 1 | |
return !col || getline('.')[col - 1] =~# '\s' | |
endfunction | |
" Вызов меню автоподстановки сочетанием клавиш Ctrl-2 | |
inoremap <silent><expr> <C-@> coc#refresh() | |
" Навигация по списку автодополнения | |
"inoremap <silent><expr> <C-n> coc#pum#next(1) | |
"inoremap <silent><expr> <C-p> coc#pum#prev(1) | |
" Используйте `[g` и `]g` для навигации по диагностическим сообщениям | |
nmap <silent> [g <Plug>(coc-diagnostic-prev) | |
nmap <silent> ]g <Plug>(coc-diagnostic-next) | |
" Переход к определению (gd), определению типа (gy), реализации (gi), ссылкам (gr) | |
nmap <silent> gd <Plug>(coc-definition) | |
nmap <silent> gy <Plug>(coc-type-definition) | |
nmap <silent> gi <Plug>(coc-implementation) | |
nmap <silent> gr <Plug>(coc-references) | |
" Переход к определению, определению типа, реализации, ссылкам в новом окне | |
nmap <silent> <leader>gd :call CocAction('jumpDefinition', 'split')<CR> | |
nmap <silent> <leader>gy :call CocAction('jumpTypeDefinition', 'split')<CR> | |
nmap <silent> <leader>gi :call CocAction('jumpImplementation', 'split')<CR> | |
nmap <silent> <leader>gr :call CocAction('jumpReferences', 'split')<CR> | |
" Показать подсказку | |
nnoremap <silent> K :call ShowDocumentation()<CR> | |
function! ShowDocumentation() | |
if CocAction('hasProvider', 'hover') | |
call CocActionAsync('doHover') | |
else | |
call feedkeys('K', 'in') | |
endif | |
endfunction | |
" Подсветка символа и ссылок на него при задержке курсора | |
autocmd CursorHold * silent call CocActionAsync('highlight') | |
" Переименование символа | |
nmap <silent> <leader>rn <Plug>(coc-rename) | |
" Форматирование выделенного кода | |
xmap <leader>cf <Plug>(coc-format-selected) | |
nmap <leader>cf <Plug>(coc-format-selected) | |
augroup mygroup | |
autocmd! | |
" Настройка formatexpr для указанных типов файлов | |
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') | |
" Обновление подсказки подписи при переходе на заполнитель | |
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') | |
augroup end | |
" Применение действий с кодом к выделенному блоку кода | |
" Пример: `<leader>aap` для текущего абзаца | |
xmap <leader>a <Plug>(coc-codeaction-selected) | |
nmap <leader>a <Plug>(coc-codeaction-selected) | |
" Переназначение клавиш для применения действий с кодом в позиции курсора | |
nmap <leader>ac <Plug>(coc-codeaction-cursor) | |
" Переназначение клавиш для применения действий с кодом ко всему буферу | |
nmap <leader>as <Plug>(coc-codeaction-source) | |
" Вызов quick fix | |
nmap <leader>qf <Plug>(coc-fix-current) | |
" Сочетания клавиш для применения рефакторинга кода | |
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor) | |
xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) | |
nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected) | |
" Настройки выделения функций и классов (их можно закомментировать) | |
" Выделение внутренней части функции, без фигурных скобок, в режиме выделения | |
xmap if <Plug>(coc-funcobj-i) | |
" Выделение внутренней части функции, без фигурных скобок, в режиме оператора | |
omap if <Plug>(coc-funcobj-i) | |
" Выделение всей функции, включая фигурные скобки, в режиме выделения | |
xmap af <Plug>(coc-funcobj-a) | |
" Выделение всей функции, включая фигурные скобки, в режиме оператора | |
omap af <Plug>(coc-funcobj-a) | |
" Выделение внутренней части класса, без фигурных скобок, в режиме выделения | |
xmap ic <Plug>(coc-classobj-i) | |
" Выделение внутренней части класса, без фигурных скобок, в режиме оператора | |
omap ic <Plug>(coc-classobj-i) | |
" Выделение всего класса, включая фигурные скобки, в режиме выделения | |
xmap ac <Plug>(coc-classobj-a) | |
" Выделение всего класса, включая фигурные скобки, в режиме оператора | |
omap ac <Plug>(coc-classobj-a) | |
" Прокрутка во всплывающих окнах с Ctrl-F и Ctrl-B (в обратном порядке) | |
if has('nvim-0.4.0') || has('patch-8.2.0750') | |
nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" | |
inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" | |
vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" | |
vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" | |
endif | |
" Быстрое выделение блоков кода | |
nmap <silent> <C-s> <Plug>(coc-range-select) | |
xmap <silent> <C-s> <Plug>(coc-range-select) | |
" Добавление команд | |
" Добавляем команду :Format для форматирования текущего буфера | |
command! -nargs=0 Format :call CocActionAsync('format') | |
" Добавляем команду :Fold для свертывания текущего буфера | |
command! -nargs=? Fold :call CocAction('fold', <f-args>) | |
" Добавляем команду :OR для организации импортов текущего буфера | |
command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') | |
" Тут вызовы кучи функций с префиксом c, каким-то часто используемым его можно | |
" убрать | |
" Вызов Code Lens Action | |
nmap <silent> <leader>cl <Plug>(coc-codelens-action) | |
" Показать все диагностические сообщения | |
nnoremap <silent><nowait> <leader>cd :<C-u>CocList diagnostics<CR> | |
" Управление расширениями (плагинами) | |
nnoremap <silent><nowait> <leader>ce :<C-u>CocList extensions<CR> | |
" Открытие всплывающего окна с выбором команд | |
nnoremap <silent><nowait> <leader>cc :<C-u>CocList commands<CR> | |
" Найти символы в текущем документе | |
nnoremap <silent><nowait> <leader>co :<C-u>CocList outline<CR> | |
" Поиск символов в рабочей области | |
nnoremap <silent><nowait> <leader>cs :<C-u>CocList -I symbols<CR> | |
" Выполнить действие по умолчанию для следующего элемента | |
nnoremap <silent><nowait> <leader>cj :<C-u>CocNext<CR> | |
" Выполнить действие по умолчанию для предыдущего элемента | |
nnoremap <silent><nowait> <leader>ck :<C-u>CocPrev<CR> | |
" Возобновить последний список coc | |
nnoremap <silent><nowait> <leader>cr :<C-u>CocListResume<CR> | |
" Настройки для vimspector | |
" https://github.com/puremourning/vimspector | |
" Включаем сочетания клавиш для vimspector | |
let g:vimspector_enable_mappings = 'HUMAN' | |
" Включаем иконки для файлов и папок | |
let g:webdevicons_enable = 1 | |
let g:webdevicons_enable_nerdtree = 1 | |
let g:webdevicons_enable_airline_tabline = 1 | |
let g:webdevicons_enable_airline_statusline = 1 | |
" Включаем выделение отступов цветом | |
let g:indent_guides_enable_on_vim_startup = 1 | |
" Включаем разноцветную подсветку скобок | |
let g:rainbow_active = 1 | |
" Отключаем свертывание в markdown | |
let g:vim_markdown_folding_disabled = 1 | |
" Общие настройки для airline/lightline | |
" Не показывать текущий режим в строке статуса | |
set noshowmode | |
" Всегда показывать строку состояния | |
set laststatus=2 | |
" Всегда показывать строку с вкладками | |
set showtabline=2 | |
" Настройки для vim-airline | |
" Включаем отображение вкладок | |
let g:airline#extensions#tabline#enabled = 1 | |
" Показывать номера буферов | |
let g:airline#extensions#tabline#buffer_nr_show = 1 | |
" Включаем поддержку Powerline шрифтов | |
let g:airline_powerline_fonts = 1 | |
" Включить отображение информации о сочетании клавиш | |
let g:airline#extensions#keymap#enabled = 1 | |
" Устанавливаем тему для vim-airline | |
let g:airline_theme = 'codedark' | |
" Тема и оформление | |
" Цветовая палитра | |
if exists('+termguicolors') | |
" Используем 24-битные цвета | |
set termguicolors | |
else | |
" Используем 256 цветов | |
set t_Co=256 | |
endif | |
" Включить подсветку синтаксиса | |
syntax enable | |
" Установить темный фон | |
set background=dark | |
" Установливаем тему, подавляя вывод ошибок, если та отсутствует | |
silent! colorscheme codedark | |
" Убираем артефакты терминала | |
" https://github.com/kovidgoyal/kitty/issues/1536 | |
set t_RV= | |
" Перезапускаем kitty при изменении конфига | |
autocmd BufWritePost ~/.config/kitty/kitty.conf silent !pkill -SIGUSR1 kitty |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Нужно установить переменную
export MYVIMRC=~/.vim/.vimrc