使用 Pythoner 開始使用 spacemacs
什麼是太空 Mac?
“Spacemacs 是一種體驗 Emacs 的新方式。它是一種時尚、複雜的設置,非常強調人體工程學、助記符和一致性。”
簡而言之,spacemacs 就是要提供一套強大的、可擴展的即用型配置,讓您享受使用 emacs 的快感,而不必亂搞。所以繼續扔吧!
下面是我的基本環境:
emacs 版本 :emacs 25.2
系統 :ubuntu 伴侶 18.10
Python : Python 3.7.1 (anaconda3)
0x01 安裝及基本配置
安裝 spacemacs 非常簡單,直接在你的 github 倉庫主目錄中克隆 .emacs.d 目錄即可。
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
然後重新啟動emacs,它將自動安裝。我們建議在安裝過程中選擇 vim 和 helm。
spacemacs在安裝過程中會在你的home目錄下創建一個.spacemacs文件,如果插件下載速度太慢,可以考慮使用清華鏡像源。
將以下代碼添加到 .spacemacs dotspacemacs/user-init()
(setq configuration-layer--elpa-archives
'(("melpa-cn" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/melpa/")
("org-cn" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/org/")
("gnu-cn" . "https://mirrors.tuna.tsinghua.edu.cn/elpa/gnu/")))
其他國產鏡子也可以,添加方法同上。
0x02 spacemacs配置文件結構
.spacemacs 的基本結構是:
我們可以看到整個文件主要由四個函數組成。
layers
主要包含層相關配置init
它主要初始化一些變量。除了改變變量的值,一般不建議改變user-init
用戶自定義初始化代碼的位置,如之前配置國內鏡像源的代碼。user-config
包含一些用戶自定義配置
這四個函數的執行順序如下:
init -> user-init -> layers -> user-config
.spacemacs 文件在 emacs 中可用。 SPC f e d
編輯通過後快速打開編輯 SPC f s
保存並通過 SPC f e R
重新加載修改後的 .spacemacs 文件。
或者,您可以在主目錄中創建一個目錄 ~/.spacemacs.d/,將 .spacemacs 文件重命名為 init.el,並將其存儲在 .spacemacs.d/ 目錄中。 它位於 .spacemacs.d/ 目錄中。
配置 0x03 層
1.加載一個新層
如前所述,spacemacs 使用層來組織 emacs 配置。自定義配置也可以通過創建層來實現。 spacemacs 有許多內置層, SPC h SPC
獲取並添加要添加的圖層到 .spacemacs 中的圖層函數 dotspacemacs-configuration-layers
在變量中。
注意: 引入的每一層本質上都是一個列表。只要您對它感到滿意,您可以在每一層周圍放置括號,並在此處為特定層配置一些配置。例如,下面提到的flyspell錯誤就是這樣修復的。
####2. 添加未包含在層中的包
將要安裝的包添加到以下語句中,下次啟動emacs時會自動安裝。如果您需要進一步配置您的包,您可以創建自己的圖層並將它們導入到創建的圖層中。
dotspacemacs-additional-packages '(youdao-dictionary)
3.刪除未使用的包
您添加的圖層可能包含您通常不使用的包,可以使用
dotspacemacs-excluded-packages '(org-projectile)
0x04 創建自己的圖層
創建您自己的圖層允許您集中存儲您自己的配置以便於管理。
1.基本層結構
下面是 spacemacs 文檔中建議的層結構。您可以基於此結構創建自己的圖層。
[layer_name]
|__ [local]
| |__ [package 1]
| | ...
| |__ [package n]
|-- layers.el
|__ packages.el
|__ funcs.el
|__ config.el
|__ keybindings.el
[] = directory
2. 創建圖層
在 spacemacs 中創建圖層的內置命令是:configuration-layer/create-layer
, 運行後會詢問圖層的位置。默認是 ~/.emacs.d/private/ 並且可以像這樣更改:
dotspacemacs-configuration-layer-path '("~/.spacemacs.d/layers")
進行調整。然後不要忘記添加一個圖層 dotspacemacs-configuration-layers
中間。
3.分層安裝新包
首先需要在你所在層的package.el文件中找到如下語句並加上包名,如果你想要的包不在官方倉庫中,你可以指定遠程倉庫或者本地目錄。
(defconst zeamonk-packages
'((aweshell
:location (recipe :fetcher github :repo "manateelazycat/aweshell"))
)
)
然後以如下形式為您的包創建一個初始化函數: layerName/init-packageName
(defun zeamonk/init-aweshell ()
(use-package aweshell
:config
(spacemacs/set-leader-keys "osn" 'aweshell-new)
)
)
0x05 更好的配置
1.修正flyspell中文錯誤
當我啟動 emacs 時,出現以下錯誤:
Error enabling Flyspell mode:
(Error: No word lists can be found for the language "zh_CN".)
這個錯誤提示非常明顯。直接關掉中文檢查就好了
(spell-checking :variables
ispell-program-name "aspell"
ispell-dictionary "american"
spell-checking-enable-by-default nil)
2.使用python虛擬環境
在編寫Python代碼時,代碼補全,尤其是一些第三方庫,需要emacs在一定的虛擬環境下工作,為了解決這個問題,Python層內置了一個pyvenv,默認的虛擬環境目錄是~/.virtualenv .您可以通過初始化來完成。 user-init
在函數中指定自己的虛擬環境路徑
(setenv "WORKON_HOME" "/path/to/virtual/envs/")
以後在編輯py文件的時候,可以通過 , V w
移民 pyvenv-workon
用於選擇虛擬環境的命令。
3.導入elisp手冊
我當時從 vim 切換到 emacs 的主要原因之一是 emacs 文檔非常完整且易於閱讀。 C-h i
我可以立即進入信息模式,但我不明白為什麼在安裝 emacs 後發現沒有內置 elisp 文檔。在這種情況下,您應該自己下載 An Introduction to Programming in Emacs Lisp 並按順序執行以下兩個步驟:
- 移動 eintr.info.gz 到 info 目錄
$ sudo cp eintr.info.gz /usr/share/info/
$ cd /usr/share/info/
- 安裝
$ sudo ginstall-info --info-file=eintr.info.gz --dir-file=dir
4.許多對黑客有用的功能
下面的函數是我在學習spacemacs的時候為了方便而寫的,請參考。
(defun zeamonk-quick-eval-a-s-expr ()
"quick eval a symbol expression"
(interactive)
(save-excursion
(progn
(move-end-of-line 1)
(call-interactively #'eval-last-sexp))
)
)
(defun zeamonk-quick-eval-selected-region ()
"eval a selected region"
(interactive)
(progn
(call-interactively #'eval-region)
(evil-force-normal-state)
)
)
(defun zeamonk-truncate-lines ()
"turncate-lines in org-mode"
(interactive)
(setq truncate-lines nil)
(visual-line-mode))
5.改進的spacemacs配置
- 改變邪惡逃生鑰匙
熟悉vim的同學一般使用escj j
還j k
畢竟使用esc
太反人類了,Space Mac已經過去了evil-escape
插件實現了這個功能,可以用以下語句定義:
(setq-default evil-escape-key-sequence "jk")
jk
按屏幕線移動
(define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line)
(define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line)
- 完成時使用
C-n
,C-p
選擇補語
(define-key evil-insert-state-map (kbd "C-n") 'company-select-next)
(define-key evil-insert-state-map (kbd "C-p") 'company-select-previous)
歡迎大家關注公眾號LazyMonk,不定期分享有趣的代碼
原文鏈接:https://blog.csdn.net/zlyf1101/article/details/101930070