====== Editores de texto ====== A função primária de um editor de texto, como o nome sugere, é a manipulação de arquivos de texto, isto é, arquivos compostos de sequências de caracteres, em geral com ênfase nos processos de escrita, mas também com funcionalidades voltadas para a leitura desses arquivos. ===== Características gerais ===== As seções a seguir detalham algumas das características mais gerais que podem alterar significativamente a percepção que o usuário possui sobre um editor de texto. ==== Linha de comando x Visual ==== Um editor de linha de comando, ao contrário de um editor visual, não exibe o texto sendo editado enquanto ele está sendo editado. Ou seja, ele não é o que classificaríamos como uma ferramenta do tipo "//what you see is what you get//" (WYSIWYG). No lugar disso, o editor nos oferece comandos que podemos usar para instruí-lo a alterar o texto. A princípio, isso pode nos causar uma sensação de afastamento ou cegueira em relação ao texto. Mas não passa de uma questão de costume. Podemos ver o texto editado antes e depois da edição, por meio de comandos que, após algum tempo de uso, tornam-se quase um reflexo natural. E que comandos são esses? Depende do editor em questão, mas tipicamente existem vários comandos que podemos usar, tais como //ir para// uma linha específica; //mostrar// o conteúdo da linha selecionada; //substituir// uma parte da linha selecionada por outro texto; //Copiar//, //mover//, e //adicionar novas linhas//; e existem mais. Exemplos de editores de linha de comando: [[utils:ed]], [[utils:exvi|ex]]. Um editor visual, em contrapartida, exibe as mudanças sendo aplicadas enquanto são aplicadas. Ele dispõe todo o texto (ou um fragmento dele, caso o texto todo não caiba na tela), e tipicamente terá um cursor em alguma parte do texto visível (embora em alguns casos possa não haver ou estar fora da área visível). O fato de ser visual não quer dizer necessariamente que há uma interface gráfica: a visualização pode ocorrer em interface textual. Exemplos de editores visuais: [[utils:exvi|vi]], [[utils:vim]], [[utils:emacs]]. ==== Interatividade x Não interatividade ==== Edição de texto é uma atividade tão corriqueira, que às vezes podemos esquecer as diferentes maneiras como isso pode ser feito. Uma edição pode ocorrer de uma vez só, aplicando uma série de alterações (não interativo), tendo uma lista de comandos sendo fornecida como entrada. Exemplos de editores não interativos: [[utils:ed]] (modo não interativo), [[utils:sed]]. Em editores interativos, fornecemos um comando (via teclado ou //mouse//) de cada vez, e então observamos os resultados. Isso nos dá a chance de observar se os resultados foram satisfatórios e quando necessário desfazer a alteração recém-aplicada. Exemplos de editores interativos: [[utils:ed]], [[utils:exvi|ex / vi]], [[utils:vim]], [[utils:emacs]]. ==== Minimalismo x Especialização ==== Editores de texto podem possuir muitas funções especializadas para cada tipo de situação, ou podem ser mais econômicos nas funcionalidades, oferecendo funções mais genéricas que deverão ser combinadas/moduladas para atingir algum objetivo mais especializado. Um editor especialista possui funcionalidades mais óbvias, previstas para cada necessidade. Em alguns casos isso se traduz em uma menor barreira de adoção da ferramenta, e em outros, se traduz em uma maior amplitude de ações possíveis. Geralmente é pensado para cobrir todos os cenários possíveis ou ser extensível o bastante para poder cobrí-los. Exemplos de editores especialistas: [[utils:vim]], [[utils:neovim]], [[utils:emacs]]. Um editor minimalista, por outro lado, tende a ser mais enxuto e consumir menos recursos, porém requer um tempo maior de adaptação pelo usuário, pois suas capacidades são menos óbvias e são descobertas ao longo da experimentação. Exemplos de editores minimalistas: [[utils:ed]], [[utils:exvi|ex / vi]], [[utils:nano]]. ==== Padronização ==== Um editor padronizado é um editor que possui uma especificação dada por um grupo de trabalho considerado isento (ao menos isento o bastante) para não favorecer nenhuma implementação específica que possa vir a surgir dessa especificação. Deste modo, a funcionalidade do editor será prevista pelo padrão ao qual ele é aderente, e é esperado que diferentes implementações de um mesmo editor tenham um comportamento semelhante, ou quase igual em alguns casos. Exemplos de editores padronizados: [[utils:ed]] (POSIX), [[utils:exvi| ex / vi]] (POSIX). ==== Monomodalismo x Multimodalismo ==== Esse talvez seja um conceito que confunde muita gente. Vamos tentar tirar essa barreira do caminho. Modos são estados do editor que determinam qual será o seu comportamento. Para facilitar a compreensão desse conceito, vamos refletir primeiro sobre os editores monomodais, que são mais conhecidos. Em um editor monomodal, as ações do usuário terão sempre os mesmos resultados. Por exemplo, ao digitar caracteres comuns eles serão incorporados ao texto que está sendo editado, e ao usar algum atalho do editor, ele pode disparar alguma ação específica (por exemplo, em muitos editores o atalho ''Ctrl + S'' salva o documento). Ao longo de todo o processo de edição, essas ações sempre terão esses resultados (nesse exemplo, inserir caracteres e salvar o documento). Exemplos de editores monomodais: [[utils:nano]]. Em um editor multimodal, as ações não serão sempre iguais. Elas dependerão do modo selecionado. O modo determina o que uma ação significa. Assim, um atalho ou comando pode ter efeitos diferentes. Por exemplo, a inserção de um caractere comum (como ''w'') pode significar inserir esse caractere no documento em um modo, e pode servir como um comando para salvar o documento em outro modo. Portanto, perceba: um mesmo caractere (''w'') em um modo é apenas um caractere normal, inserido no texto, e no outro é um comando. Um editor multimodal pode inclusive possuir mais de dois modos, adicionando ainda mais possibilidades de uso para um mesmo atalho ou comando. Exemplos de editores multimodais: [[utils:ed]], [[utils:exvi|ex / vi]], [[utils:vim]], [[utils:emacs]]. ===== Características específicas ===== ...