Как я могу предварительно ожидать текст посреди строки к нескольким строкам в Vim?

Попробуйте метод rstrip() (см. документ Python 2 и Python 3 )

>>> 'test string\n'.rstrip()
'test string'

полосы метода Python rstrip() весь виды запаздывающего пробела по умолчанию, не всего одна новая строка как Perl делает с [1 111] chomp .

>>> 'test string \n \r\n\n\r \n\n'.rstrip()
'test string'

Для разделения только новых строк:

>>> 'test string \n \r\n\n\r \n\n'.rstrip('\n')
'test string \n \r\n\n\r '

существуют также методы lstrip() и strip():

>>> s = "   \n\r\n  \n  abc   def \n\r\n  \n  "
>>> s.strip()
'abc   def'
>>> s.lstrip()
'abc   def \n\r\n  \n  '
>>> s.rstrip()
'   \n\r\n  \n  abc   def'

90
задан kenorb 19 February 2015 в 12:56
поделиться

5 ответов

Перейдите к первому foo , нажмите Ctrl - v , чтобы войти в режим визуального блока, и нажимайте, пока все строки с foo помечены. Затем нажмите Shift - i , чтобы вставить в начало (блока). Когда вы закончите и нажмите Esc , вставленные символы будут добавлены в каждую строку слева от отмеченного блока.

Чтобы вставить в конце, снова нажмите Ctrl - v , переместитесь вверх / вниз, чтобы отметить все затронутые строки, а затем нажмите End или $ , чтобы расширить выделение до конца строк. Теперь вы можете нажать Shift - a , чтобы добавить в конец всех строк, как раньше с Shift - i .

Визуальный выбор также может быть выполнен с помощью обычных команд перемещения. Итак, чтобы прокомментировать весь блок в C, вы можете перейти к открывающей скобке и ввести Ctrl - v % Shift - i / / Esc .

168
ответ дан 24 November 2019 в 06:57
поделиться

Чтобы ответить на ваш первый вопрос, приведенный ниже

:%s/foo/bar(&)/g

будет искать foo и окружать совпавший шаблон bar () . / g сделает это несколько раз в одной строке.

Поскольку вы просто сопоставляете foo , вы можете сделать простой : s / foo / bar ( foo) / g . Однако приведенное выше будет работать, если вы решите использовать регулярное выражение, а не простое слово (например, f [az] [az] ). Знак «&» в приведенном выше значении представляет то, что вы нашли.

44
ответ дан 24 November 2019 в 06:57
поделиться

Для префикса набора строк я использую один из двух разных подходов:

Один из подходов - это выбор блока (упоминается как sth). В общем, вы можете выбрать прямоугольную область с помощью ctrl-V с последующим перемещением курсора. После того, как вы выделили прямоугольник, нажатие shift-I вставит символы в левую часть прямоугольника или shift-A добавит их в правую сторону прямоугольника. Таким образом, вы можете использовать эту технику для создания прямоугольника, включающего крайний левый столбец строк, которые вы хотите префикс, нажмите shift-I , введите префикс, а затем нажмите escape.

Другой подход заключается в использовании подстановки (как упоминал Брайан Агнью). Подстановка Брайана повлияет на весь файл (% в команде означает «все строки»). Чтобы воздействовать только на несколько строк, самый простой способ - нажать shift-V (который включает режим визуальной строки), находясь на первой / последней строке, а затем перейти к последней / первой строке. Затем введите:

:s/^/YOUR PREFIX/

^ - это регулярное выражение (в данном случае начало строки). Набрав это в режиме визуальной линии, вы увидите, что перед s автоматически вставляется '<,'>. Это означает, что диапазон подстановки будет визуальным выбором.

Дополнительный совет: если ваш префикс содержит косые черты, вы можете либо экранировать их с помощью обратной косой черты, либо использовать другой символ пунктуации в качестве разделителя в команде. Например, чтобы добавить комментарии к строкам C ++, я обычно пишу:

:s:^:// :

Для добавления суффикса метод подстановки обычно проще, если все ваши строки не имеют абсолютно одинаковой длины. Просто используйте $ для шаблона вместо ^, и ваша строка будет добавлена ​​вместо префикса.

Если вы хотите добавить префикс и суффикс одновременно, вы можете сделать что-то вроде этого:

:s/.*/PREFIX & SUFFIX/

. * Соответствует вся линия. & В замене возвращает совпадающий текст (всю строку), но теперь к нему будут добавлены ваш префикс и суффикс.

Кстати: при комментировании кода вы, вероятно, захотите раскомментировать его позже. Вы можете использовать visual-block ( ctrl-V ), чтобы выбрать косые черты, а затем нажать d, чтобы удалить их, или вы можете использовать подстановку (возможно, с визуальным выделением строки, сделанным с помощью shift- V ), чтобы удалить начальные косые черты следующим образом:

:s:// ::
17
ответ дан 24 November 2019 в 06:57
поделиться

Для комментариев в стиле C используйте ответ Брайана с регулярным выражением и сопоставьте в конце строки $ и вставьте прочь.

0
ответ дан 24 November 2019 в 06:57
поделиться

Еще одна возможность (вероятно, не очень полезная в вашем тестовом примере, но удобная в других ситуациях) - оцепить область, которую вы хотите изменить, метками.

  • Поместите курсор в любом месте верхней строки и нажмите ' a
  • Поместите курсор в любое место последней строки и нажмите ' b
  • Введите команду : 'a,' bs / foo / bar (&) /

Мне обычно нравится режим визуального блока, если все видно на экране, и я обычно предпочитаю метки, если начало и конец разделены множеством экранов.

3
ответ дан 24 November 2019 в 06:57
поделиться