tmux modo de cópia - selecione o bloco de texto

34

Estou usando o tmux com as chaves vi, e copiar / colar funciona bem, desde que você esteja selecionando uma linha de texto ou tenha apenas uma janela. Quando eu quero selecionar um bloco de texto (várias linhas, mas não a largura total), então me deparo com problemas. Se eu tiver várias janelas vim abertas, ele selecionaria o texto de todas elas, e o que eu preciso é selecionar o texto apenas em uma janela. Ou seja, apenas como um select visual no vim.

Isso é possível fazer?

    
por Srećko Toroman 29.02.2012 / 01:18

5 respostas

37

Certifique-se de verificar no final desta postagem as ligações necessárias que precisam entrar em seu arquivo .tmux.conf.

Estou supondo que sua chave de prefixo seja C-a:

  • C-a significa: pressione Ctrl + A
  • C-a [significa: pressione Ctrl + A e depois pressione [

Para fazer uma seleção de retângulo de texto de (1,1) a (2,2) no tmux:

  • Ir para o modo de cópia: C-a [
  • Mover o meio de uma linha
  • Pressione C-v
  • Espaço de imprensa
  • Mova a seleção com jkhl
  • Quando estiver satisfeito com sua seleção, pressione Enter (ou y se você tiver a ligação em seu arquivo conf).
  • Você pode colar o último buffer de cópia por: C-a]

Observe que pressionar espaço é necessário para a seleção de retângulo.

Para selecionar linhas como você faria normalmente, vá para o modo de cópia e pressione v, selecione com as teclas jkhl e pressione y.

Eu tenho estas ligações no meu .tmux.conf:

Antes da versão 2.4 (20 de abril de 2017) :

  • setw -g mode-keys vi
  • bind-key -t vi-copy 'v' seleção inicial # Inicia a seleção na cópia modo.
  • bind-key -t vi-copy 'C-v' alternância de retângulo # Inicia a seleção na cópia modo.
  • bind-key -t vi-copy 'y' seleção de cópia # Seleção de ianque na cópia modo.

Após versão 2.4 :

  • setw -g mode-keys vi
  • bind-key -T copy-mode-vi 'v' envia -X begin-selection # Inicia a seleção no modo de cópia.
  • bind-key -T copy-mode-vi 'C-v' envia -x -ângulo-toggle # Inicia a seleção no modo de cópia.
  • bind-key -T copy-mode-vi 'e' send -X copy-selection # Seleção do Yank no modo de cópia.

É importante desvincular a ligação de alternância de retângulo padrão:

  • chave de desconexão -t vi-copy v # Antes da versão 2.4
  • chave de desconexão -T copy-mode-vi v

Caso contrário, a nova ligação 'C-v' não funciona.

Observação: para ter um único .tmux.conf que funcione nas versões, consulte esta questão .

    
por 28.12.2013 / 02:33
12

Você pode selecionar um bloco visual como no vi - type v antes de iniciar a seleção. Na manpage, isso é chamado de "alternar retângulo".

    
por 29.02.2012 / 19:48
9

Como Lars aponta, v realmente faz o que você está pedindo, alternando entre o modo retângulo e o modo de seleção de linha completa. space e enter são usados respectivamente para iniciar uma nova seleção e copiá-la. Entre no modo de cópia usando seu prefixo seguido por [ e cole sua seleção copiada em qualquer janela do tmux usando ]

Isso também me confundiu, uma vez que v funciona no vim como space no tmux, para iniciar a seleção.

Emitir :list-keys -t vi-copy no tmux mostrará a tabela completa de comandos no modo de cópia.

bind-key -t vi-copy    C-b page-up                                                      
bind-key -t vi-copy    C-c cancel
bind-key -t vi-copy    C-e scroll-down
bind-key -t vi-copy    C-f page-down
bind-key -t vi-copy    C-h cursor-left
bind-key -t vi-copy  Enter copy-selection
bind-key -t vi-copy    C-y scroll-up
bind-key -t vi-copy Escape clear-selection
bind-key -t vi-copy  Space begin-selection
bind-key -t vi-copy      $ end-of-line
bind-key -t vi-copy      , jump-reverse
bind-key -t vi-copy      / search-forward
bind-key -t vi-copy      0 start-of-line
bind-key -t vi-copy      1 start-number-prefix
bind-key -t vi-copy      2 start-number-prefix
bind-key -t vi-copy      3 start-number-prefix
bind-key -t vi-copy      4 start-number-prefix
bind-key -t vi-copy      5 start-number-prefix
bind-key -t vi-copy      6 start-number-prefix
bind-key -t vi-copy      7 start-number-prefix
bind-key -t vi-copy      8 start-number-prefix
bind-key -t vi-copy      9 start-number-prefix
bind-key -t vi-copy      : goto-line
bind-key -t vi-copy      ; jump-again
bind-key -t vi-copy      ? search-backward
bind-key -t vi-copy      B previous-space
bind-key -t vi-copy      D copy-end-of-line
bind-key -t vi-copy      E next-space-end
bind-key -t vi-copy      F jump-backward
bind-key -t vi-copy      G history-bottom
bind-key -t vi-copy      H top-line
bind-key -t vi-copy      J scroll-down
bind-key -t vi-copy      K scroll-up
bind-key -t vi-copy      L bottom-line
bind-key -t vi-copy      M middle-line
bind-key -t vi-copy      N search-reverse
bind-key -t vi-copy      T jump-to-backward
bind-key -t vi-copy      W next-space
bind-key -t vi-copy      ^ back-to-indentation
bind-key -t vi-copy      b previous-word
bind-key -t vi-copy      e next-word-end
bind-key -t vi-copy      f jump-forward
bind-key -t vi-copy      g history-top
bind-key -t vi-copy      h cursor-left
bind-key -t vi-copy      j cursor-down
bind-key -t vi-copy      k cursor-up
bind-key -t vi-copy      l cursor-right
bind-key -t vi-copy      n search-again
bind-key -t vi-copy      q cancel
bind-key -t vi-copy      t jump-to-forward
bind-key -t vi-copy      v rectangle-toggle
bind-key -t vi-copy      w next-word
bind-key -t vi-copy BSpace cursor-left
bind-key -t vi-copy  NPage page-down
bind-key -t vi-copy  PPage page-up
bind-key -t vi-copy     Up cursor-up
bind-key -t vi-copy   Down cursor-down
bind-key -t vi-copy   Left cursor-left
bind-key -t vi-copy  Right cursor-right
bind-key -t vi-copy   C-Up scroll-up
bind-key -t vi-copy C-Down scroll-down
    
por 10.05.2013 / 00:57
4

Como nenhuma das outras respostas fornece uma solução ideal para o problema, não estou acima da necromancia.

Existe uma maneira de fazer a seleção de blocos funcionar da mesma maneira que no Vim, sem ter que pressionar espaço. Apenas um simples Ctrl-V, enraizado na memória muscular.
Ele requer a edição de seu arquivo .tmux.conf (mas o modo vi já funciona) e não tenho certeza se funciona para o tmux < 2.4.

Adicione isto ao seu .tmux.conf para replicar a seleção do Vim e vincular as ligações:

# set vi-mode
set-window-option -g mode-keys vi
# keybindings
bind-key -T copy-mode-vi v send-keys -X begin-selection
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle \; send -X begin-selection
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
# comment the preceding line and uncomment the following to yank to X clipboard
# bind-key -T copy-mode-vi y send-keys -X copy-pipe-and-cancel "xclip -in -selection clipboard"

Entre no modo de seleção e navegue até onde você deseja iniciar a seleção. Agora v inicia a seleção regular (caractere por caractere, linha a linha), <C-v> inicia a seleção de bloco e V (shift-v) inicia a seleção de linha. Independentemente do tipo de seleção, y yanks para o buffer de pasta do tmux (ou X da área de transferência; veja os comentários de código acima).

O mesmo que Vim.

    
por 01.10.2017 / 13:53
2

EDIT: Depois de verificar o código-fonte, eu reescrevi minha resposta completamente.

Eu originalmente pensei que isso não era possível porque eu não conseguia fazer isso funcionar, mas as outras respostas estão corretas sobre v ser a chave correta para isso, mas não é óbvio como usar isso, especialmente se você são usados para vim.

Além disso, não funcionaria para mim porque eu tinha v ligado a begin-selection - Eu acho que devo ter cegamente copiado essa ideia de algum outro lugar para imitar a maneira vim de começar uma seleção sábia do personagem, sem saber isso causaria problemas mais adiante com seleções de blocos.

$ tmux -V
tmux 1.9a
$ tmux list-keys -t vi-copy  | grep " v "
bind-key -t vi-copy      v begin-selection     # suppressed my block selection mode

Uma vez que tirei esta ligação (comentando a linha no meu .tmux.conf e reiniciando o tmux), ela começou a funcionar, mas ainda é um pouco confusa porque não é o mesmo que vim.

Com ligações padrão, ele deve funcionar da seguinte maneira:

  1. Certifique-se de ter o tmux unning com setw -g mode-keys vi no seu .tmux.conf .
  2. digite C-a [ para iniciar o modo de cópia
  3. mova o cursor para onde deseja iniciar a seleção
  4. digite v
  5. digite Space para iniciar a seleção
  6. mova o cursor e você verá uma seleção retangular
  7. você pode pressionar v novamente para alternar a seleção de volta para a seleção de caracteres ou vice-versa.

Você não precisa digitar v antes de pressionar Space . Você pode iniciar a seleção baseada em caracteres com Space primeiro e pressionar v depois para alternar para o modo de seleção retangular.

É bem diferente do vim, pois no tmux você precisa digitar dois caracteres: Space e v para entrar no modo de seleção retangular. No vim, você só precisa digitar Ctrl-V .

Também no vim v inicia uma seleção de caracteres, não bloqueia.

Infelizmente, não parece haver um modo de seleção de linha no tmux ( Shift-v no vim).
EDIT: Parece que o Tmux versão 2.0 fornece um modo de seleção de linha com Shift-v (eu não tentei ainda embora!)

    
por 02.05.2014 / 20:36

Tags