12

В Windows 10 я установил Подсистему для Linux Bash. Но у меня есть проблема с ярлыком в Emacs. Ctrl+пробел не устанавливает точку отметки.

Что я попробовал и не помогло:

  • Я пытался снять флажок "включить сочетания клавиш Ctrl" в меню свойств для консоли Windows

  • Я пытался использовать разные терминалы ConEmu безуспешно.

Интересно, связано ли это как-то с Ubuntu, которая имеет схожие проблемы с Ctrl + Space, а Windows Linux Bash использует репозитории Ubuntu.

6 ответов6

5

Я использую ConEmu. Не существует элегантного способа, но его можно решить с помощью макроса.

  1. Откройте "Настройки" (Нажмите на иконку на вершине).
  2. Нажмите "Ключи и макросы".
  3. На правой стороне прокрутите вниз, пока не увидите опции "Макрос 01" .. "Макрос 32", и выберите любой доступный (не имеет значения).
    Давайте возьмем Макро 01 для этого примера.
  4. Выберите "Пробел" в первом выпадающем меню.
  5. Выберите "Ctrl" во втором выпадающем меню. Оставьте оставшиеся 2 выпадающих меню нетронутыми.
  6. Вставьте ниже в поле GUI Macro :

    keys("\e");keys("x");keys("s");keys("e");keys("t");keys("-");keys("m");keys("a");keys("r");keys("k");keys("-");keys("c");keys("o");keys("m");keys("m");keys("a");keys("n");keys("d");keys("\n")
    
  7. Выше в основном отправляет M-x select-mark-command string в emacs. Теперь нажмите "Сохранить настройки".


В итоге это должно выглядеть так:

3

Решений для этого нет, с точки зрения прохождения Ctrl-Space через терминал Bash на момент написания этой статьи (1 сентября 2016 г.), но для многих пользователей существует обходной путь: используйте PuTTY для подключения через SSH, который вызывает обработку Ctrl-Space. (В режиме tty невозможно отличить Ctrl-Space от Ctrl- @, потому что они представляют собой один и тот же символьный код, но это не должно быть проблемой, так как по умолчанию Emacs настроен для обработки команды set-mark-command таким образом .)

  1. Установите сервер OpenSSH с помощью sudo apt-get install openssh-server . Если он уже был установлен, удалите его (sudo apt-get remove openssh-server) и переустановите его, чтобы сбросить файлы конфигурации.
  2. Отредактируйте файл /etc/ssh/sshd_config (с помощью sudo) следующим образом:

    • Если в PermitRootLogin есть незакомментированная строка , закомментируйте ее. Добавить строку PermitRootLogin no .
    • Добавьте строку AllowUsers USERNAME , заменив USERNAME вашим именем пользователя в Linux (если вы не знаете, что это такое, запустите команду whoami в командной строке Bash).
    • В идеале вам следует настроить аутентификацию без пароля с использованием ключей SSH, но как это сделать, выходит за рамки этого вопроса (доступно множество руководств; поищите в Интернете «пароль без пароля ssh-keygen»). А пока добавьте или раскомментируйте строку PasswordAuthentication yes .
    • Установите UsePrivilegeSeparation no ; скорее всего, вы найдете в файле строку, в которой UsePrivilegeSeparation yes ; просто измените yes на no и сохраните файл /etc/ssh/sshd_config .

    Если что-то пойдет не так, вы можете восстановить файл, повторив шаг # 1.

  3. Запустите сервер SSH с помощью команды sudo service ssh --full-restart .
  4. Используя PuTTY (скачать здесь), войдите с помощью localhost в поле Hostname, все остальное оставьте по умолчанию. Вам будет предложено ввести имя пользователя Linux и пароль.
  5. Запустите emacs . Ctrl-пробел установит метку по желанию.

(Обратите внимание , что описанные выше действия не сам по себе, сделать систему , способным принимать SSH соединение с других хостов. Для этого вам также придется изменить правила брандмауэра Windows, чтобы разрешить входящий TCP-порт 22.)

В другом ответе вы сказали:«но шпатлевка не является локальным терминалом». Я не уверен, что вы не знали, что вы можете использовать localhost таким образом, или вы отказались от PuTTY из-за больших накладных расходов по сравнению с локальным терминалом. Если последнее, я бы не стал беспокоиться, интерактивный SSH-сеанс является чрезвычайно легкой нагрузкой. (Это, безусловно, намного меньше нагрузки, чем запуск системы X Window, поэтому вы можете запустить графический интерфейс Emacs или xterm!)

Единственный реальный недостаток такого способа по сравнению с прямым терминалом состоит в том, что события вставки отправляются буквенно, как если бы вы набирали содержимое буфера обмена очень быстро, что может привести к тому, что электрические пары, отступы, расширение фрагмента и т.д. Пожар. (Вставка не должна вызывать команды клавиш-аккордов, так как есть логика для обнаружения выполняющейся вставки и отключения клавиш-аккордов, пока вставка не закончится.)

И, по крайней мере, у стандартного терминала Bash есть еще одно очень большое преимущество: события мыши поддерживаются PuTTY в форме, на которую может реагировать Emacs, поэтому по иронии судьбы вы можете перемещать точку с помощью мыши в PuTTY, даже если вы можете ' т с местным терминалом.

2

Этот проект позволяет использовать MinTTY в качестве альтернативного терминала: https://github.com/mintty/wsltty. Он получен из PuTTY, но не требует SSH. И как PuTTY, он прекрасно обрабатывает Ctrl-пробел.

2

При запуске showkey -a в консоли windows/ubuntu-bash он показывает, что ctrl+space просто отправляет простое пространство.

И та же проблема с ssh-сессией для любой другой машины linux. Ctrl + space отправляется как обычное пространство.

То же самое происходит с любым другим оконным терминалом (conemu, consolez, MobaXTerm) - за исключением того, что putty может справиться с этим хорошо, но putty не является локальным терминалом.

Я думаю, что терминалы Windows не имеют сопоставлений для некоторых последовательностей. Та же проблема с другими комбинациями, такими как ctrl+1, ctrl+2 ... и т.д. Здесь требуется терминал, который может обрабатывать сопоставления клавиатуры для себя, например, замазки.

Я считаю, что эта проблема должна быть исправлена в будущих выпусках терминала Windows Bash.

1

Эта проблема теперь исправлена в Windows 10 build 14965. Проверьте:

[Environment]::OSVersion

И установите обновления, если у вас их нет!

0

Есть взлом, так как мы можем установить X Server для Windows

1 первая установка xming для windows

2 начало xming

3 тогда из windows bash установить

sudo apt-get install rxvt-unicode-256color

4 затем откройте cmd.exe и запустите

bash.exe -c "urxvtd -q -o -f; bash" 

теперь мы в консоли bash и запускаем

(DISPLAY=:0 urxvtc &)

5 К этому моменту мы уже должны увидеть новый терминал в Xming. И мы можем запустить emacs в режиме терминала.

emacs -nw

И все привязки теперь работают просто отлично

соответствующее обсуждение здесь https://github.com/Microsoft/BashOnWindows/issues/531

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