我在Emacs的 cc-mode 工作,我发现缩进非常烦人 .
cc-mode
作为一个VIM用户,我几乎习惯了更长的缩进,以及尽可能多地按Tab键选项卡 .
在Emacs中,我的TAB映射到 goto-line . 首先,哪个函数设计用于缩进当前行(或者点之后的内容)? indent-region 很烦人,因为您需要突出显示该区域 .
goto-line
indent-region
第二,修复缩进的最佳方法是什么?
谢谢,
您可以看到 M-x describe-variable RET c-indentation-style 当前正在使用哪种Tab键(但正如文档所述,不要直接设置此变量,而是使用 M-x c-set-style ) .
M-x describe-variable RET c-indentation-style
M-x c-set-style
变量c-basic-offset控制cc-mode中的标签,其默认值为 set-from-style ,这意味着标签将继承自您使用 M-x set-c-style 设置的C样式,这将允许您从一组built-in styles中选择(见下文),或者您可以create your own style . 您可以看到如何使用 M-x describe-variable RET c-style-alist 定义样式,然后您可以将其中一个用作 M-x c-add-style 的模板 .
set-from-style
M-x set-c-style
M-x describe-variable RET c-style-alist
M-x c-add-style
gnu - 自由软件基金会为GNU程序中的C代码祝福的编码风格 .
k&r - C代码的经典Kernighan和Ritchie风格 .
bsd - 在埃里克奥尔曼之后也被称为“奥尔曼风格” .
whitesmith - 通过早期商业C编译器Whitesmiths C附带的示例推广 .
stroustrup - C代码的经典Stroustrup样式 .
ellemtel - 由C编程,规则和建议书定义的流行C编码标准,Erik Nyquist和Mats Henricson,Ellemtel ^ 1 .
linux - Linux(内核)的C编码标准 .
python - Python扩展模块的C编码标准^ 2 .
java - 编辑Java代码的样式 . 请注意,当您输入java-mode时,c-default-style的默认值将安装此样式 .
awk - 用于编辑AWK代码的样式 . 请注意,当您输入awk-mode时,c-default-style的默认值将安装此样式 .
user - 这是您创建的特殊样式 . 它由所有样式变量的出厂默认值组成,这些变量由您使用Customization界面进行的自定义修改,或者通过在.emacs文件的顶层编写setqs和c-set-offsets来修改(请参阅Config Basics) . 样式系统在初始化时创建此样式,之后不会对其进行修改 .
UPDATE:
其他人建议使用tab键插入 \t 制表符,但请 don't 强制插入制表符!正如StackOverflow的创建者之一所说"only a moron would use tabs to format their code" . 现在's a bit harsh, but it'值得注意的是,即使是两个最大的竞争对手Google和Microsoft也同意这一点(即使他们默认建议使用不同数量的空格) .
\t
Google says:
仅使用空格,并一次缩进2个空格 .
Microsoft says:
不应在代码中使用制表符(\ 0x09) . 所有缩进都应该用4个空格字符完成 .
此外,emacswiki有一个关于Tabs are Evil的部分 .
So, go forth and untabify!
答案是: (setq-default c-basic-offset <value>)
(setq-default c-basic-offset <value>)
我也喜欢emacs,但无法忍受它为我管理标签的尝试 . 所以我在 .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键纯粹是要插入的制表符,按enter键将当前行的确切前导空格(空格或制表符)复制到新行,并禁用这些模式中的所有特殊缩进行为 . 如果您使用其他语言,则可能必须扩展/调整上述内容以为它们添加挂钩 .
注意:在上面,引号中的大多数空格实际上是文字制表符 . 如果它没有通过SO并正确复制/粘贴,您可能必须自己手动修复它 .
3 回答
您可以看到
M-x describe-variable RET c-indentation-style
当前正在使用哪种Tab键(但正如文档所述,不要直接设置此变量,而是使用M-x c-set-style
) .变量c-basic-offset控制cc-mode中的标签,其默认值为
set-from-style
,这意味着标签将继承自您使用M-x set-c-style
设置的C样式,这将允许您从一组built-in styles中选择(见下文),或者您可以create your own style . 您可以看到如何使用M-x describe-variable RET c-style-alist
定义样式,然后您可以将其中一个用作M-x c-add-style
的模板 .gnu - 自由软件基金会为GNU程序中的C代码祝福的编码风格 .
k&r - C代码的经典Kernighan和Ritchie风格 .
bsd - 在埃里克奥尔曼之后也被称为“奥尔曼风格” .
whitesmith - 通过早期商业C编译器Whitesmiths C附带的示例推广 .
stroustrup - C代码的经典Stroustrup样式 .
ellemtel - 由C编程,规则和建议书定义的流行C编码标准,Erik Nyquist和Mats Henricson,Ellemtel ^ 1 .
linux - Linux(内核)的C编码标准 .
python - Python扩展模块的C编码标准^ 2 .
java - 编辑Java代码的样式 . 请注意,当您输入java-mode时,c-default-style的默认值将安装此样式 .
awk - 用于编辑AWK代码的样式 . 请注意,当您输入awk-mode时,c-default-style的默认值将安装此样式 .
user - 这是您创建的特殊样式 . 它由所有样式变量的出厂默认值组成,这些变量由您使用Customization界面进行的自定义修改,或者通过在.emacs文件的顶层编写setqs和c-set-offsets来修改(请参阅Config Basics) . 样式系统在初始化时创建此样式,之后不会对其进行修改 .
UPDATE:
其他人建议使用tab键插入
\t
制表符,但请 don't 强制插入制表符!正如StackOverflow的创建者之一所说"only a moron would use tabs to format their code" . 现在's a bit harsh, but it'值得注意的是,即使是两个最大的竞争对手Google和Microsoft也同意这一点(即使他们默认建议使用不同数量的空格) .Google says:
Microsoft says:
此外,emacswiki有一个关于Tabs are Evil的部分 .
So, go forth and untabify!
答案是:
(setq-default c-basic-offset <value>)
我也喜欢emacs,但无法忍受它为我管理标签的尝试 . 所以我在
.emacs
中使用以下内容:结果行为:tab键纯粹是要插入的制表符,按enter键将当前行的确切前导空格(空格或制表符)复制到新行,并禁用这些模式中的所有特殊缩进行为 . 如果您使用其他语言,则可能必须扩展/调整上述内容以为它们添加挂钩 .
注意:在上面,引号中的大多数空格实际上是文字制表符 . 如果它没有通过SO并正确复制/粘贴,您可能必须自己手动修复它 .