# Ferramentas Avançadas de Edição

## Comentar/Descomentar

Os comandos Comentar e Descomentar, disponíveis no menu Ferramentas permitem-lhe adicionar ou remover marcações de comentários à seleção ou à linha atual, se não existir texto selecionado, se os comentários são suportados pelo formato do texto que você está editando.

As regras de como o comentário é feito são feitas nas definições de sintaxe; assim, se o realce de sintaxe não é usado, as ações de comentar/descomentar não são possíveis.

Alguns formatos definem marcas de comentários para linhas únicas, outros suportam marcas de comentários para várias linhas e alguns suportam ambas. Se não estiverem disponíveis os comentários para várias linhas, o ato de comentar uma seleção que não inclui por completo a sua última linha não é possível.

Se um marcador de linha única estiver disponível, é preferível comentar linhas simples onde for aplicável, pois isto ajuda a evitar problemas com comentários aninhados.

Ao remover marcadores de comentários, textos sem comentários devem ser selecionados; ao remover marcadores de comentários de múltiplas linhas de uma seleção, qualquer espaço em branco fora do marcador é ignorado.

Para colocar marcações de comentários, use a opção do menu Ferramentas Comentar ou o atalho de teclado relacionado, que por padrão é &Ctrl;D.

Para remover marcações de comentários, use a opção do menu Ferramentas Descomentar ou o atalho de teclado relacionado, que por padrão é o &Ctrl;&Shift;D.

## A Linha de Comando do Componente de Edição

O componente de edição do &kappname; possui uma linha de comando interna, que lhe permite efetuar várias ações a partir de uma &GUI; mínima. A linha de comando é um campo de texto no fundo da área de edição onde, para mostrá-la, você poderá selecionar a opção Ver Alternar para Linha de Comando ou usar o atalho (que é, por padrão, o F7). O editor oferece um conjunto de comandos, tal como está documentado abaixo, sendo oferecidos mais comandos através de plugins.

Para executar um comando, pressione a tecla Return. A linha de comando irá indicar se foi bem sucedida e, provavelmente, irá mostrar uma mensagem. Se você inseriu na linha de comando pressionando F7, ele ocultar-se-á automaticamente, ao fim de alguns segundos. Para limpar a mensagem e inserir um comando novo, pressione F7 de novo.

A linha de comando possui um sistema de ajuda embutido, podendo inserir o comando `help` para iniciá-lo. Para ver uma lista com todos os comandos disponíveis, invoque o comando `help list`; para ver a ajuda sobre um determinado comando, faça `help `comando``.

A linha de comando possui um histórico embutido, como tal, o usuário poderá reutilizar os comandos já digitados. Para navegar no histórico, use as teclas &Up; e &Down;. Ao mostrar os comandos do histórico, a parte do argumento do comando será selecionada, o que lhe permite sobrepor facilmente os argumentos.

### Comandos Padrão da Linha de Comando

### Tipos de argumento

BOOLEANO

- Isto é usado com os comandos que ativam ou desativam certas coisas. Os valores válidos são o `on`, `off`, `true`, `false`, `1` ou `0`.

INTEIRO

- Um número inteiro.

TEXTO

