Терминал и Vim

ß на самом деле лигатура ss (на немецком языке). Кто-либо использующий таблица для преобразования Unicode или другие расширенные символы алфавита к "безопасным" символам для вещей как URL, вероятно, преобразует его в ss.

Выполнение этого для URL довольно нормально. Например, я говорю на турецком языке, где у нас есть буквы, не найденные на английском языке такой как ö ü ı â ğ ç ş İ. Эти символы не всегда безопасно использовать в URL, специальных полях формы, и т.д. В их месте, мы заменяем подобными символами такой как o u i a g c s I. Обычно это сделано визуальным подобием, а не звуком, но случаем ß слышимое подобие ss делает это общим преобразованием.

Это составляет чистый убыток данных, но как безопасное представление URL или другого специального поля они работают, затем на самом сайте можно использовать реальные символы.

Почему gedit сделал бы это преобразование вне меня. Это - ошибка.

7
23.02.2012, 22:33
6 ответов

Нет никакого пути к vim знать заранее, что это - процесс прародителя (терминал) уничтожается так это также, обычно уничтожается в результате уничтожения родительских процессов.

Однако на большинстве установок по умолчанию vim создаст a .swp файл, названный в честь текущего отредактированного файла; например, MyPrecious.java.swp. Этот файл должен содержать снимок файла MyPrecious.java незадолго до vim процесс был уничтожен. Если Вы не настроили vim конкретно помещать их .swp файлы в некотором другом каталоге, они должны находиться в том же каталоге как отредактированный файл, и можно легко восстановить работу редактирования.

Обратите внимание, что некоторые из этих файлов запускаются с точки . таким образом, они невидимы, если Вы не используете ls -a перечислять файлы в каталоге.

15
27.01.2020, 20:13
  • 1
    +1, но необходимо добавить что .swp имя файла запускается с a . таким образом, это по умолчанию 'невидимо'. –  Zenon 24.02.2012, 02:35

Рассмотрение проблемы от другого угла, screen или tmux позволит Вам сохранять свою оболочку, идущую независимо от Вашего терминала. При закрытии терминала, можно открыть новый и снова соединиться с исходной оболочкой. Vim будет все еще работать.

11
27.01.2020, 20:13
  • 1
    я использую tmux и имею сцепленный в .zlogin таким образом, это всегда запускается, когда я вхожу в оболочку. Никогда не терял окно с тех пор. –  Matthew Scharley 24.02.2012, 05:58
  • 2
    @MatthewScharley - if просто берет возвращаемые значения - Вы не должны делать своего окольного издания tmux сопровождаемый путем проверки $?, просто проверьте tmux. –  Chris Down 25.02.2012, 23:54

vim не имеет никакого контроля над тем, как GUI Вашего терминала обрабатывает WM_DELETE_WINDOW. Вместо этого ищите установку в своем терминале, который управляет, как терминал действует при выяснении закрыться, когда он имеет оболочку с детьми.

7
27.01.2020, 20:13
  • 1
    Спасибо!, Но как я могу измениться, путь мой терминальный (xfce4-терминал) обрабатывает WM_DELETE_WINDOW? –  Benjamin 23.02.2012, 22:53

Существует путь к Vim, чтобы знать, что терминал был закрыт: SIGHUP сигнал.

Когда Вы закрываете терминал, SIGHUP сигнал отправляется в процесс управления, который обычно является Вашей оболочкой. Ваша оболочка должна затем выйти, заставив Vim быть отправленной SIGHUP сигнал. По умолчанию процессы просто завершаются, когда они получают SIGHUP сигнал.

Я не знаком с Vim, но возможно он может быть настроен для сохранения всей работы прежде, чем выйти когда a SIGHUP сигнал получен. В противном случае, возможно, можно установить оболочку trap на SIGHUP, возможно, в сочетании с рабочим Vim с nohup, выполнить специальную команду, которая так или иначе заставляет Vim выходить более корректно, когда терминал закрывается.

5
27.01.2020, 20:13

Как другие заявили, энергия не может реагировать на такое событие. Но Вы могли бы рассмотреть одно из этих обходных решений:

  • Используя gvim вместо vim, который может быть вызван из командной строки, также. Псевдоним мог бы помочь корректировке к переключателю (принимающий совместимую с ударом оболочку): alias vim=gvim. Утверждение gvim как Ваш предпочтительный редактор могло бы помочь, также: export EDITOR=gvim. Это работает только над локальной машиной, все же.
  • Используя терминал muxer (такой как tmux или screen) был уже упомянут.
  • Конфигурирование терминала (какой бы ни это), чтобы подтвердить, что Вы хотите закрыть его. Это поймает Вас врасплох первые несколько раз, которые должны вынудить Вас думать прежде, чем закрыть Ваш терминал в долгосрочной перспективе.
1
27.01.2020, 20:13

Это пришло ко мне после того, как я задал вопрос на другом форуме AskUbuntu: vim.desktop - изменения теряются при выходе из терминала и множество экспериментальных файлов *. Desktop , демонстрирующих, что gnome-terminal позволит убить vim без предупреждения, даже если он запущен в оболочке и даже если до или после него были другие команды для bash или gnome-terminal для запуска.

«Интерактивная» оболочка ( bash -i ) казалась уверенной, что вызовет предупреждение GNOME при закрытии окна, основываясь на буквальном предупреждающем сообщении:

Закрыть этот терминал? Есть все еще процесс, работающий в этом терминале. Закрытие терминала убьет его.

, но добавление параметра -i в bash при запуске из файла *. Desktop остановило GNOME от открытия окна в моем тестировании (с Ubuntu 16.04 - gnome-terminal 3.18.3). Поэтому вместо этого я попытался вызвать интерактивную оболочку из сценария-оболочки, и это было полное решение:

/ usr / local / bin / vim-gnome-wrap

#!/bin/bash -f
bash -ic 'vim "$@"' vim "$@"

... затем отредактируйте / usr / share /applications/vim.desktop или скопируйте его в новый файл *. desktop со следующими изменениями:

TryExec=vim-gnome-wrap
# It doesn't open window for interactive shell when GNOME arranges the terminal:
# Terminal=true
# Exec=vim-gnome-wrap %F
# ... yet it does so when gnome-terminal is run explicitly:
Terminal=false
Exec=gnome-terminal -e "vim-gnome-wrap %F"

При закрытии окна выводится предупреждение о том, установлен ли vim buffer имеет несохраненные изменения или нет, и работает с несколькими файлами. Особая благодарность приведенному ниже @muru за предложение синтаксиса $ @ , который точно сохраняет аргументы (пробелы и метасимволы).

1
27.01.2020, 20:13

Теги

Похожие вопросы