Ответ 1
В Vim script нет никакого способа получить список в настоящее время определенные переменные среды. Однако можно использовать Vim функция завершения командной строки.
Рассмотрим возможные доработки для следующей незавершенной команды.
:echo $
Нетрудно видеть, что, согласно синтаксису Vim script, все
По завершении - имена переменных среды. Нажатие клавиши wildchar
(Tab, по умолчанию) или Ctrl + D отобразит все
из них.
Чтобы получить этот список дополнений из script, нам нужно преодолеть его интерактивный характер. Возможный трюк, который мы здесь рассмотрим что, полагается на комбинацию функций. Первым из них является Ctrl + A. В режиме командной строки этот ярлык запускает каждое доступное завершение перед курсором. Эти дополнения перечислены в алфавитном порядке и разделены пробелами.
Если мы сделаем Vim напечатаем те доработки, вставленные прямо в командную строку,
мы могли бы легко их захватить, перенаправляя вывод команды с помощью :redir
команда. Но все, что нам нужно для достижения этого побочного эффекта, - это процитировать текст
вставленный с помощью Ctrl + A: Цитирование делает остальную часть нашего
:echo
введите строковый литерал, который будет только распечатан!
:echo 'NAME1 NAME2 NAME3'
NAME1 NAME2 NAME3
Чтобы отредактировать командную строку таким образом, пользователь может ввести :ec
(псевдоним для :echo
)
затем $
, нажмите Ctrl + A, введите '
, перейдите к началу
команды с Ctrl + B, переместите курсор над
доллара, нажав ⇾ (стрелка вправо) дважды, удалите это $
и вместо этого вставьте '
. Можно воспроизвести ту же последовательность нажатия клавиш
неинтерактивно используя команду :normal
.
Объединяя все эти кусочки головоломки, мы получаем следующую функцию.
function! Env()
redir => s
sil! exe "norm!:ec$\<c-a>'\<c-b>\<right>\<right>\<del>'\<cr>"
redir END
return split(s)
endfunction
Для этого подхода к работе Vim следует скомпилировать с помощью +cmdline_compl
особенность.