Há momentos em que estou editando arquivos (manifestos do Puppet, por exemplo) em que desejo alinhar o conteúdo do buffer rapidamente. Por exemplo, eu sei que posso usar align-regexp
ou align
alinhar códigos como este, desde que eu tenha selecionado:
# M-x align-regexp "=>" will line everything up nicely
file { "/etc/foo":
ensure => present,
mode => "0666",
source => "puppet:///modules/example/foo",
}
Mas o que eu realmente quero é que isso aconteça rapidamente - sem ter que selecionar uma região ou todo o buffer. Existe um pacote ou modo que fará isso ou algo que precisaria ser incorporado ao modo em que estou interessado?
Edit: perguntei sobre o Puppet e o CFEngine, já que é o que eu codifico na maioria dos dias atualmente e tenho uma forte preferência pelo texto alinhado. No entanto, também fiquei curioso (e não expressei isso muito bem) em saber se o alinhamento rápido é um recurso comum nos modos Emacs (principalmente nos modos de linguagens de programação) ou se a maioria das pessoas se alinha ao salvar ou em algum momento outro ponto
indent-region
poralign-to-equals
e defina esta função como(defun align-to-equals (begin end) (interactive "r") (align-regexp begin end "\\(\\s-*\\)=" 1 1 nil))
; eemacs-lisp-mode-hook
compuppet-mode-hook
.Respostas:
Se você deseja marcar uma região para alinhamento automático, provavelmente não é muito difícil fazer algo como:
Mas se você quiser que seja totalmente automático, precisará encontrar uma maneira de caracterizar quais regiões deseja alinhar automaticamente (e com qual regexp), o que é mais difícil. Eu acho que você poderia fornecer alguns regexps e, em seguida, varrer o buffer em busca de linhas consecutivas que correspondam a um desses regexps.
fonte
my-auto-align
é usada para definir essas sobreposições (marque as regiões que você deseja alinhar). A razão (eu acho) que Stefan está passando por todo esse problema é que (ao contrário do recuo), se você apenas tentar alinhar todo o buffer, obterá resultados indesejados, então precisará alinhar as peças de cada vez.Modo Puppet fornece
puppet-align-block
. Você pode organizar para que essa função seja chamada automaticamente, por exemplo, adicionando-apost-command-hook
localmente (não testada):Observe, porém, que há uma boa razão para não fazer isso. Não é particularmente inteligente e substituirá qualquer alinhamento manual que você possa fazer em qualquer lugar, o que será particularmente prejudicial se o alinhamento automático não funcionar para um código Puppet mais complicado.
Portanto, falando como mantenedor do Puppet Mode, eu recomendo isso e não o ajudaremos nem aceitaremos relatórios de erros, se você estiver usando esse código.
Além disso, para blocos de recursos grandes, pode ser lento, então você provavelmente deseja usar um timer inativo em vez de
post-command-hook
diretamente.fonte