2011-05-28 6 views
7

Duplicar posibles:
Commands executed from vim are not recognizing bash command aliasesEjecutando funciones de Bash desde dentro de Vim - ¿cómo puedo hacerlo?

que tienen la función siguiente en mi archivo ~/.bashrc (en mi caja Ubunut)

# convert tex to pdf, no bib 
function t2p { 
    latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi } 

# convert tex to pdf, with bib 
function tb2p { 
    latex $1 && bibtex $1 && latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi } 

Por ejemplo, para convertir un archivo tex f.tex en un archivo pdf y bibtex en el orden correcto, llamo al tb2p f. Esto funciona muy bien si estoy en una terminal de Bash. Sin embargo, para acceder al indicador Bash desde Vim, en realidad tengo que ejecutar el comando : sh primero.

Para simplificar el procedimiento anterior traté de ejecutar las funciones T2P y TB2P dentro de Vim : T2P f. Vim me dice que no puede encontrar la función t2p. Hice algunos Google y leí que debería poner estas funciones en el archivo /etc/bash.bashrc para que sean visibles para Vim. Desafortunadamente, esto no funcionó en mi caso. Vim todavía no sabe acerca de la función.

Al final del día me gustaría poder llamar a mis funciones desde dentro de Vim usando un atajo de teclado. Mis preguntas son, por tanto, de la siguiente manera:

  1. ¿Cómo puedo dejar que Vim sabe sobre ~/.bashrc funciones?
  2. ¿Cómo configuro un atajo de teclado en ~/.vimrc para una función en ~/.bashrc?

Muchas gracias.

+0

¡Esa respuesta ha resuelto mi problema! Haré más Google en mi segunda pregunta. ¡Gracias un montón! –

+0

¿Se ha considerado instalar 'rubber', que es un sistema de compilación automatizado? 'rubber -d main' compilará un PDF' main.tex' y todas las dependencias y necesidades de autodetección para la bibliografía u otros pasos de compilación ... – Benoit

+0

ver: http://stackoverflow.com/a/9014154/1040358 – kikuchiyo

Respuesta

4

Intente utilizar :!bash -c t2p en Vim. Si su alias está limitado a capas interactivas, también agregue la bandera -i.

1

Intente agregar set shell=bash\ --login a su .vimrc.

Para convertir el archivo actual, escriba :!tb2p %, Vim le mostrará % al ejecutar el script.

Una vez que funcione, puede agregar una asignación para que todo el proceso sea aún más rápido:

nnoremap <F12> :!tb2p %<CR> 
0

Vim carreras bash comandos con el argumento -c, lo que hace que el shell no interactivo y de no ingreso y eso pasa por alto la lectura de los archivos de inicio.

Puede anular esto con una variable de entorno.

De bash:

When bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV 
    in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to 
    read and execute. Bash behaves as if the following command were executed: 
      if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi 
    but the value of the PATH variable is not used to search for the file name. 

Alternativamente, vim en sí se le puede pedir a ejecutar shells de comandos de inicio de sesión como conchas. De vim :help shell obtenemos lo siguiente:

    On Unix the command normally runs in a non-interactive 
        shell. If you want an interactive shell to be used 
        (to use aliases) set 'shellcmdflag' to "-ic". 
        For Win32 also see |:!start|. 
0

Puede definir siempre sus funciones en un archivo separado y poner ese archivo en una carpeta en la variable de entorno PATH. En mi caso mis funciones personales que me gustaría utilizar ir a ~/bin

En su caso para T2P:

crear un T2P archivo en ~/bin con el contenido:

#!/bin/bash 

# convert tex to pdf, no bib 
latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi 

entonces hacer que el archivo ejecutable:

> chmod +x t2p 

asegurarse ~/bin está en su camino, poniendo lo siguiente en su ~/.bashrc:

export PATH=${HOME}/bin:${PATH} 
Cuestiones relacionadas