web-dev-qa-db-ja.com

Windows 10 Linux bash Shell Ctrl + SpaceでEmacsにマークが設定されない

Windows 10では、Linux Bashのサブシステムをインストールしました。しかし、Emacsのショートカットに問題があります Ctrl+space マークポイントを設定しません。

私が試したことと役に立たなかったこと:

  • Windowsコンソールのプロパティメニューで[Ctrlキーのショートカットを有効にする]をオフにしてみました

  • 別の端末のConEmuを使用しようとしましたが、成功しませんでした。

これは何らかの方法でctrl + spaceで同様の問題を抱えているubuntuに関連しているかどうか、WindowsのLinux bashはubuntuリポジトリを使用しています。

12
Pawel Dubiel

この記事の執筆時点(2016年9月1日)で、Ctrl-SpaceをBashターミナルに通すという意味では、これに対する解決策はありません。しかし、多くのユーザーには十分な回避策があります。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ユーザー名に置き換えます(それがわからない場合は、Bashプロンプトでwhoamiコマンドを実行してください)。
    • 理想的には、SSHキーを使用してパスワードなしの認証を設定する必要がありますが、その方法はこの質問の範囲外です(利用可能なガイドはたくさんあります。「パスワードなしのssh-keygen」をWebで検索してください)。それまでの間、PasswordAuthentication yesという行を追加するか、コメントを外してください。
    • セットUsePrivilegeSeparation no;おそらく、ファイル内にUsePrivilegeSeparation yes;という行があります。 yesnoに変更し、/ etc/ssh/sshd_configファイルを保存するだけです。

    ここで問題が発生した場合は、手順1を繰り返してファイルを復元できます。

  3. コマンドSudo service ssh --full-restartを使用してSSHサーバーを起動します。
  4. PuTTYを使用して(ダウンロード ここ )、ホスト名フィールドにlocalhostを使用してログインします。その他はすべてデフォルトのままにします。 Linuxユーザー名とパスワードの入力を求められます。
  5. emacsを実行します。 Ctrlキーを押しながらスペースを押すと、必要に応じてマークが設定されます。

(上記の手順はしないだけで、システムがotherホスト。これを行うには、Windowsファイアウォールルールを変更して、インバウンドTCPポート22を許可するようにする必要があります。)

別の答え で、「しかし、PuTTYはローカル端末ではありません。」このようにlocalhostを使用できることに気付いていなかったのか、またはローカル端末に比べてオーバーヘッドが大きいためにPuTTYを却下していたのかどうかはわかりません。後者の場合、私は心配しません。インタラクティブなSSHセッションは非常に軽量な負荷です。 (それは確かにX Window Systemを実行するよりもはるかに負荷が少ないので、GUI Emacsまたはxtermを実行できます!)

ストレートターミナルに対してこの方法を実行することの唯一の本当の欠点は、クリップボードの内容を非常に速く入力したかのように、貼り付けイベントが文字ごとに送信されることです。火。 (貼り付けはしないでください進行中の貼り付けを検出し、貼り付けが完了するまでキーコードを無効にするロジックがあるため、キーコードコマンドを起動します。)

また、標準のBashターミナルに比べて少なくとも1つの非常に大きな利点もあります。マウスイベントは、Emacsが応答できる形式でPuTTYによってサポートされているため、皮肉にも、PuTTYでマウスを使ってポイントを移動できます。ローカル端末で。

3
Trey

私はConEmuを使用しています。エレガントな方法はありませんが、マクロを使用して解決できます。

  1. 「設定」を開きます(上部のアイコンをクリックします)。
  2. 「キーとマクロ」をクリックします。
  3. 右側で、「マクロ01」..「マクロ32」オプションが表示されるまで下にスクロールし、使用可能なオプションを選択します(問題ではありません)。
    この例では、マクロ01を取り上げます。
  4. 最初のドロップダウンメニューで[スペース]を選択します。
  5. 2番目のドロップダウンメニューで[Ctrl]を選択します。 残りの2つのドロップダウンメニューはそのままにします。
  6. GUIマクロフィールドに以下を貼り付けます:

    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文字列をemacsに送信します。次に[設定を保存]をクリックします。


最終的には次のようになります。

enter image description here

5
Akira Ishikawa

このプロジェクトでは、代替ターミナルとしてMinTTYを使用できます: https://github.com/mintty/wsltty 。 PuTTYから派生していますが、SSHは必要ありません。そしてPuTTYのように、それはCtrl-スペースをうまく処理します。

2
Joel Dice

実行中showkey -a windows/ubuntu-bashコンソールで、ctrl + spaceが単純なスペースを送信していることを示しています。

そして、それは他のLinuxマシンへのsshセッションと同じ問題ですctrl +スペースはプレーンスペースとして送信されます。

同じ動作が他のWindowsベースの端末(conemu、consolez、MobaXTerm)でも発生します。ただし、PuTTYはこれを適切に処理できますが、PuTTYはローカル端末ではありません。

Windows端末には、一部のシーケンスのマッピングがないと思います。同じ問題がctrl + 1 ctrl + 2 ..などの他の組み合わせでも発生します。たとえば、PuTTYなどのキーボードマッピングを処理できる端末が必要です。

この問題は、Windows bashターミナルの今後のリリースで修正されるはずです。

2
Pawel Dubiel

この問題は Windows 10 build 14965 で修正されています。小切手:

[Environment]::OSVersion

更新がない場合はインストールしてください!

1
oblio

X Server for Windowsをインストールできるので、ハックがあります。

最初のインストール xming for 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

0
Pawel Dubiel