- Uma string separada por aspas simples (') ou aspas (") quando conter espaços.

#### Comandos para configurar o Editor

Estes comandos são oferecidos pelo componente do editor e permitem-lhe configurar apenas o documento e a janela ativos. Isto poderá ser útil se quiser usar uma configuração diferente da pré-definida como, por exemplo, no recuo.

    set-tab-widthINTEIRO largura

- Configura a largura da tabulação como sendo `largura`.

    set-indent-widthINTEIRO largura

- Configura a largura do recuo como `largura`. Só é usado se o usuário recuar com espaços.

    set-word-wrap-columnINTEIRO largura

- Configura a largura da linha para uma quebra como tendo `largura` colunas. Isto é usado se você tiver o seu texto sendo quebrado automaticamente.

    set-icon-borderBOOLEANO ativar

- Configura a visibilidade da borda dos ícones.

    set-folding-markersBOOLEANO ativar

- Configura a visibilidade da área de marcadores de dobra do código.

    set-line-numbersBOOLEANO ativar

- Configura a visibilidade da área de números de linha.

    set-replace-tabsBOOLEANO ativar

- Se estiver ativo, as tabulações são substituídas por espaços, à medida que você vai digitando.

    set-remove-trailing-spaceBOOLEANO ativar

- Se estiver ativo, os espaços finais serão removidos quando o cursor abandonar uma determinada linha.

    set-show-tabsBOOLEANO ativar

- Se estiver ativo, os caracteres de tabulação e espaços estarão visíveis através de um pequeno ponto.

    set-show-indentBOOLEANO ativar

- Se estiver ativo, o recuo será visualizado por uma linha tracejada vertical.

    set-indent-spacesBOOLEANO ativar

- Se estiver ativo, o editor irá recuar com `largura-recuo` espaços por cada nível de recuo, em vez de usar o caractere TAB.

    set-mixed-indentBOOLEANO ativar

- Se estiver ativo, o &kappname; irá usar uma mistura de TABs e espaços para o recuo. Cada nível de recuo irá ter um tamanho de `largura-recuo`, enquanto os restantes níveis de recuo serão otimizados para usar tantos caracteres TAB quantos possíveis.

  Quando for executado, este comando irá ativar o recuo com espaços e, se a largura de recuo não estiver definida, corresponderá a metade da `largura-tabulação` do documento, no momento da execução.

    set-word-wrapBOOLEANO ativar

- Ativa a quebra de linha dinâmica, de acordo com o parâmetro `ativar`.

    set-replace-tabs-saveBOOLEANO ativar

- Quando estiver ativo, as tabulações serão substituídas por espaços em branco, sempre que o documento for salvo.

    set-remove-trailing-space-saveBOOLEANO ativar

- Quando estiver ativo, os espaços finais serão removidos de cada linha, sempre que o documento for salvo.

    set-indent-modeTEXTO nome

- Configura o modo de recuo automático como `nome`. Se o `nome` não for conhecido, o modo é configurado como 'none' (nenhum). Os modos válidos são 'none', 'normal', 'cstyle', 'haskell', 'lilypond', 'lisp', 'python', 'ruby' e 'xml'.

    set-auto-identBOOLEANO script

- Ativa ou desativa o recuo automático.

    set-highlightTEXTO realce

- Configura o sistema de realce de sintaxe para o documento. O argumento deverá ser um nome de realce válido, como pode ser visto no menu Ferramentas Realce. Este comando oferece uma lista de completação automática para o seu argumento.

    reload-scripts

- Recarrega todos os scripts do &javascript; usados pelo &kate;, incluindo scripts de indentação e de linha de comando.

    set-modeSTRING modo

- Seleciona o esquema de tipo de arquivo para o documento atual.

    nn[oremap]TEXTO original TEXTO mapeado

- Mapeia a sequência `original` para a `mapeada`.

#### Comandos de edição

Estes comandos modificam o documento atual.

    indent

- Recua as linhas selecionadas ou a linha atual.

    unindent

- Remove um nível de recuo das linhas selecionadas ou da linha atual.

    cleanindent

- Limpa o recuo das linhas selecionadas ou da linha atual, de acordo com a configuração de recuo no documento.

    comment

- Insere marcações de comentários para fazer da seleção, linhas selecionadas ou da linha atual um comentário, de acordo com o formato de texto definido pela definição do realce de sintaxe para o documento.

    uncomment

- Remove os marcadores de comentários da seleção, linhas selecionadas ou da linha atual, de acordo com o formato de texto definido pela definição do realce de sintaxe do documento.

    kill-line

- Remove a linha atual.

    replace TEXTO padrão TEXTO substituição

- Substitui o texto correspondente ao `padrão` por `substituição`. Se você quiser incluir espaços em branco no `padrão`, deverá colocar tanto o `padrão` como a `substituição` entre aspas simples ou duplas. Se os argumentos não estiverem entre estes caracteres, a primeira palavra é usada como `padrão` e o resto como a `substituição`. Se a `substituição` estiver em branco, cada ocorrência do `padrão` será removida.

  Você poderá configurar opções para modificar a procura, adicionando dois pontos (:), seguidos de uma ou mais letras, onde cada uma representa uma configuração, o que corresponderá ao formato `replace:opções padrão substituição`. As opções disponíveis são:

  `b`

- Pesquisar para trás.

`c`

- Procura a partir da posição do cursor.

`e`

- Procura apenas na área selecionada.

`r`

- Faz uma pesquisa por uma determinada expressão regular. Se estiver ativo, você poderá usar o `\N`, onde o N é um número que representa as capturas no texto de substituição.

`s`

- Faz uma pesquisa com distinção entre maiúsculas e minúsculas.

`p`

- Pede permissão para substituir a próxima ocorrência.

`w`

- Faz uma correspondência apenas com palavras inteiras.

    dateTEXTO formato

- Insere um texto de data/hora, tal como está definido pelo `formato` indicado, ou com o formato aaaa-MM-dd hh:mm:ss, se não for indicada qualquer formatação. As traduções a seguir são feitas quando for interpretado o `formato`:

  `d` | O dia, como um número sem um zero inicial (1-31).
  `dd` | O dia, como um número com um zero inicial (01-31).
  `ddd` | O nome do dia abreviado, no formato regional (⪚ 'Seg'..'Dom').
  `dddd` | O nome do dia completo, no formato regional (⪚ 'Segunda'..'Domingo').
  `M` | O mês, como um número sem um zero inicial (1-12).
  `MM` | O mês, como um número com um zero inicial (01-12).
  `MMMM` | O nome completo do mês localizado (⪚ 'Janeiro'..'Dezembro').
  `MMM` | O nome do mês abreviado, no formato regional (⪚ 'Jan'..'Dez').
  `aa` | O ano, como um número de dois algarismos (00-99).
  `aaaa` | O ano, como um número de quatro algarismos (1752-8000).
  `h` | As horas sem um zero inicial (0..23 ou 1..12 no caso do formato AM/PM).
  `hh` | As horas com um zero inicial (00..23 ou 01..12 no caso do formato AM/PM).
  `m` | Os minutos sem um zero inicial (0..59).
  `mm` | Os minutos com um zero inicial (00..59).
  `s` | Os segundos sem um zero inicial (0..59).
  `ss` | Os minutos com um zero inicial (00..59).
  `z` | Os milissegundos sem um zero inicial (0..999).
  `zzz` | Os milissegundos com zeros iniciais (000..999).
  `AP` | Usar o formato de horas AM/PM. O AP será substituído por "AM" ou por "PM".
  `ap` | Usar o formato de horas am/pm. O ap será substituído por "am" ou por "pm".

    charTEXTO identificador

- Este comando permite que você insira caracteres literais através de suas identificações numéricas, em decimal, octal ou hexadecimal. Para usá-lo, abra o diálogo de Edição de Comando e digite `char: [número]` na caixa de entrada e clique em OK.

  ##### exemplos do comando `char`

  Entrada: `char:234`

  Resultado: `ê`

  Entrada: `char:0x1234`

  Resultado: `ሴ`

`s///[ig]` `%s///[ig]`

- Este comando faz um sed como operação de procura/substituição na linha atual, ou em um arquivo inteiro (`%s///`).

  Em resumo, é procurado o texto que combine com o padrão de busca , a expressão regular entre a primeira e a segunda barra, e quando é encontrado, a parte que combina com o texto é substituída pela expressão entre a segunda e a última barra. Os parênteses no padrão de busca criam referências anteriores, isto é, o comando lembra qual parte encontrada do texto combinou no parênteses; estas strings podem ser reutilizadas no padrão de substituição, referidas como `\1` para o primeiro conjunto de parênteses, `\2` para o segundo e assim por diante.

  Para procurar por um caractere literal `(` ou `)`, você precisa usar o caractere de escape, que é o caractere de barra invertida: `\(\)`

  Se você puser um `i` no fim da expressão, a correspondência não fará distinção entre maiúsculas ou minúsculas. Se, por outro lado, puser um `g` no fim, todas as ocorrências do padrão serão substituídas, caso contrário, só será substituída a primeira ocorrência.

  ##### Substituindo texto na linha atual

  Seu compilador parou, dizendo a você que a classe `minhaClasse`, mencionada na linha 3902 do seu arquivo fonte, não está definida.

  "Droga!" você pensa, é claro que é `MinhaClasse`. Você vai para a linha 3902, e em vez de tentar encontrar a palavra no texto, você lança o Diálogo de Edição de Comando, digita `s/minhaclasse/MinhaClasse/i`, clica no botão OK, salva o arquivo e compila – com sucesso, sem erros.

  ##### Substituindo texto no arquivo inteiro

  Imagine que você tem um arquivo, no qual está mencionada a string Senhorita Jensen várias vezes, quando aparece alguém e lhe diz que ela casou com o Senhor Jones. Você quer, é claro, substituir todas as ocorrências de Senhorita Jensen por Senhora Jones.

  Entre na linha de comando e digite o comando `%s/Senhorita Jensen/Senhora Jones/`, pressionando RETURN para terminar.

  ##### Um Exemplo Mais Avançado

  Este exemplo tira partido das referências anteriores assim como das classes de palavras (se você não souber o que isso é, baseie-se na documentação referida abaixo).

  Suponha que você possui a seguinte linha:

      void MinhaClasse::DoStringOps( String      &foo, String &bar, String *p, int  &a, int &b )

  Agora, você pode perceber que este não é um código bom, e decidir que deseja usar a palavra-chave `const` para todos os argumentos address of, aqueles caracterizados pelo operador & em frente ao nome do argumento. Você poderia também simplificar o espaço em branco, pois assim existiria somente um caractere de espaço em branco entre cada palavra.

  Abra o Diálogo de Edição de Comando, e digite `s/\s+(\w+)\s+(&)/ const \1 \2/g` e clique no botão OK. O caractere `g` no final da expressão faz com que a expressão regular recompile cada combinação, para recuperar as referências de volta.

  Saída `void MinhaClasse::DoStringOps( const String &foo, const String &bar, String *p, const int &a, const int &b )`

  Missão completa! Agora, o que aconteceu? Bem, procuramos por espaços em branco (`\s+`) seguidos por um ou mais caracteres alfabéticos(`\w+`) seguidos por mais espaços em branco (`\s+`) seguidos por um E comercial, e no processo é salvo o pedaço alfabético e o E comercial para reutilização na operação de substituição. Quando substituímos a parte relacionada da nossa linha, com um espaço em branco, seguido por const, seguido por um espaço em branco, seguido por nosso pedaço alfabético (`\1`) seguido por um espaço em branco, em por fim, seguido por nosso E comercial salvo (`\2`)

  Em alguns casos, a parte alfabética foi String, em alguns int, assim, usar a classe de caractere `\w` e o quantificador `+` provê uma vantagem considerável.

    sort

- Ordena o texto selecionado ou todo o documento.

    natsort

- Ordena as linhas selecionadas ou todo o documento naturalmente.

  ##### `sort` x `natsort`

  ``sort`(a10, a1, a2)` resulta em `a1, a10, a2`

  ``natsort`(a10, a1, a2)` resulta em `a1, a2, a10`

    moveLinesDown

- Move as linhas selecionadas para baixo.

    moveLinesUp

- Move as linhas selecionadas para cima.

    uniq

- Remove linhas duplicadas do texto selecionado ou do documento inteiro.

    rtrim

- Remove o espaço à direita do texto selecionado ou do documento inteiro.

    ltrim

- Remove o espaço à esquerda do texto selecionado ou do documento inteiro.

    joinTEXTO separador

- Mescla as linhas selecionadas ou o documento inteiro. Opcionalmente, recebe um parâmetro definindo um separador, por exemplo: ``join` ', '`

    rmblank

- Remove todos os espaços em branco do texto selecionado ou do documento inteiro.

    alignon

- Este comando alinha as linhas no bloco selecionado ou em todo o documento na coluna especificada por uma expressão regular fornecida como argumento.

  Se você fornecer um padrão vazio, ele se alinhará ao primeiro caractere não vazio por padrão.

  Se o padrão tiver uma captura, ele será recuado na correspondência capturada.

  Exemplos:

  `alignon -` irá inserir espaços antes do primeiro '-' de cada linha para alinhá-las na mesma coluna.

  `alignon :\\s+(.)` irá inserir espaços antes do primeiro caractere não em branco que ocorrer após dois pontos para alinhá-los todos na mesma coluna.

    unwrap

- Remove as quebras de linha do texto selecionado ou do documento inteiro.

    eachTEXTO script

- Fornecida uma função do &javascript; como argumento, chama pela lista de linhas selecionadas e substitui-as com o valor de retorno desta chamada.

  ##### Mescla as linhas selecionadas

  ``each` 'function(lines){return lines.join(", ")}'`

  Ou, de maneira resumida:

  ``each` 'lines.join(", ")'`

    filterTEXTO script

- Fornecida uma função do &javascript; como argumento, chama pela lista de linhas selecionadas e remove-as onde a chamada retorna falso.

  ##### Remover linhas em branco

  ``filter` 'function(1){return 1.length > 0;}'`

  Ou, de maneira resumida:

  ``filter` 'line.length > 0'`

    mapTEXTO script

- Fornecida uma função do &javascript; como argumento, chama pela lista de linhas selecionadas e substitui a linha com o valor de retorno da chamada.

  ##### Remover linhas em branco

  ``map` 'function(line){return line.replace(/^s+/,"");}'`

  Ou, de maneira resumida:

  ``map` 'line.replace(/^s+/,"")'`

    duplicateLinesUp

- Duplica as linhas selecionadas acima da seleção atual.

    duplicateLinesDown

- Duplica as linhas selecionadas abaixo da seleção atual.

#### Comandos de navegação

    gotoINT linha

- Este comando vai para a linha indicada.

    grep TEXTO padrão

- Pesquisa o documento pela expressão regular `padrão`. Para mais informações, veja as regular-expressions.

    findTEXTO padrão

- Este comando vai para a primeira ocorrência do `padrão`, de acordo com a configuração. As ocorrências a seguir poderão ser encontradas com a opção Editar Procurar Próximo (o atalho por padrão é o F3).

  O comando de procura poderá ser configurado adicionando dois-pontos, seguidos de uma ou mais opções, sendo o formato `find:opções padrão`. São suportadas as seguintes opções:

  `b`

- Pesquisar para trás.

`c`

- Procura a partir da posição do cursor.

`e`

- Procura apenas na área selecionada.

`r`

- Faz uma pesquisa por uma determinada expressão regular. Se estiver ativo, você poderá usar o `\N`, onde o N é um número que representa as capturas no texto de substituição.

`s`

- Faz uma pesquisa com distinção entre maiúsculas e minúsculas.

`w`

- Faz uma correspondência apenas com palavras inteiras.

    ifindTEXTO padrão

- Este comando oferece uma procura à-medida-que-digita. Você poderá configurar o comportamento da procura adicionando dois-pontos (:), seguidos de uma ou mais opções, como se segue: `ifind:opções padrão`. As opções permitidas são:

  `b`

- Pesquisar para trás.

`r`

- Faz uma procura por uma expressão regular.

`s`

- Faz uma pesquisa com distinção entre maiúsculas e minúsculas.

`c`

- Procura a partir da posição do cursor.

#### Comandos das funções básicas do editor (dependem do aplicativo em que o componente de edição for usado)

    w

- Salvar o documento atual.

    wa

- Salvar todos os documentos abertos.

    q

- Fechar o documento atual.

    qa

- Fechar todos os documentos abertos.

    wq

- Salvar e fechar o documento atual.

    wqa

- Salvar e fechar todos os documentos abertos.

    x

- Salvar e fechar o documento atual somente se ele foi modificado.

    x

- Salvar e fechar todos os documentos abertos somente se eles foram modificados.

    bp

- Ir para o documento anterior na lista de documentos.

    bn

- Ir para o próximo documento na lista de documentos.

    new

- Abrir um novo documento em uma divisão de visão horizontal.

    vnew

- Abrir um novo documento em uma divisão de visão vertical.

    e

- Recarregar o documento atual se ele tiver sido modificado em disco.

    enew

- Editar um novo documento.

    print

- Abrir a janela de impressão para imprimir o documento atual.

## Usando o Desdobramento de Código

O desdobramento ou dobragem de código permite-lhe ocultar partes de um documento no editor, tornando mais simples analisar globalmente arquivos grandes. No &kappname;, as regiões desdobráveis são calculadas com base nas regras das definições de realce de sintaxe; como tal só está disponível em alguns formatos - tipicamente em código-fonte de programas, código em XML e semelhantes. A maioria das definições de realce que suportam o desdobramento de código também lhe permitem definir manualmente regiões desdobráveis, tipicamente com as palavras-chave `BEGIN` e `END`.

Para usar a funcionalidade de desdobramento de código, ative os marcadores com a opção Exibir Mostrar as Marcações de Dobragem, se não estiverem já visíveis. A área de Marcações de Dobragem, no lado esquerdo da tela, mostra uma visão gráfica sobre as regiões que poderão ser recolhidas ou expandidas, com símbolos triangulares para indicar a operação possível numa determinada região: um triângulo para baixo significa que a região é expandida; clicar sobre ele irá recolher a região, clicar em um triângulo para direita irá expandi-la.

Estão disponíveis três comandos para manipular o estado das regiões dobradas; para tal, veja a documentação do menu.

As linhas recolhidas serão lembradas quando um arquivo é fechado, assim quando você reabri-lo, os nós que estiverem recolhidos permanecerão dobrados. Isto se aplica a operações de recarregamento também.

Se você não quiser usar a funcionalidade de desdobramento do código, poderá desativar a opção Mostrar as marcações de dobragem (se disponíveis) na página Aparência do editor de configuração.