Às vezes me vejo alternando com frequência entre duas funções que estou editando em conjunto. Nessas situações, é entediante e doloroso continuar fazendo um C-s <functionname>
para mudar para a outra função e, em seguida, encontrar o local exato que eu estava editando anteriormente.
Como defino marcadores e depois pulo para frente e para trás entre dois locais no buffer com facilidade?
navigation
cycling
mark-ring
registers
Vedaad Shakib
fonte
fonte
Respostas:
Janelas do Emacs
C-x 2
abrirá outra janela (= dividir o quadro) abaixo da atual, anexada ao mesmo buffer. Você pode mover um ponto em qualquer janela sem afetar a outra.Você pode mover de uma janela para outra usando
C-x o
. A biblioteca de windmove embutida fornece algumas funções que facilitam a navegação entre janelas.Se esse método lhe convier, convém também dar uma olhada nos buffers indiretos .
fonte
Registros:
C-xrSPCcorre
point-to-register
C-xrjcorre
jump-to-register
Digite qualquer caractere para especificar um registro quando solicitado. 1 1
Favoritos:
C-xrmcorre
bookmark-set
C-xrbcorre
bookmark-jump
Marcar anel:
C-SPCC-SPCempurra a posição atual para o anel da marca (sem deixá-lo ativo).
C-uC-SPCaparece o anel da marca, pulando para a posição anterior. Você pode usar isso repetidamente para navegar por todo o anel.
Observe que alguns comandos (especialmente os que podem levar você a uma distância desconhecida ou arbitrária da sua localização original) serão automaticamente pressionados para o anel da marca, para que você possa usá-lo C-uC-SPCpara retornar posteriormente. Isso inclui
isearch
, portanto, depois de usar C-spara ir a algum lugar, você pode voltar facilmente.Ponto e marca de troca:
E como Tu Do comenta, C-xC-xcorre
exchange-point-and-mark
que é muito útil para saltar entre dois locais. Também ativa a marca / região, mas você pode usar C-SPCpara limpar o realce.1 Se você está aproveitando a funcionalidade de registo no elisp, usar alguns não-conflitantes símbolo para o nome, ao invés de um char, de modo que você não pode conflito com registros de forma interativa-definidos (a menos, claro, você quer fazer aquele).
fonte
C-x C-x
também, pois ele pode pular para frente e para trás entre duas posições.C-u C-SPC
Se tocar o anel da marca e executar novamente, o ponto será movido para outro lugar.Além da resposta do phils, existem mais algumas opções:
helm-semântico-ou-imenu : lista todas as definições disponíveis no arquivo atual. Se o cursor estiver dentro de uma definição, ao ativar o marcador, essa definição será pré-selecionada.
sr-speedbar : Um navegador de arquivos que lista suas definições em cada arquivo. É semelhante ao esboço da árvore no IDE.
fonte
Além de registros e marcadores (consulte a resposta do @ phils sobre ambos e meus outros, os Sincelos respondem sobre marcadores), os marcadores , especialmente marcadores com nome automático ou temporário, podem ser úteis para isso. Você precisa da biblioteca Bookmark + para esses tipos de favoritos especiais.
Um marcador de nome automático é aquele que você não precisa nomear. É rápido criar e excluir: basta pressionar uma tecla. A mesma chave cria ou exclui um marcador no ponto. (Por padrão, isso está vinculado a
C-x p RET
, mas é claro que você pode usar qualquer tecla.)Os marcadores com nome automático são, como os marcadores em geral, persistentes. Mas você pode opcionalmente excluí-los automaticamente.
Você também pode criar indicadores temporários ou tornar temporários os indicadores existentes. Você pode, por exemplo, optar por tornar os marcadores com nome automático temporários automaticamente.
Você pode alternar rapidamente entre um determinado conjunto de indicadores. Por exemplo, para alternar entre marcadores com nome automático, use comandos
bmkp-next-autonamed-bookmark-repeat
ebmkp-previous-autonamed-bookmark-repeat
(vinculando-os a chaves).Você pode destacar locais marcados de maneiras diferentes, para que seja fácil identificá-los.
fonte
No que diz respeito aos buffers indiretos mencionados na resposta aceita ...
M-x clone-indirect-buffer
criará um buffer indireto para o buffer atual. O nome do novo buffer terá '<2>' adicionado a ele (ou um número maior, se você já tiver nomes de buffer duplicados). O novo buffer é aberto em uma nova janela. Você pode voltar para uma única janela usandoC-x 0
ouC-x 1
.Com
M-x winner-mode
você pode alternar facilmente entre os dois locais.C-c <left>
/M-x winner-undo
eC-c <right>
/M-x winner-redo
alterna entre configurações de janela. Nesse caso, as configurações serão posicionadas nos dois buffers que exibem o único arquivo.Nota: as funções
winner-undo
ewinner-redo
funcionam em uma lista de configurações. Se a configuração for alterada, por exemplo, ponto móvel, a configuração atual se tornará o cabeçalho da lista ewinner-redo
será inválida; nesse casowinner-undo
, trará de volta a posição anterior.Para a situação do OP, isso leva ao seguinte processo;
M-x winner-mode
M-x clone-indirect-buffer
(novo nome do buffer indireto: File1.txt <2>)C-x 1
C-x b
(o padrão será o buffer original, a menos que uma troca para outro buffer tenha ocorrido desde a etapa 3). Isso cria uma nova configuração para o vencedor retornar.Uma mudança para o local de edição anterior (configuração da janela) depende se uma alteração é feita na configuração da janela entre as opções;
C-c <left>
/M-x winner-undo
.C-c <left>
/M-x winner-undo
para trás eC-c <right>
/M-x winner-redo
para frente.Uma mudança é outra coisa senão outra
winner-undo
ouwinner-redo
.fonte
se você usar
evil-mode
, a camada vim, em seguida,C-o
eC-i
irá funcionar da mesma.Eles executam os comandos
evil-jump-backward
/forward
.C-o
pula para a posição mais antiga na lista de pulos, que é definida automaticamente (as marcas são definidas nos comandos de movimento).C-i
vai ao contrário. Também podemos usarTAB
depois de um emC-o
vez deC-i
. Portanto, o uso das duas funções o levará para frente e para trás no seu buffer atual.Se você deseja que esse recurso seja um buffer cruzado, consulte
evil-jumpers
: http://melpa.org/#/evil-jumper«
Evil-jumper é um complemento para o modo maligno que substitui a implementação da lista de saltos, de modo que imita mais de perto o comportamento do Vim. Especificamente, ele ultrapassará os limites do buffer e reviverá os buffers mortos, se necessário. A lista de saltos também pode ser mantida em um arquivo e restaurada entre as sessões. »
Nota: Eu aprendi neste wiki
fonte
C-o
eC-i
fazer?Se você usar Sincelos , poderá navegar rapidamente entre os marcadores no
mark-ring
de cada buffer ou noglobal-mark-ring
(que possui um único marcador em cada buffer).Você faz isso usando vários comandos
C-- C-SPC
(para um buffermark-ring
) ouC-- C-x C-SPC
(para oglobal-mark-ring
). Depois de pressionar a tecla uma vez, você usa as teclas usuais de ciclismo Icicles etc., para se mover entre os marcadores do anel.(As mesmas teclas sem o prefixo arg definem a marca (
set-mark-command
) e exibem a marca global (pop-global-mark
), respectivamente, da mesma forma que no Emacs de baunilha.)O texto da linha de cada marcador é usado como candidato à conclusão. À medida que você digita, sua entrada de minibuffer restringe os candidatos àqueles que correspondem (por exemplo, correspondência de substring ou regexp). Você pode alternar rapidamente entre os marcadores correspondentes ou visitar qualquer um deles diretamente. Você pode até alterar a ordem de classificação (
C-,
) para andar de bicicleta.fonte
Uma possibilidade mínima, mas muitas vezes útil - quando você apenas deseja espiar a outra função - está definindo
o que leva você de volta à sua posição exata do cursor inicial ao alternar entre C-ve M-v.
fonte
evil-mode
implementa marcadores no estilo Vim . Você pode definir marcadores com (m
, ou seja,evil-set-marker
) e pular para a marca com o backtick `(evil-goto-mark
) ou para a linha da marca'
(evil-goto-mark-line
).Portanto, você pode criar a marca "a" no primeiro local com
ma
, criar a marca "b" no segundo local comma
e, em seguida,'a
pular para marcar "a" e'b
pular para marcar "b".fonte
use imenu e código abaixo
fonte
Nos últimos 20 anos, mais ou menos, tenho usado essas duas gemas:
Eu os vinculo a C-. e C-, respectivamente, e use-os constantemente sem perceber mais.
Sim, registros e marcadores são muito mais flexíveis e poderosos, mas, ainda assim, esse é um daqueles ajudantes minúsculos e rápidos que tornam impossível a mudança para outros editores.
fonte
Você também pode tirar proveito das macros, pois elas podem ser rapidamente vinculadas a teclas convenientes.
Por exemplo, registre um salto na posição N usando
<F3> M-g g N <F4>
e atribua-o à tecla F5 comC-x C-k b <F5>
. Faça o mesmo com as posições M e F6. A partir de agora você pode simplesmente alternar F5 e F6 para pular entre N e M.Ainda mais simples, já que
<F4>
executa a última macro gravada e<C-u> F4
a penúltima, você pode pular a etapa de ligação de teclas e simplesmente alternar posições usando<F4>
e<C-u> F4
.Outra possibilidade bastante radical é criar um buffer indireto em outra janela com
<C-x> 4 c
. Este buffer tem o mesmo conteúdo, mas pode ter uma posição de ponto diferente. Agora basta alternar entre janelas<C-x> o
da maneira usual.fonte