Como selecionar coluna e depois editar no GNU Emacs?

15

Estou usando o ViM, TextMate e GNU Emacs há anos.

Por exemplo, aqui está o texto que eu quero editar

foo
foo
foo

E aqui está o resultado do texto que eu quero ter

bar foo
bar foo
bar foo

Quando estou no Vim, posso executar "Ctrl v" na primeira linha e na primeira coluna, pressionar "2 j", pressionar "i" e digitar "bar", pronto.

Quando estou no Textmate, posso pressionar "Apple Command Option" enquanto seleciono para baixo (com o mouse) e, em seguida, digite "bar".

Mas quando estou no GNU Emacs 23.1, não sei como fazê-lo. : (((

Eu pesquisei no EmacsWiki e procurei no Google, mas não consegui a solução. Por favor, me guie se você conhece minha solução. Ficaria grato por isso.

Arie
fonte
@Trey Jackson e café @humble, resolvido, muito obrigado !!
Arie

Respostas:

16

Duas opções vêm à mente. O primeiro são retângulos (como mencionado em outra resposta). As instruções explícitas para isso são:

  1. ir para primeira linha, primeira coluna
  2. C-SPC
  3. ir para a última linha (primeira coluna)
  4. C-x r t bar SPC RET

Outra opção, que fornece comandos muito agradáveis ​​de edição de retângulos / colunas, é o modo CUA . Aqui está um post (divulgação: meu blog) que descreve como usá-lo. Para ver o poder do modo CUA, vale totalmente a pena assistir este vídeo de três minutos .

Integro o modo CUA com o seguinte (porque prefiro não ter o modo de marca transitória):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)
Trey Jackson
fonte
11

No Emacs-24.4, o suporte básico para retângulos foi aprimorado um pouco; portanto, em vez de usar C-SPCseguido por C-x r t, você pode:

C-x SPC
down down
C-t bar RET

Uma das coisas legais sobre isso em comparação com o C-SPCmétodo é que você receberá feedback visual sobre o retângulo que está selecionando. Obviamente, o cua-modemétodo também funciona (e funciona de maneira semelhante).

Stefan
fonte
infelizmente, parece-me que as melhorias não são suficientes: cua-modetinha mais razão ... Só para mencionar uma coisa: em cua-mode, enquanto um retângulo está destacado, posso digitar e adicionar texto. No atual "suporte básico" do emacs interno, o destaque desaparece (a seleção é "cancelada") e a entrada é inserida no ponto do cursor. Este é um contra-senso e não o que eu normalmente quer (e se acostumar à forma como cua-modeo faz)
ShinTakezou
@ShinTakezou: enquanto você encontra o contador de modo de marca de retângulo intuitivo, acho o contador de comportamento do cua intuitivo. Felizmente, você pode escolher. Se você preferir o suporte do cua, poderá ativar o modo cua ou (se desejar apenas o suporte de retângulo) (global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode).
Stefan
de fato, é o que eu faço: aderindo ao modo cua. Funciona como: destaque uma coluna, digite texto, pronto. Caso contrário: destaque uma coluna, diga que deseja adicionar texto, digite texto no minibuffer (você não a verá aparecendo no buffer enquanto digita ...), ... pronto. Você verá mais tarde um erro de digitação no último caractere ... no modo cua, eu posso vê-lo enquanto digito, excluí-lo (não desfazer toda a inserção), repensar, inserir outro caractere ... e o retângulo permanece destacado conforme necessário, entre, e posso reduzi-lo, aumentá-lo, digitar mais texto ou "recortar" esse novo retângulo ... então, para mim, é mais intuitivo e confortável.
ShinTakezou 16/04/2015
Estou feliz que você gosta ;-)
Stefan
BTW, no Emacs-25, a C-toperação de retângulos que não seja CUA (também conhecida como C-x r t) também mostra uma visualização do texto recém-inserido à medida que você o digita.
Stefan
2

No emacs, esse tipo de coluna é chamado de 'retângulos'. então esta é a página de documentação relevante.

Todos esses comandos exigem que a região contenha o retângulo no qual você está operando. Portanto, você precisa definir a marca no caractere superior esquerdo no retângulo e estender a região para o caractere inferior direito no retângulo. O comando M-x string-insert-rectangleque você procura é o que solicita a inserção da string.

nedned
fonte
1

Resposta mais curta: ative o modo retângulo CUA por C-RET.

Então, para o seu caso, seria

  1. Vá para a primeira linha, primeira coluna e pressione C-RETpara entrar no modo CUA
  2. Vá para a última linha, primeira coluna e simplesmente digite barSPC
  3. Sair do modo CUA via ESCou CG

Veja a resposta do @Trey para uma solução mais elaborada e links para o CUA.

Martin
fonte
2
Sim, tenho pouca reputação para comentar. Não quero repetir sua resposta, mas acrescentarei mais algumas informações do documento do CUA.
Martin Martin
0

Você pode usar replace-regexp para isso:

  1. definir marca para a última linha -> C SPC e vá para a última linha
  2. tipo Mx replace-regexp RET no minibuffer (eu tenho uma ligação de chave para esse senhor)
  3. Give ^ RET
  4. digite bar e pressione RET

Isso adicionará uma barra ao início da linha.

Neelesh
fonte