| Следующая версия | Предыдущая версия |
| vim:additional [2022/07/23 17:00] – создано so_v_a | vim:additional [2026/09/01 11:47] (текущий) – so_v_a |
|---|
| | <!DOCTYPE markdown> |
| | |
| # Vim: движемся дальше | # Vim: движемся дальше |
| |
| Хотя изучение Vim и может показаться сложной задачей на первых этапах, будьте уверены в том, что в будущем умение работать с ним сэкономит вам немало времени. Одним из способов, которыми Vim поможет сэкономить вам время, является автозавершение слов. Эта возможность Vim часто используется разработчиками и системными администраторами при редактировании исходных кодов программ или конфигурационных файлов. | Хотя изучение Vim и может показаться сложной задачей на первых этапах, будьте уверены в том, что в будущем умение работать с ним сэкономит вам немало времени. Одним из способов, которыми Vim поможет сэкономить вам время, является автозавершение слов. Эта возможность Vim часто используется разработчиками и системными администраторами при редактировании исходных кодов программ или конфигурационных файлов. |
| |
| Автозаврешение работает следующим образом. Когда вы набираете какое-нибудь длинное слово, которое _**уже встречается где-то в тексте**_, нажмите ==**Ctrl+p**== или ==**Ctrl+n**== в процессе набора слова. | Автозаврешение работает следующим образом: |
| | Когда вы набираете какое-нибудь длинное слово, которое _**уже встречается где-то в тексте**_, нажмите **Ctrl+p** или **Ctrl+n** в процессе набора слова. |
| |
| Например, у вас в тексте уже есть слово «searching». Теперь начните вводить это слово где-нибудь в тексте, при этом наберите только первые буквы, например «sea», и нажмите Ctrl+p. Vim автоматически завершит слово «searching» или предложит варианты слов, начинающихся с «sea», если таковые имеются. | Например, у вас в тексте уже есть слово «searching». Теперь начните вводить это слово где-нибудь в тексте, при этом наберите только первые буквы, например «sea», и нажмите Ctrl+p. Vim автоматически завершит слово «searching» или предложит варианты слов, начинающихся с «sea», если таковые имеются. |
| ``` | ``` |
| |
| Первый аргумент команды ==**:ab**== — это, собственно, само сокращение, а второй — это слово, до которого будет расширено сокращение. Теперь если, набирая текст, вы введёте слово «rlw», Vim автоматически заменит его на «ReallyLongWord». Просто, не правда ли? | Первый аргумент команды **:ab** — это, собственно, само сокращение, а второй — это слово, до которого будет расширено сокращение. Теперь если, набирая текст, вы введёте слово «rlw», Vim автоматически заменит его на «ReallyLongWord». Просто, не правда ли? |
| |
| Что делать, если сокращение вам больше не нужно и вы хотите его удалить? Просто закройте Vim и все определённые сокращения автоматически удалятся. Также можно _**удалить сокращение**_ не выходя из редактора при помощи команды: | Что делать, если сокращение вам больше не нужно и вы хотите его удалить? Просто закройте Vim и все определённые сокращения автоматически удалятся. Также можно _**удалить сокращение**_ не выходя из редактора при помощи команды: |
| ``` | ``` |
| |
| Эта строка настраивает мэпинг комбинации Ctrl+n для включения/отключения функции подстветки результатов поиска. | Эта строка настраивает мэпинг комбинации Ctrl+n для включения/отключения функции подсветки результатов поиска. |
| Сперва «нажимается» клавиша Escape, чттобы переключиться в командный режим, затем даётся команда ==**:call ToggleHLSearch ()**== и «нажимается» возврат каретки, то бишь Enter. | Сперва «нажимается» клавиша Escape, чтобы переключиться в командный режим, затем даётся команда **:call ToggleHLSearch ()** и «нажимается» возврат каретки, то бишь Enter. |
| |
| Другой, более простой пример. Когда автор редактирует чужие статьи, ему удобно двигаться по тексту, проскакивая по нескольку слов за раз. Для удобства автор настроил у себя следующий мэпинг, _перемещающий курсор на пять слов вперёд за раз_: | Другой, более простой пример. Когда автор редактирует чужие статьи, ему удобно двигаться по тексту, проскакивая по нескольку слов за раз. Для удобства автор настроил у себя следующий мэпинг, _перемещающий курсор на пять слов вперёд за раз_: |
| Выглядит слегка странно, использовать два нажатия вместо двух нажатий. Однако, лично автору, неудобно держать палец над цифровой клавишей, а удобней использовать вариант, приведённый в примере. В общем, суть не в этом, а в том, чтобы показать читателю пример. | Выглядит слегка странно, использовать два нажатия вместо двух нажатий. Однако, лично автору, неудобно держать палец над цифровой клавишей, а удобней использовать вариант, приведённый в примере. В общем, суть не в этом, а в том, чтобы показать читателю пример. |
| |
| _`Чтобы настроенные вами мэпинги и сокращения не исчезали после закрытия Vim, вам нужно добавить их в файл **.vimrc**, расположенный в вашем домашнем каталоге.`_ | _Чтобы настроенные вами мэпинги и сокращения не исчезали после закрытия Vim, вам нужно добавить их в файл **.vimrc**, расположенный в вашем домашнем каталоге._ |
| | |
| ## Освоение интерфейса Vim | |
| | |
| Изначально не очевидно, однако в одной сессии Vim можно _**одновременно редактировать несколько файлов**_. Делается это при помощи т. н. «окон» или же при помощи относительно новой возможности Vim, добавленной в 7-й версии — вкладок. | |
| | |
| Давайте сперва рассмотрим окна. Когда вы открываете Vim для редактирования файла, вы видите одно окно с содержимым файла. Представим, что ==вы редактируете ну очень большой файл и вам нужно редактировать его параллельно в двух местах==. Дайте команду (не забывайте нажимать Ctrl+Esc для перехода в командный режим) | |
| ``` | |
| :split | |
| ``` | |
| | |
| и вы увидите один и тот же файл в двух разных окнах. | |
| | |
| Хорошо, но как теперь **переключиться обратно в предыдущее окно**? | |
| Очень просто. Перейдите в командный режим, **нажмите Ctrl+w** и ==при помощи клавиш со стрелками или клавиш перемещения (h, j, k, l) выберите нужное окно,== на которое хотите переключиться относительно текущего окна. | |
| | |
| Допустим, ваша Vim-сессия разделена горизонтально на два окна. При помощи команды | |
| | |
| ``` | |
| Ctrl+w k | |
| ``` | |
| | |
| вы переключитесь на окно, расположенное выше активного, в то время как команда | |
| ``` | |
| Ctrl+w j | |
| ``` | |
| | |
| переключит вас на окно, расположенное ниже. | |
| _Двойной повтор команды Ctrl+w переключит вас на следующее окно_. | |
| | |
| Помимо переключения между окнами вы можете **перемещать сами окна**. | |
| | |
| Команда | |
| ``` | |
| Ctrl+w r | |
| ``` | |
| вращает окна по часовой стрелке, а команда | |
| | |
| ``` | |
| Ctrl+w R | |
| ``` | |
| вращает окна против часовой стрелки. | |
| | |
| Использование нескольких окон для работы с одним и тем же файлом используется сравнительно редко. Что что используется гораздо чаще, так это **разделение сессии на окна при _редактировании нескольких файлов_.** | |
| | |
| Представим, что вам захотелось **открыть во втором окне какой-нибудь другой файл**. Просто передайте путь к нужному файлу в виде параметра команде **:split**. | |
| | |
| Например: | |
| ``` | |
| :split /etc/dhcp3/dhclient.conf | |
| ``` | |
| | |
| Что делать, если вам понадобилось _вернуться в однооконный вариант_ Vim-сессии? Для это вам нужно всего лишь **закрыть ненужные окна** традиционным способом (при помощи команды :q, :!q или :wq) или же, находясь в окне, которое хотите закрыть, дать команду | |
| ``` | |
| Ctrl+w c | |
| ``` | |
| | |
| В случае последней команды Vim не даст вам закрыть изменённый, но не сохранённый файл, что логично. | |
| | |
| | |
| Давайте подытожим список основных команд, используемых при работе с окнами в Vim. | |
| | |
| - **:split** или **Ctrl+w s** — добавляет в сессию Vim горизонтальное окно | |
| - **:vsplit** или **Ctrl+w v** — добавляет в сессию Vim вертикально окно | |
| - **:split filename** — добавляет в сессию Vim горизонтальное окно и загружает в него filename | |
| - **:vsplit filename** — добавляет в сессию Vim вертикальное окно и загружает в него filename | |
| - **Ctrl+w h** — переключает на левое окно, относительно текущего | |
| - **Ctrl+w l** — переключает на правое окно, относительно текущего | |
| - **Ctrl+w j** — переключает на нижнее окно, относительно текущего | |
| - **Ctrl+w k** — переключает на верхнее окно, относительно текущего | |
| - **Ctrl+w Ctrl+w** — переключает на следующее окно | |
| - **Ctrl+w r** — передвигает окна по часовой стрелке | |
| - **Ctrl+w R** — передвигает окна против часовой стрелки | |
| - **Ctrl+w c** — закрывает текущее окно | |
| | |
| И сразу ответ тем, кто спросит: «не лучше ли открыть несколько однооконных сессий вместо всей этой возни с окнами?». | |
| Подумайте о том, как иной раз бывает утомительно редактировать несколько файлов, открытых в нескольких отдельных SSH-сессиях к серверу, особенно высоконагруженному. И потом, гораздо удобнее выполнять копирование/вставку между несколькими файлами в пределах одной сессии, когда у вас всё перед глазами и не нужно судорожно переключаться между несколькими терминалами в поисках того,что же вы собирались скопировать и откуда. | |
| | |
| ## Вкладки | |
| | |
| Со времён появления вкладок в веб-браузерах пользователи очень привыкли и активно пользуются этим механизмом. Действительно, идея отличная. Так почему бы не использовать их в Vim? | |
| Если вы часто работаете одновременно с несколькими файлами и вам не нужно видеть их все одновременно на одном экране, то использование вкладок — самое то, что вам необходимо. | |
| | |
| Для того, чтобы **запустить Vim с несколькими файлами,открытыми в различных вкладках**, запустите его следующей командой: | |
| ``` | |
| $ vim -p filename1 filename2 filename3 | |
| ``` | |
| | |
| Если же у вас уже имеется открытая сессия Vim, вы можете **загрузить файл (или создать новый) в новой вкладку**при помощи команды: | |
| ``` | |
| :tabnew filename | |
| ``` | |
| | |
| _Если вы не укажете filename, то будет открыта вкладка не связанная с именем файла и вы должны будете указать его при сохранении._ | |
| | |
| **Переключение между вкладками** также очень простое. | |
| Команда ==**gt**== переключит вас **на следующую вкладку**, | |
| а команда ==**gT**== — **на предыдущую**. | |
| | |
| **Закрывать вкладки** можно несколькими способами. Первый способ — это всё то же «традиционное» закрытие при помощи команд **:q**, **:!q** или **:wq**. Второй способ — использование **команды для закрытия текущей вкладки**: | |
| ``` | |
| :tabc | |
| ``` | |
| | |
| Как и в случае с окнами, эта команда не даст вам закрыть вкладку, если файл в ней изменялся, но не был сохранён. | |
| | |
| Давайте подытожим список команд для работы с вкладками: | |
| |
| - **vim -p filename1 filename2** — запустит Vim и откроет (или создаст новые) файлы filename1 и filename2 в двух вкладках | |
| - **:tabnew** — откроет пустую вкладку | |
| - **:tabnew filename** — откроет новую вкладку и загрузит (создаст новый) в ней файл filename | |
| - **gt** — переключит на следующую вкладку | |
| - **gT** — переключит на предыдущую вкладку | |
| - **:tabc** — закроет текущую вкладку | |
| |
| #vim | [[0_content|Оглавление]] |