Corrigiendo .zshrc a ~/.zshrc

Corrigiendo .zshrc a ~/.zshrc

¿Hay alguna manera de establecer algún tipo de alias para que cuando lo haga:

cd some/directory
vim .zshrc

Lo hace vim ~/.zshrc?

Respuesta1

La respuesta es mucho más sencilla de lo que crees, porque estás haciendo la pregunta equivocada.

Si lo que realmente quiere decir es "¿cómo puedo crear un alias que me permita editarlo ~/.zshrcindependientemente de mi directorio de trabajo actual?" entonces la respuesta es simplemente:

alias zshconfig="vim ~/.zshrc" 

Este ejemplo es mío ~/.zshrcy lo uso con frecuencia.

Una opción aún mejor, sugerida por@mateen-ulhaqen los comentarios a continuación, sería:

alias zshrc="vim ~/.zshrc" 

En otras palabras, no intente asignar un alias al nombre del archivo ni a la ruta al nombre del archivo. Ambas cosas son posibles, pero podrían crear efectos secundarios impredecibles que le causen problemas más adelante, ya que@michael-homerha señalado.

Pero como sabes que tu preferido $EDITORes vim, simplemente utiliza un alias para viminvocar ese archivo en particular y deberías estar en el negocio. (Es mucho más seguro asignar un alias a una combinación específica de comandos y argumentos con una cadena inusual que es menos probable que se use fuera de contexto).

Sin embargo, en términos más generales, mi consejo es que no debería preocuparse por optimizar la secuencia de dos caracteres ~/, sino que debería acostumbrarse a escribirla. Continúa... estira el dedo meñique izquierdo como si fueras Eddie Van Halen practicando escalas. (¡Esto te ayudará a dominar vimmientras lo haces, ya que probablemente deberías acostumbrarte a presionar la Esctecla con el dedo meñique!)

A medida que mejoren sus habilidades de mecanografía, ganará memoria muscular para la ~/secuencia, lo que le ayudará a escribir de manera confiable esa secuencia de caracteres cuando haga referencia a archivos en su directorio de inicio. Lo escribirá rápidamente a propósito y no lo escribirá por accidente.

La desventaja de depender de alias es que no importa cuánto puedan acelerarlo en la computadora de su hogar, lo ralentizarán cuando necesite sshingresar a algún contenedor Docker remoto en la subred privada de un cliente y descubrir que todos sus alias han desaparecido.

Respuesta2

Realmente no veo el sentido, pero sí. Lo que estás haciendo es más complicado que simplemente darle a un comando un nombre diferente o algunos argumentos predeterminados, por lo que necesitas una función, no un alias.

function vim {
  if [[ $# -eq 1 && $1 == .zshrc && ! -e .zshrc ]]; then
    set -- ~/.zshrc
  fi
  command vim "$@"
}

Explicación: cuando ejecute vim, invocará la función. En la última línea, command vim …invoca el comando externo y "$@"le pasa los argumentos que se pasaron a la función. En el medio, si hay exactamente un argumento y ese argumento es la cadena exacta .zshrcy no hay ningún archivo llamado .zshrcen el directorio actual, la línea de comando se reemplaza por ~/.zshrc. Ajuste estas condiciones si no son exactamente las que desea.

Respuesta3

Presumiblemente estás usando zsh como tu shell, lo cual notener una función de "alias global"que te permite hacer esto:

% alias -g .zshrc='~/.zshrc'
% echo .zshrc
/home/mwh/.zshrc

Eso es,en cualquier lugarque la palabra .zshrcaparece en la línea de comando, se reemplaza con ~/.zshrc, que luego está sujeta a la expansión de tilde como de costumbre. Tiene que ser una "palabra" propia, por lo que no se expandirá si es solo una subcadena de un nombre más largo. Esto funciona con cualquier comando.

Los alias globales son notoriamente problemáticos porque realmente se expanden a cualquier lugar, de manera silenciosa, por lo que podrías, por ejemplo, ejecutarlos rm .zshrcen otro directorio y apuntar a tus propios archivos de puntos. También se aplican dentro de funciones de shell, incluso aquellas ya definidas. En este caso, parece relativamente poco probable que cause un problema, pero tenga en cuenta la posibilidad de que ocurra. Puede nombrar específicamente un archivo en el directorio actual con ./.zshrcu obtener la cadena literal con \.zshrco rodeándola entre comillas.

información relacionada