Last week, infuriated (again) by having to cope with different IDEs for R and Perl, neither of which I like or use enough to get really comfortable in, I decided to try Emacs. This decision was not made without a certain trepidation on my part. My main use is for Perl with cperl and for R with ESS. My environment is Windows 7 Ultimate 64-bit and I am running v23.4.1, which I think is what the ESS package installed on my behalf.
Nearly a week in and so far it has been surprisingly painless, no more involved than any other significant piece of software. I have remapped my ctrl key to caps-lock, changed default folders, messed around with .emacs and made some additions such as auto-install, yasnippet, color-theme, icicles and a few others. Clearly there is some very sophisticated stuff out there. In addition of course certain features of base Emacs are immediately very powerful and useful, such as isearching up and down. On the whole I have been pleasantly surprised and reassured.
One thing that is cruder than I was expecting is the process of finding and opening files. After a cursory read of various tutorials I had this image of quasi-magical file location and filename auto-completion. The main directories in my setup have paths like g:/roaming/code/perl or g:/roaming/code/R/ but I often need to branch into completely different paths like g:/pricedata/support files/sector/project01/ and so on.
Currently I laboriously delete the file path when I need to take a different fork, then use auto-complete to move deeper into that branch of the filesystem. It kinda takes me back to running a bash shell on the Amiga twenty years ago.
What had I expected? Something like (using the above example) typing 'project01' to skip immediately into the folder at the bottom of the path. For some reason I had got the idea in my head that Emacs would preload directories. So maybe this wasn't realistic.
My guess is that my difficulties probably stem from my own lack of familiarity rather than a structural shortcoming in Emacs and leads on to my questions. I can't complain that there is not enough documentation; rather there is abundant information that it is scattered around rather haphazardly. Icicles has a similar problem - if anything there's too much.
1) What is the best tactic for moving around different branches of the file tree when trying to open files in the minibuffer or using some other method? Are there aliases that can be used to shortcut from one place to another or can one specify directories to be preloaded? Do people just cd around a lot? Or am I coming at this from completely the wrong angle and need to adopt a different strategy?
2) With additional setup, can auto-complete be used to find files in (say) the project01 directly above by prefixing with wildcards etc? What should I focus on to become more efficient here? Am I not tapping the power of add-ons like icicles, anything etc?
I realise these questions veer dangerously close the deprecated category of not having clear answers. My defence is that some tips/guidance at this stage before I commit myself to bad habits or a poor long-term solution would be welcome and I suspect the answers will benefit others who might be considering the switch. I am happy to withdraw or rephrase if there are problems.
In Emacs, type M-x dired. You will be prompted for the directory to open. Type in the directory to display, or press Return to open the default directory.
Use Ctrl-x f to open a file from within Emacs.
To enter into a directory, move to its listing in the Dired buffer, and simply hit the return key. To view a file, you can place the cursor on its entry and use the f or v key, or simply hit the return key.
You could benefit from using ido-mode
, which greatly enhances autocompletion nearly everywhere in emacs (especially when finding files or buffers)
(setq ido-enable-flex-matching t ido-auto-merge-work-directories-length -1 ido-create-new-buffer 'always ido-use-filename-at-point 'guess ido-everywhere t ido-default-buffer-method 'selected-window) (ido-mode 1) (put 'ido-exit-minibuffer 'disabled nil) (when (require 'ido-ubiquitous nil t) (ido-ubiquitous-mode 1))
While this might help you quickly finding files "not far away", it probably won't help you much finding files in entirely different locations.
If find that one way to begin tackling this problem is using recentf-mode
to quickly jump to recent locations (if you have only a small number of usual project directories, this might do the trick). recentf
can be coupled with ido
using something like this (I'm not sure where I got this snippet from):
(recentf-mode 1) (setq recentf-max-saved-items 50) (defun ido-recentf-open () "Use `ido-completing-read' to \\[find-file] a recent file" (interactive) (if (find-file (ido-completing-read "Find recent file: " recentf-list)) (message "Opening file...") (message "Aborting"))) (global-set-key (kbd "C-x C-r") 'ido-recentf-open)
With this, you can use C-x C-f
(ido-find-file
) to look for files near you current location, and C-x C-r
(ido-recentf-open
) to look for recently opened files (hoping one of them is not too far away from where you want to go).
helm
(formerly known as anything
) might suit you. You can install it manually, or using a auto-install
extension.
For the auto-install
way: download it, put in Your load-path
, then add to .emacs
:
(add-to-list 'load-path "~/.emacs.d/site-lisp/auto-install") (require 'auto-install) (setq auto-install-directory "~/.emacs.d/site-lisp/auto-install/")
Then do M-x auto-install-batch anything
. After that is done, put in .emacs:
(require 'anything) (require 'anything-match-plugin) (require 'anything-config) (require 'anything-show-completion)
Then do M-x anything
for anything.
Also give a try to ECB
(stands for Emacs Code Browser). If you're on Linux, you probably have it available in a standard repository.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With