7 votos

Cómo navegar rápidamente a/saltar entre las funciones en emacs?

Cómo navegar rápidamente a/saltar entre las funciones en emacs? Estoy buscando una forma para saltar rápidamente a las funciones en emacs. Estoy usando el emacs de búsqueda para hacerlo,pero es demasiado lento y falla. Por ejemplo,es necesario asegurarse de que se escriba una cadena que no coincida con la función de prototipo o de una llamada de función. Debo incluir el tipo de la función y la mendicidad de los parámetros de tipo para ella.. y en función a la sintaxis de codificación de estilo utilizado en el programa,es difícil/inviable hacer. ¿Qué es exactamente lo que estoy buscando: algo que me escriba sólo el nombre de la función y saltar a la mendicidad. Mi idioma actual es C en linux. Pero si existe tal función a otro de los lenguajes de programación y plataformas,por favor, muéstrame también. Va a ser muy apreciado.

Por favor: no sugieren que "el uso de un IDE" estoy bien con emacs.

11voto

Matthieu Puntos 61

M-x imenu le permite saltar a las funciones en el mismo archivo. Me han obligado a Super-yo, para un fácil acceso.

3voto

kindahero Puntos 913

Como ya se ha sugerido por otros, yo también uso Imenu exclusivamente para navegar en el búfer. Me resulta muy útil para hacer que por tener ido interfaz para Imenu. aquí está mi config para ido-imenu. (esta es la versión ligeramente modificada de la función que encontrar emacswiki página)

(defun ido-imenu ()
  "Update the imenu index and then use ido to select a symbol to navigate to.
Symbols matching the text at point are put first in the completion list."
  (interactive)
  (imenu--make-index-alist)
  (let ((name-and-pos '())
        (symbol-names '()))
    (flet ((addsymbols
            (symbol-list)
            (when (listp symbol-list)
              (dolist (symbol symbol-list)
                (let ((name nil) (position nil))
                  (cond
                   ((and (listp symbol) (imenu--subalist-p symbol))
                    (addsymbols symbol))

                   ((listp symbol)
                    (setq name (car symbol))
                    (setq position (cdr symbol)))

                   ((stringp symbol)
                    (setq name symbol)
                    (setq position
                          (get-text-property 1 'org-imenu-marker symbol))))

                  (unless (or (null position) (null name))
                    (add-to-list 'symbol-names name)
                    (add-to-list 'name-and-pos (cons name position))))))))
      (addsymbols imenu--index-alist))
    ;; If there are matching symbols at point, put them at the beginning
    ;; of `symbol-names'.
    (let ((symbol-at-point (thing-at-point 'symbol)))
      (when symbol-at-point
        (let* ((regexp (concat (regexp-quote symbol-at-point) "$"))
               (matching-symbols
                (delq nil (mapcar
                           (lambda (symbol)
                             (if (string-match regexp symbol) symbol))
                           symbol-names))))
          (when matching-symbols
            (sort matching-symbols (lambda (a b) (> (length a) (length b))))
            (mapc
             (lambda (symbol)
               (setq symbol-names (cons symbol (delete symbol symbol-names))))
             matching-symbols)))))
    (let* ((selected-symbol (ido-completing-read "Symbol? " symbol-names))
           (position (cdr (assoc selected-symbol name-and-pos))))
      (push-mark)
      (if (overlayp position)
          (goto-char (overlay-start position))
        (goto-char position)))))

(global-set-key (kbd "C-x C-i") 'ido-imenu)

Y puedo usar C-xC-i en muchos de los idiomas de los modos que apoyan imenu

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: