Atalhos de teclado
Todos os atalhos de teclado podem ser personalizados via ~/.pi/agent/keybindings.json. Cada ação pode estar vinculada a uma ou mais chaves.
O arquivo de configuração usa os mesmos ids de atalho de teclado com namespace que pi usa internamente e que os autores de extensão usam nos gerenciadores keyHint() e keybindings injetados.
Configurações mais antigas usando IDs com namespace pré-como cursorUp ou expandTools são migradas automaticamente para os IDs com namespace na inicialização.
Após editar keybindings.json, execute /reload em pi para aplicar as alterações sem reiniciar a sessão.
Formato chave
modifier+key onde os modificadores são ctrl, shift, alt, super (combináveis) e as chaves são:
- Letras:
a-z - Dígitos:
0-9 - Teclas especiais:
escape,esc,enter,return,tab,space,backspace,delete,insert,clear,home,end,pageUp,pageDown,up,down,left,right - Teclas de função:
f1-f12 - Símbolos:
`,-,=,[,],\,;,',,,.,/,!,@,#,$,%,^,&,*,(,),_,+,|,~,{,},:,<,>,?
Combinações de modificadores: ctrl+shift+x, alt+ctrl+x, ctrl+shift+alt+x, super+k, ctrl+super+k, ctrl+1, etc.
As ligações super requerem um terminal que reporte o modificador separadamente, normalmente por meio do protocolo de teclado Kitty. Eles podem não funcionar em terminais sem esse suporte.
Todas as ações
TUI Movimento do Cursor do Editor
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.editor.cursorUp |
up |
Mova o cursor para cima, navegando pelo histórico antigo na parte superior |
tui.editor.cursorDown |
down |
Mova o cursor para baixo, navegando pelo histórico mais recente na parte inferior |
tui.editor.historyPrevious |
(nenhum) | Selecione a entrada anterior do histórico de prompts |
tui.editor.historyNext |
(nenhum) | Selecione a próxima entrada do histórico de prompt |
tui.editor.cursorLeft |
left, ctrl+b |
Mova o cursor para a esquerda |
tui.editor.cursorRight |
right, ctrl+f |
Mova o cursor para a direita |
tui.editor.cursorWordLeft |
alt+left, ctrl+left, alt+b |
Mover a palavra do cursor para a esquerda |
tui.editor.cursorWordRight |
alt+right, ctrl+right, alt+f |
Mova a palavra do cursor para a direita |
tui.editor.cursorLineStart |
home, ctrl+home, ctrl+a |
Mover para o início da linha |
tui.editor.cursorLineEnd |
end, ctrl+end, ctrl+e |
Mover para o fim da linha |
tui.editor.jumpForward |
ctrl+] |
Avance para o personagem |
tui.editor.jumpBackward |
ctrl+alt+] |
Pule para trás para o personagem |
tui.editor.pageUp |
pageUp, ctrl+pageUp |
Rolar para cima por página |
tui.editor.pageDown |
pageDown, ctrl+pageDown |
Role para baixo por página |
As ações de histórico dedicadas sempre alteram as entradas do histórico, independentemente da posição do cursor em um prompt multilinha. As ligações explícitas do histórico têm precedência sobre as ações do aplicativo enquanto o editor principal está em foco, portanto, a ligação tui.editor.historyPrevious a ctrl+p substitui o ciclo do modelo nesse contexto sem alterar Ctrl+P nos seletores.
TUI Exclusão do Editor
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.editor.deleteCharBackward |
backspace |
Excluir caractere para trás |
tui.editor.deleteCharForward |
delete, ctrl+d |
Excluir caractere para frente |
tui.editor.deleteWordBackward |
ctrl+w, alt+backspace |
Excluir palavra para trás |
tui.editor.deleteWordForward |
alt+d, alt+delete |
Excluir palavra adiante |
tui.editor.deleteToLineStart |
ctrl+u |
Excluir para início da linha |
tui.editor.deleteToLineEnd |
ctrl+k |
Excluir até o final da linha |
TUI Entrada
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.input.newLine |
shift+enter, ctrl+j |
Inserir nova linha |
tui.input.submit |
enter |
Enviar entrada |
tui.input.tab |
tab |
Guia/preenchimento automático |
TUI Anel de Morte
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.editor.yank |
ctrl+y |
Colar o texto excluído mais recentemente |
tui.editor.yankPop |
alt+y |
Percorrer o texto excluído após arrancar |
tui.editor.undo |
ctrl+- |
Desfazer última edição |
TUI Área de transferência e seleção
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.input.copy |
ctrl+c |
Copiar seleção |
tui.select.up |
up |
Mover seleção para cima |
tui.select.down |
down |
Mover seleção para baixo |
tui.select.pageUp |
pageUp |
Subir página na lista |
tui.select.pageDown |
pageDown |
Página para baixo na lista |
tui.select.confirm |
enter |
Confirmar seleção |
tui.select.cancel |
escape, ctrl+c |
Cancelar seleção |
TUI Janela de visualização em tela cheia
Essas ações se aplicam quando o modo interativo usa --tui-mode fullscreen e tem como alvo a região de rolagem da transcrição primária. O trackpad com dois dedos e a roda do mouse rolam a região sob o ponteiro, retornando à transcrição sobre o encaixe fixo de editor/status/rodapé. Clicar em um hiperlink OSC 8 o abre no manipulador padrão. Arrastar com o botão principal do mouse seleciona o texto e o copia para a área de transferência; segurar a borda superior ou inferior da transcrição rola automaticamente para o conteúdo fora da tela.
As vinculações de transcrição em tela cheia têm precedência sobre as vinculações do editor. As teclas de navegação padrão não modificadas, portanto, controlam a transcrição no modo de tela cheia, enquanto suas variantes ctrl continuam a controlar o editor. Fora do modo de tela cheia, ambas as variantes controlam o editor.
| Chave | Modo padrão | Modo tela cheia |
|---|---|---|
home, end |
Editor | Transcrição |
ctrl+home, ctrl+end |
Editor | Editor |
pageUp, pageDown |
Editor | Transcrição |
ctrl+pageUp, ctrl+pageDown |
Editor | Editor |
Este roteamento permanece configurável através das ligações de ações comuns. Por exemplo, "tui.altScreen.pageUp": "ctrl+pageUp" faz com que pageUp controle o editor e ctrl+pageUp controle a transcrição no modo de tela cheia. Vincule tui.altScreen.halfPageUp e tui.altScreen.halfPageDown para etapas de transcrição menores, mantendo as encadernações de página inteira. A configuração "tui.altScreen.pageUp": [] desativa totalmente esse atalho de transcrição. As ligações de usuário substituem os padrões dessa ação.
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
tui.altScreen.pageUp |
pageUp |
Role a transcrição uma página para cima |
tui.altScreen.pageDown |
pageDown |
Role a transcrição uma página para baixo |
tui.altScreen.halfPageUp |
(nenhum) | Role a transcrição meia página para cima |
tui.altScreen.halfPageDown |
(nenhum) | Role a transcrição meia página para baixo |
tui.altScreen.previousPrompt |
ctrl+shift+up |
Ir para a mensagem marcada anteriormente |
tui.altScreen.nextPrompt |
ctrl+shift+down |
Ir para a próxima mensagem marcada |
tui.altScreen.top |
home |
Role até o início da transcrição |
tui.altScreen.bottom |
end |
Role até o final da transcrição e siga a nova saída |
Aplicativo
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.interrupt |
escape |
Cancelar/abortar |
app.clear |
ctrl+c |
Limpar editor (primeiro) / sair (segundo) |
app.exit |
ctrl+d |
Sair (quando o editor estiver vazio) |
app.suspend |
ctrl+z (nenhum no Windows) |
Suspender para segundo plano |
app.editor.external |
ctrl+g |
Abra em editor externo (externalEditor, $VISUAL, $EDITOR, Bloco de notas no Windows ou nano em outro lugar) |
app.clipboard.pasteImage |
ctrl+v (alt+v no Windows) |
Colar imagem ou texto da área de transferência |
Sessões
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.session.new |
(nenhum) | Iniciar uma nova sessão (/new) |
app.session.tree |
(nenhum) | Abra o navegador session tree (/tree) |
app.session.fork |
(nenhum) | Bifurcar sessão atual (/fork) |
app.session.resume |
(nenhum) | Abrir seletor de currículo de sessão (/resume) |
app.session.togglePath |
ctrl+p |
Alternar exibição do caminho |
app.session.toggleSort |
ctrl+s |
Alternar modo de classificação |
app.session.toggleNamedFilter |
ctrl+n |
Alternar filtro somente nomeado |
app.session.rename |
ctrl+r |
Renomear sessão |
app.session.delete |
ctrl+d |
Excluir sessão |
app.session.deleteNoninvasive |
ctrl+backspace |
Excluir sessão quando a consulta estiver vazia |
Models e pensando
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.model.select |
ctrl+l |
Abrir seletor de modelo |
app.model.cycleForward |
ctrl+p |
Alternar para o próximo modelo |
app.model.cycleBackward |
shift+ctrl+p |
Alternar para o modelo anterior |
app.thinking.cycle |
shift+tab |
Nível de pensamento de ciclo |
app.thinking.toggle |
ctrl+t |
Recolher ou expandir blocos de pensamento |
Fila de exibição e mensagens
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.tools.expand |
ctrl+o |
Recolher ou expandir a saída da ferramenta |
app.message.copy |
ctrl+x |
Copie a última mensagem do assistente ou a mensagem selecionada em /tree |
app.message.followUp |
alt+enter |
Mensagem de acompanhamento da fila |
app.message.dequeue |
alt+up |
Restaurar mensagens na fila para o editor |
Navegação em árvore
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.tree.foldOrUp |
ctrl+left, alt+left |
Dobre o segmento de ramificação atual ou pule para o início do segmento anterior |
app.tree.unfoldOrDown |
ctrl+right, alt+right |
Desdobre o segmento de ramificação atual ou pule para o início ou final do próximo segmento |
app.tree.editLabel |
shift+l |
Edite o rótulo no nó da árvore selecionado |
app.tree.toggleLabelTimestamp |
shift+t |
Alternar carimbos de data/hora do rótulo na árvore |
app.tree.filter.default |
ctrl+d |
Definir filtro de árvore para visualização padrão |
app.tree.filter.noTools |
ctrl+t |
Alternar filtro de árvore que oculta os resultados da ferramenta |
app.tree.filter.userOnly |
ctrl+u |
Alternar filtro de árvore que mostra apenas mensagens do usuário |
app.tree.filter.labeledOnly |
ctrl+l |
Alternar filtro de árvore que mostra apenas entradas rotuladas |
app.tree.filter.all |
ctrl+a |
Alternar filtro de árvore que mostra todas as entradas |
app.tree.filter.cycleForward |
ctrl+o |
Ciclo de filtro de árvore para frente |
app.tree.filter.cycleBackward |
shift+ctrl+o |
Ciclo de filtro de árvore para trás |
Escopo Models Seletor
Usado dentro do seletor de modelos com escopo (aberto via /scoped-models).
| ID de atalho de teclado | Padrão | Descrição |
|---|---|---|
app.models.save |
ctrl+s |
Salvar a seleção do modelo atual nas configurações |
app.models.enableAll |
ctrl+a |
Habilite todos os modelos (ou todos que correspondam à pesquisa atual) |
app.models.clearAll |
ctrl+x |
Limpar todos os modelos (ou todos que correspondam à pesquisa atual) |
app.models.toggleProvider |
ctrl+p |
Alternar todos os modelos para o provedor atual |
app.models.reorderUp |
alt+up |
Mova o modelo selecionado para cima na ordem do ciclo |
app.models.reorderDown |
alt+down |
Mova o modelo selecionado para baixo na ordem do ciclo |
Configuração personalizada
Crie ~/.pi/agent/keybindings.json:
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n",
"tui.editor.deleteWordBackward": ["ctrl+w", "alt+backspace"]
}Cada ação pode ter uma única chave ou um conjunto de chaves. A configuração do usuário substitui os padrões.
No Windows nativo, app.suspend não possui ligação padrão porque os terminais do Windows não suportam controle de trabalho Unix. Se você vinculá-lo manualmente, pi mostrará uma mensagem de status em vez de suspender. No WSL, o comportamento normal do Linux ctrl+z/fg ainda se aplica.
Exemplo Emacs
{
"tui.editor.historyPrevious": "ctrl+p",
"tui.editor.historyNext": "ctrl+n",
"tui.editor.cursorLeft": ["left", "ctrl+b"],
"tui.editor.cursorRight": ["right", "ctrl+f"],
"tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
"tui.editor.cursorWordRight": ["alt+right", "alt+f"],
"tui.editor.deleteCharForward": ["delete", "ctrl+d"],
"tui.editor.deleteCharBackward": ["backspace", "ctrl+h"],
"tui.input.newLine": ["shift+enter", "ctrl+j"]
}Exemplo de Vim
{
"tui.editor.cursorUp": ["up", "alt+k"],
"tui.editor.cursorDown": ["down", "alt+j"],
"tui.editor.cursorLeft": ["left", "alt+h"],
"tui.editor.cursorRight": ["right", "alt+l"],
"tui.editor.cursorWordLeft": ["alt+left", "alt+b"],
"tui.editor.cursorWordRight": ["alt+right", "alt+w"]
}