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

使Emacs选项卡的行为与vim'完全相同;s,emacs,indentation,Emacs,Indentation,我目前正在学习Emacs,我正在尝试设置我的初始化文件。 目前看起来是这样的(在web上的某个地方找到): 但它的行为不像Vim的标签样式 我只是想让它在使用标签时表现得像Vim一样。 这意味着不使用空格替换制表符(我认为Emacs默认情况下会这样做) 这样每个人都可以按自己喜欢的选项卡宽度编辑文件。我通常使用4作为制表符宽度。当我按下Backspace时,它会向后移动相同的数字,这意味着如果我将tab设置为4,然后我按下tab,它会在我按下Backspace后向后移动4个字符。 它还应始终使用

我目前正在学习Emacs,我正在尝试设置我的初始化文件。 目前看起来是这样的(在web上的某个地方找到):

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

我只是想让它在使用标签时表现得像Vim一样。 这意味着不使用空格替换制表符(我认为Emacs默认情况下会这样做)

这样每个人都可以按自己喜欢的选项卡宽度编辑文件。我通常使用4作为制表符宽度。当我按下Backspace时,它会向后移动相同的数字,这意味着如果我将tab设置为4,然后我按下tab,它会在我按下Backspace后向后移动4个字符。
它还应始终使用4个空格作为制表符。因为有时候在emacs中它不这样做。

Vim的选项卡处理可以配置,所以它不是一个很好的描述您想要做什么,但是您的描述的其余部分大部分都有足够的信息

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

您已设置Tab键以插入制表符。这不是Emacs中的自定义:通常使用Tab键缩进当前行。默认情况下,您所做的已经足够了,但是特定于语言的模式可能仍然会使制表符缩进。从您包含的
c-basic-indent
中,我推测您正在使用c代码;所以您需要告诉C模式,您不希望制表符缩进。这应该做到:

(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)

Emacs中的缩进是一个有点复杂的主题,但我认为花一些时间来理解其中的一些细节是值得的。有关更多信息,请参阅。我使用vim默认设置,但我使用的tabstop为4。现在这很好,谢谢。设置分号后,emacs将行向左移动两个字符。你知道怎么关掉吗?我的初始文件当前看起来是这样的(setq缩进制表符模式t)(全局设置键(kbd“DEL”)'向后删除字符)(setq c-backspace-function'向后删除字符)(setq默认缩进制表符模式t)(全局设置键(kbd“TAB”)'自插入命令)(setq默认制表符宽度4)(setq制表符宽度4)(setq c-basic-INDECT 4)(setq backup禁止使用)(加载“抄送模式”后求值(定义键c-mode-map(kbd“TAB”)“自插入命令”)(删除选择模式t)(setq自动保存默认值为零)@rob如果您不想让Emacs在按
(和一些其他字符)时自动重新插入,请使用
c-mode-map
中解除绑定(加载“抄送模式”后求值)(定义键c-mode-map“;“nil”)
。如果您抱怨Emacs没有按您想要的列数缩进,请告诉它您最喜欢的缩进样式;请参阅。
(global-set-key (kbd "DEL") 'backward-delete-char)
(setq c-backspace-function 'backward-delete-char)