Como adicionar um prefixo para cada linha?

35

Eu tenho o código abaixo:

Hello
There
I am some code

E deseja adicionar código à sua frente, como:

I said Hello
I said There
I said I am some code

Então, como eu adicionaria um prefixo a cada linha?

Luke
fonte

Respostas:

47

Você pode adicionar um prefixo com M-x string-rectangle, ao qual está vinculado C-x r t. Isso faz parte de uma série de comandos que opera em seleções retangulares ; este insere texto em todas as linhas do retângulo.

Comece definindo a marca no início da primeira linha e mova o cursor para o primeiro caractere da última linha que você deseja prefixar:

*Hello
 There
▮I am some code

Em seguida C-x r t, use , digite seu prefixo ( I said) e pressione RET. Isso adiciona o texto a cada linha do retângulo:

I said Hello
I said There
I said I am some code

Se você não alinhar o cursor na mesma coluna da sua marca, ele substituirá a parte do retângulo:

*Hello
 There
 I am▮ some code

com o mesmo comando resulta em:

I said o
I said e
I said  some code
Tikhon Jelvis
fonte
3
você é a segunda pessoa a ganhar boa resposta badge :)
nicael
Uma alternativa é usar M-x string-insert-rectangle. É muito semelhante, mas string-insert-rectangle insere no início de cada linha da seleção, enquanto string-rectangle substitui ; portanto, com o último, você precisa ser mais preciso sobre sua seleção, se não deseja substituir nada.
Jeff Clites
32

Você pode usar o modo de cursores múltiplos para colocar um cursor em cada linha. Em seguida, qualquer texto digitado será inserido em cada linha.

Você começaria com o ponto no início do trecho de código:

▮Hello
 There
 I am some code

Então bata C->duas vezes. (Essa é a associação de teclas sugerida; você deve configurá-la por conta própria.) Isso cria dois cursores extras nas duas linhas a seguir:

▮Hello
▮There
▮I am some code

Então digite I said. O texto será adicionado em cada linha:

I said ▮Hello
I said ▮There
I said ▮I am some code

Por fim, pressione RETpara sair do modo de múltiplos cursores e deixar o ponto no último cursor:

I said Hello
I said There
I said ▮I am some code

Aqui está um vídeo que mostra como funciona.

legoscia
fonte
26

Pessoalmente, prefiro replace-regexp(substitua "^" por "eu disse").

artagnon
fonte
12

Outra opção é usar macros, que podem lidar com mais tarefas do que seleções retangulares ou vários cursores, mesmo que seja um pouco mais complicado para esse caso específico.

Posicione o cursor no início da primeira linha e pressione F3para iniciar a gravação, insira o texto, mova o cursor para o início da próxima linha e pressione F4para parar a gravação. Agora pressione F4novamente para repetir a macro, C-2 F4repetir duas vezes ou C-0 F4repetir até que seja encontrado um erro (como ficar sem linhas).

sanityinc
fonte
9

Você pode instalar o mal e fazê-lo de várias maneiras semelhantes ao vi - prefiro a seleção visual de blocos usando Ctrl+ Vpara marcar cada linha e depois Shift+ Ipara inserir e digite o texto que deseja inserir e, finalmente, pressione ESCpara sair do modo de inserção e o texto será anexado a cada linha. Isso é muito parecido com as seleções de retângulo do emacs, mas com poucas teclas.

alexmurray
fonte
7

Isso é muito semelhante à resposta de artagnon, mas replace-regexpnão está vinculado a nenhuma chave.

Então, na verdade, eu uso o query-replace-regexpque é vinculado por padrão C-M-%e, em seguida, substituo ^pelo prefixo fornecido I saide digito !para substituir todos sem solicitar mais.

b4hand
fonte
4

Se você cua-modeativou, então:

  • C-a para passar para o início da linha,
  • C-RET para começar um retângulo
  • (tecla para baixo) duas vezes para ir para a terceira linha,
  • I said como texto a ser inserido
  • C-RET terminar retângulo

Prefiro a cua-modemaneira de trabalhar, em comparação com o retângulo padrão do Emacs, onde o equivalente seria:

  • C-a para passar para o início da linha,
  • C-SPC para começar um retângulo
  • (tecla para baixo) duas vezes para ir para a terceira linha,
  • C-x r t I said RET inserir texto

Ele cua-modesalva duas teclas pressionadas em comparação com o retângulo Emacs padrão.

Mas para mim, a vantagem adicional do modo cua é que eu posso anexar texto ao retângulo (eu pessoalmente não sei como anexar texto com o retângulo Emacs padrão). Com o modo cua, é RETpressionado apenas uma tecla, inserido antes do I said.

thdox
fonte