有人在 WSL 上使用过 spacemacs 吗?

如题, 和在 Ubuntu 系统上使用有没有什么较大的差异?

没用过spacemacs。用自己的配置在wsl上试过,操作系统配置上有些区别,emacs本身感觉没什么差异。

还不如直接emacs for windows, 我安装了WSL,只有基本功能,其他很多功能都用不了的,不能当做完全的linux.

vcxsrv开xserver,基本上gui程序也都没有问题,但是涉及到硬件都有问题,比如没声音,显卡驱动,网速慢等等,但基本的emacs应该没问题。

我试了下, 中文输入有问题啊,你怎么解决的呢?

跟linux上一样用的fcitx下的rime输入法,在wsl中启动fcitx就好了。麻烦的是快捷键,设置autohotkey在vcxsrv窗口下屏蔽win10本身的输入法切换,而切换rime;在wsl外面还是win10本身的输入法切换。以前没折腾过autohotkey,感觉还行,不是太麻烦。

1 个赞

能不能贴一下你的详细配置呢? 昨天鼓捣了一天还是没能解决中文输入的问题,而且在 spacemacs 下的 SPC 键好像失效了, 按下 SPC 就会弹出感觉像 fcitx 的输入法名称窗口.

主要是平时很多东西还是在 Linux 下要方便很多, 但是在 Windows 上又有很多软件是要用的,比如 QQ, PD, Office 等… 现在的电脑开启虚拟机就会比较卡,想要都满足要求还是比较麻烦的

比较乱,凑合看吧。

Autohotkey

在vcxsrv窗口里面取消系统本身快捷键的占用。

#Return::Run, bash
#e::Run, ::{20d04fe0-3aea-1069-a2d8-08002b30309d}, , Max
#+e::Run, *RunAs "tc", , Max
<#Tab::AltTab

; RunOrActivateOrMinimizeProgram
EnvGet, userProfile, USERPROFILE
RunOrActivateOrMinimizeProgram(Program, WorkingDir="", WindowSize="")
{
	SplitPath Program, ExeFile
	Process, Exist, %ExeFile%
	PID = %ErrorLevel%
	if (PID = 0)
	{
		Run, %Program%, %WorkingDir%, %WindowSize%
	}
	else
	{
		SetTitleMatchMode,2
		DetectHiddenWindows, Off
		IfWinActive, ahk_pid %PID%
		WinMinimize, ahk_pid %PID%
		Else
		IfWinExist, ahk_pid %PID%
		WinActivate, ahk_pid %PID%
		Return
	}
}
#x::RunOrActivateOrMinimizeProgram("C:\Program Files\VcXsrv\vcxsrv.exe", UserProfile)
#+f::RunOrActivateOrMinimizeProgram("C:\Program Files (x86)\Mozilla Firefox\firefox.exe", UserProfile)

