Los shells (al menos lo que sé) tienen capacidades de edición de comandos realmente malas.
Por ejemplo:
- No puedo apuntar el cursor a ningún punto del comando.
- No puedo seleccionar y retroceder / eliminar / reemplazar texto en el comando.
Actualmente estos son tan molestos, uso gedit para editar comandos antes de pegarlos en la terminal.
¿Hay alguna solución que sea buena para estos?
command-line
bash
gnome-terminal
ID universalmente único
fuente
fuente
Respuestas:
Bash es bastante bueno en esto. Solo necesitas aprender sus atajos. Por ejemplo (en el modo predeterminado de emacs):
Y hay muchos más. Lea
man readline
para ver qué más hay disponible. Puede asignar diferentes accesos directos colocándolos en~/.inputrc
. Por ejemplo, para hacer que Ctrl+ Leftretroceda una palabra y Ctrl+ Rightavance una palabra, agregue esto a su~/.inputrc
:Para saber qué significan esos códigos extraños, presione Ctrl+ Vy luego presione la tecla que desea usar. Si intentas con Ctrl+ Right, verás
^[[1;5C
. Reemplazar^[
con\e
in~/.inputrc
.También es posible que desee buscar otras conchas. Las conchas populares "modernas" y ricas en características incluyen:
fuente
gnome-terminal
tienes que usar elESC
botón en lugar deALT
navegar una palabra hacia adelante y hacia atrás. . .. o cambie a un terminal que no use Alt para su menú de aplicaciones. . . como xterm o sakuraPuede editar un comando vacío o parcialmente escrito en el editor de su elección configurando
EDITOR
el editor de su elección y presionando CTRL+ X+ Eo CTRL+ X/ CTRL+ E, que abre la línea que se está editando actualmenteEDITOR
;Por ejemplo, establecer
EDITOR
agedit
hará que CTRL+ X+ Ey CTRL+ X/ CTRL+ Eabran la línea actual en Gedit.Para que esto sea una solución permanente, se puede establecer
EDITOR
en~/.bashrc
.Esto permite utilizar incluso un editor de texto gráfico completamente desplegado para editar el comando; para ejecutar el comando editado, simplemente guarde y cierre el documento.
La misma característica se puede habilitar en Zsh agregando lo siguiente a
~/.zshrc
:fuente
fc
comando si se establece la variable FCEDIT. Buena respuesta !fc
abre el comando anterior (que es aún más ordenado de cierta manera). No sabía sobre eso, gracias!Los terminales no tienen capacidades de edición de texto en sí mismos. Los terminales proporcionan un área de texto y conectan el teclado a algo. Pero lo que ejecutas dentro de la terminal determina lo que puede hacer.
Los shells como los que
bash
normalmente son lo primero que encontrarás para ejecutar dentro de una terminal. Debido a que los shells funcionan basados en comandos, solo puede editar el comando actual. bash proporciona una excelente edición de comandos en comparación con el shell Bournecsh
o,ksh
sin embargo, no es algo con lo que quieras editar ni siquiera una historia corta.Los editores de texto son uno de los comandos que puede invocar en el shell. Los ejemplos principales son vim y emacs .
vim
oemacs
te dará la posibilidad de editar casi cualquier cosa. Ambos incluyen entornos de programación integrados para ampliar sus habilidades a cualquier problema que enfrente.Por lo tanto, la solución es comprender mejor lo que estas herramientas están haciendo y su intención y elegir la correcta para el trabajo .
fuente
Por lo general, los terminales permiten la selección de texto con el mouse, pero el shell no se da cuenta de esto. Así que por desgracia no
bash
,zsh
,fish
ni tampocoes
puede apoyar la edición basada en ratón. Creo que para hacerlo, tendrían que tomar un mayor control sobre la terminal.Sin embargo (y esto es un poco exagerado) si abre Vim o GVim, y luego ingresa comandos de shell usando:
entonces puede hacer clic con el mouse para saltar a cualquier parte de la línea . (Necesitará
:set mouse=a
primero si eso no está habilitado). Las teclas de edición en este modo se pueden ver con:help cmdline-editing
Vim también tiene un modo de historial de comandos bastante poderoso, al que se puede llegar golpeando q:. Desde allí puede tirar, eliminar y pegar usando los comandos de modo normal de Vim. En este modo, puede obtener la selección con el mouse y luego eliminar la función que desee (presionando d).
Una advertencia importante aquí es que Vim en realidad no mantiene una sesión de shell en vivo ejecutándose. Cada comando que ejecute se ejecutará en un proceso secundario. Por lo tanto, cualquier cambio realizado en las variables de entorno u opciones de shell por el proceso secundario se perderá.
Dicho esto, se pueden modificar las variables de entorno desde dentro el proceso de Vim, y utilizar estos de línea de comandos de Vim, y que incluso se pueden exportar a procesos secundarios:
Entonces, si estás dispuesto a pretender que Vim es en realidad una especie de caparazón extraño, ¡entonces puedes disfrutar de sus funciones de edición avanzadas! Probablemente el mayor inconveniente es que tendrá que iniciar cada comando escribiendo
:!
oq:
Ah, y por cierto, si desea obtener la salida del comando de shell en su búfer Vim actual, puede hacerlo así (pero tenga cuidado de que golpeará su línea actual):
fuente