Slackjeff Wiki

Juntando bits aprendemos juntos

Ferramentas do usuário

Ferramentas do site


utils:ed

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anteriorRevisão anterior
Próxima revisão
Revisão anterior
utils:ed [2025/08/03 23:43] – [Desfazendo e refazendo] ajuste de formatação hrcerqutils:ed [2025/08/09 19:21] (atual) – [Abrindo e trocando de arquivos] formatação monoespaçada hrcerq
Linha 39: Linha 39:
   * **Dispensa combinações de teclas**   * **Dispensa combinações de teclas**
  
-Por ser um editor multimodal, não é preciso utilizar combinações de teclas usando **Ctrl** **Alt**. O texto não se confunde com os comandos, pois eles são isolados em modos de edição diferentes. Como bônus, os comandos são curtos (apenas um caractere), possivelmente acompanhados de endereços (linhas a editar) e parâmetros. Mais detalhes sobre essa estrutura de comandos serão detalhados adiante.+Por ser um editor multimodal, não é preciso utilizar combinações de teclas usando ''Ctrl'' ''Alt''. O texto não se confunde com os comandos, pois eles são isolados em modos de edição diferentes. Como bônus, os comandos são curtos (apenas um caractere), possivelmente acompanhados de endereços (linhas a editar) e parâmetros. Mais detalhes sobre essa estrutura de comandos serão detalhados adiante.
  
   * **Não possui dependências**   * **Não possui dependências**
  
