annotate runtime/doc/usr_20.txt @ 33521:1f9b1def80c8 v9.0.2009

patch 9.0.2009: cmdline-completion for comma-separated options wrong Commit: https://github.com/vim/vim/commit/54844857fd6933fa4f6678e47610c4b9c9f7a091 Author: Yee Cheng Chin <ychin.git@gmail.com> Date: Mon Oct 9 18:12:31 2023 +0200 patch 9.0.2009: cmdline-completion for comma-separated options wrong Problem: cmdline-completion for comma-separated options wrong Solution: Fix command-line expansions for options with filenames with commas Fix command-line expansions for options with filenames with commas Cmdline expansion for option values that take a comma-separated list of file names is currently not handling file names with commas as the commas are not escaped. For such options, the commas in file names need to be escaped (to differentiate from a comma that delimit the list items). The escaped comma is unescaped in `copy_option_part()` during option parsing. Fix as follows: - Cmdline completion for option values with comma-separated file/folder names will not start a new match when seeing `\\,` and will instead consider it as one value. - File/folder regex matching will strip the `\\` when seeing `\\,` to make sure it can match the correct files/folders. - The expanded value will escape `,` with `\\,`, similar to how spaces are escaped to make sure the option value is correct on the cmdline. This fix also takes into account the fact that Win32 Vim handles file name escaping differently. Typing '\,' for a file name results in it being handled literally but in other platforms '\,' is interpreted as a simple ',' and commas need to be escaped using '\\,' instead. Also, make sure this new logic only applies to comma-separated options like 'path'. Non-list options like 'set makeprg=<Tab>' and regular ex commands like `:edit <Tab>` do not require escaping and will continue to work. Also fix up documentation to be clearer. The original docs are slightly misleading in how it discusses triple slashes for 'tags'. closes: #13303 related: #13301 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author Christian Brabandt <cb@256bit.org>
date Mon, 09 Oct 2023 18:30:04 +0200
parents f8116058ca76
children 4635e43f2c6f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29314
f8116058ca76 release version 9.0
Bram Moolenaar <Bram@vim.org>
parents: 26219
diff changeset
1 *usr_20.txt* For Vim version 9.0. Last change: 2021 Nov 18
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
2
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
3 VIM USER MANUAL - by Bram Moolenaar
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
4
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
5 Typing command-line commands quickly
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
6
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
8 Vim has a few generic features that makes it easier to enter commands. Colon
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
9 commands can be abbreviated, edited and repeated. Completion is available for
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
10 nearly everything.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
11
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
12 |20.1| Command line editing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
13 |20.2| Command line abbreviations
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
14 |20.3| Command line completion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
15 |20.4| Command line history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
16 |20.5| Command line window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
17
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
18 Next chapter: |usr_21.txt| Go away and come back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
19 Previous chapter: |usr_12.txt| Clever tricks
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
20 Table of contents: |usr_toc.txt|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
21
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
22 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
23 *20.1* Command line editing
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
24
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
25 When you use a colon (:) command or search for a string with / or ?, Vim puts
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
26 the cursor on the bottom of the screen. There you type the command or search
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
27 pattern. This is called the Command line. Also when it's used for entering a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
28 search command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
29
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
30 The most obvious way to edit the command you type is by pressing the <BS> key.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
31 This erases the character before the cursor. To erase another character,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
32 typed earlier, first move the cursor with the cursor keys.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
33 For example, you have typed this: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
34
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
35 :s/col/pig/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
36
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
37 Before you hit <Enter>, you notice that "col" should be "cow". To correct
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
38 this, you type <Left> five times. The cursor is now just after "col". Type
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
39 <BS> and "w" to correct: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
40
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
41 :s/cow/pig/
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
42
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
43 Now you can press <Enter> directly. You don't have to move the cursor to the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
44 end of the line before executing the command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
45
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
46 The most often used keys to move around in the command line:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
47
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
48 <Left> one character left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
49 <Right> one character right
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
50 <S-Left> or <C-Left> one word left
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
51 <S-Right> or <C-Right> one word right
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
52 CTRL-B or <Home> to begin of command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
53 CTRL-E or <End> to end of command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
54
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
55 Note:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
56 <S-Left> (cursor left key with Shift key pressed) and <C-Left> (cursor
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
57 left key with Control pressed) will not work on all keyboards. Same
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
58 for the other Shift and Control combinations.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
59
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
60 You can also use the mouse to move the cursor.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
61
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
62
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
63 DELETING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
64
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
65 As mentioned, <BS> deletes the character before the cursor. To delete a whole
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
66 word use CTRL-W.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
67
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
68 /the fine pig ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
69
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
70 CTRL-W
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
71
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
72 /the fine ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
73
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
74 CTRL-U removes all text, thus allows you to start all over again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
75
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
76
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
77 OVERSTRIKE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
78
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
79 The <Insert> key toggles between inserting characters and replacing the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
80 existing ones. Start with this text:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
81
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
82 /the fine pig ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
83
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
84 Move the cursor to the start of "fine" with <S-Left> twice (or <Left> eight
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
85 times, if <S-Left> doesn't work). Now press <Insert> to switch to overstrike
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
86 and type "great":
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
87
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
88 /the greatpig ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
89
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
90 Oops, we lost the space. Now, don't use <BS>, because it would delete the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
91 "t" (this is different from Replace mode). Instead, press <Insert> to switch
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
92 from overstrike to inserting, and type the space:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
93
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
94 /the great pig ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
95
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
96
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
97 CANCELLING
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
98
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
99 You thought of executing a : or / command, but changed your mind. To get rid
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
100 of what you already typed, without executing it, press CTRL-C or <Esc>.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
101
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
102 Note:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
103 <Esc> is the universal "get out" key. Unfortunately, in the good old
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
104 Vi pressing <Esc> in a command line executed the command! Since that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
105 might be considered to be a bug, Vim uses <Esc> to cancel the command.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
106 But with the 'cpoptions' option it can be made Vi compatible. And
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
107 when using a mapping (which might be written for Vi) <Esc> also works
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
108 Vi compatible. Therefore, using CTRL-C is a method that always works.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
109
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
110 If you are at the start of the command line, pressing <BS> will cancel the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
111 command. It's like deleting the ":" or "/" that the line starts with.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
112
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
113 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
114 *20.2* Command line abbreviations
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
115
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
116 Some of the ":" commands are really long. We already mentioned that
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
117 ":substitute" can be abbreviated to ":s". This is a generic mechanism, all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
118 ":" commands can be abbreviated.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
119
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
120 How short can a command get? There are 26 letters, and many more commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
121 For example, ":set" also starts with ":s", but ":s" doesn't start a ":set"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
122 command. Instead ":set" can be abbreviated to ":se".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
123 When the shorter form of a command could be used for two commands, it
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
124 stands for only one of them. There is no logic behind which one, you have to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
125 learn them. In the help files the shortest form that works is mentioned. For
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
126 example: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
127
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
128 :s[ubstitute]
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
129
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
130 This means that the shortest form of ":substitute" is ":s". The following
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
131 characters are optional. Thus ":su" and ":sub" also work.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
132
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
133 In the user manual we will either use the full name of command, or a short
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
134 version that is still readable. For example, ":function" can be abbreviated
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
135 to ":fu". But since most people don't understand what that stands for, we
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
136 will use ":fun". (Vim doesn't have a ":funny" command, otherwise ":fun" would
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
137 be confusing too.)
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
138
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
139 It is recommended that in Vim scripts you write the full command name. That
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
140 makes it easier to read back when you make later changes. Except for some
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
141 often used commands like ":w" (":write") and ":r" (":read").
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
142 A particularly confusing one is ":end", which could stand for ":endif",
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
143 ":endwhile" or ":endfunction". Therefore, always use the full name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
144
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
145
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
146 SHORT OPTION NAMES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
147
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
148 In the user manual the long version of the option names is used. Many options
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
149 also have a short name. Unlike ":" commands, there is only one short name
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
150 that works. For example, the short name of 'autoindent' is 'ai'. Thus these
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
151 two commands do the same thing: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
152
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
153 :set autoindent
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
154 :set ai
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
155
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
156 You can find the full list of long and short names here: |option-list|.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
157
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
158 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
159 *20.3* Command line completion
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
160
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
161 This is one of those Vim features that, by itself, is a reason to switch from
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
162 Vi to Vim. Once you have used this, you can't do without.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
163
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
164 Suppose you have a directory that contains these files:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
165
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
166 info.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
167 intro.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
168 bodyofthepaper.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
169
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
170 To edit the last one, you use the command: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
171
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
172 :edit bodyofthepaper.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
173
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
174 It's easy to type this wrong. A much quicker way is: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
175
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
176 :edit b<Tab>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
177
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
178 Which will result in the same command. What happened? The <Tab> key does
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
179 completion of the word before the cursor. In this case "b". Vim looks in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
180 directory and finds only one file that starts with a "b". That must be the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
181 one you are looking for, thus Vim completes the file name for you.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
182
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
183 Now type: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
184
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
185 :edit i<Tab>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
186
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
187 Vim will beep, and give you: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
188
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
189 :edit info.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
190
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
191 The beep means that Vim has found more than one match. It then uses the first
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
192 match it found (alphabetically). If you press <Tab> again, you get: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
193
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
194 :edit intro.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
195
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
196 Thus, if the first <Tab> doesn't give you the file you were looking for, press
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
197 it again. If there are more matches, you will see them all, one at a time.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
198 If you press <Tab> on the last matching entry, you will go back to what you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
199 first typed: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
200
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
201 :edit i
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
202
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
203 Then it starts all over again. Thus Vim cycles through the list of matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
204 Use CTRL-P to go through the list in the other direction:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
205
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
206 <------------------- <Tab> -------------------------+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
207 |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
208 <Tab> --> <Tab> -->
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
209 :edit i :edit info.txt :edit intro.txt
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
210 <-- CTRL-P <-- CTRL-P
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
211 |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
212 +---------------------- CTRL-P ------------------------>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
213
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
214
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
215 CONTEXT
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
216
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
217 When you type ":set i" instead of ":edit i" and press <Tab> you get: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
218
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
219 :set icon
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
220
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
221 Hey, why didn't you get ":set info.txt"? That's because Vim has context
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
222 sensitive completion. The kind of words Vim will look for depends on the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
223 command before it. Vim knows that you cannot use a file name just after a
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
224 ":set" command, but you can use an option name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
225 Again, if you repeat typing the <Tab>, Vim will cycle through all matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
226 There are quite a few, it's better to type more characters first: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
227
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
228 :set isk<Tab>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
229
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
230 Gives: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
231
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
232 :set iskeyword
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
233
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
234 Now type "=" and press <Tab>: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
235
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
236 :set iskeyword=@,48-57,_,192-255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
237
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
238 What happens here is that Vim inserts the old value of the option. Now you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
239 can edit it.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
240 What is completed with <Tab> is what Vim expects in that place. Just try
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
241 it out to see how it works. In some situations you will not get what you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
242 want. That's either because Vim doesn't know what you want, or because
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
243 completion was not implemented for that situation. In that case you will get
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
244 a <Tab> inserted (displayed as ^I).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
245
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
246
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
247 LIST MATCHES
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
248
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
249 When there are many matches, you would like to see an overview. Do this by
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
250 pressing CTRL-D. For example, pressing CTRL-D after: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
251
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
252 :set is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
253
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
254 results in: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
255
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
256 :set is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
257 incsearch isfname isident iskeyword isprint
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
258 :set is
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
259
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
260 Vim lists the matches and then comes back with the text you typed. You can
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
261 now check the list for the item you wanted. If it isn't there, you can use
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
262 <BS> to correct the word. If there are many matches, type a few more
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
263 characters before pressing <Tab> to complete the rest.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
264 If you have watched carefully, you will have noticed that "incsearch"
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
265 doesn't start with "is". In this case "is" stands for the short name of
237
73354c21f1e4 updated for version 7.0066
vimboss
parents: 7
diff changeset
266 "incsearch". (Many options have a short and a long name.) Vim is clever
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
267 enough to know that you might have wanted to expand the short name of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
268 option into the long name.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
269
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
270
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
271 THERE IS MORE
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
272
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
273 The CTRL-L command completes the word to the longest unambiguous string. If
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
274 you type ":edit i" and there are files "info.txt" and "info_backup.txt" you
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
275 will get ":edit info".
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
276
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
277 The 'wildmode' option can be used to change the way completion works.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
278 The 'wildmenu' option can be used to get a menu-like list of matches.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
279 Use the 'suffixes' option to specify files that are less important and appear
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
280 at the end of the list of files.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
281 The 'wildignore' option specifies files that are not listed at all.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
282
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
283 More about all of this here: |cmdline-completion|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
284
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
285 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
286 *20.4* Command line history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
287
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
288 In chapter 3 we briefly mentioned the history. The basics are that you can
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
289 use the <Up> key to recall an older command line. <Down> then takes you back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
290 to newer commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
291
26148
624439a39432 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 21676
diff changeset
292 There are actually five histories. The ones we will mention here are for ":"
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
293 commands and for "/" and "?" search commands. The "/" and "?" commands share
26148
624439a39432 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 21676
diff changeset
294 the same history, because they are both search commands. The three other
26219
786b2a8ec970 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 26148
diff changeset
295 histories are for expressions, debug mode commands and input lines for the
26148
624439a39432 Update runtime files
Bram Moolenaar <Bram@vim.org>
parents: 21676
diff changeset
296 input() function. |cmdline-history|
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
297
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
298 Suppose you have done a ":set" command, typed ten more colon commands and then
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
299 want to repeat that ":set" command again. You could press ":" and then ten
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
300 times <Up>. There is a quicker way: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
301
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
302 :se<Up>
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
303
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
304 Vim will now go back to the previous command that started with "se". You have
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
305 a good chance that this is the ":set" command you were looking for. At least
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
306 you should not have to press <Up> very often (unless ":set" commands is all
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
307 you have done).
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
308
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
309 The <Up> key will use the text typed so far and compare it with the lines in
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
310 the history. Only matching lines will be used.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
311 If you do not find the line you were looking for, use <Down> to go back to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
312 what you typed and correct that. Or use CTRL-U to start all over again.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
313
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
314 To see all the lines in the history: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
315
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
316 :history
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
317
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
318 That's the history of ":" commands. The search history is displayed with this
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
319 command: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
320
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
321 :history /
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
322
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
323 CTRL-P will work like <Up>, except that it doesn't matter what you already
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
324 typed. Similarly for CTRL-N and <Down>. CTRL-P stands for previous, CTRL-N
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
325 for next.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
326
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
327 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
328 *20.5* Command line window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
329
21676
1b345fb68ae3 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 18879
diff changeset
330 Typing the text in the command line works differently from typing text in
1b345fb68ae3 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 18879
diff changeset
331 Insert mode. It doesn't allow many commands to change the text. For most
1b345fb68ae3 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 18879
diff changeset
332 commands that's OK, but sometimes you have to type a complicated command.
1b345fb68ae3 Update runtime files.
Bram Moolenaar <Bram@vim.org>
parents: 18879
diff changeset
333 That's where the command line window is useful.
7
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
334
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
335 Open the command line window with this command: >
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
336
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
337 q:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
338
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
339 Vim now opens a (small) window at the bottom. It contains the command line
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
340 history, and an empty line at the end:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
341
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
342 +-------------------------------------+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
343 |other window |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
344 |~ |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
345 |file.txt=============================|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
346 |:e c |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
347 |:e config.h.in |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
348 |:set path=.,/usr/include,, |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
349 |:set iskeyword=@,48-57,_,192-255 |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
350 |:set is |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
351 |:q |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
352 |: |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
353 |command-line=========================|
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
354 | |
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
355 +-------------------------------------+
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
356
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
357 You are now in Normal mode. You can use the "hjkl" keys to move around. For
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
358 example, move up with "5k" to the ":e config.h.in" line. Type "$h" to go to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
359 the "i" of "in" and type "cwout". Now you have changed the line to:
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
360
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
361 :e config.h.out ~
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
362
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
363 Now press <Enter> and this command will be executed. The command line window
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
364 will close.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
365 The <Enter> command will execute the line under the cursor. It doesn't
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
366 matter whether Vim is in Insert mode or in Normal mode.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
367 Changes in the command line window are lost. They do not result in the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
368 history to be changed. Except that the command you execute will be added to
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
369 the end of the history, like with all executed commands.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
370
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
371 The command line window is very useful when you want to have overview of the
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
372 history, lookup a similar command, change it a bit and execute it. A search
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
373 command can be used to find something.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
374 In the previous example the "?config" search command could have been used
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
375 to find the previous command that contains "config". It's a bit strange,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
376 because you are using a command line to search in the command line window.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
377 While typing that search command you can't open another command line window,
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
378 there can be only one.
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
379
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
380 ==============================================================================
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
381
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
382 Next chapter: |usr_21.txt| Go away and come back
3fc0f57ecb91 updated for version 7.0001
vimboss
parents:
diff changeset
383
14519
5c5908e81e93 Update runtime files.
Christian Brabandt <cb@256bit.org>
parents: 13963
diff changeset
384 Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: