Navegar por varias capas de directorios anidados es a menudo un dolor. En Firefox, es fácil porque tienen marcadores. Entonces, lo que me gustaría hacer para marcar un archivo es escribir:
$ go --add classes "repo/www/public/util/classes"
Luego, para ir a este directorio, escribiría:
$ go classes
Anteriormente he usado enlaces simbólicos para lograr algo similar, pero no quiero saturar mi directorio de inicio. Hay muchas otras características que podrían resultar útiles. Por ejemplo, me gustaría poder comenzar a escribir go cl
y luego presionar la pestaña para autocompletar. A veces tengo varias copias de un repositorio desprotegido, por lo que sería útil para el programa permitirme crear múltiples contextos y establecer el marcador en relación con el directorio base de contexto.
Entonces, antes de comenzar a armar mi propio conjunto de guiones, ¿ya hay algo como esto?
Respuestas:
Estuve buscando una herramienta de marcadores de shell durante demasiado tiempo, y no estoy satisfecho con ninguna de las soluciones que encontré.
Sin embargo, eventualmente me encontré con una gran herramienta universal: el buscador difuso de línea de comandos .
Principalmente le permite "encontrar difusamente" archivos (verifique la rica animación GIF en el enlace de arriba), pero también le permite enviar datos de texto arbitrarios y filtrar estos datos. Entonces, la idea de los accesos directos es simple: todo lo que necesitamos es mantener un archivo con rutas (que son accesos directos) y filtrar este archivo de forma difusa. Así es como se ve: escribimos el
cdg
comando (desde "cd global", si lo desea), obtenemos una lista de nuestros marcadores, seleccionamos el necesario con solo presionar unas pocas teclas y presionamos Enter. El directorio de trabajo cambia al elemento seleccionado:Es extremadamente rápido y conveniente: generalmente solo escribo 3-4 letras del elemento necesario, y todos los demás ya están filtrados. Además, por supuesto, podemos movernos por la lista con las teclas de flecha o con
Ctrl+j
/Ctrl+k
.El artículo detallado sobre esta solución de accesos directos / marcadores está aquí: accesos directos difusos para su shell .
fuente
Creo que estás buscando algo como autojump . Debe desarrollar un poco de CD para desarrollar un conjunto de "pesos clave" que se correlacionen con la cantidad de tiempo que se pasa en un directorio dado. Luego, suponiendo que haya pasado mucho tiempo en ese directorio de 'clases', puede saltar directamente escribiendo
Puede ver sus "pesos clave" con
fuente
f
: github.com/clvv/fComo dice saeedn, los alias son un buen mecanismo. La cáscara del golpe también tiene un mecanismo incorporado para saltar directamente a una ubicación:
CDPATH
. Ajústelo comoPATH
, pero se usa encd
lugar de buscar programas.Desde la página del manual:
Yo mismo, he combinado esto con un directorio que tiene enlaces simbólicos a donde me gustaría ir:
Esto tiene el inconveniente de que el directorio no parece ser correcto, pero puede rectificarse usando
cd -P
o configurandoset -P
.fuente
alias C='cd -P .'
lugar de hacerloset -P
, ya que para los enlaces simbólicos del sistema no me importa estar en el directorio de enlaces simbólicos.help cd
y todavía no entiendo lo que hace la opción -P.mkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Puede combinar las funciones de búsqueda de historial e historial existentes de Bash. Presione Ctrl-Rpara comenzar la búsqueda inversa incremental, luego comience a escribir la parte de la ruta más probable que sea única.
Puede seguir escribiendo letras hasta que termine en el
cd
comando más reciente que involucra ese directorio, o puede presionar Ctrl-Rnuevamente para volver al historial al siguiente comando más nuevo que coincida con lo que ha escrito hasta ahora.Hago esto todo el tiempo.
En realidad, lo llevo un paso más allá. Una vez que empiezo a descubrir secuencias de comandos que vale la pena mantener en el historial pero que no vale la pena comprometer con un script de shell, empiezo a encadenarlos
&&
y;
combinarlos para poder realizar una búsqueda inversa de una subcadena de ese comando largo, presionar Entery ejecutar toda la secuencia en una vez.Por ejemplo, así es como construyo y ejecuto uno de mis programas durante el desarrollo:
Lo hago desde el directorio de instalación, que se encuentra debajo del directorio de origen de nivel superior. Al envolver la parte
cd
, construir e instalar en un subconjunto, me aseguro de que, sin importar lo que ocurra durante este proceso, termine de nuevo en mi shell normal sin cambiar nada. Solo si eso tiene éxito (&&) puedo iniciar el programa construido e instalado. Puedo encontrar esto en mi historia con solo un Ctrl-Rmomento sta, que es todo lo que necesito generalmente para encontrar de manera única esta secuencia de comandos.Otro ejemplo de cómo uso esto es la secuencia que entra en la construcción de RPM para este mismo programa. La mayor parte del trabajo tedioso está en scripts de shell, pero todavía hay algunos comandos que normalmente tendría que escribir para hacer todo el trabajo de construir y desplegar los RPM construidos, que ahora rara vez tengo que volver a escribir, porque Bash mantiene en la historia para mi.
Combine todo esto con
export HISTSIZE=bignum
yshopt histappend
y que acaba construido una memoria de elefante de comandos.Otra solución que codifiqué una vez está en mi respuesta a otra pregunta aquí . Es posible que deba adaptarse para sus propósitos, y solo maneja
cd
comandos, mientras que la opción de búsqueda de historial funciona en todas partes y para cada comando.fuente
Yo mismo uso
alias
para acortar caminos largos que visito a menudo. Puede poner su conjunto dealias
es en subashrc
, para que bash pueda recordarlos cada vez que inicie sesión. Y afortunadamente bash agrega alias para autocompletar.Escribiría algo como esto para su caso:
alias go-classes="cd ~/repo/www/public/util/classes"
fuente
Quizás estés buscando bashmarks (en github).
Desde el archivo Léame:
Bashmarks es un script de shell que le permite guardar y saltar a directorios de uso común. Ahora admite la finalización de pestañas.
fuente
Esto no está completo ni es infalible, solo un borrador para comenzar. Al agregar lo siguiente en su
~/.bashrc
, tendrá tres comandos para agregar eliminar y enumerar los marcadores del directorio (que se basan en alias de shell, por lo que también obtendrá la finalización automática).El uso es bastante simple.
bmadd
con un argumento agrega un alias con el nombre del argumento. Este alias solo crea un CD en el directorio en el que se estableció. Sin un argumento, utiliza el nombre de directorio actual como el nombre del alias. De manera similar,bmdel
elimina un alias si existe ybmlist
enumera los marcadores actuales.p.ej
fuente
Me encontré con la misma necesidad hace un tiempo y decidí reunir un par de guiones para ayudarme a marcar rutas absolutas / relativas y asignarlas a nombres más cortos que pueda recordar fácilmente.
El script es muy fácil de usar y simplemente creará una función con el nombre corto que proporcione como un alias al directorio en el que desea saltar. Todo lo que necesita hacer es simplemente escribir ese nombre corto y lo llevará al directorio marcado.
Aquí hay un enlace a la fuente del script marcador. Por cierto, lo llamé The Bookmarker.
Uso
Una vez instalado, es bastante trivial de usar.
Para marcar un directorio:
Para navegar a un directorio marcado:
Para ver lo que se ha marcado:
Para eliminar un directorio marcado:
Para obtener más ejemplos, instrucciones de instalación, etc., consulte la documentación muy detallada .
fuente
cdargs
es la mejor herramienta para marcar el directorio.Para ver ejemplos de uso, consulte los marcadores del video del comando cd en YouTube.
Ejemplo de uso
cdargs
es una GUI ncurses para que pueda navegar visualmente dentro de su shell. Una vez que está instalado, lo configura en un shell determinado obteniendo un script de shell:Esto habilita varias funciones a las que puede llamar desde su shell.
Invocar la GUI:
Resultando en este tipo de GUI:
Puede usar las teclas de flecha para moverse hacia arriba y hacia abajo para navegar por la lista. La flecha izquierda ( ←) sube un nivel en el árbol de directorios, una flecha derecha ( →) profundizará en un directorio.
marcando directorios:
Puede usar cel directorio actual que está navegando o puede aagregar el directorio que está resaltando actualmente con el cursor.
modos de operación:
cdargs
es un poco como vi / vim en este sentido donde tiene esta noción de modos . Hay 2 de ellos, navegación (B) y listado (L). Puede ver en qué modo se encuentra a través de la pantalla en la parte inferior de su shell.Modo de listado:
Modo de navegación:
Puede modificar su modo presionando la tecla de tabulación ( TAB).
Esta es solo la punta del iceberg, consulte la página de manual (
man cdargs
) y también la ayuda integrada para obtener más información.fuente
La mejor herramienta para esto es: wcd . He probado muchas otras herramientas, y esta se usa exactamente de la manera que usted pregunta y es mejor en muchos sentidos que todas las soluciones anteriores.
fuente
Las otras respuestas son geniales y específicas. Otra forma de verlo es usar un procesador de macro de teclado que pueda hacer casi cualquier cosa que se te ocurra.
Echa un vistazo a AutoKey. Puede sustituir frases como la autocorrección de un procesador de textos o el historial de bash y también puede ejecutar un script de python en una tecla de acceso rápido que defina, que puede hacer casi cualquier cosa y también enviar pulsaciones de teclas a su dispositivo de entrada de caracteres, como si las hubiera escrito.
El único "inconveniente" que tiene (en relación con esta pregunta) es que necesita una interfaz gráfica de usuario para ejecutar in-gnome o kde. Las otras respuestas no tienen este requisito.
fuente
Hay otra alternativa llamada z .
Aprende sobre cada cambio de directorio:
Luego puede cambiar a ese directorio más tarde con coincidencia difusa:
fuente
Apparix es otra herramienta que hace esto. Una de sus características útiles es que puede saltar directamente a los subdirectorios de la marca y completar la pestaña en esos subdirectorios.
fuente
Otra solución que, creo, es
autojump
yz
esfasd
.Realiza un seguimiento de los directorios que visita y
z dir-name
cambiará al directorio con el nombredir-name
que usa con más frecuencia. También tiene alguna funcionalidad para archivos de uso frecuente.Puede clonarlo desde: https://github.com/clvv/fasd
La instalación es sencilla, clone, realice la instalación y luego modifique su
.bashrc
(o.zshrc
etc.).fuente
Debe agregar un alias a su
.bashrc
o.bash_profile
.Ahora, supongamos que desea un acceso directo
~/Desktop/Coding/Projects
para invocar el que escribirágoto_Projs
. Debe agregar la siguiente línea al archivo abierto en el editor de texto:alias goto_Projs='cd ~/Desktop/Coding/Projects'
Ahora haga lo que su editor de texto quiera que haga para guardar (en
/User/<yourusername>/
o~/
por supuesto) y salir, y cuando se devuelva el indicador de comandos de la shell, vayasource ~/.bash_profile
Su alias ahora debería estar disponible para invocar como se describió anteriormente.
fuente
Utilizo el método de agregar un comentario al final del comando y luego invocar
ctrl R
para invertir la búsqueda del comentario. Esto tiene las siguientes ventajas:ctrl R
ctrl R
ytab
sobre la marcha para hacer pequeños ajustes al comando en sí mismo, lo que hace que el comentario sea una especie de acceso directo genérico a una familia de comandos similaresfuente