Ребята! Ну вы чего! Только VIM, только скорость и решительность!
Пора явить интернету очередной гайд по настройке VIM для работы с Python day by day. Может быть, я смогу направить и вас на истинный путь тру девелопмента.
Установка
*NIX / Linux
В вашем *NIX / Linux, скорее всего уже есть vim. Проверяем:
vim --version
Вывод должен быть похож на этот:
VIM - Vi IMproved 8.2 (2019 Dec 12, собрано Apr 14 2020 16:54:38)
Заплатки: 1-577
Огромная версия без графического интерфейса.
Включённые(+) и отключённые(-) особенности:
+acl -farsi +mouse_sgr +tag_binary
+arabic +file_in_path -mouse_sysmouse -tag_old_static
+autocmd +find_in_path +mouse_urxvt -tag_any_white
+autochdir +float +mouse_xterm -tcl
-autoservername +folding +multi_byte +termguicolors
-balloon_eval -footer +multi_lang +terminal
+balloon_eval_term +fork() -mzscheme +terminfo
-browse +gettext +netbeans_intg +termresponse
++builtin_terms -hangul_input +num64 +textobjects
+byte_offset +iconv +packages +textprop
+channel +insert_expand +path_extra +timers
+cindent +ipv6 +perl +title
+clientserver +job +persistent_undo -toolbar
+clipboard +jumplist +popupwin +user_commands
+cmdline_compl +keymap +postscript +vartabs
+cmdline_hist +lambda +printer +vertsplit
+cmdline_info +langmap +profile +virtualedit
+comments +libcall -python +visual
+conceal +linebreak +python3 +visualextra
+cryptv +lispindent +quickfix +viminfo
+cscope +listcmds +reltime +vreplace
+cursorbind +localmap +rightleft +wildignore
+cursorshape +lua +ruby +wildmenu
+dialog_con +menu +scrollbind +windows
+diff +mksession +signs +writebackup
+digraphs +modify_fname +smartindent +X11
-dnd +mouse -sound +xfontset
-ebcdic -mouseshape +spell -xim
+emacs_tags +mouse_dec +startuptime +xpm
+eval -mouse_gpm +statusline +xsmp_interact
+ex_extra -mouse_jsbterm -sun_workshop +xterm_clipboard
+extra_search +mouse_netterm +syntax -xterm_save
Что нас здесь интересует? Поддержка python3 (python2, наверное, уже не так актуален).
Если vim не установлен, установим:
sudo apt update
sudo apt install vim
Если vim установлен, но не поддерживает python3, собираем из исходников:
Снова проверяем:
vim --version
Теперь проверим версию python, используемую в vim:
vim
- откроем интерпретатор
:!python
или:!ipython
(если пользуетесь)
Python 2.7.17 (default, Nov 7 2019, 10:07:09)
[GCC 9.2.1 20191008] on linux2
Да, сейчас 2.7, исправим это позже, с помощью виртуальных окружений.
Вероятно, дальше будет немного проще, если открыть мой .vimrc.
Плагины VIM
Плагины нужны, чтобы превратить vim в IDE.
Менеджер плагинов
Существуют разные плагин менеджеры. Хороший и популярный вариант - Vundle. Скопируем в директорию для расширений vim:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
Настроим Vundle.
Вероятно, у вас уже есть .vimrc в домашней директории. Если нет, создадим:
touch ~/.vimrc
Откроем ~/.vimrc:
vim ~/.vimrc
Копируем(пока, можно сделать это через контекстное меню):
set nocompatible " be iMproved, required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
" the place for other plugins
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
" To ignore plugin indent changes, instead use:
"filetype plugin on
"
" Brief help
" :PluginList - lists configured plugins
" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate
" :PluginSearch foo - searches for foo; append `!` to refresh local cache
" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal
"
" see :h vundle for more details or wiki for FAQ
" Put your non-Plugin stuff after this line
Здесь же разберемся, как устанавливать и удалять плагины.
Например, NERDTree, file browsing плагин - открывает в отдельном вертикальном split’е дерево файлов и директорий.
Достаточно добавить Plugin 'scrooloose/nerdtree'
между строками call vundle#begin()
и call vundle#end()
(там, где написано the place for other plugins
) и выполнить :PluginInstall
При установке появится окно установщика и +
напротив установленного плагина.
Чтобы удалить - уберите Plugin 'scrooloose/nerdtree'
и выполните :PluginClean
. Выше небольшой help.
В общем, всё это справедливо для большинства vim плагинов.
Добьем вопрос с NERDTree и установим плагин NERDTreetabs для работы в разных вкладках. По аналогии с NERDTree добавляем в ~/.vimrc:
Plugin 'jistr/vim-nerdtree-tabs'
Устанавливаем
:PluginInstall
Мы, все ещё, не вышли из vim. Проверим список установленных плагинов - :PluginList
, сохраним и выйдем :wq!
Кстати, можно выполнять команды Vundle из терминала, например, так:
vim +PluginInstall
или vim +PluginList
Key combinations
Надо, надо, ребята, потратить свое время на изучение. Свои основные кнопки написал в самом низу страницы.
Split Layouts
Можно открывать файлы в вертикальном и горизонтальном сплитах, а в этих сплитах открывать новые сплиты.
Настроим зоны для новых сплитов (новые вертикальные будут открываться справа, горизонтальные - внизу):
set splitbelow
set splitright
Настроим навигацию между сплитами:
" split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
Ctrl+J переключиться вниз
Ctrl+K переключиться вверх
Ctrl+L переключиться вправо
Ctrl+H переключиться влево
nnoremap переназначает одну комбинацию клавиш на другую, при работе в Normal Mode. Например, было <Ctrl+W><Ctrl+J>
, стало <Ctrl+J>
. При этом <Ctrl+W>
также будет работать. Подробнее
Code Folding
Полезная фича - сворачивание кода. Сворачивает до ближайшего whitespace на основе отступов (foldmethod=indent). Выглядит как-то так:
Добавляем в наш .vimrc:
" Enable folding
set foldmethod=indent
set foldlevel=99
По умолчанию, работает по комбинации za
. Меняю на пробел:
" Enable folding with the spacebar
nnoremap <space> za
Чтобы код сворачивался аккуратнее лучше установить какой-нибудь плагин, добавляем:
Plugin 'tmhedberg/SimpylFold'
Запускаем :PluginInstall
Python indentation
Для корректного code folding и соответствия PEP 8 настроим отступы и длину строки
au BufRead,BufNewFile *.py,*pyw set tabstop=4
au BufRead,BufNewFile *.py,*pyw set softtabstop=4
au BufRead,BufNewFile *.py,*pyw set autoindent
au BufRead,BufNewFile *.py,*pyw set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw set expandtab
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set textwidth=79
au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix
" for full stack development
au BufNewFile,BufRead *.js, *.html, *.css set tabstop=2
au BufNewFile,BufRead *.js, *.html, *.css set shiftwidth=2
au BufNewFile,BufRead *.js, *.html, *.css set softtabstop=2
Autoindent не всегда будет работать корректно, но это лечится плагином (устанавливаем через Vundle):
Plugin ‘vim-scripts/indentpython.vim’
Flagging Unnecessary Whitespace
Лишние пробелы в коде лучше сразу удалять. Создадим флаг и подсветим красным
" Use the below highlight group when displaying bad whitespace is desired.
highlight BadWhitespace ctermbg=red guibg=red
" Make trailing whitespace be flagged as bad.
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
Чтобы удалить найденные пробелы можно воспользоваться заменой:
:%s/\s\+$//e
Можете выбрать подходящий вам вариант обработки пробелов здесь
UTF-8 Support
Для работы с Python3 Vim должен уметь кодировать utf-8. Добавим в .vimrc:
set encoding=utf-8
Virtualenv Support
То, что вам обязательно нужно - виртуальные окружения.
Про установку виртуальных окружений в Python:
По умолчанию, Vim ничего не знает об используемом виртуальном окружении.
Чтобы все было хорошо, и при запуске vim подхватывал то окрежние, в котором вы находитесь, добавим в .vimrc:
" python with virtualenv support
py3 << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
project_base_dir = os.environ['VIRTUAL_ENV']
activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
#execfile(activate_this, dict(__file__=activate_this)) # устарел execfile
exec(open(activate_this).read(), dict(__file__=activate_this))
EOF
Но это не всё. Если у вас уже есть виртуальные окружения, то переключаться между ними можно внутри vim, вручную, с помощью плагина vim-virtualenv.
Установим через Vundle:
Plugin 'jmcantrell/vim-virtualenv'
:PluginInstall
Теперь, запустим виртуальное окружение:
:VirtualEnvActivate <tab>
Деактивируем:
:VirtualEnvDeactivate
Auto-Complete
С недавних пор пользуюсь автодополнением.
Использование плагина YouCompleteMe не принесло мне много радости. Но это субъективно.
Есть проблемы и для решения, как правило, предлагают этот рецепт.
По душе мне пришелся neoclide/coc.nvim.
Он универсален, работает как с Jedi
, так и с Microsoft PLS
(и то, и другое - это Language Server, еще поговорим об этом). Умеет в IDE capabilities, например, покажет вам аннотации типов или __doc__
объекта. Удобно настраивать, опций - огромное множество.
Установим.
Jedi
- это Language Server, фоновый процесс, который будет анализировать наш код. С помощью coc.nvim
, будем просить его дополнить код, выполнить форматирование или рефакторинг. Здесь хорошо и кратко про Language Server Protocol (LSP)
.
Вариантов установки много, ставим через pip
в нужном виртуальном окружении (про установку виртуальных окружений, а еще чуть выше, в Virtualenv Support):
workon 3.8.4 # переключаемся в виртуальное окружение (у меня 3.8.4)
pip install jedi # или любой другой из предложенных вариантов
Кстати, там же, в документации, есть ссылка на клиент для Jedi
- JEDI-VIM. Можете попробовать как альтернативу coc.nvim
.
Теперь установим coc по инструкции из Wiki. У нас, конечно, же vim 8 (проверить можно через vim --version
), поэтому воспользуемся встроенный пакетным менеджером:
# for vim8
mkdir -p ~/.vim/pack/coc/start
cd ~/.vim/pack/coc/start
curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv -
Здесь же, в .vimrc
, с помощью встроенного менеджера, установим coc-python
:
:CocInstall coc-python
Откроем какой-нибудь скрипт, и, поскольку мы уже в нужном виртуальном окружении(настроили раньше, в Virtualenv Support), переключим интерпретатор на работу с Jedi
в этом же окружении. Делается это снова встроенным менеджером:
:CocCommand
# здесь мы должны выбрать то, виртуальное окружение, куда ранее установили Jedi
# опция будет постоянной и при работе в другом виртуальном окружении, желателательно снова переключиться
python.setInterpreter
В появившемся окне выбираем виртуальное окружение, куда ранее установили Jedi
. Вот в картинках, до момента выбора окружения:
С помощью CocCommand
можно настраивать много всего. Фактически, мы правим конфигурационный файл через интерфейс встроенного менеджера.
Посмотрим на интерфейс на примере функции print
:
Если coc.nvim
нужно отключить:
:CocDisable
Включаем обратно:
:CocEnable
Теперь добавим полезного в наш .vimrc
для работы с coc
:
vim ~/.vimrc # открываем
let mapleader = "," # назначим лидер-кнопку, она пригодится
# настроим отображение документации:
nmap <silent> gd <Plug>(coc-definition)
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
if (index(['vim','help'], &filetype) >= 0)
execute 'h '.expand('<cword>')
else
call CocAction('doHover')
endif
endfunction
Смотрим, как это выглядит (ставим курсор на print
, жмем K
):
Добавим аннотации в ~/.vimrc
:
nmap <silent> gd <Plug>(coc-definition)
Смотрим на том же примере (ставим курсор на print
, жмем gd
):
У проекта отличная Wiki, если вдруг.
File Browsing
Плагины nerdtree и vim-nerdtree-tabs мы уже установили.
Давайте добавим в конец .vimrc строку: let NERDTreeIgnore=['\.pyc$', '\~$']
NERDTree будет игнорировать .pyc
Если у вас есть вопрос по работе NERDTree, скорее всего он уже решен - F.A.Q.
Команды для работы с vim-nerdtree-tabs описаны в Commands and Mappings
Добавим в .vimrc возможность открытия NERDTree по <F3>
:
" map NERDTree on F3
map <F3> :NERDTreeToggle<CR>
Syntax Checking/Highlighting
Плагин для проверки синтаксиса:
Plugin 'vim-syntastic/syntastic'
Линтер для PEP 8:
Plugin 'nvie/vim-flake8'
Включаем подсветку синтаксиса:
let python_highlight_all=1
syntax on
Поддержка markdown
Ну, а почему нет?
Подсветка синтаксиса, превью - все, что нужно.
Смотрим топ плагинов здесь.
Хорошие - Vim Markdown и vim-instant-markdown как превью.
Устанавливаем уже знакомым способом, через Vundle
:
vim ~/.vimrc
# добавляем
Plugin 'suan/vim-instant-markdown', {'rtp': 'after'} "markdown preview plugin - https://github.com/suan/vim-instant-markdown
Plugin 'godlygeek/tabular' "for work with markdown plugin (Ctrl-p) - https://github.com/godlygeek/tabular
Plugin 'plasticboy/vim-markdown' " best markdown plugin - https://github.com/plasticboy/vim-markdown
# запускаем Vundle
:PluginInstall
Добавим для vim-instant-markdown
доступные настройки в наш ~/.vimrc
:
filetype plugin on
"Uncomment to override defaults:
"let g:instant_markdown_slow = 1
"let g:instant_markdown_autostart = 0
"let g:instant_markdown_open_to_the_world = 1
"let g:instant_markdown_allow_unsafe_content = 1
"let g:instant_markdown_allow_external_content = 0
"let g:instant_markdown_mathjax = 1
"let g:instant_markdown_logfile = '/tmp/instant_markdown.log'
"let g:instant_markdown_autoscroll = 0
"let g:instant_markdown_port = 8888
"let g:instant_markdown_python = 1
А для vim-markdown
добавим подсветку YAML, JSON, разрешим открывать ссылки на .md
в новых вкладках:
" vim markdown plugin options - https://github.com/plasticboy/vim-markdown
let g:vim_markdown_frontmatter = 1
let g:vim_markdown_json_frontmatter = 1
let g:vim_markdown_edit_url_in = 'tab'
Ну и для удобства настроим отсупы аналогично Python indentation. Мы уже делали это ранее, теперь только добавим *md
и *markdown
:
au BufRead,BufNewFile *.py,*pyw,*md,*markdown set tabstop=4
au BufRead,BufNewFile *.py,*pyw,*md,*markdown set softtabstop=4
au BufRead,BufNewFile *.py,*pyw,*md,*markdown set autoindent
au BufRead,BufNewFile *.py,*pyw,*md,*markdown set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw,*md,*markdown set expandtab
Например, теперь, помимо подсветки, можно открыть в отдельном сплите все заголовки вашего markdown-файла и переключаться между ними:
А превью будет сразу открываться как новая вкладка в браузере:
Color Schemes Switching
У меня много схем оформления vim и возможность переключения между ними по <F8>
.
Для начала скопируем в ~/.vim/colors/
схемы оформления. Возьмем их, например, здесь и здесь.
В качестве постоянной схемы я использую dogrun
. В .vimrc добавить схему как постоянную, можно так:
colorscheme dogrun
Добавим схемы оформления в vim:
:SetColors all
Добавим возможность переключения по <F8>
, скопировав этот скрипт в ~/.vim/plugin/setcolors.vim
Чтобы отобразить текущую схему, можно использовать :SetColors
.
Super Searching
Расширенные возможности поиска в vim будут добавлены вместе с плагином ctrlP
Устанавливаем обычно, через Vundle:
Plugin 'kien/ctrlp.vim'
Не забываем :PluginInstall
Status bar with vim-airline
Полезнейшая в работе вещь - статус бар. Есть powerline, но я использую vim-airline
Добавляем в .vimrc и устанавливаем через Vundle:
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes' "
Настраиваем:
" air-line settings
" enable tab line with vim-airline plugin
let g:airline#extensions#tabline#enabled = 1
let g:airline_skip_empty_sections = 1
let g:airline_theme='minimalist'
let g:airline_section_y = '%{virtualenv#statusline()}'
Теперь, vim будет выглядеть так:
vim-airline интегрируется со многими плагинами, например, с ctrlP
, который мы уже установили.
В vim-airline можно добавить, например, наименование используемого виртуального окружения, что мы и сделали.
Подробнее здесь
Git Integration
Как по мне, лучший плагин для интеграции vim с git - это fugitive.vim, хотя бы, по той причине, что он дублирует уже привычный набор команд git и не требует особого изучения.
Устанавливается, как обычно, через Vundle:
Plugin 'tpope/vim-fugitive'
Добавим в статус бар:
" to add fugitive plugin (for git) in statusline
let g:airline_section_b = '%{FugitiveStatusline()}'
Для работы с git есть плагин vimagit, но мне он кажется менее удобным.
Для отображения статуса git-репозитория в NERDTree попробуйте этот плагин
Line Numbering
Нумерация строк будет отображаться в статус баре, который мы установили ранее. Это удобно.
Но, если вы хотите отображать нумерацию строк в vim, добавьте в .vimrc:
set nu
PasteToggle
Иногда вам будет полезна опция :set paste
. Используется до вставки скопированного кода “как есть”, без autoindent. Актуально при работе в insert mode.
set pastetoggle=<F2>
Копируем код, переходим в insert mode, включаем pastetoggle (F2), вставляем код, отключаем pastetoggle(F2).
Подробнее здесь
Поддержка black и запуск python
Black - популярный форматтер python-кода.
Устанавливаем глобально, через pip:
pip install black
На этой же странице есть плагин для vim.
Применять black, достаточно, просто, поэтому отдельным плагином я не пользуюсь. Основные команды black:
black script.py (форматировать файл script.py)
black script.py -l 120 (форматировать с длиной строки 120. По умолчанию 88)
black --diff script.py (посмотреть изменения в формате, но не форматировать)
black . (форматировать все файлы в текущей директории)
А в .vimrc добавим hotkey на <F9>
для запуска black как стороннего инструмента:
" manual black code reformatting
nnoremap <F9> :w<CR>:!clear;black %<CR>
Теперь добавим возможность сохранения и запуска python-интерпретатора на <F5>
:
" save and run current python code
nnoremap <F5> ::w!<CR>:!clear;python %<CR>
Вкладки в vim
Добавим клавиши для переключения вкладок в vim:
" Ctrl-Left or Ctrl-Right to go to the previous or next tabs
nnoremap <C-Left> :tabprevious<CR>
nnoremap <C-Right> :tabnext<CR>
" Alt-Left or Alt-Right to move the current tab to the left or right
nnoremap <silent> <C-Down> :execute 'silent! tabmove ' . (tabpagenr()-2)<CR>
nnoremap <silent> <C-Up> :execute 'silent! tabmove ' . (tabpagenr()+1)<CR>
Ctrl+Left - переключить на предыдущую вкладку
Ctrl+Right - переключить на следуюущую вкладку
Alt+Left - переместить вкладку назад
Alt+Right - переместить вкладку вперед
Вкладки в vim:
Switching Buffers
Для переключения добавим hotkey на <F7>
:
" switching to another buffer manually - https://vim.fandom.com/wiki/Using_tab_pages
" :help switchbuf
set switchbuf=usetab
nnoremap <F7> :sbnext<CR>
nnoremap <S-F7> :sbprevious<CR>
History
Добавим полезную настройку - разрешим хранить историю после выхода из файла:
" Maintain undo history between sessions
set undofile
set undodir=~/.vim/undodir
Hotkeys
i
- insert - режим ввода/редактирования
esc
- выйти из режима редактирования/визуального режима (можно применять нужное кол-во раз)
dw
- удалить слово
dd
- удалить строку
d$
- удалить всё от текущего месторасположения курсора до конца строки
d^
- удалить всё от текущего месторасположения курсора до начала строки
:15 dgg
- прыгнуть на 15 строку и удалить всё, начиная с 15 строки, до начала файла (dG - до конца файла)
dt'
- удалить все символы в строке от текущего месторасположения до символа одинарной кавычки (можно использовать любой символ)
5dd
- удалить 5 строк
5dw
- удалить 5 слов
Символ удаления d
можно комбинировать с поиском. Например, чтобы удалить все от курсора до конкретного слова, жмем d
, открываем поиск с помощью /
, пишем слово, до которого удаляем.
yy
- скопировать строку (никто не отменял копирование через контестное меню)
yw
- скопировать слово
10yy
- скопировать 10 строк
p
- вставить после курсора (не всегда удобно)
P
- вставить до курсора
:q
- выйти из файла
:q!
- выйти из файла жестко, без сохранения изменений
:w
- сохранить файл
:wq
- сохранить файл и выйти
ctrl+V
- перейти в визуальный режим
u
- отменить действие (undo)
ctrl+R
- return или undo undo (повторить действие)
hjkl
- передвижение по vim
^
- начало строки (вернуться к первому не пустому символу в строке)
0
- вернуться в самое начало строки
$
- вернуться в конец строки
A
- вернуться в конец строки и открыть режим редактирования
I
- вернуться в начало строки и открыть режим редактирования
o
- прыгнуть на следуюущую строку и перейти в режим редактирования
w
- передвижение на одно слово вперед
W
- передвижение от пробела к пробелу (через слово)
b
- передвижение назад, от слова к слову
B
- передвижение назад, от пробела к пробелу
gg
- прыгнуть в начало файла
G
- прыгнуть в конец файла
30G
- прыгнуть на нужную строку (для gg аналогично)
:55
- передвинуть курсор на 55 строку
ctrl+D
- листать постранично вниз
ctrl+U
- листать постранично вверх
zt
- при нахождении на строке, которая расположена в нижней части терминала, поднимаем эту строку на самый верх
zz
- аналогично предыдущему, но поднимаем строку на середину
/
- поиск (здесь лучше сразу обратить внимание на инкрементальный режим, т.е. поиск в реальном времени). В поиске есть история - работает нажатием вверх или вниз (по аналогии с :). Для передвижения по результатам поиска жмем n
и N
?
- поиск в обратную сторону, по аналогии с /
.
- повторить предыдущую команду
:s/чтозаменить/начтозаменить
- замена в строке
:%s/чтозаменить/начтозаменить/
- замена во всем файле (если слово в строке встречается дважды, добавьте g, либо установите set gdefault
>>
- сдвинуть строку вправо
<<
- сдвинуть строку влево
12>
- сдвинуть 12 строк вправо (аналогично влево)
:vs имя файла
- вертикальный сплит
:sp
- горизонтальный сплит
:vertical resize30%
- изменить размер текущего сплита
:resize
- изменить размер для горизонтального сплита
za
- свернуть код
vim -p file1 file2 file3
- открыть несколько файлов в разных вкладках
:tabedit имя файла
- открыть файл в новой вкладке
:tabn (можно с номером вкладки
) - перейти на следующую вкладку
:tabp
- перейти на предыдущую вкладку
:tabc
- закрыть вкладку
:tabfirst
- перейти на первую вкладку
:tablast
- перейти на последнюю вкладку
:tabs
- открыть список доступных вкладок
:tabl
- прыгнуть на последнюю открытую вкладку
:tab split
- скопировать содержимое текущей вкладки в новую вкладку и перейти на неё
:tabonly
- закрыть все вкладки, кроме текущей
:tab ball
или :tabo
- показать все буферы во вкладках
:ls
- посмотреть буферы
q:
- открыть историю буферов
:qa
- закрыть всё
!ls
- выполнить shell команду из vim
!python file.py
- запустить python код (по аналогии с !ls)
Чтобы добавить вывод команды, запущенной из под vim, в файл, выполняем:
vim new_file.txt
:read !python file.py - вывод file.py попадет в new_file.txt
:read !ls -ls - вывод команды попадет в файл new_file.txt
Комментируем несколько строк в визуальном режиме:
ctrl+V
- переходим в визуальный режим (shift+V
- выделить всю строку)- выделяем нужное кол-во строк с помощью указателей (
jk
иливверх/вниз
) shift+I
- переходим в режим вставки, пишем символ решетки#
(а, например, если нужно удалить по символу в каждой из выделенных строк, жмемx
)esc
- возвращаемся в обычный режим (видим результат)
vim -S session.vim
- открыть сохраненную сессию