10

В моем ~/.bashrc , которая устанавливает $ EDITOR в gvim. Он отлично работает, когда я в окне X. Тем не менее, если я ssh на свою рабочую станцию (с другой рабочей станции), gvim начинает жаловаться "не могу открыть дисплей".

Поэтому я хочу поместить оператор if в bashrc, что если X window доступен, используйте gvim, в противном случае пусть это будет vim.

Как я мог этого добиться?

6 ответов6

11

Один из способов сделать это - проверить наличие переменной окружения DISPLAY:

if [ "$DISPLAY" ]
then
    EDITOR=gvim
else
    EDITOR=vim
fi

В некоторых случаях DISPLAY будет установлен, даже если ваш gvim не сможет связаться с X-сервером. В этих случаях используйте программу RunningX :

if RunningX
then
    EDITOR=gvim
else
    EDITOR=vim
fi
7

Переменная среды $DISPLAY должна быть установлена на что-то, если вы находитесь в X, и не установлена, если вы не подключены к дисплею.

Таким образом, вы можете использовать это:

if [ -n "$DISPLAY" ]; then
    alias vim='gvim'
else
    alias vim='vim'
fi

Но есть и другое решение. Это называется ssh X forwarding.

Бежать

ssh -X yourworkstation

тогда вы можете запустить vim на машине, с которой вы работаете в ssh'd, и она отобразится на машине, на которой вы запускаете X.

3

Поместите это в ваш .bashrc:

if [ -z "${DISPLAY:-}" ]; then
  EDITOR='vim'
else
  EDITOR='gvim'
fi
1

Хотя это не ответ на ваш вопрос, я подумал, что может быть полезно указать, что если вы работаете с одной рабочей станцией, на которой запущен X *, на другую рабочую станцию, вы на самом деле можете использовать gvim, если вы настраиваете переадресацию X с помощью ssh. Информация об окне будет просто отправлена по сети, и gvim просто появится, как если бы он работал локально.

Добавьте следующее в ~/.ssh/config

Host *
   ForwardX11 yes 

Теперь вы сможете просто запустить gvim.

Если вы работаете с исходной рабочей станцией Windows и не используете X, вы на самом деле МОЖЕТЕ запустить X-сервер локально, используя Cygwin. После настройки вы можете настроить популярные ssh-клиенты, такие как PuTTy, на переадресацию X11, а затем появится gvim в том, что выглядит как окно с собственным окном.

0

Мне понравился ответ garyjohn с использованием RunningX, так как он хорошо разбирается в плохих, но непустых переменных DISPLAY.

Но.. Я хотел бы пойти лучше. Я часто использую сеансы экрана. Я мог бы начать сеанс экрана дома, определен DISPLAY. Затем, я ssh в другом месте, DISPLAY все еще определен, и он на самом деле отображает ... дома! Так что .. тогда я 'экспортирую $ DISPLAY ='. Это хорошо, но так как этот ответ уже проверен и найден допустимая переменная DISPLAY в то время, когда .bashrc первоначально запустил EDITOR, он все равно будет установлен в gvim.

Я пришел сюда в поисках решения аналогичной проблемы, я хотел использовать yelp для просмотра man-страниц X-GUI, но автоматически переходить к традиционной команде man, когда X не используется. Исходя из того, что я прочитал здесь, я придумал это:

man () {
    if RunningX
    then
        yelp "man:$@";
    else
        /usr/bin/man "$@";
    fi
}

Я думаю, что для проблемы редактора можно сделать что-то вроде следующего:

EDITOR=vim
vim () {
    if RunningX
    then
        gvim "$@";
    else
        vim "$@";
    fi
}

Я бы только что опубликовал это без длинной истории, но я не проверял это. Я считаю себя новичком Баш. Я проверил свою «команду человека», это работает! Я использую emacs для своего редактора, хотя он выполняет собственную проверку X. У меня даже не установлен gvim.

0

Просто проверьте одну из переменных среды, которые Xorg устанавливает при запуске, например, XLOCAL, которая содержит информацию о текущем сеансе X11.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .