Подтвердить что ты не робот

Как перечислить все переменные среды в Vim?

Когда запускается Vim, он захватывает многие из переменных среды из операционной системы (например, PATH), а также устанавливает собственные переменные среды (например, MYVIMRC).

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

4b9b3361

Ответ 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 особенность.

Ответ 2

Чтобы перечислить все переменные среды, используйте

:echo $<C-D>

Затем вы можете начать вводить имя интересующей переменной, автоматически завершить с помощью Tab, наконец, нажать Enter, чтобы показать его значение.

Вы не указали, нужно ли вам это интерактивно или в script. Для последнего, к сожалению, невозможно записать вывод через :redir.

Ответ 3

Глядя на других ответчиков, вы можете сделать это без script.

Войдите в режим вставки, а затем нажмите

<C-R>=

Где Ctrl + R позволяет вставить любой из доступных регистров (см. справку i_Ctrl-R). Но особенно вы будете использовать регистр выражений = здесь, чтобы оценить строку (см. Help @=).

Итак, теперь вы можете вставить выражение, введенное ib. ответ. Введите это:

$<C-A>"<HOME>"<CR><ESC>

Теперь вы должны вернуться в обычный режим, и выражение должно быть оценено в строке и помещено в буфер. Вы можете очистить его с помощью следующей команды:

:s/\s/\r$/g

Это должно помещать каждую переменную среды в другую строку.

Ответ 4

Основываясь на идее ib и комментариях от ZyX, здесь функция, с которой я закончила, используя:

function! GetEnvVars()
    silent execute "normal! :return $\<C-a>')\<C-b>\<C-right>\<Right>\<Del>split('\<CR>"
endfunction