web-dev-qa-db-fra.com

Shell avec de meilleures capacités d'édition

Les obus (du moins ce que je sais) ont vraiment de mauvaises capacités d’édition des commandes.

Par exemple:

  • Je ne peux pas pointer le curseur sur aucun point de la commande.
  • Je ne peux pas sélectionner et revenir en arrière/supprimer/remplacer le texte dans la commande.

Actuellement, ils sont si gênants que j'utilise gedit pour éditer les commandes avant de les coller sur le terminal.

Y at-il une solution qui est bon pour ceux-ci?

11

Bash est en fait assez bon à ça. Vous devez juste apprendre ses raccourcis. Par exemple (dans le mode emacs par défaut):

  • Ctrl + A : aller au début de la ligne.
  • Ctrl + E : aller au bout de la ligne.
  • Ctrl + B : déplacer un caractère en arrière.
  • Ctrl + F : avancer d'un personnage.
  • Alt + B : déplacer un mot en arrière.
  • Alt + F : avancer d'un mot.
  • Ctrl + K : efface tout jusqu'à la fin de la ligne.
  • Alt + D : supprimer (couper) le mot après le curseur.
  • Ctrl + W : efface (coupe) le mot avant le curseur.
  • Ctrl + Y : yank (coller) ce qui est dans le tampon (ce que vous coupez avec Ctrl+K ou Alt + D par exemple)

Et il y en a beaucoup plus. Lisez man readline pour voir ce qui est disponible. Vous pouvez attribuer différents raccourcis en les plaçant dans ~/.inputrc. Par exemple, pour faire Ctrl + Left remonter un mot et Ctrl + Right avancez d'un mot, ajoutez ceci à votre ~/.inputrc:

"\e[1;5D": backward-Word 
"\e[1;5C": forward-Word

Pour savoir ce que signifient ces codes étranges, 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 dans ~/.inputrc.


Vous voudrez peut-être aussi examiner d'autres coquilles. Les coquilles populaires "modernes" et riches en fonctionnalités incluent:

13
terdon

Vous pouvez éditer une commande vide ou partiellement saisie dans l'éditeur de votre choix en définissant EDITOR dans l'éditeur de votre choix et en appuyant sur CTRL+X+E ou CTRL+X/CTRL+E, qui ouvre la ligne en cours de modification dans EDITOR;

Par exemple, si vous définissez EDITOR sur gedit vous obtiendrez CTRL+X+E et CTRL+X/CTRL+E ouvrez la ligne actuelle dans Gedit.

Pour en faire une solution permanente, vous pouvez définir EDITOR dans ~/.bashrc.

Cela permet même d’utiliser un éditeur de texte graphique complet pour éditer 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:

autoload -U edit-command-line
zle -N edit-command-line
bindkey '^xe' edit-command-line
bindkey '^x^e' edit-command-line
7
kos

Les terminaux ne possèdent pas de capacités d'édition de texte. Les terminaux fournissent une zone de texte et connectent le clavier à quelque chose. Mais le quelque chose 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 en fonction des commandes, vous ne pouvez modifier que la commande en cours. bash fournit une excellente édition de commande par rapport au Bourne Shell ou csh ou ksh, mais il n’ya guère de chose que vous voudriez éditer, même une courte histoire. avec.

Les éditeurs de texte sont l’une des commandes que vous pouvez appeler dans le shell. Les principaux exemples sont vim et emacs . vim ou emacs vous donnera la possibilité de modifier presque tout. Les deux incluent des environnements de programmation intégrés pour étendre leurs capacités à n'importe quel problème auquel vous êtes confronté.

La solution consiste donc à mieux comprendre ce que font ces outils et ce qu’ils sont censés faire et choisir le bon pour le travail .

6
chicks

Généralement, 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 ni es ne peuvent prendre en charge l'édition à l'aide de la souris. Je pense que pour ce faire, ils auraient besoin de mieux contrôler le terminal.

Cependant (et ceci est un peu exagéré) si vous ouvrez Vim ou GVim, puis entrez des commandes Shell à l'aide de:

:!...

alors vous pouvez cliquez avec votre souris pour aller n'importe où dans la ligne. (Vous devrez d'abord :set mouse=a si cela n'est pas déjà activé.) Les touches d'édition de ce mode sont visibles avec :help cmdline-editing

Vim possède également un mode historique des commandes assez puissant, accessible en appuyant sur q:. À partir de là, vous pouvez tirer, supprimer et coller à l'aide des commandes en mode normal de Vim. Dans ce mode, vous pouvez obtenir la fonction sélectionnez-avec-la souris puis supprimez de votre choix (en appuyant sur d).

Une mise en garde importante ici est que Vim ne maintient pas une session en direct de Shell en cours d'exécution. 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 depuis dans du processus Vim et les utiliser à partir de la ligne de commande de Vim. Elles seront même exportées vers des processus enfants:

:let $FOO="bar"        " the $ and the quotes are mandatory here

:echo $FOO             " Vim's own echo command
bar

:!echo "$FOO"          " Passing the variable to a Shell command
bar

:!bash                 " Opening a child Shell
$ echo "$FOO"
bar

Donc, si vous êtes prêt à prétendre que Vim est en fait une sorte de Shell étrange, vous pouvez profiter de ses fonctionnalités d'édition avancées! Le plus gros inconvénient est probablement que vous devrez lancer chaque commande en tapant soit :! ou q:

Oh et au fait, si vous voulez obtenir le résultat de la commande Shell dans votre tampon Vim actuel, vous pouvez le faire comme ceci (mais attention, cela encombrera votre ligne actuelle):

:,!ls
0
joeytwiddle