2009年10月26日星期一

Emacs: how to auto-complete word

Both vim and emacs have a function to auto-complete words. For example, in emacs, type "M-/" then it will help you automatically complete the word currently you are typing in. This specially is useful as programming.

Also, I find a good file to compare commands in vim and emacs. In order to avoid the original page is dead, I post it here for reference. The original address is: http://karl-voit.at/vim-emacs-cheatsheet_of_freezing_hell.txt

http://karl-voit.at/vim-emacs-cheatsheet_of_freezing_hell.txt



,----
| emacs-stamp: Time-stamp: <2006-11-07 23:40:22 karl>
| vim-stamp: Latest change: Wed Oct 15 09:43:51 CEST 2008 (,L)
| .... whichever comes last *ggg*
|
| Title: vim7-emacs21-cheatsheet of freezing hell
| ... tries to combine the two editors of choice
|
| Author: Karl Voit
| Purpose: learning emacs21 _and_ vim (for myself)
| License: Creative Commons http://creativecommons.org/licenses/by/2.5/
| Status: constantly modified, updated, and expanded
`----

================================================================================
Editor shortcuts: Emacs and vim vim emacs21
================================================================================

exit :q C-x C-c
save :w :w! C-x C-s
save as :w

save and exit :wq (or: ZZ)
exit without saving :q! (or: ZQ)

open file :e(dit) file C-x C-f
open file read only C-x C-r
re-read file (discard changes) :e(dit)!

edit file under cursor gf (goto file)

undo last changes u (or: C-_) C-_
undo one change :u(ndo)
undo latest changes on current line U
redo C-r

repeat last change .

append text after cursor a
append text after EOL A

insert text after cursor i
insert text before first non-whitesp. I

insert line below cursor and insert o
insert line above cursor and insert O

join current line and next line J

mark char begin v (column: C-v|C-q) C-Space
mark line begin V

restore last selection gv

copy marked part y M-w
paste marked part p C-y "yank"
cut marked part c C-w
delete marked part d

delete char x DEL
delete line dd (or: :d)
copy current line yy (or: Y)
delete to end of word cw (change word) M-d
delete current word caw
delete to EOL D C-k

toggle overwrite/insert mode INS (or: R) M-x overwrite-mode
replace current char with r

repeat next X times X C-u X

complete word M-/
complete word backward C-P M-/
complete word forward C-N M-/

cancel C-c C-g

redraw C-l

file info C-g
file info (verbose) g C-g

set auto indent :set ai M-x auto-fill-mode
:set textwidth=0

execute shell code :r(ead) !

show whitespaces :set list

insert :r(ead) M-x insert-file

--------------------------------------------------------------------------- Help

show help of cmd XY :help XY
show man-page of current word K
grep help :helpg foobar

------------------------------------------------------------------------ Buffers

close buffer C-w c :clo(se) C-x k
close all buffers but current C-w o :on(ly)

open file for writing C-x C-f
open file for reading C-x C-r

change to previous buffer C-^ C-6 C-x b
change to buffer number <12> <12> C-^ <12> C-6 C-x b
:b <12>
split vertically C-w s :sp(lit)
split horizontally C-w v :vs(split)

duplicate buffer :new

change to (upper) high buffer C-w h
change to lower buffer C-w l

list buffers :ls

edit in new tab :tabe(dit) fileA
change to next tab gt
change to previous tab gT


--------------------------------------------------------------------- Navigation

goto line <12> <12>G M-x goto-line <12>

up k C-p
Cursor movements left right h l C-f C-f
down j C-n

buffer begin 1G gg M-<
buffer end G M->

line begin ... end 0 ... $ C-a ... C-e
line begin (first non-whitespace) ^

word next w M-f
word last b M-b

sentence previous ( M-a
sentence next ) M-e

paragraph begin { M-{
paragraph end } M-}

goto last place C-o
goto next place (if any) C-i

goto begin of last marked part '<
goto end of last marked part '>

page up C-b M-v
page down C-f C-v

1/2 page up C-u
1/2 page down C-d

scroll one line down (keep cursor) C-e
scroll one line up (keep cursor) C-y

remember position (as p) m p C-x r m
jump to position (p) ` p C-x r b
jump to last marked position ``
jump to last place edited `.
list all marked positions :marks

place current line in the center z. C-l "locate"

------------------------------------------------------------ Search and replace

current line: goto character X fC
current line: goto character X backw. FC
current line: go before character X tC
current line: go before char. X backw.TC

activate incremental search :set incsearch
search incremental (if activated) / C-s
search incremental backwards (if activated) ? C-r
repeat search n C-s or C-r
repeat search in other direction N

replace s/foo/bar(/gci) M-%

search word under cursor *
search word under cursor backward #
search local variable under cursor gd
search buffer variable under cursor gD

search correspondent brace/bracker/.. %

unhighlight the search patterns :noh

search for regular expressions /REG C-M-s
repeat search for reg. expr. n C-M-s
search in other directory for reg.ex. N C-M-r

----------------------------------------------------------------------- Spelling

activate spell checking :set spell
change spelling dictionary :set spelllang=de
search for next misspelled word ]s
show correction proposals z=
add as correct word zg
add as incorrect word zf

--------------------------------------------------------------------- Formatting

lowercase current word :map l viwuW M-l
capitalize current word :map c viwu~W M-c
uppercase current word :map u viwUW M-u
toggle case of current word :map t viw~W
toggle case of char under cursor ~

quote text C-c C-q
format line
format paragraph gqap M-q
format whole document gggqG

shift marked lines to left <<
shift marked lines to right >>
set shiftwidth :set shiftwidth=4


------------------------------------------------------------------------- Macros

begin recording (name: foo) qfoo C-x (
end recording q C-x )

execute macro foo @foo C-x e
repeat macro execution @@

edit macro "ap
end edit macro

save macro

------------------------------------------------------------------------ Columns

mark column begin C-v (Windows: C-q) C-space

set width mark to longest line $

copy column(s) "*y
paste column(s) p C-x r y "yank"
cut column(s) d C-x r k "kill"

insert column text (foo) (visual:) Ifoo ESC C-x r t foo

-------------------------------------------------------------- Folding / Outline

hide all zC C-c C-t
show all zO C-c C-a
toggle hide/show all zi

hide this zc C-c C-d
show this zo C-c C-s

goto previous zk C-c C-p
goto next zj C-c C-n

------------------------------------------------------------- Special Characters

enter carriage return C-q ENTER C-q ENTER
enter newline C-q C-j C-q C-j
enter spoiler character ^L C-q C-l C-q C-l

------------------------------------------------------ Compare/merge differences

start file A and B in compare mode vimdiff A B emerge A B

emacs: goto fast-mode (C-c C-c doesn't have to be used) C-c C-c f
emacs: goto edit-mode e

next difference ]c (C-c C-c) n
previous difference [c (C-c C-c) p
goto difference X C-u X j

change to left file (higher) C-w h
change to right file (lower) C-w l

take this version :[range]diffpu(t) dp
take other version :[range]diffg(et) do

take A-version (C-c C-c) a
take B-version (C-c C-c) b

quit without saving the merge C-]
recenter buffers l

emacs: http://www.cs.cmu.edu/cgi-bin/info2www?(emacs)Merge%20Commands

---------------------------------------------------------------- Version Systems

vim: install vcsnursery from http://www.vim.org/scripts/script.php?script_id=1898

commit changes :VCSCommit C-x v v
show differences between versions :VCSVimDiff C-x v =
show log of current file :VCSLog C-x v l
revert changes to most recent version :VCSRevert C-x v u
update current file from repos :VCSUpdate

add file to repos :VCSAdd C-x v i
show annotations :VCSAnnotate
delete file (incl. from repos) :VCSDelete
show difference to previous version :VCSDiff
view a certain version :VCSReview 42 C-x v r
show detailed infos :VCSStatus


================================================================================
vim specific shortcuts:
================================================================================


================================================================================
Own vim macros
================================================================================

" move line before boxquote into title field of boxquote
map ,vkbqt kDj6lp0

" remove/delete trailing whitespace:
nmap ;tr :%s/\s\+$//
vmap ;tr :s/\s\+$//

"kill quoted sig
map ,kqs G?^> -- $d}

" change subject (Subjectaenderung) (Source: Michael Prokop)
map ,vkcs :set nohlsearch
\:1,/^Subject: /g//s/^\(Subject: \)\(Re: \)\=\(.*\)$/
\\1 (was: \3)/9i

" simple quote (insert quote after this line)
map ,vksq 0jikki

" quote between line (insert quote in between the line)
map ,vkqbl i0kxkkxjxi

" update timestamp (make sure that "set paste" is NOT set
iab Tue Jul 31 13:03:52 CEST 2007 =strftime("%a %b %d %T %Z %Y")
" map ,L 1G/Latest change:\s*/e+1CYDATE
map ,L 1G/Latest change:\s*/e CYDATE

" voit 20070306:
" ESC-c ... capitalize current word (and goto next word)
map c viwu~W
" ESC-l ... lowercase current word (and goto next word)
map l viwuW
" ESC-u ... uppercase current word (and goto next word)
map u viwUW



FIXXME: Bereichsangaben

" Using (g)vim to colorize sourcecode (from: http://barnson.org/node/295#comment-26758)
" used here: Visual Basic syntax
:cal SetSyn("vb")
:syntax on
:set background=light
:runtime! syntax/2html.vim
ggVG (to select all in this top frame)
"+y (to copy to clipboard)


...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
N O T E S F O L L O W I N G
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................

Svens Vortrag:
------------------------------------------------------------------------- Suchen


------------------------------------------------------ Eingabe von Sonderzeichen

Eingabe über ASCII-Nummer:
ß 223 ä 228 ö 246 ü 252

Zwei-Zeichen-Kombination:
Digraph Input! a + : -> ä

automatische Einrücken (indenting)
Clipboards/Register
Markieren von Text
von Position bis Position
zeilenweise (block)
als Rechteck -> Tabelle

Zeile? DOS/Windows, Unix, oder Mac?
Automatische Erkennung
Beliebige Wahl

%page
Anzeige - Grundlegend

Aktuelle Position des Cursors (Lineal,ruler)

%pause
ASCII-Wert von Zeichen

%pause
Sichtbarmachung von speziellen Zeichen
(TABs, trailing spaces)
:set list -> schon oben drinnen

%pause
geteilte Fenster (horizontal,vertikal)
-> TextKopieren, Vergleiche

%page
Anzeige - Fortgeschritten

Syntax Coloring / Highlighting
%pause
Achtung: ersetzt keinen Parser!

%pause
Struktur der Datei anzeigen - Baumstruktur
Text verstecken
Syntax dependant
Kommandos zum Einklappen und Verstecken

%page
Abkürzungen - Abbreviations

%pause
einfache Wortexpansion:
LS -> Leutheuser-Schnarrenberger

%pause
mehrere Worte:
LT -> Linux-Tag Chemnitz

%pause
mehr als nur Buchstaben:
function_mit_viel_bedeutung(*par1,par2)
* = neue Cursorposition

%pause
mehrzeilige Floskeln:

Sehr geehrter Herr Spammer..
..Aufnahme ins Killfile..
Gründe: [Liste]
Mit freundlichen Grüßen

%page
Goodies

Autosave
Backup files
Compiler
Filtering
Sessionfile
Syntax Input

%page
Grenzen - Limits

Endlicher Speicher -> Grenzen

Dateigröße
Dateinamenlänge
Displaybreite

Zeilenlänge
Zeilenanzahl

Bufferanzahl
Registergröße

,----
| 2do
`----

tabs (vim7)

retab + ersetzen:
:set tabstop=4
:set expandtab
:%retab

^M herauslöschen

align-current


query option value :set OPTION?

folding + examples (emacs-2do-list and vim-2do-list)

[email protected] ~ % grep boxes .vimrc
" 040420 introduced history 8-) and slightly modified 'boxes'-stuff
" 030219 VBlockquote.vim - like the tool "boxes" works ;-)
" 030219 Call boxes - with some funny box-styles ;o)
map ;0 :'<,'>!boxes
map ;1 :'<,'>!boxes -d boxquote
map ;2 :'<,'>!boxes -d peek -a c -s 40x5
map ;3 :'<,'>!boxes -d c-cmt
map ;4 :'<,'>!boxes -d dog -a c
map ;5 :'<,'>!boxes -d simple -a
jr
map ;6 :'<,'>!boxes -d headline
--> Test! (FIXXME)
--> boxes = extra-tool!

"boxing" text C-c q
title of box C-c w

Snippets einfügen wie zB :
:he :iabbrev
:he mapmode-i
(Vim7: C-x C-o)

Ranges: . .+3 % ,. .,$


.........................................................

,----
| notes from a former talk:
`----
:set tw=50 ... set texxt width
map gqip ... macro setzen
:set ft=html
:set paste ... Einfuegen ohne Umformatierung
:set nopaste ...
:set sw ... Option vervollstaendigen lassen
:set sw= ... Option plus Wert vervollstaendigen lassen
:set listchars=tab:»·,trail:·,,eol:$ ... wie sollen list-Elemente usw visualisiert werden?
:w datei:.neu ... Kopie mit Anhaengsel ".neu" erstellen, Buffer bleibt bei "datei"
:!ls -l % ... shell-Kommando ls aufrufen (%=aktueller Buffername)
:! ... letzter Befehl, der mit "!" begonnen hat
C-w n ... C-w=Fensterbefehl, n=new
C-w C-r ... unterster Buffer oben einfuegen (rotate)
:help C-v C-w ... show help on windows-commands (C-v nur um C-w einzugeben)

vimdiff
:diffget ... Aenderungen in den Buffer uebernehmen

%%% vim: ft=mgp ai noet ts=2

------------------------------------------
Emacs und ispell:

;; User-Dictionary ohne Nachfrage speichern
(setq ispell-silently-savep t)
(autoload 'flyspell-mode "flyspell" "On-the-fly spelling checking" t)
(autoload 'flyspell-mode "flyspell" "On-the-fly ispell." t)
(setq ispell-program-name "aspell")

;; Initialize spell checking
(setq-default ispell-program-name "aspell")
(set-default 'ispell-change-directory "ndeutsch8-15")
(set-default 'ispell-local-dictionary "ndeutsch8-15")
;; ========================
;; ISPELL
;; ========================
(require 'ispell)
(add-to-list 'ispell-dictionary-alist
'("ndeutsch8-15"
"[a-zA-Z\304\326\334\344\366\337\374]"
"[^a-zA-Z\304\326\334\344\366\337\374]"
"[']" t
("-C" "-d" "german")
"~latin1" iso-8859-15))

;; ========================
;; ISPELL End
;; ========================

;; ========================
;; FLYSPELL
;; ========================
(add-hook 'flyspell-mode-hook
(function (lambda ()
(setq ispell-local-dictionary "ndeutsch8-15")
)))


M-X change-ispell-dictionary

-----------------------------------------------------------
emacs und LaTeX

Added in file c:\.emacs

(require 'tex-site)
(setq tex-dvi-view-command "C:\texmf\miktex\bin\yap.exe")
(custom-set-variables
;; custom-set-variables was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
'(TeX-output-view-style (quote (("^dvi$" "^pstricks$\\|^pst-\\|^psfrag$" "%(o?)dvips %d -o && gv %f") ("^dvi$" "^a4\\(?:dutch\\|paper\\|wide\\)?\\|sem-a4$" "%(o?)xdvi %dS -paper a4 %d") ("^dvi$" ("^a5\\(?:comb\\|paper\\)?$" "^landscape$") "%(o?)xdvi %dS -paper a5r -s 0 %d") ("^dvi$" "^a5\\(?:comb\\|paper\\)?$" "%(o?)xdvi %dS -paper a5 %d") ("^dvi$" "^b5paper$" "%(o?)xdvi %dS -paper b5 %d") ("^dvi$" ("^landscape$" "^pstricks$\\|^psfrag$") "%(o?)dvips -t landscape %d -o && gv %f") ("^dvi$" "^letterpaper$" "%(o?)xdvi %dS -paper us %d") ("^dvi$" "^legalpaper$" "%(o?)xdvi %dS -paper legal %d") ("^dvi$" "^executivepaper$" "%(o?)xdvi %dS -paper 7.25x10.5in %d") ("^dvi$" "^landscape$" "%(o?)xdvi %dS -paper a4r -s 0 %d") ("^dvi$" "." "%(o?)xdvi %dS %d") ("^pdf$" "." "\"c:\\Programme\\Adobe\\Acrobat 6.0\\Reader\\AcroRd32.exe\" %o") ("^html?$" "." "netscape %o")))))
(custom-set-faces
;; custom-set-faces was added by Custom -- don't edit or cut/paste it!
;; Your init file should contain only one such instance.
)


Change target to PDFLaTeX: C-c C-t C-p
Compiled using C-c C-c


=== [ ENDE ] === ------------------------------------------------------------------------------
%%% Local Variables:
%%% mode: outline
%%% outline-regexp: "\\(\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\(\\[.+\\]\\)? .*\\)\\|\\(^=== \\[ .* \\] ===.*\\)"
%%% eval: (auto-fill-mode -1)
%%% eval: (flyspell-mode -1)
%%% eval: (end-of-buffer)
%%% eval: (hide-body)
%%% emerge-set-combine-versions-template: "%a\n%b\n"
%%% End:
%%% OLD-outline-regexp: "\\(\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\(\\[\\(maggie\\|lisa\\)\\]\\)? .*\\)"
%%% OLD-outline-regexp nur "[][] Text": "\\(\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\] .*\\)"
%%% OLD-outline-regexp inkl. Sterne als Items: "\\(\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\]\\[\\([1-2][0-9][0-9][0-9][0-1][0-9][0-3][0-9]\\)?\\] .*\\)\\|\\(*+ \\)"

1 条评论:

  1. Awesome post, hey I found this story while googling for lyrics. Thanks for sharing I’ll tell my friends about this too.

    回复删除