diff --git a/_site/vikeys.html b/_site/vikeys.html new file mode 100644 index 0000000..2d0970c --- /dev/null +++ b/_site/vikeys.html @@ -0,0 +1,375 @@ + +
++this page is just a mirror of +http://hea-www.harvard.edu/~fine/Tech/vi.html +
+Key | Action | Followed by |
---|---|---|
a | enter insertion mode after current character | text, ESC |
b | back word | |
c | change command | cursor motion command |
d | delete command | cursor motion command |
e | end of word | |
f | find character after cursor in current line | character to find |
g | UNBOUND | |
h | move left one character | |
i | enter insertion mode before current character | text, ESC |
j | move down one line | |
k | move up one line | |
l | move right one character | |
m | mark current line and position | mark character tag (a-z) |
n | repeat last search | |
o | open line below and enter insertion mode | text, ESC |
p | put buffer after cursor | |
q | UNBOUND | |
r | replace single character at cursor | replacement character expected |
s | substitute single character with new text | text, ESC |
t | same as "f" but cursor moves to just before found character | character to find |
u | undo | |
v | UNBOUND | |
w | move foreward one word | |
x | delete single character | |
y | yank command | cursor motion command |
z | position current line | CR = top; "." = center; "-"=bottom |
A | enter insertion mode after end of line | text, ESC |
B | move back one Word | |
C | change to end of line | text, ESC |
D | delete to end of line | |
E | move to end of Word | |
F | backwards version of "f" | character to find |
G | goto line number prefixed, or goto end if none | |
H | home cursor - goto first line on screen | |
I | enter insertion mode before first non-whitespace character | text, ESC |
J | join current line with next line | |
K | UNBOUND | |
L | goto last line on screen | |
M | goto middle line on screen | |
N | repeat last search, but in opposite direction of original search | |
O | open line above and enter insertion mode | text, ESC |
P | put buffer before cursor | |
Q | leave visual mode (go into "ex" mode) | |
R | replace mode - replaces through end of current line, then inserts | text, ESC |
S | substitute entire line - deletes line, enters insertion mode | text, ESC |
T | backwards version of "t" | character to find |
U | restores line to state when cursor was moved into it | |
V | UNBOUND | |
W | foreward Word | |
X | delete backwards single character | |
Y | yank entire line | |
Z | first half of quick save-and-exit | "Z" |
0 | move to column zero | |
1-9 | numeric precursor to other commands | [additional numbers (0-9)] +command |
(SPACE) move right one character | ||
! | shell command filter | cursor motion command, shell command |
@ | vi eval | buffer name (a-z) |
# | UNBOUND | |
$ | move to end of line | |
% | match nearest [],(),{} on line, to its match (same line or others) | |
^ | move to first non-whitespace character of line | |
& | repeat last ex substitution (":s ...") not including modifiers | |
* | UNBOUND | |
( | move to previous sentence | |
) | move to next sentence | |
\ | UNBOUND | |
| | move to column zero | |
- | move to first non-whitespace of previous line | |
_ | similar to "^" but uses numeric prefix oddly | |
= | UNBOUND | |
+ | move to first non-whitespace of next line | |
[ | move to previous "{...}" section | "[" |
] | move to next "{...}" section | "]" |
{ | move to previous blank-line separated section | "{" |
} | move to next blank-line separated section | "}" |
; | repeat last "f", "F", "t", or "T" command | |
' | move to marked line, first non-whitespace | character tag (a-z) |
` | move to marked line, memorized column | character tag (a-z) |
: | ex-submode | ex command |
" | access numbered buffer; load or access lettered buffer | 1-9,a-z |
~ | reverse case of current character and move cursor forward | |
, | reverse direction of last "f", "F", "t", or "T" command | |
. | repeat last text-changing command | |
/ | search forward | search string, ESC or CR |
< | unindent command | cursor motion command |
> | indent command | cursor motion command |
? | search backward | search string, ESC or CR |
^A | UNBOUND | |
^B | back (up) one screen | |
^C | UNBOUND | |
^D | down half screen | |
^E | scroll text up (cursor doesn't move unless it has to) | |
^F | foreward (down) one screen | |
^G | show status | |
^H | backspace | |
^I | (TAB) UNBOUND | |
^J | line down | |
^K | UNBOUND | |
^L | refresh screen | |
^M | (CR) move to first non-whitespace of next line | |
^N | move down one line | |
^O | UNBOUND | |
^P | move up one line | |
^Q | XON | |
^R | does nothing (variants: redraw; multiple-redo) | |
^S | XOFF | |
^T | go to the file/code you were editing before the last tag jump | |
^U | up half screen | |
^V | UNBOUND | |
^W | UNBOUND | |
^X | UNBOUND | |
^Y | scroll text down (cursor doesn't move unless it has to) | |
^Z | suspend program | |
^[ | (ESC) cancel started command; otherwise UNBOUND | |
^\ | leave visual mode (go into "ex" mode) | |
^] | use word at cursor to lookup function in tags file, edit that file/code | |
^^ | switch file buffers | |
^_ | UNBOUND | |
^? | (DELETE) UNBOUND |
+Definitions
+
z | position nth line number |
G | goto nth line number |
| | goto nth column number |
r | replace next n characters |
s | substitute for next n characters |
<< | shift n lines left one shiftwidth |
^ | ignored? |
_ | advance n-1 lines |
+These filenames can be reffered to in ex commands, and subshell filters, +using two special characters: "%" refers to the current file, and "#" +refers to the previous file. Here's some handy things you can do with +this feature: +
+:map v :!chmod 644 %^[ make world-readable +:map q :!ci -l %^[ RCS checkin +:map V :!diff # %^[ compare previous and current files ++
+g q v K V # * \ = ^A ^C ^I ^K ^O ^V ^W ^X ^[ ^_ ++When you try to map multiple key sequences, you won't be able to start +them with lower or upper case letters ("Too dangerous to map that"), +but the punctuation and control characters are fair game. +In addition, : can't be mapped, and sometimes a few other keys. Multiple +key sequences can also be very useful with terminal-generated sequences, +which is why the escape key is bindable. I have my xterm set to generate +=f1 for function key one, and so on, so all the function keys are easier to +use with bindings. +
+If you use multiple key shortcuts, you'll want to know about the timeout +variable. With :se timeout, you have a limited time to generate +the key sequence. This is useful if the key sequences are terminal generated. +With :se notimeout, it just keeps waiting until the next character +does or doesn't match any possible current sequences. +
+:map! lets you bind a list of keystrokes to a shortcut in edit-mode. +This is useful for adding editing commands to edit mode. One popular +trick is to bind the arrow keys to move up and down while (apparently) +staying in edit-mode, as in the last four lines below. +
+:map! ^? ^H Make delete act like backspace +:map! ^[OA ^[ka xterm arrow sequences will +:map! ^[OB ^[ja exit edit-mode, move the +:map! ^[OC ^[la cursor, and re-enter edit-mode. +:map! ^[OD ^[ha ++If you use the above +trick for arrow-keys in edit-mode, you'll want to set timeout, because +otherwise you won't get beeps at all when you hit escape, only when you +use the next keystroke. With timeout, you get the beep, but after the +timeout. Since both of these are annoying, it may be a useful choice to +avoid multikey sequences that involve escape, as a matter of taste. +Also, many systems now set up command-mode arrow keys in vi by default, +which also leads to the same problem. +
+:ab lets you bind a key sequence to an abbreviation, +for use in edit-mode. +Abbreviations don't fire until vi decides that you've typed the shortcut +as a whole word. So if taf is a shortcut for Thomas A. Fine, and I type +taffy, it won't substitute because I didn't enter taf as a word by itself. +(If I'd used :map!, then taffy would do the +replacement before I got to the second "f".) +
+Abbreviations are echoed normally until complete, therefore the abbreviation +can't contain escape (you'd leave edit-mode before completing the +abbreviation), +but the replacement expression can contain escape, and can leave and return +to edit-mode. +
+:ab teh the +:ab #d #define +:ab #i #include +:ab cmain main(argc,argv)^Mint argc;^Mchar **argv;^M{^M}^[O +:ab cmmap mmap(NULL,st.st_size,PROT_READ,MAP_SHARED,fd,0); +:ab readsig ^[G:r ~/misc/sig^M +} ++To keep a live abbreviation from going off in your hands, use ^V. For +instance, if I want to type teh but have the the abbreviation above, I +can let it "fix" it, then back up and unfix it; or I can type "teh^V..." +and it won't expand the abbreviatoin. +
+VI Reference Manual from the University of Michigan at +Dearborn +
+:map v 0ma}b:'a,.j<ctrl-v><return>070 +? *<ctrl-v><escape>dwi<ctrl-v><return><ctrl-v><escape> +
+Note the control-v's are there to enter the following characters, which would +otherwise terminate the map command. The above was written as you have to +enter the special characters in traditional vi. In vim, you can use the +four literal characters "<CR>" for a carriage return, and also +"<Esc>" for Escape. So it may be easier to type this, and it can +also go into your .vimrc) more readibly (with thanks to +Bart Van den Broeck): +
+:map v 0ma}b:'a,.j<CR>070 ? *<Esc>dwi<CR><Esc> +
+It's better because you don't have to prejoin the paragraph by hitting J +an arbitrary number of times. Just hit v (or whatever you've mapped it to) +starting at the beginning or in the middle of the paragraph, and it joines the +rest of the paragraph together, formats one line, and moves the cursor down +again. Just keep hitting v and it will keep formatting. You have to stop one +before the end or you'll end up with an extra short line. It also does not +leave spaces at the end of the line. + + + +
+ Fine's +Home + | +
+
+
+
+ |
++ | +Send Me Email + + | +