9
votes

Comment peut-on parcourir rapidement beaucoup de fichiers dans Emacs?

Y a-t-il un moyen de parcourir rapidement de nombreux fichiers dans EMACS (24.3)? Plus spécifiquement:

supposons que un cadre EMACS est divisé en deux fenêtres. Supposons que la mise au point soit dans la fenêtre de gauche qui possède un tampon «dirigeable» ouvert avec de nombreux fichiers texte (ou code). Je voudrais monter et descendre la liste des fichiers (par exemple avec des touches de curseur), tandis que le fichier actuel est affiché dans la fenêtre droite. Encore mieux le fichier est visionné et fermé une fois que je vous déplace dans le tampon dirié vers le fichier suivant. Cela serait très utile, notamment avec un mode «omace».

Cela peut-il être fait dans 'Dired'? Je ne trouve pas non plus cette fonctionnalité dans DIRED-X ou Sunrise-Commander. Est-ce possible?

Les meilleurs candidats que j'ai déjà essayés (et pourquoi ils ne résolvent pas le problème):

'v' qui montre le fichier actuel, mais déplace également l'attention

'c-o' qui montre le fichier actuel, mais après avoir augmenté de haut en bas, je dois appuyer à nouveau sur C-O, il génère également de nombreuses tampons

Merci beaucoup pour votre aide!


4 commentaires

J'aime v . Vous pouvez ensuite naviguer avec n / p en mode View. Aussi c-x c-q pour éditer.


La navigation avec 'N' et 'P' ne fonctionne pas pour moi en mode View, à la place, il "recherche en avant / en arrière pour la dernière expression régulière".


Ah, désolé c'est ma personnalisation. Je pensais que c'était la valeur par défaut :)


Vous pouvez également filtrer quels fichiers sont affichés dans le mode indiqué par les marquant, puis masquant, par exemple pour masquer tous les fichiers se terminant dans .elc que vous pourriez faire % m \ .elc ret k


6 Réponses :


2
votes

Essayez xxx

qui pourrait faire appel à vous


2 commentaires

Merci pour la suggestion de «Speedbar». Cependant, cela ne résout pas mon problème initial.


Une suggestion utile, bien qu'elle ne réponde pas à la question.



4
votes

Voici comment je fais cela avec mode de vue : xxx

upd:

Celui-ci a deux vitres: xxx


4 commentaires

Où sont définies ces commandes? J'utilise 24.3.1 et je ne semble pas les avoir.


Ah Désolé, je pensais qu'ils étaient standard. Je vais mettre à jour la réponse


Merci! Très utile et il est déjà assez proche de ce que je cherche. Encore mieux serait de monter et descendre à l'intérieur de la fenêtre ardée (comme expliqué dans la question).


Le mode Affichage GNU. org / logiciel / emacs / manuel / html_node / emacs / mode-mode.html semble être un mode en lecture seule pour un fichier ou un tampon. Quelle est la justification d'utiliser le crochet de mode de vue pour la mappage de clé pour le mode séché?



