Últimamente, he estado recibiendo mucho esta pregunta: "¿cómo conseguiste que tu terminal se vea como se ve?" Si has notado mi terminal y tienes curiosidad acerca de cómo lo configuré, ¡este es el tutorial para ti! Por supuesto, lo que aprendas aquí será suficiente para comenzar a crear tu propio símbolo de comando personalizado, también!
Antes de comenzar, quiero dejar algo muy claro. Ciertamente soy un entusiasta de la línea de comandos, pero no soy un profesional de la línea de comandos. Me siento como en casa en una terminal, pero estoy muy lejos de saberlo todo. Así que este es el trato: les mostraré cómo configuré mi terminal, pero eso no significa que podré explicar cada línea de código que veremos. Hay algunas cosas aquí que son como son solo porque eso es lo que funciona ... y no siempre sé al 100% por qué.
Con ese descargo de responsabilidad fuera del camino, veamos lo que estamos haciendo.
Así es como se ve mi línea de comandos:
Si no estás seguro de lo que estás viendo, déjame explicarte:
nave nodriza
. Eso es seguido por dos puntos.dominar
o tilt_in_post_class
en la captura de pantalla). Además, si el directorio de trabajo está limpio, ese texto aparece en verde; De lo contrario, aparece en rojo..Ahora juntemos algunas piezas preliminares, antes de escribir algunas secuencias de comandos de shell.
Primero, está la combinación de colores. Es posible que lo reconozca como el esquema de color Solarized de Ethan Schoonover. Es bastante sorprendente, y lo he usado tanto en el terminal como en Vim desde que lo descubrí. Si quieres usarlo en la Terminal, tendrás que instalar el tema. La Terminal en Snow Leopard no era compatible con xterm-256color, por lo que tendrás que seguir algunas instrucciones especiales en la página de GitHub Solarizado para que funcione si aún estás en ese SO.
Si te has mudado a Lion, puedes instalar el .terminal
Archivos que encontrarás en la carpeta xterm-256color. Una vez que tenga los instalados (solo haga doble clic en ellos), debería poder seleccionar el que desea en las preferencias de Terminal. No olvides establecerlo como el esquema por defecto..
Lo siguiente que hay que saber es que no estoy usando el shell bash predeterminado en mi Terminal. En cambio, me cambié a zsh, que es básicamente muy compatible con bash, pero tiene algunas adiciones agradables, como una mejor finalización de pestañas. A continuación le indicamos cómo hacerlo: abra las preferencias del sistema Mac y vaya a "Usuarios y grupos". Desbloquee el panel haciendo clic en el candado en la parte inferior e ingresando su contraseña. Luego, haga clic derecho en su usuario en la lista y elija "Opciones avanzadas". En el campo "Login Shell", cambie de / bin / bash
a / bin / zsh
. Es así de simple.
Siguiente paso: obtener la fuente correcta. Estoy usando Inconsolata en 15pt. Es una fuente monoespacial gratuita que me encanta mirar todo el día. (Además de usarlo en la Terminal, lo uso en Vim y TextEdit). Puedes configurar tu fuente predeterminada desde las preferencias de la Terminal, donde eliges la combinación de colores..
Otra cosa pequeña es el tamaño de su ventana: Abra Preferencias de Terminal> Configuración y haga clic en la pestaña Ventana; parcialmente abajo, puede elegir el número de columnas y filas que desee; Yo uso 130 columnas por 30 filas.
¿Recuerdas el indicador de nivel de batería? Bueno, eso requiere un pequeño script del desarrollador Steve Losh; simplemente cópielo en un archivo y guárdelo como un archivo python; ya que ~ / bin
esta en mi terminal CAMINO
, He guardado el archivo en ~ / bin / batcharge.py
. Como señala, esta secuencia de comandos solo funcionará en Mac OS X, por lo que si está ejecutando zsh en otro sistema, tendrá que omitir esta parte..
Por último, pero ciertamente no menos importante, hay oh-my-zsh. De acuerdo con el repositorio de Github, esto es solo "Un puñado de funciones, auto-ayudantes completos y cosas que te hacen gritar '¡OH MI ZSHELL!'"
¿Por qué usarlo? Para mí, decidí probarlo en un momento dado y lo dejé instalado. Si usas mucho el terminal, pulsa un poco alrededor de oh-my-zsh cuando tengas tiempo. Puede que te sorprenda lo que encontrarás. La instalación de oh-my-zsh es bastante simple: simplemente siga las instrucciones de configuración en el archivo README; son bastante sencillos.
Ahora tenemos todas las partes necesarias en su lugar. Estamos listos para comenzar a crear nuestro terminal personalizado..
Cuando instaló oh-my-zsh, se instaló en ~ / .oh-my-zsh
. Pop que abre. Verás dos carpetas de notas: temas
y plantillas
. Dentro plantillas
, encontrarás un archivo llamado zshrc.zsh-plantilla
Esta es una plantilla para ti. ~ / .zshrc
expediente. Si ha personalizado su terminal antes, sabrá que el .Bashrc
archivo es donde se almacenan sus personalizaciones cuando está utilizando un shell bash. los .zshrc
Es lo mismo, a excepción de la shell zsh. Así que abre ese archivo de plantilla; no tienes que saber qué es exactamente lo que está pasando; después de todo, hay muchos comentarios en el archivo que pueden no tener sentido. Una cosa aquí es importante de usar. Note la línea que dice esto:
ZSH_THEME = "robbyrussell"
Ese es el nombre del tema que tu terminal está usando. Mira en la temas
carpeta: verás un robbyrussel.zsh-tema
expediente. Lo que vamos a hacer es crear un tema propio, para que pueda reemplazar esa cadena con el nombre de nuestro nuevo archivo. Increativamente he llamado el mío "doble" porque se encuentra en ambos lados de la terminal.
Cualquier otra personalización que desee realizar en su entorno zsh puede realizarse en este archivo. Si usas mucho el terminal, echa un vistazo oh-my-zsh
plugins (en la plugins
carpeta): un montón de cosas útiles allí.
No te olvides de copiar a zshrc.zsh-plantilla
a su directorio personal y renómbrelo a .zshrc
antes de hacer sus cambios. Ahora en el temas
carpeta, cree un archivo con el nombre del tema que estableció en su .zshrc
expediente. Asegúrate de darle la .zsh-tema
extensión. Estamos listos para construir nuestro tema personalizado..
Lo más importante en su archivo de tema es el RÁPIDO
variable. Su contenido es su línea de comandos. Para tener una idea de esto, simplemente comience con esto en su archivo de tema:
PROMPT = 'myPrompt =>'
Abre una nueva ventana de Terminal y deberías ver esto:
Está bien, vamos a trabajar. Vamos a tener que escribir varias funciones, pero comenzaremos con el RÁPIDO
variable. Puede que no se note cuando se mira el terminal, pero en realidad hay tres líneas para mi indicador. La primera es una línea en blanco, solo para darme un respiro. El segundo tiene toda la información, y el tercero tiene la flecha. Esa tercera línea es donde realmente escribe el comando. Entonces, aquí está nuestro comienzo:
PROMPT = '$ reset_color →'
Sí, puede hacer cadenas de varias líneas que fácilmente en shell scripting. Pero ¿qué pasa con $ reset_color
? Esa es una variable que oh-my-zsh define para nosotros; restablece el color de la salida. Esto requiere un breve desvío para discutir cómo coloreamos diferentes palabras en el indicador. Verá, hay un código, una serie de caracteres, que cambia el siguiente texto a un color. Obviamente, hay un código para cada color disponible. No te preocupes, hay otras variables para los otros colores; No tienes que aprender los códigos. Cuando lleguemos a la tercera línea, sin embargo, queremos restablecerlo al color de texto predeterminado; entonces, usamos el $ reset_color
variable.
Si tienes curiosidad por el carácter de la flecha, es la flecha hacia la derecha de Unicode (U + 2192, →). Eso es todo.
Entonces, ahora nuestro mensaje se ve así:
Mirando esbelto. Ahora agreguemos el nombre de la computadora y el directorio de trabajo. Esto es todo para esa segunda línea de nuestra RÁPIDO
variable.
$ fg [cian]% m: $ fg [amarillo] $ (get_pwd)
Comenzamos por establecer el color del texto en cian; parece que estamos obteniendo ese código de color de una matriz asociativa o hash; mientras no lo uso hay una $ bg
hash que cambia el color de fondo en lugar del color de primer plano (texto).
Después de configurar el color, tenemos %metro
esto da salida al nombre de la computadora. Después de los dos puntos y el espacio, cambiamos el color del texto a amarillo. A continuación, usamos el signo de dólar y los paréntesis para agregar la salida de la función get_pwd
. Esto dará salida a nuestro directorio de trabajo actual, estamos un poco torcidos. Si estoy en el directorio de inicio, no quiero ver / Usuarios / Andrew
, quiero ver ~
en lugar. Entonces, aquí está esa función:
función get_pwd () echo "$ PWD / $ HOME / ~"
La función shell es bastante sencilla si has escrito JavaScript anteriormente; sintaxis idéntica No estoy seguro de dónde se originó esa sintaxis de búsqueda y reemplazo, pero se ve bastante similar a la sintaxis de búsqueda y reemplazo de Vim: Si PWD
incluye el texto $ HOME
(una variable del sistema para su directorio personal), reemplácela con ~
.
Ahora, aquí está lo que está abajo:
¡Bueno! Ahora viene la parte difícil. Verás, quiero alinear a la derecha la información de git y el indicador de batería. Dado que no hay manera de alinearlos correctamente, tenemos que contar el número de caracteres del texto que queremos, restarlo del ancho de la ventana y agregar ese espacio. Es bastante intrépido, y el código es bastante complicado, pero es todo lo que he podido encontrar que realmente funciona.
Listo? Insertamos el espaciado con una función que llamo. get_spacing
. Entonces agrega $ (get_spacing)
hasta el final de nuestra segunda línea, por lo que ahora se ve así:
$ fg [cian]% m: $ fg [amarillo] $ (get_pwd) $ (put_spacing)
Ahora, esa función. Por supuesto, aquí está la cáscara:
función put_spacing ()
Hay cuatro partes dentro. Aquí está el primero.
git local = $ (git_prompt_info) si [$ # git! = 0]; luego ((git = $ # git - 10)) else git = 0 fi
Comenzamos por obtener la salida de la git_prompt_info
Funcionar y almacenarlo en una variable local., git
. A continuación, si la longitud de esa cadena no es 0, restablecemos git
así que ahora es la longitud de la cadena menos 10. De lo contrario, restablecemos git
a 0. Esto no parece tener mucho sentido, hasta que te das cuenta de lo que intentamos hacer aquí. Queremos averiguar cuántos caracteres de "espacio" ocupa la información de git. La parte difícil es que estamos reutilizando la variable. git
: primero contiene la cadena, luego contiene el número que representa el número de caracteres que nuestra información de git es larga. Si git
es cero caracteres de largo, nos ponemos git
a 0; si no lo es (lo que significa que estamos en un repositorio de git), establecemos git
al número de caracteres en la cadena, menos 10. Esto se debe a que el recuento de caracteres de la cadena incluye los códigos de color, que en realidad no son visibles, por lo que no ocupan ancho. Los parens dobles? Oh, se usan para hacer matemáticas.
Hacemos lo mismo para la salida de la batería:
bat local = $ (battery_charge) si [$ # bat! = 0]; luego ((bat = $ # bat - 18)) else bat = 0 fi
En la tercera parte, averiguamos cuántos espacios necesitaremos:
local termwidth ((termwidth = $ COLUMNS - 3 - $ # HOST - $ # $ (get_pwd) - $ bat - $ git))
Un poco más de matemáticas: empezamos con COLUMNAS
, que es el número de caracteres que el terminal es ancho. Restamos todos los valores apropiados (el 3 es para dos espacios y dos puntos), y terminamos con el hecho de que necesitamos ancho de término
Número de espacios entre las partes izquierda y derecha de la solicitud.
Ahora, vamos a crear una cadena que es ancho de término
número de espacios largos:
local para i en 1… $ termwidth; do spacing = "$ spacing" hecho echo $ spacing
Un simple bucle de entrada nos permite crear la cadena; entonces, lo devolvemos.
Realmente no se puede decir que se ha agregado el espacio en blanco, así que he agregado un texto ficticio para que pueda ver que se ha agregado.
A continuación, la información de Git. Añadimos $ (git_prompt_info)
hasta el final de la línea de solicitud 2; Como ustedes saben, eso es una función llamada.
$ fg [cian]% m: $ fg [amarillo] $ (get_pwd) $ (put_spacing) $ (git_prompt_info)
Tenga en cuenta que no cambiamos el color antes de cargar la información de Git: la función se encargará de eso, ya que depende del estado del repositorio.
Y aquí está la función:
función git_prompt_info () ref = $ (git symbolic-ref HEAD 2> / dev / null) || return echo "$ (parse_git_dirty) $ ZSH_THEME_GIT_PROMPT_PREFIX $ (current_branch) $ ZSH_THEME_GIT_PROMPT_SUFFIX"
La primera línea solo comprueba si estamos en un repositorio Git. Si no somos nosotros regreso
. Si lo somos, la siguiente línea. eco
s la información correcta. Note dos cosas aquí: primero, estamos usando dos variables: $ ZSH_THEME_GIT_PROMPT_PREFIX
y $ ZSH_THEME_GIT_PROMPT_SUFFIX
. Te mostraré cómo se definen en un segundo. La otra cosa son otras dos funciones que se llaman. Estos son proporcionados por oh-my-zsh. los barril actual
La función simplemente devuelve la rama actual. los parse_git_dirty
Sin embargo, es más interesante. Si la rama actual está sucia (tiene cambios no confirmados), la función emitirá la $ ZSH_THEME_GIT_PROMPT_DIRTY
; de lo contrario saldrá $ ZSH_THEME_GIT_PROMPT_CLEAN
.
Tengo estas cuatro variables definidas así:
ZSH_THEME_GIT_PROMPT_PREFIX = "[git:" ZSH_THEME_GIT_PROMPT_SUFFIX = "] $ reset_color" ZSH_THEME_EP.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.
Sobre la base de estas variables, se generará un repositorio en una rama maestra limpia [git: master]
en verde; saldrá una rama maestra sucia +[git: master]
.
Y por último, llamamos a la bateria cargada
función:
$ fg [cian]% m: $ fg [amarillo] $ (get_pwd) $ (put_spacing) $ (git_prompt_info) $ (battery_charge)
Aquí esta la bateria cargada
función:
function battery_charge () si [-e ~ / bin / batcharge.py] luego echo 'python ~ / bin / batcharge.py' else echo "; fi
Si el archivo existe, ejecutamos ese archivo y hacemos eco de la salida. Tenga en cuenta que usamos las comillas invertidas en la ejecución del archivo (no son comillas simples): esto nos permite ejecutar una cadena de código como si estuviera en el terminal. Si el archivo no existe, simplemente hacemos eco de una cadena vacía.
Y con eso, hemos terminado! Esto es lo que terminamos con:
Bueno, así es como se ve mi terminal. Bifurqué el proyecto oh-my-zsh en GitHub y agregué este tema, para que lo puedas encontrar allí. Si estás interesado en ver mis otros archivos de puntos, también los tengo en GitHub.
Sin embargo, no he terminado con mi configuración de línea de comandos todavía. Si bien no he realizado ningún cambio en un tiempo, estoy pensando en incluir el nombre del usuario actual (porque uso este mismo tema en mi servidor) y también algo de información de RVM. Además, no estoy seguro de por qué tengo la palabra git
ahí; Supongo que originalmente tenía una configuración que funcionaba con múltiples sistemas de control de versiones ... De todos modos, el punto de todo esto es que esto es algo que continuamente se estará modificando. Cuando realice cambios, me aseguraré de enviarlos a GitHub para que puedas verlos allí..
Permítame dejarle varios enlaces que encontrará útiles para piratear en la línea de comandos:
temas
carpeta; Usted recogerá algunos consejos útiles de esa manera.Que te diviertas!