vim
Советы и рекомендации по повышению производительности
Поиск…
Синтаксис
- : установить relativenumber
- : установить номер
- : set nonumber /: set nonu
- : PWD
замечания
Эта автоматическая перезагрузка произойдет, только если вы отредактируете vimrc
в полной версии версии vim, которая поддерживает autocmd
.
Быстрые макросы «отбрасывания»
Добавьте это в свой vimrc:
nnoremap Q @q
Чтобы начать запись макроса «throwaway», используйте qq
. Для завершения записи нажмите q
(в обычном режиме для обоих).
Чтобы выполнить записанный макрос, используйте Q
Это полезно для макросов, которые нужно повторять много раз подряд, но вряд ли они будут использоваться снова после этого.
Использование функции завершения пути внутри Vim
Это очень часто, вы запоминаете путь к файлу или папке, вы открываете Vim и пытаетесь написать то, что вы только что запомнили, но вы не на 100% уверены, что это правильно, поэтому вы закрываете редактор и начинаете все заново.
Если вам нужна функция завершения пути, и у вас есть файл /home/ubuntu/my_folder/my_file
и вы редактируете другой файл, ссылающийся на путь предыдущего:
Войдите в режим вставки: вставьте или сделайте так, как хотите. Затем напишите /h
. Когда курсор находится под h
, нажмите Ctrl x, а затем Ctrl f, чтобы редактор завершил его /home/
потому что шаблон /h
уникален
Теперь предположим, что у вас есть две папки внутри /home/ubuntu/
called my_folder_1
my_folder_2
и вам нужен путь /home/ubuntu/my_folder_2
по-прежнему:
Войдите в режим вставки
write /h
и нажмите Ctrl x, а затем Ctrl f . Теперь у вас есть /home/
Next add u after / home / и нажмите Ctrl x, а затем Ctrl f . Теперь у вас /home/ubuntu/
потому что этот путь уникален. Теперь напишите my
пост /home/ubuntu/
и нажмите Ctrl x, а затем Ctrl f . Редактор завершит ваше слово до my_folder_
и вы увидите дерево каталогов, поэтому используйте клавиши со стрелками, чтобы выбрать тот, который вы хотите.
Включить относительные номера строк
Чтобы удалить некоторые строки текста, когда вы не знаете точное количество строк для удаления, вы пытаетесь 10dd
, 5dd
, 3dd
пока не удалите все строки.
Относительные номера строк решают эту проблему, предположим, что у нас есть файл, содержащий:
sometimes, you see a block of
text. You want to remove
it but you
cannot directly get the
exact number of
lines to delete
so you try
10d , 5d
3d until
you
remove all the block.
Войдите в режим NORMAL: Esc
Теперь выполните :set relativenumber
. После этого файл будет отображаться как:
3 sometimes, you see a block of 2 text. You want to remove 1 it but you 0 cannot directly get the 1 exact number of 2 lines to delete 3 so you try 4 10d , 5d 5 3d until 6 you 7 remove all the block.
где 0
- номер строки для текущей строки, а также показывает номер реальной линии перед относительным числом, поэтому теперь вам не нужно оценивать количество строк из текущей строки для вырезания или удаления или хуже считать их одним одним.
Теперь вы можете выполнить свою обычную команду, например, 6dd
и вы уверены в количестве строк.
Вы также можете использовать краткую форму той же самой команды :set rnu
для включения относительных чисел и :set nornu
чтобы отключить его.
Если вы также :set number
или имеете :set number
уже :set number
, вы получите номер строки строки, в которой находится курсор.
3 sometimes, you see a block of 2 text. You want to remove 1 it but you 4 cannot directly get the 1 exact number of 2 lines to delete 3 so you try 4 10d , 5d 5 3d until 6 you 7 remove all the block.
Просмотр номеров строк
Для просмотра номеров строк из представления по умолчанию введите
:set number
Чтобы скрыть номера строк
:set nonumber
Существует также ярлык для выше. nu
- это number
.
:set nonu
Чтобы скрыть номера строк, мы также можем использовать
:set nu!
Отображения для выхода из режима Insert
Многие пользователи Vim находят, что Esc слишком сложно достичь, и в конечном итоге найти другое отображение, которое легко достать из домашней строки. Обратите внимание, что Ctrl - [ может быть эквивалентно Esc на английской клавиатуре и намного проще в доступе.
j k
inoremap jk <ESC>
Это очень легко вызвать; просто разбивайте первые два пальца на домашнем ряду одновременно. Это также трудно вызвать случайно, так как «jk» никогда не появляется ни в одном английском словаре, и если вы в обычном режиме, он ничего не делает. Если вы не inoremap kj <ESC>
«blackjack» слишком много, подумайте также о добавлении inoremap kj <ESC>
поэтому вам не нужно беспокоиться о сроках двух ключей.
Caps Lock
Linux
В Linux вы можете использовать xmodmap
чтобы сделать Caps Lock делать то же самое, что и Esc . Поместите это в файл:
!! No clear Lock
clear lock
!! make caps lock an escape key
keycode 0x42 = Escape
Затем запустите xmodmap file
. Это переводит Caps Lock в Esc .
Windows
В Windows вы можете использовать SharpKey или AutoHotkey .
Macos
Если у вас есть macOS 10.12.1 или новее, вы можете переназначить Caps Lock на Escape с помощью системных настроек. Выберите «Клавиатура», перейдите на вкладку «Клавиатура» и нажмите «Ключи модификатора».
Как узнать каталог и / или путь к файлу, который вы редактируете
Чтобы узнать путь к каталогу, в котором находится ваш файл, вы можете использовать:
Esc для входа в командный режим
:pwd
Это напечатает путь к каталогу в нижней части редактора, как это
I'm a ninja
~
~
~
~
~
/home/ubuntu/myfolder 1,5 All
Теперь, если вы хотите узнать имя файла, которое вы редактируете относительно рабочего каталога vim, вы можете использовать:
Esc для входа в командный режим CTRL G
I'm a ninja
~
~
~
~
~
"myfile"[Modified][New file] 1 line --100%-- 1,5 All
Наконец, чтобы получить абсолютный путь к редактируемому файлу, используйте
Esc, чтобы войти в командный режим,
1, а затем CTRL G
I'm a ninja
~
~
~
~
~
"~/myfolder/myfile"[Modified][New file] 1 line --100%-- 1,5 All
Поиск в функциональном блоке
Для поиска текста foo
внутри блока {}
окружающего курсор, используйте следующую команду ( <ESC>
- escape-ключ, <CR>
- ввести ключ):
vi{<ESC>/\%Vfoo<CR>
теперь вы можете прыгать между совпадениями внутри блока, нажимая n
и p
. Если вы включили опцию hlsearch
вы увидите все совпадения. \%V
- это специальная часть шаблона поиска, которая указывает vim искать только в визуально выбранной области. Вы также можете сделать сопоставление следующим образом:
:vnoremap g/ <ESC>/\%V
После этого вышеуказанная команда сокращается до следующего:
vi{g/foo<CR>
Другой полезный трюк - напечатать все строки, содержащие шаблон:
vi{
:'<,'>g/foo/#
Диапазон '<,'>
устанавливается автоматически.
См. Раздел :help range
и :help :g
.
Скопировать, переместить или удалить найденную строку
Многие пользователи оказываются в ситуации, когда они просто хотят быстро скопировать, переместить или удалить строку и вернуться туда, где они были.
Обычно, если вы хотите переместить строку, содержащую слово « lot
ниже текущей строки, вы должны ввести что-то вроде:
/lot<Esc>dd<C-o>p
Но для повышения производительности вы можете использовать этот ярлык в следующих случаях:
" It's recommended to turn on incremental search when doing so
set incsearch
" copy the found line
cnoremap $t <CR>:t''<CR>
" move the found line
cnoremap $m <CR>:m''<CR>
" delete the found line
cnoremap $d <CR>:d<CR>``
Итак, поиск выглядит следующим образом:
/lot$m
будет перемещать строку, содержащую lot
под строкой, на которой находился ваш курсор, когда вы начали поиск.
Напишите файл, если вы забудете `sudo` перед запуском vim
Эта команда сохранит открытый файл с правами sudo
:w !sudo tee % >/dev/null
Вы также можете отобразить w!!
выписать файл как root
:cnoremap w!! w !sudo tee % >/dev/null
Автоматическая перезагрузка vimrc при сохранении
Чтобы автоматически перезагрузить vimrc
при сохранении, добавьте следующее в свой vimrc
:
if has('autocmd') " ignore this section if your vim does not support autocommands
augroup reload_vimrc
autocmd!
autocmd! BufWritePost $MYVIMRC,$MYGVIMRC nested source %
augroup END
endif
а затем в последний раз введите:
:so $MYVIMRC
В следующий раз, когда вы сохраните vimrc
, он будет автоматически перезагружен.
nested
полезно, если вы используете vim-авиакомпанию. Процесс загрузки авиакомпании запускает некоторые автокоманды, но поскольку вы находитесь в процессе выполнения автокоманды, они пропускаются. nested
позволяет запускать вложенные автокоманды и позволяет авиакомпании правильно загружаться.
Завершение командной строки
set wildmenu
включить предложения по завершению для командной строки.
Выполните следующее
set wildmenu
set wildmode=list:longest,full
Теперь, если вы скажете :color
вкладка :color
,
Ты получишь
256-jungle Benokai BlackSea C64 CandyPaper Chasing_Logic ChocolateLiquor :color 0x7A69_dark