LINUX.ORG.RU

настройка vim

 


0

1

Решил я намедни, недавеча как вчера, настроить vim:

" отключаем режим совместимости с vi
set nocompatible

" разрешить копирование из vim в системный буфер обмена
set clipboard=unnamedplus

" кодировка по-умолчанию
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=utf8,cp1251

" включить поддержку 256 цветов
set t_Co=256

" навигация по словам: какие символы входят в состав слова
set iskeyword=@,48-57,_,192-255

" подсветка синтаксиса
syntax on

" включить определение синтаксиса и отступов по типу файла с применением плагинов
filetype indent plugin on

" отступы

" автоматически определять отступы
set autoindent
" количество пробелов, добавляемых с помощью команд << и >>
set shiftwidth=2
" количество пробелов, которыми отображается символ табуляции
set tabstop=2
" при нажатии tab в начале строки, добавляет отступ, равный shiftwith
set smarttab
" в режиме вставки заменяет табы на пробелы
set expandtab

" сворачивание
set foldmethod=indent
set foldlevel=1
set foldclose=all

" подсвечивать найденное
set hlsearch
" поиск по мере ввода
set incsearch
" игнорировать регистр при поиске, если в запросе нет заглавных
set ignorecase
set smartcase

" удалять отступы по нажатию на backspace
set backspace=indent,eol,start

" подсвечивать текущую строку
set cursorline
" количество строк, которое всегда отображается до и после курсора
" прокрутка от середины
"set scrolloff=999
set scrolloff=1

" при переходе на новую строку, принудительно не перемещать курсор в ее начало
set nostartofline

" показывать диалог при наличии несохраненных изменений
set confirm

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

" автоматически перечитывать файл при его изменении
set autoread

" автоматически менять рабочий каталог
set autochdir

" показывать номера строк
set number
" показывать номера строк относительно текущей
set relativenumber

" показывать парные скобки
set showmatch

" переносить длинный текст на новую строку
set wrap

" длина строки
set textwidth=80

" не разрывать слова при переносе
set linebreak

" показывать имя буфера в заголовке
set title

" показывать положение курсора
set ruler

" показывать незавершенные команды
set showcmd

" показывать дополнительную информацию в строке состояния
set wildmenu
set wildmode=longest:list,full

" мерцание экрана вместо издавания звука биппера при ошибках
set visualbell

" не сигнализировать об ошибках
set noerrorbells

" отображение специальных символов
set showbreak=↪
set list listchars=tab:→\ ,nbsp:␣,trail:•,extends:⟩,precedes:⟨

" всегда показывать строку состояния
set laststatus=2

" строка состояния
set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P

" отключить создание backup, swap и undo файлов
"set nobackup
"set noswapfile
"set noundofile

" задаем альтернативные пути для backup, swap и undo файлов
" при наличии «//» в конце пути vim будет сохранять файлы под полным именем, заменяя «/» в имени на «%»
set backupdir=.backup/,~/.vim/backup//,/tmp//
set directory=.swp/,~/.vim/swp//,/tmp//
set undodir=.undo/,~/.vim/undo//,/tmp//

" размер истории команд и поиска
set history=10000

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

" мышь
if has('mouse')
  set mouse=a
endif

" клавиатура

set notimeout          " don't timeout on mappings
set ttimeout           " do timeout on terminal key codes
set timeoutlen=100     " timeout after 100 msec

" leader key
let mapleader="\<Space>"

" быстрая запись
nmap <leader>w :w!<cr>

" :W для записи файлов, требующих повышенных привелегий
command W w !sudo tee % > /dev/null

" перемещение между окнами
nmap <leader>h <c-w>h
nmap <leader>l <c-w>l
nmap <leader>k <c-w>k
nmap <leader>j <c-w>j

" разбиение экрана
nmap <leader>s :split<cr>
nmap <leader>- :split<cr>
nmap <leader>v :vsplit<cr>
nmap <leader>/ :vsplit<cr>

" буферы
nmap <tab> :bn<cr> " следующий
nmap <S-tab> :bp<cr> " предыдущий

" закрыть текущий буфер
nmap <leader>x :close<cr>

" вкладки
nmap <leader>t :tabnew<cr>
"nmap ? :tabclose<cr>
"nmap ? :tabmove<cr>
nmap <leader>] :tabnext<cr>
nmap <leader>[ :tabprevious<cr>

" отступы в визуальном режиме
vmap < <gv
vmap > >gv

И возник у меня такой вопрос: а как лучше всего кейбиндинги настроить? Так же я не уверен, что все настройки правильно прописал. Поделитесь своими бнастройками, позазя


И возник у меня такой вопрос: а как лучше всего кейбиндинги настроить?

Лучше всего их вообще не настраивать. А вот если что-то покажется уж слишком неудобным, или захочется одной кнопкой делать несколько действий - тогда уже править через конфиг.

Kroz ★★★★★ ()

set termencoding=utf-8

Никогда это не выставлял, но может не вредит.

set fileencoding=utf-8

Не думаю, что это имеет какой-то эффект в vimrc.

" включить поддержку 256 цветов
set t_Co=256

Если терминал нормально настроен, то этого костыля не должно быть.

nmap, vmap

Лучше, nnoremap и vnoremap, если не нужно обратного.

В Интернете куча примеров конфигураций, часть с хорошими комментариями и предназначенные для чтения, а есть такие как мои. Только что увидел там:

" edit visual selection in new tab
xnoremap ,t y:tabe<cr>Vp

Прикольно, напрочь забыл, что делал такое. Как и про ещё треть из закоммиченного конфига…

Можно это почитать и не делать из vimrc такой трешак как я.

xaizek ★★★★★ ()