C#Emacs模式问题 - 缩进和构建

时间:2010-10-17 18:25:11

标签: c# emacs mono

我安装了emacs C# mode

.emacs文件如下

(require 'csharp-mode)
(setq auto-mode-alist
      (append '(("\\.cs$" . csharp-mode)) auto-mode-alist))
(defun my-csharp-mode-fn ()
  "function that runs when csharp-mode is initialized for a buffer."
  (setq default-tab-width 4)
)
(add-hook  'csharp-mode-hook 'my-csharp-mode-fn t)

它工作得很好,但我看到块({..})与我的意图一致。我的意思是,在某些情况下,我有这个。

private static int StringCompare(string x, string y)
{
  int result;
  if (x == null)
    {

    }
}

当我期待这个

private static int StringCompare(string x, string y)
{
  int result;
  if (x == null)
  {

  }
}

与此同时,我总是有2个代码缩进,但我希望它是4。

我的问题是

  • 如何在C#emacs模式下控制缩进?
  • 如何控制'{'和'}'与之前的代码具有相同的缩进。
  • C#模式是否提供编译以使用命令在编辑器中生成exe / dll文件?

我在Mac OS X / mono上使用emacs C#模式。

ADDED

我发现C#模式也可以使用C模式,所以M-x c-set风格的作品,awk风格对我来说很有用。问题是每当我使用c模式时我都必须打开awk模式。有没有办法用c模式自动运行“M-x c-set-style和awk”模式?

3 个答案:

答案 0 :(得分:10)

将这些行添加到my-csharp-mode-fn

; Set indentation level to 4 spaces (instead of 2)
(setq c-basic-offset 4)
; Set the extra indentation before a substatement (e.g. the opening brace in
; the consequent block of an if statement) to 0 (instead of '+)
(c-set-offset 'substatement-open 0)

或者,您可以将它们添加到公共C模式钩子中,该钩子运行所有与C模式相关的模式:C,C ++,Objective-C,Java,C#等:

(defun my-c-mode-common-hook ()
  (setq c-basic-offset 4)
  (c-set-offset 'substatement-open 0))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

有关自定义缩进的详细信息,请参阅CC mode documentation

答案 1 :(得分:1)

对于缩进,你想要 (setq c-basic-offset 4) 在你的钩子上面。

答案 2 :(得分:0)

@Adam Rosenfeld在此提供的advice用于对.emacs文件进行更改也可以通过Emacs提供的简易自定义界面实现。

c-basic-offset设为4

M-x customize-option RET c-basic-offset RET

substatement-open设为0

M-x customize-option RET c-offsets-alist RET

Emacs提供的简易自定义界面会将这些设置添加到您的.emacs文件中。

请注意,这些更改将影响所有与C模式相关的模式。因此,如果这不是您想要的,请参阅Adam的建议,将适当的添加内容添加到csharp-mode-hook