Открытие файла с помощью vim, только если он существует

No soy un usuario mutt, pero parece que tag-prefix-condpuede hacer esto. Es como tag-prefixpero 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 .

2
28.06.2019, 11:19
2 ответа
[ -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 есть ВАРИАНТ?


Использование функции равнозначно, я бы сказал, ---дело вкуса и того, как вы организованы (или как СИСТЕМА организует ВАС:-)

1
27.01.2020, 22:08

Беглый взгляд на различные файлы справки 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
}

Это позволит вам

  1. редактировать только существующий файл и
  2. запустите Vim с без файла в командной строке (это позволит вам создать новый файл с :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для всего, что начинается с дефиса.

Эта функция открывала редактор с пустым буфером, если не было задано никаких существующих имен файлов.

1
27.01.2020, 22:08

Теги

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