Os shells (pelo menos o que eu sei) têm recursos de edição de comando muito ruins.
Por exemplo:
- Não consigo apontar o cursor para nenhum ponto do comando.
- Não consigo selecionar e retroceder / excluir / substituir texto no comando.
Atualmente, isso é tão perturbador que eu uso o gedit para editar comandos antes de colá-los no terminal.
Existe alguma solução que seja boa para isso?
command-line
bash
gnome-terminal
UniversallyUniqueID
fonte
fonte
Respostas:
Bash é realmente muito bom nisso. Você só precisa aprender seus atalhos. Por exemplo (no modo emacs padrão):
E há muito mais. Leia
man readline
para ver o que mais está disponível. Você pode atribuir atalhos diferentes, colocando-os~/.inputrc
. Por exemplo, para fazer Ctrl+ Leftvoltar uma palavra e Ctrl+ Rightavançar uma palavra, adicione-o ao seu~/.inputrc
:Para descobrir o que significam esses códigos estranhos, pressione Ctrl+ Ve, em seguida, pressione a tecla que você deseja usar. Se você tentar com Ctrl+ Right, verá
^[[1;5C
. Substitua^[
com\e
no~/.inputrc
.Você também pode querer procurar outras conchas. Os reservatórios "modernos" e ricos em recursos populares incluem:
fonte
gnome-terminal
você, use oESC
botão em vez deALT
navegar uma palavra para frente e para trás. . .. ou mude para um terminal que não usa Alt no seu menu de aplicativos. . . como xterm ou sakura #Você pode editar um comando vazio ou parcialmente digitado no editor de sua escolha, definindo
EDITOR
o editor de sua escolha e pressionando CTRL+ X+ Eou CTRL+ X/ CTRL+ E, que abre a linha atualmente editadaEDITOR
;Por exemplo, definir
EDITOR
agedit
fará CTRL+ X+ Ee CTRL+ X/ CTRL+ Eabrir a linha atual em Gedit.Para tornar esta uma solução permanente, você pode definir
EDITOR
no~/.bashrc
.Isso permite usar até mesmo um editor de texto gráfico completo para editar o comando; Para executar o comando editado, basta salvar e fechar o documento.
O mesmo recurso pode ser ativado no Zsh adicionando o seguinte a
~/.zshrc
:fonte
fc
comando se a variável FCEDIT estiver configurada. Boa resposta !fc
abre o comando anterior (que é ainda mais limpo de uma certa maneira). Eu não sabia disso, obrigado!Os terminais não possuem capacidade de edição de texto. Os terminais fornecem uma área de texto e conectam o teclado a alguma coisa. Mas a coisa que você executa dentro do terminal determina o que ele pode fazer.
Conchas , como
bash
normalmente são a primeira coisa que você vai encontrar para ser executado dentro de um terminal. Como os shells funcionam com base em comandos, você só pode editar o comando atual. O bash fornece uma excelente edição de comandos em comparação com o shell Bournecsh
ouksh
ainda não é algo com o qual você gostaria de editar, mesmo uma pequena história.Os editores de texto são um dos comandos que você pode chamar no shell. Os exemplos principais são vim e emacs .
vim
ouemacs
você poderá editar quase tudo. Ambos incluem ambientes de programação embutidos para estender suas habilidades a qualquer problema que você enfrenta.Portanto, a solução é entender melhor o que essas ferramentas estão fazendo e pretendem fazer e escolher a correta para o trabalho .
fonte
Normalmente, os terminais permitem a seleção de texto com o mouse, mas o shell não é informado disso. Então, infelizmente, nem
bash
,zsh
,fish
nemes
pode suportar edição baseada em mouse. Eu acho que, para isso, eles precisariam ter maior controle sobre o terminal.No entanto (e isso é um pouco exagerado) se você abrir o Vim ou o GVim e inserir os comandos do shell usando:
então você pode clicar com o mouse para pular para qualquer lugar da linha . (Você precisará
:set mouse=a
primeiro se isso ainda não estiver ativado.) As teclas de edição neste modo podem ser vistas com:help cmdline-editing
O Vim também possui um modo de histórico de comandos bastante poderoso, que pode ser alcançado pressionando q:. A partir daí, você pode puxar, excluir e colar usando os comandos do modo normal do Vim. Nesse modo, você pode obter o botão selecionar e excluir o recurso desejado (pressionando d).
Uma ressalva importante aqui é que o Vim, na verdade, não mantém uma sessão de shell ativo em execução. Cada comando que você executa será executado em um processo filho. Portanto, quaisquer alterações feitas nas variáveis de ambiente ou nas opções de shell pelo processo filho serão perdidas.
Dito isso, você pode modificar variáveis de ambiente no processo Vim e usá-las na linha de comando do Vim, e elas serão exportadas para processos filhos:
Portanto, se você estiver disposto a fingir que o Vim é realmente algum tipo de shell estranho, poderá aproveitar seus recursos avançados de edição! Provavelmente, a maior desvantagem é que você terá que iniciar todos os comandos digitando um
:!
ouq:
Ah, a propósito, se você deseja obter a saída do comando shell no seu buffer Vim atual, você pode fazer isso assim (mas cuidado, ele atrapalhará sua linha atual):
fonte