Vim - это очень сложный, но в то же время очень популярный текстовый редактор текста среди пользователей операционных систем Linux. Программа позволяет перемещаться по тексту и выполнять большинство действий с помощью клавиатуры, это очень сильно ускоряет работу за компьютером, поэтому что вам не надо постоянно переносить руку на мышь и обратно.
В нескольких предыдущих статьях я рассказывал про основы работы с Vim и основные команды программы, сегодня же хочу поговорить о настройке и персонализации программы. Добавление нескольких строчек в конфигурационный файл может сделать Vim намного удобнее. Несмотря на то, что в тексте я буду писать Vi, речь будет идти про современную версию редактора - Vim.
Содержание статьи
Настройка редактора Vim
Основной конфигурационный файл Vim находится в папке /etc/. Это файл /etc/vimrc/vimrc. Кроме того, для каждого отдельного пользователя можно настроить Vi с помощью локального конфигурационного файла, который находится в домашней папке ~/.vimrc. Вы можете использовать тот файл, который вам надо, например:
vim ~/.vimrc
Я рекомендую комментировать если не каждую строчку, то хотя бы каждую секцию, потому что если вы этого не будете делать, то потом не разберетесь что и зачем добавляли. Для комментария добавьте перед строкой символ кавычки - ".
1. Отступы и нумерация строк
Если вы собрались программировать в Vi, то вам надо обязательно разобраться с отступами. В стандартах многих языков программирования рекомендуется использовать пробелы вместо табов, а каждый отступ оформлять фиксированным количеством пробелов, например, стандарт Python PEP-8 рекомендует использовать четыре пробела. Чтобы это настроить добавьте такие строки:
Переменная expandtab включает замену табов на пробелы, tabstop - количество пробелов в одном обычном табе, softtabstop - количество пробелов в табе при удалении, smarttab - при нажатии таба в начале строки добавляет количество пробелов равное shiftwidth.
Чтобы добавить нумерацию строк добавьте такую команду:
Раз мы уже заговорили про отступы, давайте сделаем ещё небольшой отступ между левой частью окна:
2. Внешний вид
Для редактора доступно несколько цветовых схем. Вы можете посмотреть все доступные схемы открыв редактор и набрав там команду :colorscheme, затем пробел, а затем Tab:
Для выбора цветовой схемы на постоянной основе добавьте в конфигурационный файл такую строчку
colorscheme имя_цветовой_схемы
Например:
Для многих языков программирования есть подсветка синтаксиса, чтобы её включить добавьте:
3. Звук
При нажатии неверной клавиши или ошибке в Vim проигрывается специальный звук. Если он вам мешает, его можно отключить:
4. Поддержка мыши
Если вы работаете в графическом окружении, то, возможно, вам понадобиться поддержка мышки. Поддержка может быть добавлена в несколько режимов работы программы:
- n - обычный режим;
- v - визуальный режим (режим выделения);
- i - режим вставки;
- c - режим командой строки;
- a - все перечисленные ранее режимы;
- r - для режима "Нажмите Enter" или запроса ввода информации.
В большинстве случаев чтобы включить мышку во всех режимах программы достаточно добавить такую строчку:
Также можно включить мышку только в визуальном режиме:
Или вовсе её отключить:
При включённой поддержке мыши, вы все ещё можете копировать текст в системный буфер обмена, для этого просто зажмите клавишу Shift.
5. Настройка привязок
Очень полезная возможность Vim - это настройка своих привязок клавиш. Для этого существует функция map. Она похожа на alias в Linux и сообщает программе, что если мы вводим что-то, то хотим сделать ещё что-то. Здесь прежде чем переходить к настройке нужно понять как это работает. Синтаксис map простой:
map набор_символов_или_сочетание_клавиш на_что_заменить
Откройте редактор и выполните там команду:
При вводе набора символов losst программа нажимает клавишу Esc, затем вводит i чтобы перейти в режим редактирования, потом пишет приветствие и добавляет символ перевода строки. Клавиши, которые надо нажать пишутся в скобках <>.
Мы рассмотрели общую команду map, но существуют также отдельные команды для других режимов:
- nmap - нормальный режим;
- vmap - визуальный режим;
- omap - режим, когда выбран оператор действия (y,p или d);
- cmap - режим командной строки;
- imap - режим вставки.
Кроме того есть не рекурсивный вариант команды. Например, если на слово Hello назначить ещё одну замену, то в нашем примере она сработает. Но в не рекурсивном варианте всё равно будет вставлено Hello. Не рекурсивные варианты команды тоже есть для всех режимов, это noremap, vnoremap, nnoremap, onoremap, cnoremap и inoremap.
Но это ещё не всё. В начале пользовательских привязок клавиш принято использовать клавишу <leader> по умолчанию это обратный слеш. Например, если сделать вот так:
Тогда для выполнения этой привязки надо набрать \losst. Использовать обратный слеш не всегда удобно, поэтому часто его заменяют на запятую. Для этого в конфигурационный файл надо добавить:
Теперь вы знаете как настроить привязки клавиш в vim и что это всё означает. Теперь можно добавить сочетание клавиш для быстрого сохранения:
Поиск дальше нажатием пробела:
Поиск предыдущего вхождения по нажатию Ctrl+Пробел:
Более удобное перемещение между открытыми вкладками редактора:
Включение или отключение проверки орфографии:
Таким образом, вы можете сделать более удобным и быстрым любое действие в редакторе.
6. Буфер обмена
Vim использует специальный внутренний буфер обмена для копирования и вставки текста, он никак не связан с системным. Постоянная проблема пользователей Vim в графическом интерфейсе, это невозможность что-либо скопировать непосредственно из визуального режима Vim в системный буфер обмена. Если окно редактора пусто, нет никаких дополнительных настроек или плагинов, можно просто копировать текст из терминала, но если запустить vim в tmux или screen, то тут уже возникнет проблема. Она решается. В Vim существуют специальные регистры для системного буфера обмена, это + и *. К ним можно получить доступ с помощью клавиши ".
Но сначала надо убедится, что ваша версия Vim поддерживает работу с системным буфером обмена. Для этого выполните:
vim --version | grep clipboard
Если вы видите надпись +clipboard, значит всё хорошо. В противном случае надо искать другую версию vim. В Ubuntu или Debian для поддержки буфера обмена можно установить пакет vim-gtk:
sudo apt install vim-gtk
Теперь, когда вы нажмете "+y в визуальном режиме, выделенный текст будет скопирован в системный буфер обмена, а при нажатии "+p в обычном режиме, содержимое буфера обмена будет вставлено в позицию курсора. Для большего удобства можно добавить горячие клавиши:
Теперь чтобы вставить из буфера vim будет достаточно нажать Ctrl+V, а для копирования в буфер обмена системы - Ctrl+C.
7. Настройка поиска
Давайте немного настроим поиск. Для того чтобы игнорировать регистр при поиске добавьте в конфигурационный файл:
Подсвечивать результаты поиска:
Чтобы программа подсказывала первое вхождение при вводе шаблона поиска добавьте:
8. Команды
Для сохранения, открытия нового файла в программе и выполнения многих других операций мы вводим команды. Но кроме предустановленных команд вы можете добавлять свои. Для этого используется такая конструкция:
command опции имя действие
В качестве действия может быть указано выполнение какой-либо команды, нажатие клавиш, как в случае с привязками или вызов какой-либо функции. Это очень обширная тема, поэтому я не буду трогать её в этой статье.
Добавьте такую строчку чтобы с помощью команды :W можно было сохранить файл, если он открыт не через sudo:
9. Плагины
Для Vim существует огромное количество различных плагинов и начиная с восьмой версии появилась своя система управления пакетами. Все пакеты должны располагаться в папке ~/.vim, подпапке pack/vendor/start или pack/vendor/opt. Файлы из подпапки start загружаются автоматически при старте программы, и из opt надо подгружать вручную.
Например, давайте установим такой популярный плагин, как NerdTree. Для этого просто склонируйте его с GitHub в эту папку:
git clone https://github.com/preservim/nerdtree.git ~/.vim/pack/vendor/start/nerdtree
После этого разработчики рекомендуют выполнить такую команду, чтобы загрузить страницы справки:
vim -u NONE -c "helptags ~/.vim/pack/vendor/start/nerdtree/doc" -c q
После этого вы можете запустить программу и набрать такую команду для активации панели выбора файлов:
Можно добавить горячую клавишу на открытие панели, для этого добавьте в конфигурационный файл:
Установим для примера ещё один плагин, Vim , который позволяет выполнять unix команды прямо в командной строке редактора:
git clone https://tpope.io/vim/eunuch.git ~/.vim/pack/vendor/start/eunuch
Загрузка справки:
vim -u NONE -c "helptags ~/.vim/pack/vendor/start/eunuch/doc" -c q
Перезагрузите Vim и вы сможете пользоваться и этим плагином. Вообще, вы можете найти подробную инструкцию по установке любого нужного вам плагина на GitHub странице самого плагина.
10. Кодировка
Часто при открытии в Vim тестовых файлов с кириллическими символами, те отображаются неверно. Чтобы они отображались как надо следует выбрать кодировку UTF-8 по умолчанию:
Также можно установить стандарт использования символов переноса строки в файлах:
В данном случае на первом месте находится вариант Unix, где для переноса строки используется только символ \n.
Выводы
В этой статье я постарался детально разобрать как выполняется настройка Vim. Вы узнали о базовых переменных, которые надо установить чтобы изменить внешний вид, о привязках клавиш, а также о том как устанавливать плагины. К тому же у нас получился такой файл ~/.vimrc:
Даже этот небольшой конфигурационный файл уже может сильно помочь вам в работе, а дальше останется только расширять его дополнительными командами и привязками клавиш. А какие команды и привязки используете вы? Какие плагины? Поделитесь в комментариях!
Anubis – это максимально легкое open-source решение, созданное специально для защиты небольших веб-ресурсов от бесконечного потока запросов от ботов и AI парсеров. Этот инструмент можно считать "ядерным вариантом", потому что он заставляет ботов выполнять вычисления похожие на майнинг криптовалюты. Но это неплохая альтернатива для тех, кто не может или не хочет использовать Cloudflare. Посмотреть детали












