Windows 10 Linux Bash Shell Ctrl + Space未在Emacs中设置标记


12

在Windows 10中,我安装了Linux Bash子系统。但是我对Emacs中的快捷方式有疑问Ctrl+ space没有设置标记点。

我尝试过但没有帮助的事情:

  • 我试图在Windows控制台的属性菜单中取消选中“启用Ctrl键快捷方式”

  • 我尝试使用其他终端ConEmu失败。

我想知道这是否与ubuntu有关,后者与ctrl + space存在类似问题,而Windows linux bash正在使用ubuntu存储库。

Answers:


3

没有解决这一点,在通过击终端使Ctrl-Space键通而言,在撰写本文(2016年9月1日)的时间-丁有可能对许多用户来说是足够的一种解决方法:使用通过腻子连接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,用您的Linux用户名替换USERNAME(如果您不知道这是什么,请whoami在Bash提示符下运行命令)。
    • 理想情况下,您应该使用SSH密钥来设置无密码身份验证,但是如何做到这一点超出了这个问题的范围(有很多指南;可在网上搜索“ passwordless 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在“主机名”字段中使用登录,其他所有内容保留为默认设置。系统将要求您输入Linux用户名和密码。
  5. 运行emacs。Ctrl-空格将根据需要设置标记。

(请注意,上述步骤本身不会使您的系统能够接受来自其他主机的SSH连接。为此,您还必须更改Windows防火墙规则以允许入站TCP端口22。)

另一个答案中,您说:“但腻子不是本地终端。” 我不确定您是否不知道可以用localhost这种方式使用,还是因为与本地终端相比开销更大而取消了PuTTY。如果是后者,我不会担心,交互式SSH会话是一种非常轻量级的负载。(与运行X Window系统相比,负载肯定小得多,因此您可以运行GUI Emacs或xterm!)

与直线端子相比,以这种方式运行的唯一真正的缺点是,粘贴事件会逐个字母地发送,就像您快速键入剪贴板的内容一样,这可能会导致电对,缩进,片段扩展等。火。(粘贴应该不会造成主和弦命令来火,因为那里的逻辑来检测正在进行中的粘贴和禁用键的和弦,直至糊状完成。)

而且,与标准的Bash终端相比,至少还有一个非常大的优势:PuTTY支持鼠标事件,Emacs可以响应鼠标事件,因此具有讽刺意味的是,即使可以,您也可以在PuTTY中使用鼠标来移动鼠标点。 t与本地终端。


5

我使用ConEmu。没有优雅的方法,但是可以使用宏解决。

  1. 打开“设置”(单击顶部的图标)。
  2. 单击“键和宏”。
  3. 在右侧,向下滚动,直到看到“ Macro 01” ..“ Macro 32”选项,然后选择任何可用的(无关紧要)。
    让我们以Macro 01为例。
  4. 在第一个下拉菜单中选择“空格”。
  5. 在第二个下拉菜单中选择“ 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,2017年

2

showkey -a在Windows / Ubuntu-bash控制台中运行时,它显示ctrl + space仅发送普通空间。

与其他任何linux机器的ssh会话相同的问题ctrl +空间以纯空间发送。

任何其他基于Windows的终端(conmu,consolez,MobaXTerm)都具有相同的行为-除了腻子可以很好地解决此问题,但腻子不是本地终端。

我认为Windows终端没有某些序列的映射。同样的问题也存在于其他组合中,例如ctrl + 1 ctrl + 2 ..等。这里需要的是可以自行处理键盘映射的终端,例如腻子。

我相信这个问题应该在Windows bash终端的将来版本中得到解决。


更糟糕的是,它似乎也没有传递ctrl- @,这是set-mark的另一个绑定。如果某人处于真实绑定中,则可以使用Mx set-mark-command。目前,正确的做法可能是将键绑定设置为其他内容。
Jim Hunziker

@JimHunziker鉴于这set-mark-command可能是Emacs中最常用的命令(除了self-insert-command),为此重新训练手指是一个非常非常困难的问题-特别是您是否像我一样使用Emacs已有25年以上。
Trey'9

@Trey添加了另一个答案,如果您不介意在Windows上运行xming
Pawel Dubiel

@PawelDubiel看到我的回答刚刚添加。(我提供了比您更详细的说明,以帮助您以后的读者。)您出于某种原因而拒绝了PuTTY,但没有说明该原因是什么。与xming + X终端相比,这无疑是一个选项,它将给系统带来更少的负载。
Trey


1

Windows 10内部版本14965现在已解决此问题。校验:

[Environment]::OSVersion

如果还没有,请安装更新!


请为您的答案添加更多详细信息-该链接可能会在您的答案变得无用的某个时刻停止工作。
djsmiley2k TMW

0

有一个黑客,因为我们可以为Windows安装X Server

1首先为Windows 安装Xming

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的绝佳解决方法?如果您打算在GUI模式下运行Emacs,我会理解的,但是您使用-nw它使它在终端中运行,就像在PuTTY中一样,只是您现在必须运行整个第二个窗口系统-从在我的快速测试中,除了运行sshd和PuTTY外,这将花费您近500 MB的内存,并且CPU成本也将相应提高。
Trey'9

@trey 500MB您确定吗?在我的系统上恰好是5mb
Pawel Dubiel

啊,我看错了单位,你是对的。但是可比的sshd + PuTTY数量大约是其他数量的25%,无论它是什么;-)
Trey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.