Update README

This commit is contained in:
Henrik Lissner 2016-02-26 09:30:41 -05:00
parent 591ed6e7a3
commit d2b721445a

View file

@ -4,54 +4,62 @@
> What we do every night, Pinky... > What we do every night, Pinky...
This is the Emacs configuration for stubborn vimmers and megalomaniacal mice alike. It This is an Emacs configuration for stubborn vimmers and megalomaniacal mice alike. It
strives to emulate vim as best it can, and surpass it in any way possible. strives to emulate vim as best it can, and surpass it in any way possible.
It is tailored to my needs as a software developer, data scientist and writer, running It is tailored to my needs as an software developer (app, game, and web), data scientist,
OSX and Emacs **25.1+**. and writer running OSX and Emacs **24.5+**.
## Installation ## Installation
``` ```
brew install cask brew install cask
brew install emacs --devel --with-imagemagick --with-librsvg --with-cocoa brew tap railwaycat/emacsmacport
git clone --recursive https://github.com/hlissner/emacs.d ~/.emacs.d brew install emacs-mac --with-imagemagick --with-modern-icon
git clone --depth 1 https://github.com/hlissner/emacs.d ~/.emacs.d
cd ~/.emacs.d cd ~/.emacs.d
make # installs plugins via cask and generates autoloads make # installs plugins via cask and generates autoloads
``` ```
And to optionally byte-compile everything: And to optionally:
`make compile # optionally byte-compiles everything` ```
make compile # optionally byte-compiles everything
make snippets # install hlissner/emacs-snippets into private/snippets
```
## Features ## Features
To get a picture of what's in here, check out: To get a picture of what's in here, check out:
* **[The Caskfile](Cask)**: contains a list of all the installed plugins, and to find where * **[The Caskfile](Cask)**: lists installed plugins and where they're configured.
they're configured. * **[init.el](init.el)**: lists all loaded modules
* **[init.el](init.el)**: lists all the loaded modules * **[private/my-bindings.el]**: most of the custom keybinds
* **[private/my-bindings.el](private/my-bindings.el)**: most of the custom keybinds * **[private/my-commands.el]**: available custom ex commands
* **[private/my-commands.el](private/my-commands.el)**: available custom ex commands
### Basic ### Basic
* Modal editing with **evil-mode** * Modal editing with **evil-mode**
* Pretty line numbers with **nlinum** and neckbearded hackery
* Syntax checking with **Flycheck** * Syntax checking with **Flycheck**
* Completion with **company-mode** * Completion with **company-mode**
* Pretty mode-line with **spaceline** * Pretty mode-line with **spaceline**
* Project navigation with **helm** and **neotree** * Project navigation with **helm** and **neotree**
* Session persistence (and tab emulation) with **workgroups2** * Session persistence (and tab emulation) with **workgroups2**
* Run code inline with **quickrun** * Run code inline with **quickrun**
* On-demand REPLs for many major modes with **repl-toggle**, including Ruby, Python,
PHP, JS, Elisp, and Lua.
* 2-char searching with **evil-snipe** * 2-char searching with **evil-snipe**
* Display diffs in the margin with **git-gutter** * Display diffs in the margin with **git-gutter**
* Repeat (most) motions with SPC * Repeat (most) motions with <kbd>SPC</kbd>
* Snippets with **yasnippet** * Snippet expansion with **yasnippet**
* File template support with **auto-insert** and **yasnippet** * File template support with **auto-insert** and **yasnippet**
* *writing-mode* for distractions-free typing in any mode
* Code folding with **hideshow**; doesn't allow arbitrary folds though * Code folding with **hideshow**; doesn't allow arbitrary folds though
* Multiple region editing with **iedit** * Multiple cursors with **[evil-multiedit]**
* O/S interaction functions, like **os-reveal** and **os-open-in-browser** * O/S interaction functions, like **os-reveal** and **os-open-in-browser**
* Custom TODO, FIxME and NOTE highlighting
* **big-mode** for presentations and demonstrations
* Tmux integration with `:t` and `:tcd` ex commands
### Advanced ### Advanced
@ -60,12 +68,12 @@ To get a picture of what's in here, check out:
vc-annotate, quickrun, neotree, \*messages\*, org-mode--and others. vc-annotate, quickrun, neotree, \*messages\*, org-mode--and others.
* **Ex compatibility**: I've given quite a few plugins an Ex interface. For instance, * **Ex compatibility**: I've given quite a few plugins an Ex interface. For instance,
`:t [ARGS]` and `:tcd` for tmux, `:ag [KEYWORDS]` for helm-ag, and `:align [REGEXP]` `:t [ARGS]` and `:tcd` for tmux, `:ag [KEYWORDS]` for helm-ag, and `:align [REGEXP]`
for align-regexp. for align-regexp. See [private/my-commands.el] for more.
* **Incremental highlighting for `:g[lobal]`**: evil's stock global command does not * **Incremental highlighting for `:g[lobal]`**: evil's stock global command does not
do this (`:align` will also highlight matches). do this (`:align` will also highlight matches).
* **iedit instead of multiple-cursors**: I've got my eye on * **A multiple cursor implementation using iedit**: I could never get [evil-mc] working,
[evil-mc](https://github.com/gabesoft/evil-mc), but until I jump ship I use and [multiple-cursors] doesn't play nice with evil-mode, so I wrote [evil-multiedit].
**evil-iedit**. To use it, hop into visual mode, select a region and press **evil-multiedit**. To use it, hop into visual mode, select a region and press
<kbd>S-r</kbd> (shift-R). Your edits will apply to all highlighted regions. To limit <kbd>S-r</kbd> (shift-R). Your edits will apply to all highlighted regions. To limit
iedit's scope: while in iedit mode go into visual, select a range and press iedit's scope: while in iedit mode go into visual, select a range and press
<kbd>SPC</kbd>. <kbd>SPC</kbd>.
@ -77,7 +85,7 @@ To get a picture of what's in here, check out:
``` ```
C-x C-l 'narf/company-whole-lines C-x C-l 'narf/company-whole-lines
C-x C-k 'company-dict C-x C-k 'narf/company-dict-or-keywords
C-x C-f 'company-files C-x C-f 'company-files
C-x C-] 'company-tags C-x C-] 'company-tags
C-x s 'company-ispell C-x s 'company-ispell
@ -90,7 +98,7 @@ To get a picture of what's in here, check out:
(company-select-previous-or-abort)))) (company-select-previous-or-abort))))
``` ```
* **Popup REPLs**: currently supports python(ipython), ruby (pry), php (boris), * **Popup REPLs**: currently supports python (ipython), ruby (pry), php (boris),
elisp (ielm), lua, js (nodejs), and the shell. More support later, hopefully for go elisp (ielm), lua, js (nodejs), and the shell. More support later, hopefully for go
and rust. and rust.
* **Yasnippet + auto-insert = file-templates with editable fields**: _and_ it works with * **Yasnippet + auto-insert = file-templates with editable fields**: _and_ it works with
@ -108,25 +116,17 @@ To get a picture of what's in here, check out:
brought a little of that to Emacs by defining `map!`, a macro for defining keybindings brought a little of that to Emacs by defining `map!`, a macro for defining keybindings
in as little space as possible. [See my bindings](private/my-bindings.el) for an in as little space as possible. [See my bindings](private/my-bindings.el) for an
example. example.
* **Org-mode**: I use Org for everything; CRM, note-taking, invoicing, prototyping
code (with org-babel), etc. I've added babel support for Rust and Go. I've written
#+CALL methods for extracting/compiling information with my CRM org plaintext files.
It's set up to display equations with LaTeX, sheet music with lilypond, and diagrams
with ditaa or plantuml. There is too much to cover in only one paragraph, is
constantly evolving, and isn't entirely included in this repo.
* **Modeline improvements** * **Modeline improvements**
* **evil-search/iedit/evil-substitute mode-line integration**: I like how anzu * **evil-search/iedit/evil-substitute mode-line integration**: I better integrated
displays state about the current search in the mode-line, so I wrote mode-line Anzu, evil-search, evil-substitute (e.g. `%s/foo/bar`) and
segments to display matches for evil-search (e.g. `/`/`?` searches), evil-substitute [evil-multiedit](https://github.com/hlissner/evil-multiedit) into the mode-line.
(e.g. `%s/foo/bar`) and iedit.
![matches count in mode-line](/../screenshots/search.png?raw=true) ![matches count in mode-line](/../screenshots/search.png?raw=true)
![substitutions count in mode-line](/../screenshots/subst.png?raw=true) ![substitutions count in mode-line](/../screenshots/subst.png?raw=true)
* **Macro-recording indicator**: Displays an indicator that you are recording a macro * **Macro-recording indicator**:
(and what register it's being recorded into).
![macro indicator in modeline](/../screenshots/macro.png?raw=true) ![macro indicator in modeline](/../screenshots/macro.png?raw=true)
* **Show (py|rb)env version in mode-line**: see `define-env-command` on how to set it up * **Show (py|rb)env version in mode-line**: see `define-env-command!` on how to set it up
for other modes. It only displays in their respective major-modes. for other modes. It only displays in their respective major-modes.
![py/rb version in modeline](/../screenshots/version.png?raw=true) ![py/rb version in modeline](/../screenshots/version.png?raw=true)
@ -134,3 +134,10 @@ To get a picture of what's in here, check out:
## What about Windo- ## What about Windo-
![Windows, you say...](http://i3.kym-cdn.com/photos/images/newsfeed/000/549/293/504.gif) ![Windows, you say...](http://i3.kym-cdn.com/photos/images/newsfeed/000/549/293/504.gif)
[private/my-bindings.el]: private/my-bindings.el
[private/my-commands.el]: private/my-commands.el
[evil-mc]: https://github.com/gabesoft/evil-mc
[multiple-cursors]: https://github.com/magnars/multiple-cursors.el
[evil-multiedit]: https://github.com/hlissner/evil-multiedit