搭建工作环境

本文是对新电脑安装软件的简单汇总。以Windows为主。

基础环境

Windows相关

CygwinMsys2都比较常用,暂时没能体会出区别。轻量开发不需要。
此外还有Windows Subsystem for Linux (WSL),但经常容易出现同一台机器上两个版本的软件这种问题,比较麻烦。
Windows Terminal可以集成多种环境,但是没有什么特别的需求。

以Msys2为例,安装完后执行pacman -Syu来更新包,可能需要执行两次。此外,要对系统变量做如下设置:

  1. 增加用户变量MSYS2_PATH_TYPE,值为inherit,否则不会继承系统的PATH。
  2. msys64\usr\binmsys54\usr\local\bin加入系统PATH。

编程环境

C++ / Java 开发

Python

Windows+Python是一个众所周知的灾难。方便起见还是直接使用Anaconda吧!分别对应了Python2和3的版本。安装时记得勾选加入PATH中。
首先执行

1
conda update conda

进行更新,接下来在Anaconda的目录中分别将python.exe复制到同目录下python2.exepython3.exe方便调用不同版本。具体python指向哪一个是根据PATH中的先后顺序,可以用where python来查看。同理复制Scripts文件夹中的pip.exepip-script.py。调用python会给WARNING说没有激活conda环境,方法是先conda init <powershell>更改为当前shell,重启shell后用conda info --envs找到地址,接着conda activate base就可以了。

或许需要用set-ExecutionPolicy RemoteSigned来提供权限。

推荐安装black来进行Code Formatting。需要用Python3来安装

1
python3 -m pip install black

但是装完后black命令也可以用在Python2文件上。

Emacs

最好的编辑器(操作系统)Emacs,目前Windows最新版26.3
下载并解压后,根据官方的提示执行bin\runemacs.exe即可。运行bin\emacs.exe也可以,只是会多出一个黑框。

在命令行下直接运行bin\emacs.exe不会多一个命令行窗口。同时支持-nw选项。

<folder>\emacs\bin文件夹加入PATH中,方便直接调用。

在PowerShell或Windows Terminal中查看PATH需要用$env:PATH

首先要找到Emacs加载配置的地址。用echo ~来确认。通常在c:/Users/<usrname>/AppData/Roaming/中。

1
cd ~/.emacs.d/

直接引用

可以直接用别人现成的配置。已有的配置推荐这几个。

Spacemacs

一个开源项目,重点是Emacs与Vim的兼容。首次启动会询问用户更倾向于哪种编辑器方式,以及需要轻量或重量的编辑器。安装方式直接

1
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

注意备份好自己原先的配置文件。首次安装比较缓慢,后面的效率还是不错的。
此外,作者还推出了一个21天Emacs学习指南,解释的还是比较清楚的。后半部分和Vim关系比较大。

高手配置

Steve Purcell的配置在Github上Star最多(5.3k Stars),应该是业界翘楚了。

1
git clone https://github.com/purcell/emacs.d.git ~/.emacs.d

但是在我的电脑上每次打开要加载18秒,太慢了。。。

自己配置

白盒用起来还是更舒服,至少要知道每一块的作用是什么。比较推荐的Reference有:Emacs-China 社区, Emacs-TW 社区, 以及一篇Python社区的文章。

首先建立.emacs.d/init.el文件。这是emacs读取配置的入口。规范起见,所有的.el文件开头结尾应该遵循如下规范:

1
2
3
4
5
6
7
;;; package --- summary
;;; .emacs.d/init.el
;;; Commentary:
;;; Code:

(provide `init)
;;; init.el ends here

同时,为了能在配置时快速找到这个文件,暂时将它绑定到<F2>

1
2
3
4
5
;; Fast open init file, bind to <F2>
(defun open-init-file()
(interactive)
(find-file "~/.emacs.d/init.el"))
(global-set-key (kbd "<f2>") 'open-init-file)

文件管理

为了有效管理不同文件,建立一个lisp文件夹以管理不同的el文件。
同时在init.el中加入

1
(add-to-list 'load-path "~/.emacs.d/lisp/")

这样后面就可以用(require)命令来直接引用(provide)的文件了。
此外可以通过org来管理,步骤略。

依赖项

最新版本已经集成packages.el,直接引用即可。安装并配置use-package,方便其他包的安装。使用auto-compile确保编译包,并使用最新版本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
;; MELPA package support
;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(require 'package)
(setq package-archives
'(("melpa" . "http://melpa.org/packages/")
("melpa-stable" . "https://stable.melpa.org/packages/")
("marmalade" . "http://marmalade-repo.org/packages/")
("elpy" . "http://jorgenschaefer.github.io/packages/")
("gnu" . "http://elpa.gnu.org/packages/"))
;; Avoid duplicate loading
package-enable-at-startup nil)
;; Initializes the package infrastructure
(package-initialize)

;; install use-package
(when (not (package-installed-p 'use-package))
(package-refresh-contents)
(package-install 'use-package))

;; Configure use-package
(eval-when-compile
(require 'use-package))
(setq use-package-verbose t)
(setq use-package-always-ensure t)

;; always compile packages
(use-package auto-compile
:config (auto-compile-on-load-mode))
;; use latest version
(setq load-prefer-newer t)

重新启动Emacs并等待初始化。
接下来定义my-packages变量, 后面需要什么包的话都加在里面统一管理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(defvar my-packages
'(better-defaults ;; Set up some better Emacs defaults
material-theme ;; Theme
monokai-theme ;; Current Theme
company ;; Auto complete
web-mode ;; .html
js2-mode ;; .js
elpy ;; python
))

;; Scans the list in my-packages
;; If the package listed is not already installed, install it
(mapc #'(lambda (package)
(unless (package-installed-p package)
(package-install package)))
my-packages)

UI配置

更改UI使得界面更加清楚美观。

  • 设定编码
    1
    2
    3
    4
    5
    6
    7
    ;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ;; setup coding system
    ;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    (prefer-coding-system 'utf-8)
    (setenv "LANG" "en_US.UTF-8")
    (setenv "LC_ALL" "en_US.UTF-8")
    (setenv "LC_CTYPE" "en_US.UTF-8")
  • 去掉工具栏、菜单、滚动条, 以及minibuffer的滚动条。可以把指针改成竖线,但我习惯方块。
    1
    2
    3
    4
    5
    6
    7
    8
    ;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ;; Basic Settings
    ;; ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ;; (setq-default cursor-type 'bar)
    (tool-bar-mode -1)
    (menu-bar-mode -1)
    (scroll-bar-mode -1)
    (set-window-scroll-bars (minibuffer-window) nil nil)
  • 打开时最大化,并取消欢迎界面及scratch上的信息。
    1
    2
    3
    (setq inhibit-splash-screen 1
    initial-scratch-message nil
    initial-frame-alist `((fullscreen . maximized)))

Tmux

个人感觉(Tmux)[https://github.com/tmux/tmux/wiki]是一个简装Emacs,但是提供了多窗口和独立于ssh session的功能,非常实用。

作者

Yuan Qiu

发布于

2020-01-29

更新于

2024-06-09

许可协议