-Por ser um editor minimalista, o __ed__ não possui outras bibliotecas como dependências (nem mesmo //ncurses// ou //readline//). Ele se basta. Para sistemas minimalistas e hardware com capacidades limitadas, isso é ótimo. Além disso, não possuir dependências significa que não há preocupação com ligação dinâmica, que não é suportada por alguns sistemas operacionais, e que mesmo quando é suportado já envolve algumas preocupações com segurança.+Por ser um editor minimalista, o __ed__ não possui outras bibliotecas como dependências (nem mesmo __ncurses__ ou __readline__). Ele se basta. Para sistemas minimalistas e hardware com capacidades limitadas, isso é ótimo. Além disso, não possuir dependências significa que não há preocupação com ligação dinâmica, que não é suportada por alguns sistemas operacionais, e que mesmo quando é suportado já envolve algumas preocupações com segurança.
  
 Não possuir dependências significa que mesmo em modo monousuário do UNIX ele pode ser utilizado. Não por acaso ele geralmente fica no diretório __/bin__ e não em __/usr/bin__ (em sistemas que ainda levam essa separação a sério). Não possuir dependências significa que mesmo em modo monousuário do UNIX ele pode ser utilizado. Não por acaso ele geralmente fica no diretório __/bin__ e não em __/usr/bin__ (em sistemas que ainda levam essa separação a sério).
Linha 196: Linha 196:
 Muito bem, já vimos os conceitos principais, agora é hora de um pouco de prática. Vamos começar pelo básico que é iniciar e encerrar o editor __ed__. A propósito, não saber encerrar um editor pode causar um certo pânico, então vamos tratar disso logo. Muito bem, já vimos os conceitos principais, agora é hora de um pouco de prática. Vamos começar pelo básico que é iniciar e encerrar o editor __ed__. A propósito, não saber encerrar um editor pode causar um certo pânico, então vamos tratar disso logo.
  
-Para iniciar o editor __ed__, vamos começar com um exemplo simples, sem abrir nenhum arquivo, apenas iniciar o editor com um //buffer// vazio. Você verá uma linha vazia, na qual um comando pode ser inserido. Então você aprenderá o seu primeiro comando agora, o comando **q** (//quit//), que encerra o editor. Nessa linha vazia, digite **q**, e o editor será encerrado.+Para iniciar o editor __ed__, vamos começar com um exemplo simples, sem abrir nenhum arquivo, apenas iniciar o editor com um //buffer// vazio. Você verá uma linha vazia, na qual um comando pode ser inserido. Então você aprenderá o seu primeiro comando agora, o comando ''q'' (//quit//), que encerra o editor. Nessa linha vazia, digite ''q'', e o editor será encerrado.
  
 <code> <code>
Linha 204: Linha 204:
 </code> </code>
  
-Ufa! Agora você já sabe encerrar o editor, quando precisar. Mas vou além: o comando **q** só vai encerrar o editor mesmo se ele não tiver sofrido nenhuma mudança. Se você tiver feito quaisquer alterações no //buffer//, um alerta será emitido e você terá de usar o comando **q** novamente para confirmar que deseja encerrar. Outra opção, se tiver conteúdo não salvo que queira descartar é usar o comando **Q**. Nesse caso nenhum alerta será emitido e ele será prontamente encerrado.+Ufa! Agora você já sabe encerrar o editor, quando precisar. Mas vou além: o comando ''q'' só vai encerrar o editor mesmo se ele não tiver sofrido nenhuma mudança. Se você tiver feito quaisquer alterações no //buffer//, um alerta será emitido e você terá de usar o comando ''q'' novamente para confirmar que deseja encerrar. Outra opção, se tiver conteúdo não salvo que queira descartar é usar o comando ''Q''. Nesse caso nenhum alerta será emitido e ele será prontamente encerrado.
  
-É importante frisar que digitar **Ctrl+c** não encerra o editor. Sinais de interrupção apenas emitem uma mensagem de erro (veremos mais sobre mensagens de erro e alertas depois).+É importante frisar que digitar ''Ctrl'' ''c'' não encerra o editor. Sinais de interrupção apenas emitem uma mensagem de erro (veremos mais sobre mensagens de erro e alertas depois).
  
-Agora, um outro ponto que é importante aprender desde cedo é sobre a configuração e uso de um //prompt//. Como falei antes, ele é um meio de evitar a confusão entre o modo de comandos e o modo de entrada. Para iniciar o editor já com o uso de um //prompt// você deve usar o parâmetro **-p**, como a seguir:+Agora, um outro ponto que é importante aprender desde cedo é sobre a configuração e uso de um //prompt//. Como falei antes, ele é um meio de evitar a confusão entre o modo de comandos e o modo de entrada. Para iniciar o editor já com o uso de um //prompt// você deve usar o parâmetro ''-p'', como a seguir:
  
 <code> <code>
Linha 218: Linha 218:
 Aqui usei um asterisco seguido de espaço, mas fica a seu critério qual texto acha melhor como //prompt//. Desaconselho o uso de interrogação, pois esse sinal já é usado para emitir mensagens de diagnóstico, e também é útil usar um espaço como último caractere do prompt, para não misturar com o comando. Aqui usei um asterisco seguido de espaço, mas fica a seu critério qual texto acha melhor como //prompt//. Desaconselho o uso de interrogação, pois esse sinal já é usado para emitir mensagens de diagnóstico, e também é útil usar um espaço como último caractere do prompt, para não misturar com o comando.
  
-Para não ter que usar esse parâmetro **-p** toda vez que iniciar o __ed__, você pode configurar um //alias// para o ele (dependendo de qual shell utilizar, pode haver variações na forma de fazer isso):+Para não ter que usar esse parâmetro ''-p'' toda vez que iniciar o __ed__, você pode configurar um //alias// para o ele (dependendo de qual shell utilizar, pode haver variações na forma de fazer isso):
  
 <code> <code>
Linha 226: Linha 226:
 Nos exemplos seguintes partirei da premissa de que o //alias// do exemplo acima está configurado. Nos exemplos seguintes partirei da premissa de que o //alias// do exemplo acima está configurado.
  
-Antes de prosseguir, tenho apenas mais um assunto para comentar sobre //prompts//: você pode, a qualquer momento dentro do editor, desabilitar ou reabilitar o //prompt// com o comando **P**:+Antes de prosseguir, tenho apenas mais um assunto para comentar sobre //prompts//: você pode, a qualquer momento dentro do editor, desabilitar ou reabilitar o //prompt// com o comando ''P'':
  
 <code> <code>
Linha 238: Linha 238:
 Para quê desabilitar o //prompt//? Eu realmente não consigo imaginar um bom motivo, mas caso você tenha se esquecido de configurá-lo previamente, e esteja editando um arquivo, pode ser útil lembrar que ele pode ser ativado a qualquer momento.  Para quê desabilitar o //prompt//? Eu realmente não consigo imaginar um bom motivo, mas caso você tenha se esquecido de configurá-lo previamente, e esteja editando um arquivo, pode ser útil lembrar que ele pode ser ativado a qualquer momento. 
  
-Apenas tenha em mente que por padrão o prompt usado é um asterisco (*****) sem um espaço depois, o que visualmente pode causar algum desconforto por misturar o //prompt// ao comando, então é mais interessante configurá-lo antes de iniciar o editor, como apontei antes.+Apenas tenha em mente que por padrão o prompt usado é um asterisco (''*'') sem um espaço depois, o que visualmente pode causar algum desconforto por misturar o //prompt// ao comando, então é mais interessante configurá-lo antes de iniciar o editor, como apontei antes.
 ===== Abrindo e trocando de arquivos ===== ===== Abrindo e trocando de arquivos =====
  
-Já vimos como o editor pode ser aberto e fechado, mas e quanto à seleção dos arquivos que serão editados? Como isso é feito? Existem duas possibilidades: uma é informar o nome de um arquivo logo ao iniciar o editor, portanto na chamada do comando __ed__, passar um arquivo como argumento; outra é abrir o editor com um //buffer// vazio, e em seguida usar o comando **e** para selecionar um arquivo.+Já vimos como o editor pode ser aberto e fechado, mas e quanto à seleção dos arquivos que serão editados? Como isso é feito? Existem duas possibilidades: uma é informar o nome de um arquivo logo ao iniciar o editor, portanto na chamada do comando __ed__, passar um arquivo como argumento; outra é abrir o editor com um //buffer// vazio, e em seguida usar o comando ''e'' para selecionar um arquivo.
  
 A título de exemplo, consideremos um arquivo de texto, contendo o texto: A título de exemplo, consideremos um arquivo de texto, contendo o texto:
Linha 264: Linha 264:
 Logo em seguida o //prompt// aparece, e você pode inserir comandos para ler ou editar o arquivo. Mas calma, ainda chegaremos lá. Por hora, vamos ver mais algumas questões relacionadas ao carregamento do arquivo. Logo em seguida o //prompt// aparece, e você pode inserir comandos para ler ou editar o arquivo. Mas calma, ainda chegaremos lá. Por hora, vamos ver mais algumas questões relacionadas ao carregamento do arquivo.
  
-Digamos que você iniciou o editor com um //buffer// vazio. Você pode então usar o comando **e** para carregar o arquivo. Vejamos:+Digamos que você iniciou o editor com um //buffer// vazio. Você pode então usar o comando ''e'' para carregar o arquivo. Vejamos:
  
 <code> <code>
Linha 279: Linha 279:
 Ao iniciar o editor com um //buffer// vazio, essa informação não existe. Porém, ao iniciar com um arquivo, ou ao carregar um arquivo, como feito nos exemplos anteriores, essa informação é preenchida, com o nome do arquivo carregado (neste exemplo, //poema_ed.txt//). Ao iniciar o editor com um //buffer// vazio, essa informação não existe. Porém, ao iniciar com um arquivo, ou ao carregar um arquivo, como feito nos exemplos anteriores, essa informação é preenchida, com o nome do arquivo carregado (neste exemplo, //poema_ed.txt//).
  
-Para visualizar o nome memorizado, usamos o comando **f**. Um erro será emitido se o nome não estiver preenchido ainda.+Para visualizar o nome memorizado, usamos o comando ''f''. Um erro será emitido se o nome não estiver preenchido ainda.
  
 <code> <code>
Linha 292: Linha 292:
 </code> </code>
  
-O sinal de interrogação nesse caso indica que houve algum erro (deixemos a interpretação disso para depois). Mas note que depois de carregado o arquivo, o nome passou a existir (ficou memorizado). Podemos a qualquer momento usar esse mesmo comando **f** para trocar esse nome. Isso não renomeia o arquivo carregado, apenas sinaliza para o editor __ed__, que no momento de salvar, ele deverá escrever em outro arquivo.+O sinal de interrogação nesse caso indica que houve algum erro (deixemos a interpretação disso para depois). Mas note que depois de carregado o arquivo, o nome passou a existir (ficou memorizado). Podemos a qualquer momento usar esse mesmo comando ''f'' para trocar esse nome. Isso não renomeia o arquivo carregado, apenas sinaliza para o editor __ed__, que no momento de salvar, ele deverá escrever em outro arquivo.
  
 Retomaremos esse assunto quando tratarmos sobre a operação de escrita. Retomaremos esse assunto quando tratarmos sobre a operação de escrita.
  
-Você pode, a qualquer momento, usar o comando **e** para trocar o arquivo carregado no //buffer// (inclusive para um arquivo que ainda não existe, que será criado ao acionar a operação de escrita).+Você pode, a qualquer momento, usar o comando ''e'' para trocar o arquivo carregado no //buffer// (inclusive para um arquivo que ainda não existe, que será criado ao acionar a operação de escrita).
  
 <code> <code>
Linha 316: Linha 316:
 Apenas lembre-se: se houver quaisquer alterações não salvas, um alerta será emitido. Você pode ignorá-lo e reexecutar o comando, para prosseguir, perdendo as alterações. Apenas lembre-se: se houver quaisquer alterações não salvas, um alerta será emitido. Você pode ignorá-lo e reexecutar o comando, para prosseguir, perdendo as alterações.
  
-Caso já tenha certeza de que não quer salvar nada, pode usar o comando **E** no lugar de **e**, para que nenhum alerta seja emitido e o editor imediatamente prossiga com o carregamento do próximo arquivo.+Caso já tenha certeza de que não quer salvar nada, pode usar o comando ''E'' no lugar de ''e'', para que nenhum alerta seja emitido e o editor imediatamente prossiga com o carregamento do próximo arquivo.
  
-Tanto o comando **e** como o comando **E**, quando não recebem nenhum nome de arquivo como parâmetro, apenas recarregam o arquivo no //buffer// (com ou sem a mensagem de alerta, dependendo de qual deles usar). Isto pode ser útil caso queira apenas recarregar o arquivo descartando todas as alterações que fez, desde a última escrita.+Tanto o comando ''e'' como o comando ''E'', quando não recebem nenhum nome de arquivo como parâmetro, apenas recarregam o arquivo no //buffer// (com ou sem a mensagem de alerta, dependendo de qual deles usar). Isto pode ser útil caso queira apenas recarregar o arquivo descartando todas as alterações que fez, desde a última escrita.
  
 <note> <note>
utils/ed.1754264637.txt.gz · Última modificação: por hrcerq