Edição de blocos * ao vivo * no Emacs ou Vim

9

O jEdit suporta edição de blocos, mas o Emacs e o Vim parecem ter sérios problemas de usabilidade no mesmo assunto. Se alguém pudesse preencher as incógnitas aqui, seria muito mais suportável usar qualquer editor:

  • Seleção retangular real : Onde a seleção na tela é um retângulo, não uma seleção linear que é então usada para calcular uma região à qual o Emacs parece limitado.
    • jEdit: Mantenha pressionada a tecla Ctrl e selecione.
    • Vim: Clique em Ctrl-v e selecione.
    • Emacs: Desconhecido ; parece que um plug-in é necessário em mais de 400 linhas.
  • Editar retangular ao vivo : Veja como será o resultado em todas linhas à medida que você edita após uma seleção de bloco.
    • jEdit: Comece a digitar e você verá o resultado final.
    • Vim: Clique em Shift-i e digite. Irá mostrar o resultado final somente na primeira linha até que você pressione Esc para sair do modo de inserção. Desconhecido se existe alguma maneira de ver o resultado em todas as linhas imediatamente.
    • Emacs: Desconhecido ; parece que a única maneira é Cx r t e definir o texto a ser preenchido após pressionar Ret .
  • Comece e termine a seleção em posições fora do texto : Por exemplo, eu gostaria de remover os N primeiros caracteres de cada linha, mas a primeira e a última linha contêm menos de N caracteres.
  • Colar bloco em linha : colar o bloco copiado como se você estivesse colando várias linhas, como em, empurre o texto já para baixo , não para a direita.
    • jEdit: o padrão. Para colar um bloco como um bloco, você precisa fazer outra seleção de blocos primeiro.
    • Vim: O Esc V p .
    • Emacs: Desconhecido .

A funcionalidade geral de seleção de blocos do Emacs pode ser encontrada na cua-mode plugin .

    
por l0b0 14.10.2011 / 10:51

4 respostas

6

Eu posso responder pelo Vim, mas não pelo Emacs.

Iniciar e terminar a seleção em posições fora do texto:

:set virtualedit=block ativará o comportamento desejado. Você pode soltar os dois pontos iniciais e adicioná-lo ao seu .vimrc, se quiser. Para mais informações, :help 'virtualedit' de dentro do Vim.

Colar o bloco em linha:

Se você acabou de pressionar p no Modo de Comando, o Vim irá inserir o bloco, empurrando os caracteres para a direita em cada linha. Se você selecionar outro bloco e pressionar p , o Vim substituirá o bloco pelo bloco colado.

Você pode colar um bloco "linewise" com a seqüência de teclas do modo de comando O Esc V p . Isso insere uma linha acima da linha atual ( O Esc ), seleciona-a linearmente ( V ) e cola sobre ela ( p ). Você pode encurtar isto para (por exemplo) y p com um mapeamento como :nmap yp O<Esc>Vp - digite literalmente; use cinco pressionamentos de tecla para <Esc> em vez de pressionar a tecla Escape.

    
por 14.10.2011 / 16:54
5

For example, I'd like to remove the N first characters of each line, but the first and last lines contain less than N characters.

Emacs: inicie a seleção na primeira linha e simplesmente adicione o número de caracteres que faltam (por exemplo, espaços) à última linha e, em seguida, use kill-rectangle

Como alternativa, veja artist-mode ou picture-mode , o que permite que você se mova livremente na janela, independentemente dos comprimentos de linha.

Paste block inline

Emacs: Primeiro salve o bloco ou retire-o ou salve-o em um registrador, depois vá até o ponto de inserção, use o retângulo de exclusão e insira o retângulo salvo.

looks like a 400+ lines plugin is necessary

No caso do Emacs, por que isso é um problema? Um plugin pode ser compilado e a filosofia do emacs é que você não coloca tudo no núcleo, mas usa plugins para estender o editor.

    
por 14.10.2011 / 12:16
4

Existe 'cua-mode' que vem com o Emacsen 22.1 e posterior, ou siga o link para fazer o download de versões anteriores do Emacs . Há um vídeo curto que apresenta a funcionalidade.

Para comandos gerais de retângulo, tente ler o manual , que fornece uma introdução fácil .

    
por 14.10.2011 / 22:21
0

No vim, a maneira típica de excluir os primeiros n caracteres é fazer algo como :%s/.\{0,6\}// .

% fará todo o documento; você pode substituí-lo por uma seleção ou com as linhas reais que lhe interessam. O comando s é para "substituto". Ele substituirá uma expressão regular por qualquer um que você forneça e só corresponderá uma vez em cada linha, a menos que você adicione uma opção específica. O / é um delimitador - pode ser qualquer caractere, mas / é normalmente usado, a menos que seja vantajoso usar outra coisa (para que você não precise escapar / no restante do comando). O argumento após o primeiro delimitador é uma expressão regular que será usada para encontrar strings correspondentes em sua seleção. O argumento após o segundo delimitador é o que o jogo será substituído por.

Portanto, este comando diz localizar 0 a 6 instâncias de qualquer caractere e substituí-las por nada.

    
por 14.10.2011 / 14:37