【问题标题】:Making Emacs tabs behave exactly like vim's使 Emacs 选项卡的行为与 vim 完全相同
【发布时间】:2011-09-22 05:50:03
【问题描述】:

我目前正在学习 Emacs,并且正在尝试设置我的初始化文件。 目前它看起来像这样(在网络的某个地方找到它):

(setq indent-tabs-mode t)
(setq-default indent-tabs-mode t)
(global-set-key (kbd "TAB") 'self-insert-command)
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-indent 4)

但它的行为不像 Vim 的标签样式。

我只是希望它在使用制表符时表现得像 Vim。 这意味着不要用空格替换制表符(我认为 Emacs 默认会这样做)。

这样每个人都可以在他们喜欢的标签宽度中编辑文件。我通常使用 4 作为标签宽度。而且当我按 Backspace 时,它​​会向后移动相同的数字,这意味着如果我将 tab 设置为 4 并按 Tab,它会在按 Backspace 后返回 4 个字符。 它还应该始终使用 4 个空格作为制表符。因为有时在 emacs 中它不会那样做。

【问题讨论】:

标签: emacs indentation


【解决方案1】:

Vim 的选项卡处理是可以配置的,所以它不能很好地描述你想要做什么,但你的描述的其余部分有足够的信息,大部分情况下。

处理标签的最简单方法是永远不要使用它们。因此,如果以您喜欢的方式设置选项卡需要一些工作,请不要感到惊讶。

您已设置 Tab 键来插入制表符。这不是 Emacs 中的习惯:通常 Tab 键用于缩进当前行。您所做的对于默认值来说已经足够了,但是特定于语言的模式仍可能使 Tab 缩进。我从您的c-basic-indent 中推测您正在编写 C 代码;所以你需要告诉 C 模式你不希望 Tab 缩进。应该这样做:

(eval-after-load "cc-mode"
  '(define-key c-mode-map (kbd "TAB") 'self-insert-command))

您遇到的另一件事是,默认情况下,Backspace 键会尝试向后移动一列而不是一个字符。以下内容应使其删除一个字符:

(global-set-key (kbd "DEL") 'backward-delete-char)
(setq c-backspace-function 'backward-delete-char)

【讨论】:

  • 我使用 vim 默认设置,除了我使用 4 的制表位。现在这很好用,谢谢。
  • 设置分号后,emacs 将该行向左移动两个字符。你知道怎么关掉它吗?我的初始化文件目前看起来像这样(setq indent-tabs-mode t) (global-set-key (kbd "DEL") 'backward-delete-char) (setq c-backspace-function 'backward-delete-char) ( setq-default indent-tabs-mode t) (global-set-key (kbd "TAB") 'self-insert-command) (setq default-tab-width 4) (setq tab-width 4) (setq c-basic -indent 4) (setq backup-inhibited t) (eval-after-load "cc-mode" '(define-key c-mode-map (kbd "TAB") 'self-insert-command)) (delete-selection -mode t) (setq auto-save-default nil)
  • @rob 如果您不希望 Emacs 在您按下 ;(和一些其他字符)时自动重新缩进,请在 c-mode-map 中将它们与 (eval-after-load "cc-mode" '(define-key c-mode-map ";" nil)) 解除绑定。如果你的抱怨是 Emacs 没有缩进你想要的列数,告诉它你最喜欢的缩进样式是什么;见the C mode manual
猜你喜欢
  • 2011-09-13
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2011-11-03
  • 1970-01-01
  • 2014-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多