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
и будет работать как положено