Здесь документ удалить первую строку из файла с 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.
Другие вопросы по тегам