Características más útiles de VIM que no son estándar en un IDE [cerrado]

30

Estoy considerando si debería comenzar a usar VIM nuevamente en lugar de un IDE. ¿Cuáles son las características más útiles de VIM que no son estándar en un IDE?

Casebash
fuente
3
¿Qué IDE usas? Muchos IDE tienen complementos VIM para que pueda editar como si estuviera usando VIM.
Brian R. Bondy
2
@Brian: ¿Seguramente no emularon todas las funciones avanzadas?
Casebash
1
Probablemente no todos, pero los que he usado son geniales para VS. Hay al menos 2 de ellos. viemu.com y github.com/jaredpar/VsVim
Brian R. Bondy
2
@Brian R Bondy: Ninguno de ellos se acerca a cubrir todas las características de vim. Rascan la superficie y realmente no hacen más
Daenyth
2
O podría ser realmente sensato y comenzar a usarlo emacs. ;-)
Orbling

Respuestas:

32

No creo que sean necesariamente las características avanzadas de VIM lo que lo hacen tan poderoso. Es el hecho de que nunca tienes que quitar las manos del teclado para hacer nada. Encontrar algo en un archivo enorme es tan simple como un par de pulsaciones de teclas. Abrir y cerrar varios archivos en la misma ventana también es increíblemente rápido.

Si bien puede no parecer intuitivo al principio, vale la pena su tiempo. Incluso si no lo usa como su IDE estándar (generalmente uso Visual Studio o Eclipse, por ejemplo), se encontrará usando VIM para abrir y editar archivos rápidamente porque se vuelve mucho más rápido que esperar a que el IDE carga.

Invierta el tiempo para aprender a usar VIM bien y nunca se arrepentirá. Yo diría que es comparable a aprender a tipear.

Bryan Hales
fuente
3
Esta respuesta es probablemente la característica más útil para Vim, también es una de las únicas. Cualquier cosa programada para Vim también se puede aplicar fácilmente a IDE, es solo procesamiento de texto después de todo ...
Tamara Wijsman
44
+1 Aunque soy un devoto de emacs, se aplica el mismo argumento. Los IDE modernos son demasiado "gráficos" para los editores de texto .
Orbling
22

Para mí, el :globalcomando es una aplicación asesina. Ejecutará comandos vim arbitrarios en cualquier línea que coincida (o no coincida) con una expresión regular.

Aquí hay unos ejemplos:

El comportamiento predeterminado es enumerar cada línea que coincida, por lo que:

:g/TODO:/

enumerará todas las líneas que contienen el texto "TODO:"

cambie 'Mickey' a 'Minnie' en cualquier línea que también contenga la palabra 'Mouse'

:g/Mouse/ s/Mickey/Minnie/

Los comandos pueden tener su propio rango, por lo que esto se eliminará de cada línea con "TODO:" a la siguiente línea en blanco:

: g / TODO: /., / ^ $ / d

Uso: g! ejecutar en cada línea que NO coincida con la expresión regular, por ejemplo, para reemplazar "emacs" con "vim", excepto en las líneas que contienen la palabra "sucks":

:g!/sucks/ s/emacs/vim/
Dave Kirby
fuente
Grandes trucos con comando global! Nunca había pensado en usarlos así.
Xavier T.
Eclipse admite la búsqueda de expresiones regulares de archivos, ya sea como archivos individuales, proyectos o en proyectos en el mismo espacio de trabajo. El reemplazo de expresiones regulares también es compatible en cierta medida, pero creo que vim tiene una capacidad de expresión regular mucho más poderosa.
Thomas Owens
16

La capacidad de eliminar todo lo que se encuentra entre un conjunto de símbolos emparejados es increíblemente útil. Por ejemplo, con bastante frecuencia, me encuentro con ganas de reemplazar una cadena en el código. Entonces, di"mientras el cursor esté en el bloque, se eliminará la cadena, mientras se mantiene ""intacto, y se colocará el cursor entre los dos caracteres de comillas. da"hace lo mismo, pero también elimina los caracteres de comillas.

Chinmay Kanchi
fuente
12
Aún mejor, ci"elimina y coloca el cursor en modo de inserción para que pueda comenzar a escribir de inmediato.
Konrad Rudolph
9

'Finalización de palabras clave en modo de inserción'. Ctrl-P y Ctrl-N en modo de inserción para buscar en el texto e intentar completar cualquier nombre de variable que esté escribiendo. Nunca he visto esto en ningún otro IDE y realmente lo extraño. La finalización del código en IDE simplemente no es lo mismo.

Lang Sharpe
fuente
2
También puede completar el código correctamente si lo desea, utilizando omni-complete. ^X^Oomni-completa en modo de inserción, si lo tiene habilitado. Pero tienes razón, me encuentro usando la finalización de palabras clave mucho más que omni-complete.
Chinmay Kanchi
@Chinmay: Creo que tienes el significado de "correcto" al revés. La finalización correcta del código completa cualquier cosa utilizando el principio de localidad, incluso si está escribiendo texto en lugar de código.
ninjalj
SlickEdit tiene una característica similar; y es muy parecido al IDE
user281377
8
No estoy de acuerdo por completo. Los IDE modernos (Visual Studio, Eclipse, ...) tienen una especie de terminación de código que rivaliza (¡y de hecho supera!) Ctrl-N fácilmente . Si no has visto esto en IDEs, mira nuevamente las versiones actuales. Y Omni-Complete desafortunadamente no funciona correctamente.
Konrad Rudolph
8

