Estou usando, spacemacs
mas presumivelmente é necessário o conhecimento do emacs aqui.
Eu tenho um arquivo JSON com uma única linha longa, digamos este JSON em json.org/example:
{"menu": {"id": "file", "value": "File", "popup": {"menuitem": [{"value": "New", "onclick": "CreateNewDoc()"}, {"value": "Open", "onclick": "OpenDoc()"}, {"value": "Close", "onclick": "CloseDoc()"}]}}}
Gostaria que o emacs reinscreva isso, o que significa para mim não alterar o caractere mais à esquerda da linha para o nível de indentação adequado, mas quebrar a linha em várias linhas.
Se eu usar spacemacs/indent-region-or-buffer
( SPC j =
), o texto não será alterado.
Como eu poderia pedir ao emacs para realmente romper essa longa fila e se reintegrar para obter algo assim:
{"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
Não estou interessado em uma resposta específica ao JSON, por exemplo, acredito que o intelliJ faz isso para qualquer idioma compatível (java, json ...). Eu acho que é viável para qualquer idioma emacs tem um modo principal para, ou digamos os mais populares.
EDIT Descobri M-x json-reformat-region
que é spacemacs
fornecido com e funciona, mas sim, eu gostaria disso para qualquer idioma e sempre com o mesmo atalho, com base no modo principal ...
EDIT2 Ok, então minha conclusão é que ele é implementado para várias linguagens, pelo menos JSON e lisp, provavelmente para outras, e seria fácil ainda mais (XML / XHTML, go que possui go-fmt e também usa clang). No entanto, não há nome de função genérico que o faria para todos os idiomas. Há espaço aqui para implementá-lo em spacemacs
camadas para as várias linguagens ... Não encontrei uma implementação X / HTML, o que me surpreende um pouco.
fonte
web-beautiful.el
. Este é o melhor que encontrei, mas depende do node.js.Respostas:
Parece que você precisa mais da
fill-region
função do que do recuo.M-x fill-region
.M-x indent-region
.Porém, isso não inserirá novas linhas nos pontos exatos, como mostrado no seu exemplo. Simplesmente ajustará a linha nas colunas de preenchimento.
fonte
{
,{"menu":
mas você tem uma depois{
de{"id":
. Não conheço JSON e, portanto, sua resposta formatada provavelmente tem um padrão que me falta. Mas se você puder atualizar sua pergunta com um conjunto de regras para inserir essa nova linha, alguém poderá encontrar a resposta que deseja.gofmt
, mas para qualquer idioma) - gofmt.comjson.el
pacote fornecejson-pretty-print-buffer
. Isto é o que produz para o seu exemplo:Parece bastante decente para mim.
fonte
json-pretty-print
ejson-pretty-print-buffer
(especificações semelhantes àsjson-reformat-region
) estavam incluídas.". Mas eu pensei que o emacs poderia ter uma função que funcionaria para todos os idiomas (específicos para cada idioma popular de modo principal), o que, como se vê, não funciona.De acordo com a dica aqui , você pode usar o comando externo para formatar uma região no seu arquivo Json:
Você pode estendê-lo facilmente para formatar todo o buffer:
O Emacs não possui ferramenta de formatação para linguagens de programação ( exceto Lisp ), apenas comandos de indentação.
fonte
M-x json-reformat-region
que éspacemacs
fornecido com e funciona, mas sim, eu gostaria disso para qualquer idioma e sempre com o mesmo atalho, com base no modo principal ... Parece que isso não é suportado, muito ruim ...clang-format
.Para este cenário específico,
json-pretty-print
irá definir a massa destacada de json.fonte
BTW, para os principais modos de usar o SMIE como seu mecanismo de indentação, há uma parte do que você precisa para isso na forma de um
auto-fill-mode
suporte. Pensofill-paragraph
oufill-region
não vou fazer um bom trabalho, mas se você colocar seu código em uma única linha, vá para o final dessa linha e façaM-: (smie-auto-fill)
-o com bons resultados (provavelmente não perfeito por um longo período).fonte