1b8ba871bSPeter Wemm /*- 2b8ba871bSPeter Wemm * Copyright (c) 1992, 1993, 1994 3b8ba871bSPeter Wemm * The Regents of the University of California. All rights reserved. 4b8ba871bSPeter Wemm * Copyright (c) 1992, 1993, 1994, 1995, 1996 5b8ba871bSPeter Wemm * Keith Bostic. All rights reserved. 6b8ba871bSPeter Wemm * 7b8ba871bSPeter Wemm * See the LICENSE file for redistribution information. 8b8ba871bSPeter Wemm */ 9b8ba871bSPeter Wemm 10b8ba871bSPeter Wemm #include "config.h" 11b8ba871bSPeter Wemm 12b8ba871bSPeter Wemm #include <sys/types.h> 13f0957ccaSPeter Wemm #include <sys/queue.h> 14b8ba871bSPeter Wemm #include <sys/time.h> 15b8ba871bSPeter Wemm 16b8ba871bSPeter Wemm #include <bitstring.h> 17b8ba871bSPeter Wemm #include <limits.h> 18b8ba871bSPeter Wemm #include <stdio.h> 19b8ba871bSPeter Wemm 20b8ba871bSPeter Wemm #include "../common/common.h" 21b8ba871bSPeter Wemm #include "vi.h" 22b8ba871bSPeter Wemm 23b8ba871bSPeter Wemm /* 24b8ba871bSPeter Wemm * This array maps keystrokes to vi command functions. It is known 25b8ba871bSPeter Wemm * in ex/ex_usage.c that it takes four columns to name a vi character. 26b8ba871bSPeter Wemm */ 27b8ba871bSPeter Wemm VIKEYS const vikeys [MAXVIKEY + 1] = { 28b8ba871bSPeter Wemm /* 000 NUL -- The code in vi.c expects key 0 to be undefined. */ 29b8ba871bSPeter Wemm {NULL}, 30b8ba871bSPeter Wemm /* 001 ^A */ 31b8ba871bSPeter Wemm {v_searchw, V_ABS|V_CNT|V_MOVE|V_KEYW|VM_CUTREQ|VM_RCM_SET, 32b8ba871bSPeter Wemm "[count]^A", 33b8ba871bSPeter Wemm "^A search forward for cursor word"}, 34b8ba871bSPeter Wemm /* 002 ^B */ 35b8ba871bSPeter Wemm {v_pageup, V_CNT|VM_RCM_SET, 36b8ba871bSPeter Wemm "[count]^B", 37b8ba871bSPeter Wemm "^B scroll up by screens"}, 38b8ba871bSPeter Wemm /* 003 ^C */ 39b8ba871bSPeter Wemm {NULL, 0, 40b8ba871bSPeter Wemm "^C", 41b8ba871bSPeter Wemm "^C interrupt an operation (e.g. read, write, search)"}, 42b8ba871bSPeter Wemm /* 004 ^D */ 43b8ba871bSPeter Wemm {v_hpagedown, V_CNT|VM_RCM_SET, 44b8ba871bSPeter Wemm "[count]^D", 45b8ba871bSPeter Wemm "^D scroll down by half screens (setting count)"}, 46b8ba871bSPeter Wemm /* 005 ^E */ 47b8ba871bSPeter Wemm {v_linedown, V_CNT, 48b8ba871bSPeter Wemm "[count]^E", 49b8ba871bSPeter Wemm "^E scroll down by lines"}, 50b8ba871bSPeter Wemm /* 006 ^F */ 51b8ba871bSPeter Wemm {v_pagedown, V_CNT|VM_RCM_SET, 52b8ba871bSPeter Wemm "[count]^F", 53b8ba871bSPeter Wemm "^F scroll down by screens"}, 54b8ba871bSPeter Wemm /* 007 ^G */ 55b8ba871bSPeter Wemm {v_status, 0, 56b8ba871bSPeter Wemm "^G", 57b8ba871bSPeter Wemm "^G file status"}, 58b8ba871bSPeter Wemm /* 010 ^H */ 59b8ba871bSPeter Wemm {v_left, V_CNT|V_MOVE|VM_RCM_SET, 60b8ba871bSPeter Wemm "[count]^H", 61b8ba871bSPeter Wemm "^H move left by characters"}, 62b8ba871bSPeter Wemm /* 011 ^I */ 63b8ba871bSPeter Wemm {NULL}, 64b8ba871bSPeter Wemm /* 012 ^J */ 65b8ba871bSPeter Wemm {v_down, V_CNT|V_MOVE|VM_LMODE|VM_RCM, 66b8ba871bSPeter Wemm "[count]^J", 67b8ba871bSPeter Wemm "^J move down by lines"}, 68b8ba871bSPeter Wemm /* 013 ^K */ 69b8ba871bSPeter Wemm {NULL}, 70b8ba871bSPeter Wemm /* 014 ^L */ 71b8ba871bSPeter Wemm {v_redraw, 0, 72b8ba871bSPeter Wemm "^L", 73b8ba871bSPeter Wemm "^L redraw screen"}, 74b8ba871bSPeter Wemm /* 015 ^M */ 75b8ba871bSPeter Wemm {v_cr, V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETFNB, 76b8ba871bSPeter Wemm "[count]^M", 77b8ba871bSPeter Wemm "^M move down by lines (to first non-blank)"}, 78b8ba871bSPeter Wemm /* 016 ^N */ 79b8ba871bSPeter Wemm {v_down, V_CNT|V_MOVE|VM_LMODE|VM_RCM, 80b8ba871bSPeter Wemm "[count]^N", 81b8ba871bSPeter Wemm "^N move down by lines"}, 82b8ba871bSPeter Wemm /* 017 ^O */ 83b8ba871bSPeter Wemm {NULL}, 84b8ba871bSPeter Wemm /* 020 ^P */ 85b8ba871bSPeter Wemm {v_up, V_CNT|V_MOVE|VM_LMODE|VM_RCM, 86b8ba871bSPeter Wemm "[count]^P", 87b8ba871bSPeter Wemm "^P move up by lines"}, 88b8ba871bSPeter Wemm /* 021 ^Q -- same as ^V if not used for hardware flow control. */ 89b8ba871bSPeter Wemm {NULL}, 90b8ba871bSPeter Wemm /* 022 ^R */ 91b8ba871bSPeter Wemm {v_redraw, 0, 92b8ba871bSPeter Wemm "^R", 93b8ba871bSPeter Wemm "^R redraw screen"}, 94b8ba871bSPeter Wemm /* 023 ^S -- not available, used for hardware flow control. */ 95b8ba871bSPeter Wemm {NULL}, 96b8ba871bSPeter Wemm /* 024 ^T */ 97b8ba871bSPeter Wemm {v_tagpop, V_ABS|VM_RCM_SET, 98b8ba871bSPeter Wemm "^T", 99b8ba871bSPeter Wemm "^T tag pop"}, 100b8ba871bSPeter Wemm /* 025 ^U */ 101b8ba871bSPeter Wemm {v_hpageup, V_CNT|VM_RCM_SET, 102b8ba871bSPeter Wemm "[count]^U", 103b8ba871bSPeter Wemm "^U half page up (set count)"}, 104b8ba871bSPeter Wemm /* 026 ^V */ 105b8ba871bSPeter Wemm {NULL, 0, 106b8ba871bSPeter Wemm "^V", 107b8ba871bSPeter Wemm "^V input a literal character"}, 108b8ba871bSPeter Wemm /* 027 ^W */ 109b8ba871bSPeter Wemm {v_screen, 0, 110b8ba871bSPeter Wemm "^W", 111b8ba871bSPeter Wemm "^W move to next screen"}, 112b8ba871bSPeter Wemm /* 030 ^X */ 113b8ba871bSPeter Wemm {NULL}, 114b8ba871bSPeter Wemm /* 031 ^Y */ 115b8ba871bSPeter Wemm {v_lineup, V_CNT, 116b8ba871bSPeter Wemm "[count]^Y", 117b8ba871bSPeter Wemm "^Y page up by lines"}, 118b8ba871bSPeter Wemm /* 032 ^Z */ 119b8ba871bSPeter Wemm {v_suspend, V_SECURE, 120b8ba871bSPeter Wemm "^Z", 121b8ba871bSPeter Wemm "^Z suspend editor"}, 122b8ba871bSPeter Wemm /* 033 ^[ */ 123b8ba871bSPeter Wemm {NULL, 0, 124b8ba871bSPeter Wemm "^[ <escape>", 125b8ba871bSPeter Wemm "^[ <escape> exit input mode, cancel partial commands"}, 126b8ba871bSPeter Wemm /* 034 ^\ */ 127b8ba871bSPeter Wemm {v_exmode, 0, 128b8ba871bSPeter Wemm "^\\", 129b8ba871bSPeter Wemm "^\\ switch to ex mode"}, 130b8ba871bSPeter Wemm /* 035 ^] */ 131b8ba871bSPeter Wemm {v_tagpush, V_ABS|V_KEYW|VM_RCM_SET, 132b8ba871bSPeter Wemm "^]", 133b8ba871bSPeter Wemm "^] tag push cursor word"}, 134b8ba871bSPeter Wemm /* 036 ^^ */ 135b8ba871bSPeter Wemm {v_switch, 0, 136b8ba871bSPeter Wemm "^^", 137b8ba871bSPeter Wemm "^^ switch to previous file"}, 138b8ba871bSPeter Wemm /* 037 ^_ */ 139b8ba871bSPeter Wemm {NULL}, 140b8ba871bSPeter Wemm /* 040 ' ' */ 141b8ba871bSPeter Wemm {v_right, V_CNT|V_MOVE|VM_RCM_SET, 142b8ba871bSPeter Wemm "[count]' '", 143b8ba871bSPeter Wemm " <space> move right by columns"}, 144b8ba871bSPeter Wemm /* 041 ! */ 145b8ba871bSPeter Wemm {v_filter, V_CNT|V_DOT|V_MOTION|V_SECURE|VM_RCM_SET, 146b8ba871bSPeter Wemm "[count]![count]motion command(s)", 147b8ba871bSPeter Wemm " ! filter through command(s) to motion"}, 148b8ba871bSPeter Wemm /* 042 " */ 149b8ba871bSPeter Wemm {NULL}, 150b8ba871bSPeter Wemm /* 043 # */ 151b8ba871bSPeter Wemm {v_increment, V_CHAR|V_CNT|V_DOT|VM_RCM_SET, 152b8ba871bSPeter Wemm "[count]# +|-|#", 153b8ba871bSPeter Wemm " # number increment/decrement"}, 154b8ba871bSPeter Wemm /* 044 $ */ 155b8ba871bSPeter Wemm {v_dollar, V_CNT|V_MOVE|VM_RCM_SETLAST, 156b8ba871bSPeter Wemm " [count]$", 157b8ba871bSPeter Wemm " $ move to last column"}, 158b8ba871bSPeter Wemm /* 045 % */ 159b8ba871bSPeter Wemm {v_match, V_ABS|V_CNT|V_MOVE|VM_CUTREQ|VM_RCM_SET, 160b8ba871bSPeter Wemm "%", 161b8ba871bSPeter Wemm " % move to match"}, 162b8ba871bSPeter Wemm /* 046 & */ 163b8ba871bSPeter Wemm {v_again, 0, 164b8ba871bSPeter Wemm "&", 165b8ba871bSPeter Wemm " & repeat substitution"}, 166b8ba871bSPeter Wemm /* 047 ' */ 167b8ba871bSPeter Wemm {v_fmark, V_ABS_L|V_CHAR|V_MOVE|VM_LMODE|VM_RCM_SET, 168b8ba871bSPeter Wemm "'['a-z]", 169b8ba871bSPeter Wemm " ' move to mark (to first non-blank)"}, 170b8ba871bSPeter Wemm /* 050 ( */ 171b8ba871bSPeter Wemm {v_sentenceb, V_ABS|V_CNT|V_MOVE|VM_CUTREQ|VM_RCM_SET, 172b8ba871bSPeter Wemm "[count](", 173b8ba871bSPeter Wemm " ( move back sentence"}, 174b8ba871bSPeter Wemm /* 051 ) */ 175b8ba871bSPeter Wemm {v_sentencef, V_ABS|V_CNT|V_MOVE|VM_CUTREQ|VM_RCM_SET, 176b8ba871bSPeter Wemm "[count])", 177b8ba871bSPeter Wemm " ) move forward sentence"}, 178b8ba871bSPeter Wemm /* 052 * */ 179b8ba871bSPeter Wemm {NULL}, 180b8ba871bSPeter Wemm /* 053 + */ 181b8ba871bSPeter Wemm {v_down, V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETFNB, 182b8ba871bSPeter Wemm "[count]+", 183b8ba871bSPeter Wemm " + move down by lines (to first non-blank)"}, 184b8ba871bSPeter Wemm /* 054 , */ 185b8ba871bSPeter Wemm {v_chrrepeat, V_CNT|V_MOVE|VM_RCM_SET, 186b8ba871bSPeter Wemm "[count],", 187b8ba871bSPeter Wemm " , reverse last F, f, T or t search"}, 188b8ba871bSPeter Wemm /* 055 - */ 189b8ba871bSPeter Wemm {v_up, V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETFNB, 190b8ba871bSPeter Wemm "[count]-", 191b8ba871bSPeter Wemm " - move up by lines (to first non-blank)"}, 192b8ba871bSPeter Wemm /* 056 . */ 193b8ba871bSPeter Wemm {NULL, 0, 194b8ba871bSPeter Wemm ".", 195b8ba871bSPeter Wemm " . repeat the last command"}, 196b8ba871bSPeter Wemm /* 057 / */ 197b8ba871bSPeter Wemm {v_searchf, V_ABS_C|V_MOVE|VM_CUTREQ|VM_RCM_SET, 198b8ba871bSPeter Wemm "/RE[/ offset]", 199b8ba871bSPeter Wemm " / search forward"}, 200b8ba871bSPeter Wemm /* 060 0 */ 201b8ba871bSPeter Wemm {v_zero, V_MOVE|VM_RCM_SET, 202b8ba871bSPeter Wemm "0", 203b8ba871bSPeter Wemm " 0 move to first character"}, 204b8ba871bSPeter Wemm /* 061 1 */ 205b8ba871bSPeter Wemm {NULL}, 206b8ba871bSPeter Wemm /* 062 2 */ 207b8ba871bSPeter Wemm {NULL}, 208b8ba871bSPeter Wemm /* 063 3 */ 209b8ba871bSPeter Wemm {NULL}, 210b8ba871bSPeter Wemm /* 064 4 */ 211b8ba871bSPeter Wemm {NULL}, 212b8ba871bSPeter Wemm /* 065 5 */ 213b8ba871bSPeter Wemm {NULL}, 214b8ba871bSPeter Wemm /* 066 6 */ 215b8ba871bSPeter Wemm {NULL}, 216b8ba871bSPeter Wemm /* 067 7 */ 217b8ba871bSPeter Wemm {NULL}, 218b8ba871bSPeter Wemm /* 070 8 */ 219b8ba871bSPeter Wemm {NULL}, 220b8ba871bSPeter Wemm /* 071 9 */ 221b8ba871bSPeter Wemm {NULL}, 222b8ba871bSPeter Wemm /* 072 : */ 223b8ba871bSPeter Wemm {v_ex, 0, 224b8ba871bSPeter Wemm ":command [| command] ...", 225b8ba871bSPeter Wemm " : ex command"}, 226b8ba871bSPeter Wemm /* 073 ; */ 227b8ba871bSPeter Wemm {v_chrepeat, V_CNT|V_MOVE|VM_RCM_SET, 228b8ba871bSPeter Wemm "[count];", 229b8ba871bSPeter Wemm " ; repeat last F, f, T or t search"}, 230b8ba871bSPeter Wemm /* 074 < */ 231b8ba871bSPeter Wemm {v_shiftl, V_CNT|V_DOT|V_MOTION|VM_RCM_SET, 232b8ba871bSPeter Wemm "[count]<[count]motion", 233b8ba871bSPeter Wemm " < shift lines left to motion"}, 234b8ba871bSPeter Wemm /* 075 = */ 235b8ba871bSPeter Wemm {NULL}, 236b8ba871bSPeter Wemm /* 076 > */ 237b8ba871bSPeter Wemm {v_shiftr, V_CNT|V_DOT|V_MOTION|VM_RCM_SET, 238b8ba871bSPeter Wemm "[count]>[count]motion", 239b8ba871bSPeter Wemm " > shift lines right to motion"}, 240b8ba871bSPeter Wemm /* 077 ? */ 241b8ba871bSPeter Wemm {v_searchb, V_ABS_C|V_MOVE|VM_CUTREQ|VM_RCM_SET, 242b8ba871bSPeter Wemm "?RE[? offset]", 243b8ba871bSPeter Wemm " ? search backward"}, 244b8ba871bSPeter Wemm /* 100 @ */ 245b8ba871bSPeter Wemm {v_at, V_CNT|V_RBUF|VM_RCM_SET, 246b8ba871bSPeter Wemm "@buffer", 247b8ba871bSPeter Wemm " @ execute buffer"}, 248b8ba871bSPeter Wemm /* 101 A */ 249b8ba871bSPeter Wemm {v_iA, V_CNT|V_DOT|VM_RCM_SET, 250b8ba871bSPeter Wemm "[count]A", 251b8ba871bSPeter Wemm " A append to the line"}, 252b8ba871bSPeter Wemm /* 102 B */ 253b8ba871bSPeter Wemm {v_wordB, V_CNT|V_MOVE|VM_RCM_SET, 254b8ba871bSPeter Wemm "[count]B", 255b8ba871bSPeter Wemm " B move back bigword"}, 256b8ba871bSPeter Wemm /* 103 C */ 257b8ba871bSPeter Wemm {NULL, 0, 258b8ba871bSPeter Wemm "[buffer][count]C", 259b8ba871bSPeter Wemm " C change to end-of-line"}, 260b8ba871bSPeter Wemm /* 104 D */ 261b8ba871bSPeter Wemm {NULL, 0, 262b8ba871bSPeter Wemm "[buffer]D", 263b8ba871bSPeter Wemm " D delete to end-of-line"}, 264b8ba871bSPeter Wemm /* 105 E */ 265b8ba871bSPeter Wemm {v_wordE, V_CNT|V_MOVE|VM_RCM_SET, 266b8ba871bSPeter Wemm "[count]E", 267b8ba871bSPeter Wemm " E move to end of bigword"}, 268b8ba871bSPeter Wemm /* 106 F */ 269b8ba871bSPeter Wemm {v_chF, V_CHAR|V_CNT|V_MOVE|VM_RCM_SET, 270b8ba871bSPeter Wemm "[count]F character", 271b8ba871bSPeter Wemm " F character in line backward search"}, 272b8ba871bSPeter Wemm /* 107 G */ 273b8ba871bSPeter Wemm {v_lgoto, V_ABS_L|V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETFNB, 274b8ba871bSPeter Wemm "[count]G", 275b8ba871bSPeter Wemm " G move to line"}, 276b8ba871bSPeter Wemm /* 110 H */ 277b8ba871bSPeter Wemm {v_home, V_ABS_L|V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETNNB, 278b8ba871bSPeter Wemm "[count]H", 279b8ba871bSPeter Wemm " H move to count lines from screen top"}, 280b8ba871bSPeter Wemm /* 111 I */ 281b8ba871bSPeter Wemm {v_iI, V_CNT|V_DOT|VM_RCM_SET, 282b8ba871bSPeter Wemm "[count]I", 283b8ba871bSPeter Wemm " I insert before first nonblank"}, 284b8ba871bSPeter Wemm /* 112 J */ 285b8ba871bSPeter Wemm {v_join, V_CNT|V_DOT|VM_RCM_SET, 286b8ba871bSPeter Wemm "[count]J", 287b8ba871bSPeter Wemm " J join lines"}, 288b8ba871bSPeter Wemm /* 113 K */ 289b8ba871bSPeter Wemm {NULL}, 290b8ba871bSPeter Wemm /* 114 L */ 291b8ba871bSPeter Wemm {v_bottom, V_ABS_L|V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETNNB, 292b8ba871bSPeter Wemm "[count]L", 293b8ba871bSPeter Wemm " L move to screen bottom"}, 294b8ba871bSPeter Wemm /* 115 M */ 295b8ba871bSPeter Wemm {v_middle, V_ABS_L|V_CNT|V_MOVE|VM_LMODE|VM_RCM_SETNNB, 296b8ba871bSPeter Wemm "M", 297b8ba871bSPeter Wemm " M move to screen middle"}, 298b8ba871bSPeter Wemm /* 116 N */ 299b8ba871bSPeter Wemm {v_searchN, V_ABS_C|V_MOVE|VM_CUTREQ|VM_RCM_SET, 300b8ba871bSPeter Wemm "n", 301b8ba871bSPeter Wemm " N reverse last search"}, 302b8ba871bSPeter Wemm /* 117 O */ 303b8ba871bSPeter Wemm {v_iO, V_CNT|V_DOT|VM_RCM_SET, 304b8ba871bSPeter Wemm "[count]O", 305b8ba871bSPeter Wemm " O insert above line"}, 306b8ba871bSPeter Wemm /* 120 P */ 307b8ba871bSPeter Wemm {v_Put, V_CNT|V_DOT|V_OBUF|VM_RCM_SET, 308b8ba871bSPeter Wemm "[buffer]P", 309b8ba871bSPeter Wemm " P insert before cursor from buffer"}, 310b8ba871bSPeter Wemm /* 121 Q */ 311b8ba871bSPeter Wemm {v_exmode, 0, 312b8ba871bSPeter Wemm "Q", 313b8ba871bSPeter Wemm " Q switch to ex mode"}, 314b8ba871bSPeter Wemm /* 122 R */ 315b8ba871bSPeter Wemm {v_Replace, V_CNT|V_DOT|VM_RCM_SET, 316b8ba871bSPeter Wemm "[count]R", 317b8ba871bSPeter Wemm " R replace characters"}, 318b8ba871bSPeter Wemm /* 123 S */ 319b8ba871bSPeter Wemm {NULL, 0, 320b8ba871bSPeter Wemm "[buffer][count]S", 321b8ba871bSPeter Wemm " S substitute for the line(s)"}, 322b8ba871bSPeter Wemm /* 124 T */ 323b8ba871bSPeter Wemm {v_chT, V_CHAR|V_CNT|V_MOVE|VM_RCM_SET, 324b8ba871bSPeter Wemm "[count]T character", 325b8ba871bSPeter Wemm " T before character in line backward search"}, 326b8ba871bSPeter Wemm /* 125 U */ 327b8ba871bSPeter Wemm {v_Undo, VM_RCM_SET, 328b8ba871bSPeter Wemm "U", 329b8ba871bSPeter Wemm " U Restore the current line"}, 330b8ba871bSPeter Wemm /* 126 V */ 331b8ba871bSPeter Wemm {NULL}, 332b8ba871bSPeter Wemm /* 127 W */ 333b8ba871bSPeter Wemm {v_wordW, V_CNT|V_MOVE|VM_RCM_SET, 334b8ba871bSPeter Wemm "[count]W", 335b8ba871bSPeter Wemm " W move to next bigword"}, 336b8ba871bSPeter Wemm /* 130 X */ 337b8ba871bSPeter Wemm {v_Xchar, V_CNT|V_DOT|V_OBUF|VM_RCM_SET, 338b8ba871bSPeter Wemm "[buffer][count]X", 339b8ba871bSPeter Wemm " X delete character before cursor"}, 340b8ba871bSPeter Wemm /* 131 Y */ 341b8ba871bSPeter Wemm {NULL, 0, 342b8ba871bSPeter Wemm "[buffer][count]Y", 343b8ba871bSPeter Wemm " Y copy line"}, 344b8ba871bSPeter Wemm /* 132 Z */ 345b8ba871bSPeter Wemm {v_zexit, 0, 346b8ba871bSPeter Wemm "ZZ", 347b8ba871bSPeter Wemm "ZZ save file and exit"}, 348b8ba871bSPeter Wemm /* 133 [ */ 349b8ba871bSPeter Wemm {v_sectionb, V_ABS|V_CNT|V_MOVE|VM_RCM_SET, 350b8ba871bSPeter Wemm "[[", 351b8ba871bSPeter Wemm "[[ move back section"}, 352b8ba871bSPeter Wemm /* 134 \ */ 353b8ba871bSPeter Wemm {NULL}, 354b8ba871bSPeter Wemm /* 135 ] */ 355b8ba871bSPeter Wemm {v_sectionf, V_ABS|V_CNT|V_MOVE|VM_RCM_SET, 356b8ba871bSPeter Wemm "]]", 357b8ba871bSPeter Wemm "]] move forward section"}, 358b8ba871bSPeter Wemm /* 136 ^ */ 359b8ba871bSPeter Wemm /* 360b8ba871bSPeter Wemm * DON'T set the VM_RCM_SETFNB flag, the function has to do the work 361b8ba871bSPeter Wemm * anyway, in case it's a motion component. DO set VM_RCM_SET, so 362b8ba871bSPeter Wemm * that any motion that's part of a command is preserved. 363b8ba871bSPeter Wemm */ 364b8ba871bSPeter Wemm {v_first, V_CNT|V_MOVE|VM_RCM_SET, 365b8ba871bSPeter Wemm "^", 366b8ba871bSPeter Wemm " ^ move to first non-blank"}, 367b8ba871bSPeter Wemm /* 137 _ */ 368b8ba871bSPeter Wemm /* 369b8ba871bSPeter Wemm * Needs both to set the VM_RCM_SETFNB flag, and to do the work 370b8ba871bSPeter Wemm * in the function, in case it's a delete. 371b8ba871bSPeter Wemm */ 372b8ba871bSPeter Wemm {v_cfirst, V_CNT|V_MOVE|VM_RCM_SETFNB, 373b8ba871bSPeter Wemm "_", 374b8ba871bSPeter Wemm " _ move to first non-blank"}, 375b8ba871bSPeter Wemm /* 140 ` */ 376b8ba871bSPeter Wemm {v_bmark, V_ABS_C|V_CHAR|V_MOVE|VM_CUTREQ|VM_RCM_SET, 377b8ba871bSPeter Wemm "`[`a-z]", 378b8ba871bSPeter Wemm " ` move to mark"}, 379b8ba871bSPeter Wemm /* 141 a */ 380b8ba871bSPeter Wemm {v_ia, V_CNT|V_DOT|VM_RCM_SET, 381b8ba871bSPeter Wemm "[count]a", 382b8ba871bSPeter Wemm " a append after cursor"}, 383b8ba871bSPeter Wemm /* 142 b */ 384b8ba871bSPeter Wemm {v_wordb, V_CNT|V_MOVE|VM_RCM_SET, 385b8ba871bSPeter Wemm "[count]b", 386b8ba871bSPeter Wemm " b move back word"}, 387b8ba871bSPeter Wemm /* 143 c */ 388b8ba871bSPeter Wemm {v_change, V_CNT|V_DOT|V_MOTION|V_OBUF|VM_RCM_SET, 389b8ba871bSPeter Wemm "[buffer][count]c[count]motion", 390b8ba871bSPeter Wemm " c change to motion"}, 391b8ba871bSPeter Wemm /* 144 d */ 392b8ba871bSPeter Wemm {v_delete, V_CNT|V_DOT|V_MOTION|V_OBUF|VM_RCM_SET, 393b8ba871bSPeter Wemm "[buffer][count]d[count]motion", 394b8ba871bSPeter Wemm " d delete to motion"}, 395b8ba871bSPeter Wemm /* 145 e */ 396b8ba871bSPeter Wemm {v_worde, V_CNT|V_MOVE|VM_RCM_SET, 397b8ba871bSPeter Wemm "[count]e", 398b8ba871bSPeter Wemm " e move to end of word"}, 399b8ba871bSPeter Wemm /* 146 f */ 400b8ba871bSPeter Wemm {v_chf, V_CHAR|V_CNT|V_MOVE|VM_RCM_SET, 401b8ba871bSPeter Wemm "[count]f character", 402b8ba871bSPeter Wemm " f character in line forward search"}, 403b8ba871bSPeter Wemm /* 147 g */ 404b8ba871bSPeter Wemm {NULL}, 405b8ba871bSPeter Wemm /* 150 h */ 406b8ba871bSPeter Wemm {v_left, V_CNT|V_MOVE|VM_RCM_SET, 407b8ba871bSPeter Wemm "[count]h", 408b8ba871bSPeter Wemm " h move left by columns"}, 409b8ba871bSPeter Wemm /* 151 i */ 410b8ba871bSPeter Wemm {v_ii, V_CNT|V_DOT|VM_RCM_SET, 411b8ba871bSPeter Wemm "[count]i", 412b8ba871bSPeter Wemm " i insert before cursor"}, 413b8ba871bSPeter Wemm /* 152 j */ 414b8ba871bSPeter Wemm {v_down, V_CNT|V_MOVE|VM_LMODE|VM_RCM, 415b8ba871bSPeter Wemm "[count]j", 416b8ba871bSPeter Wemm " j move down by lines"}, 417b8ba871bSPeter Wemm /* 153 k */ 418b8ba871bSPeter Wemm {v_up, V_CNT|V_MOVE|VM_LMODE|VM_RCM, 419b8ba871bSPeter Wemm "[count]k", 420b8ba871bSPeter Wemm " k move up by lines"}, 421b8ba871bSPeter Wemm /* 154 l */ 422b8ba871bSPeter Wemm {v_right, V_CNT|V_MOVE|VM_RCM_SET, 423b8ba871bSPeter Wemm "[count]l", 424b8ba871bSPeter Wemm " l move right by columns"}, 425b8ba871bSPeter Wemm /* 155 m */ 426b8ba871bSPeter Wemm {v_mark, V_CHAR, 427b8ba871bSPeter Wemm "m[a-z]", 428b8ba871bSPeter Wemm " m set mark"}, 429b8ba871bSPeter Wemm /* 156 n */ 430b8ba871bSPeter Wemm {v_searchn, V_ABS_C|V_MOVE|VM_CUTREQ|VM_RCM_SET, 431b8ba871bSPeter Wemm "n", 432b8ba871bSPeter Wemm " n repeat last search"}, 433b8ba871bSPeter Wemm /* 157 o */ 434b8ba871bSPeter Wemm {v_io, V_CNT|V_DOT|VM_RCM_SET, 435b8ba871bSPeter Wemm "[count]o", 436b8ba871bSPeter Wemm " o append after line"}, 437b8ba871bSPeter Wemm /* 160 p */ 438b8ba871bSPeter Wemm {v_put, V_CNT|V_DOT|V_OBUF|VM_RCM_SET, 439b8ba871bSPeter Wemm "[buffer]p", 440b8ba871bSPeter Wemm " p insert after cursor from buffer"}, 441b8ba871bSPeter Wemm /* 161 q */ 442b8ba871bSPeter Wemm {NULL}, 443b8ba871bSPeter Wemm /* 162 r */ 444b8ba871bSPeter Wemm {v_replace, V_CNT|V_DOT|VM_RCM_SET, 445b8ba871bSPeter Wemm "[count]r character", 446b8ba871bSPeter Wemm " r replace character"}, 447b8ba871bSPeter Wemm /* 163 s */ 448b8ba871bSPeter Wemm {v_subst, V_CNT|V_DOT|V_OBUF|VM_RCM_SET, 449b8ba871bSPeter Wemm "[buffer][count]s", 450b8ba871bSPeter Wemm " s substitute character"}, 451b8ba871bSPeter Wemm /* 164 t */ 452b8ba871bSPeter Wemm {v_cht, V_CHAR|V_CNT|V_MOVE|VM_RCM_SET, 453b8ba871bSPeter Wemm "[count]t character", 454b8ba871bSPeter Wemm " t before character in line forward search"}, 455b8ba871bSPeter Wemm /* 165 u */ 456b8ba871bSPeter Wemm /* 457b8ba871bSPeter Wemm * DON'T set the V_DOT flag, it' more complicated than that. 458b8ba871bSPeter Wemm * See vi/vi.c for details. 459b8ba871bSPeter Wemm */ 460b8ba871bSPeter Wemm {v_undo, VM_RCM_SET, 461b8ba871bSPeter Wemm "u", 462b8ba871bSPeter Wemm " u undo last change"}, 463b8ba871bSPeter Wemm /* 166 v */ 464b8ba871bSPeter Wemm {NULL}, 465b8ba871bSPeter Wemm /* 167 w */ 466b8ba871bSPeter Wemm {v_wordw, V_CNT|V_MOVE|VM_RCM_SET, 467b8ba871bSPeter Wemm "[count]w", 468b8ba871bSPeter Wemm " w move to next word"}, 469b8ba871bSPeter Wemm /* 170 x */ 470b8ba871bSPeter Wemm {v_xchar, V_CNT|V_DOT|V_OBUF|VM_RCM_SET, 471b8ba871bSPeter Wemm "[buffer][count]x", 472b8ba871bSPeter Wemm " x delete character"}, 473b8ba871bSPeter Wemm /* 171 y */ 474b8ba871bSPeter Wemm {v_yank, V_CNT|V_DOT|V_MOTION|V_OBUF|VM_RCM_SET, 475b8ba871bSPeter Wemm "[buffer][count]y[count]motion", 476b8ba871bSPeter Wemm " y copy text to motion into a cut buffer"}, 477b8ba871bSPeter Wemm /* 172 z */ 478b8ba871bSPeter Wemm /* 479b8ba871bSPeter Wemm * DON'T set the V_CHAR flag, the char isn't required, 480b8ba871bSPeter Wemm * so it's handled specially in getcmd(). 481b8ba871bSPeter Wemm */ 482b8ba871bSPeter Wemm {v_z, V_ABS_L|V_CNT|VM_RCM_SETFNB, 483b8ba871bSPeter Wemm "[line]z[window_size][-|.|+|^|<CR>]", 484b8ba871bSPeter Wemm " z reposition the screen"}, 485b8ba871bSPeter Wemm /* 173 { */ 486b8ba871bSPeter Wemm {v_paragraphb, V_ABS|V_CNT|V_MOVE|VM_CUTREQ|VM_RCM_SET, 487b8ba871bSPeter Wemm "[count]{", 488b8ba871bSPeter Wemm " { move back paragraph"}, 489b8ba871bSPeter Wemm /* 174 | */ 490b8ba871bSPeter Wemm {v_ncol, V_CNT|V_MOVE|VM_RCM_SET, 491b8ba871bSPeter Wemm "[count]|", 492b8ba871bSPeter Wemm " | move to column"}, 493b8ba871bSPeter Wemm /* 175 } */ 494b8ba871bSPeter Wemm {v_paragraphf, V_ABS|V_CNT|V_MOVE|VM_CUTREQ|VM_RCM_SET, 495b8ba871bSPeter Wemm "[count]}", 496b8ba871bSPeter Wemm " } move forward paragraph"}, 497b8ba871bSPeter Wemm /* 176 ~ */ 498b8ba871bSPeter Wemm {v_ulcase, V_CNT|V_DOT|VM_RCM_SET, 499b8ba871bSPeter Wemm "[count]~", 500b8ba871bSPeter Wemm " ~ reverse case"}, 501b8ba871bSPeter Wemm }; 502b8ba871bSPeter Wemm