Как получить команду vim bang, чтобы найти мои функции - PullRequest
0 голосов
/ 29 марта 2019

У меня есть функции, определенные в файле, который получен из моего файла .bashrc (показан ниже). Команду можно найти просто из командной строки bash, а также когда я выполняю подоболочку и использую команду. Однако в сеансе vim функция foo не обнаруживается при выполнении команды bang. Как сделать функцию foo видимой для команды bang?

foofile: 

    printf "%s\n" "here I am in foofile"

    function foo () {
        printf "%s\n" "Here I am in function foo.  Love ya ma!"
    }

    export foo

(in vim) 

:!foo
/bin/bash: foo: command not found

shell returned 127

1 Ответ

0 голосов
/ 29 марта 2019

TL; DR: если вы наберете export -f foo в своем bashrc, вы получите желаемую функциональность за счет каждой подоболочки, которую вы выполняете, имея эту функцию.

vim запускает собственную оболочку. Эта оболочка не является источником вашей .bashrc.

Вы можете запустить env -i bash --norc --noprofile для эмуляции этой оболочки.

Эта оболочка все еще имеет минимальный $PATH. Чтобы что-то было выполнено в этой оболочке, оно должно быть на этом пути. Вы, вероятно, должны использовать /usr/local/bin или /usr/bin.

Создайте файл с именем foo следующим образом

#!/bin/bash
someName() {
    #contents of foo from your bashrc
}
someName #someName here can be foo, and you can just copy your whole function, 
#but I wanted to show that this name doesn't have to relate to the fileName

поместите этот файл в одну из этих папок и сделайте его исполняемым (chmod 744 достойная ставка)

EDIT:

Если вы не хотите, чтобы служебные функции имели свои собственные файлы, вы можете просто ввести свой .bashrc как часть своей команды:

:!source ~/.bashrc && foo

Второе редактирование:

Михаил указал на альтернативу, которая заключается в том, чтобы .bashrc экспортировал все функции, чтобы их можно было использовать в подоболочках.

foo() {
    ....
}
export -f foo

теперь в vim вы можете набрать

:!foo 

и будет работать как положено

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...