No soy un usuario mutt, pero parece que tag-prefix-cond
puede hacer esto. Es como tag-prefix
pero si no hay ninguna etiquetada mensajes, el búfer de comandos se vacía sin hacer nada (en En otras palabras, cualquier gancho en el que te encuentres se detiene en seco ), de este archivo mutt -users@mutt.org .
[ -e $1 ] && vim $1
— основа простого решения. Я проверил это, написав эту одну строку в файл "pv.cmd" (p как в protected... )и определив "новую команду" с помощью
alias pv='source pv.cmd'
Все это, я думаю, необходимо, потому что мы хотим, чтобы это работало с помощью (единственного, я надеюсь... )аргумента.
Теперь я могу идти
pv filename<enter>
И, если это имя файла не существует («-e» test ), вы получите новую строку подсказки через 0,000 секунды (Я действительно сделалtime pv jjjjjj
).
В противном случае файл просто открывается в vim.
И даже просто pv без аргумента запускает vim -экран приветствия.
У вас есть так много вариантов отсюда :, как вы называете свой псевдоним "pv"? Быстрое, но рискованное «v»? Где вы лучше всего определяете этот псевдоним?Вы используете псевдоним над vim или vi? Сделать этот лайнер исполняемым файлом bash? Функция оболочки?
Вы знаете, я раньше задавался вопросом, кто это, я или vim, когда это происходит (редактирую нежелательный пустой файл ). Но теперь я иду :q
мгновенно, и ни один файл не создается.
Вы не можете напрямую протестировать эту строку в pv.cmd, потому что ей нужен первый аргумент (, называемый "$1" в bash ). Я думаю, что псевдоним для источника oneliner, который проверяет аргумент $1
, является необходимым минимумом.
...или в VIM есть ВАРИАНТ?
Использование функции равнозначно, я бы сказал, ---дело вкуса и того, как вы организованы (или как СИСТЕМА организует ВАС:-)
Беглый взгляд на различные файлы справки Vim не показывает, возможно ли это без использования сценария Vim. Если вы используете :e filename
в Vim, а filename
не существует, редактор откроет новый буфер с этим именем и сохранит буфер с этим именем, когда вы используете :w
. Обычно это то, что вы хотите сделать.
Чтобы требовать, чтобы имя файла существовало при запуске Vim, вы можете перегрузить команду vim
функцией оболочки:
vim () {
if [ -e "$1" ] || [ -z "$1" ]; then
command vim ${1:+"$1"}
else
printf 'No such file or directory: %s\n' "$1" >&2
return 1
fi
}
Это позволит вам
:e filename
в Vim ). Два теста, [ -e "$1" ]
и [ -z "$1" ]
, определяют, существует ли первый аргумент функции в виде имени файла или он пуст.
Расширение параметра ${1:+"$1"}
будет расширено до заданного имени файла в кавычках или до нуля, если имя файла не было задано.
command vim
гарантирует, что мы не будем вызывать нашу функцию рекурсивно.
Чтобы также обрабатывать возможные параметры, которые пользователь может передать в Vim,нужно было бы проанализировать аргументы командной строки и удалить аргументы, которые являются операндами имени файла, соответствующими не -существующим именам:
vim () {
dashdash=false
for arg do
use_arg=false
case $arg in
--)
dashdash=true
use_arg=true
;;
-*)
if "$dashdash"; then
[ -e "$arg" ] && use_arg=true
else
use_arg=true
fi
;;
*)
[ -e "$arg" ] && use_arg=true
esac
if "$use_arg"; then
set -- "$@" "$arg"
else
printf 'No such file or directory (skipping): %s\n' "$arg" >&2
fi
shift
done
unset arg dashdash use_arg
command vim "$@"
}
Единственная хитрость здесь заключается в том, что аргумент --
в командной строке сигнализирует об окончании опций. Это означает, что каждый аргумент после --
должен быть проверен как имя файла, тогда как мы не видели --
, но мы можем пропустить проверку -e
для всего, что начинается с дефиса.
Эта функция открывала редактор с пустым буфером, если не было задано никаких существующих имен файлов.