Quel est le raccourci pour supprimer un mot «forward» dans un terminal Unix?

14

Je fais Ctrl+Wdans le terminal mac pour supprimer un mot (supprime l'endroit où se trouve le curseur jusqu'au début du mot)

Comment faire l'inverse - supprime l'endroit où se trouve le curseur à la fin du mot?

Glide
la source

Réponses:

14

Cela dépend de votre shell et de son mode d'édition en ligne de commande actif.

Pour un shell avec le mode d'édition de ligne de commande Emacs ( set -o emacsdans certains shells), utilisez Alt+D(cela ne fonctionne pas sur macOS pour une raison quelconque, mais imprime le caractère , utilisez à la Escdplace).

Pour un shell avec le mode d'édition de ligne de commande Vi ( set -o vidans quelques coquilles), l' utilisation Escdw(ce fait le travail sur macOS aussi).

Kusalananda
la source
Ce n'est que dans zsh que Meta-D supprime le même type de mot que Ctrl-W (ceux délimités par des blancs). En mode bashin vi, vous pouvez utiliser dWpour les supprimer
Stéphane Chazelas
1
@ StéphaneChazelas Oui, ils (les deux keycombos) ont une vision différente de ce qui constitue un "mot".
Kusalananda
Vous pouvez cocher «utiliser l'option comme méta» dans les préférences du clavier du terminal pour le faire fonctionner.
Jozef Legény
Esc + D et Alt + D fonctionnent tous les deux dans la borne 0.6.3 de xfce4 .
neverMind9
1

Pour la discipline de ligne tty, ^Wsupprime le mot précédent délimité par des espaces blancs .

Dans l' viéditeur en mode insertion, ^Wsupprime en arrière jusqu'au début de la première séquence d'alnums ou de non-alnums (activé foo-+-bar.. baz, il supprime d'abord baz, puis .., puis bar, puis -+-, puis foo).

Dans l' emacséditeur, ^Wsupprime de la position du curseur à la marque (celle que vous définissez avec Ctrl+Space).

Certains éditeurs de ligne comme readline(utilisé par bash, gdb...), zle(utilisé par zsh), pdkshsont en vimode, se comportent comme vià cet égard et lorsqu'ils sont en emacsmode se comportent comme la discipline de ligne tty (pas emacs).

libedit(utilisé par les shells BSD ou (en option) dash), tcshAT&T ksh, en emacsmode, se comportent comme emacs^Wsupprime la marque (initialement au début du tampon).

Pour supprimer un mot en avant, dans l' viéditeur, vous le feriez en mode commande ( normal ) avec dwpour supprimer au début de la prochaine séquence d'alnums ou de non-alnums (ou à la fin de la ligne) et dWpour supprimer à la séquence suivante de non-blancs (le pendant de la ^Wdiscipline de la ligne tty).

Dans l' emacséditeur de ligne, Meta-Dsupprimerait jusqu'à la fin de la prochaine séquence de caractères d'alnum. Le mot opérateurs de mouvement ( Meta-B, Meta-F) se comporte de la même manière.

les éditeurs de ligne de commande, lorsqu'ils sont en vimode, se comportent comme vi, mais en emacsmode, vous avez deux écoles principales: l' tcshécole et l' kshécole.

L' kshécole ( readline, ksh, yash) se comporte comme la plupart du temps emacs( fishle comportement « est légèrement différent dans la façon dont elle traite non alnum, les caractères non-blancs dans les deux emacset le vimode).

Dans l' tcshécole ( tcsh, libedit, zsh), les mouvements de mots sont basées sur des mots séparés par des espaces sont donc compatibles avec la ligne TTY discipline de ^Wà cet égard.

Dans zsh, le comportement est personnalisable avec différents styles de mots pour tous les widgets de mouvement de mot.

Pour readline, vous pouvez obtenir l' tcshécole (et avoir Meta-Dsupprimé le même type de mot que le Ctrl-Wfait) en ajoutant à votre ~/.inputrc:

set keymap vi-move
"\e[EMACS~": emacs-editing-mode
set keymap emacs
"\e[VI~": vi-movement-mode
"\ed": "\e[VI~dW\e[EMACS~"
"\ef": vi-fWord
"\eb": vi-bWord

Ou d'un autre côté, alignez-vous ^Wsur les autres widgets de mouvement de mot (comportez-vous comme Meta-Backscape) avec:

set keymap emacs
"\C-W": backward-kill-word

En ce qui concerne la Metaclé, voyez- y .

Stéphane Chazelas
la source
-1

Sous Linux, essayez Ctrl+kde supprimer l'emplacement du curseur jusqu'à la fin du mot.

Il existe quelques autres raccourcis répertoriés ci-dessous (fonctionnant sous Linux):

  1. Ctrl+e -> Prend le curseur à la fin du mot.
  2. Ctrl+t -> Inter-changez la position des alphabets.
  3. Ctrl+y -> ajoute le suffixe "hh" au mot actuel.
  4. Ctrl+u -> Supprime toute la ligne.
  5. Ctrl+o -> Fonctionne comme la touche Entrée.
  6. Ctrl+p -> Fonctionne comme le bouton flèche vers le haut.
  7. Ctrl+a -> Amène le curseur à la position de départ de la commande.
  8. Ctrl+d -> Ferme le terminal.
  9. Ctrl+f -> Déplace le curseur d'un caractère vers l'avant.
  10. Ctrl+h -> Fonctionne comme la touche Retour arrière.
  11. Ctrl+j -> Fonctionne comme la touche Entrée.
  12. Ctrl+m -> Fonctionne comme la touche Entrée.
  13. Ctrl+b-> Fonctionne comme la touche flèche droite. 14 Ctrl+4 -> Supprime le mot
SMshrimant
la source
3
Ctrl+ksupprime jusqu'à la fin de la ligne . Ctrl+usupprime la ligne entière (si le curseur est à la fin). Ctrl+denvoie EOF. Ctrl+eva jusqu'au bout de la ligne , etc.
Kusalananda
Ctrl + y est utilisé pour coller, ou tirer, la dernière chose que vous avez enregistrée dans le presse-papiers, dans votre cas, c'était probablement "hh". Pourquoi dans le monde pensez-vous qu'il y aurait un raccourci clavier pour post-fixer un mot donné avec les lettres "hh"? Comment cela serait-il utile?
bmcentee148