Uso de teclas VI para editar comandos de shell en UNIX

Uso de teclas VI para editar comandos de shell en UNIX

Solía ​​tener un compañero de trabajo que era muy bueno en UNIX.

Me mostró cómo usar las combinaciones de teclas de Vi para editar mis comandos de shell.

Colocó el comando en un archivo que se ejecutaba cada vez que iniciaba sesión.

Desde entonces, me mudé a un proyecto diferente.

Lamentablemente no recuerdo cómo configurar esto.

¿Hay alguien aquí que sepa cómo usar las combinaciones de teclas de Vi para editar comandos en la terminal?

¿Cómo puedo hacer que esa configuración sea permanente?

Respuesta1

¡Estás hablando de la mejor característica jamás vista!

Puede usar los comandos vi para editar los comandos del shell (y el historial de comandos) agregando esto a su .bashrcarchivo:

set -o vi

También puede ejecutar ese comando desde la línea de comando para afectar solo su sesión actual.

Si no usa bash, sustituya el archivo rc apropiado por su shell.


Esto le permite usar comandos vi para editar cualquier comando...

También puedes usar jy kpara moverte por tu historial (después de presionar ESC).

También puedes usar /(después de presionar ESC) para buscar comandos antiguos.

En otras palabras, para encontrar ese comando súper largo que cphiciste hace diez minutos:

ESC/CPENTER

Luego puede recorrer todos los comandos coincidentes en su historial con ny N.

¡Todo esto me hace 10 billones de veces más productivo en la línea de comando!

Respuesta2

Si estás usando bash, como ya respondieron jahroy y evil otto, puedes usar

set -o vi

para hacer que bash use comandos de edición estilo vi.

Una vez que haya hecho esto, puede escribir Esc vpara iniciar el editor vi con un archivo temporal que contiene una copia de la línea de comando actual. Puedes editar el comando, incluso reemplazándolo con varias líneas; cuando guarde el archivo ( :wq), el shell ejecutará los comandos editados.

Si tu prefieres

set -o emacs

puedes usar Ctl-XCtl-Epara hacer lo mismo. Utilizará su editor preferido $EDITOR, no necesariamente emacs.

(Personalmente, uso vi (en realidad vim) para la mayor parte de mis ediciones, pero prefiero set -o emacsen el shell; entrar y salir del modo de inserción es excelente para editar archivos, pero incómodo para comandos interactivos. YMMV.)

Respuesta3

Puede usar set -o vipara cambiar los comandos de edición de línea como publicó @jahroy, pero puede estar pensando en el fccomando (disponible en bash y creo que ksh, pero probablemente no tcsh), que pondrá el comando anterior en un editor (FCEDIT o EDITOR). , que probablemente haya configurado en vi) y luego ejecuta el comando cuando sale del editor. Consulte la página de manual o help fcpara obtener más detalles, o simplemente pruébelo.

Respuesta4

De hecho, esta es la característica más importante jamás vista. Aunque hay más:

Crea un archivo llamado

.editrc

que contiene la línea

bind -v

Línea de edición, es una biblioteca de versiones con licencia BSD que proporciona servicios similares a readline. Ese .editrc configurará sus combinaciones de teclas en modo vi en el shell de línea de comando de MySQL, o en cualquier aplicación que no use readline.

Me he vuelto algo olvidadizo con el paso de los años, por eso mi .zshrcobtiene algunos envoltoriospara el modo vi, para mostrarme en qué modo estoy en la línea de comando. Es agradable.

Sé que en zsh puedes escribir

bindkey -L

y obtenga la lista de combinaciones de teclas. Estoy seguro de que bash debe tener algo similar. No todas las claves vi están vinculadas de forma predeterminada. Átalos como mejor te parezca y estarás listo para las carreras.

información relacionada