Як я можу зробити псевдоніми оболонки доступними при обстрілі з Vim?


11

У своєму .zshrcя оголошую деякі псевдоніми. Наприклад, which dbstartпоказує вміст цього псевдоніма.

Якщо я відкрию vim з цієї оболонки, це дочірній процес. У Vim я можу запускати команди оболонки за допомогою :! some_command. Якщо я :! echo $0бачу, яку оболонку Vim використовує, вона виводить '/ bin / zsh'. Однак мої псевдоніми там недоступні.

Як я можу зробити свої звичайні аліси оболонки доступними, коли я передаю програму з Vim?

Дві ідеї:

  • Якось EXPORTпсевдоніми від початкової оболонки, до її дочірнього процесу vimта знову до дочірнього процесу оболонки
  • Налаштуйте Vim, щоб прочитати моє .zshrcпід час створення його підшах

включіть свій .zshrc.profile (який, здається, використовуєтьсяvim
Kiwy

Відповіді:


13

Старе питання, але найчистішим рішенням для vim in 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
Мій вим стає призупиненим, як тільки я відкриваю його.
Калеб

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.

Ні, як я вже сказав: "Якщо мені так:! Echo $ 0, щоб побачити, яку оболонку використовує Vim, вона виводить '/ bin / zsh'"
Натан Лонг

@NathanLong - ні, я думаю, що це вас вводить в оману, дивіться мої оновлення.
slm

@slm vim витягує значення з $SHELL. Отже, ваша оболонка є /bin/bash. Якщо моя оболонка /bin/zsh, ось що вона буде використовувати.
Патрік

0

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

Примітка:

Я використовую: монетний двір Linux 17.1


за допомогою ubuntu 14.04 для мене це не працює
vilsbole
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.