Qual é o equivalente do matchit do Vim no Emacs?

1

Com o plugin do Vim matchit , você pode comparar não apenas os parênteses, mas também muito mais estruturas de linguagem que vêm em paris (por exemplo, if..end, do..end).

Agora estou usando o Emacs (por diversão!) e gostaria de saber se existe algo semelhante a esse plugin?

Muito obrigado.

    
por Limbo Peng 05.11.2011 / 14:44

5 respostas

1

evil-matchit link

Vim matchit.vim por Benji Fisher portado para o Emacs.

Quando estiver instalado, você pode pressionar "%" para pular entre as tags correspondentes no Emacs.

A maioria das linguagens modernas é suportada:

HTML
Python
Java
C++/C
Javascript
Fortran
SQL
Perl
Latex
CMake
Org-mode (match tag of org-mode and tags of other languages embedded in org file)
Ruby
Bash
Lua
PHP
Vim script
Emacs email (message-mode)
    
por 22.08.2013 / 15:54
1

Eu não sei qual plug-in corresponde às estruturas de idioma, mas uso uma função simples que corresponda simplesmente a parênteses.

Ok, eu não escrevi essa função, copiada de algum lugar

;; goto-matching-paren
;; -------------------
;; If point is sitting on a parenthetic character, jump to its match.
;; This matches the standard parenthesis highlighting for determining which
;; one it is sitting on.
;;
(defun goto-matching-paren ()
  "If point is sitting on a parenthetic character, jump to its match."
  (interactive)
  (cond ((looking-at "\s\(") (forward-list 1))
        ((progn
           (backward-char 1)
           (looking-at "\s\)")) (forward-char 1) (backward-list 1))))
(define-key global-map [(control ?c) ?p] 'goto-matching-paren) ; Bind to C-c p
    
por 05.11.2011 / 15:10
0

Eu não acho que haja uma facilidade geral, pois depende muito da linguagem que está sendo editada. Por exemplo, o modo GAP que eu trabalhei, tem uma função emulando a chave % do vim, mas eu sou bonita Certifique-se de que, por exemplo, cc-mode não. O modo Ruby é um exemplo de um modo que tem funções para avançar e voltar em blocos lógicos como class ... end , mas não acho que ele tenha uma correspondência. Não é muito fácil ter um jogo, e sim um avanço e um retrocesso é mais típico, já que é mais poderoso.

Em que modo você está interessado?

    
por 10.11.2011 / 00:20
0

Eu acho que normalmente o modo irá definir algo como o seu depois (ou foi depois de 2 anos atrás). C-h m (modo de ajuda) em um arquivo no modo em que você está trabalhando.

Por exemplo, o ruby-mode, tem "ruby-begin-of-block" e "ruby-end-of-block" Eu acho que o equivalente a estes é normalmente ligado a M-C-P (início) e M-C-N (final).

Você deve ser capaz de criar uma ligação no modo maligno que faça sentido. Se você fosse realmente ambicioso, você poderia ler e chamar as versões ruby no modo ruby se% falhasse.

Espero que ajude - ou pelo menos ajude a próxima pessoa a procurar uma resposta semelhante.

    
por 11.04.2013 / 01:11
0

Eu uso a seguinte função, que obtive aqui , para esse propósito:

(defun bounce-paren ()
  "Will bounce between matching parens just like % in vi"
  (interactive)
  (let ((prev-char (char-to-string (preceding-char)))
        (next-char (char-to-string (following-char))))
    (cond ((string-match "[[{(<]" next-char) (forward-sexp 1))
          ((string-match "[\]})>]" prev-char) (backward-sexp 1))
          (t (error "%s" "Not on a paren, brace, or bracket")))))

É importante observar que ele suporta apenas pares de caractere único e que modificá-lo para suportar delimitadores de vários caracteres exigiria essencialmente uma reescrita inteira. Eu tenho que vinculado a F2 (e raramente usá-lo), mas você poderia ligá-lo a%.

Recomendo a atenção do modo Smartparens , que aceita pares arbitrários de delimitadores de um ou vários caracteres, incluindo casos em que ambos os delimitadores são a mesma cadeia. Uma vez que você tenha seus pares configurados, uma função Lisp razoavelmente trivial, que dependendo do contexto chama uma das funções de navegação sp-beginning-of-sexp ou sp-end-of-sexp , deve lhe dar o comportamento que você deseja.

Considere também highlight-parentheses-mode , que colore as chaves em torno do ponto; Eu acho que usar esse modo me dá 99,4% do que eu costumava ter pulando entre chaves, sem precisar mover o ponto.

    
por 22.08.2013 / 16:33

Tags