|
|
<!DOCTYPE HTML>
<html lang="en" class="light sidebar-visible" dir="ltr">
<head>
<!-- Book generated using mdBook -->
<meta charset="UTF-8">
<title>emacs - Notes</title>
<!-- Custom HTML head -->
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#ffffff">
<link rel="icon" href="../favicon.svg">
<link rel="shortcut icon" href="../favicon.png">
<link rel="stylesheet" href="../css/variables.css">
<link rel="stylesheet" href="../css/general.css">
<link rel="stylesheet" href="../css/chrome.css">
<link rel="stylesheet" href="../css/print.css" media="print">
<!-- Fonts -->
<link rel="stylesheet" href="../FontAwesome/css/font-awesome.css">
<link rel="stylesheet" href="../fonts/fonts.css">
<!-- Highlight.js Stylesheets -->
<link rel="stylesheet" href="../highlight.css">
<link rel="stylesheet" href="../tomorrow-night.css">
<link rel="stylesheet" href="../ayu-highlight.css">
<!-- Custom theme stylesheets -->
<!-- Provide site root to javascript -->
<script>
var path_to_root = "../";
var default_theme = window.matchMedia("(prefers-color-scheme: dark)").matches ? "navy" : "light";
</script>
<!-- Start loading toc.js asap -->
<script src="../toc.js"></script>
</head>
<body>
<div id="body-container">
<!-- Work around some values being stored in localStorage wrapped in quotes -->
<script>
try {
var theme = localStorage.getItem('mdbook-theme');
var sidebar = localStorage.getItem('mdbook-sidebar');
if (theme.startsWith('"') && theme.endsWith('"')) {
localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
}
if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
}
} catch (e) { }
</script>
<!-- Set the theme before any content is loaded, prevents flash -->
<script>
var theme;
try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { }
if (theme === null || theme === undefined) { theme = default_theme; }
const html = document.documentElement;
html.classList.remove('light')
html.classList.add(theme);
html.classList.add("js");
</script>
<input type="checkbox" id="sidebar-toggle-anchor" class="hidden">
<!-- Hide / unhide sidebar before it is displayed -->
<script>
var sidebar = null;
var sidebar_toggle = document.getElementById("sidebar-toggle-anchor");
if (document.body.clientWidth >= 1080) {
try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
sidebar = sidebar || 'visible';
} else {
sidebar = 'hidden';
}
sidebar_toggle.checked = sidebar === 'visible';
html.classList.remove('sidebar-visible');
html.classList.add("sidebar-" + sidebar);
</script>
<nav id="sidebar" class="sidebar" aria-label="Table of contents">
<!-- populated by js -->
<mdbook-sidebar-scrollbox class="sidebar-scrollbox"></mdbook-sidebar-scrollbox>
<noscript>
<iframe class="sidebar-iframe-outer" src="../toc.html"></iframe>
</noscript>
<div id="sidebar-resize-handle" class="sidebar-resize-handle">
<div class="sidebar-resize-indicator"></div>
</div>
</nav>
<div id="page-wrapper" class="page-wrapper">
<div class="page">
<div id="menu-bar-hover-placeholder"></div>
<div id="menu-bar" class="menu-bar sticky">
<div class="left-buttons">
<label id="sidebar-toggle" class="icon-button" for="sidebar-toggle-anchor" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
<i class="fa fa-bars"></i>
</label>
<button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
<i class="fa fa-paint-brush"></i>
</button>
<ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
<li role="none"><button role="menuitem" class="theme" id="light">Light</button></li>
<li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
<li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
<li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
<li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
</ul>
<button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
<i class="fa fa-search"></i>
</button>
</div>
<h1 class="menu-title">Notes</h1>
<div class="right-buttons">
<a href="../print.html" title="Print this book" aria-label="Print this book">
<i id="print-button" class="fa fa-print"></i>
</a>
<a href="https://github.com/johannst/notes" title="Git repository" aria-label="Git repository">
<i id="git-repository-button" class="fa fa-github"></i>
</a>
</div>
</div>
<div id="search-wrapper" class="hidden">
<form id="searchbar-outer" class="searchbar-outer">
<input type="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
</form>
<div id="searchresults-outer" class="searchresults-outer hidden">
<div id="searchresults-header" class="searchresults-header"></div>
<ul id="searchresults">
</ul>
</div>
</div>
<!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
<script>
document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
});
</script>
<div id="content" class="content">
<main>
<h1 id="emacs1"><a class="header" href="#emacs1">emacs(1)</a></h1>
<h2 id="help"><a class="header" href="#help">help</a></h2>
<pre><code class="language-markdown"> C-h ? list available help modes
C-h e show message output (`*Messages*` buffer)
C-h f describe function
C-h v describe variable
C-h w describe which key invoke function (where-is)
C-h c <KEY> print command bound to <KEY>
C-h k <KEY> describe command bound to <KEY>
C-h b list buffer local key-bindings
<kseq> C-h list possible key-bindings with <kseq>
eg C-x C-h -> list key-bindings beginning with C-x
</code></pre>
<h2 id="package-manager"><a class="header" href="#package-manager">package manager</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------------------------
package-refresh-contents refresh package list
package-list-packages list available/installed packages
`U x` to mark packages for Upgrade & eXecute
</code></pre>
<h2 id="window"><a class="header" href="#window">window</a></h2>
<pre><code class="language-markdown"> key fn description
----------------------------------------------
C-x 0 delete-window kill focused window
C-x 1 delete-other-windows kill all other windows
C-x 2 split-window-below split horizontal
C-x 3 split-window-right split vertical
C-x o other-window other window (cycle)
</code></pre>
<h2 id="minibuffer"><a class="header" href="#minibuffer">minibuffer</a></h2>
<pre><code class="language-markdown"> key description
----------------------------
M-e enter edit minibuffer edit mode
M-up focus previous completion
M-down focus next completion
M-ret select focused completion
</code></pre>
<h2 id="buffer"><a class="header" href="#buffer">buffer</a></h2>
<pre><code class="language-markdown"> key fn description
---------------------------------------------
C-x C-q read-only-mode toggle read-only mode for buffer
C-x k kill-buffer kill buffer
C-x s save-some-buffers save buffer
C-x w write-file write buffer (save as)
C-x b switch-to-buffer switch buffer
C-x C-b list-buffers buffer list
</code></pre>
<h2 id="ibuffer"><a class="header" href="#ibuffer">ibuffer</a></h2>
<p>Builtin advanced buffer selection mode</p>
<pre><code class="language-markdown"> key fn description
--------------------------------------
ibuffer enter buffer selection
h ibuffer help
o open buffer in other window
C-o open buffer in other window keep focus in ibuffer
s a sort by buffer name
s f sort by file name
s v sort by last viewed
s v sort by major mode
, cycle sorting mode
= compare buffer against file on disk (if file is dirty `*`)
/m filter by major mode
/n filter by buffer name
/f filter by file name
// remove all filter
/g create filter group
/\ remove all filter groups
</code></pre>
<h2 id="goto-navigation"><a class="header" href="#goto-navigation">goto navigation</a></h2>
<pre><code class="language-markdown"> key fn description
----------------------------------------
M-g g goto-line go to line
M-g M-n next-error go to next error (grep, xref, compilation, ...)
M-g M-p previous-error go to previous error
M-g i imenu go to place in buffer (symbol, ...)
</code></pre>
<h2 id="isearch"><a class="header" href="#isearch">isearch</a></h2>
<pre><code class="language-markdown"> key fn description
-------------------------------------------------
C-s isearch-forward search forward from current position (C-s to go to next match)
C-r isearch-backward search backwards from current position (C-r to go to next match)
C-w isearch-yank-word-or-char feed next word to current search (extend)
M-p isearch-ring-advance previous search input
M-n isearch-ring-retreat next search input
M-e isearch-edit-string edit search string again
M-s o occur open search string in occur
</code></pre>
<h2 id="occur"><a class="header" href="#occur">occur</a></h2>
<pre><code class="language-markdown"> key fn description
-----------------------------------
M-s o occur get matches for regexp in buffer
use during `isearch` to use current search term
e enter occur edit mode (C-c C-c to quit)
n move to next entry and keep focus in occur buffer
p move to previous entry and keep focus in occur buffer
C-n goto next line
C-p goto previous line
o open match in other window
C-o open match in other window keep focus in ibuffer
</code></pre>
<pre><code class="language-markdown"> key fn description
---------------------------------------------------------
multi-occur-in-matching-buffers run occur in buffers matching regexp
</code></pre>
<h2 id="grep"><a class="header" href="#grep">grep</a></h2>
<pre><code class="language-markdown"> key fn description
-----------------------------------
rgrep recursive grep
find-grep run find-grep result in *grep* buffer
n/p navigate next/previous match in *grep* buffer
q quit *grep* buffer
</code></pre>
<h2 id="yankpaste"><a class="header" href="#yankpaste">yank/paste</a></h2>
<pre><code class="language-markdown"> key fn description
---------------------------------------------
C-<SPACE> set-mark-command set start mark to select text
M-w kill-ring-save copy selected text
C-w kill-region kill selected text
C-y yank paste selected text
M-y yank-pop cycle through kill-ring (only after paste)
</code></pre>
<h2 id="register"><a class="header" href="#register">register</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------------------------
C-x r s <reg> copy-to-register save region in register <reg>
C-x r i <reg> insert-register insert content of register <reg>
</code></pre>
<h2 id="bookmarks"><a class="header" href="#bookmarks">bookmarks</a></h2>
<pre><code> key fn description
-------------------------------------------
C-x r m bookmark-set set a bookmark
C-x r b bookmark-jump jump to a bookmark
C-x r l bookmark-bmenu-list list all bookmarks
</code></pre>
<h2 id="blockrect"><a class="header" href="#blockrect">block/rect</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------------------------
C-x <SPC> rectangle-mark-mode activate rectangle-mark-mode
string-rectangle insert text in marked rect
</code></pre>
<h2 id="mass-edit"><a class="header" href="#mass-edit">mass edit</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------------------------
C-x h mark-whole-buffer mark whole buffer
delete-matching-line delete lines matching regex
replace-string replace unconditional
M-% query-replace search & replace
C-M-% query-replace-regexp search & replace regex
</code></pre>
<h2 id="narrow"><a class="header" href="#narrow">narrow</a></h2>
<pre><code class="language-markdown"> key fn description
---------------------------------------------
C-x n n narrow-to-region show only focused region (narrow)
C-x n w widen show whole buffer (wide)
</code></pre>
<h2 id="org"><a class="header" href="#org">org</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------------
M-up/M-down re-arrange items in same hierarchy
M-left/M-right change item hierarchy
C-RET create new item below current
C-S-RET create new TODO item below current
S-left/S-right cycle TODO states
</code></pre>
<h3 id="org-source"><a class="header" href="#org-source">org source</a></h3>
<pre><code class="language-markdown"> key fn description
------------------------------
<s TAB generate a source block
C-c ' edit source block (in lang specific buffer)
C-c C-c eval source block
</code></pre>
<h2 id="project"><a class="header" href="#project">project</a></h2>
<pre><code class="language-markdown"> key fn description
----------------------------------------------------------
C-x p p project-switch-project switch project
C-x p f project-find-file find file in project
C-x p r project-query-replace-regexp query replace on project
C-x p x project-execute-extended-command exec command on project
C-x p ! project-shell-command shell command on project
C-x p & project-async-shell-command async shell command on project
</code></pre>
<h2 id="company"><a class="header" href="#company">company</a></h2>
<pre><code class="language-markdown"> key fn description
-------------------------------
C-s search through completion candidates
C-o filter completion candidates based on search term
<f1> get doc for completion condidate
M-<digit> select completion candidate
</code></pre>
<h2 id="tags"><a class="header" href="#tags">tags</a></h2>
<p>To generate <code>etags</code> using <code>ctags</code></p>
<pre><code class="language-markdown"> ctags -R -e . generate emacs tag file (important `-e`)
</code></pre>
<p>Navigate using tags</p>
<pre><code class="language-markdown"> key fn description
-----------------------------------------------
M-. xref-find-definitions find definition of tag
(C-u prefix to enter symbol manually)
xref-find-apropos find symbols matching regexp
M-? xref-find-references find references of tag
</code></pre>
<h2 id="lisp"><a class="header" href="#lisp">lisp</a></h2>
<pre><code class="language-markdown"> key fn description
------------------------------
ielm open interactive elips shell
</code></pre>
<p>In <code>lisp-interaction-mode</code> (<code>*scratch*</code> buffer by defult)</p>
<pre><code class="language-markdown"> key fn description
-----------------------------------------------------------
C-j eval-print-last-sexp evaluate & print preceeding lisp expr
C-x C-e eval-last-sexp evaluate lisp expr
C-u C-x C-e eval-last-sexp evaluate & print
C-c C-e elisp-eval-region-or-buffer eval buffer or region (elisp mode)
</code></pre>
<h2 id="ido"><a class="header" href="#ido">ido</a></h2>
<p>Builtin fuzzy completion mode (eg buffer select, dired, ...).</p>
<pre><code class="language-markdown"> key fn description
------------------------------------------
ido-mode toggle ido mode
<Left>/<Right> cycle through available competions
<RET> select completion
</code></pre>
<p>There is also <code>fido</code>, which is the successor of <code>ido</code>, which also
supports <code>fido-vertical-mode</code> in case vertical mode is preferred.</p>
<h2 id="evil"><a class="header" href="#evil">evil</a></h2>
<pre><code class="language-markdown"> key fn description
--------------------------
C-z toggle emacs/evil mode
C-^ toggle between previous and current buffer
C-p after paste cycle kill-ring back
C-n after paste cycle kill-ring forward
</code></pre>
<h2 id="dired"><a class="header" href="#dired">dired</a></h2>
<pre><code class="language-markdown"> key fn description
--------------------------
i open sub-dir in same buffer
+ create new directory
C copy file/dir
R move file/dir (rename)
S absolute symbolic link
Y relative symbolic link
d mark for deletion
m mark file/dir
u un-mark file/dir
U un-mark all
x execute marked actions
q quit
</code></pre>
<h2 id="info"><a class="header" href="#info">info</a></h2>
<pre><code class="language-markdown"> key fn description
---------------------------------------
n Info-next next page
p Info-prev previous page
l Info-history-back history go back
r Info-history-forward history go forward
^ Info-Up up in info node tree
m Info-menu goto menu (by minibuf completion)
s Info-search search info
g Info-goto-node goto info node (by minibuf completion)
Info-history open info history in buffer
</code></pre>
</main>
<nav class="nav-wrapper" aria-label="Page navigation">
<!-- Mobile navigation buttons -->
<a rel="prev" href="../tools/screen.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../tools/gpg.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
<div style="clear: both"></div>
</nav>
</div>
</div>
<nav class="nav-wide-wrapper" aria-label="Page navigation">
<a rel="prev" href="../tools/screen.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
<i class="fa fa-angle-left"></i>
</a>
<a rel="next prefetch" href="../tools/gpg.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
<i class="fa fa-angle-right"></i>
</a>
</nav>
</div>
<script>
window.playground_copyable = true;
</script>
<script src="../elasticlunr.min.js"></script>
<script src="../mark.min.js"></script>
<script src="../searcher.js"></script>
<script src="../clipboard.min.js"></script>
<script src="../highlight.js"></script>
<script src="../book.js"></script>
<!-- Custom JS scripts -->
</div>
</body>
</html>
|