开发工具 受不了 Emacs 的缩进了,求指点

xjz19901211 · 2013年12月11日 · 最后由 xjz19901211 回复于 2013年12月13日 · 7591 次阅读

缩进格式如下,没等宽有点变形。。:

a = if b
       2
     else
       3
     end

我喜欢的是:

a = if b
  2
else
  3
end

求解决,谢谢

还有像一些情况

a = my_method(my_method2(my_method3({
                                     # ...
                                   })))

本来就是因为太长了想换行,但他直接给我缩进成下一行的同一位置,我郁闷了。。

虽然我是 Vim 党,但我不相信 Emacs 不能调整这个,楼主好好看一下文档吧。

玩 emacs 的都是 lisp 大牛

https://github.com/zenspider/enhanced-ruby-mode 这个缩进比 ruby-mode 好很多,不过不稳定,比较慢,有时候会假死。ruby-mode 可以调整的参数比较少,调整一块又会影响到另外的地方。

@xjz19901211

end 和 else 不和 if 对齐?? 审美是不是有点?

感觉 lz 是想让它不缩进?顶格写,就行,不要敲 TAB。

其实 Emacs 对 if 的缩进是 ruby style guide 里推荐的方式,觉得太长了可以 if 之前换行

a =
  if foo
    1
  else
    2
  end

@zealinux 上面的例子我喜欢与 if 开头的那一句对齐。。 多层的时候肯定要打 tab,一敲就自动缩进了。。

@doitian 这个换行不太喜欢。。

@nightire 这个自动缩进真不知道怎么改,google 找了半天。。。。 实现受不了了,又换回用 sublime text 写了。。

@doitian 不稳定和卡的就算了。。。

@doitian

result = if some_cond
           calc_something
         else
           calc_something_else
         end

这样虽然看着能明显的知道 if 的开始结束,不过我感觉一点也不美观,左右不平衡,受不了。。

if some_cond
  result = calc_something
else
  result = calc_something_else
end

xixi

@xjz19901211 语义上同一个块关键词是对齐的。 因为这样看代码非常容易。 我给你期望的都成什么样子了。

假如这个 if 块比较大,阅读的人更不容易理解。

#7 楼 @doitian 换行 +1, 还有

a =\
  case
  when
  ...
  end

vim 和 emacs 都能完美自动缩进

呃,难道是我的变态审美观整出的情况。。。

@zealinux 我认为这情况还好,因为 if 块中的都有缩进,一眼就可以看到 else 与 end 了

@luikore 就没人和我一样喜欢从块起始行首字母对齐的样式么。。

习惯问题而已,不要纠结。何况 Emacs 这种缩进都是 ruby-style-guide 里推荐的。

好吧,我试着改变我自己的代码风格。。。。

#15 楼 @xjz19901211 是挺好看的,但问题是缩进太多不好修改,而且编辑器很难计算。加个换行符也还是块起始行首字母对齐啊。

例如

x = if foo
      bar
    end

如果以后修改把 x 变成 xx, 那么就要改 3 行代码 (很多人没有对齐强迫症,下面两行还不给你改,抓狂不?), 用换新行的样式就只用改 1 行。

#1 楼 @xjz19901211 第二个问题:

(require 'ruby-mode)
(setq ruby-deep-indent-paren nil)

@luikore 恩确实,我一点也不喜欢下面的样子,看着实在受不了。。。

x = if a
      1
    else
      2
    end

@toctan 谢谢,不过,你代码的结构和我写的不是一样的。。 那两句我试过了,没用。。

难道不是上面的比较科学么…

@gaelookair 一是不符合我的审美观,二是如 18 楼 所说的个性了 x 变量长度后,后台的代码结构都要改变

准备再拿起 vim 去试用一下。。。。

#22 楼 @xjz19901211 reindent 下…可能只能这样了

#20 楼 @xjz19901211 我按照你的代码结构改了一下,你想要的效果是下面这张图么?

如果是,就不可能没用,你把你的代码打开,在任意一行输入

(setq ruby-deep-indent-paren nil)

把鼠标移到这行行尾,然后M-x eval-last-sexp,再选中代码 tab 或者重新 indent buffer 就好了。

或者你直接把这两行代码加到 init.el 或者 .emacs 里面,然后退出重启 Emacs, 再打开这个文件,重新 indent 就好了。

@toctan 谢谢,这个效果比以前的好多了

其实我喜欢的是从什么地方开始,就从什么地方结束,在这个前提下顺便节省一下空间,如

a = if cond
  # ..
else
  # ..
end

每一个子块只相对上一语句的缩进增加一个缩进,又如

a = my_method(my_method2(
  :str => 's'
))

# 而不喜欢下面的,感觉占用空间太浪费,又不能一眼让我看到调用参数
a = my_method(
  my_method2(
    :str => 's'
  )
)

我喜欢的结构

def method(a)
  b = case a
  when
    # ..
  else
    # ..
  end

  [b, 123]
end

一直都没看过语法规范什么的,都是按自己看着顺眼,对我来说又容易阅读的前提下,加上自己的强迫症,才到了如今只觉得我这格式的顺眼的地步。。

所以现在看到想 python, coffeescript 这些有开始没结束的语句,受不了了。。

目前看来我只能用 vim, sublime text 这类手动缩进的编辑器,或是哪天在 emacs 里写一个自己的缩进模式出来。。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号