在Xcode上用emacs编写的打开代码看起来很糟糕

时间:2016-11-01 01:56:51

标签: c++ xcode emacs indentation

这是我关于堆栈溢出的第一篇文章,所以请原谅我有任何错误。

我用Xcode学习了c ++,最近开始使用一个使用Emacs的小组。这个组有一个巨大的c ++代码,所以我做了一个CMake接口来在Xcode中生成一个项目。发生的事情是代码在Xcode中显得非常缩进。例如,emacs中的这些行:

if ( argc > 4 ) {
  std::string argument( argv[arg_index++] );
  // NOTE: file_name should NOT be "aboveCrack" or "belowCrack"                                                                                                                           
  if ( argument == "aboveCrack" ) {
    surf_to_draw = CrackMn3DGraphDX2::EAboveSurface;
  }
  else if ( argument == "belowCrack" ) {
    surf_to_draw = CrackMn3DGraphDX2::EBelowSurface;
  }
  else {
    // argument 4 is comp. crack surface output name                                                                                                                                      
    got_file_name = true;
    postCompSurface_file_name = argument;
  }
}
if ( !got_file_name && argc > 5 ) {
  got_file_name = true;
  postCompSurface_file_name = argv[arg_index++];

  if ( argc > 6 ) {
    // get comp. crack surface output style                                                                                                                                               
    postCompSurface_style = argv[arg_index++];
  }
}

在Xcode中看起来像这样:

if ( argc > 4 ) {
  std::string argument( argv[arg_index++] );
  // NOTE: file_name should NOT be "aboveCrack" or "belowCrack"
  if ( argument == "aboveCrack" ) {
surf_to_draw = CrackMn3DGraphDX2::EAboveSurface;
  }
  else if ( argument == "belowCrack" ) {
surf_to_draw = CrackMn3DGraphDX2::EBelowSurface;
  }
  else {
// argument 4 is comp. crack surface output name
got_file_name = true;
postCompSurface_file_name = argument;
  }
}
if ( !got_file_name && argc > 5 ) {
  got_file_name = true;
  postCompSurface_file_name = argv[arg_index++];

  if ( argc > 6 ) {
// get comp. crack surface output style 
postCompSurface_style = argv[arg_index++];
  }
}

无法编程。

我搜索过,显然它与Emacs中的标签有关。基于此,我找到的一个修复是在Emacs中打开每个文件并执行C-x h(标记全部),然后是M-x untabify。这会在空格中转换制表符,并且Xcode中的所有内容都很好。

这个想法存在的问题是它需要逐个更改文件,并且不会在将来再次发生这种情况。

因此,我的问题是:有没有办法在Xcode中打开Emacs缩进文件,保留缩进?

非常感谢!

Nathan Shauer

2 个答案:

答案 0 :(得分:1)

您需要在.emacs中添加的第一个设置是:(setq-default indent-tabs-mode nil)。这将确保emacs使用空格而不是制表符进行缩进。 另外,我创建了一个小功能:

(defun rag/untabify-buffer ()
  ;; get rid of all the tabs in a buffer
  (interactive)
  (untabify (point-min) (point-max))
  nil)

将此添加到before-save-hook,这样可以确保在进行更改并保存文件时,所有文件都将取消。一旦你取消了所有文件,你可以删除钩子

答案 1 :(得分:1)

没有。虽然可以使用emacs进行这些更改,甚至可以使用其他一些可以自动执行此类更改的工具,但它并不能真正解决您的问题,因为每次从版本控制中检出代码时都可能需要这样做。根据所使用的版本控制系统,进行此类格式化更改也可能导致代码看起来被修改,这将导致更大的签入并使其他有用的工具变得不那么有用,因为看起来更多的更改将比实际上改了。这可能会让其他项目成员感到沮丧。

有两种基本方法,但有一种方法取决于项目使用的版本控制解决方案。第一个解决方案是让项目就编码标准达成一致,该标准规定必须使用正常空格进行缩进或使用标签。您看到的问题主要是由于混合。 Emacs能够很好地处理这种混合格式,但其他编辑器,如Xcode并不那么聪明。

另一种方法可以很好地工作,因为它不依赖于遵循标准的每个人是配置版本控制系统将标签作为签入过程的一部分转换为空格。如何完成取决于所使用的版本控制系统。

基本上,这是一个需要在项目或版本控制级别解决的问题。每次从版本控制中对任何已修改的文件进行全新的拉取时,您所做的任何事情都只需要重复。将其修复到存储库级别,问题就会消失。

相关问题