Как я могу добавить интеллектуальное выравнивание назначений и хэшей в indent-region в emacs? - PullRequest
2 голосов
/ 28 марта 2011

Когда у меня есть код:

a = 1
foo = 2

и я хочу, чтобы он выглядел следующим образом:

a   = 1
foo = 2

Я могу использовать функцию выравнивания по отношению, определенную здесь:

Горячая клавиша Emacs для выравнивания знаков равенства

путем выбора области и запуска функции.Я также могу изменить функцию для работы с хэшами, изменив '=' в определении функции на '=>' и переведя:

bar = { :a => 1,
 :foo => 2 }

в:

bar = { :a   => 1,
        :foo => 2 }

Я хочу, чтобы это выравнивание было выполнено для всего моего кода, когда я выбираю весь буфер и запускаю indent-region.Но я хочу, чтобы это было сделано разумно - не выравнивая каждый «=» в буфере по правому краю «=», а вместо этого делая это для блоков присваивания и отдельных хеш-литералов.

РЕДАКТИРОВАТЬ: Чтобы прояснить эту последнюю часть, скажем, у меня есть следующий буфер:

a = 1
foo = 2

some_other_code

def fn
  bar = { :a => 1,
   :foo => 2 }
end

Я хочу сделать 'Cx h' (выбрать весь буфер),'MC- \' (indent-region) и выглядело это так:

a   = 1
foo = 2

some_other_code

def fn
  bar = { :a   => 1,
          :foo => 2 }
end

Ответы [ 2 ]

8 голосов
/ 28 марта 2011

Попробуйте M-x align-regexp =.И то же самое для других.

1 голос
/ 28 марта 2011

align.el дает функцию выравнивания для этого:

в .emacs add

     (push (ruby-hash-string
             (regexp . "\\(\\s-*\\)\\(\"[^\"]*\"\\|:[a-zA-Z]*\\)\\(\\s-*\\)=>\\(\\s-*\\)")
             (group . (1 3 4))
             (repeat . t)
             (modes '(ruby-mode)))
        align-rules-list)

тогда M-x align выровняет хеши в режиме ruby. Вам нужно добавить другую группу для других вещей, которые вы хотите выровнять.

...