使用 emacs 开发

缩进 intentation

快速设置

;; -------- 缩进设置 ----------------------

;; 显示空格、tab、回车等控制字符
(global-whitespace-mode 1)

;; 一个TAB等于多少空格
(setq custom-tab-width 2)

;; 用TAB键时都用空格键space填充
;; 回车,自动缩进,`M-\` 删除缩进
(setq indent-tabs-mode nil)
(setq tab-width custom-tab-width)
;; (setq-default default-tab-width 'tab-width)


;; 设置Golang
(add-hook 'go-mode-hook
    (lambda ()
      (setq tab-width custom-tab-width)
      (setq indent-tabs-mode nil)))


如何大段缩进代码

  1. emacs 26 默认有一个大段缩进的功能

    Control + x TAB 然后,

    • 方向键左右,控制移动以“空格”为单位。
    • 方向键左右 + SHIFT ,控制移动以“缩进”为单位。
  2. 也可以自定义

    1
    2
     (global-set-key (kbd "C->") 'indent-rigidly-right-to-tab-stop)
     (global-set-key (kbd "C-<") 'indent-rigidly-left-to-tab-stop)
    

    然后,

    • Use Control + > to indent right
    • Use Control + < to indent left

Basic Intentation

  • indent-tabs-mode 变量决定 TAB键 是否用来缩进。
    • 默认值为 True
    • .emacs 中设置为 false : (setq-default indent-tabs-mode nil)
    • 命令设置: M-x set-variable indent-tabs-mode 回车
    • 查看帮助: C-h v indent-tabs-mode 回车
  • c-basic-offset: The basic indentation offset in CC Mode, default is 2.
    • For Perl, it is controlled by cperl-indent-level.
  • tab-width: How wide a tab is, default is 8.

统一缩进

1
2
3
(setq tab-width 4)
(defvaralias 'c-basic-offset 'tab-width)
(defvaralias 'cperl-indent-level 'tab-width)

SmartTabs

  • https://www.emacswiki.org/emacs/SmartTabs
  • https://github.com/jcsalomon/smarttabs

  • 安装
    • 菜单栏 Options – Manage Emacs Packages 中安装 MELPA package smart-tabs-mode
  • 配置
    • to enable smart-tabs-mode automatically for C and Javascript
      1
      (smart-tabs-insinuate 'c 'javascript)
      
  • 手动开启
    • enable the minor mode with M-x smart-tabs-mode
  • 检查SmartTab支持哪些语言
    • M-x describe-variable 回车 smart-tabs-insinuate-alist 回车
  • 整个文件 retab : C-x h C-M-\

  • Adding Language Support
    • 使用 smart-tabs-add-language-support
      1
      2
      3
      (smart-tabs-add-language-support c++ c++-mode-hook
        ((c-indent-line . c-basic-offset)
         (c-indent-region . c-basic-offset)))
      

设置实例

方便显示空格、TAB、回车等字符

  • 设置显示样式
    • 默认的mapping,可通过 C-h v whitespace-display-mappings 查看
      1
      2
      3
      4
      5
      6
      (setq whitespace-display-mappings
        '((space-mark 32 [183] [46]) ; 32 SPACE 「 」, 183 U+00B7 MIDDLE DOT 「·」, 46 FULL STOP 「.」
          (space-mark 160 [164] [95])
          (newline-mark 10 [36 10]) ; 10 LINE FEED, 36 U+0024 “$”
          (tab-mark 9 [187 9] [92 9]) ; 9 TAB , 187 U+00BB “»”
        ))
      
    • 参考:https://stackoverflow.com/q/15946178/3316529 的例子
      这个样式用到的字符导致中文环境下emacs卡顿!!
      1
      2
      3
      4
      5
      6
      7
      (setq whitespace-display-mappings
        ;; all numbers are Unicode codepoint in decimal. ⁖ (insert-char 182 1)
        '(
          (space-mark 32 [183] [46]) ; 32 SPACE 「 」, 183 MIDDLE DOT 「·」, 46 FULL STOP 「.」
          (newline-mark 10 [182 10]) ; 10 LINE FEED
          (tab-mark 9 [9655 9] [92 9]) ; 9 TAB, 9655 WHITE RIGHT-POINTING TRIANGLE 「▷」
          ))
      
  • Turn off whitespace-mode highlighting
    1
    2
    ;; Remove spaces to disable highlighting and remove space-mark to disable marking spaces with the dot.
    (setq whitespace-style (quote (face spaces tabs newline space-mark tab-mark newline-mark)))
    

How to set indentation to always use space?

1
2
3
4
5
6
(progn
  ;; make indentation commands use space only (never tab character)
  (setq-default indent-tabs-mode nil)
  ;; emacs 23.1 to 26, default to t
  ;; if indent-tabs-mode is t, it means it may use tab, resulting mixed space and tab
  )

如何配置Emacs,使得输入TAB时,用空格替代

默认情况下,在Emacs中按一下TAB,就是输入TAB,如果我们想让它输入的是空格(并且可以指定按一下TAB输入几个空格),可以在.emacs中这样配置:

1
2
3
;; 按TAB输入2个空格,只对shell脚本生效!
(add-hook 'sh-mode-hook
  '(lambda () (setq sh-basic-offset 2)))

关闭:回车换行时,自动删除行末空格

White Space model

(global-whitespace-mode 1)
默认打开 white space mode

编程语言支持

PHP语法

Emacs默认是没有PHP语法高亮的,可通过加载扩展来实现。

  1. 下载Emacs扩展 http://sourceforge.net/projects/php-mode/
  2. 将压缩包中的 php-mode.el 放到你的.emacs配置文件同一目录下,重命名为 .php-mode.el。
  3. 在.emacs配置文件中,添加一句: `(load-file “~/.php-mode.el”)
  4. 再重新用Emacs打开一个PHP文件,就会发现已经有语法高亮了。

Go 语法

在菜单栏 Options – Manage Emacs Packages 中找到 go-mode 并安装

其他技巧

C-Q TAB键 或者 C-q C-i
输入 TAB 字符
M-x whitespace-mode
·显示空格,用$显示换行(当前buffer),参考 Emacs: Make Whitespaces Visible
M-x global-whitespace-mode
·显示空格,用$显示换行(所有buffer)