Здесь документ удалить первую строку из файла с vim, как ed
Я использую этот фрагмент кода (просто удалите первую строку с ed
). Я хочу знать, смогу ли я сделать что-то подобное в vim
, Я написал сценарий и передал файл в качестве аргумента.
файл:
# This is a comment #
foo bar
редактировать с ed
:
ed $1 << EOF
1/^[ ]*$/d
w
q
EOF
Я пробовал с vim
:
vi $1 << EOF
dd
w
q
EOF
> Vim: Warning: Input is not from a terminal
2 ответа
Вы можете запустить vim в режиме 'ex' и передать ему команды:
vim -E -s yourfile <<EOF
:1d
:update
:quit
EOF
Но было бы более уместно просто использовать sed в этом случае:
sed '1d' yourfile
альтернативы
Если вам действительно не нужны специальные возможности Vim, вам, вероятно, лучше использовать неинтерактивные инструменты, такие как sed
, awk
или Perl / Python / Ruby / ваш любимый язык сценариев здесь.
Ваш пример с sed
:
$ sed -i -e '1d' $1
Тем не менее, вы можете использовать Vim не в интерактивном режиме:
Тихий пакетный режим
Для очень простой обработки текста (например, используя Vim как расширенный "sed" или "awk", возможно, просто воспользуйтесь расширенными регулярными выражениями в :substitute
команда), используйте Ex-режим.
REM Windows
call vim -N -u NONE -n -i NONE -es -S "commands.ex" "filespec"
Примечание: тихий пакетный режим (:help -s-ex
) портит консоль Windows, поэтому вам, возможно, придется cls
убрать после запуска Vim.
# Unix
vim -T dumb --noplugin -n -i NONE -es -S "commands.ex" "filespec"
Внимание: Vim будет висеть в ожидании ввода, если "commands.ex"
файл не существует; Лучше проверь заранее на его существование! Кроме того, Vim может читать команды из стандартного ввода. Ваш пример будет примерно таким:
$ vim -e -s $1 << EOF
1delete
wq!
EOF
Полная автоматизация
Для более сложной обработки, включающей несколько окон, и реальной автоматизации Vim (где вы можете взаимодействовать с пользователем или оставить Vim включенным, чтобы позволить пользователю вступить во владение), используйте:
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"
Вот краткое изложение используемых аргументов:
-T dumb Avoids errors in case the terminal detection goes wrong.
-N -u NONE Do not load vimrc and plugins, alternatively:
--noplugin Do not load plugins.
-n No swapfile.
-i NONE Ignore the |viminfo| file (to avoid disturbing the
user's settings).
-es Ex mode + silent batch mode -s-ex
Attention: Must be given in that order!
-S ... Source script.
-c 'set nomore' Suppress the more-prompt when the screen is filled
with messages or output to avoid blocking.