prompt (PS1) não atualiza no comando ligado

0

Eu não entendo porque essas duas maneiras diferentes de usar o mesmo comando levam a comportamentos diferentes.

Eu instalei fzf e fd e tenha as seguintes linhas em .bashrc

function updir(){
  cd ..
}
function overdir(){
  cd 'fd -t d -d 1 | fzf'
}
function downdir(){
  cd 'fd -t d -d 8 | fzf'
}

bind -x '"\C-i":"updir"'
bind -x '"\C-j":"overdir"'
bind -x '"\C-l":"downdir"'

export PS1="[\u@\h:\W]$ "

Se eu digitar overdir no shell, posso digitar um padrão e ir para um diretório conforme o esperado, e o diretório de trabalho atual será atualizado no prompt, assim

[davidlittle@deus1:~]$ overdir
[davidlittle@deus1:googledrive]$ overdir
[davidlittle@deus1:Preferences]$

Observe que entre esses prompts uma janela fzf é revelada, seleciono um diretório e, em seguida, a visualização retorna para o que é mostrado acima. No entanto, , se eu fizer a mesma coisa usando o atalho de atalho "C-j" em vez de, agora eu recebo algo diferente:

[davidlittle@deus1:Preferences]$
[davidlittle@deus1:Preferences]$ ls
%Users%davidlittle%googledrive%Preferences%vscode%settings.json keybindings.json                                                settings.json
[davidlittle@deus1:vscode]$

Como você pode ver, o diretório listado no prompt é Preferences na linha 2. Mas foi depois de atingir C-j e selecionar o diretório vscode . Uma vez que eu chame ls , o diretório correto é mostrado no prompt.

O comportamento esperado é que a linha 2 do segundo exemplo exiba vscode não Preferences .

O que está errado?

    
por HaberdashPI 01.11.2018 / 22:52

1 resposta

0

Graças às perguntas do @jsotola e algumas experiências, eu mesmo consegui resolver esse problema.

Primeiro, o -x não é necessário, e parecia estar causando problemas (quando eu pressionei enter, como @jsotola pediu, que altera $ PS1, então eu provavelmente poderia incluir a combinação de teclas para entrar dentro da ligação , mas não tenho certeza de como fazer isso e acho que prefiro ver qual foi o último comando); segundo, os comandos de controle estavam funcionando mal (já que mapeiam para outras combinações de teclas dependendo do terminal), então mudei para usar a chave meta. Aqui estão as ligações finais de trabalho:

function updir(){
  cd ..
  exa --long --group-directories-first
}
function indir(){
  cd "'fd -t d -d 1 | fzf'"
  exa --long --group-directories-first
}
function deepdir(){
  cd "'fd -t d -d 8 | fzf'"
  exa --long --group-directories-first
}


bind '"\ek":"updir\n"'
bind '"\ej":"indir\n"'
bind '"\el":"deepdir\n"'

Observe que essas novas ligações também incluem um comando para exibir o diretório usando exa . Transforma o bash em um explorador de arquivos bastante limpo, com correspondência fuzzy !!

    
por 02.11.2018 / 15:44