3
votes
  1. charge glaçons . < / p>

  2. Définissez cette commande: xxx

    alors vous pouvez:

    1. Utilisez m-x my-wind-file (ou liez-le à une touche - E.G., C-X C-F ).
    2. Tapez éventuellement une partie d'un nom de fichier, pour limiter les noms correspondants.
    3. Utilisez éventuellement down ou up pour cycle parmi les noms de fichiers.
    4. Utilisez C-S-Down pour visiter le fichier suivant dans l'ordre.
    5. Répétez la répétition # 4 pour voir d'autres fichiers dans l'ordre.
    6. Répétez # 2 ou # 3 pour voir d'autres ensembles de fichiers.
    7. fin avec ret Pour choisir un fichier à visiter ou c-g pour annuler.

      chaque tampon de fichier que vous avez visité avec C-S-Down a été tué lorsque vous vu le prochain. Vous pouvez également mélanger dans c-down ou C-RET à Visitez également des fichiers dont vous ne voulez pas tuer les tampons que vous ne voulez pas tuer automatiquement. (Changer affichage-fichier à recherche-fichier si vous ne le faites pas vouloir visiter dans mode de vue , qui est en lecture seule.)

      [Par défaut, l'action alternative pour icle-wind-file est icicule-alt-act-fn-for-type , qui vous invite à un fichier- action appropriée à utiliser sur le candidat particulier choisi pour l'action. Commande My-Wind-Fichier Il suffit de substituer un différent Fonction d'action alternative (pour tous les candidats que vous choisissez).]

      Voir aussi ce fil de l'aide-gnu-emacs@gnu.org. C'est à peu près la même question que la vôtre, je pense. Mes réponses Il y avait à peu près le Même chose que ma réponse ici, mais il y a aussi des réponses d'autres personnes qui pourraient vous aider également.


0 commentaires

4
votes

Une solution simple et générique (sans optimisation) peut être via le mécanisme C-X () .

Ouvrez d'abord les deux vitres dans Emacs, avec - dites - le top one étant ardéré .

  • Appuyez sur O pour ouvrir le premier fichier dans le volet 2 nd

    Ensuite, vous pouvez démarrer le mécanisme répétition:

    • faire c-x ( pour commencer à enregistrer une macro
    • do c-x k et retour pour fermer le tampon
    • do o à nouveau pour revenir à dired
    • DO DOWN Clé pour accéder au fichier suivant
    • do o ouvrir le fichier suivant en bas volet
    • faire c-x) pour mettre fin à la macro

      à partir de ce point (étant dans le volet inférieur, Dired dans une vitre supérieure), ce qui fait un simple

      • c-x e (et seulement e s'il n'y a pas d'autre opération entre les deux)

        sera automatiquement

        • Fermer le volet inférieur Fermer, Aller au volet supérieur, jusqu'au fichier suivant, ouvrez-le en bas volet

          Il y a peut-être une manière plus spécifique de le faire, mais sachant que le mécanisme macro est de toute façon très utile dans les EMACS.


0 commentaires

4
votes

Merci beaucoup pour toutes ces réponses. Résumation J'ai créé la solution suivante (étendue la réponse de "Abo-Abo"):

;; little modification to dired-mode that let's you browse through lots of files
(add-hook 'dired-mode-hook
  (lambda()
    (define-key dired-mode-map (kbd "C-o") 'dired-view-current)     ; was dired-display-file
    (define-key dired-mode-map (kbd "n")   'dired-view-next)           ; was dired-next-line
    (define-key dired-mode-map (kbd "p")   'dired-view-previous))) ; was dired-previous-line

(defun dired-view-next ()
  "Move down one line and view the current file in another window."
  (interactive)
  (dired-next-line)
  (dired-view-current))

(defun dired-view-previous ()
  "Move up one line and view the current file in another window."
  (interactive)
  (dired-previous-line)
  (dired-view-current))

(defun dired-view-current ()
  "View the current file in another window (possibly newly created)."
  (interactive)
  (if (not (window-parent))
      (split-window))                                   ; create a new window if necessary
  (let ((file (dired-get-file-for-visit))
        (dbuffer (current-buffer)))
    (other-window 1)                                          ; switch to the other window
    (unless (equal dbuffer (current-buffer))                 ; don't kill the dired buffer
      (if (or view-mode (equal major-mode 'dired-mode))   ; only if in view- or dired-mode
          (kill-buffer)))                                                    ; ... kill it
    (let ((filebuffer (get-file-buffer file)))
      (if filebuffer                              ; does a buffer already look at the file
          (switch-to-buffer filebuffer)                                    ; simply switch 
        (view-file file))                                                    ; ... view it
      (other-window -1))))                   ; give the attention back to the dired buffer


1 commentaires

Très belle chose! Je viens de découvrir un petit bug, au moins dans Emacs 24, vous devez passer le numéro 1 à la ligne précédente / précédente.



1
votes

Une autre solution de mode Vue sur les listes de mode AG-AG. Je n'ai pas pu trouver une question pour le mode AG, peut-être que cela aide quelqu'un à généraliser un aperçu de la FFAP pour tout mode.

(defun directory-ag-results ()
  (save-excursion
    (goto-char (point-min))
    (search-forward "\"")
    (setq a (point))
    (search-forward "\"")
    (setq b (- (point) 1))
    (buffer-substring-no-properties a b)))

(defun search-item-path ()
  (let ((dir (directory-ag-results))
        (file-parts (split-string (substring-no-properties (thing-at-point 'filename)) ":")))
    (concat dir (nth 0 file-parts))))

(defun search-item-line ()
  (let ((file-parts (split-string (substring-no-properties (thing-at-point 'filename)) ":")))
    (- (string-to-number (nth 1 file-parts)) 1)))

(defun view-current ()
  "Quickly view the current file in another window."
  (if (not (window-parent))
      (split-window))                        ; create a new window if necessary
  (let ((file (search-item-path))
        (line (search-item-line))
        (dbuffer (current-buffer)))
    (other-window 1)                         ; switch to the other window
    (unless (equal dbuffer (current-buffer)) ; don't kill the dired buffer
      (if (or view-mode (equal major-mode 'dired-mode)) ; only if in view- or dired-mode
          (kill-buffer)))                               ; ... kill it
    (let ((filebuffer (get-file-buffer file)))
     (if filebuffer                     ; does a buffer already look at the file
          (switch-to-buffer filebuffer) ; simply switch
        (progn
          (view-file file)              ; ... view it
          (goto-char (point-min))
          (next-line line)))
      (other-window -1))))

(defun next-view-current ()
  (interactive)
  (next-line)
  (view-current))
(defun previous-view-current ()
  (interactive)
  (previous-line)
  (view-current))

(define-key ag-mode-map (kbd "M-p") 'previous-view-current)
(define-key ag-mode-map (kbd "M-n") 'next-view-current)


0 commentaires