2 votes

Emacs : comment définir les variables 'bookmark' des répertoires

J'utilise Emacs et ESS pour la programmation R et je travaille généralement dans quelques dossiers spécifiques. En raison de la configuration de mon environnement de travail, les dossiers sur lesquels je travaille sont généralement "très profonds" dans chaque structure de dossiers, c'est-à-dire que je dois spécifier plusieurs sous-dossiers avant d'atteindre le répertoire dans lequel je travaille :

/Desktop/SUB1/SUB2/SUB3/SUB4...

C'est fastidieux et je dois utiliser à plusieurs reprises CTR+X CTR+F pour trouver les fichiers, même si je ne dois travailler qu'à quelques endroits. Je me demande s'il existe une possibilité qui me permette de définir quelques variables qui stockent les emplacements communs sur lesquels je travaille, et lorsque j'ai besoin de trouver n'importe quel script, je dois seulement invoquer quelque chose comme :

$SHORTCUT/Script.R

Il s'agirait d'une fonction comme un signet dans le gestionnaire de fenêtres de Linux. Je comprends qu'il existe un environnement de paramétrage global qui vous permet de définir le répertoire par défaut. Cependant, cela ne facilitera un peu le travail que pour un seul dossier. C'est une amélioration, mais ce n'est toujours pas suffisant si je travaille sur plusieurs projets simultanément.

Des suggestions ?

4voto

DJJ Points 149

Ici, vous avez quelques options. J'en ai 2 en réserve pour vous : les signets et les registres de fichiers si vous exécutez la commande suivante

(set-register ?a '(file . "~/.emacs"))

Ensuite, exécutez C-x r j a o M-x jump-to-register a vous accéderez à votre fichier .emacs. Je vous encourage à lire la documentation sur les registres, elle est très pratique.

Le deuxième est le signet. Vous pouvez marquer des fichiers ou des répertoires en utilisant C-x r m dans le tampon sur les intérêts. N'oubliez pas de sauvegarder les signets ou ils disparaîtront la prochaine fois que vous redémarrerez emacs. M-x bookmark save

mise à jour Une troisième option serait l'utilisation du package keychords que vous pouvez trouver sur melpa

(defun open-this  ()
  (interactive)
  (find-file "~/.emacs") )

(require 'key-chord)
(key-chord-mode 1)
(key-chord-define-global "=-"  'open-this)

puis en appuyant sur =- simultanément ou assez rapidement, vous passeriez au fichier .emacs. Une caractéristique intéressante est que vous pouvez également utiliser le mode local, de sorte que le même accord de touches fait différentes choses selon le mode utilisé.

1voto

James Anderson Points 511

C'est quelque chose que j'ai fait dans le passé :

(defun jea-open-deep-file (arg)
  (interactive "sWhich File?: ")
  (cond
   ((string= "1" arg) (find-file "~/.emacs"))
   ((string= "2" arg) (find-file "/Users/jamesanderson/code/python/aws/comprehend/README.md"))
   ((string= "3" arg) (find-file "~/some/other/file/somewhere/else.el"))
   (t (message "unknown choice"))))
(global-set-key [(f7)] 'jea-open-deep-file)

Alors, qu'est-ce qui se passe ici ? Il y a une fonction appelée : "jea-open-deep-file" qui peut ouvrir n'importe quel fichier avec "find-file". Si vous voulez l'essayer, vous pouvez la mettre dans votre fichier ".emacs", ou dans le tampon *scratch* pour l'essayer une seule fois. Une fois que vous avez modifié les appels à find-file pour pointer sur les fichiers que vous voulez ouvrir, vous pouvez évaluer le tampon (il y a plusieurs façons de le faire, la plus simple pour cette discussion est : Alt+X puis "eval-buffer" sans les guillemets dans la zone inférieure).

Comment l'utiliser ? Dans ce cas, j'ai fait correspondre la fonction à la fonction F7 clé. Choisissez-en une que vous n'utilisez pas déjà. Donc, une fois installé avec eval-buffer, je peux y aller :

  • F7
  • Il me demande "Quel fichier ?"
  • Je tape 1, 2 ou 3 et je tape RETURN
  • emacs ouvre le fichier

Je n'ai pas accès à une machine Windows pour le moment, mais vous devrez peut-être modifier légèrement les chemins, par exemple : "C:\\Program Files (x86)\\Aspell\\bin\\aspell.exe" ceci avec un supplément \ s'échappe.

Chaque fois que vous voulez ajouter un fichier à jea-open-deep-file, vous devrez réévaluer la fonction (cela semble un peu bizarre au début, mais c'est ainsi que vous "éditez l'éditeur pendant que vous éditez", ce qui est vraiment agréable de ne pas avoir à recharger toute l'application emacs).

Edit :

Si vous voulez sauter à une ligne particulière, essayez :

(defun jea-open-file-goto-line (fname line)
  (progn
    (find-file fname)
    (goto-char 0)
    (forward-line line)))

(defun jea-open-deep-file (arg)
  (interactive "sWhich File-Line?: ")
  (let* ((split (split-string arg "-"))
         (file (car split))
         (line (string-to-number (cadr split))))
    (cond
     ((string= "a" file) (jea-open-file-goto-line "~/.emacs" line))
     ((string= "b" file) (jea-open-file-goto-line "/Users/jamesanderson/code/python/aws/comprehend/README.md" line))
     ((string= "c" file) (jea-open-file-goto-line "~/some/other/file/somewhere/else.el" line))
     (t (message "unknown choice")))))

(global-set-key [(f7)] 'jea-open-deep-file)

à l'invite, tapez "b-13" (sans les guillemets) si vous voulez aller à la 13ème ligne du fichier marqué "b".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X