# Referência Rápida Emacs

*Navegação, edição, buffers, busca, org mode, pacotes*

> Source: GNU Emacs Manual (gnu.org/software/emacs) · MIT

## Navegação

### Movimentação do Cursor

| Command | Description |
|---------|-------------|
| `C-f / C-b` | Avançar / recuar um caractere |
| `M-f / M-b` | Avançar / recuar uma palavra |
| `C-n / C-p` | Próxima / linha anterior |
| `C-a / C-e` | Início / fim da linha |
| `M-a / M-e` | Início / fim da sentença |
| `C-v / M-v` | Rolar para baixo / cima uma página |
| `M-< / M->` | Início / fim do buffer |
| `M-g g` | Ir para número de linha |

### Posicionamento de Tela

| Command | Description |
|---------|-------------|
| `C-l` | Recentralizar tela (cicla topo/centro/base) |
| `C-M-l` | Reposicionar janela heuristicamente |

## Edição

### Kill e Yank (Recortar e Colar)

| Command | Description |
|---------|-------------|
| `C-k` | Matar até o fim da linha |
| `C-w` | Matar região (recortar) |
| `M-w` | Copiar região |
| `C-y` | Yank (colar) |
| `M-y` | Ciclar pelo kill ring após yank |
| `C-d` | Excluir caractere à frente |
| `M-d` | Matar palavra à frente |
| `M-DEL` | Matar palavra para trás |

### Desfazer e Transpor

| Command | Description |
|---------|-------------|
| `C-/ or C-_` | Desfazer |
| `C-g C-/` | Refazer (desfazer o desfazimento) |
| `C-t` | Transpor caracteres |
| `M-t` | Transpor palavras |
| `C-x C-t` | Transpor linhas |

### Seleção

| Command | Description |
|---------|-------------|
| `C-SPC` | Definir marca (iniciar seleção) |
| `C-x h` | Selecionar buffer inteiro |
| `M-h` | Selecionar parágrafo |
| `C-x C-x` | Trocar ponto e marca |

## Buffers e Janelas

### Buffers

| Command | Description |
|---------|-------------|
| `C-x b` | Alternar para buffer |
| `C-x C-b` | Listar todos os buffers |
| `C-x k` | Matar (fechar) buffer |
| `C-x LEFT / RIGHT` | Buffer anterior / próximo |

### Janelas

| Command | Description |
|---------|-------------|
| `C-x 2` | Dividir janela horizontalmente |
| `C-x 3` | Dividir janela verticalmente |
| `C-x 0` | Fechar janela atual |
| `C-x 1` | Fechar todas as outras janelas |
| `C-x o` | Alternar para outra janela |
| `C-x ^` | Expandir janela verticalmente |
| `C-x {` | Encolher janela horizontalmente |

### Frames

| Command | Description |
|---------|-------------|
| `C-x 5 2` | Criar novo frame |
| `C-x 5 0` | Excluir frame atual |
| `C-x 5 o` | Alternar para outro frame |

## Busca e Substituição

### Busca Incremental

| Command | Description |
|---------|-------------|
| `C-s` | Buscar para frente (incremental) |
| `C-r` | Buscar para trás (incremental) |
| `C-s C-s` | Repetir última busca para frente |
| `C-M-s` | Busca com regex para frente |
| `C-M-r` | Busca com regex para trás |
| `RET` | Sair da busca na posição atual |
| `C-g` | Cancelar busca, retornar ao início |

### Substituição

| Command | Description |
|---------|-------------|
| `M-%` | Substituição com query |
| `C-M-%` | Substituição com query e regex |
| `y` | Substituir esta ocorrência |
| `n` | Pular esta ocorrência |
| `!` | Substituir todas as restantes |
| `q` | Encerrar substituição |

## Arquivos

### Operações de Arquivo

| Command | Description |
|---------|-------------|
| `C-x C-f` | Encontrar (abrir) arquivo |
| `C-x C-s` | Salvar buffer atual |
| `C-x C-w` | Salvar como (escrever em novo arquivo) |
| `C-x s` | Salvar todos os buffers modificados |
| `C-x C-r` | Abrir arquivo somente leitura |
| `C-x i` | Inserir conteúdo do arquivo no ponto |

### Dired (Editor de Diretório)

| Command | Description |
|---------|-------------|
| `C-x d` | Abrir diretório no Dired |
| `d / x` | Marcar para exclusão / executar exclusões |
| `R` | Renomear / mover arquivo |
| `C` | Copiar arquivo |
| `+` | Criar diretório |
| `g` | Atualizar listagem |

## Modos

