我在Emacs的cc-mode
中工作,我发现缩进非常非常恼人。Emacs缩进功能
作为一名VIM用户,我非常习惯更长的缩进,以及尽可能多地按下Tab键以实现标签的奢华。
在Emacs中,我的TAB映射到goto-line
。首先,哪个函数是为了缩进当前行而设计的(或者是什么点)?由于您需要突出显示该区域,因此很烦人。
二,什么是修复缩进的最佳方法?
谢谢
我在Emacs的cc-mode
中工作,我发现缩进非常非常恼人。Emacs缩进功能
作为一名VIM用户,我非常习惯更长的缩进,以及尽可能多地按下Tab键以实现标签的奢华。
在Emacs中,我的TAB映射到goto-line
。首先,哪个函数是为了缩进当前行而设计的(或者是什么点)?由于您需要突出显示该区域,因此很烦人。
二,什么是修复缩进的最佳方法?
谢谢
你可以看到的是什么样的黏合目前使用的与M-x describe-variable RET c-indentation-style
(但是作为文档状态,请不要直接设置此变量,而不是使用M-x c-set-style
)。
变量c-basic-offset
是什么控制互联在cc-mode
其默认为set-from-style
这意味着互联将从什么C风格的你与M-x set-c-style
设置可以让你从一组built-in styles选择继承(见下文)或者你可以create your own style。您可以看到如何使用M-x describe-variable RET c-style-alist
定义样式,然后您可以将其中一个用作M-x c-add-style
的模板。
UPDATE:
也有人建议使用标签钥匙插入\t
制表符,但请不要制表符力插入!作为StackOverflow的创建者之一说"only a moron would use tabs to format their code"。现在这有些苛刻,但值得注意的是,即使两个最大的对手Google和Microsoft也同意这一点(即使他们默认推荐不同数量的空间)。
仅使用空间,并且每次缩进2个空格。
制表符(\ 0×09)不应该在代码中使用。所有缩进 应使用4个空格字符完成。
另外,emacswiki在Tabs are Evil上有一节。
答案是:(setq-default c-basic-offset <value>)
我也喜欢emacs,但无法忍受它试图为我管理标签。所以,我用我的.emacs
如下:
(global-set-key "\r" 'newline-and-indent)
(global-set-key "\C-m" 'newline-and-indent)
(global-set-key "\C-j" 'newline)
(defalias 'backward-delete-char-untabify 'backward-delete-char)
(defun indent-according-to-mode() (interactive)
(save-excursion
(goto-char (- (line-beginning-position) 1))
(search-backward-regexp "^[ ]*")
)
(if (eq (point) (line-beginning-position))
(insert (match-string 0))
(save-excursion
(goto-char (line-beginning-position))
(insert (match-string 0))
)
)
)
(defun newline-and-indent() (interactive) (newline) (indent-according-to-mode))
(defun lisp-indent-line() (interactive) (insert " "))
; Is there a way to fix this without a hook?
(defun my-c-hook()
(setq c-electric-flag nil)
(defun c-indent-command (n) (interactive "*") (insert " ")))
(add-hook 'c-mode-common-hook 'my-c-hook)
(defun my-perl-hook()
(defun perl-electric-terminator() (interactive "*") (self-insert-command 1))
(defun perl-indent-command() (interactive "*") (insert " ")))
(add-hook 'perl-mode-hook 'my-perl-hook)
(defun indent-for-tab-command() (interactive "*") (insert " "))
产生的行为:TAB键纯粹是要插入一个制表符,按进入副本从当前行的确切前导空格(空格或制表符)到新行,并且这些模式下的所有特殊凹痕行为都被禁用。如果您使用其他语言,您可能需要扩展/修改上述内容以添加钩子。
注意:在上面,大多数引号中的空格实际上是文字标签。如果它不能通过SO并复制/粘贴,你可能需要自己手动修复它。
这听起来不错!但在使用它之前,我不明白你的最后一张纸条。在我真正使用它之前,请您解释一下吗?此外,这是否保持'setq-default c-basic-offset'调用的大小为4的缩进?大括号怎么样?这是否处理他们? – darksky 2012-03-23 01:47:31
此代码禁用* all *自动缩进,但复制前一行的前导空白。您必须按下标签或空格键才能获得所需的缩进。我的注意事项是,不是使用'\ t'或任何制表符的转义符,我在上面的代码中编写了文字标签(在引号内),我不确定它们是否能够在复制和粘贴后继续存在。 .. – 2012-03-23 02:39:18
@R ..请不要强制插入制表符!正如StackOverflow的创建者之一所说[“只有白痴才会使用制表符来格式化他们的代码”](http://www.codinghorror.com/blog/2009/04/death-to-the-space-infidels.html )。现在这有点苛刻,但值得注意的是,即使是两个最大的竞争对手[Google](http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Spaces_vs._Tabs)和[Microsoft] (http://blogs.msdn.com/b/brada/archive/2005/01/26/361363.aspx),就这一点达成一致(即使他们默认推荐不同数量的空格)。 – aculich 2012-03-23 14:46:20
正常情况下TAB被绑定到缩进当前行的c-indent-line-or-region;它可以在你陈述的时候多次命中(只有第一个有效)。您是否使用重新绑定TAB键的init文件?请注意,c-c,c-q缩进了当前的功能。另外alt-x,describe-bindings显示了当前的模式键绑定。 – 2012-03-23 02:00:46