Замена vim: vim замена текста с подстановкой
О заменах в Vim, использующих регулярные выражения / Хабр
Привет, хабр! Ни для кого не секрет, что старина Vim очень хорош для решения разнообразнейшего круга проблем. Я бы хотел немного пописать об одной из составляющих, которые делают наш любимый редактор настолько мощным, насколько мощным он является — об инструментарии замен, использующем регулярные выражения. Свое повествование я планирую построить, рассказывая о том, как я решал пару специфических задач, и дополняя этот рассказ некоторыми базовыми справочными сведениями.
С одной стороны, про все это есть подробнейший хелп, доступный по адресу :help usr_27.txt — оттуда и было почерпнуто все, о чем будет идти речь. С другой стороны, когда мне понадобилось решить описываемые задачи, я потратил на это значительное время. Это дает мне право надеяться на то, что мой текст будет все же полезен. Сразу хочу оговориться, что я человек, далекий от программирования, поэтому моя терминология может показаться странной или нелепой — прошу меня за это простить.
Однажды я столкнулся с необходимостью удалить из html файла все теги. Немного подумав, я решил, что мне просто нужно осуществить замену всего, что окружено треугольными скобками, на пустое место, т.е. вот такую замену
<'фраза'> -> ' ' (ничто).
Поиск и замена в Vim осуществляется командой :substitute, однако куда удобнее использовать для нее аббревиатуру :s. Общий синтаксис этой команды примерно такой:
:{пределы}s/{что заменяем}/{на что заменяем}/{опции}
Элемент {пределы} должен содержать область, в которой мы бы хотели, чтобы совершалась замена. Если опустить этот элемент, то поиск и замена будет произведен только в той строке, где располагается курсор. Для замены во всем файле можно использовать символ ‘%’. Для поиска и замены в области, начинающейся со строки l1 и заканчивающейся строкой l2, {пределы} должны иметь вид ‘l1,l2’, например :14,17s/ будет осуществлять поиск и замену в строках с 14-й по 17-ю. Отдельного упоминания заслуживают строка с курсором, номер которой символически обозначается точкой, и последняя строка, номер которой обозначается знаком доллара. Таким образом, для того, чтобы осуществить поиск от текущей строки до конца файла, используют команду ‘:.,$s/’.
Вся эта команда осуществляет в указанных пределах поиск последовательности, удовлетворяющей критериям элемента «что заменяем», и заменяет эту последовательность на последовательность символов, построенную по правилам элемента «на что заменяем», учитывая опции, указанные после последнего слеша.
Первая команда, которую я попробовал для решения своей задачи, была следующая
:%s/<.*>//g
До первого слеша идет команда поиска и замены во всем файле. Между первым и вторым слешами идет последовательность, которую Vim будет искать. Подробнее о ней.
Сначала идет треугольная скобка, Vim будет искать буквальное совпадение с ней. Точка обозначает любой символ, а звездочка обозначает вхождение предыдущего символа произвольное число раз — начиная с нуля и до бесконечности. Таким образом, последовательность ‘.*’ обозначает любую последовательность любых символов. Наконец, далее закрывающая треугольная скобка. Да, прошу прощения, если терминология «треугольных скобок» оскорбляет восприятие тех, кто помнит, что это знаки «меньше-больше» (:
Между вторым и третьим слешами стоит последовательность символов, которая будет подставлена на место последовательности, удовлетворяющей указанным критериям. Мы хотим просто массового удаления, поэтому там у нас ничего нет.
Символ g, который завершает команду, обозначает поиск во всей строке. В противном случае Vim искал бы только первое совпадение в каждой из строк, входящих в {пределы}. Еще из полезных опций припоминаются опция ‘n’, которая осуществляет только поиск, но не заменяет (это помогает проверить, совпадают ли действительные критерии поиска с желаемыми), и ‘с’, которая спрашивает подтверждения перед каждым актом замены.
Итак, описанная команда осуществляет поиск последовательности, которая состоит из любых символов, заключенных в треугольные скобки.>]*>//g
Можно прикинуть, как решается такая задача в, скажем, блокноте, и в Vim. В блокноте я бы стал сначала массово заменять самые популярные теги на пустое место (например, первым бы запустил замену тега ‘p’ на пустое место), а потом стал бы искать треугольные скобки и удалять их и то, что внутри. На обработку действительно большого файла ушла бы у меня куча времени. А тут все получается одной командой — так просто.
Теперь еще об одной задаче — по долгу службы мне приходится пользоваться программой Wolfram Mathematica, которая на выходе дает много ASCII информации, которую, в свою очередь, требуется обработать для удобочитаемости. Например, отыскание абсолютной величины какого-то выражения эта программа обозначает словом ‘Abs’ и берет это выражение еще в квадратные скобки. Мне нравится читать математические тексты, пропущенные через Latex, и нахождение абсолютной величины совершенно естественно обозначать вертикальными палками (vertical bar). Так что мне нужно во всем файле совершить замену
Abs[ 'выражение' ] -> | 'выражение' |
Если бы надо было просто удалить все вхождения слова ‘Abs’, было бы совсем просто и аналогично предыдущей задаче, но в этом случае нам нужно еще и сохранить ‘выражение’, причем, каждый раз оно будет новым.; \* и т.д. Сам слеш предваряется также слешем. Выглядит это так: для поиска последовательности ‘\cos’ надо ввести ‘\\cos’.
Наконец, последняя задача, о которой я хотел бы написать. Та же Mathematica оперирует с множеством величин, которые обозначаются заглавной латинской буквой с числовым индексом, состоящим из одной цифры. В ASCII формате эти латинская буква и цифра просто идут подряд, например ‘U1’. Для того, чтобы Latex обработал бы их как букву с индексом, индекс надо предварить символом нижнего подчеркивания ‘_’. Обрисовывается задача — совершить замену вида
'Заглавная латинская буква''цифра' -> 'Заглавная латинская буква'_'цифра'
Самое тривиальное решение, которое напрашивается — перебрать все комбинации, если их немного. То есть, запустить замену сначала ‘U1’ -> ‘U_1’, потом ‘U2’ -> ‘U_2’ и т.п. Понятно, что это не наш метод. Мы вспомним, что есть квадратные скобки. И для того, чтобы найти одну заглавную латинскую букву, достаточно ввести шаблон ‘[A-Z]’. Но и это не предел. Для такого шаблона у Vim есть специальная аббревиатура: ‘\u’ (от ‘uppercase’). Для цифр же есть ‘\d’ (от ‘digit’). Подробнее о таких конструкциях можно почитать по адресу :help pattern.txt. С использованием этих аббревиатур команда для поиска примет вид
:%s/\(\u\)\(\d\)/\1_\2/g
Тут опять встречается группировка круглыми скобками: она позволяет при поиске поместить найденную букву и цифру в память под соотвествующими номерами, и впоследствии их оттуда извлечь, вызывая командами с теми же номерами: ‘\1’ вызовет букву, а ‘\2’ — цифру.
Эти три несложные задачи, как мне кажется, отлично демонстрируют возможности Vim в поиске и замене. Полагаю, что если бы мне потребовалось бы решить одну из них, имея в руках текстовый редактор типа блокнота или, скажем, notepad++, время, которое я бы затратил на решение, существенно превзошло бы время, которое я бы потратил на то, чтобы обзавестись на той же машине копией Vim (:
О заменах в Vim, использующих регулярные выражения / Хабр
Привет, хабр! Ни для кого не секрет, что старина Vim очень хорош для решения разнообразнейшего круга проблем. Я бы хотел немного пописать об одной из составляющих, которые делают наш любимый редактор настолько мощным, насколько мощным он является — об инструментарии замен, использующем регулярные выражения. Свое повествование я планирую построить, рассказывая о том, как я решал пару специфических задач, и дополняя этот рассказ некоторыми базовыми справочными сведениями.
С одной стороны, про все это есть подробнейший хелп, доступный по адресу :help usr_27.txt — оттуда и было почерпнуто все, о чем будет идти речь. С другой стороны, когда мне понадобилось решить описываемые задачи, я потратил на это значительное время. Это дает мне право надеяться на то, что мой текст будет все же полезен. Сразу хочу оговориться, что я человек, далекий от программирования, поэтому моя терминология может показаться странной или нелепой — прошу меня за это простить.
Однажды я столкнулся с необходимостью удалить из html файла все теги. Немного подумав, я решил, что мне просто нужно осуществить замену всего, что окружено треугольными скобками, на пустое место, т.е. вот такую замену
<'фраза'> -> ' ' (ничто).
Поиск и замена в Vim осуществляется командой :substitute, однако куда удобнее использовать для нее аббревиатуру :s. Общий синтаксис этой команды примерно такой:
:{пределы}s/{что заменяем}/{на что заменяем}/{опции}
Элемент {пределы} должен содержать область, в которой мы бы хотели, чтобы совершалась замена. Если опустить этот элемент, то поиск и замена будет произведен только в той строке, где располагается курсор. Для замены во всем файле можно использовать символ ‘%’. Для поиска и замены в области, начинающейся со строки l1 и заканчивающейся строкой l2, {пределы} должны иметь вид ‘l1,l2’, например :14,17s/ будет осуществлять поиск и замену в строках с 14-й по 17-ю. Отдельного упоминания заслуживают строка с курсором, номер которой символически обозначается точкой, и последняя строка, номер которой обозначается знаком доллара. Таким образом, для того, чтобы осуществить поиск от текущей строки до конца файла, используют команду ‘:.,$s/’.
Вся эта команда осуществляет в указанных пределах поиск последовательности, удовлетворяющей критериям элемента «что заменяем», и заменяет эту последовательность на последовательность символов, построенную по правилам элемента «на что заменяем», учитывая опции, указанные после последнего слеша.
Первая команда, которую я попробовал для решения своей задачи, была следующая
:%s/<.*>//g
До первого слеша идет команда поиска и замены во всем файле. Между первым и вторым слешами идет последовательность, которую Vim будет искать. Подробнее о ней.
Сначала идет треугольная скобка, Vim будет искать буквальное совпадение с ней. Точка обозначает любой символ, а звездочка обозначает вхождение предыдущего символа произвольное число раз — начиная с нуля и до бесконечности. Таким образом, последовательность ‘.*’ обозначает любую последовательность любых символов. Наконец, далее закрывающая треугольная скобка. Да, прошу прощения, если терминология «треугольных скобок» оскорбляет восприятие тех, кто помнит, что это знаки «меньше-больше» (:
Между вторым и третьим слешами стоит последовательность символов, которая будет подставлена на место последовательности, удовлетворяющей указанным критериям. Мы хотим просто массового удаления, поэтому там у нас ничего нет.
Символ g, который завершает команду, обозначает поиск во всей строке. В противном случае Vim искал бы только первое совпадение в каждой из строк, входящих в {пределы}. Еще из полезных опций припоминаются опция ‘n’, которая осуществляет только поиск, но не заменяет (это помогает проверить, совпадают ли действительные критерии поиска с желаемыми), и ‘с’, которая спрашивает подтверждения перед каждым актом замены.
Итак, описанная команда осуществляет поиск последовательности, которая состоит из любых символов, заключенных в треугольные скобки. Vim попросту удалит каждую такую последовательность. К сожалению, эта команда не работает должным образом, поскольку между треугольными скобками она ищет любые символы. В том числе, другие треугольные скобки. Поэтому если в одной строке будет несколько пар треугольных скобок, Vim выберет последовательность, которая начинается с первой открывающей и заканчивается последней закрывающей треугольной скобкой.>]*>//g
Можно прикинуть, как решается такая задача в, скажем, блокноте, и в Vim. В блокноте я бы стал сначала массово заменять самые популярные теги на пустое место (например, первым бы запустил замену тега ‘p’ на пустое место), а потом стал бы искать треугольные скобки и удалять их и то, что внутри. На обработку действительно большого файла ушла бы у меня куча времени. А тут все получается одной командой — так просто.
Теперь еще об одной задаче — по долгу службы мне приходится пользоваться программой Wolfram Mathematica, которая на выходе дает много ASCII информации, которую, в свою очередь, требуется обработать для удобочитаемости. Например, отыскание абсолютной величины какого-то выражения эта программа обозначает словом ‘Abs’ и берет это выражение еще в квадратные скобки. Мне нравится читать математические тексты, пропущенные через Latex, и нахождение абсолютной величины совершенно естественно обозначать вертикальными палками (vertical bar). Так что мне нужно во всем файле совершить замену
Abs[ 'выражение' ] -> | 'выражение' |
Если бы надо было просто удалить все вхождения слова ‘Abs’, было бы совсем просто и аналогично предыдущей задаче, но в этом случае нам нужно еще и сохранить ‘выражение’, причем, каждый раз оно будет новым.; \* и т.д. Сам слеш предваряется также слешем. Выглядит это так: для поиска последовательности ‘\cos’ надо ввести ‘\\cos’.
Наконец, последняя задача, о которой я хотел бы написать. Та же Mathematica оперирует с множеством величин, которые обозначаются заглавной латинской буквой с числовым индексом, состоящим из одной цифры. В ASCII формате эти латинская буква и цифра просто идут подряд, например ‘U1’. Для того, чтобы Latex обработал бы их как букву с индексом, индекс надо предварить символом нижнего подчеркивания ‘_’. Обрисовывается задача — совершить замену вида
'Заглавная латинская буква''цифра' -> 'Заглавная латинская буква'_'цифра'
Самое тривиальное решение, которое напрашивается — перебрать все комбинации, если их немного. То есть, запустить замену сначала ‘U1’ -> ‘U_1’, потом ‘U2’ -> ‘U_2’ и т.п. Понятно, что это не наш метод. Мы вспомним, что есть квадратные скобки. И для того, чтобы найти одну заглавную латинскую букву, достаточно ввести шаблон ‘[A-Z]’. Но и это не предел. Для такого шаблона у Vim есть специальная аббревиатура: ‘\u’ (от ‘uppercase’). Для цифр же есть ‘\d’ (от ‘digit’). Подробнее о таких конструкциях можно почитать по адресу :help pattern.txt. С использованием этих аббревиатур команда для поиска примет вид
:%s/\(\u\)\(\d\)/\1_\2/g
Тут опять встречается группировка круглыми скобками: она позволяет при поиске поместить найденную букву и цифру в память под соотвествующими номерами, и впоследствии их оттуда извлечь, вызывая командами с теми же номерами: ‘\1’ вызовет букву, а ‘\2’ — цифру.
Эти три несложные задачи, как мне кажется, отлично демонстрируют возможности Vim в поиске и замене. Полагаю, что если бы мне потребовалось бы решить одну из них, имея в руках текстовый редактор типа блокнота или, скажем, notepad++, время, которое я бы затратил на решение, существенно превзошло бы время, которое я бы потратил на то, чтобы обзавестись на той же машине копией Vim (:
Поиск и замена в VIM
?
LiveJournal
- Main
- Ratings
- Interesting
- iOS & Android
Disable ads
Login
- Login
CREATE BLOG
Join
English
(en)
- English (en)
- Русский (ru)
- Українська (uk)
- Français (fr)
- Português (pt)
- español (es)
- Deutsch (de)
- Italiano (it)
- Беларуская (be)
Волшебные замены в Vim, много файлов
Хотим сделать замену, описываемую регулярным выражением, в большом количестве файлов сразу. Рассмотрим эту процедуру на примере добавления тэга в нескольких html-файлах (знать html не надо).
Допустим, решили вставить во все файлы tag <meta>
такого вида:
1 | <meta http-equiv="refresh" content="seconds; URL-redirect-to"> |
Это один из способов (плохой) для включения переадресации с адреса oldsite.ru/page_name
на newsite.ru/page_name
и с oldsite.ru/folder/page_name
на newsite.ru/folder/page_name
для каждой страницы. Иными словами, мы хотим, чтобы в каждом файле появилось некоторое выражение, зависящее от имени файла.
Заходим в директорию с нашими html-файлами. Запускаем vim
и выполняем:
Рекурсивное открытие файлов из всех поддиректорий
Командой :ls
убедитесь, что открыты все необходимые страницы. Теперь нужно решить, что будем менять. Перенаправляющий мета-tag надо поместить между <head>
и </head>
, поэтому неплохой идеей будет замена
на
1 | <head> |
Для этого скопируем выражение выше в регистр, скажем, r
(выделить + "ry
). Уточняю: можно использовать именно page_name
. Это просто шаблон, можно изменить его на что угодно, что не встречается на ваших страницах. Затем:
Меняем <head> на содержимое регистра r.
1 | :argdo %s/<head>/\=@r/ge | update |
В результате этой замены во всех файлах появится строка, содержащая шаблон page_name
, который мы следующим действием заменим на реальное название файла. Содержимое регистра r
вставляется выражением \=@r
. Без команды «| update» vim
не станет менять больше одного файла. Командой :ls
можно проверить, в каких файлах изменение произошло, а в каких — нет: «line 0» говорит о том, что курсор в файле не перемещался, т.е. замен не происходило. Теперь меняем page_name
на настоящее имя файла (регистр %
хранит имя файла):
Регистр % всегда содержит имя файла.
1 | :argdo %s/page_name/\=@%/ge | update |
Вот, собственно, и всё. Тогда в файле abrikos.html
, лежащем в корне, вместо <head>
появится:
1 | <head> |
А в файле honduras.html
из поддиректории countries
вместо <head>
появится:
1 | <head> |
В заключение мне хочется сказать, что те два года, что я общаюсь с редактором vim, меня не покидает ощущение волшебства. Я понял, что vim стал мне на самом деле удобнее любого другого редактора, когда стал угадывать его команды. Например, я знал, что удалить одно слово вместе с пробелом можно командой d a w. Как-то раз мне захотелось удалить предложение, и вспомнив, что по-английски предложение будет sentence, я нажал d a s — и это сработало. Однажды в чьём-то блоге (ссылку позабыл, к сожалению) я прочитал такое сравнение, воспроизвожу по памяти:
Конечно, нельзя сесть за
vim
и сразу начать работать. Необходимо приложить усилия, чтобы эффективно пользоваться мощнейшим текстовым редактором на свете. Многих это отпугивает. «Зачем», — говорят они, — «я буду тратить время на обучение, если и так могу отредактировать файл в своём любимом gedit, notepad++, geany?» Но ведь мало кого останавливает то, что машину нужно учиться водить. Зачем, мол, мне машина, если я могу ходить пешком и этому учиться не надо? Так и сvim
. Вы тратите время на обучение, но затем работаете гораздо эффективнее. Вы учитесь водить машину, но затем перемещаетесь гораздо быстрее, чем пешком.
Красивое сравнение. Но неправильное. Освоить vim
гораздо сложнее, чем научиться водить машину.
замена линии на другую, выдернутую раньше
хотя бы раз в день у меня возникает следующая ситуация:
A: This line should also replace line X
...
X: This is line should be replaced
Я считаю, что я не выполняю эту задачу эффективно.
что я делаю:
- перейти к строке A:AG
- Янк линия A:yy
- перейти к строке X: XG
- вставить строку A:P
- перейти к старой линии: j
- удалить старую строку: dd
это имеет дополнительный недостаток, что строка X теперь находится в регистре по умолчанию, что раздражает, если я нахожу другую строку, которая должна быть заменена на A. дергая и вставляя из дополнительного регистра («АУУ, » aP) делает эту простую задачу еще менее эффективной.
Мои Вопросы:
- я пропустил встроенную команду Vim для замены дернутой строки раньше?
- если нет, как я могу связать свою собственную команду, которая оставляет (или восстанавливает) вырванную строку в регистре по умолчанию?
16 ответов
что бы я сделал :
aG
Y
xG
Vp
вам не нужно выходить из нормального режима, но это тут дерни за веревку. Однако вы можете использовать V"0p
который всегда будет ставить линию дернул в шаге 2.
Vp
: выберите строку, вставьте то, что было выдернуто
Это имеет дополнительный недостаток
эта строка X теперь по умолчанию
регистрация, которая раздражает, если я нахожу
еще одна строка, которую следует заменить
с А.
чтобы удалить текст, не затрагивая обычные регистры, вы можете использовать регистр черной дыры "_
:
"_dd
41
автор: Eugene Yarmash
Я бы использовал режим командной строки (Ex) и сделал следующие две команды
:XmA
:Ad
Это просто перемещает строку X чуть ниже A, а затем удаляет ходы, которые выстраиваются в линию
:7m3
:3d
9
автор: ericgamliel
- yy
- j (перейдите к строке, которую вы хотите заменить), а затем
- Vp (верхний регистр v, а затем p, будет заменен на дернутое содержимое)
8
автор: Mariano Anaya
переход в начало первой строки.
y, $ – скопируйте строку без линейного взлома в конце
переместить в начало целевой линии.
V, p – заменить только одну целевую строку
c, c, Ctrlr, 0, Esc – замените целевую строку на оригинальную yank
перейти к началу следующей целевой линии.
. – повторяет команды в 4.2.
Примечания:
4.1 составляет y, $ потому что если вы делаете y, y или Y вы скопируете linebreak, и Ctrlr, 0 фактически добавляет linebreak ниже вашей целевой линии.
4.2 заменяет V p, который не работает с повтором, потому что технически последнее действие-удалить, поэтому . просто удалить строку.
Если кто-нибудь знает, как выдать » заменить текущую строку регистром’ из режима EX (командная строка), я хотел бы услышать от вас (и знать, где вы нашел документацию). Может быть повторяемая команда EX, которая быстрее 4.2 и / или не имеет предупреждения о взломе линии.
6
автор: Jordan Morris
Вы можете использовать это в визуальном режиме.
- перейти к строке A:
A
G - выберите строку с визуальным режимом:VESC
- перейти к строке X:
X
G - введите режим замены строки:S
- вставьте скопированную строку:shift+вставить (или любое другое сопоставление, которое у вас есть для вставки из буфер.)
4
автор: Nathan Fellman
вот что я бы сделал
- переместить начало строки A,AG (где A-номер строки, очевидно)
- Yank line для некоторых регистров, например a (без новой строки). Тип "ay$
- перейти к вставить строки XG
- замена строки S
- вставить из регистра a, Ctrl-Ra
3
автор: Brian Rasmussen
основываясь на ответах, которые предлагают использовать Vp
или VP
чтобы вставить строку — чтобы избежать изменения содержимого регистра yank, я считаю, что самая эргономичная команда просто:
VPY
вы можете использовать эти команды в нормальном режиме:
:AmX | Xd
на на m[ove]
, который перемещает номер строки A после номера строки X, если вы хотите скопировать вместо перемещения строки, используйте co[py]
. the
2
автор: Nafaa Boutefer
- :ay (где a-номер строки. Пример :20й). Это тянет линию (каламбур).
- Vp
для этого мне проще использовать команду Ex; ex. чтобы переместить строку 9 в 46:
:46|9m.|-1d
это переместит курсор на строку 46, переместит строку 9 ниже текущей,
затем удалите предыдущую строку (так как перемещенная строка является текущей).
или используя метку(ы), используя метку ‘a’:
:46ma a|9m'a|'ad
Мне часто приходится Y одну строку и заменять ее в нескольких местах, каждый из которых имеет другое значение (что означает, что я не могу выполнить регулярное выражение).
Y чтобы дернуть нужную исходную строку
и затем на каждой строке, которую вы хотели бы заменить,VpнольY
в свете недавнего комментария cicld (спасибо!), Я вижу, что я не полностью понял исходную проблему. Перемещение строки не подходит, но копирование (так как строка дернута.) Поэтому я бы изменил его на:
:1t20:20d_
скопируйте 1-ю строку ( псевдоним
:copy
) после строки 20 (на линии 21)удалить строку 20, поместив удаленную строку в регистр «черная дыра» (
_
) (т. е. не влияет на текущий буфер Янка)
как отметил в своем недавнем комментарии, это не повлияет на текущую позицию курсора.
вы также можете сделать:
Vy (in normal mode at the line you want to copy)
Vp (in normal mode at the line you want to replace)
- не создает пробелов или концов строк.
- курсор помещается в начало скопированного текста.
одни и те же клавиши можно использовать для перетаскивания/вставки более одной строки.
V (in normal mode at what you want to yank)
(use jk to move the selection)
y (to yank the selection)
V (in normal mode at where you want to paste)
(use jk to move the selection)
p (to replace the selection with the yanked lines)
Я бы просто использовал регистр» черная дыра»:
дано:
nnoremap » _dd
решение:
yy
заменить все точки, кроме последней в строке
Я ищу способ, чтобы заменить все точки в строке, кроме последней.
пример:
Blah - whatever - foo.bar.baz.avi
должны статьBlah - whatever - foo bar bar.avi
поскольку у меня будет более одной строки в файле, а количество точек варьируется в каждой строке, я ищу общее решение, а не что-то вроде «заменить первые совпадения X» на X, являющееся константой.
7
автор: ThiefMaster
3 ответов
Это, кажется, сделать трюк:
%s/\.\(.*\.\)\@=/ /g
\@=
это lookahead. Он соответствует только полной остановке, если есть какие-либо следующие полные остановки.
посмотреть :help zero-width
.
11
автор: Felix Kling
в качестве варианта первого ответа вы можете предпочесть следующий синтаксис:
%s/\.M
) только внутри визуального выбора (\%V
).Поиск, поиск и замена в Vim: подробное руководство
Могут ли разработчики выжить без хорошего поиска в редакторе? Кто никогда не использовал знаменитый трюк найти и заменить в одном или нескольких файлах?
Действительно, никто.
Хорошая новость: возможности поиска в Vim - это просто великолепие. С минимальной конфигурацией вы можете искать все, что хотите, где хотите, со скоростью света.
В этой статье мы узнаем, как:
- Искать в текущем файле.
- Искать в нескольких файлах.
- Найдите и замените все, о чем мечтаете.
- Используйте отличные плагины, чтобы превратить Vim в Search Monster ™.
Без функций поиска, которые я представлю вам в этой статье, Vim, возможно, не был бы частью моей среды разработки без мыши.
Небольшая точность: в этой статье я часто буду ссылаться на текущий рабочий каталог Vim . Команда ex : pwd
может сказать вам, что ваше.Чтобы изменить его, вы можете использовать : cd mydirectory
.
Если вам неудобно пользоваться Vim, я расскажу об основах, которые вам нужно знать.
Спасибо всем, кто помог мне с этой статьей, особенно хорошему сообществу Neovim Reddit. Я узнал тон от них!
Довольно лепета. Запустим Vim, поищем! Я предлагаю вам попробовать советы из этой статьи, пока вы их читаете: это поможет вам учиться и запоминать.
Поиск Vim в текущем файле
Основы
Для поиска в текущем файле вам просто нужно набрать /
в обычном режиме.Затем вам нужно ввести шаблон поиска, нажать введите
, и результат будет выделен в вашем файле.
Чтобы просмотреть результаты вперед и назад, введите n
и N
(для n
ext) соответственно.
При использовании /
выполняется поиск в файле вперед. Если вам нужно напрямую искать в обратном направлении, вы можете использовать ?
вместо этого.
Если вы хотите снова выполнить поиск, используя предыдущий шаблон поиска, //
- ваш друг.
Выделение поиска
Полезно видеть, что поиск выделен в файле, но по умолчанию он не включен. Для этого вы можете ввести команду : set hlsearch
или установить ее постоянно в вашем vimrc
.
Если вы используете Neovim, подсветка установлена по умолчанию.
Удаление последнего выделенного участка поиска
Команда : noh
в нормальном режиме уберет выделение, от которого вы пытались избавиться, нажимая (почти) каждую кнопку на клавиатуре.Вы знаете, как когда вы пытались выйти из Vim в первый раз.
Так как вы действительно не хотите вводить эту команду каждый раз при поиске, вы можете сопоставить ключ с
I. Новости |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Vim - это улучшенная (во многих отношениях) версия vi, вездесущего текстового редактора. можно найти в любой системе UNIX.VIM был создан Брэмом Мооленаар с помощью других людей. Это бесплатно, но если вам это нравится Вы можете сделать благотворительную помощь детям-сиротам в Уганде. У Vim есть собственный веб-сайт, www.vim.org и несколько списков рассылки, с огромным количеством информации по каждому аспекту VIM. Vim успешно прошел портирован практически на все существующие ОС. Это редактор по умолчанию во многих Linux. дистрибутивы (например, RedHat). VIM имеет все возможности современного программистского редактора - макроязык, подсветка синтаксиса, настраиваемый пользовательский интерфейс, простая интеграция с различные IDE плюс набор функций, которые делают VIM настолько привлекательным для пользователи: восстановление после сбоя, автоматические команды, управление сеансом. VIM имеет очень широкую и лояльную базу пользователей. Более 10 миллионов человек имеют он установлен (считая только пользователей Linux). По оценкам, есть около полумиллиона человек используют Vim в качестве основного редактора. И это число растет. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Я начал это руководство по одной простой причине - мне нравятся регулярные выражения. Ничто не сравнится с удовольствием от хорошо составленного регулярного выражения, которое делает именно то, что вы хотели :-).Надеюсь, это сносно в качестве предисловия. Если говорить более серьезно, регулярные выражения (или для краткости регулярные выражения) инструменты, используемые для управления текстом и данными. Они не существуют как отдельные продукт, но обычно являются частью какой-либо программы / утилиты. Самый известный Например, UNIX grep, - программа для поиска в файлах строк, соответствовать определенному шаблону. Схема поиска описана в терминах обычных выражения. Регулярные выражения можно рассматривать как специализированный язык шаблонов.Регулярные выражения весьма полезны и могут значительно сократить время, необходимое для выполнения некоторых утомительное редактирование текста. (терминология Regexp в значительной степени заимствована из книги Джеффри Фридла «Мастеринг. Регулярные выражения. ") |
||||||||||||||||||||||||||||||||||||||||||||||||||
Большое спасибо (в произвольном порядке): Бенджи Фишер, Зденек Секера, Пребен "Пеппе" Гулдберг, Стив Киркендалл, Шауль Карл и все другие которые помогли мне своими комментариями. Не стесняйтесь присылать мне ( volontir at yahoo dot com ) ваши комментарии. предложения, примеры ... |
||||||||||||||||||||||||||||||||||||||||||||||||||
Итак, что можно делать с регулярными выражениями? Самая частая задача - это
производить замены в тексте по определенным правилам. За это
учебное пособие вам необходимо знать команду поиска и замены VIM (S&R)
Часть командного слова, заключенная в "[" & "]" можно не указывать. Прежде чем я начну с описания шаблона, давайте поговорим об адресах строк.
в Vim.Некоторые команды Vim могут принимать перед собой диапазон строк. От
указав диапазон строк, вы ограничиваете выполнение команды этим конкретным
только часть текста. Диапазон строк состоит из одного или нескольких спецификаторов строк,
через запятую или точку с запятой. Вы также можете отметить свое текущее положение
в тексте наберите
Если диапазон строк не указан, команда будет работать с текущим только линия. Вот несколько примеров: - с 10 по 20 строку. За каждым может следовать (несколько раз) "+" или "-" и необязательный номер. Это число добавляется или вычитается из предыдущего номер строчки. Если номер не указан, используется 1. - все строки между участком 1 и участком 2, не включительно, п.е. строки, содержащие раздел 1 и Раздел 2 не будут затронуты. Шаблон - сначала найдите Раздел 1, затем первую строку с Подразделом перейти на одну строку вниз (начало диапазона) и найдите следующую строку с Subsection, шаг на одну строку вверх (конец диапазона). В следующем примере показано, как можно повторно использовать шаблон поиска: - поиск строки сечения и скопировать (скопировать) одну строку после в память. - и это будет искать следующий раздел строку и поместите (вставьте) сохраненный текст в следующую строку. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Совет 1: часто вам нужно выполнять S&R в тексте, который содержит Пути к файлам UNIX - текстовые строки с косой чертой ("/") внутри.Поскольку команда S&R использует косую черту для разделения шаблона / замены вы должны избегать каждой косой черты в своем шаблоне, т.е. использовать "\ /" для каждого "/" в вашем шаблоне: Чтобы избежать этого так называемого «обратного лабиринта», вы можете использовать разные разделители в S&R (я предпочитаю ":") Совет 2: Эти сопоставления могут оказаться полезными (поместите их в свой .vimrc файл) Эти сопоставления избавят вас от лишних нажатий клавиш и позволят вам начать введите свой шаблон поиска. После его ввода вы переходите к замене часть, введите ее и нажмите return. Вторая версия добавляет подтверждение флаг. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Предположим, вы хотите заменить все вхождения vi с VIM.Это легко сделать с помощью . Если вы пробовали этот пример, то, несомненно, заметили, что VIM заменил все вхождения vi, даже если это часть слова (например, навигатор). Если мы хочу быть более конкретным и заменить только целые слова vi тогда нам нужно исправить наш узор. Мы можем переписать его, поставив пробелы около vi: Но он все равно пропустит vi, за которым следует пунктуация или в конце строки / файла.vi $: VIM: Теперь предположим, что вы хотите заменить не только все vi но также Vi и VI. Для этого есть несколько способов:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
До сих пор наши строки шаблонов были построены из обычных или литералов. текстовых символов. Сила регулярных выражений заключается в использовании метасимволов . Это типы символов, которые имеют особое значение внутри шаблон поиска. За некоторыми исключениями эти метасимволы различаются. "волшебной" обратной косой чертой перед ними.В таблице ниже перечислены некоторые общие метасимволы VIM.
Итак, чтобы сопоставить дату, например, 01.09.2000, вы можете использовать (при условии, что вы не используете
"/" как разделитель в S&R) Для соответствия слову из 6 букв, начинающемуся с заглавной буквы Очевидно, что писать |
||||||||||||||||||||||||||||||||||||||||||||||||||
Используя кванторы, вы можете установить, сколько раз определенная часть вашего паттерна следует повторить, поставив после шаблона следующее:
Теперь гораздо проще определить шаблон, который соответствует слову любое
длина Эти квантификаторы жадные - это ваш шаблон будет пытаться сопоставьте как можно больше текста . Иногда это представляет собой проблема.Рассмотрим типичный пример - определим шаблон для соответствия текст с разделителями, т. е. текст, заключенный в кавычки, скобки и т. д. Поскольку мы не знаю, какой текст внутри кавычек, мы будем использовать Но этот шаблон будет соответствовать всему между первым " и последний "в следующей строке: Эту проблему можно решить с помощью нежадных квантификаторов:
Давайте используем Раньше: После: «Как можно меньше» здесь означает замену нулевого символа.Однако совпадение между символами происходит ! Чтобы объяснить это поведение Цитирую самого Брэма: Совпадение нулевых символов по-прежнему считается совпадением. Таким образом он заменит нулевые символы с "_". А затем перейдите к следующей позиции, где он будет соответствовать снова. Это правда, что использование "\ {-}" в большинстве случаев бесполезно. Это работает так чтобы соответствовать символу "*", который также соответствует нулю. Есть больше бесполезных: "x \ {- 1,}" всегда соответствует одному x.Вы могли бы просто использовать "Икс". Более полезно что-то вроде "x \ {70}". Остальные просто последовательны поведение: ..., "x \ {- 3,}", "x \ {- 2,}", "x \ {- 1,}. - Брам Но что, если мы хотим сопоставить только второе вхождение цитируемого текста? Или мы хотим заменить только часть цитируемого текста, оставив остальное нетронутый? Нам понадобится с группировкой и обратных ссылок. Но прежде чем поговорить подробнее о диапазонах символов. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Типичные диапазоны символов: Обратите внимание, что диапазон составляет всего один символ в поиске
шаблон, то есть на следующий текст: Раньше: После: и сейчас: Раньше: А теперь давайте рассмотрим пример из реальной жизни. Предположим, вы хотите запустить грамматику проверьте свой файл и найдите все места, где новое предложение не начинается с большой буквы. Шаблон, который поймает это: - точка, за которой следует один или несколько пробелов и слово в нижнем регистре. Мы знаем как найти ошибку, теперь посмотрим, как ее исправить.Сделать это нам нужно каким-то образом запомнить наш согласованный образец и вспомнить его позже. Это именно то, для чего нужны обратные ссылки . |
||||||||||||||||||||||||||||||||||||||||||||||||||
Вы можете сгруппировать части выражения шаблона, заключив их в " s: \ (\ w \ + \) \ (\ s \ + \) \ (\ w \ + \): \ 3 \ 2 \ 1:
, где Запасная часть: заменитьЗапасная часть S&R имеет свои собственные специальные символы, которые мы собираемся использовать для исправления грамматики:
Теперь полное S&R для исправления не заглавных слов в начале предложения выглядят как Мы исправили нашу грамматику и в качестве дополнительной работы заменили переменную количество пробелов между пунктуацией и первой буквой следующего предложение ровно с двумя пробелами. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Используя « |
||||||||||||||||||||||||||||||||||||||||||||||||||
Совет 3: Быстрое сопоставление для помещения \ (\) в строку шаблона |
||||||||||||||||||||||||||||||||||||||||||||||||||
Как и в арифметических выражениях, регулярные выражения выполняются в определенных порядок приоритета.Вот таблица приоритета, от высшего к низшему:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Я хочу представить еще одну весьма полезную и мощную команду Vim, которая мы собираемся использовать позже
Глобальные команды работают, сначала сканируя [ range ] из строк и отмечая каждую строку, где происходит совпадение. Через секунду сканирование [ cmd ] выполняется для каждой отмеченной строки с ее номером строки добавлено. Если строку изменить или удалить, ее отметка исчезнет. По умолчанию для [ range ] - это весь файл.Ошибка/ . w >> errors.txt - в текстовом блоке с пометкой После - здесь порядок обратный: сначала измените строку, затем скопируйте в конец. |
||||||||||||||||||||||||||||||||||||||||||||||||||
Сборник полезных советов по S&R: (1) прислал Антонио Коломбо: "простое регулярное выражение, которое я довольно часто использую для очистки текста: это пропускает пробелы в конце строки: " или (чтобы не работать на всех линиях): |
||||||||||||||||||||||||||||||||||||||||||||||||||
Для этого примера вам нужно немного знать HTML.Мы хотим сделать стол
содержания из заголовков (1) Сначала давайте сделаем именованные якоря во всех заголовках, т.е. поместим Пояснение: первая пара (2) Теперь скопируем все заголовки в одно место: Эта команда ищет в нашем файле строки, начинающиеся с Во-первых, мы хотим преобразовать все Во-вторых, мы хотим, чтобы наши записи Теперь наши записи выглядят так: Нам больше не нужны теги и замените закрывающие теги на структурные строки |
||||||||||||||||||||||||||||||||||||||||||||||||||
Довольно часто приходится работать с текстом, организованным в виде таблиц / столбцов.Рассмотрим, например, следующий текст
Предположим, мы хотим изменить все ячейки «Европа» в третьем столбце. в «Азию»:
Чтобы поменять местами первый и последний столбцы:
Продолжение следует... |
||||||||||||||||||||||||||||||||||||||||||||||||||
Здесь я хотел бы сравнить реализацию регулярного выражения Vim с другими, в частности, Perl's. Невозможно говорить о регулярных выражениях без упоминая Perl. (с помощью Стива Киркендалла) Основные различия между Perl и Vim:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Прочтите документацию VIM о шаблонах и поиске. Чтобы получить этот тип ": help pattern" в нормальном режиме VIM. В настоящее время на рынке есть две книги, посвященные регулярному использованию VIM. выражения: Окончательный справочник по регулярным выражениям - в книге Джеффри Фридла "Mastering" Регулярные выражения ", опубликованное O'Reilly & Associates, но в основном это касается регулярных выражений Perl.У О'Рейли есть один из главы книги доступны в Интернете. |
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Найти, преобразовать и заменить даты с помощью подстановок Vim
Команда подстановки Vim - мощный способ вносить изменения в текстовые файлы.
Помимо поиска и замены текста с помощью регулярных выражений, замены могут
вызовите внешние программы для более сложных замен.Используя
date
из подстановки, Vim может преобразовать все даты в файле в
другой формат и заменить их все сразу.
Входной файл - это HTML-страница со списком статей. Каждая статья включает
тег
со значением и атрибутом datetime для отображения публикации
Дата.
<статья>
Найти, преобразовать и заменить даты заменами Vim
<статья>
Обеспечение поддержки проектов программного обеспечения с открытым исходным кодом
<статья>
Тестирование на основе свойств в Elixir с использованием PropEr
…
Нам нужно преобразовать значения дат в более удобный формат,
включает полное название месяца («19 сентября 2017 г.») с сохранением
Атрибуты datetime в их текущем формате.
Результат: статьи с переформатированными датами
<статья>
Поиск, преобразование и замена дат с помощью замен Vim
<статья>
Обеспечение поддержки проектов программного обеспечения с открытым исходным кодом
<статья>
Тестирование на основе свойств в Elixir с использованием PropEr
…
Во входном файле более сорока статей, поэтому заменяя их все вручную
будет много работы, подверженной ошибкам.Вместо этого мы пишем замену, которая
находит все даты в файле и заменяет их переформатированным значением.
Поиск дат
Первым шагом в замене дат является поиск их места во входных данных.
файл и убедитесь, что они не совпадают с атрибутами datetime.
Чтобы найти все даты в файле, можно использовать ....-..- ..
( esc
/....-..- ..
) в качестве шаблона поиска, чтобы соответствовать формату даты. Однако это
результаты шаблона будут включать все совпадающие даты в файле, включая
в атрибутах datetime тегов
.
Во входном файле сразу за всеми значениями <время>
следует
знак меньше из закрывающего тега
. Чтобы предотвратить дату
атрибуты, которые будут включены в результаты, мы могли бы включить менее чем
войдите в шаблон поиска и обязательно добавьте его при замене.
Hoever, Vim поддерживает установку начала и конца совпадения в поиске
шаблон с использованием атомов шаблона \ zs
и \ ze
.Путем префикса <
в нашем
шаблон поиска с \ ze
, шаблон находит все даты, за которыми следует меньше чем
знак, но не включает его в соответствие, то есть не будет заменен.
Переформатирование дат из командной строки
Нам нужно полное название месяца в заменах даты, поэтому мы не можем изменить порядок
введите значение («2017-10-17»), чтобы получить желаемый результат. Вместо этого нам нужно
вызвать внешнюю утилиту, которая знает названия месяцев и может конвертировать между
форматы даты.
Мы переформатируем каждое совпадение нашего шаблона поиска в желаемый формат («Сентябрь
19, 2017 ») с утилитой date
. Мы используем "% Y-% m-% d"
как формат ввода
чтобы соответствовать результатам из шаблона поиска. Выходной формат - это "% B% d,
, чтобы получить полное название месяца, номер даты, запятую и год.
% Y "
число.
С этими форматами программа date
переформатирует 1991-11-02
на 2 ноября,
.
1991
$ date -jf "% Y-% m-% d" "1991-11-02" + "% B% d,% Y" 02 ноября 1991
-
-j
- Не пытайтесь установить системную дату
-
-f "% Y-% m-% d"
- Используйте переданный формат ввода вместо формата по умолчанию. В данном случае
"% Y-% m-% d"
чтобы соответствовать формату ввода (1991-11-02
). -
"1991-11-02"
- Пример даты для анализа с использованием входного формата, переданного в
-f
. -
+ "% B% d,% Y"
- Выходной формат, который дает
2 ноября 1991 г.
.
Обращение к внешним утилитам при замене
Мы знаем, как найти все даты в файле и как преобразовать дату в другую
формат из командной строки. Чтобы заменить все найденные даты на переформатированные
версии из утилиты date
, нам нужно запустить выражение из
замена .
Используя шаблон поиска, который мы подготовили ранее, мы можем найти и заменить все даты
значения из входного файла с подстановкой.Например, мы могли бы перезаписать
все даты с жестко заданным значением:
:% s /....-..- .. \ ze 2 ноября 1991 г. / gc
-
....-..- ..
- Шаблон поиска для поиска всех дат в файле.
-
2 ноября 1991 г.
- Буквальная замещающая строка для замены дат на жестко заданные.
Вместо того, чтобы вставлять жестко запрограммированную заменяющую строку, нам нужно запустить
выражение для каждого совпадения, чтобы получить его замену.
Мы используем функцию system ()
из выражения ( \ =
) для вызова
дата
утилита. Пока придерживаемся жестко запрограммированных дат, мы можем использовать утилиту
преобразовать формат даты из «1991-11-02» в «2 ноября 1991 г.» перед
вставив в файл:
:% s /....-..- .. \ ze \ = system ('date -jf "% Y-% m-% d" "1991-11-02" + "% B% d ,% Y "') / gc
-
....-..- .. \ ze <
- Шаблон поиска для поиска всех дат в файле.
-
\ = system ('date…')
- Выражение, которое использует функцию
system ()
для выполнения внешнего
команда и возвращает ее значение как заменяющую строку. -
'date -jf "% Y-% m-% d" "1991-11-02" + "% B% d,% Y"'
- Команда даты в виде строки с жестко заданной датой
("1991-11-02"
) в качестве входного аргумента даты. Эта дата соответствует формату
совпадения поискового шаблона.
Предупреждение:
Эта замена создает новую строку перед тегом
, потому что
утилита date
добавляет единицу к своему выводу.Мы удалим их позже
при обсуждении вложенных замен.
Значение замены все еще жестко запрограммировано («1991-11-02»), поэтому эта замена
перезапишет все значения даты в файле на дату 1991 года.
совпадающие значения даты обратно в файл, нам нужно передать их команде date.
Чтобы передать согласованную дату вызову date
в нашем выражении, нам нужно
вырваться из строки, переданной в функцию system ()
, и заменить
жестко запрограммированная дата с вызовом submatch (0)
для вставки всего совпадения.
:% s /....-..- .. \ ze \ = system ('date -jf "% Y-% m-% d" "' .submatch (0). '" + "% B% d,% Y "') / gc
Выполнение этой замены превратит все теги
из входного файла в
наш желаемый формат, но он помещает новую строку перед закрывающим тегом
.
Текущий результат с добавленной новой строкой перед закрывающим тегом
<статья>
Поиск, преобразование и замена дат с помощью замен Vim
…
Вложенные замены
Новая строка добавляется к результату команды date
, которая заканчивается в
файл после выполнения подстановки.Поскольку нет возможности узнать дату
чтобы опустить новую строку, нам нужно убрать ее самим.
Мы можем запустить вторую замену, чтобы удалить их после выполнения первой:
:% s / \ n <\ / time> / <\ / time> / g
Чтобы оригинальная подстановка не добавляла новые строки, мы
может передать результат из команды date
на tr
, чтобы удалить новую строку с помощью
аргумент -d
:
:% s /....-..- .. \ ze \ = system ('date -jf "% Y-% m-% d" "'.submatch (0). '"+"% B% d,% Y "| tr -d" \ n "') / gc
Другой вариант - убрать новую строку с помощью вложенной замены .
Оборачиваем вызов утилиты date
во вложенную замену с помощью
replace ()
функция. Принимает результат, соответствует новой строке ( "\ n"
) и
заменяет его пустой строкой.
:% s /....-..- .. \ ze \ = substitute (system ('date -jf "% Y-% m-% d" "' .submatch (0). '" + "% B% d,% Y" '), "\ n", "", "") / gc
Теперь наша подстановка преобразует теги
в правильный формат,
без добавления этой дополнительной строки.
Результат
Поиск, преобразование и замена дат с помощью замен Vim
Обеспечение поддержки проектов программного обеспечения с открытым исходным кодом
Тестирование на основе свойств в Elixir с использованием PropEr
Спасибо Воутеру Восу и Рико Ста.Круз за отзыв о команде замены.
style, u / Vurpius за предложение \ ze
и Бен Синклер за предложение трубопровода
через т.р.
.
Обзор Vim 7 и поддерживаемые типы файлов
Обзор программного обеспечения
Основные характеристики
- Широкие возможности настройки
- Использует настраиваемые сопоставления клавиш для автоматизации работы
- Сравнивает и объединяет файлы
- Поддерживает расширенные регулярные выражения
- Доступно в интерфейсе командной строки или графическом интерфейсе
Vim - это бесплатный текстовый редактор с открытым исходным кодом, предназначенный для редактирования исходного кода.У него более острая кривая обучения, чем у большинства других простых текстовых редакторов, и он не предназначен для начинающих пользователей. Vim также доступен на Mac как MacVim и Windows как gVim.
Vim обладает широкими возможностями настройки, чтобы вы могли персонализировать свой опыт и максимизировать свою продуктивность. Вы можете использовать его с графическим интерфейсом пользователя или из интерфейса командной строки. Он позволяет вам определять собственные сопоставления клавиш для автоматизации последовательностей нажатий клавиш или вызова пользовательских функций. Также доступно множество плагинов для добавления к функциональности Vim.
Если вы хорошо разбираетесь в компьютерах и предпочитаете использовать свои приложения с минимальным вмешательством графического интерфейса, Vim - хороший текстовый редактор для вас. Если вам не хочется учиться использовать Vim, лучше выбрать простой текстовый редактор, такой как Блокнот или TextEdit.
Поддерживаемые типы файлов
Расширение основного файла
Другие расширения файлов, используемые Vim 7
Поддерживаемые типы файлов | ||
---|---|---|
.A | Статическая библиотека | |
.ANS | Текстовый файл ANSI | |
.ASM | Файл исходного кода языка ассемблера | |
.AWK | Скрипт AWK | |
.BSH | Скрипт BeanShell | |
.BVH | .BVH | Файл |
.C | Файл исходного кода C / C ++ | |
.CELX | Celestia Script | |
.CFG | Файл конфигурации | |
.CFG | Файл языка разметки Wesnoth | |
.CGI | Сценарий интерфейса общего шлюза | |
.COMMAND | Файл команд терминала | |
.CONF | Файл конфигурации Unix | |
9010CSH Shell Script | ||
.DXL | Файл языка Domino XML | |
.ERR | Файл журнала ошибок | |
.EXW | Файл исходного кода Euphoria | |
.GVIMRC | Файл конфигурации времени выполнения GVim | |
.H | Файл заголовка C / C ++ / Objective-C | |
.HS | Скрипт Haskell | |
.INC | Включить файл | |
.J | Файл исходного кода Java | |
.JSON | Файл нотации объекта JavaScript | |
.L | Исходный файл Lex | |
.LHS | Literate Haskell Script | |
.LUA | Исходный файл Lua | |
.M | Исходный код Mercury | |
.M | Файл реализации Objective-C | |
.MARKDOWN | Файл документации Markdown | |
.MD | ||
.ML | Файл исходного кода ML | |
.MXML | Компонент Flex MXML | |
.P6 | Файл исходного кода Perl 6 | |
.PHP3 | Веб-страница PHP 3 | |
.PROPERTIES | Файл свойств Java | |
.RPY | Скрипт Python | |
.RST | Файл reStructuredText | |
.S | ||
.SH | Bash Shell Script | |
.SQL | Файл данных языка структурированных запросов | |
.TEX | Исходный документ LaTeX | |
.UTF8 | Текстовый документ в кодировке Unicode UTF8 | |
.YML | Документ YAML |
Дополнительные связанные форматы файлов | |
---|---|
.GALAXY | Файл Blizzard Galaxy |
.J | Исходный файл Java |
.JAV | Исходный файл Java |
.LDF | Lingo Dictionary Исходный файл |
.LIST | Файл списка APT |
.LPD | LPD Daemon Print Permissions File |
.LTX | LaTeX Document |
.MAN | Unix Manual |
.MD | Файл документации Markdown |
Markdown Файл документации Markdown | |
. | |
.TLD | Файл дескриптора библиотеки тегов |
.VIM | Файл настроек Vim |
.VIMRC | Файл конфигурации времени выполнения Vim |
.YAML | Документ YAML |
Обновлено: 29 апреля 2014 г.
Практический Vim: режимы
Практический Vim: режимы
17 марта 2018
Заметки серии
о Practical Vim Д. Нила:
Содержание
Глава 1 - Путь Vim
Совет 1. Повторите с командой точки
.
: повторить последнее изменение
> G
: отступ строк до конца файла
Совет 2: добавьте строку и повторите
A
: добавить в конец текущей строки
C
= c $
: удалить до конца строки в режиме вставки
с
= cl
: удалить символ справа в режиме вставки
Совет 3. Сканируйте вперед и повторите
f +
: прямая линия развертки для символа +
;
: строка прямого сканирования для последнего символа прямого сканирования
;.
: строка прямого сканирования для последнего просматриваемого вперед символа, повторить последнее выполненное изменение
Совет 4: Повторение и обратное
Намерение | Закон | Повторить | Реверс |
---|---|---|---|
внести изменения | {редактировать} | . | u |
строка развертки для следующего символа | f {char} / t {char} | ; | , |
строка развертки предыдущего символа | F {char} / T {char} | ; | , |
сканировать документ для следующего совпадения | / узор | n | N |
отсканировать документ на предыдущее совпадение | ? Узор | n | N |
выполнить замену | : с / цель / замена | и |
.