### Major Modes

| Command | Description |
|---------|-------------|
| `M-x fundamental-mode` | Edição de texto simples |
| `M-x text-mode` | Texto com preenchimento e ortografia |
| `M-x prog-mode` | Base para modos de programação |
| `M-x python-mode` | Edição e indentação Python |
| `M-x shell-mode` | Shell interativo no buffer |

### Minor Modes Úteis

| Command | Description |
|---------|-------------|
| `M-x display-line-numbers-mode` | Alternar números de linha |
| `M-x auto-fill-mode` | Auto-quebra na coluna de preenchimento |
| `M-x flyspell-mode` | Verificação ortográfica em tempo real |
| `M-x column-number-mode` | Mostrar coluna na linha de modo |
| `M-x whitespace-mode` | Visualizar espaços em branco |
| `M-x electric-pair-mode` | Fechar automaticamente colchetes e aspas |

## Básico do Org Mode

### Estrutura

| Command | Description |
|---------|-------------|
| `* / ** / ***` | Níveis de cabeçalho 1 / 2 / 3 |
| `TAB` | Ciclar visibilidade do cabeçalho |
| `S-TAB` | Ciclar visibilidade global |
| `M-RET` | Inserir cabeçalho no mesmo nível |
| `M-LEFT / M-RIGHT` | Promover / rebaixar cabeçalho |
| `M-UP / M-DOWN` | Mover sub-árvore para cima / baixo |

### TODO e Checkboxes

| Command | Description |
|---------|-------------|
| `C-c C-t` | Ciclar estado TODO |
| `C-c C-d` | Definir prazo |
| `C-c C-s` | Agendar item |
| `C-c C-c` | Alternar checkbox [ ] / [X] |
| `C-c a` | Abrir visualização de agenda |

### Links e Exportação

| Command | Description |
|---------|-------------|
| `C-c C-l` | Inserir / editar link |
| `C-c C-o` | Abrir link no ponto |
| `C-c C-e` | Dispatcher de exportação (HTML, PDF, etc.) |

## Gerenciamento de Pacotes

### package.el

| Command | Description |
|---------|-------------|
| `M-x list-packages` | Navegar pelos pacotes disponíveis |
| `i / d / x` | Marcar para instalar / excluir / executar |
| `U` | Marcar todos que podem ser atualizados |
| `M-x package-refresh-contents` | Atualizar lista de pacotes |

### use-package (init.el)

```
(use-package magit
  :ensure t
  :bind ("C-x g" . magit-status))
(use-package company
  :ensure t
  :hook (prog-mode . company-mode))
```

## Configuração

### Arquivos de Configuração Principais

| Command | Description |
|---------|-------------|
| `~/.emacs.d/init.el` | Arquivo de configuração principal |
| `~/.emacs.d/early-init.el` | Inicialização antecipada (antes da GUI, Emacs 27+) |
| `~/.emacs.d/custom.el` | Configurações escritas pelo Customize |

### Configurações Comuns

```
(setq inhibit-startup-screen t)
(tool-bar-mode -1)
(set-face-attribute 'default nil :height 120)
(global-display-line-numbers-mode 1)
(setq make-backup-files nil)
```

### Sistema de Ajuda

| Command | Description |
|---------|-------------|
| `C-h k` | Descrever atalho de tecla |
| `C-h f` | Descrever função |
| `C-h v` | Descrever variável |
| `C-h m` | Descrever modos atuais |
| `C-h t` | Abrir tutorial do Emacs |
| `C-h i` | Abrir documentação Info |

## Padrões Comuns

### Edição de Retângulo

| Command | Description |
|---------|-------------|
| `C-x SPC` | Iniciar modo de marca retangular |
| `C-x r k` | Matar retângulo |
| `C-x r y` | Yank retângulo |
| `C-x r t` | Substituir retângulo por string |
| `C-x r o` | Inserir retângulo em branco |

### Macros

| Command | Description |
|---------|-------------|
| `C-x (` | Iniciar gravação de macro |
| `C-x )` | Parar gravação de macro |
| `C-x e` | Executar última macro |
| `C-u 10 C-x e` | Executar macro 10 vezes |
| `M-x name-last-kbd-macro` | Nomear macro para reutilização |

### Shell e Eval

| Command | Description |
|---------|-------------|
| `M-x shell` | Abrir shell no buffer |
| `M-x eshell` | Shell Emacs Lisp |
| `M-!` | Executar comando shell |
| `M-x eval-buffer` | Avaliar buffer inteiro como Elisp |
| `C-x C-e` | Avaliar expressão Elisp antes do ponto |
