使用 Pythoner 開始使用 spacemacs


使用 Pythoner 開始使用 spacemacs

Emacs emacs Python

什麼是太空 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 的基本結構是:

01-00.png

我們可以看到整個文件主要由四個函數組成。

  • 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 在變量中。

01-01.png

注意: 引入的每一層本質上都是一個列表。只要您對它感到滿意,您可以在每一層周圍放置括號,並在此處為特定層配置一些配置。例如,下面提到的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 並按順序執行以下兩個步驟:

  1. 移動 eintr.info.gz 到 info 目錄
$ sudo cp eintr.info.gz /usr/share/info/
$ cd /usr/share/info/
  1. 安裝
$ 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配置

  1. 改變邪惡逃生鑰匙
    熟悉vim的同學一般使用esc j jj k畢竟使用 esc太反人類了,Space Mac已經過去了 evil-escape 插件實現了這個功能,可以用以下語句定義:
(setq-default evil-escape-key-sequence "jk")
  1. 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)
  1. 完成時使用 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,不定期分享有趣的代碼
qcode.jpg