Created
September 9, 2011 04:54
-
-
Save gmccreight/1205517 to your computer and use it in GitHub Desktop.
Learn Vim in Vim
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" copy all this into a vim buffer, save it, then... | |
" source the file by typing :so % | |
" Now vim acts like a specialized application for learning vim | |
" type ,c (that's comma c) | |
" You don't really know the command at all and want to see it again soon. | |
" ,c moves the current command down a several positions in the 'Study' stack | |
" so you'll see it again soon. | |
nmap ,c ^v/^$<cr>dma/^$<cr>/^$<cr>/^$<cr>/^$<cr>jP'azt<c-y><c-l> | |
" type ,, (that's comma comma) | |
" You know the command pretty well, but not enough to move it to 'Known'. | |
" ,, moves the current command to the bottom of the 'Study' stack. | |
nmap ,, ^v/^$<cr>dma/^= Known<cr>P'azt<c-y><c-l> | |
" type ,k (that's comma k) | |
" You have the command down cold. Move it to the 'Known' stack. | |
" ,k moves the current command into the 'Known' stack. | |
nmap ,k ^v/^$<cr>dma/^= Known<cr>jjP'azt<c-y><c-l> | |
" type ,h (that's comma h) | |
" or | |
" type ,j (that's comma j) | |
" Hide or show the commands by changing their background color. If you hide | |
" the command it's much harder to cheat by looking ;) | |
highlight CommandsHidden guifg=white guibg=white | |
nmap ,h :match CommandsHidden /^\n.*$/<cr>:highlight Cursor guifg=white guibg=white<cr> | |
nmap ,j :match CommandsHidden //<cr>:highlight Cursor guifg=white guibg=black<cr> | |
" Ok, it's time to get this party started. Move to the top of the study stack | |
" and go for it! | |
/^= Study | |
normal jztj | |
nohls | |
" Note: this line keeps the rest of the file from being treated as vimscript | |
finish | |
----------------------------------------------------------------------------- | |
= Study | |
g? | |
reverse the characters in a visual selection | |
<c-w>x | |
exchange the window with the next window (like if you split a new buffer into the wrong window location) | |
:echo line('.') | |
in command mode, echo the current line number | |
va( | |
visually select *around* a set of parentheses. Try it by moving the cursor (somewhere in here) and trying it | |
rm /tmp/clip.txt ; vim -c "normal \"+p" -c "wq" /tmp/clip.txt | |
Save the contents of the clipboard to a file by opening, pasting into, and closing vim. | |
Tx | |
move the cursor backward to right before the previous occurrence of the character x on the current line. | |
Fx | |
move the cursor backward to the previous occurrence of the character x on the current line. | |
<c-b> | |
scroll back one page | |
fx | |
move the cursor forward to the next occurrence of the character x on the current line | |
zt | |
move current line to top of page | |
tx | |
same as fx, but moves the cursor to right before the character, not all the way to it. | |
<c-f> | |
scroll forward one page | |
zz | |
move current line to middle of page | |
; | |
repeat the last f command you gave | |
zb | |
move current line to bottom of page | |
yy@" | |
execute the vim code in the current line. To execute it in the shell, type :! at the beginning of the line | |
mA | |
mark: set a mark in the 'A' register (globally) | |
gu | |
make the selected text lower case | |
gU | |
make the selected text upper case | |
<c-r>" | |
paste yanked text into the vim command line | |
'A | |
mark: return to a globally set mark, even if in another buffer | |
<c-x><c-l> | |
line completion | |
<c-i> | |
move forward in the jump list | |
<c-o> | |
move backward in the jump list | |
gf | |
open file under the cursor | |
:%s/\r//g | |
remove all those nasty ^M characters from the end of each line in a file | |
= | |
autoindent lines already selected in visual mode | |
== | |
autoindent current line | |
<c-o> | |
in insert mode switch to normal mode for one command | |
gqap | |
format the current paragraph | |
'. | |
jumps to last modified line | |
`. | |
jumps to exact position of last modification | |
:h slash< CTRL-d > | |
list all help topics containing the word "slash" | |
g; | |
go backward in the change list in a file | |
g, | |
go forward in the change list in a file | |
"ayy | |
yank the current line into register "a" | |
zj | |
fold: moves the cursor to the next fold | |
zk | |
fold: moves the cursor to the previous fold | |
:map <f6> | |
show what is currently mapped to <f6> | |
:map | |
show all the mappings | |
:reg | |
show the content of all registers | |
zr | |
fold: decrease the fold level by one | |
zm | |
fold: increase the fold level by one | |
<c-6> | |
toggle between last two buffers | |
<c-r>=5*5 | |
in the vim command line, insert the result of a 5*5 calculation | |
qQ ... added commands ... q | |
append more commands to a pre-existing @q register macro | |
:Rextract _partial_name.erb | |
rails.vim: extract some functionality into a partial | |
:Rintegrationtest | |
open the cucumber feature with that name [tag:setup_specific:gem] | |
<c-p> | |
(while searching or ex mode) do previous search or command | |
<c-n> | |
(while searching or ex mode) do next search or command | |
<c-f> | |
(while searching or ex mode) see previous searches or commands | |
:%s/forward//gn | |
count the number of occurrences of "forward" in a file | |
q: | |
see previous commands | |
q/ | |
see previous searches | |
{ | |
back a paragraph | |
} | |
forward a paragraph | |
( | |
back a sentence | |
) | |
forward a sentence | |
% | |
find matching parenthesis | |
J | |
join two lines | |
gq | |
reformat the selected text | |
xp | |
transpose two letters (delete and paste, technically) | |
e | |
move to the end of the word | |
ea | |
append at end of word | |
w | |
move the cursor forward by a word | |
b | |
move the cursor backward by a word | |
<c-v> | |
in insert or command-line mode this turns the next thing typed into a literal | |
:set spell | |
Switch on spell checking | |
<c-x><c-s> | |
in insert mode correct the spelling of the current word | |
<c-v>jjjI//<esc> | |
block comment the next three JavaScript lines | |
"+y | |
copy the current selection to a clipboard where other programs can use it | |
ci" | |
change all the words in between two quotes | |
/<c-r><c-w> | |
switch to search command mode, then copy in the word under the cursor | |
:cn | |
Go to the next item in the quickfix list | |
:cp | |
Go to the previous item in the quickfix list | |
i<c-r>: | |
insert last command line command | |
i<c-r>/ | |
insert last search command | |
:w !sudo tee % | |
save the current file as root (in case you opened it up without sudo accidentally and made changes to it) | |
<c-r>: | |
in Ex mode, insert the last command | |
<c-y> | |
In insert mode, insert the character right above the cursor | |
<c-u> | |
In insert mode, delete the current line from the cursor position to the beginning of the line. [tag:learn:gem] | |
<c-a> | |
In insert mode, re-insert the text inserted in the previous insert session. | |
<c-r>/ | |
in Ex mode, insert the last search | |
<c-f> | |
When typing something into the command line, switch to the editable command-line mode where the command line becomes a fully vim-compatible text area. [tag:learn:gem] | |
o | |
when in a visual selection, which key will toggle to the other end of the selection? | |
:h i_CTRL-R | |
get help for how control r is used in insert mode | |
:h c_CTRL-R | |
get help for how control r is used in command mode | |
:s/\%V //g | |
remove all the spaces from the current visual selection, which is only a partial line, not a full line | |
:retab | |
if expandtab is set, this will change all the tabs to spaces, expanding them as appropriate | |
<c-w>_ | |
maximize size of window split | |
I | |
insert at the beginning of the line | |
gv | |
remark area that was just marked | |
ZZ | |
same as :wq | |
<c-l> | |
redraw the screen | |
<c-x><c-f> | |
completes using filenames from the current directory. | |
<c-v> | |
block selection (column editing) | |
zo | |
fold: open a fold at the cursor | |
D | |
delete to the end of the line | |
C | |
change to the end of the line | |
:so $MYVIMRC | |
reload the vimrc file (or ":so %" if you happen to be editing the file) | |
A | |
append at the end of the line | |
<c-x> | |
decrement a number when in normal mode | |
<c-a> | |
increment a number when in normal mode | |
m | |
NERDTree: opens the filesystem menu for a file, allowing you to remove, rename, etc | |
ma | |
mark: set a mark in the 'a' register in the current buffer | |
`a | |
mark: return to the 'a' mark in the current buffer | |
<c-i> | |
next | |
<c-o> | |
old | |
~ | |
uppercase or lowercase the character under the cursor | |
. | |
repeat the last command | |
<c-w><c-w> | |
switch between windows | |
[I | |
show lines containing the word under the cursor | |
redir @a | |
redirect the output of an Ex command into buffer a | |
= Known | |
:wq | |
write the file and quit. This is basically here just so that there's something in the "Known" stack. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment