Les shells (du moins ce que je sais) ont de très mauvaises capacités d'édition de commandes.
Par exemple:
- Je ne peux pointer le curseur sur aucun point de la commande.
- Je ne peux pas sélectionner et reculer / supprimer / remplacer le texte dans la commande.
Actuellement, elles sont si distrayantes que j'utilise gedit pour modifier les commandes avant de les coller sur le terminal.
Y a-t-il une solution qui est bonne pour ces derniers?
command-line
bash
gnome-terminal
UniversallyUniqueID
la source
la source
Réponses:
Bash est en fait assez bon dans ce domaine. Vous avez juste besoin d'apprendre ses raccourcis. Par exemple (dans le mode emacs par défaut):
Et il y en a beaucoup plus. Lisez
man readline
pour voir ce qui est disponible d'autre. Vous pouvez attribuer différents raccourcis en les plaçant~/.inputrc
. Par exemple, pour faire Ctrl+ Leftreculer d'un mot et Ctrl+ Rightavancer d'un mot, ajoutez ceci à votre~/.inputrc
:Pour savoir ce que ces codes étranges signifient, appuyez sur Ctrl+ V, puis appuyez sur la touche que vous souhaitez utiliser. Si vous essayez avec Ctrl+ Right, vous verrez
^[[1;5C
. Remplacez^[
par\e
in~/.inputrc
.Vous pourriez également vouloir examiner d'autres coquilles. Les coques «modernes», riches en fonctionnalités, incluent:
la source
gnome-terminal
vous devez utiliser leESC
bouton au lieu deALT
pour naviguer un mot en avant et en arrière. . .. ou basculez vers un terminal qui n'utilise pas Alt pour son menu d'application. . . comme xterm ou sakuraVous pouvez modifier une commande vide ou partiellement tapée dans l'éditeur de votre choix en définissant
EDITOR
l'éditeur de votre choix et en appuyant sur CTRL+ X+ Eou CTRL+ X/ CTRL+ E, ce qui ouvre la ligne en cours d'édition dansEDITOR
;Par exemple, le réglage
EDITOR
surgedit
fera CTRL+ X+ Eet CTRL+ X/ CTRL+ Eouvrir la ligne actuelle dans Gedit.Pour en faire une solution permanente, vous pouvez définir
EDITOR
dans~/.bashrc
.Cela permet d'utiliser même un éditeur de texte graphique complet pour modifier la commande; pour exécuter la commande modifiée, enregistrez et fermez simplement le document.
La même fonctionnalité peut être activée dans Zsh en ajoutant ce qui suit à
~/.zshrc
:la source
fc
commande si la variable FCEDIT est définie. Bonne réponse !fc
ouvre cependant la commande précédente (qui est encore plus nette d'une certaine manière). Je n'en savais rien, merci!Les terminaux n'ont eux-mêmes aucune capacité d'édition de texte. Les terminaux fournissent une zone de texte et connectent le clavier à quelque chose. Mais ce que vous exécutez à l'intérieur du terminal détermine ce qu'il peut faire.
Les shells tels que
bash
sont généralement la première chose que vous trouverez à exécuter à l'intérieur d'un terminal. Comme les shells fonctionnent sur la base de commandes, vous ne pouvez modifier que la commande actuelle. bash offre une excellente édition des commandes par rapport au shell Bourne oucsh
bienksh
ce n'est pas quelque chose avec lequel vous voudriez éditer même une courte histoire.Les éditeurs de texte sont l'une des commandes que vous pouvez invoquer dans le shell. Les principaux exemples sont vim et emacs .
vim
ouemacs
vous donnera la possibilité de modifier presque n'importe quoi. Les deux comprennent des environnements de programmation intégrés pour étendre leurs capacités à n'importe quel problème que vous rencontrez.La solution consiste donc à mieux comprendre ce que ces outils font et ce qu'ils sont censés faire et à choisir le bon pour le travail .
la source
Habituellement, les terminaux permettent la sélection de texte avec la souris, mais le shell n'en est pas informé. Donc , malheureusement ni
bash
,zsh
,fish
nies
peut prendre en charge l' édition basée sur la souris. Je pense que pour ce faire, ils devraient prendre un plus grand contrôle sur le terminal.Cependant (et c'est un peu exagéré) si vous ouvrez Vim ou GVim, puis entrez des commandes shell en utilisant:
alors vous pouvez cliquer sur votre souris pour aller n'importe où sur la ligne . (Vous devrez d'
:set mouse=a
abord le faire si ce n'est déjà fait.) Les touches d'édition dans ce mode peuvent être vues avec:help cmdline-editing
Vim dispose également d'un mode d'historique de commandes assez puissant, qui peut être atteint en appuyant sur q:. De là, vous pouvez extraire, supprimer et coller à l'aide des commandes en mode normal de Vim. Dans ce mode, vous pouvez obtenir la sélection avec la souris, puis supprimer la fonction souhaitée (en appuyant sur d).
Une mise en garde importante ici est que Vim ne maintient pas réellement une session shell en direct. Chaque commande que vous exécutez sera exécutée dans un processus enfant. Ainsi, toutes les modifications apportées aux variables d'environnement ou aux options du shell par le processus enfant seront perdues.
Cela dit, vous pouvez modifier les variables d'environnement de l' intérieur du processus Vim, et les utiliser de la ligne de commande de Vim, et ils seront même être exportés vers des processus enfants:
Donc, si vous êtes prêt à prétendre que Vim est en fait une sorte de shell étrange, alors vous pouvez profiter de ses fonctionnalités d'édition avancées! Le plus gros inconvénient est probablement que vous devrez démarrer chaque commande en tapant soit
:!
ouq:
Oh et au fait, si vous voulez obtenir la sortie de la commande shell dans votre tampon Vim actuel, vous pouvez le faire comme ça (mais attention, cela encombrera votre ligne actuelle):
la source