Vim tiene un modo Ex que se puede ingresar ingresando Q, y un modo de línea de comando con el que se puede ingresar q:. Una queja común entre los nuevos usuarios de vim es que ingresan a estos modos accidentalmente cuando intentan salir de vim. Como tal, desactivo estas teclas en mi ~/.vimrc
para evitar golpearlas accidentalmente (particularmente q:):
map q: <Nop>
nnoremap Q <nop>
Aunque he leído la documentación de vim en Ex , soy un usuario de Vim con experiencia moderada y entiendo la idea básica detrás de ello, todavía me cuesta encontrarle algún uso en mi uso diario de vim. En general, parece menos útil que simplemente ingresar un comando de línea de comando vim estándar con el prefijo :, ya que los cambios no se repiten de inmediato.
¿Ex tiene algún uso práctico diario en Vim moderno? ¿Hay algo que sea más fácil de hacer en modo Ex que con los comandos estándar? ¿Cuál es la diferencia entre el modo de línea de comando y el modo ex?
Q
yq:
son bastante diferentes Solo te refieres a laQ
derecha?q:
específicamente, y lo mencionó como, entre las dos secuencias clave, con la que tiene más problemas. Y dos de las respuestas aquí pueden ser útiles para las personas que lo están buscando con el término correcto.q/
y quéq:
hacer, probablemente los considerará algunos de los comandos más útiles en Vim. Y sí, ya sabes cómo usarlos, simplemente aún no sabes lo que hacen. Mira este screencast para averiguarlo.Respuestas:
Q
es, como encontraste, el modo ex. No es del todo útil usar de forma interactiva, pero existe porque Vim se puede usar para emular el viejoex
binario. De hecho, muchos sistemas proporcionan elex
comando simplemente simblinándolovim
.q:
o:<C-f>
, en su lugar, proporciona una forma de examinar el historial de la línea de comandos y editarlo como un búfer normal. Esto facilita encontrar un comando anterior que ejecutó, editarlo con los comandos normales de Vim y luego ejecutar el comando modificado. Los comandosq/
yq?
existen para proporcionar la misma funcionalidad para el historial de búsqueda.fuente
Vim en modo Ex es útil cuando:
Básicamente
vi
es el modo visual, por loex
tanto, el modo Vim Ex es solo una emulación deex
(todavía ejecutan el mismo código), por lo que es posible acceder al modo de comandoex
desde dentro de vi y viceversa. En realidad, hay dos modos: modo Ex (vim -e
) y modo Ex mejorado que permite comandos más avanzados que el modo Ex compatible con vi (vim -E
). Ver: ¿Cuál es la diferencia entre el modo Ex y el modo Ex mejorado?Editar archivos de forma no interactiva es el uso más común y las personas lo usan de manera similar
sed
yawk
, sin embargo, están más orientados a la transmisión: solo leen el archivo hacia adelante de principio a fin (no están diseñados para trabajar con varias líneas ) mientrasvim
está orientado al búfer: puede avanzar y retroceder en el archivo a su gusto, lo que lo hace tan poderoso.Básicamente:
Sin embargo, la gente parece abusar de él por tratar de editar archivos y la verdad es que no edita archivos. En segundo lugar, sus opciones como in-place (
-i
) son extensiones de FreeBSD no estándar y pueden no estar disponibles en otros sistemas operativos. Por lo tanto, si desea evitar el código no portable, la sobrecarga de E / S y los efectos secundarios negativos (como destruir enlaces simbólicos), debe usarex
cuál es el editor estándar basado en comandos de UNIX (junto coned
) BashFAQ .Otras cosas que encuentro útiles en el modo Ex es usarlo como un patio de juegos (similar a la
python
consola) donde puede ejecutar muchos comandos seguidos, trabajar / depurar expresiones regulares, verificar la configuración de vim, ejecutar comandos externos o trabajar con registros, etc. .Por ejemplo:
que es más fácil en el modo Ex que en el modo normal (donde solo puede ver su último comando).
Usos practicos
Tengo los siguientes alias en mi
.bash_aliases
:Nota: El uso
bufdo
no esex
un método compatible con POSIX (según el manual ), por lo que puede considerar usarlo en sufind
lugar. El!
se utiliza para forzar el cambio de las memorias intermedias sin guardar (de lo contrario, se genera una advertencia).El primero que estoy usando para recortar los espacios finales en todos mis archivos fuente, por ejemplo:
El segundo convierte todas las pestañas en espacios (recursivamente), por ejemplo:
Para mí, usar
retab
es suficiente, pero hay algunas desventajas descritas aquí . Agregue extra-V
para aumentar la producción de verbosidad.Tenga en cuenta que los ejemplos anteriores usan zsh / bash4 globbing (
**
), así que asegúrese de que su shell lo admita y esté habilitado.Para ver ejemplos más prácticos (como analizar archivos html), consulte:
¿Cómo convertir un archivo de código fuente en HTML?
P.ej
También aprenda más sobre el modo Ex en:
fuente
ex
lo que es coned
,sed
oawk
?ex
modo. No entiendo por qué tienes un bang (!
) en tu comando detrim
aliasbufdo
. ¿No abandonará eso todos los cambios en todos los archivos excepto el último? ¿Si no, porque no?!
básicamente no funcionará, ya que cada vez que se cambia el búfer,ex
se queja de los cambios no guardados (y estamos guardando los cambios al final conxa
). La advertencia se puede deshabilitar, pero es mucho más fácil de agregar!
.!
comando fallará si el búfer no se puede abandonar, pero no especifica explícitamente que!
hará que el búfer no se descarte ... Entonces, "abandonado" en este caso significa "descartado" , porque no contiene nada no escrito en el disco "? ¿O que? (Estoy mirando:help bufdo
)Raramente uso el modo ex, pero cuando lo necesito estoy agradecido por su existencia.
A veces accedo a los sistemas a través de ssh a través de VPN, y estas conexiones a veces pueden ser lentas. Para empeorar el problema, a veces necesito editar un archivo en el lado remoto que, además de estar detrás de ssh y VPN, está sobre una conexión en serie lenta (por lo tanto, 9600 baudios más mucha latencia de red).
En momentos como este, tener retroalimentación visual y actualizaciones de pantalla se vuelve más un obstáculo porque lo que veo se retrasa (el efecto es como hablar por un micrófono pero con parlantes lejos, como en un estadio deportivo. Las acciones de uno se vuelven entrecortadas). y a veces confundido debido a la retroalimentación tardía).
En este caso, hacer que los cambios no se repitan es una ventaja útil, ya que puedo hacer más en menos tiempo cuando no estoy esperando que la pantalla se actualice.
Cuando termine de hacer las ediciones, vuelvo al modo visual para una actualización de pantalla única para revisar mi trabajo. Luego puedo volver al modo ex o guardar porque he terminado.
fuente
La ventana de línea de comandos es útil para escribir comandos largos y complicados. Dado que el historial de comandos se abre como una ventana, puede usar cualquier comando de vim navigation o edición / mapeo.
Supongamos que desea editar un comando de sustitución largo que ejecutó una vez, pero cometió un error:
Para cambiar la cadena de búsqueda, no puede usar movimientos vim como
b
en la línea Ex para navegar (aunque creo que hay asignaciones clave para esta navegación). En cambio, la mayoría de las personas presionarían la tecla de flecha izquierda varias veces.Una mejor manera: presione
q:
para ir a la ventana de la línea de comandos,k
para avanzar hasta el último comando y navegar con movimientos normales a la parte del comando que desea cambiar. ¿Quieres cambiar una palabra completa, no hay problema:ciw
.fuente
q:
es la línea de comandos Ex? La ayuda solo usa la frase "Ex" para el modo que apareceQ
, pero eso no es compatible con la edición estándar de vim a la que se refiere, solo loq:
hace, que la ayuda simplemente llama 'Modo de línea de comando'. Sé que confundí a los dos al principio, pero probablemente deberíamos asegurarnos de tener clara la distinción aquí.:help q:
antes de decidir usar esa frase, pero podría estar confundido acerca de la terminología.:
, pero podría estar usando eso incorrectamente.q:
no abre una línea de comando Ex. Abre la ventana del historial de comandos , en la que se pueden editar los comandos Ex actuales y anteriores. La línea de comando Ex es lo que obtienes cuando presionas:
en modo Normal.:
comandos como comandos 'Ex'. En mi humilde opinión, solo los comandos que están realmente disponibles en Ex deben considerarse comandos Ex.Una persona con visión parcial me dijo que se está quedando ciego que está cambiando a ex, así que ese es un uso. Yo mismo soy considerablemente mayor que vi, y cambié de ed a ex hace mucho tiempo (sí, lo sé, "ed es el editor estándar"). Lo único que hago en modo vi es un% de rebote para que coincidan los parens cuando escribo el código Lisp.
fuente
ex
embargo , no recuerdo si se mencionó específicamente.Además de los usos ya mencionados aquí, ex también es una forma de editar archivos en la consola de Linux si se encuentra en la plataforma S / 390 y la consola está orientada a la línea en lugar de a la pantalla.
fuente
Probablemente no. Sin embargo, aunque ingresar al modo Ex no es realmente útil, aprender los comandos Ex sigue siendo útil, particularmente porque usa comandos de edición ex con
:g/
comandos globales para operar en líneas coincidentes.fuente
El "ex" original era la versión mejorada del editor de texto "ed" en Unix. En 2BSD se agregó un modo visual y el nuevo editor se llamó "vi".
Si uno quiere usar la línea de comando ex, cambiará al modo de comando con la tecla ":". Entonces, en mi mejor entendimiento, ex no está allí para la nostalgia, es la parte para proporcionar el modo de comando.
También puede ingresar a su modo de inserción al
luego presione "enter y escriba su texto. Salga con ^ c. O escríbalo todo en una línea de comando, como
fuente