Как упомянуто в заголовке, это должно быть чем-то простым, но ни за что в жизни я не могу заставить это работать правильно.
Я пишу маленький исполняемый сценарий, который будет заботиться о вводе очень необходимого местоположения интерпретатора для первой строки сценария и открытия нового сценария для редактирования. Хорошо, охладитесь... сделанный: printf "#!%s" $(which bash) > $1; vim $1
. Достаточно простой.
Где проблема, только воспринятая как проблема, потому что мне любопытно относительно того, как сделать это и не достигает ее, имеет сценарий, автоматически начинают меня на строке 2 в режиме вставки. Таким образом, я нахожусь на пустой строке, готовой пойти..., не тратя впустую эти.5 секунд или так нажать 'o' (я использую энергию в качестве своего текстового редактора для ссылки).
Таким образом, я предполагаю, что мой вопрос состоит в том, как делают я заставляю свой автоматизированный сценарий моделировать нажатие 'o', когда недавно созданный сценарий открывается с выводом '#!$(which bash)
'на первой строке?
Вещи попробовали:
printf "#!%s\n" $(which bash) > $1
echo -e "#!$(which bash)\n" > $1
Это должно делать то, что вы хотите:
printf '#!%s\n\n' $(which bash) > "$1" ; vim -c startinsert +2 "$1"
Он вставляет две строки в файл, поэтому o kbd> не требуется. Затем он запускает vim во второй строке (+2) в режиме вставки.
Кроме того, предпочитайте одинарные кавычки двойным кавычкам, если расширение не требуется. В этом случае !
можно интерпретировать как специальный символ расширения истории в двойных кавычках и полностью изменить напечатанное.
То, что вы пробовали, не поможет, так как это не зависит от содержимого файла; скорее это зависит от текстового редактора.
В Vim должно работать следующее:
vim "$file" +'$normal o' +'startinsert'
Каждый +
аргумент интерпретируется в «командном режиме»; обычно это номер строки, но любая команда на самом деле работает. :$normal o
добавляет пустую строку после последней строки (это ужасно, но я не мог придумать другого пути); :startinsert
входит в режим вставки.