Подтвердить что ты не робот

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

В конце каждой строки повторяются следующие символы:

^[[00m

Как я могу удалить их из каждой строки с помощью редактора Vim?

Когда я даю команду :%s/^[[00m//g, она не работает.

4b9b3361

Ответ 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