Me encuentro haciendo lo siguiente casi todos los días
- Ejecuta un find (
find -name somefile.txt
) - Abra el resultado en
vim
El problema es que tengo que copiar y pegar el resultado de find
en el vim
comando. ¿Hay alguna forma de evitar tener que hacer esto? He experimentado un poco ( find -name somefile.txt | vim
) pero no he encontrado nada que funcione.
Gracias por adelantado
vim `find -name somefile.txt`
. @StuartPowers Alternativamente, puede usarlovim `!-1`
si ya usó este hallazgo si fue su comando anteriorPrueba esto:
:r!find /<path> -name 'expression'
Los resultados deberían aparecer en vim cuando se complete la búsqueda.
O
Tratar:
fuente
Si no le importa ejecutar el comando nuevamente: presione Upy agregue un
xargs
comando. O use la sustitución del historial y ejecuteHay una manera liviana de guardar la salida de un comando que funciona en ksh y zsh pero no en bash (requiere que el lado de salida de una tubería se ejecute en el shell principal). Pipe el comando en la función
K
(zsh definición más abajo), que k EEPS su salida en la variable$K
.Guardar automáticamente la salida de cada comando no es realmente posible solo con el shell, debe ejecutar el comando en un terminal emulado. Puede hacerlo ejecutándose desde adentro
script
(una utilidad BSD, pero disponible en la mayoría de los dispositivos, incluidos Linux y Solaris), que guarda toda la salida de su sesión a través de un archivo (todavía se necesita un poco de esfuerzo para detectar de manera confiable el último mensaje en el mecanografiado )fuente
Me gusta usar los ticks posteriores '(Está en la misma tecla que ~)
Los ticks posteriores ejecutan el comando dentro de los ticks y la salida puede ser utilizada por el comando. Lo anterior encontrará todos los archivos somefile.txt, lo que le permite usar
:next
para moverse por todos los archivos.Es muy útil si pasa un par de intentos refinando el comando, porque luego puede usar la sustitución del historial para repetir el comando para el editor.
fuente
Debo haber perdido el punto aquí, porque usaría:
(si supiera que solo hay uno en mi
:echo &path
) o, si los quisiera a todos:Editar: Whoa! Ok, así que hice perder el punto - desea que la lista que ha encontrado, no se abrieron los archivos reales? Intenta (de nuevo, desde Vim):
-- mi error :)
fuente
Como @davidmh señaló en los comentarios, puede usarlo
xargs
con la bandera-o
si desea usar una aplicación interactiva.Si no lo usa
-o
, probablemente estropeará el estado del terminal después de salir de vim. Si lo ha hecho, debería poder restablecer su terminal con el siguiente comando:fuente
Escribí una función
pvim
que hace lo que quieres. Si se canalizan varias líneaspvim
, ignora todas menos la primera, aunque podría extenderse para abrir varios archivos en vim.Úselo como:
que cargará el primer "foo.txt" en vim como si hubiera escrito:
vim $(find . -name "foo.txt | head -n1")
fuente
Aquí hay una
xargs
solución más simple que las ya mencionadas:La
-p
opción le dicevim
que abra cada archivo en una pestaña separada. Esto me parece más conveniente que usar tampones.fuente
Descubrí que abrir un archivo con la ayuda de
locate
in vim es extremadamente conveniente y mucho más rápido quefind
.El siguiente comando busca un archivo llamado
app.py
en la ruta que contiene el directorioMyPythonProject
.fuente