Другое

Как открыть Vim с предварительным текстом в новом файле

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

Как открыть Vim с предварительно заполненным текстом в файле, который ещё не существует?

Я хочу написать скрипт, который открывает Vim с заранее заполненным текстом в файле, который ещё не существует. Скрипт должен удовлетворять следующим требованиям:

  1. Если я сохраню содержимое в Vim (:w), оно должно быть записано по указанному пути.
  2. Если я выйду из Vim без сохранения (:q!), файл не должен быть создан.

При попытке использовать такой подход:

python
with open(filename, "x") as file:
    file.write("something long and complicated")
subprocess.call(["vim", filename])

Требование №1 выполняется, но №2 – нет: если я выйду из Vim без сохранения, файл всё равно создаётся. Я хочу, чтобы поведение было таким же, как если бы я вызвал vim filename и затем добавил содержимое вручную.

Какой лучший способ добиться такого поведения?

Вы можете использовать переключатель +{команда} для выполнения команды Ex после открытия файла.
Для вставки текста в буфер можно воспользоваться любым из следующих подходов:

  • Подавать клавиши – имитировать ввод в режиме Normal:
bash
vim +call\ feedkeys('iHello\n', 'n') file.txt
  • Команда режима Normal – выполнить команду Normal напрямую:
bash
vim +normal\ iHello\ file.txt
  • Команда Ex – установить или добавить строки через Ex:
bash
vim +call\ setline(1, ['Hello']) file.txt
# или
vim +call\ append(0, 'Hello') file.txt

Все эти варианты запускают Vim, вставляют текст и оставляют курсор после вставленного текста.
Если вы хотите, чтобы файл был только для чтения после вставки, добавьте +set\ readonly к командной строке.

Авторы
Проверено модерацией
Модерация