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?
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?
Respuestas:
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 ...
set -o vi
que 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).
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.
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.
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.txt
nofile1.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 .xt
y 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 xt
y luego puede escribir i
para 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
Alt+B
s o una Ctrl+Alt+]
.
en el modo Emacs también, por lo que este no parece ser un buen ejemplo para mí.
Up
, Ctrl+Alt+]
, .
, Right
, t
, Enter
= 8. Vi modo: Up
, F
, .
, a
, t
, Enter
= 7. :)
Esc
allí, es un calor muerto.
No estoy seguro de si hay una ventaja directa. He sido vi
usuario por más de 20 años. También soy screen
usuario por más tiempo, y de otros programas que usan vi
claves. 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.
ssh
ing. Por supuesto, eso no ayuda cuando estoy usando una máquina local que no tiene mis .bashrc
cosas en ella.
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
.
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 bash
no 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
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.
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 :wq
se ejecuta.
vi
modo, pero es un mal ejemplo de código bash. (1) Usar la salida de ls
como 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.