Как удалить последние шесть символов каждой строки в Vim?
В конце каждой строки повторяются следующие символы:
^[[00m
Как я могу удалить их из каждой строки с помощью редактора Vim?
Когда я даю команду :%s/^[[00m//g
, она не работает.
Ответы
Ответ 1
Вы можете использовать :%s/.\{6}$//
, чтобы буквально удалить 6 символов с конца каждой строки.
:
запускает ex-режим, который позволяет выполнить команду. %
- это диапазон, который указывает, что эта команда должна работать со всем файлом. s
обозначает замену, за которым следует шаблон и заменяет строку в формате s/pattern/replacement/
. Наш шаблон в этом случае равен .\{6}$
, что означает совпадение любого символа (.
) ровно 6 раз (\{6}
), за которым следует конец строки ($
), и замените его на нашу заменяющую строку, которая ничего, Поэтому, как я сказал выше, это соответствует последним 6 символам каждой строки и не заменяет их ничем.
Ответ 2
Я бы использовал глобальную команду.
Попробуйте следующее:
:g/$/norm $xxxxxx
или даже:
:g/$/norm $5Xx
Я думаю, что ключом к этой проблеме является сохранение его универсальным и не специфичным для символов, которые вы пытаетесь удалить. Таким образом, техника, которую вы изучите, будет применима ко многим другим ситуациям.
Ответ 3
Предполагая, что это escape-последовательность ANSI, ^[
обозначает один символ <Esc>
. Вы должны ввести его, нажав Ctrl + V (или Ctrl + Q) на многих установках Windows Vim), а затем Esc. Обратите внимание, как это затем выделяется немного другим цветом.
Ответ 4
Достаточно легко заменить последние шесть символов каждой строки агностически на то, что эти символы, но она оставляет значительную комнату для ошибок, поэтому я бы не рекомендовал ее. Кроме того, если ^[
является escape-символом, вы действительно ищете пять символов.
Код выхода
Используя ga на символе ^[
, вы можете определить, будет ли это код выхода, и в этом случае строка состояния отобразит
<^[> 27, Hex 1b, Octal 033
Предполагая, что вы можете заменить все, используя
:%s/\%x1b\[00m$//gc
С \%x1b
, исходя из шестнадцатеричного значения выше. Также обратите внимание, что вам нужно выйти из скобки ([
), потому что это зарезервированный символ в регулярном выражении Vim. $
гарантирует, что он встречается в конце строки, а флаги /gc
сделают его глобальным и подтвердят каждую замену (вы можете нажать a
, чтобы заменить все).
Код ошибки
Это просто вопрос ускользания. Вы можете использовать любой из двух ниже:
:%s/\^\[\[00m$//gc
:%s/\V^[[00m\$//gc
Ответ 5
Если все они выравниваются, вы можете сделать выбор из визуального блока и затем удалить его.
В противном случае, если у вас есть последовательность, неизвестная для ввода, вы можете визуально выбрать ее, нажав v
, затем отметьте и выдержите ее y
(по умолчанию в регистр "
). Затем введите :%s/<C-R>"//g
, чтобы удалить его.
Примечание:
-
<C-R>"
помещает содержимое регистра "
в позицию курсора.
- Если вы дернули его в другой регистр, скажите
"ay
(yank для регистрации a
- piglatin yank, как я его называю) и забыл, куда вы его положили, вы можете посмотреть содержимое своих регистров с помощью :reg
.
-
<C-R>
говорит Vim для Ctrl + R
Ответ 6
Кажется, что это нормально, если длина строки больше 5 символов:
:perldo $_ = substr $_, 0, -5
но когда длина строки равна 5 или менее, она ничего не делает.
Возможно, в perl есть простой способ удалить последние 5 символов строки, но я этого не знаю:)
Ответ 7
Используйте это для удаления:
:%s/^[[00m//gc