Otra característica que encuentro increíblemente útil es la capacidad de cambiar la sangría. :15,30>>sangra todas las líneas desde 15-30 (inclusive) dos veces, mientras que :15,30<<sangra las mismas líneas dos veces.

Chinmay Kanchi
fuente
Si bien me encanta la función, casi todos los IDE tienen sangría de bloque (y sangría).
Sean McMillan
Me parece =tan útil, si no más, útil que <<y >>.
greyfade
6

El comando dd (eliminar la línea actual). Yo uso este mucho.

Además, poder escribir algo como 3dd y eliminar las siguientes 3 líneas es maravilloso. Nunca he visto esto en otro editor = D

Alex Hart
fuente
Netbeans casi tiene esto, ^ X sin selección cortará la línea actual.
Alan Pearce
@ Alan: No, NetBeans tiene jVi :)
Dr. Hannibal Lecter
^ K elimina la línea y ^ u3 ^ k eliminaría 3 líneas en emacs. shift-delete hace lo mismo en visual studio.
Raoul
Alan: dd también corta la línea actual en ese sentido que se puede insertar con p tarde
user281377
3
@Raoul, sabemos que hay una serie de emacs de n combinaciones de 3 teclas para replicar cada comando vim, aún así, 3dd es poesía.
cbrandolino
6

El ccomando Por ejemplo, ci"para cambiar entre comillas. cwpara cambiar de palabra Muchos trucos útiles con él.

Daenyth
fuente
5

El .comando Repite el último comando.

Adam Jaskiewicz
fuente
+1 a esto y a todas las demás funcionalidades relacionadas con macros.
P Shved
3

Esc ! }le mete el párrafo actual apagado a un filtro de línea de comandos como fmto wco whichy los resultados volver al editor.

Jé Queue
fuente
3

Acceso rápido a la línea de comandos. CTRL + Z o: wqa me dará una línea de comando en menos de 1 segundo sin que mi mano deje el teclado.

luispedro
fuente
1
+1 Esa última parte es la sección crucial para casi todos los beneficios: sin que mi mano deje el teclado
Orbling
... o :!/bin/bash. Yo uso con :!bastante frecuencia.
greyfade
Usualmente uso:sh
David Brown
3

Que puedo usar hjklpara mover el cursor sin tener que abandonar el inicio del teclado. Tengo la mayoría de los programas (como lectores de PDF), que le permiten cambiar las combinaciones de teclas, configurar para usar las teclas de movimiento Vim para desplazarse, etc.

Anto
fuente
1

Esto es bastante difícil de responder, debido en parte a la vaguedad de la pregunta, y al hecho de que los IDE difieren, y muchos proporcionan características que otros no (y el hecho de que solo tengo algunos de ellos).

Sin embargo, lo que creo que distingue a Vim de otros editores (sí, incluso Emacs, en este caso) es que realmente es un gran editor . Con el paso del tiempo, he usado muchos editores, y honestamente puedo decir que muy pocos vienen con un conjunto tan completo de funciones para manipular texto, como lo hace Vim.

Mi estilo de manipulación de texto, por ejemplo, incluye muy a menudo el uso de duplicación (línea / selección de varias líneas) y movimiento (línea / selección de varias líneas) hacia arriba y hacia abajo, para lo cual hace tiempo que he definido atajos rápidos. Echo de menos esas características en la mayoría de los IDE (aunque he oído que ReSharper para VS tiene algo similar).

Torre
fuente
1

¿Sabías que hay un complemento vi para eclipse ? Su precio es de 15 euros (US $ 20 Ish) pero es lo que vale la pena. No más dden el medio de un documento, y faltan todas las pequeñas cosas útiles.

Quizás un poco fuera de tema, pero pensé que valía la pena señalarlo.

lorenzog
fuente
0

Dependiendo del idioma que esté programando, quédese con el ide u obtenga el ide que ofrezca la mayor cantidad de refactorizaciones que pueda encontrar, obtenga un compartimiento para Visual Studio si está haciendo C #, Intellij para Java o Visual Assistance para Visual Studio, maximiza las refactorizaciones en eclipse o netbeans.

Deberíamos pasar de manipular texto a manipular código, las herramientas de refactorización le brindan esa capacidad. Si vim te ofrece todas las funciones, por mi parte, ya no quiero tratar con un editor de texto

Harald Scheirich
fuente
3
Esto es prácticamente una tontería. Sí, la refactorización es una herramienta importante, pero el código no se escribe solo. Un buen editor de texto contribuye mucho más a la productividad de un programador que una buena herramienta de refactorización.
Chinmay Kanchi
-1

Seleccionar columna de tabla

Esto no parece estar en los IDE populares, y si lo es, lo mantienen bien oculto. Esto es realmente útil para probar expresiones regulares contra una columna en el archivo de datos CSV.

sal
fuente
-3

La mayoría de los IDE no le permiten dividir la pantalla. Me encanta esa característica en VIM.

projecktzero
fuente
55
¿La mayoría de los IDE no? Creo que la mayoría lo hace, al menos los que he usado.
Anto
¿Puedes dar algunos ejemplos?
projecktzero
1
La mayoría de los IDE manejan la pantalla dividiéndose de manera diferente a Vim / Emacs. Lo hacen con pestañas por lo general. Estos son más difíciles / imposibles de manipular con el teclado (compare tener 50 archivos abiertos en Emacs versus tener 50 archivos abiertos en Eclipse y verá que Emacs gana rápidamente).
jsternberg
La mayoría de los IDE que tienen pantalla dividida no proporcionan métodos fáciles de navegar / ajustar a-la<C-w>
Wayne Werner