Что-то, что должно казаться простым

Как упомянуто в заголовке, это должно быть чем-то простым, но ни за что в жизни я не могу заставить это работать правильно.

Я пишу маленький исполняемый сценарий, который будет заботиться о вводе очень необходимого местоположения интерпретатора для первой строки сценария и открытия нового сценария для редактирования. Хорошо, охладитесь... сделанный: printf "#!%s" $(which bash) > $1; vim $1. Достаточно простой.

Где проблема, только воспринятая как проблема, потому что мне любопытно относительно того, как сделать это и не достигает ее, имеет сценарий, автоматически начинают меня на строке 2 в режиме вставки. Таким образом, я нахожусь на пустой строке, готовой пойти..., не тратя впустую эти.5 секунд или так нажать 'o' (я использую энергию в качестве своего текстового редактора для ссылки).

Таким образом, я предполагаю, что мой вопрос состоит в том, как делают я заставляю свой автоматизированный сценарий моделировать нажатие 'o', когда недавно созданный сценарий открывается с выводом '#!$(which bash)'на первой строке?

Вещи попробовали:

  • Используя символ новой строки, которого оставляют с printf: printf "#!%s\n" $(which bash) > $1
  • Используя эхо с флагом символа новой строки: echo -e "#!$(which bash)\n" > $1
0
задан 24 July 2013 в 19:10

2 ответа

Это должно делать то, что вы хотите:

printf '#!%s\n\n' $(which bash) > "$1" ; vim -c startinsert +2 "$1"

Он вставляет две строки в файл, поэтому o не требуется. Затем он запускает vim во второй строке (+2) в режиме вставки.

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

0
ответ дан 24 July 2013 в 19:10

То, что вы пробовали, не поможет, так как это не зависит от содержимого файла; скорее это зависит от текстового редактора.

В Vim должно работать следующее:

vim "$file" +'$normal o' +'startinsert'

Каждый + аргумент интерпретируется в «командном режиме»; обычно это номер строки, но любая команда на самом деле работает. :$normal o добавляет пустую строку после последней строки (это ужасно, но я не мог придумать другого пути); :startinsert входит в режим вставки.

0
ответ дан 24 July 2013 в 19:10

Другие вопросы по тегам:

Похожие вопросы: