Как я могу заставить Vim открывать файлы в `--remote-silent` без получения ошибки при запуске только `vim`?

Чтобы открыть файлы в уже существующем экземпляре Vim (в моем случае MacVim), я взял совет Дерека Вятта и добавил это в свой bash_profile:

alias mvim='mvim --remote-silent'

Это работает, пока я передаю mvim аргумент (mvim myFile, mvim . и т. д.), но если я запускаю mvim сам по себе, я получаю сообщение об ошибке: Argument missing after: "--remote-silent"

Поэтому я заменил вышеуказанный псевдоним следующей функцией:

function mvim() {
  if [ $# > 0 ] ; then
    command mvim --remote-silent "$@"
  else
    command mvim
  fi
}

Теперь, если я запускаю mvim без аргумента, я получаю ту же ошибку и файл с именем 0 записывается в текущий каталог. Все по-прежнему хорошо, если я передаю аргументы mvim.

Что мне здесь не хватает, и как лучше всего справиться с этим?

Спасибо, Инго Каркат, за пояснения. Если кому-то интересно, вот как я справляюсь с этим сейчас:

function ivim {
  if [ -n "$1" ] ; then
    command mvim --remote-silent "$@"
  elif [ -n "$( mvim --serverlist )" ] ; then
    command mvim --remote-send ":call foreground()<CR>:enew<CR>:<BS>"
  else
    command mvim
  fi
}

:<BS> в конце ветки elif просто очищает командную строку. Это кажется немного хакерским, но я не знаю, как еще этого добиться.


person ivan    schedule 29.12.2013    source источник


Ответы (2)


В Bash это выражение test неверно: [ $# > 0 ]; вы перенаправляете стандартный вывод (>) в файл 0. Вместо этого либо используйте старый стиль -gt оператора "больше чем"

[ $# -gt 0 ]

или более новая встроенная условная команда [[:

[[ $# > 0 ]]
person Ingo Karkat    schedule 29.12.2013
comment
[[ $# > 0 ]] не является арифметическим «больше чем». Вы, вероятно, имели в виду (( $# > 0 )). - person Dmitry Alexandrov; 30.12.2013

Если вы хотите назвать функцию mvim вместо чего-то другого (потому что вы привыкли печатать mvim или по каким-то другим причинам), вот простое решение.

function mvim {
  if [ -n "$1" ] ; then
    command mvim --remote-silent "$@"
  elif [ -n "$( command mvim --serverlist )" ] ; then
    command mvim --remote-send ":call foreground()<CR>:enew<CR>:<BS>"
  else
    command mvim
  fi
}

Обратите внимание на добавленный command перед вызовом mvim в elif.

person nddery    schedule 27.02.2014