Como substituir um personagem por uma nova linha no Emacs?

285

Estou tentando substituir um personagem - digamos ;- por uma nova linha usando replace-stringe / ou replace-regexpno Emacs.

Eu tentei os seguintes comandos:

  • M-x replace-string RET ; RET \n

    Isso irá substituir ;com 2 personagens: \n.

  • M-x replace-regex RET ; RET \n

    Isso resulta no seguinte erro (mostrado no minibuffer):

    Uso inválido de `\ 'no texto de substituição.

O que há de errado em usar replace-stringpara esta tarefa? Existe alguma outra maneira de fazer isso?

Obrigado.

Lei
fonte

Respostas:

427

M-x replace-string RET ; RET C-q C-j.

  • C-qpara quoted-insert,

  • C-j é uma nova linha.

Felicidades!

Jonathan Arkell
fonte
3
Cq é realmente o quote-insertque cita o próximo caractere.
5309 Joe Casadonte
2
Eu acredito que é realmente "citado" em vez de "citação", como em "citado-inserção". Pelo menos é assim na versão 22.1.
22710 Bryan Oakley
8
C-jé um 0x0acódigo de controle literal , versus o Retqual é a chave ao lado de sua cotação e a envia 0x0d. en.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell
2
Nota para usuários do vim, usando C-jno emacs , enquanto C-mno vim .
Alpha TAN
2
@ JonathanArkell Essa é uma descrição de como funciona, mas não o porquê . Dentro do editor, Ret produz 0x0a, então por que deveria produzir 0x0d em inserção entre aspas? Isso não faz sentido. (? Só porque o código de teclado interno é 0X0D por razões históricas Usamos chave mapeia todo o lugar, por que não aqui, onde faz todo o sentido?)
vog
74

Encontrei quatro maneiras de colocar uma nova linha no minibuffer.

  1. C-o

  2. C-q C-j

  3. C-q 12 (12 é o valor octal da nova linha)

  4. C-x opara a janela principal, mate uma nova linha com e C-k, em seguida, C-x ovolte ao minibuffer, puxe-a comC-y

slipmthgoose
fonte
10
+1 por mencionar C-o! Um toque de tecla a menos em comparação com C-q C-j. Não tinha pensado em usá-lo antes.
precisa saber é o seguinte
Obrigado pela versão 4! Útil se você tiver recuperação de Co e Cq.
Joachim W
Muito obrigado. Você pode explicar por que o Co funciona e o Cq Cj não?
Christian Madsen
C-onão move o ponto depois de inserir a nova linha no minibuffer, portanto, você ainda precisará pressionar a tecla de seta para a direita se quiser inserir algo após a nova linha na sequência de substituição.
Robin Green
Na minha versão do Emacs 25.2.2, C-odigite uma nova linha na janela principal ao usar a pesquisa, enquanto C-q C-jdigitará a nova linha no minibuffer. C-ofunciona com consulta - substitua embora.
TC Proctor
25

Não esqueça que você sempre pode recortar e colar no minibuffer.

Assim, você pode simplesmente copiar um caractere de nova linha (ou qualquer string) do seu buffer e puxá-lo quando for solicitado o texto de substituição.


fonte
2
É realmente uma boa ideia para os personagens que eu não conheço a chave.
Lei
Ahah! tão simples !
Jérémy Pouyet
8

Mais explicitamente:

Para substituir o caractere de ponto e vírgula (;) por uma nova linha, siga estas etapas exatas.

  1. localize o cursor no canto superior esquerdo do buffer que contém o texto que você deseja alterar
  2. Digite mx replace-string e pressione RETURN
  3. o mini-buffer exibirá algo assim: Substitua string (padrão ^ ->):
  4. Digite o caractere que deseja substituir. Nesse caso, ; e pressione RETURN
  5. o mini-buffer exibirá algo como isto: string; com:
  6. Agora execute Cq Cj
  7. Todas as instâncias de ponto e vírgula serão substituídas por uma nova linha (do local do cursor até o final do buffer será exibido)

Um pouco mais do que a explicação original diz.

afc
fonte
2

Mudar para o modo de texto

M-x text-mode

Destaque o bloco para recuar

Recuar

C+M \

Volte para qualquer modo ..

enkdr
fonte
0

inline just: C-M-S-%(se as chaves de ligação ainda estiverem padrão) que replace-string^J

Aiad Faris
fonte