#IfWinActive ahk_class VcXsrv/x
{
        !Tab::ControlSend, , !{Tab}, VcXsrv Server - Display xxx-PC:0.0
        #Tab::ControlSend, , #{Tab}, VcXsrv Server - Display xxx-PC:0.0
        #Return::ControlSend, , #{Return}, VcXsrv Server - Display xxx-PC:0.0
        #+Return::ControlSend, , #+{Return}, VcXsrv Server - Display xxx-PC:0.0
        #^Return::ControlSend, , #^{Return}, VcXsrv Server - Display xxx-PC:0.0
        ^Space::ControlSend, , ^{Space}, VcXsrv Server - Display xxx-PC:0.0
        #a::ControlSend, , #a, VcXsrv Server - Display xxx-PC:0.0
        #s::ControlSend, , #s, VcXsrv Server - Display xxx-PC:0.0
        #d::ControlSend, , #d, VcXsrv Server - Display xxx-PC:0.0
        #f::ControlSend, , #f, VcXsrv Server - Display xxx-PC:0.0
        #g::ControlSend, , #g, VcXsrv Server - Display xxx-PC:0.0
        #h::ControlSend, , #h, VcXsrv Server - Display xxx-PC:0.0
        #j::ControlSend, , #j, VcXsrv Server - Display xxx-PC:0.0
        #k::ControlSend, , #k, VcXsrv Server - Display xxx-PC:0.0
        #l::ControlSend, , #l, VcXsrv Server - Display xxx-PC:0.0
        #q::ControlSend, , #q, VcXsrv Server - Display xxx-PC:0.0
        #w::ControlSend, , #w, VcXsrv Server - Display xxx-PC:0.0
        #t::ControlSend, , #t, VcXsrv Server - Display xxx-PC:0.0
        #y::ControlSend, , #y, VcXsrv Server - Display xxx-PC:0.0
        #u::ControlSend, , #u, VcXsrv Server - Display xxx-PC:0.0
        #i::ControlSend, , #i, VcXsrv Server - Display xxx-PC:0.0
        #o::ControlSend, , #o, VcXsrv Server - Display xxx-PC:0.0
        #p::ControlSend, , #p, VcXsrv Server - Display xxx-PC:0.0
        #+p::ControlSend, , #+p, VcXsrv Server - Display xxx-PC:0.0
        #^p::ControlSend, , #^p, VcXsrv Server - Display xxx-PC:0.0
        #z::ControlSend, , #z, VcXsrv Server - Display xxx-PC:0.0
        #c::ControlSend, , #c, VcXsrv Server - Display xxx-PC:0.0
        #v::ControlSend, , #v, VcXsrv Server - Display xxx-PC:0.0
        #b::ControlSend, , #b, VcXsrv Server - Display xxx-PC:0.0
        #n::ControlSend, , #n, VcXsrv Server - Display xxx-PC:0.0
        #m::ControlSend, , #m, VcXsrv Server - Display xxx-PC:0.0
        #+m::ControlSend, , #+m, VcXsrv Server - Display xxx-PC:0.0
        #^m::ControlSend, , #^m, VcXsrv Server - Display xxx-PC:0.0
        #0::ControlSend, , #0, VcXsrv Server - Display xxx-PC:0.0
        #1::ControlSend, , #1, VcXsrv Server - Display xxx-PC:0.0
        #2::ControlSend, , #2, VcXsrv Server - Display xxx-PC:0.0
        #3::ControlSend, , #3, VcXsrv Server - Display xxx-PC:0.0
        #4::ControlSend, , #4, VcXsrv Server - Display xxx-PC:0.0
        #5::ControlSend, , #5, VcXsrv Server - Display xxx-PC:0.0
        #6::ControlSend, , #6, VcXsrv Server - Display xxx-PC:0.0
        #7::ControlSend, , #7, VcXsrv Server - Display xxx-PC:0.0
        #8::ControlSend, , #8, VcXsrv Server - Display xxx-PC:0.0
        #9::ControlSend, , #9, VcXsrv Server - Display xxx-PC:0.0
        #-::ControlSend, , #-, VcXsrv Server - Display xxx-PC:0.0
        #=::ControlSend, , #=, VcXsrv Server - Display xxx-PC:0.0
}

locales

发行版用的是debian,ubuntu上改locales还是有点不一样。

  • 在/var/lib/locales/supported.d/local下添加中文相关locales。
  • sudo locale-gen
  • 在/etc/default/locale下添加LANG=zh_CN.UTF-8。

.bashrc

把linux系统里面.xinitrc里面的配置放在了.bashrc。

export DISPLAY=localhost:0.0

export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:$PATH"
export MANPATH="/usr/local/man:$MANPATH"

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

# Launch Zsh
if [ -t 1 ]; then
    exec zsh
fi

start.sh

启动bash之后运行这个脚本进入桌面。 用的是dwm窗口管理器,发现conky关于硬件的信息都获得不了,索性都注销了,懒得折腾了。

conky | while true; read line; do xsetroot -name "$line"; done &
fcitx &
dunst &
exec dwm

默认的14.04版本存在一些问题,升级到16.04之后大多数都自动解决了。

非常感谢,:grin:

好方法. 目前也是考虑结合docker+vcxsrv来跑emacs,没想清楚中文输入怎么解决. 原来可以Autohotkey. 真棒

我写了一个解决快捷键冲突的 AutoHotkey 脚本(vcxsrv.ahk). 直接运行即可。欢迎拍砖。

1 个赞