2011-08-24 12 views
52

He estado buscando una solución para esto por AÑOS.¿Cómo puedo hacer que la finalización de la pestaña bash se comporte como la finalización de la pestaña vim y recorrer las coincidencias coincidentes?

Soy mucho más productivo en vim cuando manipulo archivos que bash por este motivo.

si tengo

file_12390983421 
file_12391983421 
file_12340983421 
file_12390986421 

En bash y el tipo file_1-> pestaña, es obvio que enumera:

file_12390983421 file_12391983421 file_12340983421 file_12390986421 

Y esto es un verraco horrible y dolorosa para trabajar.

La misma secuencia en vim recorrerá los archivos de a uno por vez.

Por favor, alguien dime cómo hacer esto en bash, o si hay otro caparazón que puede hacer esto, voy a cambiar mañana.

+0

http://unix.stackexchange.com/questions/24419/terminal-autocomplete-cycle-through-suggestions –

+0

Pon 'bind TAB: menu-complete' en' .bashrc'. – Claudio

Respuesta

66

De forma predeterminada, TAB está vinculado al comando readline complete. En su lugar, su comportamiento deseado sería menu-complete. Puede cambiar la configuración de sus líneas de lectura editando ~/.inputrc. Para volver a enlazar TAB, añada esta línea:

TAB: menu-complete 

Para más detalles ver la sección READLINE en man bash.

+1

Esto funciona perfectamente. Una cosa, ¿hay alguna manera de hacer que esto retroceda? En vim utilizo shift + tab, y si accidentalmente voy demasiado lejos, solo vuelvo, o si quiero comenzar al final de la lista. Algo que hago todo el día en vim ... pero no parece funcionar con el menú completo. – pixelearth

+6

menu-complete reemplazará automáticamente su entrada, pero no mostrará una lista de candidatos. ¿Hay alguna manera de hacer ambas cosas? – leon

+12

@pixelearth: También hay 'menu-complete-backward', y al menos en mi terminal Shift-Tab parece enviar la secuencia de escape' \ e [Z'. Esto le da esta entrada de .inputrc: '" \ e [Z ": menu-complete-backward' – sth

3

Gracias a @sth me encontré con lo que funciona mejor para mí:

Para mantener la normalidad pestaña fiesta de finalización, y luego utilice CTL-f para recorrer cuando sea necesario el uso de menús completa

poner esto en su .inputrc archivo:

"\C-f": menu-complete 
13

encima de

# cycle forward 
Control-k: menu-complete 
# cycle backward 
Control-j: menu-complete-backward 

también puede considerar agregando

# display one column with matches 
set completion-display-width 1 

De esta manera usted preservaría la funcionalidad de Tab actual y haría que bash muestre las posibilidades en una columna. Así que en lugar de

file_12340983421 file_12390983421 file_12390986421 file_12391983421 

que se obtendría

file_12340983421 
file_12390983421 
file_12390986421 
file_12391983421 

P. S. Puede obtener la biblioteca readline actualizada desde este sitio web The GNU Readline Library.

0

En mi experiencia, la solución proporcionada en la respuesta sth nunca me ha funcionado por completo. TL; DR: Agregue set -o vi a su ~/.bashrc.

Al usar menú completo en conjunción con combinaciones de teclas VI, que tienen que asegurarse de que

set -o vi 

muestra en algún lugar de mi ~/.bashrc. Nunca ha sido suficiente para mí tener

TAB: menu-complete 

set editing-mode vi 
set keymap vi 

en mi ~/.inputrc.

Supongo que de alguna manera set editing-mode y set keymap están destruyendo la configuración TAB: ..., pero no he revisado la documentación a fondo para averiguar por qué este es el caso.

+0

Recibo el comando TAB no encontrado. Traté de configurar el modo de edición y el mapa de teclas a vi pero aún nada, no se encontraron comandos bash en mi computadora en macOS –

+1

@MladenPetrovic - la primera parte 'set ...' entra en '~/.bashrc', la segunda' TAB: ... 'parte entra' ~/.inputrc'. Obtendrás 'comando TAB no encontrado' si pones esa parte en' ~/.bashrc'. –

0

Para fiesta> = 4 Es posible que como estos ajustes:

# If there are multiple matches for completion, Tab should cycle through them 

bind 'TAB':menu-complete 

# Display a list of the matching files 

bind "set show-all-if-ambiguous on" 

# Perform partial completion on the first Tab press, 
# only start cycling full results on the second Tab press 

bind "set menu-complete-display-prefix on" 

Esta configuración es similar a la de Vim set wildmode=longest:full:list,full

Saqué esta configuración desde this question en el sitio Linux Unix &.

Cuestiones relacionadas