LXF158:Vim: Функции для крутых
|
|
|
Редактирование текста. Освойте продвинутые функции Vim и станьте бородатым гуру
Содержание |
Vim: Функции для крутых
Учитесь писать код быстрее и лучше – Джонатан Робертс покажет вам некоторые расширенные функции Vim для высшего пилотажа.
В LXF156 мы познакомили вас с Vim, продемонстрировав достаточно его функций, чтобы с ним управляться. Знание основ Vim полезно сама по себе, поскольку вы заодно будете знать, как использовать Vi, текстовый редактор, установленный по умолчанию практически во всех Unix-подобных системах.
Но Vim способен на гораздо большее, и голые основы сами по себе не объясняют, почему многие люди, программисты и писатели, обожают данный текстовый редактор. На уроке этого месяца мы решили просветить вас, рассмотрев ряд продвинутых функций Vim. Давайте начнем с идеи, что команды Vim составляют язык редактирования текста.
В LXF156 мы показали, как перемещаться по тексту документа. Если вы помните, клавиши h, j, k и l перемещают влево, вниз, вверх и вправо, 0 переместит вас в начале строки, а $ – в конец строки.
В Vim эти действия называют «подвижки [motion]». Команд-подвижек еще много. w, например, перемещает к началу следующего слова, b – к началу предыдущего слова, а (and) двигает вперед и назад одно предложение. Чтобы увидеть все команды-подвижки, скомандуйте в Vim :help motion.
Есть, однако, другая категория умных команд, которых мы в прошлый раз не рассматривали. Они известны как операторы [operator], и, как нетрудно догадаться, они изменяют части текста документа. Например, c изменяет, d удаляет, а y «выдергивает [yank]», или копирует, выделенный текст. Умны эти команды благодаря тому, что они используются не сами по себе, но в сочетании с подвижкой.
Для удаления целого слова поместите курсор на начало этого слова, а затем введите dw. Если вы решите, что вам не нравится последнее написанное предложение, вы можете изменить его, введя c(.
Более того, вы не ограничены удалением одной строки, слова или любой другой используемой подвижкой. Все команды могут предваряться «счетчиком», который определяет, сколько раз выполнять это действие. d2w удаляет два слова, а c3) изменит следующие три предложения.
Вы даже можете комбинировать счетчик и подвижку без участия оператора: так, 4w переместит курсор на четыре слова вперед. Поскольку команды можно объединять, Стив Лош [Steve Losh] описывает интерфейс команд Vim как подобие языка. Операторы – как глаголы: они «делают» слова и описывают то, что мы хотим, чтобы случилось; подвижки – как существительные: они задают объект, на который мы хотим повлиять глаголом.
Наиболее важная идея, которую можно отсюда почерпнуть – то, что любую подвижку можно сочетать с любым оператором. Это означает, что, потихоньку изучая различные подвижки и операторы, на деле вы изучаете мощный язык редактирования текста.
Нужно только помнить общую форму команды Vim:
<счетчик><оператор><tтекстовый объект или подвижка>
Это классная идея, которая вводит в самую суть причины, почему Vim так любим теми, кто потратил время на его изучение.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
Другие объекты
Тем не менее, при всей крутости рассмотренных команд они способны малость досадить: желая удалить слово, нужно тщательно позиционировать курсор на первой букве этого слова. Правда, при столь гибкой системе подвижек Vim (о которой мы скоро узнаем больше), это не самая большая проблема в мире.
Но Vim – это Vim, и его авторы создали способ смягчить и эту проблему. Vim имеет ряд «текстовых объектов», которые работают как подвижки, но действуют на весь объект, а не в направлении движения.
Все эти текстовые объекты начинаются либо с a, либо с i. Они указывают, желаете ли вы работать «вокруг» объекта, то есть прихватывать окружающие пробелы, или «внутри» объекта, то есть пробелы игнорировать.
Осталось узнать, с какими объектами можно работать подобным образом. Есть w для работы над словом, s – над предложениями, p – над абзацами, а также все виды скобок и кавычек.
Рассмотрим такой кусок кода JavaScript:
function vimRules(alpha, beta) { }
При желании изменить параметры, передаваемые в функцию, вы можете поместить курсор в любом месте в скобках и набрать ci), для «изменения в скобках». Текущие аргументы будут удалены, скобки останутся на месте, а Vim перейдет в режим вставки, готовый, чтобы вы начали печатать.
Или, если вы работали над сочинением или статьей и подумали, что предыдущее предложение было несколько многословно, вам нужно всего лишь поместить курсор в любом месте предыдущего предложения и набрать cas, и предложения не станет.
Перемещение
Теперь, зная, как язык Vim работает, и изучив различные подвижки, текстовые объекты и операторы, вы быстро обнаружите, что можете редактировать документы такими способами, которыми вам раньше и в голову бы не пришли. Но даже с текстовыми объектами вы все равно должны быть в состоянии установить курсор на нужный объект быстро, если намерены редактировать эффективно. Подвижки вроде тех, с которыми мы уже сталкивались, позволяют легко перемещаться в широких направлениях. Для более точных перемещений, однако, удобнее будет использовать операторы поиска Vim.
Ввод / переведет Vim в режим поиска: Vim будет ожидать ввода строки, которую вы ищете.
Нажатие Return переместит курсор на первое совпадение, а повторное нажатие n переместит курсор на последующие .
Режим поиска Vim – весьма эффективный способ быстрого перемещения по документу, но, как и большинство опций Vim по умолчанию, может быть изменен и улучшен посредством манипуляции некоторыми из многих доступных настроек.
- Метамодернизм в позднем творчестве В.Г. Сорокина
- ЛитРПГ - последняя отрыжка постмодерна
- "Ричард III и семиотика"
- 3D-визуализация обложки Ridero создаем обложку книги при работе над самиздатом.
- Архитектура метамодерна - говоря о современном искусстве, невозможно не поговорить об архитектуре. В данной статье будет отмечено несколько интересных принципов, характерных для построек "новой волны", столь притягательных и скандальных.
- Литература
- Метамодерн
- Рокер-Прометей против изначального зла в «Песне про советскую милицию» Вени Дркина, Автор: Нина Ищенко, к.ф.н, член Союза Писателей ЛНР - перепубликация из журнала "Топос".
- Как избавиться от комаров? Лучшие типы ловушек.
- Что делать если роблокс вылетает на windows
- Что делать, если ребенок смотрит порно?
- Почему собака прыгает на людей при встрече?
- Какое масло лить в Задний дифференциал (мост) Visco diff 38434AA050
- О чем может рассказать хвост вашей кошки?
- Верветки
- Отчетность бюджетных учреждений при закупках по Закону № 223-ФЗ
- Срок исковой давности как правильно рассчитать
- Дмитрий Патрушев минсельхоз будет ли преемником Путина
- Кто такой Владислав Поздняков? Что такое "Мужское Государство" и почему его признали экстремистским в России?
- Как правильно выбрать машинное масло в Димитровграде?
- Как стать богатым и знаменитым в России?
- Почему фильм "Пипец" (Kick-Ass) стал популярен по всему миру?
- Как стать мудрецом?
- Как правильно установить FreeBSD
- Как стать таким как Путин?
- Где лучше жить - в Димитровграде или в Ульяновске?
- Почему город Димитровград так называется?
- Что такое метамодерн?
- ВАЖНО! Временное ограничение движения автотранспортных средств в Димитровграде
- Тарифы на электроэнергию для майнеров предложено повысить
В Vim, попробуйте выполнить :set incsearch и поискать некий текст. Вы заметите, что вхождения будут выделяться по мере ввода. Вы можете использовать это, чтобы добраться до места в тексте еще быстрее, набрав лишь кусок слова, достаточный для его однозначной идентификации. Увидев, что нужное слово выделено, нажмите Return и выполняйте желаемые команды редактирования.
Поиск можно уточнить, выполнив команды :set ignorecase и :set smartcase. Первая делает поиск без учета регистра, а вторая отменяет результаты первой, если в строке поиска присутствуют заглавные буквы. Таким образом, поиск “bob” обнаружит “Bob”, “BOB” и “BoB”; а поиск “Bob” – только “Bob”.
Vimrc
Vim имеет много, ну очень много настроек. Вы можете просмотреть их все, выполнив :options. По мере просмотра, нажатие на Return на строке ‘set’ будет переключать опции, а нажатие Return на строке описания даст вам полное описание данного параметра.
Продвигаясь дальше и узнавая больше о различных параметрах, которые вы хотите включать при каждом запуске сеанса Vim, можно настроить Vim, чтобы любимые настройки сразу вошли в действие.
Для этого Vim предоставляет файл /home/<user>/.vimrc. Это ваш личный файл настроек. В каждой строке помещаются отдельные команды, которые вы могли бы печатать после двоеточия в Обычном [Normal] режиме Vim. Например, если вы хотите включить указанные выше параметры поиска по умолчанию, ваш файл .vimrc будет выглядеть так:
set incsearch
set ignorecase
set smartcase
Заметим, что для ввода настроек в действие следует перезапустить Vim.
Забавный способ получить представление о том, какие параметры полезно включить в файл .vimrc — поглазеть на других людей. Многие вывешивают свои настройки в Интернет, так что быстрый поиск по vimrc добудет много результатов. Вы также можете ознакомиться с двумя врезками, Vim для программистов и Vim для писателей, чтобы увидеть, какие параметры стоит включить, если вы попадаете в любой из этих категорий.
Дерготня
Мы уже рассмотрели самые распространенные функции редактирования и передовые приемы Vim, которые делают его эффективнее и мощнее. Единственное, о чем мы пока не говорили, однако, это копирование и вставка.
Копирование и вставку мы считаем сами собой разумеющимися в графических приложениях. Вы выделяете текст мышью и выбираете соответствующую опцию в меню Правка. Но Vim – консольное приложение, и в нем эти действия выполняются немного по-другому.
Во-первых, основы. Копирование в Vim называется «выдергиванием [yanking]» и выполняется клавишей y в Обычном или Визуальном [Visual] режиме. Вставка осуществляется по клавише p. Вырезание в Vim – это все равно что удаление, и вырезать текст можно любой из команд удаления.
Вместо того, чтобы сохранять выдергивание, вставку и вырезание в одном месте, Vim имеет несколько регистров. Имена у них от a до z, и вы в любой момент времени можете получить 26 различных кусочков текста.
Регистры работают, предваряя одну из указанных операций строкой ”a, где” ‘a’ – имя регистра. Итак, чтобы скопировать слово в регистр ‘b’, вы должны ввести ”byw в Обычном режиме. Для вставки этого текста введите ”bp.
Имя регистра указывать не обязательно. Если этого не сделать, Vim просто сохранит или возьмет содержимое из безымянного регистра ””.
Кроме этих регистров общего назначения, в Vim также имеется несколько специальных. Самый полезный из них – регистр ‘0’. Он хранит только «выдернутый» текст, а безымянный регистр – также и удаленный текст.
Это полезно, когда вы хотите выдернуть текст, удалить несколько строк, а затем вставить его. Если вы просто использовали безымянный регистр, выдернутый текст заменится на удаленный. Если вы вставляете с ”0p, вы получите выдернутый текст, а не удаленный.
Модули расширения
Есть одна функция Emacs, связанная с выдергиванием, которой в Vim никогда не было, под названием «покойницкая [kill ring]». Она сохраняет все выдернутые, удаленные или измененные тексты и делает их доступными для каждого запущенного экземпляра Emacs. При каждом добавлении чего-то в «покойницкую» предыдущее содержимое остается, и пользователь может переключаться между всеми предыдущими «убитыми».
Vim, однако, имеет мощный скриптовый интерфейс, что означает возможность разнообразного его расширения и дополнения. Один пользователь создал скрипт yankring, который воссоздает «покойницкую» Emacs.
Все скрипты Vim можно найти в Интернете, на www.vim.org/scripts. Зайдя на этот сайт и поискав скрипт yankring, вы увидите ссылку для его скачивания.
Чтобы настроить Vim на добавление новых скриптов, вам первым делом нужно создать два новых каталога:
mkdir ~/.vim/plugins
mkdir ~/.vim/docs
После этого распакуйте архив и скопируйте содержимое его каталога модулей во вновь созданный каталог .vim/plugins, аналогично поступив с содержимым каталога docs. Сделав это, перезапустите Vim, обновите индекс подсказки по :helptags $HOME/.vim/doc, и вы в дамках. Вот так устанавливаются все скрипты Vim.
Чтобы узнать, как использовать Yankring, запустите :help yankring-tutorial. Скриптов для Vim полным-полно.
--Подстройка Vim «под себя»--
Модули расширения – не единственный способ настроить Vim. Vim также поддерживает создание новых сокращений и раскладки клавиатуры, что позволяет придумать быстрые способы сделать почти все.
Начнем с сокращений. Здесь, в LXF, мы должны представить наш текст с подзаголовками, кодом и врезками по всему тексту. Наша разметка выглядит так:
/// Код ///
SomeFunction () {}
/// Код ///
Вводить повторяющиеся символы наподобие этих, особенно с надолго прижатой клавишей Shift, на редкость нудно! Чтобы помочь горю, можно просто создать новую аббревиатуру в Vim. Как подсказывает название, аббревиатура – это особая строку текста, которая при переходе в режим вставки заменяется на более длинный фрагмент текста. Добавление iab codes и iab endc к вашему файлу .vimrc, например, означает, что если вы введете “codes”, затем пробел, оно будет заменено на /// Код ///.
Так гораздо проще, но будьте осторожны с теми строками, что вы используете для аббревиатур.
Аббревиатуры можно применять для замены типичных опечаток. Если вы часто печатаете ‘the’ как ‘teh’, задайте это как аббревиатуру, и опечатка всегда будет устранена.
--Назначение клавиш--
Назначение клавиш [key maps] отличается от аббревиатур. Это не предоставление быстрого способа ввести фиксированные текстовые строки: переназначение клавиш позволяет создавать альтернативные пути для выполнения различных действий в Vim.
Возьмите, к примеру, Yankring. Чтобы увидеть, что сейчас находится в Yankring, нужно выполнить :YRShow. Это не слишком эффективная команда, но вы можете ускорить процесс, повесив ее на одну клавишу.
В Vim есть два способа это сделать. Первый добавляет запись ‘map’ в файл .vimrc. Формат похож на формат записи ‘iab’: map <F5>:YRShow<CR> велит клавише F5 запустить показ Yankring. Обратите внимание, что указанные нажатия клавиш именно те, что вы набрали бы, выполняя команду, в том числе <CR> (возврат каретки).
Такое применение map может, однако, вызвать проблемы, поскольку по умолчанию это рекурсивная команда. Это означает, что если вы назначите j для gj, а потом d для j, то обнаружите, что d будет выполнять не j, а gj. Чтобы обойти эту проблему, можно использовать команду noremap, которая создает отображения, не являющиеся рекурсивными. Вернувшись к нашему примеру с командой noremap, вы обнаружите, что j выполняет gj, а d выполняет j.
Это еще не все, люди
Хотя мы подошли к концу урока этого месяца, в Vim еще много чего осталось неохваченным. Обязательно прочтите отличные встроенные файлы помощи, особенно те, что составляют руководство пользователя, набрав :help user. По сравнению со справочной документацией это приятное чтение.
Самое главное, не переживайте, если не выучите все сразу. Для этого там просто слишком всего много. Вместо этого, изучайте по кускам, по мере надобности, и благодаря логике, лежащей в основе системы команд Vim, вы скоро обнаружите, что освоили сложный язык редактирования текста! |
Придадим Vim элегантности
Аскеты среди нас могут думать, что внешнее оформление вашего текстового редактора не имеет значения: ну, видите вы слова на экране и можете делать работу, а все остальное только отвлекает. Отчасти это верно, но если вы целый день пялитесь в свой текстовый редактор, вам будет важен его приятный вид. Вам захочется, чтобы схема подсветки синтаксиса была осмысленной, а также контраста для удобства.
Если вы используете gVim, графический порт Vim, или ваш терминал поддерживает цвета (большиство современных терминалов это умеют), то можно настроить цвета Vim для отображения текста.
Цветовые схемы приходят как файлы .vim, и их надо сохранить в каталоге ~/.vim/ colors, чтобы пустить в дело. Сделав это, установите :colorscheme <schemename> в своем файле .vimrc для использования схемы.
Много разных схем есть на http://tinyurl.com/7omvmuq, и вы можете использовать ссылки в нижней части http://code.google.com/p/vimcolorschemetest для предпросмотра всех цветовых схем.