Existe alguma maneira de converter nomes com camelo para usar sublinhados no emacs?


8

Por exemplo, eu quero converter "CamelCasedName" em "camel_cased_name". Existe uma maneira de fazer isso no emacs?


4
A resposta curta a qualquer pergunta do formulário "Existe alguma maneira de _____ no emacs?" é sempre "SIM"
Brian Postow 09/04/10

Respostas:


4

Esse pequeno pedaço de código desta página , com uma função de invólucro e um sublinhado substituindo o hífen por um sublinhado, poderia facilmente ser transformado em um comando para fazer isso. (Verifique se trata dos limites máximos adequados a você):

Exemplo de código EmacsLisp para des-CamelCase uma string (de http://www.friendsnippets.com/snippet/101/ ):

(defun un-camelcase-string (s &optional sep start)
  "Convert CamelCase string S to lower case with word separator SEP.
Default for SEP is a hyphen \"-\".

If third argument START is non-nil, convert words after that
index in STRING."
  (let ((case-fold-search nil))
    (while (string-match "[A-Z]" s (or start 1))
      (setq s (replace-match (concat (or sep "-") 
                                             (downcase (match-string 0 s))) 
                                     t nil s)))
    (downcase s)))



2

Apenas para fins de exibição, você pode usar este:

M-x glasses-mode

Se você quer um script que realmente converta o texto, eu imagino que você teria que escrever um elisp. Essa pergunta é melhor feita no estouro de pilha.


2

Consegui fazer isso rapidamente em um arquivo inteiro com apenas uma consulta para substituir o regexp .

O padrão de pesquisa é \([a-z]+\)\([A-Z]\)\([a-z]+\)e a substituição é \1_\,(downcase \2)\3.

O padrão de substituição usa elisp diretamente no padrão. Isso requer o Emacs 22 ou posterior.

No estilo de documentação do emacs:

M-C-% \([a-z]+\)\([A-Z]\)\([a-z]+\) RET \1_\,(downcase \2)\3
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.