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

rob*_*rob 6 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)
Run Code Online (Sandbox Code Playgroud)

但它的行为与Vim的标签风格不同.

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

这样每个人都可以按首选标签宽度编辑文件.我通常使用4作为标签宽度.当我按Backspace时,它将向后移动相同的数字,这意味着如果我将tab设置为4并按Tab键,那么在按下Backspace后它将返回4个字符.它也应该总是使用4个空格作为标签.因为有时在emacs中它不会这样做.

Gil*_*il' 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))
Run Code Online (Sandbox Code Playgroud)

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

(global-set-key (kbd "DEL") 'backward-delete-char)
(setq c-backspace-function 'backward-delete-char)
Run Code Online (Sandbox Code Playgroud)