Как я могу заставить Vim использовать имя файла по умолчанию, если не указано имя файла?

17

Я редко, если вообще когда-либо, просто открываю vimбез имен файлов. Довольно часто я хочу что-то протестировать, обычно это быстрый одноразовый скрипт, и я обычно называю их test.sh(или какой-то их вариант, например test.py). Могу ли я сделать vimпредположить test.shимя файла, если я бежал vimбез каких-либо имен файлов? Я бы обычно использовал псевдонимы (например, vimsfor vim test.shи vimpfor vim test.pyили go целое :w test.sh), но мне интересно, есть ли способ изнутри vim. Было бы еще лучше, если бы я мог ограничить это определенными каталогами, например /tmp, или ~/dev.

Мур
источник

Ответы:

10

Попробуйте поместить это в конец вашего .vimrc (измените по мере необходимости)

if @% == "" && getcwd() == "/tmp"
    :silent edit test.sh
endif

Это проверяет, является ли текущее имя файла пустым ( @%ссылается на текущее имя файла), и проверяет, является ли текущий каталог vim /tmp. Вы можете добавить другие каталоги, а также так

(getcwd() == "/tmp" || getcwd() == "~/dev")

Затем он молча редактирует test.sh. Если этот файл уже существует, он загрузит его. В противном случае вы запустите новый буфер с этим именем, и файл будет создан, если вы напишите его.

Я молчал, чтобы подавить следующее сообщение во время запуска:

"test.sh" [New File]
Press ENTER or type command to continue
Джон О'М.
источник
5

Модификация ответа Джона может быть полезна:

if @% == "" && getcwd() == "/tmp"
    :silent edit `=glob("test\.*", 1, 1)[0]`
endif

Это открывает первый файл, который начинается с test..

Вместо того, чтобы просто первый файл, если вы хотите открыть и другие соответствующие файлы, выполните:

if @% == "" && getcwd() == "/tmp"
    for i in glob("test\.*", 1, 1)
        :silent edit `=i`
    endfor
endif
user50136
источник