set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'valloric/youcompleteme'
Plugin 'xolox/vim-easytags'
Plugin 'majutsushi/tagbar'
Plugin 'tpope/vim-fugitive'
Plugin 'easymotion/vim-easymotion'
Plugin 'ctrlpvim/ctrlp.vim'
Plugin 'terryma/vim-multiple-cursors'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'scrooloose/nerdcommenter'
Plugin 'matze/vim-move'
Plugin 'raimondi/delimitmate'
Plugin 'mattn/emmet-vim'
Plugin 'scrooloose/syntastic'
Plugin 'tpope/vim-surround'
Plugin 'sirver/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'xolox/vim-session'
Plugin 'xolox/vim-misc'
Plugin 'SyntaxAttr.vim'
Plugin 'dyng/ctrlsf.vim'
Plugin 'rking/ag.vim'
Plugin 'godlygeek/tabular'
Plugin 'stanangeloff/php.vim'
Plugin 'sumpygump/php-documentor-vim'
Plugin 'arnaud-lb/vim-php-namespace'
Plugin 'pangloss/vim-javascript'
Plugin 'othree/html5.vim'
Plugin 'evidens/vim-twig'
Plugin 'mtscout6/vim-tagbar-css'
Plugin 'damage220/solas.vim'
Plugin 'nanotech/jellybeans.vim'
Plugin 'mhartington/oceanic-next'
call vundle#end()
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoread
set autoindent
set smartindent
set encoding=utf-8
set termencoding=utf-8
set splitright
set cursorline
set nocp
set nu
set laststatus=2
set ruler
set nowrap
syntax enable
set background=dark
colorscheme solas
set visualbell t_vb=
set novisualbell
let g:session_autosave = 'no'
set fileformat=unix
set statusline=%f%m%r%h%w\ %y\ enc:%{&enc}\ ff:%{&ff}\ fenc:%{&fenc}%=(ch:%3b\ hex:%2B)\ col:%2c\ line:%2l/%L\ [%2p%%]
Thanks
опечатка
set colorscheme delek а должно быть colorscheme delek
Поправил.
Vim крутой
"=============================================================================
"=============================== BASIC SETTINGS ==============================
"=============================================================================
filetype plugin indent on
highlight SpellBad ctermfg=Black ctermbg=Red
hi StatusLine gui=reverse cterm=reverse
set autoread
set backup
set browsedir=current
set clipboard=unnamed
set encoding=utf-8
set hidden
set history=128
set mouse=a
set nocompatible
set noswapfile
set sessionoptions=curdir,buffers,tabpages
set t_Co=256
set termencoding=utf-8
set title
set undolevels=2048
"=============================================================================
"============================== EDITOR SETTINGS ==============================
"=============================================================================
autocmd CursorMoved * silent! exe printf("match Search /\\/", expand(''))
let c_syntax_for_h=""
let python_highlight_all = 1
set backspace=indent,eol,start
set laststatus=2
set linebreak
set list
set listchars=tab:>-,trail:-
set mps+=
set noruler
set number
set scrolloff=4
set showcmd
set showmatch
set textwidth=80
set visualbell
set wrap
syntax enable
"=============================================================================
"================================= COLORSCHEME ===============================
"=============================================================================
if empty(glob('~/.vim/colors/sublimemonokai.vim'))
silent !curl -fLo ~/.vim/colors/sublimemonokai.vim --create-dirs
\ https://raw.githubusercontent.com/ErichDonGubler/vim-sublime-monokai/master/colors/sublimemonokai.vim
endif
set background=dark
colorscheme sublimemonokai
"=============================================================================
"============================ INDENTATION SETTINGS ===========================
"=============================================================================
set autoindent
set expandtab
set pastetoggle=
set shiftwidth=4
set smarttab
set smartindent
set softtabstop=4
set tabstop=4
au FileType crontab,fstab,make set noexpandtab tabstop=8 shiftwidth=8
au FileType *.htm,*.html,*.css,*.js set softtabstop=2 tabstop=2 shiftwidth=2 textwidth=120
"=============================================================================
"===================== AUTO-COMPLETION OF INPUT (omnifunct) ==================
"=============================================================================
autocmd FileType python set omnifunc=pythoncomplete#Complete
autocmd FileType tt2html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript set omnifunc=javascriptcomplete#CompleteJS
autocmd FileType html set omnifunc=htmlcomplete#CompleteTags
autocmd FileType css set omnifunc=csscomplete#CompleteCSS
autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags
autocmd FileType php set omnifunc=phpcomplete#CompletePHP
autocmd FileType c set omnifunc=ccomplete#Complete
set completeopt=menu
"=============================================================================
"====================== COLLAPSING TEXT BLOCKS (folding) =====================
"=============================================================================
set foldenable
"set foldmethod=syntax
set foldmethod=indent
set foldcolumn=1
set foldlevel=2
set foldopen=all
set tags=tags\ $VIMRUNTIME/systags
"=============================================================================
"========================== FILE MANAGEMENT SETTINGS =========================
"=============================================================================
set fileformat=unix
set fencs=utf-8,cp1251,koi8-r,cp866
autocmd! bufwritepre $MYVIMRC call setline(1, '"" Last update: '.strftime("%d.%m.%Y %H:%M"))
filetype on
filetype plugin on
filetype indent on
autocmd FileType perl call SetPerlConf()
set path=.,,**
"=============================================================================
"============================= TEXT SEARCH SETTINGS ==========================
"=============================================================================
map /
map ?
set ignorecase
set incsearch
set nohlsearch
set smartcase
vnoremap * :call VisualSearch()//
vnoremap # :call VisualSearch()?/
"=============================================================================
"================================= PLUGINS ===================================
"=============================================================================
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/bundle')
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""" Code/Project Navigation """"""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'scrooloose/nerdtree' "
Plug 'jistr/vim-nerdtree-tabs' "
Plug 'majutsushi/tagbar' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""" AWK """"""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'vim-scripts/awk.vim' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""" HTML/CSS/XML """""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'tpope/vim-surround' "
Plug 'othree/html5.vim' "
Plug 'hail2u/vim-css3-syntax' "
Plug 'shmargum/vim-sass-colors' "
Plug 'ap/vim-css-color' "
Plug 'Ioannis-Kapoulas/vim-autoprefixer' "
Plug 'othree/xml.vim' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""" Java """"""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'uiiaoo/java-syntax.vim' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""" JavaScript """"""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'pangloss/vim-javascript' "
Plug 'jelera/vim-javascript-syntax' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""" Nginx """""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'chr4/nginx.vim' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""" PHP """"""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'stanangeloff/php.vim' "
Plug 'phpactor/phpactor' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""" Python """"""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'klen/python-mode' "
Plug 'nvie/vim-flake8' "
Plug 'mitsuhiko/vim-jinja' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""" Ruby """"""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug 'vim-ruby/vim-ruby' "
Plug 'tpope/vim-rails' "
"""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
""""""""""""""""""""" Other """""""""""""""""""""
"""""""""""""""""""""""""""""""""""""""""""""""""
Plug '907th/vim-auto-save' "
Plug 'vim-syntastic/syntastic' "
Plug 'ycm-core/YouCompleteMe' "
Plug 'tpope/vim-fugitive' "
Plug 'airblade/vim-gitgutter' "
Plug 'fisadev/FixedTaskList.vim' "
Plug 'vim-scripts/taglist.vim' "
Plug 'frazrepo/vim-rainbow' "
Plug 'itchyny/lightline.vim' "
Plug 'preservim/nerdcommenter' "
"""""""""""""""""""""""""""""""""""""""""""""""""
call plug#end()
"=============================================================================
"=============================== PLUGIN SETTINGS =============================
"=============================================================================
"""""""""""""""""""""""""""""""""""""""
""""""""""""""" NERDTree """"""""""""""
"""""""""""""""""""""""""""""""""""""""
autocmd vimenter * NERDTree
map :NERDTreeToggle
:let g:NERDTreeWinSize=24
let NERDTreeIgnore=['\.pyc$', '\~$']
let NERDTreeMapOpenInTab='\r'
"""""""""""""""""""""""""""""""""""""""
"""""""""""""" Syntastic """"""""""""""
"""""""""""""""""""""""""""""""""""""""
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
"""""""""""""""""""""""""""""""""""""""
"""""""""""" FixedTaskList """"""""""""
"""""""""""""""""""""""""""""""""""""""
map :TaskList
Great Work/ Thanks
Здравствуйте уважаемые. Никак не смог найти в сети инфу о том как удалить редактор vim/vi. Я удалял командой apt autoremove vim. Сегодня случайно ввел vi и открылось то же самое окошко. Это как понимать? Помогите удалить весь этот редактор.
У vi есть две версии - расширенная - vim и упрощённая vi. Для того чтобы удалить ещё и упрощённую удалите пакет vim.tiny: