Ventajas de usar set -o vi

55

He visto a muchos desarrolladores usar este comando para configurar la opción en vi. ¿Nunca entendí el uso real de esto?

Al usar los comandos bash, ¿qué ayuda proporciona el cambio a vi?

Chander Shivdasani
fuente

Respuestas:

58

Al configurar su edición de línea de lectura en emacs (el valor predeterminado) o vi ( set -o vi) esencialmente está estandarizando sus comandos de edición, a través del shell y su editor de elección 1 .

Por lo tanto, si desea editar un comando en el shell, use los mismos comandos 2 que usaría si estuviera en su editor de texto. Esto significa que solo tendrá que recordar una sintaxis de comando y (si eso no fuera suficiente) probablemente su edición en ambos entornos sea más rápida y menos propensa a errores ...

Puede aprovechar aún más esta relación en modo vi al extraer cualquier comando de su historial de shell, presionar Escapepara ingresar al modo de comando y luego presionar v, lo que abrirá su $ EDITOR con el comando cargado para una edición más compleja con toda la potencia de vim. Una vez que haya terminado de editar el comando a su satisfacción, :wqy el comando se ejecuta nuevamente en su shell.


1. Suponiendo, por supuesto, que usa Emacs o Vi / m como su editor.
2. O, más exactamente, un subconjunto de los mismos ...

jasonwryan
fuente
1
Obtuve
3
El truco Esc-v es una de las mejores características set -o vique la mayoría de la gente no conoce. Esto es especialmente cierto si desea emitir el mismo comando varias veces con diferentes argumentos (como múltiples comandos de línea de comandos).
Michael Goldshteyn
2
El truco Esc-v no es realmente una ventaja específica para set -o vi. Bajo la configuración predeterminada de set -o EMACS, Cx, Ce abrirá una ventana de emacs (o $EDITOR, si está configurada) en la que puede editar el comando antes de ejecutarlo.
John Gowers
8

El modo Vi es una gran mejora de usabilidad si está utilizando un cliente SSH móvil como ConnectBot para Android.

Esto se debe a una menor dependencia de las teclas modificadoras.

Vim es mucho más fácil de usar con un teclado virtual en un teléfono inteligente o tableta que ... cualquier otra cosa, incluidos los métodos de edición nativos integrados en la interfaz de usuario de Android. Irónicamente, es más fácil editar fuentes C con Vim en una sesión SSH que editar, por ejemplo, un mensaje instantáneo con el widget de edición de la plataforma para ese propósito.

El modo Shell vi trae un beneficio similar.

Kaz
fuente
He estado esperando que hubiera modo vi en el teclado de mi teléfono. Mencionas que esto es como si ya existiera. ¿Cómo obtengo el modo vi en mi teléfono?
meh
6

Le permite editar cosas en la línea de comando utilizando los modos y operaciones vi.

Un ejemplo ayudará a hacerlo mucho más claro:

Escribes cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

pero se produce un error - que debería haber tecleado file1.txtnofile1.xt

Sin esta opción establecida, presione la flecha hacia arriba y luego presione la flecha hacia la izquierda y deje que se repita ... 35 veces, hasta que llegue al .xty luego escriba el extra t. Pulsaciones totales: 37 .

Con esta opción establecida, puede (por ejemplo) presionar la flecha hacia arriba una vez, luego Escape para el modo de comando, 0 para ir al inicio de la línea y luego /xt[return]para llegar al xty luego puede escribir ipara el modo de inserción y escribir la t que falta. Esto puede parecer increíblemente complicado en algunos aspectos, pero si usted es un usuario de vim, estos comandos ya son muy conocidos. Pulsaciones totales: 9

Michael Durrant
fuente
1
Se puede usar un par de Alt+Bs o una Ctrl+Alt+] .en el modo Emacs también, por lo que este no parece ser un buen ejemplo para mí.
Mikel
2
En vista de que estamos golf: el modo Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi modo: Up, F, ., a, t, Enter= 7. :)
Mikel
@Mikel, olvidaste que el modo vi comienza en el modo Insertar, así que también tienes Escallí, es un calor muerto.
dragon788
5

No estoy seguro de si hay una ventaja directa. He sido viusuario por más de 20 años. También soy screenusuario por más tiempo, y de otros programas que usan viclaves. Es natural para mí preferir establecer el modo "vi" en bash. Pero también trabajo en cientos de servidores en mi trabajo, la mayoría están configurados en el modo predeterminado "emacs". Entonces necesito usar ambos modos. Pero en realidad es solo una cuestión de preferencia.

Arcege
fuente
Situación similar para mí: uso mucho vim, pero siempre he encontrado menos trabajo para ser competente en las teclas de línea de lectura predeterminadas tipo emacs (que pueden ser tan convenientes como el subconjunto vi) que agregar un cambio de línea al modo vi en cada nuevo sistema que encuentro.
jw013
1
No trabajo en cientos de servidores, pero uso sshrc para mantener mi configuración de bash similar entre diferentes computadoras cuando sshing. Por supuesto, eso no ayuda cuando estoy usando una máquina local que no tiene mis .bashrccosas en ella.
Kyle Strand
4

La principal ventaja es la edición modal de su línea de comando. Si está familiarizado con Vim y le gusta su filosofía, los beneficios deben ser obvios. Si tienes experiencia con él, la memoria muscular de tu dedo te hará editar tus comandos de bash a la velocidad de la luz.

Nota : si no le gusta la edición modal, debería aprender a aprovechar el modo (predeterminado) emacs. Aquí hay algunos atajos de teclado ingeniosos que funcionarán en cualquier proceso con readline, como bash.

rahmu
fuente
1

Si te acostumbras vi, lo configuras en modo vi como tu editor de shell. Esa sería la razón obvia. El otro es cuando bashno está disponible de forma predeterminada en algunos sistemas operativos (principalmente UNIX como AIX, Solaris), por lo que la función de historial de shell no está disponible, por lo que la forma en que obtiene los comandos pasados ​​configurando el editor de shell en vi, y Esc, Ctrl+ Ko Ctrl+L

Shâu Shắc
fuente
1

Puede permitirle navegar y editar fácilmente la línea de comandos utilizando los accesos directos de vim, por ejemplo, moverse rápidamente a una palabra a la derecha, eliminar una palabra.

Por los accesos directos predeterminados, cuando necesitas ir al final de la línea, necesitas Ctrl+ e, mientras que con set -o vi, simplemente presionas $, como en vim.

Hahn
fuente
1

Probablemente tarde para la fiesta, pero para mí usar el modo vi es más acerca de crear scripts interactivos ... por ejemplo

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

un ejemplo muy simple de lo que podría ser bastante complicado ... el uso lo ESCkvcoloca en una sesión vi donde puede modificar el script y luego :wqse ejecuta.

Walter Werner
fuente
1
Este puede ser un buen ejemplo del uso de bash en vimodo, pero es un mal ejemplo de código bash. (1) Usar la salida de lscomo la entrada a cualquier otro tipo de procesamiento es una mala idea. (2) La $(…)sintaxis para la sustitución de comandos se considera más legible que la `…`sintaxis. (3) Siempre debe citar variables de shell a menos que tenga una buena razón para no hacerlo y esté seguro de saber lo que está haciendo.
G-Man dice 'Reincorporar a Monica' el