blob: 1c4dbb5647675e2b21fd265facc4ae895c6d26b1 [file] [log] [blame]
Milly89872f52024-10-05 17:16:18 +02001*usr_45.txt* For Vim version 9.1. Last change: 2024 Oct 05
Bram Moolenaar071d4272004-06-13 20:20:40 +00002
3 VIM USER MANUAL - by Bram Moolenaar
4
Bram Moolenaar65e0d772020-06-14 17:29:55 +02005 Select your language (locale)
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7
8The messages in Vim can be given in several languages. This chapter explains
9how to change which one is used. Also, the different ways to work with files
10in various languages is explained.
11
12|45.1| Language for Messages
13|45.2| Language for Menus
14|45.3| Using another encoding
15|45.4| Editing files with a different encoding
16|45.5| Entering language text
17
Bram Moolenaar30ab04e2022-05-14 13:33:50 +010018 Next chapter: |usr_50.txt| Advanced Vim script writing
Bram Moolenaar071d4272004-06-13 20:20:40 +000019 Previous chapter: |usr_44.txt| Your own syntax highlighted
20Table of contents: |usr_toc.txt|
21
22==============================================================================
23*45.1* Language for Messages
24
25When you start Vim, it checks the environment to find out what language you
26are using. Mostly this should work fine, and you get the messages in your
27language (if they are available). To see what the current language is, use
28this command: >
29
30 :language
31
32If it replies with "C", this means the default is being used, which is
33English.
34
35 Note:
36 Using different languages only works when Vim was compiled to handle
37 it. To find out if it works, use the ":version" command and check the
38 output for "+gettext" and "+multi_lang". If they are there, you are
39 OK. If you see "-gettext" or "-multi_lang" you will have to find
40 another Vim.
41
42What if you would like your messages in a different language? There are
43several ways. Which one you should use depends on the capabilities of your
44system.
45 The first way is to set the environment to the desired language before
46starting Vim. Example for Unix: >
47
48 env LANG=de_DE.ISO_8859-1 vim
49
50This only works if the language is available on your system. The advantage is
51that all the GUI messages and things in libraries will use the right language
52as well. A disadvantage is that you must do this before starting Vim. If you
53want to change language while Vim is running, you can use the second method: >
54
55 :language fr_FR.ISO_8859-1
56
57This way you can try out several names for your language. You will get an
58error message when it's not supported on your system. You don't get an error
59when translated messages are not available. Vim will silently fall back to
60using English.
61 To find out which languages are supported on your system, find the
62directory where they are listed. On my system it is "/usr/share/locale". On
63some systems it's in "/usr/lib/locale". The manual page for "setlocale"
64should give you a hint where it is found on your system.
65 Be careful to type the name exactly as it should be. Upper and lowercase
66matter, and the '-' and '_' characters are easily confused.
67
68You can also set the language separately for messages, edited text and the
69time format. See |:language|.
70
71
72DO-IT-YOURSELF MESSAGE TRANSLATION
73
74If translated messages are not available for your language, you could write
75them yourself. To do this, get the source code for Vim and the GNU gettext
76package. After unpacking the sources, instructions can be found in the
77directory src/po/README.txt.
78 It's not too difficult to do the translation. You don't need to be a
79programmer. You must know both English and the language you are translating
80to, of course.
81 When you are satisfied with the translation, consider making it available
82to others. Upload it at vim-online (http://vim.sf.net) or e-mail it to
83the Vim maintainer <maintainer@vim.org>. Or both.
84
85==============================================================================
86*45.2* Language for Menus
87
88The default menus are in English. To be able to use your local language, they
89must be translated. Normally this is automatically done for you if the
90environment is set for your language, just like with messages. You don't need
91to do anything extra for this. But it only works if translations for the
92language are available.
93 Suppose you are in Germany, with the language set to German, but prefer to
94use "File" instead of "Datei". You can switch back to using the English menus
95this way: >
96
97 :set langmenu=none
98
99It is also possible to specify a language: >
100
101 :set langmenu=nl_NL.ISO_8859-1
102
103Like above, differences between "-" and "_" matter. However, upper/lowercase
104differences are ignored here.
105 The 'langmenu' option must be set before the menus are loaded. Once the
106menus have been defined changing 'langmenu' has no direct effect. Therefore,
107put the command to set 'langmenu' in your vimrc file.
108 If you really want to switch menu language while running Vim, you can do it
109this way: >
110
111 :source $VIMRUNTIME/delmenu.vim
112 :set langmenu=de_DE.ISO_8859-1
113 :source $VIMRUNTIME/menu.vim
114
115There is one drawback: All menus that you defined yourself will be gone. You
116will need to redefine them as well.
117
118
119DO-IT-YOURSELF MENU TRANSLATION
120
121To see which menu translations are available, look in this directory:
122
123 $VIMRUNTIME/lang ~
124
125The files are called menu_{language}.vim. If you don't see the language you
126want to use, you can do your own translations. The simplest way to do this is
127by copying one of the existing language files, and change it.
128 First find out the name of your language with the ":language" command. Use
129this name, but with all letters made lowercase. Then copy the file to your
130own runtime directory, as found early in 'runtimepath'. For example, for Unix
131you would do: >
132
133 :!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.vim/lang/menu_nl_be.iso_8859-1.vim
134
135You will find hints for the translation in "$VIMRUNTIME/lang/README.txt".
136
137==============================================================================
138*45.3* Using another encoding
139
140Vim guesses that the files you are going to edit are encoded for your
141language. For many European languages this is "latin1". Then each byte is
142one character. That means there are 256 different characters possible. For
143Asian languages this is not sufficient. These mostly use a double-byte
144encoding, providing for over ten thousand possible characters. This still
145isn't enough when a text is to contain several different languages. This is
146where Unicode comes in. It was designed to include all characters used in
147commonly used languages. This is the "Super encoding that replaces all
148others". But it isn't used that much yet.
149 Fortunately, Vim supports these three kinds of encodings. And, with some
150restrictions, you can use them even when your environment uses another
151language than the text.
152 Nevertheless, when you only edit files that are in the encoding of your
153language, the default should work fine and you don't need to do anything. The
154following is only relevant when you want to edit different languages.
155
Bram Moolenaar071d4272004-06-13 20:20:40 +0000156
157USING UNICODE IN THE GUI
158
159The nice thing about Unicode is that other encodings can be converted to it
160and back without losing information. When you make Vim use Unicode
161internally, you will be able to edit files in any encoding.
162 Unfortunately, the number of systems supporting Unicode is still limited.
163Thus it's unlikely that your language uses it. You need to tell Vim you want
164to use Unicode, and how to handle interfacing with the rest of the system.
165 Let's start with the GUI version of Vim, which is able to display Unicode
166characters. This should work: >
167
168 :set encoding=utf-8
169 :set guifont=-misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
170
171The 'encoding' option tells Vim the encoding of the characters that you use.
172This applies to the text in buffers (files you are editing), registers, Vim
173script files, etc. You can regard 'encoding' as the setting for the internals
174of Vim.
175 This example assumes you have this font on your system. The name in the
176example is for the X Window System. This font is in a package that is used to
177enhance xterm with Unicode support. If you don't have this font, you might
178find it here:
179
Milly89872f52024-10-05 17:16:18 +0200180 http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz
Bram Moolenaar071d4272004-06-13 20:20:40 +0000181
182For MS-Windows, some fonts have a limited number of Unicode characters. Try
183using the "Courier New" font. You can use the Edit/Select Font... menu to
184select and try out the fonts available. Only fixed-width fonts can be used
185though. Example: >
186
187 :set guifont=courier_new:h12
188
189If it doesn't work well, try getting a fontpack. If Microsoft didn't move it,
190you can find it here:
191
Milly89872f52024-10-05 17:16:18 +0200192 http://www.microsoft.com/typography/fonts/default.aspx
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
194Now you have told Vim to use Unicode internally and display text with a
195Unicode font. Typed characters still arrive in the encoding of your original
196language. This requires converting them to Unicode. Tell Vim the language
197from which to convert with the 'termencoding' option. You can do it like
198this: >
199
200 :let &termencoding = &encoding
201 :set encoding=utf-8
202
203This assigns the old value of 'encoding' to 'termencoding' before setting
204'encoding' to utf-8. You will have to try out if this really works for your
205setup. It should work especially well when using an input method for an Asian
206language, and you want to edit Unicode text.
207
208
209USING UNICODE IN A UNICODE TERMINAL
210
211There are terminals that support Unicode directly. The standard xterm that
212comes with XFree86 is one of them. Let's use that as an example.
213 First of all, the xterm must have been compiled with Unicode support. See
214|UTF8-xterm| how to check that and how to compile it when needed.
215 Start the xterm with the "-u8" argument. You might also need so specify a
216font. Example: >
217
218 xterm -u8 -fn -misc-fixed-medium-r-normal--18-120-100-100-c-90-iso10646-1
219
220Now you can run Vim inside this terminal. Set 'encoding' to "utf-8" as
221before. That's all.
222
223
224USING UNICODE IN AN ORDINARY TERMINAL
225
226Suppose you want to work with Unicode files, but don't have a terminal with
227Unicode support. You can do this with Vim, although characters that are not
228supported by the terminal will not be displayed. The layout of the text
229will be preserved. >
230
231 :let &termencoding = &encoding
232 :set encoding=utf-8
233
234This is the same as what was used for the GUI. But it works differently: Vim
235will convert the displayed text before sending it to the terminal. That
236avoids that the display is messed up with strange characters.
237 For this to work the conversion between 'termencoding' and 'encoding' must
238be possible. Vim will convert from latin1 to Unicode, thus that always works.
239For other conversions the |+iconv| feature is required.
240 Try editing a file with Unicode characters in it. You will notice that Vim
241will put a question mark (or underscore or some other character) in places
242where a character should be that the terminal can't display. Move the cursor
243to a question mark and use this command: >
244
245 ga
246
247Vim will display a line with the code of the character. This gives you a hint
248about what character it is. You can look it up in a Unicode table. You could
249actually view a file that way, if you have lots of time at hand.
250
251 Note:
252 Since 'encoding' is used for all text inside Vim, changing it makes
253 all non-ASCII text invalid. You will notice this when using registers
254 and the 'viminfo' file (e.g., a remembered search pattern). It's
255 recommended to set 'encoding' in your vimrc file, and leave it alone.
256
257==============================================================================
258*45.4* Editing files with a different encoding
259
260Suppose you have setup Vim to use Unicode, and you want to edit a file that is
261in 16-bit Unicode. Sounds simple, right? Well, Vim actually uses utf-8
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100262encoding internally, thus the 16-bit encoding must be converted, since there
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263is a difference between the character set (Unicode) and the encoding (utf-8 or
26416-bit).
265 Vim will try to detect what kind of file you are editing. It uses the
266encoding names in the 'fileencodings' option. When using Unicode, the default
267value is: "ucs-bom,utf-8,latin1". This means that Vim checks the file to see
268if it's one of these encodings:
269
270 ucs-bom File must start with a Byte Order Mark (BOM). This
271 allows detection of 16-bit, 32-bit and utf-8 Unicode
272 encodings.
273 utf-8 utf-8 Unicode. This is rejected when a sequence of
274 bytes is illegal in utf-8.
275 latin1 The good old 8-bit encoding. Always works.
276
277When you start editing that 16-bit Unicode file, and it has a BOM, Vim will
278detect this and convert the file to utf-8 when reading it. The 'fileencoding'
279option (without s at the end) is set to the detected value. In this case it
Bram Moolenaar8f3f58f2010-01-06 20:52:26 +0100280is "utf-16le". That means it's Unicode, 16-bit and little-endian. This
Bram Moolenaar071d4272004-06-13 20:20:40 +0000281file format is common on MS-Windows (e.g., for registry files).
282 When writing the file, Vim will compare 'fileencoding' with 'encoding'. If
283they are different, the text will be converted.
284 An empty value for 'fileencoding' means that no conversion is to be done.
285Thus the text is assumed to be encoded with 'encoding'.
286
287If the default 'fileencodings' value is not good for you, set it to the
288encodings you want Vim to try. Only when a value is found to be invalid will
289the next one be used. Putting "latin1" first doesn't work, because it is
290never illegal. An example, to fall back to Japanese when the file doesn't
291have a BOM and isn't utf-8: >
292
293 :set fileencodings=ucs-bom,utf-8,sjis
294
295See |encoding-values| for suggested values. Other values may work as well.
296This depends on the conversion available.
297
298
299FORCING AN ENCODING
300
301If the automatic detection doesn't work you must tell Vim what encoding the
302file is. Example: >
303
304 :edit ++enc=koi8-r russian.txt
305
306The "++enc" part specifies the name of the encoding to be used for this file
307only. Vim will convert the file from the specified encoding, Russian in this
308example, to 'encoding'. 'fileencoding' will also be set to the specified
309encoding, so that the reverse conversion can be done when writing the file.
310 The same argument can be used when writing the file. This way you can
311actually use Vim to convert a file. Example: >
312
313 :write ++enc=utf-8 russian.txt
314<
315 Note:
316 Conversion may result in lost characters. Conversion from an encoding
317 to Unicode and back is mostly free of this problem, unless there are
318 illegal characters. Conversion from Unicode to other encodings often
319 loses information when there was more than one language in the file.
320
321==============================================================================
322*45.5* Entering language text
323
324Computer keyboards don't have much more than a hundred keys. Some languages
Bram Moolenaarbaca7f72013-09-22 14:42:24 +0200325have thousands of characters, Unicode has over hundred thousand. So how do
326you type these characters?
Bram Moolenaar071d4272004-06-13 20:20:40 +0000327 First of all, when you don't use too many of the special characters, you
328can use digraphs. This was already explained in |24.9|.
329 When you use a language that uses many more characters than keys on your
330keyboard, you will want to use an Input Method (IM). This requires learning
331the translation from typed keys to resulting character. When you need an IM
332you probably already have one on your system. It should work with Vim like
333with other programs. For details see |mbyte-XIM| for the X Window system and
334|mbyte-IME| for MS-Windows.
335
336
337KEYMAPS
338
339For some languages the character set is different from latin, but uses a
340similar number of characters. It's possible to map keys to characters. Vim
341uses keymaps for this.
342 Suppose you want to type Hebrew. You can load the keymap like this: >
343
344 :set keymap=hebrew
345
346Vim will try to find a keymap file for you. This depends on the value of
347'encoding'. If no matching file was found, you will get an error message.
348
349Now you can type Hebrew in Insert mode. In Normal mode, and when typing a ":"
350command, Vim automatically switches to English. You can use this command to
351switch between Hebrew and English: >
352
353 CTRL-^
354
355This only works in Insert mode and Command-line mode. In Normal mode it does
356something completely different (jumps to alternate file).
357 The usage of the keymap is indicated in the mode message, if you have the
358'showmode' option set. In the GUI Vim will indicate the usage of keymaps with
359a different cursor color.
360 You can also change the usage of the keymap with the 'iminsert' and
361'imsearch' options.
362
363To see the list of mappings, use this command: >
364
365 :lmap
366
367To find out which keymap files are available, in the GUI you can use the
368Edit/Keymap menu. Otherwise you can use this command: >
369
370 :echo globpath(&rtp, "keymap/*.vim")
371
372
373DO-IT-YOURSELF KEYMAPS
374
375You can create your own keymap file. It's not very difficult. Start with
376a keymap file that is similar to the language you want to use. Copy it to the
377"keymap" directory in your runtime directory. For example, for Unix, you
378would use the directory "~/.vim/keymap".
379 The name of the keymap file must look like this:
380
381 keymap/{name}.vim ~
382or
383 keymap/{name}_{encoding}.vim ~
384
385{name} is the name of the keymap. Chose a name that is obvious, but different
386from existing keymaps (unless you want to replace an existing keymap file).
387{name} cannot contain an underscore. Optionally, add the encoding used after
388an underscore. Examples:
389
390 keymap/hebrew.vim ~
391 keymap/hebrew_utf-8.vim ~
392
393The contents of the file should be self-explanatory. Look at a few of the
394keymaps that are distributed with Vim. For the details, see |mbyte-keymap|.
395
396
397LAST RESORT
398
399If all other methods fail, you can enter any character with CTRL-V:
400
401 encoding type range ~
402 8-bit CTRL-V 123 decimal 0-255
403 8-bit CTRL-V x a1 hexadecimal 00-ff
404 16-bit CTRL-V u 013b hexadecimal 0000-ffff
405 31-bit CTRL-V U 001303a4 hexadecimal 00000000-7fffffff
406
407Don't type the spaces. See |i_CTRL-V_digit| for the details.
408
409==============================================================================
410
Bram Moolenaar30ab04e2022-05-14 13:33:50 +0100411Next chapter: |usr_50.txt| Advanced Vim script writing
Bram Moolenaar071d4272004-06-13 20:20:40 +0000412
Bram Moolenaard473c8c2018-08-11 18:00:22 +0200413Copyright: see |manual-copyright| vim:tw=78:ts=8:noet:ft=help:norl: