Windows 10 Linux bashシェルのctrl + spaceがEmacsでマークを設定しません


12

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

私が試したが助けなかったもの:

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

  • 成功せずに別の端末ConEmuを使用しようとしました。

これは、ctrl + spaceで同様の問題を抱えているubuntuと何らかの関係があり、windows linux bashはubuntuリポジトリを使用しているのでしょうか。

回答:


3

何もありませんソリューションこれには(2016年9月1日)この記事の執筆時点では、Bashの端子を介してCtrlキーを押しながらスペースのパスを作るという点で、ブタ多くのユーザーのために十分であるかもしれ回避策があります:使用の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 USERNAMEUSERNAMEをLinuxユーザー名に置き換えて行を追加します(それが何かわからない場合は、whoamiBashプロンプトでコマンドを実行します)。
    • 理想的には、SSHキーを使用してパスワードなしの認証をセットアップする必要がありますが、その方法はこの質問の範囲外です(利用可能なガイドは多数あります。「パスワードなしのssh-keygen」を検索してください)。それまでの間、行を追加またはコメント解除しますPasswordAuthentication yes
    • セットUsePrivilegeSeparation no; おそらくファイルに次のような行が見つかるでしょうUsePrivilegeSeparation yes。を変更しyes/ etc / ssh / sshd_configファイルnoを保存するだけです。

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

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

(上記の手順だけでは、システムが他のホストから SSH接続を受け入れられないことに注意してください。そのためには、Windowsファイアウォールルールを変更して、受信TCPポート22を許可する必要があります。)

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

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

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


5

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

  1. 「設定」を開きます(上部のアイコンをクリックします)。
  2. 「キーとマクロ」をクリックします。
  3. 右側で、「Macro 01」..「Macro 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に文字列を送信します。[設定を保存]をクリックします。


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

ここに画像の説明を入力してください


魅力のように機能します。素晴らしい!
-chriskelly

2

showkey -awindows / ubuntu-bashコンソールで実行すると、ctrl + spaceが単なるスペースを送信していることがわかります。

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

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

Windowsターミナルには、一部のシーケンスのマッピングがないと思います。同じ問題は、ctrl + 1 ctrl + 2 ..などのような他の組み合わせにもあります。ここで必要なのは、たとえばパテのようにそれ自体のキーボードマッピングを処理できる端末です。

この問題は、Windows bashターミナルの将来のリリースで修正されるべきだと思います。


さらに悪いことに、set-markの他のバインディングであるctrl- @も渡さないようです。誰かが実際のバインドにいる場合、Mx set-mark-commandを使用できます。おそらく今のところ正しいことは、キーバインディングを他の何かに設定することです。
ジムハンジカー

@JimHunzikerこれset-mark-commandはおそらくEmacsで最も頻繁に使用されるコマンド(を除くself-insert-command)であることを考えると、そのために指を再訓練することは、本当に急な質問です。特に、私のようなEmacsを25年以上使用している場合
トレイ

Windows上でXmingのを実行している気にしない場合@Treyは、別の答えを追加
パヴェルDubiel

@PawelDubiel追加された私の答えをご覧ください。(後の読者を支援するために、必要以上に詳細な指示を出しました。)何らかの理由でPuTTYを却下しましたが、その理由は何も言いませんでした。確かに、xming + X端末よりもシステムにかかる負荷がはるかに少ないオプションです。
トレイ

2

:このプロジェクトでは、代替端末としてMinTTYを使用することができますhttps://github.com/mintty/wsltty。PuTTYから派生していますが、SSHは必要ありません。また、PuTTYと同様に、Ctrlキーを押しながらスペースをうまく処理します。


1

この問題は、Windows 10ビルド14965で修正されました。小切手:

[Environment]::OSVersion

まだアップデートしていない場合はインストールしてください!


回答に詳細を追加してください-回答が役に立たなくなる時点でリンクが機能しなくなる場合があります。
djsmiley2k TMW

0

X Server for Windowsをインストールできるため、ハッキングがあります

1 Windowsxmingを最初にインストールする

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


なぜこれがPuTTYを使用するより優れた回避策なのですか?EmacsをGUIモードで実行する場合は理解できますが、使用-nwすると、2番目のウィンドウシステム全体を実行する必要があることを除いて、PuTTYの場合と同様にターミナルで実行できます。私の簡単なテストでは、sshdとPuTTYを実行するよりも約500 MBのメモリを消費し、CPUコストも同様に高くなります。
トレイ

@trey 500MBよろしいですか?私のシステムで正確に5メガバイトである
パヴェルDubiel

ああ、私はユニットを読み違えました、あなたは正しいです。ただし、同等のsshd + PuTTYの数は、他の数の約25%です;-)
Trey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.