Редактирование колонок в gvim в нескольких файлах - PullRequest
0 голосов
/ 17 марта 2019

Я новичок в сценариях и хочу редактировать столбцы в сгенерированном файле в gvim.

Проблема в том, что я знаю, как это сделать в одном файле (входя в режим визуального блока вgvim) но мне нужно сделать одно и то же редактирование для множества файлов, и невозможно открыть каждый файл и выполнить необходимую операцию для каждого файла.

Предоставляет ли какой-либо язык сценариев такой способ?

edit 1: мне нужно заменить весь столбец другим текстом.

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Пожалуйста, сделайте резервную копию ваших файлов , прежде чем пытаться что-либо из этого.

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

for fname in * ; do vim -N -c ":%s/\v^\w+/NEWTEXT/g|:wq" "${fname}" ; done

где:

  • * это глобус оболочки и означает «все файлы». Если ваши файлы не находятся в отдельном каталоге, или вы не хотите, чтобы на них влияли все, предоставьте список вроде for fname in file1 file2 file3...
  • NEWTEXT - текст замещения.
  • -c выполняет vim команду при запуске
  • : входит в командный режим в vim
  • % делает весь файл объектом операции
  • s/REGEXP/SUBSTITUTION/g означает вставку ЗАМЕНА вместо каждой строки, соответствующей REGEX
  • \v делает экранирование и специальные символы в vim регулярные выражения ведут себя как в регулярном выражении POSIX.
  • ^ означает «от начала строки»
  • \w означает «любой символ слова»
  • + означает «один или несколько предшествующих символов»
  • | разделяет vim команды (это не оболочка)
  • :wq сохраняет измененный файл и выходит vim

Использование vim таким способом может быть не самой лучшей идеей. Рассмотрите возможность использования, например, sed вместо

for fname in * ; do 
  sed -ir "s/^\w+/NEWTEXT/g" "${fname}"
done

- r флаг указывает sed использовать регулярное выражение - i говорит ему о необходимости изменения файла, т. Е. Перенаправление вывода не требуется.

0 голосов
/ 17 марта 2019

Было бы замечательно увидеть примеры ввода и вывода, но сейчас я бы предложил что-то вроде:

vim *.txt
:argdo exe "normal wciWnewword"
:argdo update

w ........ jump to the seccond word
ciW ..... change inner big word
update save changes
...