Как я могу сделать псевдонимы оболочки доступными при удалении от Vim?

11

По моему .zshrc, я объявляю некоторые псевдонимы. Например, which dbstartпоказывает содержимое этого псевдонима.

Если я открою vim из этой оболочки, это дочерний процесс. В Vim я могу запускать команды оболочки с :! some_command. Если я выясню, :! echo $0какую оболочку использует Vim, она выдаст «/ bin / zsh». Однако мои псевдонимы там недоступны.

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

Две идеи:

  • Каким-то образом EXPORTпсевдонимы исходной оболочки, ее дочернего процесса vimи снова дочернего процесса оболочки
  • Сконфигурируйте Vim так, чтобы он читал мой .zshrcпри создании его подоболочек
Натан Лонг
источник
.zshrcvim
включите

Ответы:

13

Старый вопрос, но самым чистым решением для vim в zsh было добавление псевдонима ~/.zshenv, файла, который zsh загружает для всех оболочек, входа в систему, интерактивного или другого. Это позволяет избежать запуска vim или zsh с флагами и любых возможных проблем с этим.

Есть хорошее объяснение ~/.zshenvпротив ~/.zshrcздесь: http://tanguy.ortolo.eu/blog/article25/shrc

В основном, Zsh всегда источники ~/.zshenv. Источник интерактивных оболочек и источник ~/.zshrcвхода в систему ~/.zprofileи ~/.zlogin. Таким образом, источники интерактивной оболочки входа ~/.zshenv ~/.zprofile ~/.zlogin ~/.zloginи неинтерактивная нелогинная оболочка, подобная той, которую использует vim для запуска команд только источников ~/.zshenv.

Кевин Ли
источник
Это не только ответ по ссылке, но было бы лучше, если бы вы указали объяснение отличия от ссылки; таким образом, каждый может извлечь выгоду из объяснения здесь, и мы в безопасности от linkrot.
HalosGhost
1
Обновил мой ответ с основными моментами по ссылке.
Кевин Ли
Это сработало в геометрической прогрессии для меня лучше, чем другие ответы. Когда я добавил vim для запуска интерактивной оболочки, она сразу же приостановилась. Когда я использую файл .zshenv (о котором я раньше не знал), я получил свои псевдонимы!
Калеб
5

Похоже, это работает для Zsh:

  • Убедитесь, что $ZDOTDIR=каталог, где .zshrcнаходится. Например,export ZDOTDIR=$HOME
  • В .vimrc, set shell=zsh\ -iили set shellcmdflag+=iдля того же эффекта.

Это -iсвязано с тем, что при запуске в интерактивном режиме zshell загружается $ZDOTDIR/.zshrc. Смотрите man zshи ищите $ZDOTDIRдля деталей.

Натан Лонг
источник
1
Хм, это создает для меня странную проблему: копирование в системный буфер обмена, как "+yсейчас, приостанавливает Vim! superuser.com/questions/712245/…
Натан Лонг,
5
Мой Vim приостанавливается, как только я его открываю.
Калеб
0

Я верю, что когда вы находитесь vimи используете :!some_commandего, он использует любую оболочку, определенную переменной среды $SHELL.

Это настраивается, так что вы можете изменить, изменив $SHELLповедение в вашем $HOME/.vimrcфайле, чтобы использовать zshвместо этого.

:set shell
shell=/bin/bash
:set shell=zsh\ -i

Или вы .vimrcиспользуете 1 из этих 2 строк

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Vim помогите

Смотрите :help shellизнутри vimдля получения дополнительной информации.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.
SLM
источник
Нет, как я сказал: «Если я сделаю:! Echo $ 0, чтобы увидеть, какую оболочку использует Vim, она выдаст« / bin / zsh »»
Натан Лонг,
@NathanLong - нет, я думаю, что это вводит вас в заблуждение, смотрите мои обновления.
SLM
@slm vim получает значение из $SHELL. Так твоя оболочка есть /bin/bash. Если у меня есть оболочка, это то /bin/zsh, что она будет использовать.
Патрик
0

Устанавливая shell=/usr/bin/zsh\ -lв .vimrcрешить мою проблему

Замечания:

Я использую: linux mint 17.1

Мурали Кодали
источник
используя Ubuntu 14.04 это не работает для меня
vilsbole