使Emacs选项卡的行为与vim完全相同

时间:2011-06-24 17:53:52

标签: emacs indentation

我正在学习当前的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中它不会这样做。

1 个答案:

答案 0 :(得分:6)

可以配置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)