Apagar para trás até encontrar um caractere, como alt + bksp

5

Diga que minha linha atual era:

/tmp/path/to/file:123

Agora estou no final desta linha, agora quero excluir :123 pressionando uma combinação de teclas, isso era possível? (o cólon foi meramente mencionado como um exemplo, poderia ser outros caracteres, apenas imaginando se eu poderia ligar chaves para fazer isso)

É semelhante ao que alt + Backspace , mas mais específico no separador de palavras.

Bash ou zsh são todos bem-vindos.

    
por daisy 23.12.2012 / 13:48

4 respostas

3

Procure por : , depois delete no final da linha: Ctrl + R : Alt + D . Ctrl + R é o comando de busca do histórico, e a linha que você está editando faz parte do histórico. A maioria dos comandos, incluindo Alt + D , encerra a pesquisa de histórico incremental e tem seu efeito usual.

No modo vi: F:C

Isso se aplica tanto no bash quanto no zsh (na configuração padrão, não garanto que não haja combinações exóticas de opções no zsh que façam com que ele reaja de maneira diferente e, claro, isso pressupõe as atalhos de teclado padrão). / p>     

por 23.12.2012 / 19:03
0

Até onde sei e pelo que acabei de testar no bash 3.2

alt + backspace e ESC + backspace apagam a palavra até o primeiro caractere "estranho".

ctrl + w será excluído até o primeiro espaço encontrado.

Pelo que entendi você não está escrevendo, mas sim digitando.

    
por 23.12.2012 / 14:41
0

No bash você pode tentar ctrl + alt + ] para iniciar a função character-search-backward , então : . O cursor então moverá para o ":" e você poderá então digitar alt + d para matar até o final da palavra atual.
Se você usar isso com freqüência, poderá criar uma associação para ele em ~/.inputrc .
Estas são funções readline e estão documentadas em info: info readline .
Eu não acho que haja uma maneira de mudar a ideia de readline do que uma palavra é sem invadir a fonte.

    
por 23.12.2012 / 14:49
0

No zsh, posso fazer isso com os atalhos do Emacs. Seu exemplo acima seria Alt-Backspace (ou M-DEL no jargão do Emacs).

Para fazer isso, tenho o seguinte em .zshrc . (Observe a URL - não estou aceitando isso!)

## emacs cursor-word movement (not identical but close enough)
#  also necessary for this:
#    /usr/share/zsh/functions/forward-word-match
#  (from http://stackoverflow.com/questions/10847255 )
autoload -U select-word-style
select-word-style bash

O arquivo mencionado é assim:

emulate -L zsh
setopt extendedglob

local curcontext=":zle:$WIDGET" word
local -a matched_words
integer count=${NUMERIC:-1}

if (( count < 0 )); then
  (( NUMERIC = -count ))
  zle ${WIDGET/forward/backward}
  return
fi

while (( count-- )); do
  match-words-by-style
  # For some reason forward-word doesn't work like the other word
  # commands; it skips whitespace only after any matched word
  # characters.

  if [[ -n $matched_words[4] ]]; then
    # just skip the whitespace and the following word
    word=$matched_words[4]$matched_words[5]
  else
    # skip the word but not the trailing whitespace
    word=$matched_words[5]
  fi

  if [[ -n $word ]]; then
    (( CURSOR += ${#word} ))
  else
    return 1
  fi
done

return 0
    
por 23.12.2012 / 19:43

Tags