aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/.asan-blacklist3
-rw-r--r--src/.valgrind.supp16
-rw-r--r--src/Doxyfile1890
-rwxr-xr-xsrc/clint.py3581
-rw-r--r--src/nvim/CMakeLists.txt115
-rw-r--r--src/nvim/api/buffer.c370
-rw-r--r--src/nvim/api/dispatch_deprecated.lua69
-rw-r--r--src/nvim/api/private/defs.h20
-rw-r--r--src/nvim/api/private/dispatch.c45
-rw-r--r--src/nvim/api/private/dispatch.h23
-rw-r--r--src/nvim/api/private/handle.c38
-rw-r--r--src/nvim/api/private/handle.h7
-rw-r--r--src/nvim/api/private/helpers.c443
-rw-r--r--src/nvim/api/private/helpers.h105
-rw-r--r--src/nvim/api/tabpage.c118
-rw-r--r--src/nvim/api/ui.c (renamed from src/nvim/msgpack_rpc/remote_ui.c)169
-rw-r--r--src/nvim/api/ui.h11
-rw-r--r--src/nvim/api/vim.c432
-rw-r--r--src/nvim/api/window.c189
-rw-r--r--src/nvim/auevents.lua3
-rw-r--r--src/nvim/buffer.c415
-rw-r--r--src/nvim/buffer.h16
-rw-r--r--src/nvim/buffer_defs.h118
-rw-r--r--src/nvim/charset.c468
-rw-r--r--src/nvim/charset.h8
-rw-r--r--src/nvim/cursor.c1
-rw-r--r--src/nvim/cursor.h1
-rw-r--r--src/nvim/cursor_shape.c1
-rw-r--r--src/nvim/diff.c7
-rw-r--r--src/nvim/digraph.c12
-rw-r--r--src/nvim/edit.c178
-rw-r--r--src/nvim/eval.c4666
-rw-r--r--src/nvim/eval.h11
-rw-r--r--src/nvim/eval.lua337
-rw-r--r--src/nvim/eval/decode.c18
-rw-r--r--src/nvim/eval/encode.c771
-rw-r--r--src/nvim/eval/typval_encode.c.h802
-rw-r--r--src/nvim/eval/typval_encode.h145
-rw-r--r--src/nvim/eval_defs.h39
-rw-r--r--src/nvim/event/defs.h26
-rw-r--r--src/nvim/event/libuv_process.c5
-rw-r--r--src/nvim/event/loop.c46
-rw-r--r--src/nvim/event/loop.h68
-rw-r--r--src/nvim/event/multiqueue.c230
-rw-r--r--src/nvim/event/multiqueue.h19
-rw-r--r--src/nvim/event/process.c119
-rw-r--r--src/nvim/event/process.h4
-rw-r--r--src/nvim/event/queue.c208
-rw-r--r--src/nvim/event/queue.h19
-rw-r--r--src/nvim/event/rstream.c29
-rw-r--r--src/nvim/event/signal.h2
-rw-r--r--src/nvim/event/socket.c6
-rw-r--r--src/nvim/event/socket.h2
-rw-r--r--src/nvim/event/stream.c10
-rw-r--r--src/nvim/event/stream.h6
-rw-r--r--src/nvim/event/time.c5
-rw-r--r--src/nvim/event/time.h3
-rw-r--r--src/nvim/event/wstream.c17
-rw-r--r--src/nvim/ex_cmds.c2382
-rw-r--r--src/nvim/ex_cmds.h16
-rw-r--r--src/nvim/ex_cmds.lua61
-rw-r--r--src/nvim/ex_cmds2.c2586
-rw-r--r--src/nvim/ex_cmds_defs.h91
-rw-r--r--src/nvim/ex_docmd.c535
-rw-r--r--src/nvim/ex_docmd.h28
-rw-r--r--src/nvim/ex_eval.c1
-rw-r--r--src/nvim/ex_eval.h22
-rw-r--r--src/nvim/ex_getln.c270
-rw-r--r--src/nvim/farsi.c1
-rw-r--r--src/nvim/file_search.c189
-rw-r--r--src/nvim/fileio.c617
-rw-r--r--src/nvim/fileio.h2
-rw-r--r--src/nvim/fold.c29
-rw-r--r--src/nvim/func_attr.h251
-rw-r--r--src/nvim/garray.c1
-rw-r--r--src/nvim/garray.h28
-rw-r--r--src/nvim/getchar.c55
-rw-r--r--src/nvim/globals.h237
-rw-r--r--src/nvim/hardcopy.c54
-rw-r--r--src/nvim/hashtab.c16
-rw-r--r--src/nvim/hashtab.h9
-rw-r--r--src/nvim/iconv.h2
-rw-r--r--src/nvim/if_cscope.c82
-rw-r--r--src/nvim/if_cscope_defs.h13
-rw-r--r--src/nvim/indent.c1
-rw-r--r--src/nvim/indent_c.c6
-rw-r--r--src/nvim/keymap.c6
-rw-r--r--src/nvim/lib/klist.h154
-rw-r--r--src/nvim/lib/kvec.h260
-rw-r--r--src/nvim/lib/queue.h154
-rw-r--r--src/nvim/lib/ringbuf.h388
-rw-r--r--src/nvim/log.c75
-rw-r--r--src/nvim/macros.h57
-rw-r--r--src/nvim/main.c61
-rw-r--r--src/nvim/main.h3
-rw-r--r--src/nvim/map.c172
-rw-r--r--src/nvim/map.h31
-rw-r--r--src/nvim/mark.c30
-rw-r--r--src/nvim/mbyte.c746
-rw-r--r--src/nvim/mbyte.h16
-rw-r--r--src/nvim/memfile.c3
-rw-r--r--src/nvim/memline.c141
-rw-r--r--src/nvim/memory.c149
-rw-r--r--src/nvim/memory.h33
-rw-r--r--src/nvim/menu.c2
-rw-r--r--src/nvim/message.c242
-rw-r--r--src/nvim/misc1.c88
-rw-r--r--src/nvim/misc2.c486
-rw-r--r--src/nvim/misc2.h12
-rw-r--r--src/nvim/mouse.c77
-rw-r--r--src/nvim/move.c5
-rw-r--r--src/nvim/msgpack_rpc/channel.c171
-rw-r--r--src/nvim/msgpack_rpc/channel.h1
-rw-r--r--src/nvim/msgpack_rpc/defs.h28
-rw-r--r--src/nvim/msgpack_rpc/helpers.c467
-rw-r--r--src/nvim/msgpack_rpc/remote_ui.h9
-rw-r--r--src/nvim/msgpack_rpc/server.c7
-rw-r--r--src/nvim/normal.c98
-rw-r--r--src/nvim/ops.c703
-rw-r--r--src/nvim/ops.h2
-rw-r--r--src/nvim/option.c612
-rw-r--r--src/nvim/option.h25
-rw-r--r--src/nvim/option_defs.h285
-rw-r--r--src/nvim/options.lua52
-rw-r--r--src/nvim/os/env.c62
-rw-r--r--src/nvim/os/fileio.c318
-rw-r--r--src/nvim/os/fileio.h72
-rw-r--r--src/nvim/os/fs.c511
-rw-r--r--src/nvim/os/input.c79
-rw-r--r--src/nvim/os/os_defs.h8
-rw-r--r--src/nvim/os/pty_process.h9
-rw-r--r--src/nvim/os/pty_process_unix.c (renamed from src/nvim/event/pty_process.c)19
-rw-r--r--src/nvim/os/pty_process_unix.h (renamed from src/nvim/event/pty_process.h)9
-rw-r--r--src/nvim/os/pty_process_win.h28
-rw-r--r--src/nvim/os/shell.c284
-rw-r--r--src/nvim/os/signal.c25
-rw-r--r--src/nvim/os/stdpaths.c54
-rw-r--r--src/nvim/os/time.c42
-rw-r--r--src/nvim/os/users.c1
-rw-r--r--src/nvim/os_unix.c8
-rw-r--r--src/nvim/path.c157
-rw-r--r--src/nvim/po/CMakeLists.txt33
-rw-r--r--src/nvim/po/af.po9
-rw-r--r--src/nvim/po/ca.po9
-rw-r--r--src/nvim/po/cs.cp1250.po9
-rw-r--r--src/nvim/po/cs.po9
-rw-r--r--src/nvim/po/de.po5
-rw-r--r--src/nvim/po/en_GB.po9
-rw-r--r--src/nvim/po/eo.po1541
-rw-r--r--src/nvim/po/es.po11
-rw-r--r--src/nvim/po/fi.po9
-rw-r--r--src/nvim/po/fr.po1484
-rw-r--r--src/nvim/po/ga.po10
-rw-r--r--src/nvim/po/it.po117
-rw-r--r--src/nvim/po/ja.euc-jp.po189
-rw-r--r--src/nvim/po/ja.po190
-rw-r--r--src/nvim/po/ja.sjis.po8155
-rw-r--r--src/nvim/po/ko.UTF-8.po9
-rw-r--r--src/nvim/po/ko.po7858
-rw-r--r--src/nvim/po/nb.po10
-rw-r--r--src/nvim/po/nl.po9
-rw-r--r--src/nvim/po/no.po10
-rw-r--r--src/nvim/po/pl.UTF-8.po9
-rw-r--r--src/nvim/po/pl.cp1250.po8264
-rw-r--r--src/nvim/po/pl.po8264
-rw-r--r--src/nvim/po/pt_BR.po5
-rw-r--r--src/nvim/po/ru.cp1251.po8282
-rw-r--r--src/nvim/po/ru.po11
-rw-r--r--src/nvim/po/sjiscorr.c45
-rw-r--r--src/nvim/po/sk.cp1250.po9
-rw-r--r--src/nvim/po/sk.po9
-rw-r--r--src/nvim/po/sv.po5
-rw-r--r--src/nvim/po/uk.cp1251.po8388
-rw-r--r--src/nvim/po/uk.po5024
-rw-r--r--src/nvim/po/vi.po10
-rw-r--r--src/nvim/po/zh_CN.UTF-8.po9
-rw-r--r--src/nvim/po/zh_CN.cp936.po7932
-rw-r--r--src/nvim/po/zh_CN.po7932
-rw-r--r--src/nvim/po/zh_TW.UTF-8.po11
-rw-r--r--src/nvim/po/zh_TW.po7910
-rw-r--r--src/nvim/popupmnu.c158
-rw-r--r--src/nvim/quickfix.c1593
-rw-r--r--src/nvim/rbuffer.c8
-rw-r--r--src/nvim/rbuffer.h44
-rw-r--r--src/nvim/regexp.c107
-rw-r--r--src/nvim/regexp_nfa.c360
-rw-r--r--src/nvim/screen.c280
-rw-r--r--src/nvim/search.c53
-rw-r--r--src/nvim/shada.c476
-rw-r--r--src/nvim/spell.c214
-rw-r--r--src/nvim/state.c41
-rw-r--r--src/nvim/strings.c30
-rw-r--r--src/nvim/syntax.c1114
-rw-r--r--src/nvim/tag.c29
-rw-r--r--src/nvim/terminal.c64
-rw-r--r--src/nvim/testdir/Makefile29
-rw-r--r--src/nvim/testdir/runtest.vim148
-rw-r--r--src/nvim/testdir/samples/quickfix.txt4
-rw-r--r--src/nvim/testdir/setup.vim7
-rw-r--r--src/nvim/testdir/test10.in110
-rw-r--r--src/nvim/testdir/test10.ok23
-rw-r--r--src/nvim/testdir/test10a.in72
-rw-r--r--src/nvim/testdir/test10a.ok23
-rw-r--r--src/nvim/testdir/test12.in50
-rw-r--r--src/nvim/testdir/test12.ok10
-rw-r--r--src/nvim/testdir/test17.in14
-rw-r--r--src/nvim/testdir/test30.in230
-rw-r--r--src/nvim/testdir/test30.ok130
-rw-r--r--src/nvim/testdir/test34.in86
-rw-r--r--src/nvim/testdir/test34.ok10
-rw-r--r--src/nvim/testdir/test47.in102
-rw-r--r--src/nvim/testdir/test47.ok44
-rw-r--r--src/nvim/testdir/test53.in59
-rw-r--r--src/nvim/testdir/test53.ok26
-rw-r--r--src/nvim/testdir/test55.in600
-rw-r--r--src/nvim/testdir/test55.ok199
-rw-r--r--src/nvim/testdir/test64.in4
-rw-r--r--src/nvim/testdir/test64.ok3
-rw-r--r--src/nvim/testdir/test73.in11
-rw-r--r--src/nvim/testdir/test_alot.vim25
-rw-r--r--src/nvim/testdir/test_assign.vim9
-rw-r--r--src/nvim/testdir/test_autocmd.vim198
-rw-r--r--src/nvim/testdir/test_bufwintabinfo.vim103
-rw-r--r--src/nvim/testdir/test_cmdline.vim186
-rw-r--r--src/nvim/testdir/test_cscope.vim15
-rw-r--r--src/nvim/testdir/test_diffmode.vim204
-rw-r--r--src/nvim/testdir/test_ex_undo.vim19
-rw-r--r--src/nvim/testdir/test_execute_func.vim55
-rw-r--r--src/nvim/testdir/test_expr.vim108
-rw-r--r--src/nvim/testdir/test_expr_utf8.vim94
-rw-r--r--src/nvim/testdir/test_feedkeys.vim14
-rw-r--r--src/nvim/testdir/test_gn.vim93
-rw-r--r--src/nvim/testdir/test_goto.vim35
-rw-r--r--src/nvim/testdir/test_hardcopy.vim62
-rw-r--r--src/nvim/testdir/test_help_tagjump.vim125
-rw-r--r--src/nvim/testdir/test_history.vim65
-rw-r--r--src/nvim/testdir/test_jumps.vim11
-rw-r--r--src/nvim/testdir/test_langmap.vim24
-rw-r--r--src/nvim/testdir/test_listlbr.in119
-rw-r--r--src/nvim/testdir/test_listlbr.ok62
-rw-r--r--src/nvim/testdir/test_match.vim234
-rw-r--r--src/nvim/testdir/test_matchadd_conceal.vim262
-rw-r--r--src/nvim/testdir/test_matchadd_conceal_utf8.vim39
-rw-r--r--src/nvim/testdir/test_messages.vim40
-rw-r--r--src/nvim/testdir/test_options.vim99
-rw-r--r--src/nvim/testdir/test_partial.vim330
-rw-r--r--src/nvim/testdir/test_popup.vim485
-rw-r--r--src/nvim/testdir/test_quickfix.vim1464
-rw-r--r--src/nvim/testdir/test_regexp_utf8.vim40
-rw-r--r--src/nvim/testdir/test_signs.vim199
-rw-r--r--src/nvim/testdir/test_statusline.vim39
-rw-r--r--src/nvim/testdir/test_syn_attr.vim28
-rw-r--r--src/nvim/testdir/test_syntax.vim78
-rw-r--r--src/nvim/testdir/test_tabline.vim43
-rw-r--r--src/nvim/testdir/test_tabpage.vim256
-rw-r--r--src/nvim/testdir/test_tagjump.vim9
-rw-r--r--src/nvim/testdir/test_timers.vim55
-rw-r--r--src/nvim/testdir/test_unlet.vim26
-rw-r--r--src/nvim/testdir/test_usercommands.vim104
-rw-r--r--src/nvim/testdir/test_viml.vim149
-rw-r--r--src/nvim/testdir/test_visual.vim17
-rw-r--r--src/nvim/testdir/test_window_cmd.vim70
-rw-r--r--src/nvim/testdir/test_window_id.vim94
-rw-r--r--src/nvim/tui/input.c45
-rw-r--r--src/nvim/tui/input.h3
-rw-r--r--src/nvim/tui/tui.c194
-rw-r--r--src/nvim/types.h2
-rw-r--r--src/nvim/ugrid.h20
-rw-r--r--src/nvim/ui.c107
-rw-r--r--src/nvim/ui.h5
-rw-r--r--src/nvim/ui_bridge.c48
-rw-r--r--src/nvim/ui_bridge.h19
-rw-r--r--src/nvim/undo.c118
-rw-r--r--src/nvim/version.c1067
-rw-r--r--src/nvim/vim.h22
-rw-r--r--src/nvim/window.c317
276 files changed, 33255 insertions, 94474 deletions
diff --git a/src/.asan-blacklist b/src/.asan-blacklist
new file mode 100644
index 0000000000..7636f8fa82
--- /dev/null
+++ b/src/.asan-blacklist
@@ -0,0 +1,3 @@
+# multiqueue.h pointer arithmetic is not accepted by asan
+fun:multiqueue_node_data
+fun:dictwatcher_node_data
diff --git a/src/.valgrind.supp b/src/.valgrind.supp
new file mode 100644
index 0000000000..8b630fcaaf
--- /dev/null
+++ b/src/.valgrind.supp
@@ -0,0 +1,16 @@
+{
+ nss_parse_service_list
+ Memcheck:Leak
+ fun:malloc
+ fun:nss_parse_service_list
+ fun:__nss_database_lookup
+}
+{
+ uv_spawn_with_optimizations
+ Memcheck:Leak
+ fun:malloc
+ fun:uv_spawn
+ fun:pipe_process_spawn
+ fun:process_spawn
+ fun:job_start
+}
diff --git a/src/Doxyfile b/src/Doxyfile
new file mode 100644
index 0000000000..de31c8355f
--- /dev/null
+++ b/src/Doxyfile
@@ -0,0 +1,1890 @@
+# Doxyfile 1.8.4
+
+# This file describes the settings to be used by the documentation system
+# doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed
+# in front of the TAG it is preceding .
+# All text after a hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (" ").
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the config file
+# that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# http://www.gnu.org/software/libiconv for the list of possible encodings.
+
+DOXYFILE_ENCODING = UTF-8
+
+# The PROJECT_NAME tag is a single word (or sequence of words) that should
+# identify the project. Note that if you do not use Doxywizard you need
+# to put quotes around the project name if it contains spaces.
+
+PROJECT_NAME = "Neovim"
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number.
+# This could be handy for archiving the generated documentation or
+# if some version control system is used.
+
+PROJECT_NUMBER =
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewer
+# a quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF =
+
+# With the PROJECT_LOGO tag one can specify a logo or icon that is
+# included in the documentation. The maximum height of the logo should not
+# exceed 55 pixels and the maximum width should not exceed 200 pixels.
+# Doxygen will copy the logo to the output directory.
+
+PROJECT_LOGO = contrib/doxygen/logo-devdoc.png
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
+# base path where the generated documentation will be put.
+# If a relative path is entered, it will be relative to the location
+# where doxygen was started. If left blank the current directory will be used.
+
+OUTPUT_DIRECTORY = build/doxygen
+
+# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
+# 4096 sub-directories (in 2 levels) under the output directory of each output
+# format and will distribute the generated files over these directories.
+# Enabling this option can be useful when feeding doxygen a huge amount of
+# source files, where putting all generated files in the same directory would
+# otherwise cause performance problems for the file system.
+
+CREATE_SUBDIRS = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# The default language is English, other supported languages are:
+# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
+# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German,
+# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English
+# messages), Korean, Korean-en, Latvian, Lithuanian, Norwegian, Macedonian,
+# Persian, Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrillic,
+# Slovak, Slovene, Spanish, Swedish, Ukrainian, and Vietnamese.
+
+OUTPUT_LANGUAGE = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
+# include brief member descriptions after the members that are listed in
+# the file and class documentation (similar to JavaDoc).
+# Set to NO to disable this.
+
+BRIEF_MEMBER_DESC = YES
+
+# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
+# the brief description of a member or function before the detailed description.
+# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+
+REPEAT_BRIEF = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator
+# that is used to form the text in various listings. Each string
+# in this list, if found as the leading text of the brief description, will be
+# stripped from the text and the result after processing the whole list, is
+# used as the annotated text. Otherwise, the brief description is used as-is.
+# If left blank, the following values are used ("$name" is automatically
+# replaced with the name of the entity): "The $name class" "The $name widget"
+# "The $name file" "is" "provides" "specifies" "contains"
+# "represents" "a" "an" "the"
+
+ABBREVIATE_BRIEF =
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+
+ALWAYS_DETAILED_SEC = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+
+INLINE_INHERITED_MEMB = NO
+
+# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
+# path before files name in the file list and in the header files. If set
+# to NO the shortest path that makes the file name unique will be used.
+
+FULL_PATH_NAMES = YES
+
+# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
+# can be used to strip a user-defined part of the path. Stripping is
+# only done if one of the specified strings matches the left-hand part of
+# the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which doxygen is run is used as the
+# path to strip. Note that you specify absolute paths here, but also
+# relative paths, which will be relative from the directory where doxygen is
+# started.
+
+STRIP_FROM_PATH =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
+# the path mentioned in the documentation of a class, which tells
+# the reader which header file to include in order to use a class.
+# If left blank only the name of the header file containing the class
+# definition is used. Otherwise one should specify the include paths that
+# are normally passed to the compiler using the -I flag.
+
+STRIP_FROM_INC_PATH =
+
+# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
+# (but less readable) file names. This can be useful if your file system
+# doesn't support long names like on DOS, Mac, or CD-ROM.
+
+SHORT_NAMES = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
+# will interpret the first line (until the first dot) of a JavaDoc-style
+# comment as the brief description. If set to NO, the JavaDoc
+# comments will behave just like regular Qt-style comments
+# (thus requiring an explicit @brief command for a brief description.)
+
+JAVADOC_AUTOBRIEF = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
+# interpret the first line (until the first dot) of a Qt-style
+# comment as the brief description. If set to NO, the comments
+# will behave just like regular Qt-style comments (thus requiring
+# an explicit \brief command for a brief description.)
+
+QT_AUTOBRIEF = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
+# treat a multi-line C++ special comment block (i.e. a block of //! or ///
+# comments) as a brief description. This used to be the default behaviour.
+# The new default is to treat a multi-line C++ comment block as a detailed
+# description. Set this tag to YES if you prefer the old behaviour instead.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
+# member inherits the documentation from any documented member that it
+# re-implements.
+
+INHERIT_DOCS = YES
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
+# a new page for each member. If set to NO, the documentation of a member will
+# be part of the file/class/namespace that contains it.
+
+SEPARATE_MEMBER_PAGES = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab.
+# Doxygen uses this value to replace tabs by spaces in code fragments.
+
+TAB_SIZE = 4
+
+# This tag can be used to specify a number of aliases that acts
+# as commands in the documentation. An alias has the form "name=value".
+# For example adding "sideeffect=\par Side Effects:\n" will allow you to
+# put the command \sideeffect (or @sideeffect) in the documentation, which
+# will result in a user-defined paragraph with heading "Side Effects:".
+# You can put \n's in the value part of an alias to insert newlines.
+
+ALIASES =
+
+# This tag can be used to specify a number of word-keyword mappings (TCL only).
+# A mapping has the form "name=value". For example adding
+# "class=itcl::class" will allow you to use the command class in the
+# itcl::class meaning.
+
+TCL_SUBST =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
+# sources only. Doxygen will then generate output that is more tailored for C.
+# For instance, some of the names that are used will be different. The list
+# of all members will be omitted, etc.
+
+OPTIMIZE_OUTPUT_FOR_C = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
+# sources only. Doxygen will then generate output that is more tailored for
+# Java. For instance, namespaces will be presented as packages, qualified
+# scopes will look different, etc.
+
+OPTIMIZE_OUTPUT_JAVA = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources only. Doxygen will then generate output that is more tailored for
+# Fortran.
+
+OPTIMIZE_FOR_FORTRAN = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for
+# VHDL.
+
+OPTIMIZE_OUTPUT_VHDL = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension,
+# and language is one of the parsers supported by doxygen: IDL, Java,
+# Javascript, CSharp, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL, C,
+# C++. For instance to make doxygen treat .inc files as Fortran files (default
+# is PHP), and .f files as C (default is Fortran), use: inc=Fortran f=C. Note
+# that for custom extensions you also need to set FILE_PATTERNS otherwise the
+# files are not read by doxygen.
+
+EXTENSION_MAPPING =
+
+# If MARKDOWN_SUPPORT is enabled (the default) then doxygen pre-processes all
+# comments according to the Markdown format, which allows for more readable
+# documentation. See http://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by doxygen, so you
+# can mix doxygen, HTML, and XML commands with Markdown formatting.
+# Disable only in case of backward compatibilities issues.
+
+MARKDOWN_SUPPORT = YES
+
+# When enabled doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by by putting a % sign in front of the word
+# or globally by setting AUTOLINK_SUPPORT to NO.
+
+AUTOLINK_SUPPORT = YES
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should
+# set this tag to YES in order to let doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
+# func(std::string) {}). This also makes the inheritance and collaboration
+# diagrams that involve STL classes more complete and accurate.
+
+BUILTIN_STL_SUPPORT = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+
+CPP_CLI_SUPPORT = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
+# Doxygen will parse them like normal C++ but will assume all classes use public
+# instead of private inheritance when no explicit protection keyword is present.
+
+SIP_SUPPORT = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES (the
+# default) will make doxygen replace the get and set methods by a property in
+# the documentation. This will only work if the methods are indeed getting or
+# setting a simple type. If this is not the case, or you want to show the
+# methods anyway, you should set this option to NO.
+
+IDL_PROPERTY_SUPPORT = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES, then doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+
+DISTRIBUTE_GROUP_DOC = NO
+
+# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
+# the same type (for instance a group of public functions) to be put as a
+# subgroup of that type (e.g. under the Public Functions section). Set it to
+# NO to prevent subgrouping. Alternatively, this can be done per class using
+# the \nosubgrouping command.
+
+SUBGROUPING = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and
+# unions are shown inside the group in which they are included (e.g. using
+# @ingroup) instead of on a separate page (for HTML and Man pages) or
+# section (for LaTeX and RTF).
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and
+# unions with only public data fields or simple typedef fields will be shown
+# inline in the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO (the default), structs, classes, and unions are shown on a separate
+# page (for HTML and Man pages) or section (for LaTeX and RTF).
+
+INLINE_SIMPLE_STRUCTS = NO
+
+# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
+# is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically
+# be useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+
+TYPEDEF_HIDES_STRUCT = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can
+# be an expensive process and often the same symbol appear multiple times in
+# the code, doxygen keeps a cache of pre-resolved symbols. If the cache is too
+# small doxygen will become slower. If the cache is too large, memory is wasted.
+# The cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid
+# range is 0..9, the default is 0, corresponding to a cache size of 2^16 = 65536
+# symbols.
+
+LOOKUP_CACHE_SIZE = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# documentation are documented, even if no documentation was available.
+# Private class members and static file members will be hidden unless
+# the EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES
+
+EXTRACT_ALL = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
+# will be included in the documentation.
+
+EXTRACT_PRIVATE = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# scope will be included in the documentation.
+
+EXTRACT_PACKAGE = NO
+
+# If the EXTRACT_STATIC tag is set to YES all static members of a file
+# will be included in the documentation.
+
+EXTRACT_STATIC = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
+# defined locally in source files will be included in the documentation.
+# If set to NO only classes defined in header files are included.
+
+EXTRACT_LOCAL_CLASSES = YES
+
+# This flag is only useful for Objective-C code. When set to YES local
+# methods, which are defined in the implementation section but not in
+# the interface are included in the documentation.
+# If set to NO (the default) only methods in the interface are included.
+
+EXTRACT_LOCAL_METHODS = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base
+# name of the file that contains the anonymous namespace. By default
+# anonymous namespaces are hidden.
+
+EXTRACT_ANON_NSPACES = NO
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members of documented classes, files or namespaces.
+# If set to NO (the default) these members will be included in the
+# various overviews, but no documentation section is generated.
+# This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_MEMBERS = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy.
+# If set to NO (the default) these classes will be included in the various
+# overviews. This option has no effect if EXTRACT_ALL is enabled.
+
+HIDE_UNDOC_CLASSES = NO
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
+# friend (class|struct|union) declarations.
+# If set to NO (the default) these declarations will be included in the
+# documentation.
+
+HIDE_FRIEND_COMPOUNDS = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function.
+# If set to NO (the default) these blocks will be appended to the
+# function's detailed documentation block.
+
+HIDE_IN_BODY_DOCS = NO
+
+# The INTERNAL_DOCS tag determines if documentation
+# that is typed after a \internal command is included. If the tag is set
+# to NO (the default) then the documentation will be excluded.
+# Set it to YES to include the internal documentation.
+
+INTERNAL_DOCS = NO
+
+# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
+# file names in lower-case letters. If set to YES upper-case letters are also
+# allowed. This is useful if you have classes or files whose names only differ
+# in case and if your file system supports case sensitive file names. Windows
+# and Mac users are advised to set this option to NO.
+
+CASE_SENSE_NAMES = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
+# will show members with their full class and namespace scopes in the
+# documentation. If set to YES the scope will be hidden.
+
+HIDE_SCOPE_NAMES = NO
+
+# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
+# will put a list of the files that are included by a file in the documentation
+# of that file.
+
+SHOW_INCLUDE_FILES = YES
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen
+# will list include files with double quotes in the documentation
+# rather than with sharp brackets.
+
+FORCE_LOCAL_INCLUDES = NO
+
+# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
+# is inserted in the documentation for inline members.
+
+INLINE_INFO = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
+# will sort the (detailed) documentation of file and class members
+# alphabetically by member name. If set to NO the members will appear in
+# declaration order.
+
+SORT_MEMBER_DOCS = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
+# brief documentation of file, namespace and class members alphabetically
+# by member name. If set to NO (the default) the members will appear in
+# declaration order.
+
+SORT_BRIEF_DOCS = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen
+# will sort the (brief and detailed) documentation of class members so that
+# constructors and destructors are listed first. If set to NO (the default)
+# the constructors will appear in the respective orders defined by
+# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS.
+# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO
+# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
+# hierarchy of group names into alphabetical order. If set to NO (the default)
+# the group names will appear in their defined order.
+
+SORT_GROUP_NAMES = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
+# sorted by fully-qualified names, including namespaces. If set to
+# NO (the default), the class list will be sorted only by class name,
+# not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the
+# alphabetical list.
+
+SORT_BY_SCOPE_NAME = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to
+# do proper type resolution of all parameters of a function it will reject a
+# match between the prototype and the implementation of a member function even
+# if there is only one candidate or it is obvious which candidate to choose
+# by doing a simple string match. By disabling STRICT_PROTO_MATCHING doxygen
+# will still accept a match between prototype and implementation in such cases.
+
+STRICT_PROTO_MATCHING = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or
+# disable (NO) the todo list. This list is created by putting \todo
+# commands in the documentation.
+
+GENERATE_TODOLIST = YES
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or
+# disable (NO) the test list. This list is created by putting \test
+# commands in the documentation.
+
+GENERATE_TESTLIST = YES
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or
+# disable (NO) the bug list. This list is created by putting \bug
+# commands in the documentation.
+
+GENERATE_BUGLIST = YES
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
+# disable (NO) the deprecated list. This list is created by putting
+# \deprecated commands in the documentation.
+
+GENERATE_DEPRECATEDLIST= YES
+
+# The ENABLED_SECTIONS tag can be used to enable conditional
+# documentation sections, marked by \if section-label ... \endif
+# and \cond section-label ... \endcond blocks.
+
+ENABLED_SECTIONS =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
+# the initial value of a variable or macro consists of for it to appear in
+# the documentation. If the initializer consists of more lines than specified
+# here it will be hidden. Use a value of 0 to hide initializers completely.
+# The appearance of the initializer of individual variables and macros in the
+# documentation can be controlled using \showinitializer or \hideinitializer
+# command in the documentation regardless of this setting.
+
+MAX_INITIALIZER_LINES = 30
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
+# at the bottom of the documentation of classes and structs. If set to YES the
+# list will mention the files that were used to generate the documentation.
+
+SHOW_USED_FILES = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page.
+# This will remove the Files entry from the Quick Index and from the
+# Folder Tree View (if specified). The default is YES.
+
+SHOW_FILES = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the
+# Namespaces page.
+# This will remove the Namespaces entry from the Quick Index
+# and from the Folder Tree View (if specified). The default is YES.
+
+SHOW_NAMESPACES = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command <command> <input-file>, where <command> is the value of
+# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
+# provided by doxygen. Whatever the program writes to standard output
+# is used as the file version. See the manual for examples.
+
+FILE_VERSION_FILTER =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents doxygen's defaults, run doxygen with the -l option.
+# You can optionally specify a file name after the option, if omitted
+# DoxygenLayout.xml will be used as the name of the layout file.
+
+LAYOUT_FILE =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files
+# containing the references data. This must be a list of .bib files. The
+# .bib extension is automatically appended if omitted. Using this command
+# requires the bibtex tool to be installed. See also
+# http://en.wikipedia.org/wiki/BibTeX for more info. For LaTeX the style
+# of the bibliography can be controlled using LATEX_BIB_STYLE. To use this
+# feature you need bibtex and perl available in the search path. Do not use
+# file names with spaces, bibtex cannot handle them.
+
+CITE_BIB_FILES =
+
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated
+# by doxygen. Possible values are YES and NO. If left blank NO is used.
+
+QUIET = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated by doxygen. Possible values are YES and NO. If left blank
+# NO is used.
+
+WARNINGS = YES
+
+# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
+# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
+# automatically be disabled.
+
+WARN_IF_UNDOCUMENTED = YES
+
+# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
+# potential errors in the documentation, such as not documenting some
+# parameters in a documented function, or documenting parameters that
+# don't exist or using markup commands wrongly.
+
+WARN_IF_DOC_ERROR = YES
+
+# The WARN_NO_PARAMDOC option can be enabled to get warnings for
+# functions that are documented, but have no documentation for their parameters
+# or return value. If set to NO (the default) doxygen will only warn about
+# wrong or incomplete parameter documentation, but not about the absence of
+# documentation.
+
+WARN_NO_PARAMDOC = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that
+# doxygen can produce. The string should contain the $file, $line, and $text
+# tags, which will be replaced by the file and line number from which the
+# warning originated and the warning text. Optionally the format may contain
+# $version, which will be replaced by the version of the file (if it could
+# be obtained via FILE_VERSION_FILTER)
+
+WARN_FORMAT = "$file:$line: $text"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning
+# and error messages should be written. If left blank the output is written
+# to stderr.
+
+WARN_LOGFILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag can be used to specify the files and/or directories that contain
+# documented source files. You may enter file names like "myfile.cpp" or
+# directories like "/usr/src/myproject". Separate the files or directories
+# with spaces.
+
+INPUT = src/
+
+# This tag can be used to specify the character encoding of the source files
+# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+# also the default input encoding. Doxygen uses libiconv (or the iconv built
+# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
+# the list of possible encodings.
+
+INPUT_ENCODING = UTF-8
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank the following patterns are tested:
+# *.c *.cc *.cxx *.cpp *.c++ *.d *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh
+# *.hxx *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.dox *.py
+# *.f90 *.f *.for *.vhd *.vhdl
+
+FILE_PATTERNS = *.h *.c
+
+# The RECURSIVE tag can be used to turn specify whether or not subdirectories
+# should be searched for input files as well. Possible values are YES and NO.
+# If left blank NO is used.
+
+RECURSIVE = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+# Note that relative paths are relative to the directory from which doxygen is
+# run.
+
+EXCLUDE =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+
+EXCLUDE_SYMLINKS = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories. Note that the wildcards are matched
+# against the file with absolute path, so to exclude all test directories
+# for example use the pattern */test/*
+
+EXCLUDE_PATTERNS =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# AClass::ANamespace, ANamespace::*Test
+
+EXCLUDE_SYMBOLS =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or
+# directories that contain example code fragments that are included (see
+# the \include command).
+
+EXAMPLE_PATH =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
+# and *.h) to filter out the source-files in the directories. If left
+# blank all files are included.
+
+EXAMPLE_PATTERNS =
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude
+# commands irrespective of the value of the RECURSIVE tag.
+# Possible values are YES and NO. If left blank NO is used.
+
+EXAMPLE_RECURSIVE = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or
+# directories that contain image that are included in the documentation (see
+# the \image command).
+
+IMAGE_PATH =
+
+# The INPUT_FILTER tag can be used to specify a program that doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command <filter> <input-file>, where <filter>
+# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
+# input file. Doxygen will then use the output that the filter program writes
+# to standard output.
+# If FILTER_PATTERNS is specified, this tag will be ignored.
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+
+INPUT_FILTER =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis.
+# Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match.
+# The filters are a list of the form:
+# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
+# info on how filters are used. If FILTER_PATTERNS is empty or if
+# non of the patterns match the file name, INPUT_FILTER is applied.
+
+FILTER_PATTERNS =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will be used to filter the input files when producing source
+# files to browse (i.e. when SOURCE_BROWSER is set to YES).
+
+FILTER_SOURCE_FILES = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any)
+# and it is also possible to disable source filtering for a specific pattern
+# using *.ext= (so without naming a filter). This option only has effect when
+# FILTER_SOURCE_FILES is enabled.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MD_FILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want reuse the introduction page also for the doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will
+# be generated. Documented entities will be cross-referenced with these sources.
+# Note: To get rid of all source code in the generated output, make sure also
+# VERBATIM_HEADERS is set to NO.
+
+SOURCE_BROWSER = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body
+# of functions and classes directly in the documentation.
+
+INLINE_SOURCES = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
+# doxygen to hide any special comment blocks from generated source code
+# fragments. Normal C, C++ and Fortran comments will always remain visible.
+
+STRIP_CODE_COMMENTS = YES
+
+# If the REFERENCED_BY_RELATION tag is set to YES
+# then for each documented function all documented
+# functions referencing it will be listed.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES
+# then for each documented function all documented entities
+# called/used by that function will be listed.
+
+REFERENCES_RELATION = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
+# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
+# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
+# link to the source code.
+# Otherwise they will link to the documentation.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code
+# will point to the HTML generated by the htags(1) tool instead of doxygen
+# built-in source browser. The htags tool is part of GNU's global source
+# tagging system (see http://www.gnu.org/software/global/global.html). You
+# will need version 4.8.6 or higher.
+
+USE_HTAGS = NO
+
+# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
+# will generate a verbatim copy of the header file for each class for
+# which an include is specified. Set to NO to disable this.
+
+VERBATIM_HEADERS = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
+# of all compounds will be generated. Enable this if the project
+# contains a lot of classes, structs, unions or interfaces.
+
+ALPHABETICAL_INDEX = YES
+
+# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
+# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
+# in which this list will be split (can be a number in the range [1..20])
+
+COLS_IN_ALPHA_INDEX = 5
+
+# In case all classes in a project start with a common prefix, all
+# classes will be put under the same header in the alphabetical index.
+# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
+# should be ignored while generating the index headers.
+
+IGNORE_PREFIX =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
+# generate HTML output.
+
+GENERATE_HTML = YES
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `html' will be used as the default path.
+
+HTML_OUTPUT = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
+# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
+# doxygen will generate files with .html extension.
+
+HTML_FILE_EXTENSION = .html
+
+# The HTML_HEADER tag can be used to specify a personal HTML header for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard header. Note that when using a custom header you are responsible
+# for the proper inclusion of any scripts and style sheets that doxygen
+# needs, which is dependent on the configuration options used.
+# It is advised to generate a default header using "doxygen -w html
+# header.html footer.html stylesheet.css YourConfigFile" and then modify
+# that header. Note that the header is subject to change so you typically
+# have to redo this when upgrading to a newer version of doxygen or when
+# changing the value of configuration settings such as GENERATE_TREEVIEW!
+
+HTML_HEADER = contrib/doxygen/header.html
+
+# The HTML_FOOTER tag can be used to specify a personal HTML footer for
+# each generated HTML page. If it is left blank doxygen will generate a
+# standard footer.
+
+HTML_FOOTER = contrib/doxygen/footer.html
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
+# style sheet that is used by each HTML page. It can be used to
+# fine-tune the look of the HTML output. If left blank doxygen will
+# generate a default style sheet. Note that it is recommended to use
+# HTML_EXTRA_STYLESHEET instead of this one, as it is more robust and this
+# tag will in the future become obsolete.
+
+HTML_STYLESHEET = contrib/doxygen/customdoxygen.css
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional
+# user-defined cascading style sheet that is included after the standard
+# style sheets created by doxygen. Using this option one can overrule
+# certain style aspects. This is preferred over using HTML_STYLESHEET
+# since it does not replace the standard style sheet and is therefor more
+# robust against future updates. Doxygen will copy the style sheet file to
+# the output directory.
+
+HTML_EXTRA_STYLESHEET = contrib/doxygen/extra.css
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that
+# the files will be copied as-is; there are no commands or markers available.
+
+HTML_EXTRA_FILES =
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output.
+# Doxygen will adjust the colors in the style sheet and background images
+# according to this color. Hue is specified as an angle on a colorwheel,
+# see http://en.wikipedia.org/wiki/Hue for more information.
+# For instance the value 0 represents red, 60 is yellow, 120 is green,
+# 180 is cyan, 240 is blue, 300 purple, and 360 is red again.
+# The allowed range is 0 to 359.
+
+HTML_COLORSTYLE_HUE = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of
+# the colors in the HTML output. For a value of 0 the output will use
+# grayscales only. A value of 255 will produce the most vivid colors.
+
+HTML_COLORSTYLE_SAT = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to
+# the luminance component of the colors in the HTML output. Values below
+# 100 gradually make the output lighter, whereas values above 100 make
+# the output darker. The value divided by 100 is the actual gamma applied,
+# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2,
+# and 100 does not change the gamma.
+
+HTML_COLORSTYLE_GAMMA = 80
+
+# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
+# page will contain the date and time when the page was generated. Setting
+# this to NO can help when comparing the output of multiple runs.
+
+HTML_TIMESTAMP = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+
+HTML_DYNAMIC_SECTIONS = NO
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of
+# entries shown in the various tree structured indices initially; the user
+# can expand and collapse entries dynamically later on. Doxygen will expand
+# the tree to such a level that at most the specified number of entries are
+# visible (unless a fully collapsed tree already exceeds this amount).
+# So setting the number of entries 1 will produce a full collapsed tree by
+# default. 0 is a special value representing an infinite number of entries
+# and will result in a full expanded tree by default.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files
+# will be generated that can be used as input for Apple's Xcode 3
+# integrated development environment, introduced with OSX 10.5 (Leopard).
+# To create a documentation set, doxygen will generate a Makefile in the
+# HTML output directory. Running make will produce the docset in that
+# directory and running "make install" will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
+# it at startup.
+# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html
+# for more information.
+
+GENERATE_DOCSET = NO
+
+# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
+# feed. A documentation feed provides an umbrella under which multiple
+# documentation sets from a single provider (such as a company or product suite)
+# can be grouped.
+
+DOCSET_FEEDNAME = "Doxygen generated docs"
+
+# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
+# should uniquely identify the documentation set bundle. This should be a
+# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
+# will append .docset to the name.
+
+DOCSET_BUNDLE_ID = org.doxygen.Project
+
+# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely
+# identify the documentation publisher. This should be a reverse domain-name
+# style string, e.g. com.mycompany.MyDocSet.documentation.
+
+DOCSET_PUBLISHER_ID = org.doxygen.Publisher
+
+# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher.
+
+DOCSET_PUBLISHER_NAME = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES, additional index files
+# will be generated that can be used as input for tools like the
+# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
+# of the generated HTML documentation.
+
+GENERATE_HTMLHELP = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
+# be used to specify the file name of the resulting .chm file. You
+# can add a path in front of the file if the result should not be
+# written to the html output directory.
+
+CHM_FILE =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
+# be used to specify the location (absolute path including file name) of
+# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
+# the HTML help compiler on the generated index.hhp.
+
+HHC_LOCATION =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
+# controls if a separate .chi index file is generated (YES) or that
+# it should be included in the master .chm file (NO).
+
+GENERATE_CHI = NO
+
+# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING
+# is used to encode HtmlHelp index (hhk), content (hhc) and project file
+# content.
+
+CHM_INDEX_ENCODING =
+
+# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
+# controls whether a binary table of contents is generated (YES) or a
+# normal table of contents (NO) in the .chm file.
+
+BINARY_TOC = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members
+# to the contents of the HTML help documentation and to the tree view.
+
+TOC_EXPAND = NO
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated
+# that can be used as input for Qt's qhelpgenerator to generate a
+# Qt Compressed Help (.qch) of the generated HTML documentation.
+
+GENERATE_QHP = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can
+# be used to specify the file name of the resulting .qch file.
+# The path specified is relative to the HTML output folder.
+
+QCH_FILE =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#namespace
+
+QHP_NAMESPACE = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating
+# Qt Help Project output. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#virtual-folders
+
+QHP_VIRTUAL_FOLDER = doc
+
+# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to
+# add. For more information please see
+# http://doc.trolltech.com/qthelpproject.html#custom-filters
+
+QHP_CUST_FILTER_NAME =
+
+# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see
+# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">
+# Qt Help Project / Custom Filters</a>.
+
+QHP_CUST_FILTER_ATTRS =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's
+# filter section matches.
+# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">
+# Qt Help Project / Filter Attributes</a>.
+
+QHP_SECT_FILTER_ATTRS =
+
+# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can
+# be used to specify the location of Qt's qhelpgenerator.
+# If non-empty doxygen will try to run qhelpgenerator on the generated
+# .qhp file.
+
+QHG_LOCATION =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files
+# will be generated, which together with the HTML files, form an Eclipse help
+# plugin. To install this plugin and make it available under the help contents
+# menu in Eclipse, the contents of the directory containing the HTML and XML
+# files needs to be copied into the plugins directory of eclipse. The name of
+# the directory within the plugins directory should be the same as
+# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before
+# the help appears.
+
+GENERATE_ECLIPSEHELP = NO
+
+# A unique identifier for the eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have
+# this name.
+
+ECLIPSE_DOC_ID = org.doxygen.Project
+
+# The DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs)
+# at top of each HTML page. The value NO (the default) enables the index and
+# the value YES disables it. Since the tabs have the same information as the
+# navigation tree you can set this option to NO if you already set
+# GENERATE_TREEVIEW to YES.
+
+DISABLE_INDEX = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information.
+# If the tag value is set to YES, a side panel will be generated
+# containing a tree-like index structure (just like the one that
+# is generated for HTML Help). For this to work a browser that supports
+# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser).
+# Windows users are probably better off using the HTML help feature.
+# Since the tree basically has the same information as the tab index you
+# could consider to set DISABLE_INDEX to NO when enabling this option.
+
+GENERATE_TREEVIEW = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values
+# (range [0,1..20]) that doxygen will group on one line in the generated HTML
+# documentation. Note that a value of 0 will completely suppress the enum
+# values from appearing in the overview section.
+
+ENUM_VALUES_PER_LINE = 4
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
+# used to set the initial width (in pixels) of the frame in which the tree
+# is shown.
+
+TREEVIEW_WIDTH = 250
+
+# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open
+# links to external symbols imported via tag files in a separate window.
+
+EXT_LINKS_IN_WINDOW = NO
+
+# Use this tag to change the font size of Latex formulas included
+# as images in the HTML documentation. The default is 10. Note that
+# when you change the font size after a successful doxygen run you need
+# to manually remove any form_*.png images from the HTML output directory
+# to force them to be regenerated.
+
+FORMULA_FONTSIZE = 10
+
+# Use the FORMULA_TRANPARENT tag to determine whether or not the images
+# generated for formulas are transparent PNGs. Transparent PNGs are
+# not supported properly for IE 6.0, but are supported on all modern browsers.
+# Note that when changing this option you need to delete any form_*.png files
+# in the HTML output before the changes have effect.
+
+FORMULA_TRANSPARENT = YES
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax
+# (see http://www.mathjax.org) which uses client side Javascript for the
+# rendering instead of using prerendered bitmaps. Use this if you do not
+# have LaTeX installed or if you want to formulas look prettier in the HTML
+# output. When enabled you may also need to install MathJax separately and
+# configure the path to it using the MATHJAX_RELPATH option.
+
+USE_MATHJAX = NO
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. Supported types are HTML-CSS, NativeMML (i.e. MathML) and
+# SVG. The default value is HTML-CSS, which is slower, but has the best
+# compatibility.
+
+MATHJAX_FORMAT = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the
+# HTML output directory using the MATHJAX_RELPATH option. The destination
+# directory should contain the MathJax.js script. For instance, if the mathjax
+# directory is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to
+# the MathJax Content Delivery Network so you can quickly see the result without
+# installing MathJax.
+# However, it is strongly recommended to install a local
+# copy of MathJax from http://www.mathjax.org before deployment.
+
+MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or MathJax extension
+# names that should be enabled during MathJax rendering.
+
+MATHJAX_EXTENSIONS =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with javascript
+# pieces of code that will be used on startup of the MathJax code.
+
+MATHJAX_CODEFILE =
+
+# When the SEARCHENGINE tag is enabled doxygen will generate a search box
+# for the HTML output. The underlying search engine uses javascript
+# and DHTML and should work on any modern browser. Note that when using
+# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets
+# (GENERATE_DOCSET) there is already a search function so this one should
+# typically be disabled. For large projects the javascript based search engine
+# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution.
+
+SEARCHENGINE = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using Javascript.
+# There are two flavours of web server based search depending on the
+# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
+# searching and an index file used by the script. When EXTERNAL_SEARCH is
+# enabled the indexing and searching needs to be provided by external tools.
+# See the manual for details.
+
+SERVER_BASED_SEARCH = NO
+
+# When EXTERNAL_SEARCH is enabled doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain
+# the search results. Doxygen ships with an example indexer (doxyindexer) and
+# search engine (doxysearch.cgi) which are based on the open source search
+# engine library Xapian. See the manual for configuration details.
+
+EXTERNAL_SEARCH = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will returned the search results when EXTERNAL_SEARCH is enabled.
+# Doxygen ships with an example search engine (doxysearch) which is based on
+# the open source search engine library Xapian. See the manual for configuration
+# details.
+
+SEARCHENGINE_URL =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+
+SEARCHDATA_FILE = searchdata.xml
+
+# When SERVER_BASED_SEARCH AND EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+
+EXTERNAL_SEARCH_ID =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id
+# of to a relative location where the documentation can be found.
+# The format is: EXTRA_SEARCH_MAPPINGS = id1=loc1 id2=loc2 ...
+
+EXTRA_SEARCH_MAPPINGS =
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
+# generate Latex output.
+
+GENERATE_LATEX = YES
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `latex' will be used as the default path.
+
+LATEX_OUTPUT = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked. If left blank `latex' will be used as the default command name.
+# Note that when enabling USE_PDFLATEX this option is only used for
+# generating bitmaps for formulas in the HTML output, but not in the
+# Makefile that is written to the output directory.
+
+LATEX_CMD_NAME = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
+# generate index for LaTeX. If left blank `makeindex' will be used as the
+# default command name.
+
+MAKEINDEX_CMD_NAME = makeindex
+
+# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
+# LaTeX documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_LATEX = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used
+# by the printer. Possible values are: a4, letter, legal and
+# executive. If left blank a4 will be used.
+
+PAPER_TYPE = a4
+
+# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
+# packages that should be included in the LaTeX output.
+
+EXTRA_PACKAGES =
+
+# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
+# the generated latex document. The header should contain everything until
+# the first chapter. If it is left blank doxygen will generate a
+# standard header. Notice: only use this tag if you know what you are doing!
+
+LATEX_HEADER =
+
+# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for
+# the generated latex document. The footer should contain everything after
+# the last chapter. If it is left blank doxygen will generate a
+# standard footer. Notice: only use this tag if you know what you are doing!
+
+LATEX_FOOTER =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images
+# or other source files which should be copied to the LaTeX output directory.
+# Note that the files will be copied as-is; there are no commands or markers
+# available.
+
+LATEX_EXTRA_FILES =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
+# is prepared for conversion to pdf (using ps2pdf). The pdf file will
+# contain links (just like the HTML output) instead of page references
+# This makes the output suitable for online browsing using a pdf viewer.
+
+PDF_HYPERLINKS = YES
+
+# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
+# plain latex in the generated Makefile. Set this option to YES to get a
+# higher quality PDF documentation.
+
+USE_PDFLATEX = YES
+
+# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
+# command to the generated LaTeX files. This will instruct LaTeX to keep
+# running if errors occur, instead of asking the user for help.
+# This option is also used when generating formulas in HTML.
+
+LATEX_BATCHMODE = NO
+
+# If LATEX_HIDE_INDICES is set to YES then doxygen will not
+# include the index chapters (such as File Index, Compound Index, etc.)
+# in the output.
+
+LATEX_HIDE_INDICES = NO
+
+# If LATEX_SOURCE_CODE is set to YES then doxygen will include
+# source code with syntax highlighting in the LaTeX output.
+# Note that which sources are shown also depends on other settings
+# such as SOURCE_BROWSER.
+
+LATEX_SOURCE_CODE = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. The default style is "plain". See
+# http://en.wikipedia.org/wiki/BibTeX for more info.
+
+LATEX_BIB_STYLE = plain
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
+# The RTF output is optimized for Word 97 and may not look very pretty with
+# other RTF readers or editors.
+
+GENERATE_RTF = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `rtf' will be used as the default path.
+
+RTF_OUTPUT = rtf
+
+# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
+# RTF documents. This may be useful for small projects and may help to
+# save some trees in general.
+
+COMPACT_RTF = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
+# will contain hyperlink fields. The RTF file will
+# contain links (just like the HTML output) instead of page references.
+# This makes the output suitable for online browsing using WORD or other
+# programs which support those fields.
+# Note: wordpad (write) and others do not support links.
+
+RTF_HYPERLINKS = NO
+
+# Load style sheet definitions from file. Syntax is similar to doxygen's
+# config file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+
+RTF_STYLESHEET_FILE =
+
+# Set optional variables used in the generation of an rtf document.
+# Syntax is similar to doxygen's config file.
+
+RTF_EXTENSIONS_FILE =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
+# generate man pages
+
+GENERATE_MAN = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `man' will be used as the default path.
+
+MAN_OUTPUT = man
+
+# The MAN_EXTENSION tag determines the extension that is added to
+# the generated man pages (default is the subroutine's section .3)
+
+MAN_EXTENSION = .3
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
+# then it will generate one additional man file for each entity
+# documented in the real man page(s). These additional files
+# only source the real man page, but without them the man command
+# would be unable to find the correct page. The default is NO.
+
+MAN_LINKS = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES Doxygen will
+# generate an XML file that captures the structure of
+# the code including all documentation.
+
+GENERATE_XML = NO
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be
+# put in front of it. If left blank `xml' will be used as the default path.
+
+XML_OUTPUT = xml
+
+# The XML_SCHEMA tag can be used to specify an XML schema,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_SCHEMA =
+
+# The XML_DTD tag can be used to specify an XML DTD,
+# which can be used by a validating XML parser to check the
+# syntax of the XML files.
+
+XML_DTD =
+
+# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
+# dump the program listings (including syntax highlighting
+# and cross-referencing information) to the XML output. Note that
+# enabling this will significantly increase the size of the XML output.
+
+XML_PROGRAMLISTING = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES Doxygen will generate DOCBOOK files
+# that can be used to generate PDF.
+
+GENERATE_DOCBOOK = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the DOCBOOK pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it. If left blank docbook will be used as the default path.
+
+DOCBOOK_OUTPUT = docbook
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
+# generate an AutoGen Definitions (see autogen.sf.net) file
+# that captures the structure of the code including all
+# documentation. Note that this feature is still experimental
+# and incomplete at the moment.
+
+GENERATE_AUTOGEN_DEF = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES Doxygen will
+# generate a Perl module file that captures the structure of
+# the code including all documentation. Note that this
+# feature is still experimental and incomplete at the
+# moment.
+
+GENERATE_PERLMOD = NO
+
+# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
+# the necessary Makefile rules, Perl scripts and LaTeX code to be able
+# to generate PDF and DVI output from the Perl module output.
+
+PERLMOD_LATEX = NO
+
+# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
+# nicely formatted so it can be parsed by a human reader.
+# This is useful
+# if you want to understand what is going on.
+# On the other hand, if this
+# tag is set to NO the size of the Perl module output will be much smaller
+# and Perl will parse it just the same.
+
+PERLMOD_PRETTY = YES
+
+# The names of the make variables in the generated doxyrules.make file
+# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
+# This is useful so different doxyrules.make files included by the same
+# Makefile don't overwrite each other's variables.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
+# evaluate all C-preprocessor directives found in the sources and include
+# files.
+
+ENABLE_PREPROCESSING = YES
+
+# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
+# names in the source code. If set to NO (the default) only conditional
+# compilation will be performed. Macro expansion can be done in a controlled
+# way by setting EXPAND_ONLY_PREDEF to YES.
+
+MACRO_EXPANSION = NO
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
+# then the macro expansion is limited to the macros specified with the
+# PREDEFINED and EXPAND_AS_DEFINED tags.
+
+EXPAND_ONLY_PREDEF = NO
+
+# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
+# pointed to by INCLUDE_PATH will be searched when a #include is found.
+
+SEARCH_INCLUDES = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by
+# the preprocessor.
+
+INCLUDE_PATH =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will
+# be used.
+
+INCLUDE_FILE_PATTERNS =
+
+# The PREDEFINED tag can be used to specify one or more macro names that
+# are defined before the preprocessor is started (similar to the -D option of
+# gcc). The argument of the tag is a list of macros of the form: name
+# or name=definition (no spaces). If the definition and the = are
+# omitted =1 is assumed. To prevent a macro definition from being
+# undefined via #undef or recursively expanded use the := operator
+# instead of the = operator.
+
+PREDEFINED =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
+# this tag can be used to specify a list of macro names that should be expanded.
+# The macro definition that is found in the sources will be used.
+# Use the PREDEFINED tag if you want to use a different macro definition that
+# overrules the definition found in the source code.
+
+EXPAND_AS_DEFINED =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
+# doxygen's preprocessor will remove all references to function-like macros
+# that are alone on a line, have an all uppercase name, and do not end with a
+# semicolon, because these will confuse the parser if not removed.
+
+SKIP_FUNCTION_MACROS = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES option can be used to specify one or more tagfiles. For each
+# tag file the location of the external documentation should be added. The
+# format of a tag file without this location is as follows:
+#
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+#
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where "loc1" and "loc2" can be relative or absolute paths
+# or URLs. Note that each tag file must have a unique name (where the name does
+# NOT include the path). If a tag file is not located in the directory in which
+# doxygen is run, you must also specify the path to the tagfile here.
+
+TAGFILES =
+
+# When a file name is specified after GENERATE_TAGFILE, doxygen will create
+# a tag file that is based on the input files it reads.
+
+GENERATE_TAGFILE =
+
+# If the ALLEXTERNALS tag is set to YES all external classes will be listed
+# in the class index. If set to NO only the inherited external classes
+# will be listed.
+
+ALLEXTERNALS = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will
+# be listed.
+
+EXTERNAL_GROUPS = YES
+
+# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed
+# in the related pages index. If set to NO, only the current project's
+# pages will be listed.
+
+EXTERNAL_PAGES = YES
+
+# The PERL_PATH should be the absolute path and name of the perl script
+# interpreter (i.e. the result of `which perl').
+
+PERL_PATH = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+
+# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
+# generate an inheritance diagram (in HTML, RTF and LaTeX) for classes with base
+# or super classes. Setting the tag to NO turns the diagrams off. Note that
+# this option also works with HAVE_DOT disabled, but it is recommended to
+# install and use dot, since it yields more powerful graphs.
+
+CLASS_DIAGRAMS = YES
+
+# You can define message sequence charts within doxygen comments using the \msc
+# command. Doxygen will then run the mscgen tool (see
+# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
+# documentation. The MSCGEN_PATH tag allows you to specify the directory where
+# the mscgen tool resides. If left empty the tool is assumed to be found in the
+# default search path.
+
+MSCGEN_PATH =
+
+# If set to YES, the inheritance and collaboration graphs will hide
+# inheritance and usage relations if the target is undocumented
+# or is not a class.
+
+HIDE_UNDOC_RELATIONS = YES
+
+# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz, a graph visualization
+# toolkit from AT&T and Lucent Bell Labs. The other options in this section
+# have no effect if this option is set to NO (the default)
+
+HAVE_DOT = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is
+# allowed to run in parallel. When set to 0 (the default) doxygen will
+# base this on the number of processors available in the system. You can set it
+# explicitly to a value larger than 0 to get control over the balance
+# between CPU load and processing speed.
+
+DOT_NUM_THREADS = 0
+
+# By default doxygen will use the Helvetica font for all dot files that
+# doxygen generates. When you want a differently looking font you can specify
+# the font name using DOT_FONTNAME. You need to make sure dot is able to find
+# the font, which can be done by putting it in a standard location or by setting
+# the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font.
+
+DOT_FONTNAME = Helvetica
+
+# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs.
+# The default size is 10pt.
+
+DOT_FONTSIZE = 10
+
+# By default doxygen will tell dot to use the Helvetica font.
+# If you specify a different font using DOT_FONTNAME you can use DOT_FONTPATH to
+# set the path where dot can find it.
+
+DOT_FONTPATH =
+
+# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect inheritance relations. Setting this tag to YES will force the
+# CLASS_DIAGRAMS tag to NO.
+
+CLASS_GRAPH = YES
+
+# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for each documented class showing the direct and
+# indirect implementation dependencies (inheritance, containment, and
+# class references variables) of the class with other documented classes.
+
+COLLABORATION_GRAPH = YES
+
+# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
+# will generate a graph for groups, showing the direct groups dependencies
+
+GROUP_GRAPHS = YES
+
+# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+
+UML_LOOK = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside
+# the class node. If there are many fields or methods and many nodes the
+# graph may become too big to be useful. The UML_LIMIT_NUM_FIELDS
+# threshold limits the number of items for each type to make the size more
+# manageable. Set this to 0 for no limit. Note that the threshold may be
+# exceeded by 50% before the limit is enforced.
+
+UML_LIMIT_NUM_FIELDS = 10
+
+# If set to YES, the inheritance and collaboration graphs will show the
+# relations between templates and their instances.
+
+TEMPLATE_RELATIONS = NO
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
+# tags are set to YES then doxygen will generate a graph for each documented
+# file showing the direct and indirect include dependencies of the file with
+# other documented files.
+
+INCLUDE_GRAPH = YES
+
+# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
+# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
+# documented header file showing the documented files that directly or
+# indirectly include this file.
+
+INCLUDED_BY_GRAPH = YES
+
+# If the CALL_GRAPH and HAVE_DOT options are set to YES then
+# doxygen will generate a call dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable call graphs
+# for selected functions only using the \callgraph command.
+
+CALL_GRAPH = NO
+
+# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
+# doxygen will generate a caller dependency graph for every global function
+# or class method. Note that enabling this option will significantly increase
+# the time of a run. So in most cases it will be better to enable caller
+# graphs for selected functions only using the \callergraph command.
+
+CALLER_GRAPH = NO
+
+# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
+# will generate a graphical hierarchy of all classes instead of a textual one.
+
+GRAPHICAL_HIERARCHY = YES
+
+# If the DIRECTORY_GRAPH and HAVE_DOT tags are set to YES
+# then doxygen will show the dependencies a directory has on other directories
+# in a graphical way. The dependency relations are determined by the #include
+# relations between the files in the directories.
+
+DIRECTORY_GRAPH = YES
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. Possible values are svg, png, jpg, or gif.
+# If left blank png will be used. If you choose svg you need to set
+# HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible in IE 9+ (other browsers do not have this requirement).
+
+DOT_IMAGE_FORMAT = png
+
+# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to
+# enable generation of interactive SVG images that allow zooming and panning.
+# Note that this requires a modern browser other than Internet Explorer.
+# Tested and working are Firefox, Chrome, Safari, and Opera. For IE 9+ you
+# need to set HTML_FILE_EXTENSION to xhtml in order to make the SVG files
+# visible. Older versions of IE do not have SVG support.
+
+INTERACTIVE_SVG = NO
+
+# The tag DOT_PATH can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+
+DOT_PATH =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the
+# \dotfile command).
+
+DOTFILE_DIRS =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the
+# \mscfile command).
+
+MSCFILE_DIRS =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
+# nodes that will be shown in the graph. If the number of nodes in a graph
+# becomes larger than this value, doxygen will truncate the graph, which is
+# visualized by representing a node as a red box. Note that doxygen if the
+# number of direct children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
+# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+
+DOT_GRAPH_MAX_NODES = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
+# graphs generated by dot. A depth value of 3 means that only nodes reachable
+# from the root by following a path via at most 3 edges will be shown. Nodes
+# that lay further from the root node will be omitted. Note that setting this
+# option to 1 or 2 may greatly reduce the computation time needed for large
+# code bases. Also note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+
+MAX_DOT_GRAPH_DEPTH = 0
+
+# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
+# background. This is disabled by default, because dot on Windows does not
+# seem to support this out of the box. Warning: Depending on the platform used,
+# enabling this option may lead to badly anti-aliased labels on the edges of
+# a graph (i.e. they become hard to read).
+
+DOT_TRANSPARENT = NO
+
+# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10)
+# support this, this feature is disabled by default.
+
+DOT_MULTI_TARGETS = YES
+
+# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
+# generate a legend page explaining the meaning of the various boxes and
+# arrows in the dot generated graphs.
+
+GENERATE_LEGEND = YES
+
+# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
+# remove the intermediate dot files that are used to generate
+# the various graphs.
+
+DOT_CLEANUP = YES
diff --git a/src/clint.py b/src/clint.py
new file mode 100755
index 0000000000..ce31822ada
--- /dev/null
+++ b/src/clint.py
@@ -0,0 +1,3581 @@
+#!/usr/bin/env python
+# vim: set fileencoding=utf-8
+#
+# Copyright (c) 2009 Google Inc. All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above
+# copyright notice, this list of conditions and the following disclaimer
+# in the documentation and/or other materials provided with the
+# distribution.
+# * Neither the name of Google Inc. nor the names of its
+# contributors may be used to endorse or promote products derived from
+# this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+"""Does neovim-lint on c files.
+
+The goal of this script is to identify places in the code that *may*
+be in non-compliance with neovim style. It does not attempt to fix
+up these problems -- the point is to educate. It does also not
+attempt to find all problems, or to ensure that everything it does
+find is legitimately a problem.
+
+In particular, we can get very confused by /* and // inside strings!
+We do a small hack, which is to ignore //'s with "'s after them on the
+same line, but it is far from perfect (in either direction).
+"""
+
+from __future__ import absolute_import
+from __future__ import division
+from __future__ import print_function
+from __future__ import unicode_literals
+
+import codecs
+import copy
+import getopt
+import math # for log
+import os
+import re
+import sre_compile
+import string
+import sys
+import unicodedata
+import json
+import collections # for defaultdict
+
+
+_USAGE = """
+Syntax: clint.py [--verbose=#] [--output=vs7] [--filter=-x,+y,...]
+ [--counting=total|toplevel|detailed] [--root=subdir]
+ [--linelength=digits] [--record-errors=file]
+ [--suppress-errors=file]
+ <file> [file] ...
+
+ The style guidelines this tries to follow are those in
+ http://neovim.io/development-wiki/style-guide/style-guide.xml
+
+ Note: This is Google's cpplint.py modified for use with the Neovim project,
+ which follows the Google C++ coding convention except with the following
+ modifications:
+
+ * Function names are lower_case.
+ * Struct and enum names that are not typedef-ed are struct lower_case and
+ enum lower_case.
+ * The opening brace for functions appear on the next line.
+ * All control structures must always use braces.
+
+ Neovim is a C project. As a result, for .c and .h files, the following rules
+ are suppressed:
+
+ * [whitespace/braces] { should almost always be at the end of the previous
+ line
+ * [build/include] Include the directory when naming .h files
+ * [runtime/int] Use int16/int64/etc, rather than the C type.
+
+ Every problem is given a confidence score from 1-5, with 5 meaning we are
+ certain of the problem, and 1 meaning it could be a legitimate construct.
+ This will miss some errors, and is not a substitute for a code review.
+
+ To suppress false-positive errors of a certain category, add a
+ 'NOLINT(category)' comment to the line. NOLINT or NOLINT(*)
+ suppresses errors of all categories on that line.
+
+ The files passed in will be linted; at least one file must be provided.
+ Default linted extensions are .cc, .cpp, .cu, .cuh and .h. Change the
+ extensions with the --extensions flag.
+
+ Flags:
+
+ output=vs7
+ By default, the output is formatted to ease emacs parsing. Visual Studio
+ compatible output (vs7) may also be used. Other formats are unsupported.
+
+ verbose=#
+ Specify a number 0-5 to restrict errors to certain verbosity levels.
+
+ filter=-x,+y,...
+ Specify a comma-separated list of category-filters to apply: only
+ error messages whose category names pass the filters will be printed.
+ (Category names are printed with the message and look like
+ "[whitespace/indent]".) Filters are evaluated left to right.
+ "-FOO" and "FOO" means "do not print categories that start with FOO".
+ "+FOO" means "do print categories that start with FOO".
+
+ Examples: --filter=-whitespace,+whitespace/braces
+ --filter=whitespace,runtime/printf,+runtime/printf_format
+ --filter=-,+build/include_what_you_use
+
+ To see a list of all the categories used in cpplint, pass no arg:
+ --filter=
+
+ counting=total|toplevel|detailed
+ The total number of errors found is always printed. If
+ 'toplevel' is provided, then the count of errors in each of
+ the top-level categories like 'build' and 'whitespace' will
+ also be printed. If 'detailed' is provided, then a count
+ is provided for each category.
+
+ root=subdir
+ The root directory used for deriving header guard CPP variable.
+ By default, the header guard CPP variable is calculated as the relative
+ path to the directory that contains .git, .hg, or .svn. When this flag
+ is specified, the relative path is calculated from the specified
+ directory. If the specified directory does not exist, this flag is
+ ignored.
+
+ Examples:
+ Assuing that src/.git exists, the header guard CPP variables for
+ src/chrome/browser/ui/browser.h are:
+
+ No flag => CHROME_BROWSER_UI_BROWSER_H_
+ --root=chrome => BROWSER_UI_BROWSER_H_
+ --root=chrome/browser => UI_BROWSER_H_
+
+ linelength=digits
+ This is the allowed line length for the project. The default value is
+ 80 characters.
+
+ Examples:
+ --linelength=120
+
+ extensions=extension,extension,...
+ The allowed file extensions that cpplint will check
+
+ Examples:
+ --extensions=hpp,cpp
+
+ record-errors=file
+ Record errors to the given location. This file may later be used for error
+ suppression using suppress-errors flag.
+
+ suppress-errors=file
+ Errors listed in the given file will not be reported.
+"""
+
+# We categorize each error message we print. Here are the categories.
+# We want an explicit list so we can list them all in cpplint --filter=.
+# If you add a new error message with a new category, add it to the list
+# here! cpplint_unittest.py should tell you if you forget to do this.
+_ERROR_CATEGORIES = [
+ 'build/deprecated',
+ 'build/endif_comment',
+ 'build/header_guard',
+ 'build/include',
+ 'build/include_alpha',
+ 'build/include_order',
+ 'build/printf_format',
+ 'build/storage_class',
+ 'readability/alt_tokens',
+ 'readability/bool',
+ 'readability/braces',
+ 'readability/fn_size',
+ 'readability/multiline_comment',
+ 'readability/multiline_string',
+ 'readability/nolint',
+ 'readability/nul',
+ 'readability/todo',
+ 'readability/utf8',
+ 'readability/increment',
+ 'runtime/arrays',
+ 'runtime/int',
+ 'runtime/invalid_increment',
+ 'runtime/memset',
+ 'runtime/printf',
+ 'runtime/printf_format',
+ 'runtime/threadsafe_fn',
+ 'syntax/parenthesis',
+ 'whitespace/alignment',
+ 'whitespace/blank_line',
+ 'whitespace/braces',
+ 'whitespace/comma',
+ 'whitespace/comments',
+ 'whitespace/empty_conditional_body',
+ 'whitespace/empty_loop_body',
+ 'whitespace/end_of_line',
+ 'whitespace/ending_newline',
+ 'whitespace/indent',
+ 'whitespace/line_length',
+ 'whitespace/newline',
+ 'whitespace/operators',
+ 'whitespace/parens',
+ 'whitespace/semicolon',
+ 'whitespace/tab',
+ 'whitespace/todo',
+ 'whitespace/line_continuation',
+ 'whitespace/cast',
+]
+
+# The default state of the category filter. This is overrided by the --filter=
+# flag. By default all errors are on, so only add here categories that should be
+# off by default (i.e., categories that must be enabled by the --filter= flags).
+# All entries here should start with a '-' or '+', as in the --filter= flag.
+_DEFAULT_FILTERS = ['-build/include_alpha']
+
+# We used to check for high-bit characters, but after much discussion we
+# decided those were OK, as long as they were in UTF-8 and didn't represent
+# hard-coded international strings, which belong in a separate i18n file.
+
+# Alternative tokens and their replacements. For full list, see section 2.5
+# Alternative tokens [lex.digraph] in the C++ standard.
+#
+# Digraphs (such as '%:') are not included here since it's a mess to
+# match those on a word boundary.
+_ALT_TOKEN_REPLACEMENT = {
+ 'and': '&&',
+ 'bitor': '|',
+ 'or': '||',
+ 'xor': '^',
+ 'compl': '~',
+ 'bitand': '&',
+ 'and_eq': '&=',
+ 'or_eq': '|=',
+ 'xor_eq': '^=',
+ 'not': '!',
+ 'not_eq': '!='
+}
+
+# Compile regular expression that matches all the above keywords. The "[ =()]"
+# bit is meant to avoid matching these keywords outside of boolean expressions.
+#
+# False positives include C-style multi-line comments and multi-line strings
+# but those have always been troublesome for cpplint.
+_ALT_TOKEN_REPLACEMENT_PATTERN = re.compile(
+ r'[ =()](' + ('|'.join(_ALT_TOKEN_REPLACEMENT.keys())) + r')(?=[ (]|$)')
+
+
+# These constants define types of headers for use with
+# _IncludeState.CheckNextIncludeOrder().
+_C_SYS_HEADER = 1
+_OTHER_HEADER = 5
+
+# These constants define the current inline assembly state
+_NO_ASM = 0 # Outside of inline assembly block
+_INSIDE_ASM = 1 # Inside inline assembly block
+_END_ASM = 2 # Last line of inline assembly block
+_BLOCK_ASM = 3 # The whole block is an inline assembly block
+
+# Match start of assembly blocks
+_MATCH_ASM = re.compile(r'^\s*(?:asm|_asm|__asm|__asm__)'
+ r'(?:\s+(volatile|__volatile__))?'
+ r'\s*[{(]')
+
+
+_regexp_compile_cache = {}
+
+# Finds occurrences of NOLINT or NOLINT(...).
+_RE_SUPPRESSION = re.compile(r'\bNOLINT\b(\([^)]*\))?')
+
+# {str, set(int)}: a map from error categories to sets of linenumbers
+# on which those errors are expected and should be suppressed.
+_error_suppressions = {}
+
+# {(str, int)}: a set of error categories and line numbers which are expected to
+# be suppressed
+_error_suppressions_2 = set()
+
+# The allowed line length of files.
+# This is set by --linelength flag.
+_line_length = 80
+
+# The allowed extensions for file names
+# This is set by --extensions flag.
+_valid_extensions = set(['c', 'h'])
+
+
+def ParseNolintSuppressions(filename, raw_line, linenum, error):
+ """Updates the global list of error-suppressions.
+
+ Parses any NOLINT comments on the current line, updating the global
+ error_suppressions store. Reports an error if the NOLINT comment
+ was malformed.
+
+ Args:
+ filename: str, the name of the input file.
+ raw_line: str, the line of input text, with comments.
+ linenum: int, the number of the current line.
+ error: function, an error handler.
+ """
+ # FIXME(adonovan): "NOLINT(" is misparsed as NOLINT(*).
+ matched = _RE_SUPPRESSION.search(raw_line)
+ if matched:
+ category = matched.group(1)
+ if category in (None, '(*)'): # => "suppress all"
+ _error_suppressions.setdefault(None, set()).add(linenum)
+ else:
+ if category.startswith('(') and category.endswith(')'):
+ category = category[1:-1]
+ if category in _ERROR_CATEGORIES:
+ _error_suppressions.setdefault(
+ category, set()).add(linenum)
+ else:
+ error(filename, linenum, 'readability/nolint', 5,
+ 'Unknown NOLINT error category: %s' % category)
+
+
+def ParseKnownErrorSuppressions(filename, raw_lines, linenum):
+ """Updates the global list of error-suppressions from suppress-file.
+
+ Args:
+ filename: str, the name of the input file.
+ raw_lines: list, all file lines
+ linenum: int, the number of the current line.
+ """
+ key = tuple(raw_lines[linenum - 1 if linenum else 0:linenum + 2])
+ if key in _cpplint_state.suppressed_errors[filename]:
+ for category in _cpplint_state.suppressed_errors[filename][key]:
+ _error_suppressions_2.add((category, linenum))
+
+
+def ResetNolintSuppressions():
+ "Resets the set of NOLINT suppressions to empty."
+ _error_suppressions.clear()
+
+
+def ResetKnownErrorSuppressions():
+ "Resets the set of suppress-errors=file suppressions to empty."
+ _error_suppressions_2.clear()
+
+
+def IsErrorSuppressedByNolint(category, linenum):
+ """Returns true if the specified error category is suppressed on this line.
+
+ Consults the global error_suppressions map populated by
+ ParseNolintSuppressions/ResetNolintSuppressions.
+
+ Args:
+ category: str, the category of the error.
+ linenum: int, the current line number.
+ Returns:
+ bool, True iff the error should be suppressed due to a NOLINT comment.
+ """
+ return (linenum in _error_suppressions.get(category, set()) or
+ linenum in _error_suppressions.get(None, set()))
+
+
+def IsErrorInSuppressedErrorsList(category, linenum):
+ """Returns true if the specified error is suppressed by suppress-errors=file
+
+ Args:
+ category: str, the category of the error.
+ linenum: int, the current line number.
+ Returns:
+ bool, True iff the error should be suppressed due to presense in
+ suppressions file.
+ """
+ return (category, linenum) in _error_suppressions_2
+
+
+def Match(pattern, s):
+ """Matches the string with the pattern, caching the compiled regexp."""
+ # The regexp compilation caching is inlined in both Match and Search for
+ # performance reasons; factoring it out into a separate function turns out
+ # to be noticeably expensive.
+ if pattern not in _regexp_compile_cache:
+ _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
+ return _regexp_compile_cache[pattern].match(s)
+
+
+def Search(pattern, s):
+ """Searches the string for the pattern, caching the compiled regexp."""
+ if pattern not in _regexp_compile_cache:
+ _regexp_compile_cache[pattern] = sre_compile.compile(pattern)
+ return _regexp_compile_cache[pattern].search(s)
+
+
+class _IncludeState(dict):
+
+ """Tracks line numbers for includes, and the order in which includes appear.
+
+ As a dict, an _IncludeState object serves as a mapping between include
+ filename and line number on which that file was included.
+
+ Call CheckNextIncludeOrder() once for each header in the file, passing
+ in the type constants defined above.
+
+ """
+ # self._section will move monotonically through this set. If it ever
+ # needs to move backwards, CheckNextIncludeOrder will raise an error.
+ _INITIAL_SECTION = 0
+ _C_SECTION = 2
+ _OTHER_H_SECTION = 4
+
+ _TYPE_NAMES = {
+ _C_SYS_HEADER: 'C system header',
+ _OTHER_HEADER: 'other header',
+ }
+ _SECTION_NAMES = {
+ _INITIAL_SECTION: "... nothing. (This can't be an error.)",
+ _C_SECTION: 'C system header',
+ _OTHER_H_SECTION: 'other header',
+ }
+
+ def __init__(self):
+ dict.__init__(self)
+ self.ResetSection()
+
+ def ResetSection(self):
+ # The name of the current section.
+ self._section = self._INITIAL_SECTION
+ # The path of last found header.
+ self._last_header = ''
+
+ def SetLastHeader(self, header_path):
+ self._last_header = header_path
+
+ def CanonicalizeAlphabeticalOrder(self, header_path):
+ """Returns a path canonicalized for alphabetical comparison.
+
+ - replaces "-" with "_" so they both cmp the same.
+ - lowercase everything, just in case.
+
+ Args:
+ header_path: Path to be canonicalized.
+
+ Returns:
+ Canonicalized path.
+ """
+ return header_path.replace('-', '_').lower()
+
+ def CheckNextIncludeOrder(self, header_type):
+ """Returns a non-empty error message if the next header is out of order.
+
+ This function also updates the internal state to be ready to check
+ the next include.
+
+ Args:
+ header_type: One of the _XXX_HEADER constants defined above.
+
+ Returns:
+ The empty string if the header is in the right order, or an
+ error message describing what's wrong.
+
+ """
+ error_message = ('Found %s after %s' %
+ (self._TYPE_NAMES[header_type],
+ self._SECTION_NAMES[self._section]))
+
+ last_section = self._section
+
+ if header_type == _C_SYS_HEADER:
+ if self._section <= self._C_SECTION:
+ self._section = self._C_SECTION
+ else:
+ self._last_header = ''
+ return error_message
+ else:
+ assert header_type == _OTHER_HEADER
+ self._section = self._OTHER_H_SECTION
+
+ if last_section != self._section:
+ self._last_header = ''
+
+ return ''
+
+
+class _CppLintState(object):
+
+ """Maintains module-wide state.."""
+
+ def __init__(self):
+ self.verbose_level = 1 # global setting.
+ self.error_count = 0 # global count of reported errors
+ # filters to apply when emitting error messages
+ self.filters = _DEFAULT_FILTERS[:]
+ self.counting = 'total' # In what way are we counting errors?
+ self.errors_by_category = {} # string to int dict storing error counts
+
+ # output format:
+ # "emacs" - format that emacs can parse (default)
+ # "vs7" - format that Microsoft Visual Studio 7 can parse
+ self.output_format = 'emacs'
+
+ self.record_errors_file = None
+ self.suppressed_errors = collections.defaultdict(
+ lambda: collections.defaultdict(set))
+
+ def SetOutputFormat(self, output_format):
+ """Sets the output format for errors."""
+ self.output_format = output_format
+
+ def SetVerboseLevel(self, level):
+ """Sets the module's verbosity, and returns the previous setting."""
+ last_verbose_level = self.verbose_level
+ self.verbose_level = level
+ return last_verbose_level
+
+ def SetCountingStyle(self, counting_style):
+ """Sets the module's counting options."""
+ self.counting = counting_style
+
+ def SetFilters(self, filters):
+ """Sets the error-message filters.
+
+ These filters are applied when deciding whether to emit a given
+ error message.
+
+ Args:
+ filters: A string of comma-separated filters.
+ E.g. "+whitespace/indent".
+ Each filter should start with + or -; else we die.
+
+ Raises:
+ ValueError: The comma-separated filters did not all start with
+ '+' or '-'.
+ E.g. "-,+whitespace,-whitespace/indent,whitespace/bad"
+ """
+ # Default filters always have less priority than the flag ones.
+ self.filters = _DEFAULT_FILTERS[:]
+ for filt in filters.split(','):
+ clean_filt = filt.strip()
+ if clean_filt:
+ self.filters.append(clean_filt)
+ for filt in self.filters:
+ if not (filt.startswith('+') or filt.startswith('-')):
+ raise ValueError('Every filter in --filters must start with '
+ '+ or - (%s does not)' % filt)
+
+ def ResetErrorCounts(self):
+ """Sets the module's error statistic back to zero."""
+ self.error_count = 0
+ self.errors_by_category = {}
+
+ def IncrementErrorCount(self, category):
+ """Bumps the module's error statistic."""
+ self.error_count += 1
+ if self.counting in ('toplevel', 'detailed'):
+ if self.counting != 'detailed':
+ category = category.split('/')[0]
+ if category not in self.errors_by_category:
+ self.errors_by_category[category] = 0
+ self.errors_by_category[category] += 1
+
+ def PrintErrorCounts(self):
+ """Print a summary of errors by category, and the total."""
+ for category, count in self.errors_by_category.items():
+ sys.stderr.write('Category \'%s\' errors found: %d\n' %
+ (category, count))
+ sys.stderr.write('Total errors found: %d\n' % self.error_count)
+
+ def SuppressErrorsFrom(self, fname):
+ """Open file and read a list of suppressed errors from it"""
+ if fname is None:
+ return
+ try:
+ with open(fname) as fp:
+ for line in fp:
+ fname, lines, category = json.loads(line)
+ lines = tuple(lines)
+ self.suppressed_errors[fname][lines].add(category)
+ except IOError:
+ pass
+
+ def RecordErrorsTo(self, fname):
+ """Open file with suppressed errors for writing"""
+ if fname is None:
+ return
+ self.record_errors_file = open(fname, 'w')
+
+_cpplint_state = _CppLintState()
+
+
+def _OutputFormat():
+ """Gets the module's output format."""
+ return _cpplint_state.output_format
+
+
+def _SetOutputFormat(output_format):
+ """Sets the module's output format."""
+ _cpplint_state.SetOutputFormat(output_format)
+
+
+def _VerboseLevel():
+ """Returns the module's verbosity setting."""
+ return _cpplint_state.verbose_level
+
+
+def _SetVerboseLevel(level):
+ """Sets the module's verbosity, and returns the previous setting."""
+ return _cpplint_state.SetVerboseLevel(level)
+
+
+def _SetCountingStyle(level):
+ """Sets the module's counting options."""
+ _cpplint_state.SetCountingStyle(level)
+
+
+def _SuppressErrorsFrom(fname):
+ """Sets the file containing suppressed errors."""
+ _cpplint_state.SuppressErrorsFrom(fname)
+
+
+def _RecordErrorsTo(fname):
+ """Sets the file containing suppressed errors to write to."""
+ _cpplint_state.RecordErrorsTo(fname)
+
+
+def _Filters():
+ """Returns the module's list of output filters, as a list."""
+ return _cpplint_state.filters
+
+
+def _SetFilters(filters):
+ """Sets the module's error-message filters.
+
+ These filters are applied when deciding whether to emit a given
+ error message.
+
+ Args:
+ filters: A string of comma-separated filters (eg "whitespace/indent").
+ Each filter should start with + or -; else we die.
+ """
+ _cpplint_state.SetFilters(filters)
+
+
+class _FunctionState(object):
+
+ """Tracks current function name and the number of lines in its body."""
+
+ _NORMAL_TRIGGER = 250 # for --v=0, 500 for --v=1, etc.
+ _TEST_TRIGGER = 400 # about 50% more than _NORMAL_TRIGGER.
+
+ def __init__(self):
+ self.in_a_function = False
+ self.lines_in_function = 0
+ self.current_function = ''
+
+ def Begin(self, function_name):
+ """Start analyzing function body.
+
+ Args:
+ function_name: The name of the function being tracked.
+ """
+ self.in_a_function = True
+ self.lines_in_function = 0
+ self.current_function = function_name
+
+ def Count(self):
+ """Count line in current function body."""
+ if self.in_a_function:
+ self.lines_in_function += 1
+
+ def Check(self, error, filename, linenum):
+ """Report if too many lines in function body.
+
+ Args:
+ error: The function to call with any errors found.
+ filename: The name of the current file.
+ linenum: The number of the line to check.
+ """
+ if Match(r'T(EST|est)', self.current_function):
+ base_trigger = self._TEST_TRIGGER
+ else:
+ base_trigger = self._NORMAL_TRIGGER
+ trigger = base_trigger * 2**_VerboseLevel()
+
+ if self.lines_in_function > trigger:
+ error_level = int(
+ math.log(self.lines_in_function / base_trigger, 2))
+ # 50 => 0, 100 => 1, 200 => 2, 400 => 3, 800 => 4, 1600 => 5, ...
+ if error_level > 5:
+ error_level = 5
+ error(filename, linenum, 'readability/fn_size', error_level,
+ 'Small and focused functions are preferred:'
+ ' %s has %d non-comment lines'
+ ' (error triggered by exceeding %d lines).' % (
+ self.current_function, self.lines_in_function, trigger))
+
+ def End(self):
+ """Stop analyzing function body."""
+ self.in_a_function = False
+
+
+class FileInfo:
+
+ """Provides utility functions for filenames.
+
+ FileInfo provides easy access to the components of a file's path
+ relative to the project root.
+ """
+
+ def __init__(self, filename):
+ self._filename = filename
+
+ def FullName(self):
+ """Make Windows paths like Unix."""
+ return os.path.abspath(self._filename).replace('\\', '/')
+
+ def RelativePath(self):
+ """FullName with <prefix>/src/nvim/ chopped off."""
+ fullname = self.FullName()
+
+ if os.path.exists(fullname):
+ project_dir = os.path.dirname(fullname)
+
+ root_dir = os.path.dirname(fullname)
+ while (root_dir != os.path.dirname(root_dir) and
+ not os.path.exists(os.path.join(root_dir, ".git"))):
+ root_dir = os.path.dirname(root_dir)
+
+ if os.path.exists(os.path.join(root_dir, ".git")):
+ root_dir = os.path.join(root_dir, "src", "nvim")
+ prefix = os.path.commonprefix([root_dir, project_dir])
+ return fullname[len(prefix) + 1:]
+
+ # Don't know what to do; header guard warnings may be wrong...
+ return fullname
+
+ def Split(self):
+ """Splits the file into the directory, basename, and extension.
+
+ For 'chrome/browser/browser.cc', Split() would
+ return ('chrome/browser', 'browser', '.cc')
+
+ Returns:
+ A tuple of (directory, basename, extension).
+ """
+
+ googlename = self.RelativePath()
+ project, rest = os.path.split(googlename)
+ return (project,) + os.path.splitext(rest)
+
+ def BaseName(self):
+ """File base name - text after the final slash, before final period."""
+ return self.Split()[1]
+
+ def Extension(self):
+ """File extension - text following the final period."""
+ return self.Split()[2]
+
+
+def _ShouldPrintError(category, confidence, linenum):
+ """If confidence >= verbose, category passes filter and isn't suppressed."""
+
+ # There are three ways we might decide not to print an error message:
+ # a "NOLINT(category)" comment appears in the source,
+ # the verbosity level isn't high enough, or the filters filter it out.
+ if IsErrorSuppressedByNolint(category, linenum):
+ return False
+ if IsErrorInSuppressedErrorsList(category, linenum):
+ return False
+ if confidence < _cpplint_state.verbose_level:
+ return False
+
+ is_filtered = False
+ for one_filter in _Filters():
+ if one_filter.startswith('-'):
+ if category.startswith(one_filter[1:]):
+ is_filtered = True
+ elif one_filter.startswith('+'):
+ if category.startswith(one_filter[1:]):
+ is_filtered = False
+ else:
+ assert False # should have been checked for in SetFilter.
+ if is_filtered:
+ return False
+
+ return True
+
+
+def Error(filename, linenum, category, confidence, message):
+ """Logs the fact we've found a lint error.
+
+ We log where the error was found, and also our confidence in the error,
+ that is, how certain we are this is a legitimate style regression, and
+ not a misidentification or a use that's sometimes justified.
+
+ False positives can be suppressed by the use of
+ "cpplint(category)" comments on the offending line. These are
+ parsed into _error_suppressions.
+
+ Args:
+ filename: The name of the file containing the error.
+ linenum: The number of the line containing the error.
+ category: A string used to describe the "category" this bug
+ falls under: "whitespace", say, or "runtime". Categories
+ may have a hierarchy separated by slashes: "whitespace/indent".
+ confidence: A number from 1-5 representing a confidence score for
+ the error, with 5 meaning that we are certain of the problem,
+ and 1 meaning that it could be a legitimate construct.
+ message: The error message.
+ """
+ if _ShouldPrintError(category, confidence, linenum):
+ _cpplint_state.IncrementErrorCount(category)
+ if _cpplint_state.output_format == 'vs7':
+ sys.stderr.write('%s(%s): %s [%s] [%d]\n' % (
+ filename, linenum, message, category, confidence))
+ elif _cpplint_state.output_format == 'eclipse':
+ sys.stderr.write('%s:%s: warning: %s [%s] [%d]\n' % (
+ filename, linenum, message, category, confidence))
+ else:
+ sys.stderr.write('%s:%s: %s [%s] [%d]\n' % (
+ filename, linenum, message, category, confidence))
+
+
+# Matches standard C++ escape sequences per 2.13.2.3 of the C++ standard.
+_RE_PATTERN_CLEANSE_LINE_ESCAPES = re.compile(
+ r'\\([abfnrtv?"\\\']|\d+|x[0-9a-fA-F]+)')
+# Matches strings. Escape codes should already be removed by ESCAPES.
+_RE_PATTERN_CLEANSE_LINE_DOUBLE_QUOTES = re.compile(r'"([^"]*)"')
+# Matches characters. Escape codes should already be removed by ESCAPES.
+_RE_PATTERN_CLEANSE_LINE_SINGLE_QUOTES = re.compile(r"'(.)'")
+# Matches multi-line C++ comments.
+# This RE is a little bit more complicated than one might expect, because we
+# have to take care of space removals tools so we can handle comments inside
+# statements better.
+# The current rule is: We only clear spaces from both sides when we're at the
+# end of the line. Otherwise, we try to remove spaces from the right side,
+# if this doesn't work we try on left side but only if there's a non-character
+# on the right.
+_RE_PATTERN_CLEANSE_LINE_C_COMMENTS = re.compile(
+ r"""(\s*/\*.*\*/\s*$|
+ /\*.*\*/\s+|
+ \s+/\*.*\*/(?=\W)|
+ /\*.*\*/)""", re.VERBOSE)
+
+
+def IsCppString(line):
+ """Does line terminate so, that the next symbol is in string constant.
+
+ This function does not consider single-line nor multi-line comments.
+
+ Args:
+ line: is a partial line of code starting from the 0..n.
+
+ Returns:
+ True, if next character appended to 'line' is inside a
+ string constant.
+ """
+
+ line = line.replace(r'\\', 'XX') # after this, \\" does not match to \"
+ return ((line.count('"') - line.count(r'\"') - line.count("'\"'")) & 1) == 1
+
+
+def FindNextMultiLineCommentStart(lines, lineix):
+ """Find the beginning marker for a multiline comment."""
+ while lineix < len(lines):
+ if lines[lineix].strip().startswith('/*'):
+ # Only return this marker if the comment goes beyond this line
+ if lines[lineix].strip().find('*/', 2) < 0:
+ return lineix
+ lineix += 1
+ return len(lines)
+
+
+def FindNextMultiLineCommentEnd(lines, lineix):
+ """We are inside a comment, find the end marker."""
+ while lineix < len(lines):
+ if lines[lineix].strip().endswith('*/'):
+ return lineix
+ lineix += 1
+ return len(lines)
+
+
+def RemoveMultiLineCommentsFromRange(lines, begin, end):
+ """Clears a range of lines for multi-line comments."""
+ # Having // dummy comments makes the lines non-empty, so we will not get
+ # unnecessary blank line warnings later in the code.
+ for i in range(begin, end):
+ lines[i] = '// dummy'
+
+
+def RemoveMultiLineComments(filename, lines, error):
+ """Removes multiline (c-style) comments from lines."""
+ lineix = 0
+ while lineix < len(lines):
+ lineix_begin = FindNextMultiLineCommentStart(lines, lineix)
+ if lineix_begin >= len(lines):
+ return
+ lineix_end = FindNextMultiLineCommentEnd(lines, lineix_begin)
+ if lineix_end >= len(lines):
+ error(filename, lineix_begin + 1, 'readability/multiline_comment',
+ 5, 'Could not find end of multi-line comment')
+ return
+ RemoveMultiLineCommentsFromRange(lines, lineix_begin, lineix_end + 1)
+ lineix = lineix_end + 1
+
+
+def CleanseComments(line):
+ """Removes //-comments and single-line C-style /* */ comments.
+
+ Args:
+ line: A line of C++ source.
+
+ Returns:
+ The line with single-line comments removed.
+ """
+ commentpos = line.find('//')
+ if commentpos != -1 and not IsCppString(line[:commentpos]):
+ line = line[:commentpos].rstrip()
+ # get rid of /* ... */
+ return _RE_PATTERN_CLEANSE_LINE_C_COMMENTS.sub('', line)
+
+
+class CleansedLines(object):
+
+ """Holds 5 copies of all lines with different preprocessing applied to them.
+
+ 1) elided member contains lines without strings and comments,
+ 2) lines member contains lines without comments, and
+ 3) raw_lines member contains all the lines with multiline comments replaced.
+ 4) init_lines member contains all the lines without processing.
+ 5) elided_with_space_strings is like elided, but with string literals
+ looking like `" "`.
+ All these three members are of <type 'list'>, and of the same length.
+ """
+
+ def __init__(self, lines, init_lines):
+ self.elided = []
+ self.lines = []
+ self.raw_lines = lines
+ self.num_lines = len(lines)
+ self.init_lines = init_lines
+ self.lines_without_raw_strings = lines
+ self.elided_with_space_strings = []
+ for linenum in range(len(self.lines_without_raw_strings)):
+ self.lines.append(CleanseComments(
+ self.lines_without_raw_strings[linenum]))
+ elided = self._CollapseStrings(
+ self.lines_without_raw_strings[linenum])
+ self.elided.append(CleanseComments(elided))
+ elided = CleanseComments(self._CollapseStrings(
+ self.lines_without_raw_strings[linenum], True))
+ self.elided_with_space_strings.append(elided)
+
+ def NumLines(self):
+ """Returns the number of lines represented."""
+ return self.num_lines
+
+ @staticmethod
+ def _CollapseStrings(elided, keep_spaces=False):
+ """Collapses strings and chars on a line to simple "" or '' blocks.
+
+ We nix strings first so we're not fooled by text like '"http://"'
+
+ Args:
+ elided: The line being processed.
+ keep_spaces: If true, collapse to
+
+ Returns:
+ The line with collapsed strings.
+ """
+ if not _RE_PATTERN_INCLUDE.match(elided):
+ # Remove escaped characters first to make quote/single quote
+ # collapsing basic. Things that look like escaped characters
+ # shouldn't occur outside of strings and chars.
+ elided = _RE_PATTERN_CLEANSE_LINE_ESCAPES.sub(
+ '' if not keep_spaces else lambda m: ' ' * len(m.group(0)),
+ elided)
+ elided = _RE_PATTERN_CLEANSE_LINE_SINGLE_QUOTES.sub(
+ "''" if not keep_spaces
+ else lambda m: "'" + (' ' * len(m.group(1))) + "'",
+ elided)
+ elided = _RE_PATTERN_CLEANSE_LINE_DOUBLE_QUOTES.sub(
+ '""' if not keep_spaces
+ else lambda m: '"' + (' ' * len(m.group(1))) + '"',
+ elided)
+ return elided
+
+
+BRACES = {
+ '(': ')',
+ '{': '}',
+ '[': ']',
+ # '<': '>', C++-specific pair removed
+}
+
+
+CLOSING_BRACES = dict(((v, k) for k, v in BRACES.items()))
+
+
+def GetExprBracesPosition(clean_lines, linenum, pos):
+ """List positions of all kinds of braces
+
+ If input points to ( or { or [ then function proceeds until finding the
+ position which closes it.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: Current line number.
+ pos: A position on the line.
+
+ Yields:
+ A tuple (linenum, pos, brace, depth) that points to each brace.
+ Additionally each new line (linenum, pos, 's', depth) is yielded, for each
+ line end (linenum, pos, 'e', depth) is yielded and at the very end it
+ yields (linenum, pos, None, None).
+ """
+ depth = 0
+ yielded_line_start = True
+ startpos = pos
+ while linenum < clean_lines.NumLines() - 1:
+ line = clean_lines.elided_with_space_strings[linenum]
+ if not line.startswith('#') or yielded_line_start:
+ # Ignore #ifdefs, but not if it is macros that are checked
+ for i, brace in enumerate(line[startpos:]):
+ pos = i + startpos
+ if brace != ' ' and not yielded_line_start:
+ yield (linenum, pos, 's', depth)
+ yielded_line_start = True
+ if brace in BRACES:
+ depth += 1
+ yield (linenum, pos, brace, depth)
+ elif brace in CLOSING_BRACES:
+ yield (linenum, pos, brace, depth)
+ depth -= 1
+ if depth == 0:
+ yield (linenum, pos, None, None)
+ return
+ yield (linenum, len(line) - 1, 'e', depth)
+ yielded_line_start = False
+ startpos = 0
+ linenum += 1
+
+
+def FindEndOfExpressionInLine(line, startpos, depth, startchar, endchar):
+ """Find the position just after the matching endchar.
+
+ Args:
+ line: a CleansedLines line.
+ startpos: start searching at this position.
+ depth: nesting level at startpos.
+ startchar: expression opening character.
+ endchar: expression closing character.
+
+ Returns:
+ On finding matching endchar: (index just after matching endchar, 0)
+ Otherwise: (-1, new depth at end of this line)
+ """
+ for i in range(startpos, len(line)):
+ if line[i] == startchar:
+ depth += 1
+ elif line[i] == endchar:
+ depth -= 1
+ if depth == 0:
+ return (i + 1, 0)
+ return (-1, depth)
+
+
+def CloseExpression(clean_lines, linenum, pos):
+ """If input points to ( or { or [, finds the position that closes it.
+
+ If lines[linenum][pos] points to a '(' or '{' or '[', finds the
+ linenum/pos that correspond to the closing of the expression.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ pos: A position on the line.
+
+ Returns:
+ A tuple (line, linenum, pos) pointer *past* the closing brace, or
+ (line, len(lines), -1) if we never find a close. Note we ignore
+ strings and comments when matching; and the line we return is the
+ 'cleansed' line at linenum.
+ """
+
+ line = clean_lines.elided[linenum]
+ startchar = line[pos]
+ if startchar not in BRACES:
+ return (line, clean_lines.NumLines(), -1)
+ endchar = BRACES[startchar]
+
+ # Check first line
+ (end_pos, num_open) = FindEndOfExpressionInLine(
+ line, pos, 0, startchar, endchar)
+ if end_pos > -1:
+ return (line, linenum, end_pos)
+
+ # Continue scanning forward
+ while linenum < clean_lines.NumLines() - 1:
+ linenum += 1
+ line = clean_lines.elided[linenum]
+ (end_pos, num_open) = FindEndOfExpressionInLine(
+ line, 0, num_open, startchar, endchar)
+ if end_pos > -1:
+ return (line, linenum, end_pos)
+
+ # Did not find endchar before end of file, give up
+ return (line, clean_lines.NumLines(), -1)
+
+
+def FindStartOfExpressionInLine(line, endpos, depth, startchar, endchar):
+ """Find position at the matching startchar.
+
+ This is almost the reverse of FindEndOfExpressionInLine, but note
+ that the input position and returned position differs by 1.
+
+ Args:
+ line: a CleansedLines line.
+ endpos: start searching at this position.
+ depth: nesting level at endpos.
+ startchar: expression opening character.
+ endchar: expression closing character.
+
+ Returns:
+ On finding matching startchar: (index at matching startchar, 0)
+ Otherwise: (-1, new depth at beginning of this line)
+ """
+ for i in range(endpos, -1, -1):
+ if line[i] == endchar:
+ depth += 1
+ elif line[i] == startchar:
+ depth -= 1
+ if depth == 0:
+ return (i, 0)
+ return (-1, depth)
+
+
+def ReverseCloseExpression(clean_lines, linenum, pos):
+ """If input points to ) or } or ] or >, finds the position that opens it.
+
+ If lines[linenum][pos] points to a ')' or '}' or ']' or '>', finds the
+ linenum/pos that correspond to the opening of the expression.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ pos: A position on the line.
+
+ Returns:
+ A tuple (line, linenum, pos) pointer *at* the opening brace, or
+ (line, 0, -1) if we never find the matching opening brace. Note
+ we ignore strings and comments when matching; and the line we
+ return is the 'cleansed' line at linenum.
+ """
+ line = clean_lines.elided[linenum]
+ endchar = line[pos]
+ if endchar not in ')}]>':
+ return (line, 0, -1)
+ if endchar == ')':
+ startchar = '('
+ if endchar == ']':
+ startchar = '['
+ if endchar == '}':
+ startchar = '{'
+ if endchar == '>':
+ startchar = '<'
+
+ # Check last line
+ (start_pos, num_open) = FindStartOfExpressionInLine(
+ line, pos, 0, startchar, endchar)
+ if start_pos > -1:
+ return (line, linenum, start_pos)
+
+ # Continue scanning backward
+ while linenum > 0:
+ linenum -= 1
+ line = clean_lines.elided[linenum]
+ (start_pos, num_open) = FindStartOfExpressionInLine(
+ line, len(line) - 1, num_open, startchar, endchar)
+ if start_pos > -1:
+ return (line, linenum, start_pos)
+
+ # Did not find startchar before beginning of file, give up
+ return (line, 0, -1)
+
+
+def GetHeaderGuardCPPVariable(filename):
+ """Returns the CPP variable that should be used as a header guard.
+
+ Args:
+ filename: The name of a C++ header file.
+
+ Returns:
+ The CPP variable that should be used as a header guard in the
+ named file.
+
+ """
+
+ # Restores original filename in case that cpplint is invoked from Emacs's
+ # flymake.
+ filename = re.sub(r'_flymake\.h$', '.h', filename)
+ filename = re.sub(r'/\.flymake/([^/]*)$', r'/\1', filename)
+
+ fileinfo = FileInfo(filename)
+ file_path_from_root = fileinfo.RelativePath()
+ return 'NVIM_' + re.sub(r'[-./\s]', '_', file_path_from_root).upper()
+
+
+def CheckForHeaderGuard(filename, lines, error):
+ """Checks that the file contains a header guard.
+
+ Logs an error if no #ifndef header guard is present. For other
+ headers, checks that the full pathname is used.
+
+ Args:
+ filename: The name of the C++ header file.
+ lines: An array of strings, each representing a line of the file.
+ error: The function to call with any errors found.
+ """
+
+ cppvar = GetHeaderGuardCPPVariable(filename)
+
+ ifndef = None
+ ifndef_linenum = 0
+ define = None
+ endif = None
+ endif_linenum = 0
+ for linenum, line in enumerate(lines):
+ linesplit = line.split()
+ if len(linesplit) >= 2:
+ # find the first occurrence of #ifndef and #define, save arg
+ if not ifndef and linesplit[0] == '#ifndef':
+ # set ifndef to the header guard presented on the #ifndef line.
+ ifndef = linesplit[1]
+ ifndef_linenum = linenum
+ if not define and linesplit[0] == '#define':
+ define = linesplit[1]
+ # find the last occurrence of #endif, save entire line
+ if line.startswith('#endif'):
+ endif = line
+ endif_linenum = linenum
+
+ if not ifndef:
+ error(filename, 0, 'build/header_guard', 5,
+ 'No #ifndef header guard found, suggested CPP variable is: %s' %
+ cppvar)
+ return
+
+ if not define:
+ error(filename, 0, 'build/header_guard', 5,
+ 'No #define header guard found, suggested CPP variable is: %s' %
+ cppvar)
+ return
+
+ # The guard should be PATH_FILE_H_, but we also allow PATH_FILE_H__
+ # for backward compatibility.
+ if ifndef != cppvar:
+ error_level = 0
+ if ifndef != cppvar + '_':
+ error_level = 5
+
+ ParseNolintSuppressions(filename, lines[ifndef_linenum], ifndef_linenum,
+ error)
+ error(filename, ifndef_linenum, 'build/header_guard', error_level,
+ '#ifndef header guard has wrong style, please use: %s' % cppvar)
+
+ if define != ifndef:
+ error(filename, 0, 'build/header_guard', 5,
+ '#ifndef and #define don\'t match, suggested CPP variable is: %s'
+ % cppvar)
+ return
+
+ if endif != ('#endif // %s' % cppvar):
+ error_level = 0
+ if endif != ('#endif // %s' % (cppvar + '_')):
+ error_level = 5
+
+ ParseNolintSuppressions(filename, lines[endif_linenum], endif_linenum,
+ error)
+ error(filename, endif_linenum, 'build/header_guard', error_level,
+ '#endif line should be "#endif // %s"' % cppvar)
+
+
+def CheckForBadCharacters(filename, lines, error):
+ """Logs an error for each line containing bad characters.
+
+ Two kinds of bad characters:
+
+ 1. Unicode replacement characters: These indicate that either the file
+ contained invalid UTF-8 (likely) or Unicode replacement characters (which
+ it shouldn't). Note that it's possible for this to throw off line
+ numbering if the invalid UTF-8 occurred adjacent to a newline.
+
+ 2. NUL bytes. These are problematic for some tools.
+
+ Args:
+ filename: The name of the current file.
+ lines: An array of strings, each representing a line of the file.
+ error: The function to call with any errors found.
+ """
+ for linenum, line in enumerate(lines):
+ if u'\ufffd' in line:
+ error(filename, linenum, 'readability/utf8', 5,
+ 'Line contains invalid UTF-8'
+ ' (or Unicode replacement character).')
+ if '\0' in line:
+ error(filename, linenum, 'readability/nul',
+ 5, 'Line contains NUL byte.')
+
+
+def CheckForNewlineAtEOF(filename, lines, error):
+ """Logs an error if there is no newline char at the end of the file.
+
+ Args:
+ filename: The name of the current file.
+ lines: An array of strings, each representing a line of the file.
+ error: The function to call with any errors found.
+ """
+
+ # The array lines() was created by adding two newlines to the
+ # original file (go figure), then splitting on \n.
+ # To verify that the file ends in \n, we just have to make sure the
+ # last-but-two element of lines() exists and is empty.
+ if len(lines) < 3 or lines[-2]:
+ error(filename, len(lines) - 2, 'whitespace/ending_newline', 5,
+ 'Could not find a newline character at the end of the file.')
+
+
+def CheckForMultilineCommentsAndStrings(filename, clean_lines, linenum, error):
+ """Logs an error if we see /* ... */ or "..." that extend past one line.
+
+ /* ... */ comments are legit inside macros, for one line.
+ Otherwise, we prefer // comments, so it's ok to warn about the
+ other. Likewise, it's ok for strings to extend across multiple
+ lines, as long as a line continuation character (backslash)
+ terminates each line. Although not currently prohibited by the C++
+ style guide, it's ugly and unnecessary. We don't do well with either
+ in this lint program, so we warn about both.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ line = clean_lines.elided[linenum]
+
+ # Remove all \\ (escaped backslashes) from the line. They are OK, and the
+ # second (escaped) slash may trigger later \" detection erroneously.
+ line = line.replace('\\\\', '')
+
+ if line.count('/*') > line.count('*/'):
+ error(filename, linenum, 'readability/multiline_comment', 5,
+ 'Complex multi-line /*...*/-style comment found. '
+ 'Lint may give bogus warnings. '
+ 'Consider replacing these with //-style comments, '
+ 'with #if 0...#endif, '
+ 'or with more clearly structured multi-line comments.')
+
+ if (line.count('"') - line.count('\\"')) % 2:
+ error(filename, linenum, 'readability/multiline_string', 5,
+ 'Multi-line string ("...") found. This lint script doesn\'t '
+ 'do well with such strings, and may give bogus warnings. '
+ 'Use C++11 raw strings or concatenation instead.')
+
+
+def CheckForOldStyleComments(filename, line, linenum, error):
+ """Logs an error if we see /*-style comment
+
+ Args:
+ filename: The name of the current file.
+ line: The text of the line to check.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ if line.find('/*') >= 0 and line[-1] != '\\':
+ error(filename, linenum, 'readability/old_style_comment', 5,
+ '/*-style comment found, it should be replaced with //-style. '
+ '/*-style comments are only allowed inside macros. '
+ 'Note that you should not use /*-style comments to document '
+ 'macros itself, use doxygen-style comments for this.')
+
+
+threading_list = (
+ ('asctime(', 'os_asctime_r('),
+ ('ctime(', 'os_ctime_r('),
+ ('getgrgid(', 'os_getgrgid_r('),
+ ('getgrnam(', 'os_getgrnam_r('),
+ ('getlogin(', 'os_getlogin_r('),
+ ('getpwnam(', 'os_getpwnam_r('),
+ ('getpwuid(', 'os_getpwuid_r('),
+ ('gmtime(', 'os_gmtime_r('),
+ ('localtime(', 'os_localtime_r('),
+ ('strtok(', 'os_strtok_r('),
+ ('ttyname(', 'os_ttyname_r('),
+ ('asctime_r(', 'os_asctime_r('),
+ ('ctime_r(', 'os_ctime_r('),
+ ('getgrgid_r(', 'os_getgrgid_r('),
+ ('getgrnam_r(', 'os_getgrnam_r('),
+ ('getlogin_r(', 'os_getlogin_r('),
+ ('getpwnam_r(', 'os_getpwnam_r('),
+ ('getpwuid_r(', 'os_getpwuid_r('),
+ ('gmtime_r(', 'os_gmtime_r('),
+ ('localtime_r(', 'os_localtime_r('),
+ ('strtok_r(', 'os_strtok_r('),
+ ('ttyname_r(', 'os_ttyname_r('),
+)
+
+
+def CheckPosixThreading(filename, clean_lines, linenum, error):
+ """Checks for calls to thread-unsafe functions.
+
+ Much code has been originally written without consideration of
+ multi-threading. Also, engineers are relying on their old experience;
+ they have learned posix before threading extensions were added. These
+ tests guide the engineers to use thread-safe functions (when using
+ posix directly).
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ line = clean_lines.elided[linenum]
+ for single_thread_function, multithread_safe_function in threading_list:
+ ix = line.find(single_thread_function)
+ # Comparisons made explicit for clarity -- pylint:
+ # disable=g-explicit-bool-comparison
+ if ix >= 0 and (ix == 0 or (not line[ix - 1].isalnum() and
+ line[ix - 1] not in ('_', '.', '>'))):
+ error(filename, linenum, 'runtime/threadsafe_fn', 2,
+ 'Use ' + multithread_safe_function +
+ '...) instead of ' + single_thread_function +
+ '...). If it is missing, consider implementing it;' +
+ ' see os_localtime_r for an example.')
+
+
+memory_functions = (
+ ('malloc(', 'xmalloc('),
+ ('calloc(', 'xcalloc('),
+ ('realloc(', 'xrealloc('),
+ ('strdup(', 'xstrdup('),
+ ('free(', 'xfree('),
+)
+memory_ignore_pattern = re.compile(r'src/nvim/memory.c$')
+
+
+def CheckMemoryFunctions(filename, clean_lines, linenum, error):
+ """Checks for calls to invalid functions.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ if memory_ignore_pattern.search(filename):
+ return
+ line = clean_lines.elided[linenum]
+ for function, suggested_function in memory_functions:
+ ix = line.find(function)
+ # Comparisons made explicit for clarity -- pylint:
+ # disable=g-explicit-bool-comparison
+ if ix >= 0 and (ix == 0 or (not line[ix - 1].isalnum() and
+ line[ix - 1] not in ('_', '.', '>'))):
+ error(filename, linenum, 'runtime/memory_fn', 2,
+ 'Use ' + suggested_function +
+ '...) instead of ' + function + '...).')
+
+
+# Matches invalid increment: *count++, which moves pointer instead of
+# incrementing a value.
+_RE_PATTERN_INVALID_INCREMENT = re.compile(
+ r'^\s*\*\w+(\+\+|--);')
+
+
+class _BlockInfo(object):
+
+ """Stores information about a generic block of code."""
+
+ def __init__(self, seen_open_brace):
+ self.seen_open_brace = seen_open_brace
+ self.open_parentheses = 0
+ self.inline_asm = _NO_ASM
+
+
+class _PreprocessorInfo(object):
+
+ """Stores checkpoints of nesting stacks when #if/#else is seen."""
+
+ def __init__(self, stack_before_if):
+ # The entire nesting stack before #if
+ self.stack_before_if = stack_before_if
+
+ # The entire nesting stack up to #else
+ self.stack_before_else = []
+
+ # Whether we have already seen #else or #elif
+ self.seen_else = False
+
+
+class _NestingState(object):
+
+ """Holds states related to parsing braces."""
+
+ def __init__(self):
+ # Stack for tracking all braces. An object is pushed whenever we
+ # see a "{", and popped when we see a "}". Only 1 type of
+ # object is possible:
+ # - _BlockInfo: some type of block.
+ self.stack = []
+
+ # Stack of _PreprocessorInfo objects.
+ self.pp_stack = []
+
+ def SeenOpenBrace(self):
+ """Check if we have seen the opening brace for the innermost block.
+
+ Returns:
+ True if we have seen the opening brace, False if the innermost
+ block is still expecting an opening brace.
+ """
+ return (not self.stack) or self.stack[-1].seen_open_brace
+
+ def UpdatePreprocessor(self, line):
+ """Update preprocessor stack.
+
+ We need to handle preprocessors due to classes like this:
+ #ifdef SWIG
+ struct ResultDetailsPageElementExtensionPoint {
+ #else
+ struct ResultDetailsPageElementExtensionPoint : public Extension {
+ #endif
+
+ We make the following assumptions (good enough for most files):
+ - Preprocessor condition evaluates to true from #if up to first
+ #else/#elif/#endif.
+
+ - Preprocessor condition evaluates to false from #else/#elif up
+ to #endif. We still perform lint checks on these lines, but
+ these do not affect nesting stack.
+
+ Args:
+ line: current line to check.
+ """
+ if Match(r'^\s*#\s*(if|ifdef|ifndef)\b', line):
+ # Beginning of #if block, save the nesting stack here. The saved
+ # stack will allow us to restore the parsing state in the #else
+ # case.
+ self.pp_stack.append(_PreprocessorInfo(copy.deepcopy(self.stack)))
+ elif Match(r'^\s*#\s*(else|elif)\b', line):
+ # Beginning of #else block
+ if self.pp_stack:
+ if not self.pp_stack[-1].seen_else:
+ # This is the first #else or #elif block. Remember the
+ # whole nesting stack up to this point. This is what we
+ # keep after the #endif.
+ self.pp_stack[-1].seen_else = True
+ self.pp_stack[-1].stack_before_else = copy.deepcopy(
+ self.stack)
+
+ # Restore the stack to how it was before the #if
+ self.stack = copy.deepcopy(self.pp_stack[-1].stack_before_if)
+ else:
+ # TODO(unknown): unexpected #else, issue warning?
+ pass
+ elif Match(r'^\s*#\s*endif\b', line):
+ # End of #if or #else blocks.
+ if self.pp_stack:
+ # If we saw an #else, we will need to restore the nesting
+ # stack to its former state before the #else, otherwise we
+ # will just continue from where we left off.
+ if self.pp_stack[-1].seen_else:
+ # Here we can just use a shallow copy since we are the last
+ # reference to it.
+ self.stack = self.pp_stack[-1].stack_before_else
+ # Drop the corresponding #if
+ self.pp_stack.pop()
+ else:
+ # TODO(unknown): unexpected #endif, issue warning?
+ pass
+
+ def Update(self, filename, clean_lines, linenum, error):
+ """Update nesting state with current line.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ line = clean_lines.elided[linenum]
+
+ # Update pp_stack first
+ self.UpdatePreprocessor(line)
+
+ # Count parentheses. This is to avoid adding struct arguments to
+ # the nesting stack.
+ if self.stack:
+ inner_block = self.stack[-1]
+ depth_change = line.count('(') - line.count(')')
+ inner_block.open_parentheses += depth_change
+
+ # Also check if we are starting or ending an inline assembly block.
+ if inner_block.inline_asm in (_NO_ASM, _END_ASM):
+ if (depth_change != 0 and
+ inner_block.open_parentheses == 1 and
+ _MATCH_ASM.match(line)):
+ # Enter assembly block
+ inner_block.inline_asm = _INSIDE_ASM
+ else:
+ # Not entering assembly block. If previous line was
+ # _END_ASM, we will now shift to _NO_ASM state.
+ inner_block.inline_asm = _NO_ASM
+ elif (inner_block.inline_asm == _INSIDE_ASM and
+ inner_block.open_parentheses == 0):
+ # Exit assembly block
+ inner_block.inline_asm = _END_ASM
+
+ # Consume braces or semicolons from what's left of the line
+ while True:
+ # Match first brace, semicolon, or closed parenthesis.
+ matched = Match(r'^[^{;)}]*([{;)}])(.*)$', line)
+ if not matched:
+ break
+
+ token = matched.group(1)
+ if token == '{':
+ # If namespace or class hasn't seen an opening brace yet, mark
+ # namespace/class head as complete. Push a new block onto the
+ # stack otherwise.
+ if not self.SeenOpenBrace():
+ self.stack[-1].seen_open_brace = True
+ else:
+ self.stack.append(_BlockInfo(True))
+ if _MATCH_ASM.match(line):
+ self.stack[-1].inline_asm = _BLOCK_ASM
+ elif token == ';' or token == ')':
+ # If we haven't seen an opening brace yet, but we already saw
+ # a semicolon, this is probably a forward declaration. Pop
+ # the stack for these.
+ #
+ # Similarly, if we haven't seen an opening brace yet, but we
+ # already saw a closing parenthesis, then these are probably
+ # function arguments with extra "class" or "struct" keywords.
+ # Also pop these stack for these.
+ if not self.SeenOpenBrace():
+ self.stack.pop()
+ else: # token == '}'
+ # Perform end of block checks and pop the stack.
+ if self.stack:
+ self.stack.pop()
+ line = matched.group(2)
+
+
+def CheckForNonStandardConstructs(filename, clean_lines, linenum,
+ nesting_state, error):
+ r"""Logs an error if we see certain non-ANSI constructs ignored by gcc-2.
+
+ Complain about several constructs which gcc-2 accepts, but which are
+ not standard C++. Warning about these in lint is one way to ease the
+ transition to new compilers.
+ - put storage class first (e.g. "static const" instead of "const static").
+ - "%" PRId64 instead of %qd" in printf-type functions.
+ - "%1$d" is non-standard in printf-type functions.
+ - "\%" is an undefined character escape sequence.
+ - text after #endif is not allowed.
+ - invalid inner-style forward declaration.
+ - >? and <? operators, and their >?= and <?= cousins.
+
+ Additionally, check for constructor/destructor style violations and
+ reference members, as it is very convenient to do so while checking for
+ gcc-2 compliance.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ nesting_state: A _NestingState instance which maintains information about
+ the current stack of nested blocks being parsed.
+ error: A callable to which errors are reported, which takes 4 arguments:
+ filename, line number, error level, and message
+ """
+
+ # Remove comments from the line, but leave in strings for now.
+ line = clean_lines.lines[linenum]
+
+ if Search(r'printf\s*\(.*".*%[-+ ]?\d*q', line):
+ error(filename, linenum, 'runtime/printf_format', 3,
+ '"%q" in format strings is deprecated. Use "%" PRId64 instead.')
+
+ if Search(r'printf\s*\(.*".*%\d+\$', line):
+ error(filename, linenum, 'runtime/printf_format', 2,
+ '%N$ formats are unconventional. Try rewriting to avoid them.')
+
+ # Remove escaped backslashes before looking for undefined escapes.
+ line = line.replace('\\\\', '')
+
+ if Search(r'("|\').*\\(%|\[|\(|{)', line):
+ error(filename, linenum, 'build/printf_format', 3,
+ '%, [, (, and { are undefined character escapes. Unescape them.')
+
+ # For the rest, work with both comments and strings removed.
+ line = clean_lines.elided[linenum]
+
+ if Search(r'\b(const|volatile|void|char|short|int|long'
+ r'|float|double|signed|unsigned'
+ r'|u?int8_t|u?int16_t|u?int32_t|u?int64_t'
+ r'|u?int_least8_t|u?int_least16_t|u?int_least32_t'
+ r'|u?int_least64_t'
+ r'|u?int_fast8_t|u?int_fast16_t|u?int_fast32_t'
+ r'|u?int_fast64_t'
+ r'|u?intptr_t|u?intmax_t)'
+ r'\s+(register|static|extern|typedef)\b',
+ line):
+ error(filename, linenum, 'build/storage_class', 5,
+ 'Storage class (static, extern, typedef, etc) should be first.')
+
+ if Match(r'\s*#\s*endif\s*[^/\s]+', line):
+ error(filename, linenum, 'build/endif_comment', 5,
+ 'Uncommented text after #endif is non-standard. Use a comment.')
+
+ if Search(r'(\w+|[+-]?\d+(\.\d*)?)\s*(<|>)\?=?\s*(\w+|[+-]?\d+)(\.\d*)?',
+ line):
+ error(filename, linenum, 'build/deprecated', 3,
+ '>? and <? (max and min) operators are'
+ ' non-standard and deprecated.')
+
+
+def CheckSpacingForFunctionCall(filename, line, linenum, error):
+ """Checks for the correctness of various spacing around function calls.
+
+ Args:
+ filename: The name of the current file.
+ line: The text of the line to check.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+
+ # Since function calls often occur inside if/for/while/switch
+ # expressions - which have their own, more liberal conventions - we
+ # first see if we should be looking inside such an expression for a
+ # function call, to which we can apply more strict standards.
+ fncall = line # if there's no control flow construct, look at whole line
+ for pattern in (r'\bif\s*\((.*)\)\s*{',
+ r'\bfor\s*\((.*)\)\s*{',
+ r'\bwhile\s*\((.*)\)\s*[{;]',
+ r'\bswitch\s*\((.*)\)\s*{'):
+ match = Search(pattern, line)
+ if match:
+ # look inside the parens for function calls
+ fncall = match.group(1)
+ break
+
+ # Except in if/for/while/switch, there should never be space
+ # immediately inside parens (eg "f( 3, 4 )"). We make an exception
+ # for nested parens ( (a+b) + c ). Likewise, there should never be
+ # a space before a ( when it's a function argument. I assume it's a
+ # function argument when the char before the whitespace is legal in
+ # a function name (alnum + _) and we're not starting a macro. Also ignore
+ # pointers and references to arrays and functions coz they're too tricky:
+ # we use a very simple way to recognize these:
+ # " (something)(maybe-something)" or
+ # " (something)(maybe-something," or
+ # " (something)[something]"
+ # Note that we assume the contents of [] to be short enough that
+ # they'll never need to wrap.
+ if ( # Ignore control structures.
+ not Search(r'\b(if|for|while|switch|return|sizeof)\b', fncall) and
+ # Ignore pointers/references to functions.
+ not Search(r' \([^)]+\)\([^)]*(\)|,$)', fncall) and
+ # Ignore pointers/references to arrays.
+ not Search(r' \([^)]+\)\[[^\]]+\]', fncall)):
+ # a ( used for a fn call
+ if Search(r'\w\s*\(\s(?!\s*\\$)', fncall):
+ error(filename, linenum, 'whitespace/parens', 4,
+ 'Extra space after ( in function call')
+ elif Search(r'\(\s+(?!(\s*\\)|\()', fncall):
+ error(filename, linenum, 'whitespace/parens', 2,
+ 'Extra space after (')
+ if (Search(r'\w\s+\(', fncall) and
+ not Search(r'#\s*define|typedef', fncall) and
+ not Search(r'\w\s+\((\w+::)*\*\w+\)\(', fncall)):
+ error(filename, linenum, 'whitespace/parens', 4,
+ 'Extra space before ( in function call')
+ # If the ) is followed only by a newline or a { + newline, assume it's
+ # part of a control statement (if/while/etc), and don't complain
+ if Search(r'[^)]\s+\)\s*[^{\s]', fncall):
+ # If the closing parenthesis is preceded by only whitespaces,
+ # try to give a more descriptive error message.
+ if Search(r'^\s+\)', fncall):
+ error(filename, linenum, 'whitespace/parens', 2,
+ 'Closing ) should be moved to the previous line')
+ else:
+ error(filename, linenum, 'whitespace/parens', 2,
+ 'Extra space before )')
+
+
+def IsBlankLine(line):
+ """Returns true if the given line is blank.
+
+ We consider a line to be blank if the line is empty or consists of
+ only white spaces.
+
+ Args:
+ line: A line of a string.
+
+ Returns:
+ True, if the given line is blank.
+ """
+ return not line or line.isspace()
+
+
+def CheckForFunctionLengths(filename, clean_lines, linenum,
+ function_state, error):
+ """Reports for long function bodies.
+
+ For an overview why this is done, see:
+ http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Write_Short_Functions
+
+ Uses a simplistic algorithm assuming other style guidelines
+ (especially spacing) are followed.
+ Only checks unindented functions, so class members are unchecked.
+ Trivial bodies are unchecked, so constructors with huge initializer lists
+ may be missed.
+ Blank/comment lines are not counted so as to avoid encouraging the removal
+ of vertical space and comments just to get through a lint check.
+ NOLINT *on the last line of a function* disables this check.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ function_state: Current function name and lines in body so far.
+ error: The function to call with any errors found.
+ """
+ lines = clean_lines.lines
+ line = lines[linenum]
+ joined_line = ''
+
+ starting_func = False
+ regexp = r'(\w(\w|::|\*|\&|\s)*)\(' # decls * & space::name( ...
+ match_result = Match(regexp, line)
+ if match_result:
+ # If the name is all caps and underscores, figure it's a macro and
+ # ignore it, unless it's TEST or TEST_F.
+ function_name = match_result.group(1).split()[-1]
+ if function_name == 'TEST' or function_name == 'TEST_F' or (
+ not Match(r'[A-Z_]+$', function_name)):
+ starting_func = True
+
+ if starting_func:
+ body_found = False
+ for start_linenum in range(linenum, clean_lines.NumLines()):
+ start_line = lines[start_linenum]
+ joined_line += ' ' + start_line.lstrip()
+ # Declarations and trivial functions
+ if Search(r'(;|})', start_line):
+ body_found = True
+ break # ... ignore
+ elif Search(r'{', start_line):
+ body_found = True
+ function = Search(r'((\w|:)*)\(', line).group(1)
+ if Match(r'TEST', function): # Handle TEST... macros
+ parameter_regexp = Search(r'(\(.*\))', joined_line)
+ if parameter_regexp: # Ignore bad syntax
+ function += parameter_regexp.group(1)
+ else:
+ function += '()'
+ function_state.Begin(function)
+ break
+ if not body_found:
+ # No body for the function (or evidence of a non-function) was
+ # found.
+ error(filename, linenum, 'readability/fn_size', 5,
+ 'Lint failed to find start of function body.')
+ elif Match(r'^\}\s*$', line): # function end
+ function_state.Check(error, filename, linenum)
+ function_state.End()
+ elif not Match(r'^\s*$', line):
+ function_state.Count() # Count non-blank/non-comment lines.
+
+
+_RE_PATTERN_TODO = re.compile(r'^//(\s*)TODO(\(.+?\))?(:?)(\s|$)?')
+
+
+def CheckComment(comment, filename, linenum, error):
+ """Checks for common mistakes in TODO comments.
+
+ Args:
+ comment: The text of the comment from the line in question.
+ filename: The name of the current file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ match = _RE_PATTERN_TODO.match(comment)
+ if match:
+ # One whitespace is correct; zero whitespace is handled elsewhere.
+ leading_whitespace = match.group(1)
+ if len(leading_whitespace) > 1:
+ error(filename, linenum, 'whitespace/todo', 2,
+ 'Too many spaces before TODO')
+
+ username = match.group(2)
+ if not username:
+ error(filename, linenum, 'readability/todo', 2,
+ 'Missing username in TODO; it should look like '
+ '"// TODO(my_username): Stuff."')
+
+ colon = match.group(3)
+ if not colon:
+ error(filename, linenum, 'readability/todo', 2,
+ 'Missing colon in TODO; it should look like '
+ '"// TODO(my_username): Stuff."')
+
+ middle_whitespace = match.group(4)
+ # Comparisons made explicit for correctness -- pylint:
+ # disable=g-explicit-bool-comparison
+ if middle_whitespace != ' ' and middle_whitespace != '':
+ error(filename, linenum, 'whitespace/todo', 2,
+ 'TODO(my_username): should be followed by a space')
+
+
+def FindNextMatchingAngleBracket(clean_lines, linenum, init_suffix):
+ """Find the corresponding > to close a template.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: Current line number.
+ init_suffix: Remainder of the current line after the initial <.
+
+ Returns:
+ True if a matching bracket exists.
+ """
+ line = init_suffix
+ nesting_stack = ['<']
+ while True:
+ # Find the next operator that can tell us whether < is used as an
+ # opening bracket or as a less-than operator. We only want to
+ # warn on the latter case.
+ #
+ # We could also check all other operators and terminate the search
+ # early, e.g. if we got something like this "a<b+c", the "<" is
+ # most likely a less-than operator, but then we will get false
+ # positives for default arguments and other template expressions.
+ match = Search(r'^[^<>(),;\[\]]*([<>(),;\[\]])(.*)$', line)
+ if match:
+ # Found an operator, update nesting stack
+ operator = match.group(1)
+ line = match.group(2)
+
+ if nesting_stack[-1] == '<':
+ # Expecting closing angle bracket
+ if operator in ('<', '(', '['):
+ nesting_stack.append(operator)
+ elif operator == '>':
+ nesting_stack.pop()
+ if not nesting_stack:
+ # Found matching angle bracket
+ return True
+ elif operator == ',':
+ # Got a comma after a bracket, this is most likely a
+ # template argument. We have not seen a closing angle
+ # bracket yet, but it's probably a few lines later if we
+ # look for it, so just return early here.
+ return True
+ else:
+ # Got some other operator.
+ return False
+
+ else:
+ # Expecting closing parenthesis or closing bracket
+ if operator in ('<', '(', '['):
+ nesting_stack.append(operator)
+ elif operator in (')', ']'):
+ # We don't bother checking for matching () or []. If we got
+ # something like (] or [), it would have been a syntax
+ # error.
+ nesting_stack.pop()
+
+ else:
+ # Scan the next line
+ linenum += 1
+ if linenum >= len(clean_lines.elided):
+ break
+ line = clean_lines.elided[linenum]
+
+ # Exhausted all remaining lines and still no matching angle bracket.
+ # Most likely the input was incomplete, otherwise we should have
+ # seen a semicolon and returned early.
+ return True
+
+
+def FindPreviousMatchingAngleBracket(clean_lines, linenum, init_prefix):
+ """Find the corresponding < that started a template.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: Current line number.
+ init_prefix: Part of the current line before the initial >.
+
+ Returns:
+ True if a matching bracket exists.
+ """
+ line = init_prefix
+ nesting_stack = ['>']
+ while True:
+ # Find the previous operator
+ match = Search(r'^(.*)([<>(),;\[\]])[^<>(),;\[\]]*$', line)
+ if match:
+ # Found an operator, update nesting stack
+ operator = match.group(2)
+ line = match.group(1)
+
+ if nesting_stack[-1] == '>':
+ # Expecting opening angle bracket
+ if operator in ('>', ')', ']'):
+ nesting_stack.append(operator)
+ elif operator == '<':
+ nesting_stack.pop()
+ if not nesting_stack:
+ # Found matching angle bracket
+ return True
+ elif operator == ',':
+ # Got a comma before a bracket, this is most likely a
+ # template argument. The opening angle bracket is probably
+ # there if we look for it, so just return early here.
+ return True
+ else:
+ # Got some other operator.
+ return False
+
+ else:
+ # Expecting opening parenthesis or opening bracket
+ if operator in ('>', ')', ']'):
+ nesting_stack.append(operator)
+ elif operator in ('(', '['):
+ nesting_stack.pop()
+
+ else:
+ # Scan the previous line
+ linenum -= 1
+ if linenum < 0:
+ break
+ line = clean_lines.elided[linenum]
+
+ # Exhausted all earlier lines and still no matching angle bracket.
+ return False
+
+
+def CheckExpressionAlignment(filename, clean_lines, linenum, error, startpos=0):
+ """Checks for the correctness of alignment inside expressions
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ startpos: Position where to start searching for expression start.
+ """
+ level_starts = {}
+ line = clean_lines.elided_with_space_strings[linenum]
+ prev_line_start = Search(r'\S', line).start()
+ depth_line_starts = {}
+ pos = min([
+ idx
+ for idx in (
+ line.find(k, startpos)
+ for k in BRACES
+ if k != '{'
+ )
+ if idx >= 0
+ ] + [len(line) + 1])
+ if pos == len(line) + 1:
+ return
+ ignore_error_levels = set()
+ firstlinenum = linenum
+ for linenum, pos, brace, depth in GetExprBracesPosition(
+ clean_lines, linenum, pos
+ ):
+ line = clean_lines.elided_with_space_strings[linenum]
+ if depth is None:
+ if pos < len(line) - 1:
+ CheckExpressionAlignment(filename, clean_lines, linenum, error,
+ pos + 1)
+ return
+ elif depth <= 0:
+ error(filename, linenum, 'syntax/parenthesis', 4,
+ 'Unbalanced parenthesis')
+ return
+ if brace == 's':
+ assert firstlinenum != linenum
+ if level_starts[depth][1]:
+ if line[pos] == BRACES[depth_line_starts[depth][1]]:
+ if pos != depth_line_starts[depth][0]:
+ if depth not in ignore_error_levels:
+ error(filename, linenum, 'whitespace/indent', 2,
+ 'End of the inner expression should have '
+ 'the same indent as start')
+ else:
+ if (pos != depth_line_starts[depth][0] + 4
+ and not (depth_line_starts[depth][1] == '{'
+ and pos == depth_line_starts[depth][0] + 2)):
+ if depth not in ignore_error_levels:
+ error(filename, linenum, 'whitespace/indent', 2,
+ 'Inner expression indentation should be 4')
+ else:
+ if (pos != level_starts[depth][0] + 1
+ + (level_starts[depth][2] == '{')):
+ if depth not in ignore_error_levels:
+ error(filename, linenum, 'whitespace/alignment', 2,
+ 'Inner expression should be aligned '
+ 'as opening brace + 1 (+ 2 in case of {)')
+ prev_line_start = pos
+ elif brace == 'e':
+ pass
+ else:
+ opening = brace in BRACES
+ if opening:
+ # Only treat {} as part of the expression if it is preceded by
+ # "=" (brace initializer) or "(type)" (construct like (struct
+ # foo) { ... }).
+ if brace == '{' and not (Search(
+ r'(?:= *|\((?:struct )?\w+(\s*\[\w*\])?\)) *$',
+ line[:pos])
+ ):
+ ignore_error_levels.add(depth)
+ line_ended_with_opening = (
+ pos == len(line) - 2 * (line.endswith(' \\')) - 1)
+ level_starts[depth] = (pos, line_ended_with_opening, brace)
+ if line_ended_with_opening:
+ depth_line_starts[depth] = (prev_line_start, brace)
+ else:
+ del level_starts[depth]
+
+
+def CheckSpacing(filename, clean_lines, linenum, nesting_state, error):
+ """Checks for the correctness of various spacing issues in the code.
+
+ Things we check for: spaces around operators, spaces after
+ if/for/while/switch, no spaces around parens in function calls, two
+ spaces between code and comment, don't start a block with a blank
+ line, don't end a function with a blank line, don't add a blank line
+ after public/protected/private, don't have too many blank lines in a row,
+ spaces after {, spaces before }.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ nesting_state: A _NestingState instance which maintains information about
+ the current stack of nested blocks being parsed.
+ error: The function to call with any errors found.
+ """
+
+ # Don't use "elided" lines here, otherwise we can't check commented lines.
+ # Don't want to use "raw" either, because we don't want to check inside
+ # C++11 raw strings,
+ raw = clean_lines.lines_without_raw_strings
+ line = raw[linenum]
+
+ # Before nixing comments, check if the line is blank for no good
+ # reason. This includes the first line after a block is opened, and
+ # blank lines at the end of a function (ie, right before a line like '}'
+ #
+ # Skip all the blank line checks if we are immediately inside a
+ # namespace body. In other words, don't issue blank line warnings
+ # for this block:
+ # namespace {
+ #
+ # }
+ #
+ # A warning about missing end of namespace comments will be issued instead.
+ if IsBlankLine(line):
+ elided = clean_lines.elided
+ prev_line = elided[linenum - 1]
+ prevbrace = prev_line.rfind('{')
+ # TODO(unknown): Don't complain if line before blank line, and line
+ # after,both start with alnums and are indented the same
+ # amount. This ignores whitespace at the start of a
+ # namespace block because those are not usually indented.
+ if prevbrace != -1 and prev_line[prevbrace:].find('}') == -1:
+ # OK, we have a blank line at the start of a code block. Before we
+ # complain, we check if it is an exception to the rule: The previous
+ # non-empty line has the parameters of a function header that are
+ # indented 4 spaces (because they did not fit in a 80 column line
+ # when placed on the same line as the function name). We also check
+ # for the case where the previous line is indented 6 spaces, which
+ # may happen when the initializers of a constructor do not fit into
+ # a 80 column line.
+ exception = False
+ if Match(r' {6}\w', prev_line): # Initializer list?
+ # We are looking for the opening column of initializer list,
+ # which should be indented 4 spaces to cause 6 space indentation
+ # afterwards.
+ search_position = linenum - 2
+ while (search_position >= 0
+ and Match(r' {6}\w', elided[search_position])):
+ search_position -= 1
+ exception = (search_position >= 0
+ and elided[search_position][:5] == ' :')
+ else:
+ # Search for the function arguments or an initializer list. We
+ # use a simple heuristic here: If the line is indented 4 spaces;
+ # and we have a closing paren, without the opening paren,
+ # followed by an opening brace or colon (for initializer lists)
+ # we assume that it is the last line of a function header. If
+ # we have a colon indented 4 spaces, it is an initializer list.
+ exception = (Match(r' {4}\w[^\(]*\)\s*(const\s*)?(\{\s*$|:)',
+ prev_line)
+ or Match(r' {4}:', prev_line))
+
+ if not exception:
+ error(filename, linenum, 'whitespace/blank_line', 2,
+ 'Redundant blank line at the start of a code block '
+ 'should be deleted.')
+ # Ignore blank lines at the end of a block in a long if-else
+ # chain, like this:
+ # if (condition1) {
+ # // Something followed by a blank line
+ #
+ # } else if (condition2) {
+ # // Something else
+ # }
+ if linenum + 1 < clean_lines.NumLines():
+ next_line = raw[linenum + 1]
+ if (next_line
+ and Match(r'\s*}', next_line)
+ and next_line.find('} else ') == -1):
+ error(filename, linenum, 'whitespace/blank_line', 3,
+ 'Redundant blank line at the end of a code block '
+ 'should be deleted.')
+
+ # Next, we complain if there's a comment too near the text
+ commentpos = line.find('//')
+ if commentpos != -1:
+ # Check if the // may be in quotes. If so, ignore it
+ # Comparisons made explicit for clarity -- pylint:
+ # disable=g-explicit-bool-comparison
+ if (line.count('"', 0, commentpos) -
+ line.count('\\"', 0, commentpos)) % 2 == 0: # not in quotes
+ # Allow one space for new scopes, two spaces otherwise:
+ if (not Match(r'^\s*{ //', line) and
+ ((commentpos >= 1 and
+ line[commentpos - 1] not in string.whitespace) or
+ (commentpos >= 2 and
+ line[commentpos - 2] not in string.whitespace))):
+ error(filename, linenum, 'whitespace/comments', 2,
+ 'At least two spaces is best between code and comments')
+ # There should always be a space between the // and the comment
+ commentend = commentpos + 2
+ if commentend < len(line) and not line[commentend] == ' ':
+ # but some lines are exceptions -- e.g. if they're big
+ # comment delimiters like:
+ # //----------------------------------------------------------
+ # or are an empty C++ style Doxygen comment, like:
+ # ///
+ # or C++ style Doxygen comments placed after the variable:
+ # ///< Header comment
+ # //!< Header comment
+ # or they begin with multiple slashes followed by a space:
+ # //////// Header comment
+ match = (Search(r'[=/-]{4,}\s*$', line[commentend:]) or
+ Search(r'^/$', line[commentend:]) or
+ Search(r'^!< ', line[commentend:]) or
+ Search(r'^/< ', line[commentend:]) or
+ Search(r'^/+ ', line[commentend:]))
+ if not match:
+ error(filename, linenum, 'whitespace/comments', 4,
+ 'Should have a space between // and comment')
+ CheckComment(line[commentpos:], filename, linenum, error)
+
+ line = clean_lines.elided[linenum] # get rid of comments and strings
+
+ # Don't try to do spacing checks for operator methods
+ line = re.sub(r'operator(==|!=|<|<<|<=|>=|>>|>)\(', 'operator\(', line)
+
+ # We allow no-spaces around = within an if: "if ( (a=Foo()) == 0 )".
+ # Otherwise not. Note we only check for non-spaces on *both* sides;
+ # sometimes people put non-spaces on one side when aligning ='s among
+ # many lines (not that this is behavior that I approve of...)
+ if Search(r'[\w.]=[\w.]', line) and not Search(r'\b(if|while) ', line):
+ error(filename, linenum, 'whitespace/operators', 4,
+ 'Missing spaces around =')
+
+ # It's ok not to have spaces around binary operators like + - * /, but if
+ # there's too little whitespace, we get concerned. It's hard to tell,
+ # though, so we punt on this one for now. TODO.
+
+ match = Search(r'(?:[^ (*/![])+(?<!\+\+|--)\*', line)
+ if match:
+ error(filename, linenum, 'whitespace/operators', 2,
+ 'Missing space before asterisk in %s' % match.group(0))
+
+ # You should always have whitespace around binary operators.
+ #
+ # Check <= and >= first to avoid false positives with < and >, then
+ # check non-include lines for spacing around < and >.
+ match = Search(r'[^<>=!\s](==|!=|<=|>=)[^<>=!\s]', line)
+ if match:
+ error(filename, linenum, 'whitespace/operators', 3,
+ 'Missing spaces around %s' % match.group(1))
+
+ # Boolean operators should be placed on the next line.
+ if Search(r'(?:&&|\|\|)$', line):
+ error(filename, linenum, 'whitespace/operators', 4,
+ 'Boolean operator should be placed on the same line as the start '
+ 'of its right operand')
+
+ # We allow no-spaces around << when used like this: 10<<20, but
+ # not otherwise (particularly, not when used as streams)
+ # Also ignore using ns::operator<<;
+ match = Search(r'(operator|\S)(?:L|UL|ULL|l|ul|ull)?<<(\S)', line)
+ if (match and
+ not (match.group(1).isdigit() and match.group(2).isdigit()) and
+ not (match.group(1) == 'operator' and match.group(2) == ';')):
+ error(filename, linenum, 'whitespace/operators', 3,
+ 'Missing spaces around <<')
+ elif not Match(r'#.*include', line):
+ # Avoid false positives on ->
+ reduced_line = line.replace('->', '')
+
+ # Look for < that is not surrounded by spaces. This is only
+ # triggered if both sides are missing spaces, even though
+ # technically should should flag if at least one side is missing a
+ # space. This is done to avoid some false positives with shifts.
+ match = Search(r'[^\s<]<([^\s=<].*)', reduced_line)
+ if (match and not FindNextMatchingAngleBracket(clean_lines, linenum,
+ match.group(1))):
+ error(filename, linenum, 'whitespace/operators', 3,
+ 'Missing spaces around <')
+
+ # Look for > that is not surrounded by spaces. Similar to the
+ # above, we only trigger if both sides are missing spaces to avoid
+ # false positives with shifts.
+ match = Search(r'^(.*[^\s>])>[^\s=>]', reduced_line)
+ if (match and
+ not FindPreviousMatchingAngleBracket(clean_lines, linenum,
+ match.group(1))):
+ error(filename, linenum, 'whitespace/operators', 3,
+ 'Missing spaces around >')
+
+ # We allow no-spaces around >> for almost anything. This is because
+ # C++11 allows ">>" to close nested templates, which accounts for
+ # most cases when ">>" is not followed by a space.
+ #
+ # We still warn on ">>" followed by alpha character, because that is
+ # likely due to ">>" being used for right shifts, e.g.:
+ # value >> alpha
+ #
+ # When ">>" is used to close templates, the alphanumeric letter that
+ # follows would be part of an identifier, and there should still be
+ # a space separating the template type and the identifier.
+ # type<type<type>> alpha
+ match = Search(r'>>[a-zA-Z_]', line)
+ if match:
+ error(filename, linenum, 'whitespace/operators', 3,
+ 'Missing spaces around >>')
+
+ # There shouldn't be space around unary operators
+ match = Search(r'(!\s|~\s|[\s]--[\s;]|[\s]\+\+[\s;])', line)
+ if match:
+ error(filename, linenum, 'whitespace/operators', 4,
+ 'Extra space for operator %s' % match.group(1))
+
+ # A pet peeve of mine: no spaces after an if, while, switch, or for
+ match = Search(r' (if\(|for\(|while\(|switch\()', line)
+ if match:
+ error(filename, linenum, 'whitespace/parens', 5,
+ 'Missing space before ( in %s' % match.group(1))
+
+ # For if/for/while/switch, the left and right parens should be
+ # consistent about how many spaces are inside the parens, and
+ # there should either be zero or one spaces inside the parens.
+ # We don't want: "if ( foo)" or "if ( foo )".
+ # Exception: "for ( ; foo; bar)" and "for (foo; bar; )" are allowed.
+ match = Search(r'\b(if|for|while|switch)\s*'
+ r'\(([ ]*)(.).*[^ ]+([ ]*)\)\s*{\s*$',
+ line)
+ if match:
+ if len(match.group(2)) != len(match.group(4)):
+ if not (match.group(3) == ';' and
+ len(match.group(2)) == 1 + len(match.group(4)) or
+ not match.group(2) and Search(r'\bfor\s*\(.*; \)', line)):
+ error(filename, linenum, 'whitespace/parens', 5,
+ 'Mismatching spaces inside () in %s' % match.group(1))
+ if len(match.group(2)) not in [0, 1]:
+ error(filename, linenum, 'whitespace/parens', 5,
+ 'Should have zero or one spaces inside ( and ) in %s' %
+ match.group(1))
+
+ # You should always have a space after a comma (either as fn arg or
+ # operator).
+ #
+ # This does not apply when the non-space character following the
+ # comma is another comma, since the only time when that happens is
+ # for empty macro arguments.
+ #
+ # We run this check in two passes: first pass on elided lines to
+ # verify that lines contain missing whitespaces, second pass on raw
+ # lines to confirm that those missing whitespaces are not due to
+ # elided comments.
+ if Search(r',[^,\s]', line) and Search(r',[^,\s]', raw[linenum]):
+ error(filename, linenum, 'whitespace/comma', 3,
+ 'Missing space after ,')
+
+ # You should always have a space after a semicolon
+ # except for few corner cases
+ # TODO(unknown): clarify if 'if (1) { return 1;}' is requires one more
+ # space after ;
+ if Search(r';[^\s};\\)/]', line):
+ error(filename, linenum, 'whitespace/semicolon', 3,
+ 'Missing space after ;')
+
+ # Next we will look for issues with function calls.
+ CheckSpacingForFunctionCall(filename, line, linenum, error)
+
+ # Check whether everything inside expressions is aligned correctly
+ if any((line.find(k) >= 0 for k in BRACES if k != '{')):
+ CheckExpressionAlignment(filename, clean_lines, linenum, error)
+
+ # Except after an opening paren, or after another opening brace (in case of
+ # an initializer list, for instance), you should have spaces before your
+ # braces. And since you should never have braces at the beginning of a line,
+ # this is an easy test.
+ match = Match(r'^(.*[^ ({]){', line)
+ if match:
+ # Try a bit harder to check for brace initialization. This
+ # happens in one of the following forms:
+ # Constructor() : initializer_list_{} { ... }
+ # Constructor{}.MemberFunction()
+ # Type variable{};
+ # FunctionCall(type{}, ...);
+ # LastArgument(..., type{});
+ # LOG(INFO) << type{} << " ...";
+ # map_of_type[{...}] = ...;
+ #
+ # We check for the character following the closing brace, and
+ # silence the warning if it's one of those listed above, i.e.
+ # "{.;,)<]".
+ #
+ # To account for nested initializer list, we allow any number of
+ # closing braces up to "{;,)<". We can't simply silence the
+ # warning on first sight of closing brace, because that would
+ # cause false negatives for things that are not initializer lists.
+ # Silence this: But not this:
+ # Outer{ if (...) {
+ # Inner{...} if (...){ // Missing space before {
+ # }; }
+ #
+ # There is a false negative with this approach if people inserted
+ # spurious semicolons, e.g. "if (cond){};", but we will catch the
+ # spurious semicolon with a separate check.
+ (endline, endlinenum, endpos) = CloseExpression(
+ clean_lines, linenum, len(match.group(1)))
+ trailing_text = ''
+ if endpos > -1:
+ trailing_text = endline[endpos:]
+ for offset in range(endlinenum + 1,
+ min(endlinenum + 3, clean_lines.NumLines() - 1)):
+ trailing_text += clean_lines.elided[offset]
+ if not Match(r'^[\s}]*[{.;,)<\]]', trailing_text):
+ error(filename, linenum, 'whitespace/braces', 5,
+ 'Missing space before {')
+
+ # Make sure '} else {' has spaces.
+ if Search(r'}else', line):
+ error(filename, linenum, 'whitespace/braces', 5,
+ 'Missing space before else')
+
+ # You shouldn't have spaces before your brackets, except maybe after
+ # 'delete []' or 'new char * []'.
+ if Search(r'\w\s+\[', line):
+ error(filename, linenum, 'whitespace/braces', 5,
+ 'Extra space before [')
+
+ # You shouldn't have a space before a semicolon at the end of the line.
+ if Search(r':\s*;\s*$', line):
+ error(filename, linenum, 'whitespace/semicolon', 5,
+ 'Semicolon defining empty statement. Use {} instead.')
+ elif Search(r'^\s*;\s*$', line):
+ error(filename, linenum, 'whitespace/semicolon', 5,
+ 'Line contains only semicolon. If this should be an empty'
+ ' statement, use {} instead.')
+ elif Search(r'\s+;\s*$', line):
+ error(filename, linenum, 'whitespace/semicolon', 5,
+ 'Extra space before last semicolon. If this should be an empty '
+ 'statement, use {} instead.')
+
+ if Search(r'\{(?!\})\S', line):
+ error(filename, linenum, 'whitespace/braces', 5,
+ 'Missing space after {')
+ if Search(r'\S(?<!\{)\}', line):
+ error(filename, linenum, 'whitespace/braces', 5,
+ 'Missing space before }')
+
+ if Search(r'\S {2,}\\$', line):
+ error(filename, linenum, 'whitespace/line_continuation', 5,
+ 'Too many spaces before \\, line continuation character must be '
+ 'preceded by exactly one space. For “blank lines†'
+ 'it is preferred to use the same amount of spaces as preceding '
+ 'indent')
+
+ if Match(r'^ +#', line):
+ error(filename, linenum, 'whitespace/indent', 5,
+ 'Must not indent preprocessor directives, use 1-space indent '
+ 'after the hash')
+
+ cast_line = re.sub(r'^# *define +\w+\([^)]*\)', '', line)
+ match = Search(r'(?<!\bkvec_t)'
+ r'(?<!\bkvec_withinit_t)'
+ r'(?<!\bklist_t)'
+ r'(?<!\bkliter_t)'
+ r'(?<!\bkhash_t)'
+ r'\((?:const )?(?:struct )?[a-zA-Z_]\w*(?: *\*(?:const)?)*\)'
+ r' +'
+ r'-?(?:\*+|&)?(?:\w+|\+\+|--|\()', cast_line)
+ if match and line[0] == ' ':
+ error(filename, linenum, 'whitespace/cast', 2,
+ 'Should leave no spaces after a cast: {!r}'.format(
+ match.group(0)))
+
+
+def GetPreviousNonBlankLine(clean_lines, linenum):
+ """Return the most recent non-blank line and its line number.
+
+ Args:
+ clean_lines: A CleansedLines instance containing the file contents.
+ linenum: The number of the line to check.
+
+ Returns:
+ A tuple with two elements. The first element is the contents of the last
+ non-blank line before the current line, or the empty string if this is the
+ first non-blank line. The second is the line number of that line, or -1
+ if this is the first non-blank line.
+ """
+
+ prevlinenum = linenum - 1
+ while prevlinenum >= 0:
+ prevline = clean_lines.elided[prevlinenum]
+ if not IsBlankLine(prevline): # if not a blank line...
+ return (prevline, prevlinenum)
+ prevlinenum -= 1
+ return ('', -1)
+
+
+def CheckBraces(filename, clean_lines, linenum, error):
+ """Looks for misplaced braces (e.g. at the end of line).
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+
+ line = clean_lines.elided[linenum] # get rid of comments and strings
+
+ if Match(r'\s+{\s*$', line):
+ # We allow an open brace to start a line in the case where someone
+ # is using braces in a block to explicitly create a new scope, which
+ # is commonly used to control the lifetime of stack-allocated
+ # variables. Braces are also used for brace initializers inside
+ # function calls. We don't detect this perfectly: we just don't
+ # complain if the last non-whitespace character on the previous
+ # non-blank line is ',', ';', ':', '(', '{', or '}', or if the
+ # previous line starts a preprocessor block.
+ prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+ if (not Search(r'[,;:}{(]\s*$', prevline) and
+ not Match(r'\s*#', prevline)):
+ error(filename, linenum, 'whitespace/braces', 4,
+ '{ should almost always be at the end'
+ ' of the previous line')
+
+ # Brace must appear after function signature, but on the *next* line
+ if Match(r'^(?:\w+(?: ?\*+)? )+\w+\(', line):
+ pos = line.find('(')
+ (endline, end_linenum, endpos) = CloseExpression(
+ clean_lines, linenum, pos)
+ if endline.endswith('{'):
+ error(filename, end_linenum, 'readability/braces', 5,
+ 'Brace starting function body must be placed on its own line')
+ else:
+ func_start_linenum = end_linenum + 1
+ while not clean_lines.lines[func_start_linenum] == '{':
+ if not Match(r'^(?:\s*\b(?:FUNC_ATTR|REAL_FATTR)_\w+\b(?:\(\d+(, \d+)*\))?)+$',
+ clean_lines.lines[func_start_linenum]):
+ if clean_lines.lines[func_start_linenum].endswith('{'):
+ error(filename, func_start_linenum,
+ 'readability/braces', 5,
+ 'Brace starting function body must be placed '
+ 'after the function signature')
+ break
+ else:
+ func_start_linenum += 1
+
+ # An else clause should be on the same line as the preceding closing brace.
+ # If there is no preceding closing brace, there should be one.
+ if Match(r'\s*else\s*', line):
+ prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+ if Match(r'\s*}\s*$', prevline):
+ error(filename, linenum, 'whitespace/newline', 4,
+ 'An else should appear on the same line as the preceding }')
+ else:
+ error(filename, linenum, 'readability/braces', 5,
+ 'An else should always have braces before it')
+
+ # If should always have a brace
+ for blockstart in ('if', 'while', 'for'):
+ if Match(r'\s*{0}(?!\w)[^{{]*$'.format(blockstart), line):
+ pos = line.find(blockstart)
+ pos = line.find('(', pos)
+ if pos > 0:
+ (endline, _, endpos) = CloseExpression(
+ clean_lines, linenum, pos)
+ if endline[endpos:].find('{') == -1:
+ error(filename, linenum, 'readability/braces', 5,
+ '{0} should always use braces'.format(blockstart))
+
+ # If braces come on one side of an else, they should be on both.
+ # However, we have to worry about "else if" that spans multiple lines!
+ if Search(r'}\s*else[^{]*$', line) or Match(r'[^}]*else\s*{', line):
+ if Search(r'}\s*else if([^{]*)$', line): # could be multi-line if
+ # find the ( after the if
+ pos = line.find('else if')
+ pos = line.find('(', pos)
+ if pos > 0:
+ (endline, _, endpos) = CloseExpression(
+ clean_lines, linenum, pos)
+ # must be brace after if
+ if endline[endpos:].find('{') == -1:
+ error(filename, linenum, 'readability/braces', 5,
+ 'If an else has a brace on one side,'
+ ' it should have it on both')
+ else: # common case: else not followed by a multi-line if
+ error(filename, linenum, 'readability/braces', 5,
+ 'If an else has a brace on one side,'
+ ' it should have it on both')
+
+ # Likewise, an else should never have the else clause on the same line
+ if Search(r'\belse [^\s{]', line) and not Search(r'\belse if\b', line):
+ error(filename, linenum, 'whitespace/newline', 4,
+ 'Else clause should never be on same line as else (use 2 lines)')
+
+ # In the same way, a do/while should never be on one line
+ if Match(r'\s*do [^\s{]', line):
+ error(filename, linenum, 'whitespace/newline', 4,
+ 'do/while clauses should not be on a single line')
+
+ # Block bodies should not be followed by a semicolon. Due to C++11
+ # brace initialization, there are more places where semicolons are
+ # required than not, so we use a whitelist approach to check these
+ # rather than a blacklist. These are the places where "};" should
+ # be replaced by just "}":
+ # 1. Some flavor of block following closing parenthesis:
+ # for (;;) {};
+ # while (...) {};
+ # switch (...) {};
+ # Function(...) {};
+ # if (...) {};
+ # if (...) else if (...) {};
+ #
+ # 2. else block:
+ # if (...) else {};
+ #
+ # 3. const member function:
+ # Function(...) const {};
+ #
+ # 4. Block following some statement:
+ # x = 42;
+ # {};
+ #
+ # 5. Block at the beginning of a function:
+ # Function(...) {
+ # {};
+ # }
+ #
+ # Note that naively checking for the preceding "{" will also match
+ # braces inside multi-dimensional arrays, but this is fine since
+ # that expression will not contain semicolons.
+ #
+ # 6. Block following another block:
+ # while (true) {}
+ # {};
+ #
+ # 7. End of namespaces:
+ # namespace {};
+ #
+ # These semicolons seems far more common than other kinds of
+ # redundant semicolons, possibly due to people converting classes
+ # to namespaces. For now we do not warn for this case.
+ #
+ # Try matching case 1 first.
+ match = Match(r'^(.*\)\s*)\{', line)
+ if match:
+ # Matched closing parenthesis (case 1). Check the token before the
+ # matching opening parenthesis, and don't warn if it looks like a
+ # macro. This avoids these false positives:
+ # - macro that defines a base class
+ # - multi-line macro that defines a base class
+ # - macro that defines the whole class-head
+ #
+ # But we still issue warnings for macros that we know are safe to
+ # warn, specifically:
+ # - TEST, TEST_F, TEST_P, MATCHER, MATCHER_P
+ # - TYPED_TEST
+ # - INTERFACE_DEF
+ # - EXCLUSIVE_LOCKS_REQUIRED, SHARED_LOCKS_REQUIRED, LOCKS_EXCLUDED:
+ #
+ # We implement a whitelist of safe macros instead of a blacklist of
+ # unsafe macros, even though the latter appears less frequently in
+ # google code and would have been easier to implement. This is because
+ # the downside for getting the whitelist wrong means some extra
+ # semicolons, while the downside for getting the blacklist wrong
+ # would result in compile errors.
+ #
+ # In addition to macros, we also don't want to warn on compound
+ # literals.
+ closing_brace_pos = match.group(1).rfind(')')
+ opening_parenthesis = ReverseCloseExpression(
+ clean_lines, linenum, closing_brace_pos)
+ if opening_parenthesis[2] > -1:
+ line_prefix = opening_parenthesis[0][0:opening_parenthesis[2]]
+ macro = Search(r'\b([A-Z_]+)\s*$', line_prefix)
+ if ((macro and
+ macro.group(1) not in (
+ 'TEST', 'TEST_F', 'MATCHER', 'MATCHER_P', 'TYPED_TEST',
+ 'EXCLUSIVE_LOCKS_REQUIRED', 'SHARED_LOCKS_REQUIRED',
+ 'LOCKS_EXCLUDED', 'INTERFACE_DEF')) or
+ Search(r'\s+=\s*$', line_prefix) or
+ Search(r'^\s*return\s*$', line_prefix)):
+ match = None
+
+ else:
+ # Try matching cases 2-3.
+ match = Match(r'^(.*(?:else|\)\s*const)\s*)\{', line)
+ if not match:
+ # Try matching cases 4-6. These are always matched on separate
+ # lines.
+ #
+ # Note that we can't simply concatenate the previous line to the
+ # current line and do a single match, otherwise we may output
+ # duplicate warnings for the blank line case:
+ # if (cond) {
+ # // blank line
+ # }
+ prevline = GetPreviousNonBlankLine(clean_lines, linenum)[0]
+ if prevline and Search(r'[;{}]\s*$', prevline):
+ match = Match(r'^(\s*)\{', line)
+
+ # Check matching closing brace
+ if match:
+ (endline, endlinenum, endpos) = CloseExpression(
+ clean_lines, linenum, len(match.group(1)))
+ if endpos > -1 and Match(r'^\s*;', endline[endpos:]):
+ # Current {} pair is eligible for semicolon check, and we have found
+ # the redundant semicolon, output warning here.
+ #
+ # Note: because we are scanning forward for opening braces, and
+ # outputting warnings for the matching closing brace, if there are
+ # nested blocks with trailing semicolons, we will get the error
+ # messages in reversed order.
+ error(filename, endlinenum, 'readability/braces', 4,
+ "You don't need a ; after a }")
+
+
+def CheckEmptyBlockBody(filename, clean_lines, linenum, error):
+ """Look for empty loop/conditional body with only a single semicolon.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+
+ # Search for loop keywords at the beginning of the line. Because only
+ # whitespaces are allowed before the keywords, this will also ignore most
+ # do-while-loops, since those lines should start with closing brace.
+ #
+ # We also check "if" blocks here, since an empty conditional block
+ # is likely an error.
+ line = clean_lines.elided[linenum]
+ matched = Match(r'\s*(for|while|if)\s*\(', line)
+ if matched:
+ # Find the end of the conditional expression
+ (end_line, end_linenum, end_pos) = CloseExpression(
+ clean_lines, linenum, line.find('('))
+
+ # Output warning if what follows the condition expression is a
+ # semicolon. No warning for all other cases, including whitespace or
+ # newline, since we have a separate check for semicolons preceded by
+ # whitespace.
+ if end_pos >= 0 and Match(r';', end_line[end_pos:]):
+ if matched.group(1) == 'if':
+ error(filename, end_linenum,
+ 'whitespace/empty_conditional_body', 5,
+ 'Empty conditional bodies should use {}')
+ else:
+ error(filename, end_linenum, 'whitespace/empty_loop_body', 5,
+ 'Empty loop bodies should use {} or continue')
+
+
+def CheckAltTokens(filename, clean_lines, linenum, error):
+ """Check alternative keywords being used in boolean expressions.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ error: The function to call with any errors found.
+ """
+ line = clean_lines.elided[linenum]
+
+ # Avoid preprocessor lines
+ if Match(r'^\s*#', line):
+ return
+
+ # Last ditch effort to avoid multi-line comments. This will not help
+ # if the comment started before the current line or ended after the
+ # current line, but it catches most of the false positives. At least,
+ # it provides a way to workaround this warning for people who use
+ # multi-line comments in preprocessor macros.
+ #
+ # TODO(unknown): remove this once cpplint has better support for
+ # multi-line comments.
+ if line.find('/*') >= 0 or line.find('*/') >= 0:
+ return
+
+ for match in _ALT_TOKEN_REPLACEMENT_PATTERN.finditer(line):
+ error(filename, linenum, 'readability/alt_tokens', 2,
+ 'Use operator %s instead of %s' % (
+ _ALT_TOKEN_REPLACEMENT[match.group(1)], match.group(1)))
+
+
+def GetLineWidth(line):
+ """Determines the width of the line in column positions.
+
+ Args:
+ line: A string, which may be a Unicode string.
+
+ Returns:
+ The width of the line in column positions, accounting for Unicode
+ combining characters and wide characters.
+ """
+ if isinstance(line, str):
+ width = 0
+ for uc in unicodedata.normalize('NFC', line):
+ if unicodedata.east_asian_width(uc) in ('W', 'F'):
+ width += 2
+ elif not unicodedata.combining(uc):
+ width += 1
+ return width
+ else:
+ return len(line)
+
+
+def CheckStyle(filename, clean_lines, linenum, file_extension, nesting_state,
+ error):
+ """Checks rules from the 'C++ style rules' section of cppguide.html.
+
+ Most of these rules are hard to test (naming, comment style), but we
+ do what we can. In particular we check for 2-space indents, line lengths,
+ tab usage, spaces inside code, etc.
+
+ Args:
+ filename: The name of the current file.
+ clean_lines: A CleansedLines instance containing the file.
+ linenum: The number of the line to check.
+ file_extension: The extension (without the dot) of the filename.
+ nesting_state: A _NestingState instance which maintains information about
+ the current stack of nested blocks being parsed.
+ error: The function to call with any errors found.
+ """
+
+ # Don't use "elided" lines here, otherwise we can't check commented lines.
+ # Don't want to use "raw" either, because we don't want to check inside
+ # C++11 raw strings,
+ raw_lines = clean_lines.lines_without_raw_strings
+ line = raw_lines[linenum]
+
+ if line.find('\t') != -1:
+ error(filename, linenum, 'whitespace/tab', 1,
+ 'Tab found; better to use spaces')
+
+ # One or three blank spaces at the beginning of the line is weird; it's
+ # hard to reconcile that with 2-space indents.
+ # NOTE: here are the conditions rob pike used for his tests. Mine aren't
+ # as sophisticated, but it may be worth becoming so:
+ # RLENGTH==initial_spaces
+ # if(RLENGTH > 20) complain = 0;
+ # if(match($0, " +(error|private|public|protected):")) complain = 0;
+ # if(match(prev, "&& *$")) complain = 0;
+ # if(match(prev, "\\|\\| *$")) complain = 0;
+ # if(match(prev, "[\",=><] *$")) complain = 0;
+ # if(match($0, " <<")) complain = 0;
+ # if(match(prev, " +for \\(")) complain = 0;
+ # if(prevodd && match(prevprev, " +for \\(")) complain = 0;
+ initial_spaces = 0
+ cleansed_line = clean_lines.elided[linenum]
+ while initial_spaces < len(line) and line[initial_spaces] == ' ':
+ initial_spaces += 1
+ if line and line[-1].isspace():
+ error(filename, linenum, 'whitespace/end_of_line', 4,
+ 'Line ends in whitespace. Consider deleting these extra spaces.')
+ # There are certain situations we allow one space, notably for section
+ # labels
+ elif ((initial_spaces == 1 or initial_spaces == 3) and
+ not Match(r'\s*\w+\s*:\s*$', cleansed_line)):
+ error(filename, linenum, 'whitespace/indent', 3,
+ 'Weird number of spaces at line-start. '
+ 'Are you using a 2-space indent?')
+
+ # Check if the line is a header guard.
+ is_header_guard = False
+ if file_extension == 'h':
+ cppvar = GetHeaderGuardCPPVariable(filename)
+ if (line.startswith('#ifndef %s' % cppvar) or
+ line.startswith('#define %s' % cppvar) or
+ line.startswith('#endif // %s' % cppvar)):
+ is_header_guard = True
+ # #include lines and header guards can be long, since there's no clean way
+ # to split them.
+ #
+ # URLs can be long too. It's possible to split these, but it makes them
+ # harder to cut&paste.
+ #
+ # The "$Id:...$" comment may also get very long without it being the
+ # developers fault.
+ if (not line.startswith('#include') and not is_header_guard and
+ not Match(r'^\s*//.*http(s?)://\S*$', line) and
+ not Match(r'^// \$Id:.*#[0-9]+ \$$', line)):
+ line_width = GetLineWidth(line)
+ extended_length = int((_line_length * 1.25))
+ if line_width > extended_length:
+ error(filename, linenum, 'whitespace/line_length', 4,
+ 'Lines should very rarely be longer than %i characters' %
+ extended_length)
+ elif line_width > _line_length:
+ error(filename, linenum, 'whitespace/line_length', 2,
+ 'Lines should be <= %i characters long' % _line_length)
+
+ if (cleansed_line.count(';') > 1 and
+ # for loops are allowed two ;'s (and may run over two lines).
+ cleansed_line.find('for') == -1 and
+ (GetPreviousNonBlankLine(clean_lines, linenum)[0].find('for') == -1 or
+ GetPreviousNonBlankLine(clean_lines, linenum)[0].find(';') != -1) and
+ # It's ok to have many commands in a switch case that fits in 1 line
+ not ((cleansed_line.find('case ') != -1 or
+ cleansed_line.find('default:') != -1) and
+ cleansed_line.find('break;') != -1)):
+ error(filename, linenum, 'whitespace/newline', 0,
+ 'More than one command on the same line')
+
+ # Some more style checks
+ CheckBraces(filename, clean_lines, linenum, error)
+ CheckEmptyBlockBody(filename, clean_lines, linenum, error)
+ CheckSpacing(filename, clean_lines, linenum, nesting_state, error)
+ CheckAltTokens(filename, clean_lines, linenum, error)
+
+
+_RE_PATTERN_INCLUDE_NEW_STYLE = re.compile(r'#include +"[^/]+\.h"')
+_RE_PATTERN_INCLUDE = re.compile(r'^\s*#\s*include\s*([<"])([^>"]*)[>"].*$')
+# Matches the first component of a filename delimited by -s and _s. That is:
+# _RE_FIRST_COMPONENT.match('foo').group(0) == 'foo'
+# _RE_FIRST_COMPONENT.match('foo.cc').group(0) == 'foo'
+# _RE_FIRST_COMPONENT.match('foo-bar_baz.cc').group(0) == 'foo'
+# _RE_FIRST_COMPONENT.match('foo_bar-baz.cc').group(0) == 'foo'
+_RE_FIRST_COMPONENT = re.compile(r'^[^-_.]+')
+
+
+def _ClassifyInclude(fileinfo, include, is_system):
+ """Figures out what kind of header 'include' is.
+
+ Args:
+ fileinfo: The current file cpplint is running over. A FileInfo instance.
+ include: The path to a #included file.
+ is_system: True if the #include used <> rather than "".
+
+ Returns:
+ One of the _XXX_HEADER constants.
+ """
+ if is_system:
+ return _C_SYS_HEADER
+ return _OTHER_HEADER
+
+
+def CheckIncludeLine(filename, clean_lines, linenum, include_state, error):
+ """Check rules that are applicable to #include lines.
+
+ Strings on #include lines are NOT removed from elided line, to make
+ certain tasks easier. However, to prevent false positives, checks
+ applicable to #include lines in CheckLanguage must be put here.
+
+ Args:
+ filename : The name of the current file.
+ clean_lines : A CleansedLines instance containing the file.
+ linenum : The number of the line to check.
+ include_state : An _IncludeState instance in which the headers are
+ inserted.
+ error : The function to call with any errors found.
+ """
+ fileinfo = FileInfo(filename)
+
+ line = clean_lines.lines[linenum]
+
+ # "include" should use the new style "foo/bar.h" instead of just "bar.h"
+ # XXX: neovim doesn't currently use this style
+ # if _RE_PATTERN_INCLUDE_NEW_STYLE.search(line):
+ # error(filename, linenum, 'build/include', 4,
+ # 'Include the directory when naming .h files')
+
+ # we shouldn't include a file more than once. actually, there are a
+ # handful of instances where doing so is okay, but in general it's
+ # not.
+ match = _RE_PATTERN_INCLUDE.search(line)
+ if match:
+ include = match.group(2)
+ is_system = (match.group(1) == '<')
+ if include in include_state:
+ if is_system or not include.endswith('.c.h'):
+ error(filename, linenum, 'build/include', 4,
+ '"%s" already included at %s:%s' %
+ (include, filename, include_state[include]))
+ else:
+ include_state[include] = linenum
+
+ # We want to ensure that headers appear in the right order:
+ # 1) for foo.cc, foo.h (preferred location)
+ # 2) c system files
+ # 3) cpp system files
+ # 4) for foo.cc, foo.h (deprecated location)
+ # 5) other google headers
+ #
+ # We classify each include statement as one of those 5 types
+ # using a number of techniques. The include_state object keeps
+ # track of the highest type seen, and complains if we see a
+ # lower type after that.
+ error_message = include_state.CheckNextIncludeOrder(
+ _ClassifyInclude(fileinfo, include, is_system))
+ if error_message:
+ error(filename, linenum, 'build/include_order', 4,
+ '%s. Should be: c system, c++ system, other.'
+ % error_message)
+ canonical_include = include_state.CanonicalizeAlphabeticalOrder(
+ include)
+ include_state.SetLastHeader(canonical_include)
+
+
+def _GetTextInside(text, start_pattern):
+ r"""Retrieves all the text between matching open and close parentheses.
+
+ Given a string of lines and a regular expression string, retrieve all the
+ text following the expression and between opening punctuation symbols like
+ (, [, or {, and the matching close-punctuation symbol. This properly nested
+ occurrences of the punctuations, so for the text like
+ printf(a(), b(c()));
+ a call to _GetTextInside(text, r'printf\(') will return 'a(), b(c())'.
+ start_pattern must match string having an open punctuation symbol at the
+ end.
+
+ Args:
+ text: The lines to extract text. Its comments and strings must be elided.
+ It can be single line and can span multiple lines.
+ start_pattern: The regexp string indicating where to start extracting
+ the text.
+ Returns:
+ The extracted text.
+ None if either the opening string or ending punctuation couldn't be found.
+ """
+ # TODO(sugawarayu): Audit cpplint.py to see what places could be profitably
+ # rewritten to use _GetTextInside (and use inferior regexp matching today).
+
+ # Give opening punctuations to get the matching close-punctuations.
+ matching_punctuation = {'(': ')', '{': '}', '[': ']'}
+ closing_punctuation = set(matching_punctuation.values())
+
+ # Find the position to start extracting text.
+ match = re.search(start_pattern, text, re.M)
+ if not match: # start_pattern not found in text.
+ return None
+ start_position = match.end(0)
+
+ assert start_position > 0, (
+ 'start_pattern must ends with an opening punctuation.')
+ assert text[start_position - 1] in matching_punctuation, (
+ 'start_pattern must ends with an opening punctuation.')
+ # Stack of closing punctuations we expect to have in text after position.
+ punctuation_stack = [matching_punctuation[text[start_position - 1]]]
+ position = start_position
+ while punctuation_stack and position < len(text):
+ if text[position] == punctuation_stack[-1]:
+ punctuation_stack.pop()
+ elif text[position] in closing_punctuation:
+ # A closing punctuation without matching opening punctuations.
+ return None
+ elif text[position] in matching_punctuation:
+ punctuation_stack.append(matching_punctuation[text[position]])
+ position += 1
+ if punctuation_stack:
+ # Opening punctuations left without matching close-punctuations.
+ return None
+ # punctuations match.
+ return text[start_position:position - 1]
+
+
+def CheckLanguage(filename, clean_lines, linenum, file_extension,
+ include_state, nesting_state, error):
+ """Checks rules from the 'C++ language rules' section of cppguide.html.
+
+ Some of these rules are hard to test (function overloading, using
+ uint32 inappropriately), but we do the best we can.
+
+ Args:
+ filename : The name of the current file.
+ clean_lines : A CleansedLines instance containing the file.
+ linenum : The number of the line to check.
+ file_extension : The extension (without the dot) of the filename.
+ include_state : An _IncludeState instance in which the headers are
+ inserted.
+ nesting_state : A _NestingState instance which maintains information
+ about the current stack of nested blocks being parsed.
+ error : The function to call with any errors found.
+ """
+ # If the line is empty or consists of entirely a comment, no need to
+ # check it.
+ line = clean_lines.elided[linenum]
+ if not line:
+ return
+
+ match = _RE_PATTERN_INCLUDE.search(line)
+ if match:
+ CheckIncludeLine(filename, clean_lines, linenum, include_state, error)
+ return
+
+ # Reset include state across preprocessor directives. This is meant
+ # to silence warnings for conditional includes.
+ if Match(r'^\s*#\s*(?:ifdef|elif|else|endif)\b', line):
+ include_state.ResetSection()
+
+ # TODO(unknown): figure out if they're using default arguments in fn proto.
+
+ # Check if people are using the verboten C basic types.
+ match = Search(r'\b(short|long long)\b', line)
+ if match:
+ error(filename, linenum, 'runtime/int', 4,
+ 'Use int16_t/int64_t/etc, rather than the C type %s'
+ % match.group(1))
+
+ # When snprintf is used, the second argument shouldn't be a literal.
+ match = Search(r'snprintf\s*\(([^,]*),\s*([0-9]*)\s*,', line)
+ if match and match.group(2) != '0':
+ # If 2nd arg is zero, snprintf is used to calculate size.
+ error(filename, linenum, 'runtime/printf', 3,
+ 'If you can, use sizeof(%s) instead of %s as the 2nd arg '
+ 'to snprintf.' % (match.group(1), match.group(2)))
+
+ # Check if some verboten C functions are being used.
+ if Search(r'\bsprintf\b', line):
+ error(filename, linenum, 'runtime/printf', 5,
+ 'Use snprintf instead of sprintf.')
+ match = Search(r'\b(strncpy|STRNCPY)\b', line)
+ if match:
+ error(filename, linenum, 'runtime/printf', 4,
+ 'Use xstrlcpy or snprintf instead of %s (unless this is from Vim)'
+ % match.group(1))
+ match = Search(r'\b(strcpy)\b', line)
+ if match:
+ error(filename, linenum, 'runtime/printf', 4,
+ 'Use xstrlcpy or snprintf instead of %s' % match.group(1))
+ match = Search(r'\b(STRNCAT|strncat|strcat|vim_strcat)\b', line)
+ if match:
+ error(filename, linenum, 'runtime/printf', 4,
+ 'Use xstrlcat or snprintf instead of %s' % match.group(1))
+
+ # Check for suspicious usage of "if" like
+ # } if (a == b) {
+ if Search(r'\}\s*if\s*\(', line):
+ error(filename, linenum, 'readability/braces', 4,
+ 'Did you mean "else if"? If not, start a new line for "if".')
+
+ # Check for potential format string bugs like printf(foo).
+ # We constrain the pattern not to pick things like DocidForPrintf(foo).
+ # Not perfect but it can catch printf(foo.c_str()) and printf(foo->c_str())
+ # TODO(sugawarayu): Catch the following case. Need to change the calling
+ # convention of the whole function to process multiple line to handle it.
+ # printf(
+ # boy_this_is_a_really_long_variable_that_cannot_fit_on_the_prev_line);
+ printf_args = _GetTextInside(line, r'(?i)\b(string)?printf\s*\(')
+ if printf_args:
+ match = Match(r'([\w.\->()]+)$', printf_args)
+ if match and match.group(1) != '__VA_ARGS__':
+ function_name = re.search(r'\b((?:string)?printf)\s*\(',
+ line, re.I).group(1)
+ error(filename, linenum, 'runtime/printf', 4,
+ 'Potential format string bug. Do %s("%%s", %s) instead.'
+ % (function_name, match.group(1)))
+
+ # Check for potential memset bugs like memset(buf, sizeof(buf), 0).
+ match = Search(r'memset\s*\(([^,]*),\s*([^,]*),\s*0\s*\)', line)
+ if match and not Match(r"^''|-?[0-9]+|0x[0-9A-Fa-f]$", match.group(2)):
+ error(filename, linenum, 'runtime/memset', 4,
+ 'Did you mean "memset(%s, 0, %s)"?'
+ % (match.group(1), match.group(2)))
+
+ # Detect variable-length arrays.
+ match = Match(r'\s*(.+::)?(\w+) [a-z]\w*\[(.+)];', line)
+ if (match and match.group(2) != 'return' and match.group(2) != 'delete' and
+ match.group(3).find(']') == -1):
+ # Split the size using space and arithmetic operators as delimiters.
+ # If any of the resulting tokens are not compile time constants then
+ # report the error.
+ tokens = re.split(r'\s|\+|\-|\*|\/|<<|>>]', match.group(3))
+ is_const = True
+ skip_next = False
+ for tok in tokens:
+ if skip_next:
+ skip_next = False
+ continue
+
+ if Search(r'sizeof\(.+\)', tok):
+ continue
+ if Search(r'arraysize\(\w+\)', tok):
+ continue
+
+ tok = tok.lstrip('(')
+ tok = tok.rstrip(')')
+ if not tok:
+ continue
+ if Match(r'\d+', tok):
+ continue
+ if Match(r'0[xX][0-9a-fA-F]+', tok):
+ continue
+ if Match(r'k[A-Z0-9]\w*', tok):
+ continue
+ if Match(r'(.+::)?k[A-Z0-9]\w*', tok):
+ continue
+ if Match(r'(.+::)?[A-Z][A-Z0-9_]*', tok):
+ continue
+ # A catch all for tricky sizeof cases, including
+ # 'sizeof expression', 'sizeof(*type)', 'sizeof(const type)',
+ # 'sizeof(struct StructName)' requires skipping the next token
+ # because we split on ' ' and '*'.
+ if tok.startswith('sizeof'):
+ skip_next = True
+ continue
+ is_const = False
+ break
+ if not is_const:
+ error(filename, linenum, 'runtime/arrays', 1,
+ "Do not use variable-length arrays. Use an appropriately"
+ " named ('k' followed by CamelCase) compile-time constant for"
+ " the size.")
+
+ # Detect TRUE and FALSE.
+ match = Search(r'\b(TRUE|FALSE)\b', line)
+ if match:
+ token = match.group(1)
+ error(filename, linenum, 'readability/bool', 4,
+ 'Use %s instead of %s.' % (token.lower(), token))
+
+ # Detect preincrement/predecrement
+ match = Match(r'^\s*(?:\+\+|--)', line)
+ if match:
+ error(filename, linenum, 'readability/increment', 5,
+ 'Do not use preincrement in statements, '
+ 'use postincrement instead')
+ # Detect preincrement/predecrement in for(;; preincrement)
+ match = Search(r';\s*(\+\+|--)', line)
+ if match:
+ end_pos, end_depth = FindEndOfExpressionInLine(line, match.start(1), 1,
+ '(', ')')
+ expr = line[match.start(1):end_pos]
+ if end_depth == 0 and ';' not in expr and ' = ' not in expr:
+ error(filename, linenum, 'readability/increment', 4,
+ 'Do not use preincrement in statements, including '
+ 'for(;; action)')
+
+
+def ProcessLine(filename, file_extension, clean_lines, line,
+ include_state, function_state, nesting_state, error,
+ extra_check_functions=[]):
+ """Processes a single line in the file.
+
+ Args:
+ filename : Filename of the file that is being processed.
+ file_extension : The extension (dot not included) of the file.
+ clean_lines : An array of strings, each representing a line of
+ the file, with comments stripped.
+ line : Number of line being processed.
+ include_state : An _IncludeState instance in which the headers are
+ inserted.
+ function_state : A _FunctionState instance which counts function
+ lines, etc.
+ nesting_state : A _NestingState instance which maintains
+ information about the current stack of nested
+ blocks being parsed.
+ error : A callable to which errors are reported, which
+ takes 4 arguments: filename, line number, error
+ level, and message
+ extra_check_functions : An array of additional check functions that will
+ be run on each source line. Each function takes 4
+ arguments : filename, clean_lines, line, error
+ """
+ raw_lines = clean_lines.raw_lines
+ init_lines = clean_lines.init_lines
+ ParseNolintSuppressions(filename, raw_lines[line], line, error)
+ nesting_state.Update(filename, clean_lines, line, error)
+ if nesting_state.stack and nesting_state.stack[-1].inline_asm != _NO_ASM:
+ return
+ CheckForFunctionLengths(filename, clean_lines, line, function_state, error)
+ CheckForMultilineCommentsAndStrings(filename, clean_lines, line, error)
+ CheckForOldStyleComments(filename, init_lines[line], line, error)
+ CheckStyle(
+ filename, clean_lines, line, file_extension, nesting_state, error)
+ CheckLanguage(filename, clean_lines, line, file_extension, include_state,
+ nesting_state, error)
+ CheckForNonStandardConstructs(filename, clean_lines, line,
+ nesting_state, error)
+ CheckPosixThreading(filename, clean_lines, line, error)
+ CheckMemoryFunctions(filename, clean_lines, line, error)
+ for check_fn in extra_check_functions:
+ check_fn(filename, clean_lines, line, error)
+
+
+def ProcessFileData(filename, file_extension, lines, error,
+ extra_check_functions=[]):
+ """Performs lint checks and reports any errors to the given error function.
+
+ Args:
+ filename: Filename of the file that is being processed.
+ file_extension: The extension (dot not included) of the file.
+ lines: An array of strings, each representing a line of the file, with the
+ last element being empty if the file is terminated with a newline.
+ error: A callable to which errors are reported, which takes 4 arguments:
+ filename, line number, error level, and message
+ extra_check_functions: An array of additional check functions that will be
+ run on each source line. Each function takes 4
+ arguments: filename, clean_lines, line, error
+ """
+ lines = (['// marker so line numbers and indices both start at 1'] + lines +
+ ['// marker so line numbers end in a known way'])
+
+ include_state = _IncludeState()
+ function_state = _FunctionState()
+ nesting_state = _NestingState()
+
+ ResetNolintSuppressions()
+ ResetKnownErrorSuppressions()
+
+ for line in range(1, len(lines)):
+ ParseKnownErrorSuppressions(filename, lines, line)
+
+ init_lines = lines[:]
+
+ if _cpplint_state.record_errors_file:
+ def RecordedError(filename, linenum, category, confidence, message):
+ if not IsErrorSuppressedByNolint(category, linenum):
+ key = init_lines[linenum - 1 if linenum else 0:linenum + 2]
+ err = [filename, key, category]
+ json.dump(err, _cpplint_state.record_errors_file)
+ _cpplint_state.record_errors_file.write('\n')
+ Error(filename, linenum, category, confidence, message)
+
+ error = RecordedError
+
+ if file_extension == 'h':
+ CheckForHeaderGuard(filename, lines, error)
+
+ RemoveMultiLineComments(filename, lines, error)
+ clean_lines = CleansedLines(lines, init_lines)
+ for line in range(clean_lines.NumLines()):
+ ProcessLine(filename, file_extension, clean_lines, line,
+ include_state, function_state, nesting_state, error,
+ extra_check_functions)
+
+ # We check here rather than inside ProcessLine so that we see raw
+ # lines rather than "cleaned" lines.
+ CheckForBadCharacters(filename, lines, error)
+
+ CheckForNewlineAtEOF(filename, lines, error)
+
+
+def ProcessFile(filename, vlevel, extra_check_functions=[]):
+ """Does neovim-lint on a single file.
+
+ Args:
+ filename: The name of the file to parse.
+
+ vlevel: The level of errors to report. Every error of confidence
+ >= verbose_level will be reported. 0 is a good default.
+
+ extra_check_functions: An array of additional check functions that will be
+ run on each source line. Each function takes 4
+ arguments: filename, clean_lines, line, error
+ """
+
+ _SetVerboseLevel(vlevel)
+
+ try:
+ # Support the Unix convention of using "-" for stdin. Note that
+ # we are not opening the file with universal newline support
+ # (which codecs doesn't support anyway), so the resulting lines do
+ # contain trailing '\r' characters if we are reading a file that
+ # has CRLF endings.
+ # If after the split a trailing '\r' is present, it is removed
+ # below. If it is not expected to be present (i.e. os.linesep !=
+ # '\r\n' as in Windows), a warning is issued below if this file
+ # is processed.
+
+ if filename == '-':
+ lines = codecs.StreamReaderWriter(sys.stdin,
+ codecs.getreader('utf8'),
+ codecs.getwriter('utf8'),
+ 'replace').read().split('\n')
+ else:
+ lines = codecs.open(
+ filename, 'r', 'utf8', 'replace').read().split('\n')
+
+ carriage_return_found = False
+ # Remove trailing '\r'.
+ for linenum in range(len(lines)):
+ if lines[linenum].endswith('\r'):
+ lines[linenum] = lines[linenum].rstrip('\r')
+ carriage_return_found = True
+
+ except IOError:
+ sys.stderr.write(
+ "Skipping input '%s': Can't open for reading\n" % filename)
+ return
+
+ # Note, if no dot is found, this will give the entire filename as the ext.
+ file_extension = filename[filename.rfind('.') + 1:]
+
+ # When reading from stdin, the extension is unknown, so no cpplint tests
+ # should rely on the extension.
+ if filename != '-' and file_extension not in _valid_extensions:
+ sys.stderr.write('Ignoring {}; only linting {} files\n'.format(
+ filename,
+ ', '.join('.{}'.format(ext) for ext in _valid_extensions)))
+ else:
+ ProcessFileData(filename, file_extension, lines, Error,
+ extra_check_functions)
+ if carriage_return_found and os.linesep != '\r\n':
+ # Use 0 for linenum since outputting only one error for potentially
+ # several lines.
+ Error(filename, 0, 'whitespace/newline', 1,
+ 'One or more unexpected \\r (^M) found;'
+ 'better to use only a \\n')
+
+
+def PrintUsage(message):
+ """Prints a brief usage string and exits, optionally with an error message.
+
+ Args:
+ message: The optional error message.
+ """
+ if message:
+ sys.stderr.write(_USAGE)
+ sys.exit('\nFATAL ERROR: ' + message)
+ else:
+ sys.stdout.write(_USAGE)
+ sys.exit(0)
+
+
+def PrintCategories():
+ """Prints a list of all the error-categories used by error messages.
+
+ These are the categories used to filter messages via --filter.
+ """
+ sys.stdout.write(''.join(' %s\n' % cat for cat in _ERROR_CATEGORIES))
+ sys.exit(0)
+
+
+def ParseArguments(args):
+ """Parses the command line arguments.
+
+ This may set the output format and verbosity level as side-effects.
+
+ Args:
+ args: The command line arguments:
+
+ Returns:
+ The list of filenames to lint.
+ """
+ try:
+ (opts, filenames) = getopt.getopt(args, '', ['help',
+ 'output=',
+ 'verbose=',
+ 'counting=',
+ 'filter=',
+ 'root=',
+ 'linelength=',
+ 'extensions=',
+ 'record-errors=',
+ 'suppress-errors='])
+ except getopt.GetoptError:
+ PrintUsage('Invalid arguments.')
+
+ verbosity = _VerboseLevel()
+ output_format = _OutputFormat()
+ filters = ''
+ counting_style = ''
+ record_errors_file = None
+ suppress_errors_file = None
+
+ for (opt, val) in opts:
+ if opt == '--help':
+ PrintUsage(None)
+ elif opt == '--output':
+ if val not in ('emacs', 'vs7', 'eclipse'):
+ PrintUsage('The only allowed output formats are emacs,'
+ ' vs7 and eclipse.')
+ output_format = val
+ elif opt == '--verbose':
+ verbosity = int(val)
+ elif opt == '--filter':
+ filters = val
+ if not filters:
+ PrintCategories()
+ elif opt == '--counting':
+ if val not in ('total', 'toplevel', 'detailed'):
+ PrintUsage(
+ 'Valid counting options are total, toplevel, and detailed')
+ counting_style = val
+ elif opt == '--linelength':
+ global _line_length
+ try:
+ _line_length = int(val)
+ except ValueError:
+ PrintUsage('Line length must be digits.')
+ elif opt == '--extensions':
+ global _valid_extensions
+ try:
+ _valid_extensions = set(val.split(','))
+ except ValueError:
+ PrintUsage('Extensions must be comma separated list.')
+ elif opt == '--record-errors':
+ record_errors_file = val
+ elif opt == '--suppress-errors':
+ suppress_errors_file = val
+
+ if not filenames:
+ PrintUsage('No files were specified.')
+
+ _SetOutputFormat(output_format)
+ _SetVerboseLevel(verbosity)
+ _SetFilters(filters)
+ _SetCountingStyle(counting_style)
+ _SuppressErrorsFrom(suppress_errors_file)
+ _RecordErrorsTo(record_errors_file)
+
+ return filenames
+
+
+def main():
+ filenames = ParseArguments(sys.argv[1:])
+
+ _cpplint_state.ResetErrorCounts()
+ for filename in filenames:
+ ProcessFile(filename, _cpplint_state.verbose_level)
+ _cpplint_state.PrintErrorCounts()
+
+ sys.exit(_cpplint_state.error_count > 0)
+
+
+if __name__ == '__main__':
+ main()
+
+# vim: ts=4 sts=4 sw=4
+
+# Ignore "too complex" warnings when using pymode.
+# pylama:ignore=C901
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt
index 172643091a..5a658691ce 100644
--- a/src/nvim/CMakeLists.txt
+++ b/src/nvim/CMakeLists.txt
@@ -1,6 +1,3 @@
-include(CheckLibraryExists)
-include(CheckCCompilerFlag)
-
option(USE_GCOV "Enable gcov support" OFF)
if(NOT CLANG_TSAN)
@@ -14,31 +11,37 @@ endif()
endif()
set(GENERATED_DIR ${PROJECT_BINARY_DIR}/src/nvim/auto)
-set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/msgpack-gen.lua)
+set(DISPATCH_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendispatch.lua)
file(GLOB API_HEADERS api/*.h)
file(GLOB MSGPACK_RPC_HEADERS msgpack_rpc/*.h)
-set(MSGPACK_DISPATCH ${GENERATED_DIR}/msgpack_dispatch.c)
+set(API_METADATA ${PROJECT_BINARY_DIR}/api_metadata.mpack)
+set(FUNCS_DATA ${PROJECT_BINARY_DIR}/funcs_data.mpack)
set(HEADER_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendeclarations.lua)
set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include)
+set(GENERATED_API_DISPATCH ${GENERATED_DIR}/api/private/dispatch_wrappers.generated.h)
+set(GENERATED_FUNCS_METADATA ${GENERATED_DIR}/api/private/funcs_metadata.generated.h)
set(GENERATED_EX_CMDS_ENUM ${GENERATED_INCLUDES_DIR}/ex_cmds_enum.generated.h)
set(GENERATED_EX_CMDS_DEFS ${GENERATED_DIR}/ex_cmds_defs.generated.h)
+set(GENERATED_FUNCS_HASH_INPUT ${GENERATED_DIR}/funcs.generated.h.gperf)
+set(GENERATED_FUNCS ${GENERATED_DIR}/funcs.generated.h)
set(GENERATED_EVENTS_ENUM ${GENERATED_INCLUDES_DIR}/auevents_enum.generated.h)
set(GENERATED_EVENTS_NAMES_MAP ${GENERATED_DIR}/auevents_name_map.generated.h)
set(GENERATED_OPTIONS ${GENERATED_DIR}/options.generated.h)
set(EX_CMDS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genex_cmds.lua)
+set(FUNCS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/geneval.lua)
set(EVENTS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gen_events.lua)
set(OPTIONS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genoptions.lua)
set(EVENTS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua)
set(EX_CMDS_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua)
+set(EVAL_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/eval.lua)
set(OPTIONS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/options.lua)
set(UNICODE_TABLES_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genunicodetables.lua)
set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
-set(UNICODEDATA_FILE ${UNICODE_DIR}/UnicodeData.txt)
-set(CASEFOLDING_FILE ${UNICODE_DIR}/CaseFolding.txt)
-set(EASTASIANWIDTH_FILE ${UNICODE_DIR}/EastAsianWidth.txt)
+file(GLOB UNICODE_FILES ${UNICODE_DIR}/*.txt)
set(GENERATED_UNICODE_TABLES ${GENERATED_DIR}/unicode_tables.generated.h)
include_directories(${GENERATED_DIR})
+include_directories(${CACHED_GENERATED_DIR})
include_directories(${GENERATED_INCLUDES_DIR})
file(MAKE_DIRECTORY ${GENERATED_DIR})
@@ -55,6 +58,10 @@ foreach(subdir
event
eval
)
+ if(${subdir} MATCHES "tui" AND NOT FEAT_TUI)
+ continue()
+ endif()
+
file(MAKE_DIRECTORY ${GENERATED_DIR}/${subdir})
file(MAKE_DIRECTORY ${GENERATED_INCLUDES_DIR}/${subdir})
file(GLOB sources ${subdir}/*.c)
@@ -74,11 +81,14 @@ foreach(sfile ${NEOVIM_SOURCES})
if(${f} MATCHES "^(regexp_nfa.c)$")
list(APPEND to_remove ${sfile})
endif()
+ if(WIN32 AND ${f} MATCHES "^(pty_process_unix.c)$")
+ list(APPEND to_remove ${sfile})
+ endif()
endforeach()
list(REMOVE_ITEM NEOVIM_SOURCES ${to_remove})
-# Handle legacy files that don't yet pass -Wconversion.
+# Legacy files that do not yet pass -Wconversion.
set(CONV_SOURCES
buffer.c
diff.c
@@ -91,7 +101,6 @@ set(CONV_SOURCES
mbyte.c
memline.c
message.c
- ops.c
regexp.c
screen.c
search.c
@@ -109,6 +118,15 @@ endforeach()
if(NOT MSVC)
set_source_files_properties(
${CONV_SOURCES} PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion")
+ # gperf generates ANSI-C with incorrect linkage, ignore it.
+ check_c_compiler_flag(-Wno-static-in-inline HAS_WNO_STATIC_IN_INLINE_FLAG)
+ if(HAS_WNO_STATIC_IN_INLINE_FLAG)
+ set_source_files_properties(
+ eval.c PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-static-in-inline -Wno-conversion")
+ else()
+ set_source_files_properties(
+ eval.c PROPERTIES COMPILE_FLAGS "${COMPILE_FLAGS} -Wno-conversion")
+ endif()
endif()
if(DEFINED MIN_LOG_LEVEL)
@@ -135,9 +153,13 @@ separate_arguments(C_FLAGS_${build_type}_ARRAY UNIX_COMMAND ${CMAKE_C_FLAGS_${bu
set(gen_cflags ${gen_cflags} ${C_FLAGS_${build_type}_ARRAY} ${C_FLAGS_ARRAY})
foreach(sfile ${NEOVIM_SOURCES}
- "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c")
+ "${PROJECT_SOURCE_DIR}/src/nvim/regexp_nfa.c"
+ ${GENERATED_API_DISPATCH})
get_filename_component(full_d ${sfile} PATH)
file(RELATIVE_PATH d "${PROJECT_SOURCE_DIR}/src/nvim" "${full_d}")
+ if(${d} MATCHES "^([.][.]|auto/)")
+ file(RELATIVE_PATH d "${GENERATED_DIR}" "${full_d}")
+ endif()
get_filename_component(f ${sfile} NAME)
get_filename_component(r ${sfile} NAME_WE)
if(NOT ${d} EQUAL ".")
@@ -169,28 +191,28 @@ endforeach()
add_custom_command(OUTPUT ${GENERATED_UNICODE_TABLES}
COMMAND ${LUA_PRG} ${UNICODE_TABLES_GENERATOR}
- ${UNICODEDATA_FILE}
- ${CASEFOLDING_FILE}
- ${EASTASIANWIDTH_FILE}
+ ${UNICODE_DIR}
${GENERATED_UNICODE_TABLES}
DEPENDS
${UNICODE_TABLES_GENERATOR}
- ${UNICODEDATA_FILE}
- ${CASEFOLDING_FILE}
- ${EASTASIANWIDTH_FILE}
+ ${UNICODE_FILES}
)
-add_custom_command(OUTPUT ${MSGPACK_DISPATCH}
- COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${API_HEADERS} ${MSGPACK_DISPATCH}
+add_custom_command(OUTPUT ${GENERATED_API_DISPATCH} ${GENERATED_FUNCS_METADATA}
+ ${API_METADATA}
+ COMMAND ${LUA_PRG} ${DISPATCH_GENERATOR} ${CMAKE_CURRENT_LIST_DIR}
+ ${API_HEADERS} ${GENERATED_API_DISPATCH}
+ ${GENERATED_FUNCS_METADATA} ${API_METADATA}
DEPENDS
${API_HEADERS}
${MSGPACK_RPC_HEADERS}
${DISPATCH_GENERATOR}
+ ${CMAKE_CURRENT_LIST_DIR}/api/dispatch_deprecated.lua
)
list(APPEND NEOVIM_GENERATED_SOURCES
"${PROJECT_BINARY_DIR}/config/auto/pathdef.c"
- "${MSGPACK_DISPATCH}"
+ "${GENERATED_API_DISPATCH}"
"${GENERATED_EX_CMDS_ENUM}"
"${GENERATED_EX_CMDS_DEFS}"
"${GENERATED_EVENTS_ENUM}"
@@ -205,6 +227,19 @@ add_custom_command(OUTPUT ${GENERATED_EX_CMDS_ENUM} ${GENERATED_EX_CMDS_DEFS}
DEPENDS ${EX_CMDS_GENERATOR} ${EX_CMDS_DEFS_FILE}
)
+if(NOT GPERF_PRG)
+ message(FATAL_ERROR "gperf was not found.")
+endif()
+add_custom_command(OUTPUT ${GENERATED_FUNCS} ${FUNCS_DATA}
+ COMMAND ${LUA_PRG} ${FUNCS_GENERATOR}
+ ${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_DIR} ${API_METADATA} ${FUNCS_DATA}
+ COMMAND ${GPERF_PRG}
+ ${GENERATED_FUNCS_HASH_INPUT} --output-file=${GENERATED_FUNCS}
+ DEPENDS ${FUNCS_GENERATOR} ${EVAL_DEFS_FILE} ${API_METADATA}
+)
+list(APPEND NEOVIM_GENERATED_SOURCES
+ "${GENERATED_FUNCS}")
+
add_custom_command(OUTPUT ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
COMMAND ${LUA_PRG} ${EVENTS_GENERATOR}
${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
@@ -256,6 +291,43 @@ add_executable(nvim ${NEOVIM_GENERATED_SOURCES} ${NEOVIM_SOURCES}
target_link_libraries(nvim ${NVIM_EXEC_LINK_LIBRARIES})
install_helper(TARGETS nvim)
+if(WIN32)
+ # Copy DLLs and third-party tools to bin/ and install them along with nvim
+ add_custom_target(nvim_runtime_deps ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps/
+ ${CMAKE_RUNTIME_OUTPUT_DIRECTORY})
+ install(DIRECTORY ${PROJECT_BINARY_DIR}/windows_runtime_deps/
+ DESTINATION ${CMAKE_INSTALL_BINDIR})
+
+ foreach(BIN win32yank.exe)
+ unset(BIN_PATH CACHE)
+ find_program(BIN_PATH ${BIN})
+ if(NOT BIN_PATH)
+ message(FATAL_ERROR "Unable to find external dependency ${BIN}")
+ endif()
+
+ add_custom_target(external_${BIN}
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
+ COMMAND ${CMAKE_COMMAND}
+ "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
+ -DBINARY="${BIN_PATH}"
+ -DDST=${PROJECT_BINARY_DIR}/windows_runtime_deps
+ -P ${PROJECT_SOURCE_DIR}/cmake/WindowsDllCopy.cmake
+ COMMAND ${CMAKE_COMMAND} -E copy ${BIN_PATH} ${PROJECT_BINARY_DIR}/windows_runtime_deps/
+ COMMENT "${BIN_PATH}")
+ add_dependencies(nvim_runtime_deps "external_${BIN}")
+ endforeach()
+
+ add_custom_target(nvim_dll_deps DEPENDS nvim
+ COMMAND ${CMAKE_COMMAND} -E make_directory ${PROJECT_BINARY_DIR}/windows_runtime_deps
+ COMMAND ${CMAKE_COMMAND}
+ "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
+ -DBINARY="${PROJECT_BINARY_DIR}/bin/nvim${CMAKE_EXECUTABLE_SUFFIX}"
+ -DDST=${PROJECT_BINARY_DIR}/windows_runtime_deps
+ -P ${PROJECT_SOURCE_DIR}/cmake/WindowsDllCopy.cmake)
+ add_dependencies(nvim_runtime_deps nvim_dll_deps)
+endif()
+
if(CLANG_ASAN_UBSAN)
message(STATUS "Enabling Clang address sanitizer and undefined behavior sanitizer for nvim.")
check_c_compiler_flag(-fno-sanitize-recover=all SANITIZE_RECOVER_ALL)
@@ -265,7 +337,7 @@ if(CLANG_ASAN_UBSAN)
set(SANITIZE_RECOVER -fno-sanitize-recover) # Clang 3.5-
endif()
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
- set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "${SANITIZE_RECOVER} -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/.asan-blacklist")
+ set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "${SANITIZE_RECOVER} -fno-omit-frame-pointer -fno-optimize-sibling-calls -fsanitize=address -fsanitize=undefined -fsanitize-blacklist=${PROJECT_SOURCE_DIR}/src/.asan-blacklist")
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=address -fsanitize=undefined ")
elseif(CLANG_MSAN)
message(STATUS "Enabling Clang memory sanitizer for nvim.")
@@ -276,6 +348,7 @@ elseif(CLANG_TSAN)
message(STATUS "Enabling Clang thread sanitizer for nvim.")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-DEXITFREE ")
set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fsanitize=thread ")
+ set_property(TARGET nvim APPEND_STRING PROPERTY COMPILE_FLAGS "-fPIE ")
set_property(TARGET nvim APPEND_STRING PROPERTY LINK_FLAGS "-fsanitize=thread ")
endif()
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c
index 55b535c78c..eaaae943d2 100644
--- a/src/nvim/api/buffer.c
+++ b/src/nvim/api/buffer.c
@@ -14,7 +14,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/ex_cmds.h"
#include "nvim/mark.h"
#include "nvim/fileio.h"
@@ -29,10 +28,10 @@
/// Gets the buffer line count
///
-/// @param buffer The buffer handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The line count
-Integer buffer_line_count(Buffer buffer, Error *err)
+/// @param buffer Buffer handle
+/// @param[out] err Error details, if any
+/// @return Line count
+Integer nvim_buf_line_count(Buffer buffer, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -45,22 +44,22 @@ Integer buffer_line_count(Buffer buffer, Error *err)
/// Gets a buffer line
///
-/// @deprecated use buffer_get_lines instead.
+/// @deprecated use nvim_buf_get_lines instead.
/// for positive indices (including 0) use
-/// "buffer_get_lines(buffer, index, index+1, true)"
+/// "nvim_buf_get_lines(buffer, index, index+1, true)"
/// for negative indices use
-/// "buffer_get_lines(buffer, index-1, index, true)"
+/// "nvim_buf_get_lines(buffer, index-1, index, true)"
///
-/// @param buffer The buffer handle
-/// @param index The line index
-/// @param[out] err Details of an error that may have occurred
-/// @return The line string
+/// @param buffer Buffer handle
+/// @param index Line index
+/// @param[out] err Error details, if any
+/// @return Line string
String buffer_get_line(Buffer buffer, Integer index, Error *err)
{
String rv = { .size = 0 };
index = convert_index(index);
- Array slice = buffer_get_lines(buffer, index, index+1, true, err);
+ Array slice = nvim_buf_get_lines(0, buffer, index, index+1, true, err);
if (!err->set && slice.size) {
rv = slice.items[0].data.string;
@@ -73,64 +72,64 @@ String buffer_get_line(Buffer buffer, Integer index, Error *err)
/// Sets a buffer line
///
-/// @deprecated use buffer_set_lines instead.
+/// @deprecated use nvim_buf_set_lines instead.
/// for positive indices use
-/// "buffer_set_lines(buffer, index, index+1, true, [line])"
+/// "nvim_buf_set_lines(buffer, index, index+1, true, [line])"
/// for negative indices use
-/// "buffer_set_lines(buffer, index-1, index, true, [line])"
+/// "nvim_buf_set_lines(buffer, index-1, index, true, [line])"
///
-/// @param buffer The buffer handle
-/// @param index The line index
-/// @param line The new line.
-/// @param[out] err Details of an error that may have occurred
+/// @param buffer Buffer handle
+/// @param index Line index
+/// @param line Contents of the new line
+/// @param[out] err Error details, if any
void buffer_set_line(Buffer buffer, Integer index, String line, Error *err)
{
Object l = STRING_OBJ(line);
Array array = { .items = &l, .size = 1 };
index = convert_index(index);
- buffer_set_lines(buffer, index, index+1, true, array, err);
+ nvim_buf_set_lines(0, buffer, index, index+1, true, array, err);
}
/// Deletes a buffer line
///
-/// @deprecated use buffer_set_lines instead.
+/// @deprecated use nvim_buf_set_lines instead.
/// for positive indices use
-/// "buffer_set_lines(buffer, index, index+1, true, [])"
+/// "nvim_buf_set_lines(buffer, index, index+1, true, [])"
/// for negative indices use
-/// "buffer_set_lines(buffer, index-1, index, true, [])"
-/// @param buffer The buffer handle
-/// @param index The line index
-/// @param[out] err Details of an error that may have occurred
+/// "nvim_buf_set_lines(buffer, index-1, index, true, [])"
+/// @param buffer buffer handle
+/// @param index line index
+/// @param[out] err Error details, if any
void buffer_del_line(Buffer buffer, Integer index, Error *err)
{
Array array = ARRAY_DICT_INIT;
index = convert_index(index);
- buffer_set_lines(buffer, index, index+1, true, array, err);
+ nvim_buf_set_lines(0, buffer, index, index+1, true, array, err);
}
/// Retrieves a line range from the buffer
///
-/// @deprecated use buffer_get_lines(buffer, newstart, newend, false)
+/// @deprecated use nvim_buf_get_lines(buffer, newstart, newend, false)
/// where newstart = start + int(not include_start) - int(start < 0)
/// newend = end + int(include_end) - int(end < 0)
/// int(bool) = 1 if bool is true else 0
-/// @param buffer The buffer handle
-/// @param start The first line index
-/// @param end The last line index
-/// @param include_start True if the slice includes the `start` parameter
-/// @param include_end True if the slice includes the `end` parameter
-/// @param[out] err Details of an error that may have occurred
-/// @return An array of lines
+/// @param buffer Buffer handle
+/// @param start First line index
+/// @param end Last line index
+/// @param include_start True if the slice includes the `start` parameter
+/// @param include_end True if the slice includes the `end` parameter
+/// @param[out] err Error details, if any
+/// @return Array of lines
ArrayOf(String) buffer_get_line_slice(Buffer buffer,
- Integer start,
- Integer end,
- Boolean include_start,
- Boolean include_end,
- Error *err)
+ Integer start,
+ Integer end,
+ Boolean include_start,
+ Boolean include_end,
+ Error *err)
{
start = convert_index(start) + !include_start;
end = convert_index(end) + include_end;
- return buffer_get_lines(buffer, start , end, false, err);
+ return nvim_buf_get_lines(0, buffer, start , end, false, err);
}
@@ -143,17 +142,18 @@ ArrayOf(String) buffer_get_line_slice(Buffer buffer,
/// Out-of-bounds indices are clamped to the nearest valid value, unless
/// `strict_indexing` is set.
///
-/// @param buffer The buffer handle
-/// @param start The first line index
-/// @param end The last line index (exclusive)
-/// @param strict_indexing whether out-of-bounds should be an error.
-/// @param[out] err Details of an error that may have occurred
-/// @return An array of lines
-ArrayOf(String) buffer_get_lines(Buffer buffer,
- Integer start,
- Integer end,
- Boolean strict_indexing,
- Error *err)
+/// @param buffer Buffer handle
+/// @param start First line index
+/// @param end Last line index (exclusive)
+/// @param strict_indexing Whether out-of-bounds should be an error.
+/// @param[out] err Error details, if any
+/// @return Array of lines
+ArrayOf(String) nvim_buf_get_lines(uint64_t channel_id,
+ Buffer buffer,
+ Integer start,
+ Integer end,
+ Boolean strict_indexing,
+ Error *err)
{
Array rv = ARRAY_DICT_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -191,7 +191,9 @@ ArrayOf(String) buffer_get_lines(Buffer buffer,
Object str = STRING_OBJ(cstr_to_string(bufstr));
// Vim represents NULs as NLs, but this may confuse clients.
- strchrsub(str.data.string.data, '\n', '\0');
+ if (channel_id != INTERNAL_CALL) {
+ strchrsub(str.data.string.data, '\n', '\0');
+ }
rv.items[i] = str;
}
@@ -212,30 +214,30 @@ end:
/// Replaces a line range on the buffer
///
-/// @deprecated use buffer_set_lines(buffer, newstart, newend, false, lines)
+/// @deprecated use nvim_buf_set_lines(buffer, newstart, newend, false, lines)
/// where newstart = start + int(not include_start) + int(start < 0)
/// newend = end + int(include_end) + int(end < 0)
/// int(bool) = 1 if bool is true else 0
///
-/// @param buffer The buffer handle
-/// @param start The first line index
-/// @param end The last line index
-/// @param include_start True if the slice includes the `start` parameter
-/// @param include_end True if the slice includes the `end` parameter
-/// @param replacement An array of lines to use as replacement(A 0-length
-// array will simply delete the line range)
-/// @param[out] err Details of an error that may have occurred
+/// @param buffer Buffer handle
+/// @param start First line index
+/// @param end Last line index
+/// @param include_start True if the slice includes the `start` parameter
+/// @param include_end True if the slice includes the `end` parameter
+/// @param replacement Array of lines to use as replacement (0-length
+// array will delete the line range)
+/// @param[out] err Error details, if any
void buffer_set_line_slice(Buffer buffer,
- Integer start,
- Integer end,
- Boolean include_start,
- Boolean include_end,
- ArrayOf(String) replacement,
- Error *err)
+ Integer start,
+ Integer end,
+ Boolean include_start,
+ Boolean include_end,
+ ArrayOf(String) replacement, // NOLINT
+ Error *err)
{
start = convert_index(start) + !include_start;
end = convert_index(end) + include_end;
- buffer_set_lines(buffer, start, end, false, replacement, err);
+ nvim_buf_set_lines(0, buffer, start, end, false, replacement, err);
}
@@ -251,18 +253,19 @@ void buffer_set_line_slice(Buffer buffer,
/// Out-of-bounds indices are clamped to the nearest valid value, unless
/// `strict_indexing` is set.
///
-/// @param buffer The buffer handle
-/// @param start The first line index
-/// @param end The last line index (exclusive)
-/// @param strict_indexing whether out-of-bounds should be an error.
-/// @param replacement An array of lines to use as replacement
-/// @param[out] err Details of an error that may have occurred
-void buffer_set_lines(Buffer buffer,
- Integer start,
- Integer end,
- Boolean strict_indexing,
- ArrayOf(String) replacement,
- Error *err)
+/// @param buffer Buffer handle
+/// @param start First line index
+/// @param end Last line index (exclusive)
+/// @param strict_indexing Whether out-of-bounds should be an error.
+/// @param replacement Array of lines to use as replacement
+/// @param[out] err Error details, if any
+void nvim_buf_set_lines(uint64_t channel_id,
+ Buffer buffer,
+ Integer start,
+ Integer end,
+ Boolean strict_indexing,
+ ArrayOf(String) replacement, // NOLINT
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -309,7 +312,7 @@ void buffer_set_lines(Buffer buffer,
// line and convert NULs to newlines to avoid truncation.
lines[i] = xmallocz(l.size);
for (size_t j = 0; j < l.size; j++) {
- if (l.data[j] == '\n') {
+ if (l.data[j] == '\n' && channel_id != INTERNAL_CALL) {
api_set_error(err, Exception, _("string cannot contain newlines"));
new_len = i + 1;
goto end;
@@ -408,11 +411,11 @@ end:
/// Gets a buffer-scoped (b:) variable.
///
-/// @param buffer The buffer handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The variable value
-Object buffer_get_var(Buffer buffer, String name, Error *err)
+/// @param buffer Buffer handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Variable value
+Object nvim_buf_get_var(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -425,11 +428,46 @@ Object buffer_get_var(Buffer buffer, String name, Error *err)
/// Sets a buffer-scoped (b:) variable
///
-/// @param buffer The buffer handle
-/// @param name The variable name
-/// @param value The variable value
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @param buffer Buffer handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+void nvim_buf_set_var(Buffer buffer, String name, Object value, Error *err)
+{
+ buf_T *buf = find_buffer_by_handle(buffer, err);
+
+ if (!buf) {
+ return;
+ }
+
+ dict_set_value(buf->b_vars, name, value, false, false, err);
+}
+
+/// Removes a buffer-scoped (b:) variable
+///
+/// @param buffer Buffer handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+void nvim_buf_del_var(Buffer buffer, String name, Error *err)
+{
+ buf_T *buf = find_buffer_by_handle(buffer, err);
+
+ if (!buf) {
+ return;
+ }
+
+ dict_set_value(buf->b_vars, name, NIL, true, false, err);
+}
+
+/// Sets a buffer-scoped (b:) variable
+///
+/// @deprecated
+///
+/// @param buffer Buffer handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+/// @return Old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
/// or if previous value was `v:null`.
@@ -441,18 +479,17 @@ Object buffer_set_var(Buffer buffer, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(buf->b_vars, name, value, false, err);
+ return dict_set_value(buf->b_vars, name, value, false, true, err);
}
/// Removes a buffer-scoped (b:) variable
///
-/// @param buffer The buffer handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @deprecated
///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @param buffer Buffer handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Old value
Object buffer_del_var(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -461,16 +498,17 @@ Object buffer_del_var(Buffer buffer, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(buf->b_vars, name, NIL, true, err);
+ return dict_set_value(buf->b_vars, name, NIL, true, true, err);
}
+
/// Gets a buffer option value
///
-/// @param buffer The buffer handle
-/// @param name The option name
-/// @param[out] err Details of an error that may have occurred
-/// @return The option value
-Object buffer_get_option(Buffer buffer, String name, Error *err)
+/// @param buffer Buffer handle
+/// @param name Option name
+/// @param[out] err Error details, if any
+/// @return Option value
+Object nvim_buf_get_option(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -481,14 +519,14 @@ Object buffer_get_option(Buffer buffer, String name, Error *err)
return get_option_from(buf, SREQ_BUF, name, err);
}
-/// Sets a buffer option value. Passing 'nil' as value deletes the option(only
+/// Sets a buffer option value. Passing 'nil' as value deletes the option (only
/// works if there's a global fallback)
///
-/// @param buffer The buffer handle
-/// @param name The option name
-/// @param value The option value
-/// @param[out] err Details of an error that may have occurred
-void buffer_set_option(Buffer buffer, String name, Object value, Error *err)
+/// @param buffer Buffer handle
+/// @param name Option name
+/// @param value Option value
+/// @param[out] err Error details, if any
+void nvim_buf_set_option(Buffer buffer, String name, Object value, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -501,10 +539,10 @@ void buffer_set_option(Buffer buffer, String name, Object value, Error *err)
/// Gets the buffer number
///
-/// @param buffer The buffer handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The buffer number
-Integer buffer_get_number(Buffer buffer, Error *err)
+/// @param buffer Buffer handle
+/// @param[out] err Error details, if any
+/// @return Buffer number
+Integer nvim_buf_get_number(Buffer buffer, Error *err)
{
Integer rv = 0;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -518,10 +556,10 @@ Integer buffer_get_number(Buffer buffer, Error *err)
/// Gets the full file name for the buffer
///
-/// @param buffer The buffer handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The buffer name
-String buffer_get_name(Buffer buffer, Error *err)
+/// @param buffer Buffer handle
+/// @param[out] err Error details, if any
+/// @return Buffer name
+String nvim_buf_get_name(Buffer buffer, Error *err)
{
String rv = STRING_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -535,10 +573,10 @@ String buffer_get_name(Buffer buffer, Error *err)
/// Sets the full file name for a buffer
///
-/// @param buffer The buffer handle
-/// @param name The buffer name
-/// @param[out] err Details of an error that may have occurred
-void buffer_set_name(Buffer buffer, String name, Error *err)
+/// @param buffer Buffer handle
+/// @param name Buffer name
+/// @param[out] err Error details, if any
+void nvim_buf_set_name(Buffer buffer, String name, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -565,9 +603,9 @@ void buffer_set_name(Buffer buffer, String name, Error *err)
/// Checks if a buffer is valid
///
-/// @param buffer The buffer handle
+/// @param buffer Buffer handle
/// @return true if the buffer is valid, false otherwise
-Boolean buffer_is_valid(Buffer buffer)
+Boolean nvim_buf_is_valid(Buffer buffer)
{
Error stub = ERROR_INIT;
return find_buffer_by_handle(buffer, &stub) != NULL;
@@ -575,13 +613,13 @@ Boolean buffer_is_valid(Buffer buffer)
/// Inserts a sequence of lines to a buffer at a certain index
///
-/// @deprecated use buffer_set_lines(buffer, lnum, lnum, true, lines)
+/// @deprecated use nvim_buf_set_lines(buffer, lnum, lnum, true, lines)
///
-/// @param buffer The buffer handle
-/// @param lnum Insert the lines after `lnum`. If negative, it will append
-/// to the end of the buffer.
-/// @param lines An array of lines
-/// @param[out] err Details of an error that may have occurred
+/// @param buffer Buffer handle
+/// @param lnum Insert the lines after `lnum`. If negative, appends to
+/// the end of the buffer.
+/// @param lines Array of lines
+/// @param[out] err Error details, if any
void buffer_insert(Buffer buffer,
Integer lnum,
ArrayOf(String) lines,
@@ -589,16 +627,16 @@ void buffer_insert(Buffer buffer,
{
// "lnum" will be the index of the line after inserting,
// no matter if it is negative or not
- buffer_set_lines(buffer, lnum, lnum, true, lines, err);
+ nvim_buf_set_lines(0, buffer, lnum, lnum, true, lines, err);
}
/// Return a tuple (row,col) representing the position of the named mark
///
-/// @param buffer The buffer handle
-/// @param name The mark's name
-/// @param[out] err Details of an error that may have occurred
-/// @return The (row, col) tuple
-ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
+/// @param buffer Buffer handle
+/// @param name Mark name
+/// @param[out] err Error details, if any
+/// @return (row, col) tuple
+ArrayOf(Integer, 2) nvim_buf_get_mark(Buffer buffer, String name, Error *err)
{
Array rv = ARRAY_DICT_INIT;
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -648,7 +686,7 @@ ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
/// called with src_id = 0, an unique source id is generated and returned.
/// Succesive calls can pass in it as "src_id" to add new highlights to the same
/// source group. All highlights in the same group can then be cleared with
-/// buffer_clear_highlight. If the highlight never will be manually deleted
+/// nvim_buf_clear_highlight. If the highlight never will be manually deleted
/// pass in -1 for "src_id".
///
/// If "hl_group" is the empty string no highlight is added, but a new src_id
@@ -656,23 +694,23 @@ ArrayOf(Integer, 2) buffer_get_mark(Buffer buffer, String name, Error *err)
/// request an unique src_id at initialization, and later asynchronously add and
/// clear highlights in response to buffer changes.
///
-/// @param buffer The buffer handle
-/// @param src_id Source group to use or 0 to use a new group,
-/// or -1 for ungrouped highlight
-/// @param hl_group Name of the highlight group to use
-/// @param line The line to highlight
-/// @param col_start Start of range of columns to highlight
-/// @param col_end End of range of columns to highlight,
-/// or -1 to highlight to end of line
-/// @param[out] err Details of an error that may have occurred
+/// @param buffer Buffer handle
+/// @param src_id Source group to use or 0 to use a new group,
+/// or -1 for ungrouped highlight
+/// @param hl_group Name of the highlight group to use
+/// @param line Line to highlight
+/// @param col_start Start of range of columns to highlight
+/// @param col_end End of range of columns to highlight,
+/// or -1 to highlight to end of line
+/// @param[out] err Error details, if any
/// @return The src_id that was used
-Integer buffer_add_highlight(Buffer buffer,
- Integer src_id,
- String hl_group,
- Integer line,
- Integer col_start,
- Integer col_end,
- Error *err)
+Integer nvim_buf_add_highlight(Buffer buffer,
+ Integer src_id,
+ String hl_group,
+ Integer line,
+ Integer col_start,
+ Integer col_end,
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
if (!buf) {
@@ -691,7 +729,7 @@ Integer buffer_add_highlight(Buffer buffer,
col_end = MAXCOL;
}
- int hlg_id = syn_name2id((char_u*)hl_group.data);
+ int hlg_id = syn_name2id((char_u *)(hl_group.data ? hl_group.data : ""));
src_id = bufhl_add_hl(buf, (int)src_id, hlg_id, (linenr_T)line+1,
(colnr_T)col_start+1, (colnr_T)col_end);
return src_id;
@@ -702,17 +740,17 @@ Integer buffer_add_highlight(Buffer buffer,
/// To clear a source group in the entire buffer, pass in 1 and -1 to
/// line_start and line_end respectively.
///
-/// @param buffer The buffer handle
-/// @param src_id Highlight source group to clear, or -1 to clear all groups.
+/// @param buffer Buffer handle
+/// @param src_id Highlight source group to clear, or -1 to clear all.
/// @param line_start Start of range of lines to clear
-/// @param line_end End of range of lines to clear (exclusive)
-/// or -1 to clear to end of file.
-/// @param[out] err Details of an error that may have occurred
-void buffer_clear_highlight(Buffer buffer,
- Integer src_id,
- Integer line_start,
- Integer line_end,
- Error *err)
+/// @param line_end End of range of lines to clear (exclusive) or -1 to clear
+/// to end of file.
+/// @param[out] err Error details, if any
+void nvim_buf_clear_highlight(Buffer buffer,
+ Integer src_id,
+ Integer line_start,
+ Integer line_end,
+ Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
if (!buf) {
diff --git a/src/nvim/api/dispatch_deprecated.lua b/src/nvim/api/dispatch_deprecated.lua
new file mode 100644
index 0000000000..5650a77ac0
--- /dev/null
+++ b/src/nvim/api/dispatch_deprecated.lua
@@ -0,0 +1,69 @@
+local deprecated_aliases = {
+ nvim_buf_add_highlight="buffer_add_highlight",
+ nvim_buf_clear_highlight="buffer_clear_highlight",
+ nvim_buf_get_lines="buffer_get_lines",
+ nvim_buf_get_mark="buffer_get_mark",
+ nvim_buf_get_name="buffer_get_name",
+ nvim_buf_get_number="buffer_get_number",
+ nvim_buf_get_option="buffer_get_option",
+ nvim_buf_get_var="buffer_get_var",
+ nvim_buf_is_valid="buffer_is_valid",
+ nvim_buf_line_count="buffer_line_count",
+ nvim_buf_set_lines="buffer_set_lines",
+ nvim_buf_set_name="buffer_set_name",
+ nvim_buf_set_option="buffer_set_option",
+ nvim_call_function="vim_call_function",
+ nvim_command="vim_command",
+ nvim_command_output="vim_command_output",
+ nvim_del_current_line="vim_del_current_line",
+ nvim_err_write="vim_err_write",
+ nvim_err_writeln="vim_report_error",
+ nvim_eval="vim_eval",
+ nvim_feedkeys="vim_feedkeys",
+ nvim_get_api_info="vim_get_api_info",
+ nvim_get_color_by_name="vim_name_to_color",
+ nvim_get_color_map="vim_get_color_map",
+ nvim_get_current_buf="vim_get_current_buffer",
+ nvim_get_current_line="vim_get_current_line",
+ nvim_get_current_tabpage="vim_get_current_tabpage",
+ nvim_get_current_win="vim_get_current_window",
+ nvim_get_option="vim_get_option",
+ nvim_get_var="vim_get_var",
+ nvim_get_vvar="vim_get_vvar",
+ nvim_input="vim_input",
+ nvim_list_bufs="vim_get_buffers",
+ nvim_list_runtime_paths="vim_list_runtime_paths",
+ nvim_list_tabpages="vim_get_tabpages",
+ nvim_list_wins="vim_get_windows",
+ nvim_out_write="vim_out_write",
+ nvim_replace_termcodes="vim_replace_termcodes",
+ nvim_set_current_buf="vim_set_current_buffer",
+ nvim_set_current_dir="vim_change_directory",
+ nvim_set_current_line="vim_set_current_line",
+ nvim_set_current_tabpage="vim_set_current_tabpage",
+ nvim_set_current_win="vim_set_current_window",
+ nvim_set_option="vim_set_option",
+ nvim_strwidth="vim_strwidth",
+ nvim_subscribe="vim_subscribe",
+ nvim_tabpage_get_var="tabpage_get_var",
+ nvim_tabpage_get_win="tabpage_get_window",
+ nvim_tabpage_is_valid="tabpage_is_valid",
+ nvim_tabpage_list_wins="tabpage_get_windows",
+ nvim_ui_detach="ui_detach",
+ nvim_ui_try_resize="ui_try_resize",
+ nvim_unsubscribe="vim_unsubscribe",
+ nvim_win_get_buf="window_get_buffer",
+ nvim_win_get_cursor="window_get_cursor",
+ nvim_win_get_height="window_get_height",
+ nvim_win_get_option="window_get_option",
+ nvim_win_get_position="window_get_position",
+ nvim_win_get_tabpage="window_get_tabpage",
+ nvim_win_get_var="window_get_var",
+ nvim_win_get_width="window_get_width",
+ nvim_win_is_valid="window_is_valid",
+ nvim_win_set_cursor="window_set_cursor",
+ nvim_win_set_height="window_set_height",
+ nvim_win_set_option="window_set_option",
+ nvim_win_set_width="window_set_width",
+}
+return deprecated_aliases
diff --git a/src/nvim/api/private/defs.h b/src/nvim/api/private/defs.h
index fbfa87d5ae..223aab09dc 100644
--- a/src/nvim/api/private/defs.h
+++ b/src/nvim/api/private/defs.h
@@ -9,13 +9,15 @@
#define STRING_INIT {.data = NULL, .size = 0}
#define OBJECT_INIT { .type = kObjectTypeNil }
#define ERROR_INIT { .set = false }
-#define REMOTE_TYPE(type) typedef uint64_t type
+#define REMOTE_TYPE(type) typedef handle_T type
#ifdef INCLUDE_GENERATED_DECLARATIONS
- #define ArrayOf(...) Array
- #define DictionaryOf(...) Dictionary
+# define ArrayOf(...) Array
+# define DictionaryOf(...) Dictionary
#endif
+typedef int handle_T;
+
// Basic types
typedef enum {
kErrorTypeException,
@@ -31,6 +33,9 @@ typedef enum {
/// Used as the message ID of notifications.
#define NO_RESPONSE UINT64_MAX
+/// Used as channel_id when the call is local.
+#define INTERNAL_CALL UINT64_MAX
+
typedef struct {
ErrorType type;
char msg[1024];
@@ -41,6 +46,12 @@ typedef bool Boolean;
typedef int64_t Integer;
typedef double Float;
+/// Maximum value of an Integer
+#define API_INTEGER_MAX INT64_MAX
+
+/// Minimum value of an Integer
+#define API_INTEGER_MIN INT64_MIN
+
typedef struct {
char *data;
size_t size;
@@ -80,9 +91,6 @@ typedef enum {
struct object {
ObjectType type;
union {
- Buffer buffer;
- Window window;
- Tabpage tabpage;
Boolean boolean;
Integer integer;
Float floating;
diff --git a/src/nvim/api/private/dispatch.c b/src/nvim/api/private/dispatch.c
new file mode 100644
index 0000000000..9b3bcc380a
--- /dev/null
+++ b/src/nvim/api/private/dispatch.c
@@ -0,0 +1,45 @@
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <assert.h>
+#include <msgpack.h>
+
+#include "nvim/map.h"
+#include "nvim/log.h"
+#include "nvim/vim.h"
+#include "nvim/msgpack_rpc/helpers.h"
+#include "nvim/api/private/dispatch.h"
+#include "nvim/api/private/helpers.h"
+#include "nvim/api/private/defs.h"
+
+#include "nvim/api/buffer.h"
+#include "nvim/api/tabpage.h"
+#include "nvim/api/ui.h"
+#include "nvim/api/vim.h"
+#include "nvim/api/window.h"
+
+static Map(String, MsgpackRpcRequestHandler) *methods = NULL;
+
+static void msgpack_rpc_add_method_handler(String method,
+ MsgpackRpcRequestHandler handler)
+{
+ map_put(String, MsgpackRpcRequestHandler)(methods, method, handler);
+}
+
+MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name,
+ size_t name_len)
+{
+ String m = { .data = (char *)name, .size = name_len };
+ MsgpackRpcRequestHandler rv =
+ map_get(String, MsgpackRpcRequestHandler)(methods, m);
+
+ if (!rv.fn) {
+ rv.fn = msgpack_rpc_handle_missing_method;
+ }
+
+ return rv;
+}
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+#include "api/private/dispatch_wrappers.generated.h"
+#endif
diff --git a/src/nvim/api/private/dispatch.h b/src/nvim/api/private/dispatch.h
new file mode 100644
index 0000000000..39aabd708a
--- /dev/null
+++ b/src/nvim/api/private/dispatch.h
@@ -0,0 +1,23 @@
+#ifndef NVIM_API_PRIVATE_DISPATCH_H
+#define NVIM_API_PRIVATE_DISPATCH_H
+
+#include "nvim/api/private/defs.h"
+
+typedef Object (*ApiDispatchWrapper)(uint64_t channel_id,
+ Array args,
+ Error *error);
+
+/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores
+/// functions of this type.
+typedef struct {
+ ApiDispatchWrapper fn;
+ bool async; // function is always safe to run immediately instead of being
+ // put in a request queue for handling when nvim waits for input.
+} MsgpackRpcRequestHandler;
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "api/private/dispatch.h.generated.h"
+# include "api/private/dispatch_wrappers.h.generated.h"
+#endif
+
+#endif // NVIM_API_PRIVATE_DISPATCH_H
diff --git a/src/nvim/api/private/handle.c b/src/nvim/api/private/handle.c
index abbda95073..acb0fb332a 100644
--- a/src/nvim/api/private/handle.c
+++ b/src/nvim/api/private/handle.c
@@ -5,30 +5,26 @@
#include "nvim/map.h"
#include "nvim/api/private/handle.h"
-#define HANDLE_INIT(name) name##_handles = pmap_new(uint64_t)()
+#define HANDLE_INIT(name) name##_handles = pmap_new(handle_T)()
-#define HANDLE_IMPL(type, name) \
- static PMap(uint64_t) *name##_handles = NULL; \
- \
- type *handle_get_##name(uint64_t handle) \
- { \
- return pmap_get(uint64_t)(name##_handles, handle); \
- } \
- \
- void handle_register_##name(type *name) \
- { \
- assert(!name->handle); \
- name->handle = next_handle++; \
- pmap_put(uint64_t)(name##_handles, name->handle, name); \
- } \
- \
- void handle_unregister_##name(type *name) \
- { \
- pmap_del(uint64_t)(name##_handles, name->handle); \
+#define HANDLE_IMPL(type, name) \
+ static PMap(handle_T) *name##_handles = NULL; /* NOLINT */ \
+ \
+ type *handle_get_##name(handle_T handle) \
+ { \
+ return pmap_get(handle_T)(name##_handles, handle); \
+ } \
+ \
+ void handle_register_##name(type *name) \
+ { \
+ pmap_put(handle_T)(name##_handles, name->handle, name); \
+ } \
+ \
+ void handle_unregister_##name(type *name) \
+ { \
+ pmap_del(handle_T)(name##_handles, name->handle); \
}
-static uint64_t next_handle = 1;
-
HANDLE_IMPL(buf_T, buffer)
HANDLE_IMPL(win_T, window)
HANDLE_IMPL(tabpage_T, tabpage)
diff --git a/src/nvim/api/private/handle.h b/src/nvim/api/private/handle.h
index 1a196f6797..30bbfbee1b 100644
--- a/src/nvim/api/private/handle.h
+++ b/src/nvim/api/private/handle.h
@@ -3,10 +3,11 @@
#include "nvim/vim.h"
#include "nvim/buffer_defs.h"
+#include "nvim/api/private/defs.h"
-#define HANDLE_DECLS(type, name) \
- type *handle_get_##name(uint64_t handle); \
- void handle_register_##name(type *name); \
+#define HANDLE_DECLS(type, name) \
+ type *handle_get_##name(handle_T handle); \
+ void handle_register_##name(type *name); \
void handle_unregister_##name(type *name);
HANDLE_DECLS(buf_T, buffer)
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index db3e499427..7daa4d7207 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -7,6 +7,7 @@
#include "nvim/api/private/helpers.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/private/handle.h"
+#include "nvim/msgpack_rpc/helpers.h"
#include "nvim/ascii.h"
#include "nvim/vim.h"
#include "nvim/buffer.h"
@@ -17,9 +18,17 @@
#include "nvim/map.h"
#include "nvim/option.h"
#include "nvim/option_defs.h"
+#include "nvim/version.h"
+#include "nvim/lib/kvec.h"
+
+/// Helper structure for vim_to_object
+typedef struct {
+ kvec_t(Object) stack; ///< Object stack.
+} EncodedData;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "api/private/helpers.c.generated.h"
+# include "api/private/funcs_metadata.generated.h"
#endif
/// Start block that may cause vimscript exceptions
@@ -97,10 +106,11 @@ Object dict_get_value(dict_T *dict, String key, Error *err)
/// @param value The new value
/// @param del Delete key in place of setting it. Argument `value` is ignored in
/// this case.
+/// @param retval If true the old value will be converted and returned.
/// @param[out] err Details of an error that may have occurred
-/// @return the old value, if any
+/// @return The old value if `retval` is true and the key was present, else NIL
Object dict_set_value(dict_T *dict, String key, Object value, bool del,
- Error *err)
+ bool retval, Error *err)
{
Object rv = OBJECT_INIT;
@@ -128,7 +138,9 @@ Object dict_set_value(dict_T *dict, String key, Object value, bool del,
api_set_error(err, Validation, _("Key \"%s\" doesn't exist"), key.data);
} else {
// Return the old value
- rv = vim_to_object(&di->di_tv);
+ if (retval) {
+ rv = vim_to_object(&di->di_tv);
+ }
// Delete the entry
hashitem_T *hi = hash_find(&dict->dv_hashtab, di->di_key);
hash_remove(&dict->dv_hashtab, hi);
@@ -149,7 +161,9 @@ Object dict_set_value(dict_T *dict, String key, Object value, bool del,
dict_add(dict, di);
} else {
// Return the old value
- rv = vim_to_object(&di->di_tv);
+ if (retval) {
+ rv = vim_to_object(&di->di_tv);
+ }
clear_tv(&di->di_tv);
}
@@ -310,6 +324,201 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
}
}
+#define TYPVAL_ENCODE_ALLOW_SPECIALS false
+
+#define TYPVAL_ENCODE_CONV_NIL(tv) \
+ kv_push(edata->stack, NIL)
+
+#define TYPVAL_ENCODE_CONV_BOOL(tv, num) \
+ kv_push(edata->stack, BOOLEAN_OBJ((Boolean)(num)))
+
+#define TYPVAL_ENCODE_CONV_NUMBER(tv, num) \
+ kv_push(edata->stack, INTEGER_OBJ((Integer)(num)))
+
+#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER TYPVAL_ENCODE_CONV_NUMBER
+
+#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
+ kv_push(edata->stack, FLOATING_OBJ((Float)(flt)))
+
+#define TYPVAL_ENCODE_CONV_STRING(tv, str, len) \
+ do { \
+ const size_t len_ = (size_t)(len); \
+ const char *const str_ = (const char *)(str); \
+ assert(len_ == 0 || str_ != NULL); \
+ kv_push(edata->stack, STRING_OBJ(((String) { \
+ .data = xmemdupz((len_?str_:""), len_), \
+ .size = len_ \
+ }))); \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_STR_STRING TYPVAL_ENCODE_CONV_STRING
+
+#define TYPVAL_ENCODE_CONV_EXT_STRING(tv, str, len, type) \
+ TYPVAL_ENCODE_CONV_NIL(tv)
+
+#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
+ do { \
+ TYPVAL_ENCODE_CONV_NIL(tv); \
+ goto typval_encode_stop_converting_one_item; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, len)
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, len)
+#define TYPVAL_ENCODE_CONV_FUNC_END(tv)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_LIST(tv) \
+ kv_push(edata->stack, ARRAY_OBJ(((Array) { .capacity = 0, .size = 0 })))
+
+#define TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, dict) \
+ kv_push(edata->stack, \
+ DICTIONARY_OBJ(((Dictionary) { .capacity = 0, .size = 0 })))
+
+static inline void typval_encode_list_start(EncodedData *const edata,
+ const size_t len)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ kv_push(edata->stack, ARRAY_OBJ(((Array) {
+ .capacity = len,
+ .size = 0,
+ .items = xmalloc(len * sizeof(*((Object *)NULL)->data.array.items)),
+ })));
+}
+
+#define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \
+ typval_encode_list_start(edata, (size_t)(len))
+
+#define TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, mpsv)
+
+static inline void typval_encode_between_list_items(EncodedData *const edata)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ Object item = kv_pop(edata->stack);
+ Object *const list = &kv_last(edata->stack);
+ assert(list->type == kObjectTypeArray);
+ assert(list->data.array.size < list->data.array.capacity);
+ list->data.array.items[list->data.array.size++] = item;
+}
+
+#define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(tv) \
+ typval_encode_between_list_items(edata)
+
+static inline void typval_encode_list_end(EncodedData *const edata)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ typval_encode_between_list_items(edata);
+#ifndef NDEBUG
+ const Object *const list = &kv_last(edata->stack);
+ assert(list->data.array.size == list->data.array.capacity);
+#endif
+}
+
+#define TYPVAL_ENCODE_CONV_LIST_END(tv) \
+ typval_encode_list_end(edata)
+
+static inline void typval_encode_dict_start(EncodedData *const edata,
+ const size_t len)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ kv_push(edata->stack, DICTIONARY_OBJ(((Dictionary) {
+ .capacity = len,
+ .size = 0,
+ .items = xmalloc(len * sizeof(*((Object *)NULL)->data.dictionary.items)),
+ })));
+}
+
+#define TYPVAL_ENCODE_CONV_DICT_START(tv, dict, len) \
+ typval_encode_dict_start(edata, (size_t)(len))
+
+#define TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, dict, mpsv)
+
+#define TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(label, kv_pair)
+
+static inline void typval_encode_after_key(EncodedData *const edata)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ Object key = kv_pop(edata->stack);
+ Object *const dict = &kv_last(edata->stack);
+ assert(dict->type == kObjectTypeDictionary);
+ assert(dict->data.dictionary.size < dict->data.dictionary.capacity);
+ if (key.type == kObjectTypeString) {
+ dict->data.dictionary.items[dict->data.dictionary.size].key
+ = key.data.string;
+ } else {
+ api_free_object(key);
+ dict->data.dictionary.items[dict->data.dictionary.size].key
+ = STATIC_CSTR_TO_STRING("__INVALID_KEY__");
+ }
+}
+
+#define TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(tv, dict) \
+ typval_encode_after_key(edata)
+
+static inline void typval_encode_between_dict_items(EncodedData *const edata)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ Object val = kv_pop(edata->stack);
+ Object *const dict = &kv_last(edata->stack);
+ assert(dict->type == kObjectTypeDictionary);
+ assert(dict->data.dictionary.size < dict->data.dictionary.capacity);
+ dict->data.dictionary.items[dict->data.dictionary.size++].value = val;
+}
+
+#define TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, dict) \
+ typval_encode_between_dict_items(edata)
+
+static inline void typval_encode_dict_end(EncodedData *const edata)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ typval_encode_between_dict_items(edata);
+#ifndef NDEBUG
+ const Object *const dict = &kv_last(edata->stack);
+ assert(dict->data.dictionary.size == dict->data.dictionary.capacity);
+#endif
+}
+
+#define TYPVAL_ENCODE_CONV_DICT_END(tv, dict) \
+ typval_encode_dict_end(edata)
+
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
+ TYPVAL_ENCODE_CONV_NIL()
+
+#define TYPVAL_ENCODE_SCOPE static
+#define TYPVAL_ENCODE_NAME object
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE EncodedData *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME edata
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
+
+#undef TYPVAL_ENCODE_CONV_STRING
+#undef TYPVAL_ENCODE_CONV_STR_STRING
+#undef TYPVAL_ENCODE_CONV_EXT_STRING
+#undef TYPVAL_ENCODE_CONV_NUMBER
+#undef TYPVAL_ENCODE_CONV_FLOAT
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+#undef TYPVAL_ENCODE_CONV_FUNC_END
+#undef TYPVAL_ENCODE_CONV_EMPTY_LIST
+#undef TYPVAL_ENCODE_CONV_LIST_START
+#undef TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START
+#undef TYPVAL_ENCODE_CONV_EMPTY_DICT
+#undef TYPVAL_ENCODE_CONV_NIL
+#undef TYPVAL_ENCODE_CONV_BOOL
+#undef TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+#undef TYPVAL_ENCODE_CONV_DICT_START
+#undef TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START
+#undef TYPVAL_ENCODE_CONV_DICT_END
+#undef TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
+#undef TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+#undef TYPVAL_ENCODE_CONV_LIST_END
+#undef TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_CONV_RECURSE
+#undef TYPVAL_ENCODE_ALLOW_SPECIALS
+
/// Convert a vim object to an `Object` instance, recursively expanding
/// Arrays/Dictionaries.
///
@@ -317,17 +526,23 @@ void set_option_to(void *to, int type, String name, Object value, Error *err)
/// @return The converted value
Object vim_to_object(typval_T *obj)
{
- Object rv;
- // We use a lookup table to break out of cyclic references
- PMap(ptr_t) *lookup = pmap_new(ptr_t)();
- rv = vim_to_object_rec(obj, lookup);
- // Free the table
- pmap_free(ptr_t)(lookup);
- return rv;
+ EncodedData edata = { .stack = KV_INITIAL_VALUE };
+ const int evo_ret = encode_vim_to_object(&edata, obj,
+ "vim_to_object argument");
+ (void)evo_ret;
+ assert(evo_ret == OK);
+ Object ret = kv_A(edata.stack, 0);
+ assert(kv_size(edata.stack) == 1);
+ kv_destroy(edata.stack);
+ return ret;
}
buf_T *find_buffer_by_handle(Buffer buffer, Error *err)
{
+ if (buffer == 0) {
+ return curbuf;
+ }
+
buf_T *rv = handle_get_buffer(buffer);
if (!rv) {
@@ -339,6 +554,10 @@ buf_T *find_buffer_by_handle(Buffer buffer, Error *err)
win_T * find_window_by_handle(Window window, Error *err)
{
+ if (window == 0) {
+ return curwin;
+ }
+
win_T *rv = handle_get_window(window);
if (!rv) {
@@ -350,6 +569,10 @@ win_T * find_window_by_handle(Window window, Error *err)
tabpage_T * find_tab_by_handle(Tabpage tabpage, Error *err)
{
+ if (tabpage == 0) {
+ return curtab;
+ }
+
tabpage_T *rv = handle_get_tabpage(tabpage);
if (!rv) {
@@ -393,10 +616,16 @@ String cstr_as_string(char *str) FUNC_ATTR_PURE
return (String) {.data = str, .size = strlen(str)};
}
+/// Converts from type Object to a VimL value.
+///
+/// @param obj Object to convert from.
+/// @param tv Conversion result is placed here. On failure member v_type is
+/// set to VAR_UNKNOWN (no allocation was made for this variable).
+/// returns true if conversion is successful, otherwise false.
bool object_to_vim(Object obj, typval_T *tv, Error *err)
{
tv->v_type = VAR_UNKNOWN;
- tv->v_lock = 0;
+ tv->v_lock = VAR_UNLOCKED;
switch (obj.type) {
case kObjectTypeNil:
@@ -413,13 +642,14 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
case kObjectTypeWindow:
case kObjectTypeTabpage:
case kObjectTypeInteger:
- if (obj.data.integer > INT_MAX || obj.data.integer < INT_MIN) {
+ if (obj.data.integer > VARNUMBER_MAX
+ || obj.data.integer < VARNUMBER_MIN) {
api_set_error(err, Validation, _("Integer value outside range"));
return false;
}
tv->v_type = VAR_NUMBER;
- tv->vval.v_number = (int)obj.data.integer;
+ tv->vval.v_number = (varnumber_T)obj.data.integer;
break;
case kObjectTypeFloat:
@@ -437,9 +667,8 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
}
break;
- case kObjectTypeArray:
- tv->v_type = VAR_LIST;
- tv->vval.v_list = list_alloc();
+ case kObjectTypeArray: {
+ list_T *list = list_alloc();
for (uint32_t i = 0; i < obj.data.array.size; i++) {
Object item = obj.data.array.items[i];
@@ -448,45 +677,51 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err)
if (!object_to_vim(item, &li->li_tv, err)) {
// cleanup
listitem_free(li);
- list_free(tv->vval.v_list, true);
+ list_free(list);
return false;
}
- list_append(tv->vval.v_list, li);
+ list_append(list, li);
}
- tv->vval.v_list->lv_refcount++;
+ list->lv_refcount++;
+
+ tv->v_type = VAR_LIST;
+ tv->vval.v_list = list;
break;
+ }
- case kObjectTypeDictionary:
- tv->v_type = VAR_DICT;
- tv->vval.v_dict = dict_alloc();
+ case kObjectTypeDictionary: {
+ dict_T *dict = dict_alloc();
for (uint32_t i = 0; i < obj.data.dictionary.size; i++) {
KeyValuePair item = obj.data.dictionary.items[i];
String key = item.key;
if (key.size == 0) {
- api_set_error(err,
- Validation,
+ api_set_error(err, Validation,
_("Empty dictionary keys aren't allowed"));
// cleanup
- dict_free(tv->vval.v_dict, true);
+ dict_free(dict);
return false;
}
- dictitem_T *di = dictitem_alloc((uint8_t *) key.data);
+ dictitem_T *di = dictitem_alloc((uint8_t *)key.data);
if (!object_to_vim(item.value, &di->di_tv, err)) {
// cleanup
dictitem_free(di);
- dict_free(tv->vval.v_dict, true);
+ dict_free(dict);
return false;
}
- dict_add(tv->vval.v_dict, di);
+ dict_add(dict, di);
}
- tv->vval.v_dict->dv_refcount++;
+ dict->dv_refcount++;
+
+ tv->v_type = VAR_DICT;
+ tv->vval.v_dict = dict;
break;
+ }
default:
abort();
}
@@ -556,7 +791,8 @@ Dictionary api_metadata(void)
static Dictionary metadata = ARRAY_DICT_INIT;
if (!metadata.size) {
- msgpack_rpc_init_function_metadata(&metadata);
+ PUT(metadata, "version", DICTIONARY_OBJ(version_dict()));
+ init_function_metadata(&metadata);
init_error_type_metadata(&metadata);
init_type_metadata(&metadata);
}
@@ -564,6 +800,22 @@ Dictionary api_metadata(void)
return copy_object(DICTIONARY_OBJ(metadata)).data.dictionary;
}
+static void init_function_metadata(Dictionary *metadata)
+{
+ msgpack_unpacked unpacked;
+ msgpack_unpacked_init(&unpacked);
+ if (msgpack_unpack_next(&unpacked,
+ (const char *)funcs_metadata,
+ sizeof(funcs_metadata),
+ NULL) != MSGPACK_UNPACK_SUCCESS) {
+ abort();
+ }
+ Object functions;
+ msgpack_rpc_to_object(&unpacked.data, &functions);
+ msgpack_unpacked_destroy(&unpacked);
+ PUT(*metadata, "functions", functions);
+}
+
static void init_error_type_metadata(Dictionary *metadata)
{
Dictionary types = ARRAY_DICT_INIT;
@@ -579,18 +831,22 @@ static void init_error_type_metadata(Dictionary *metadata)
PUT(*metadata, "error_types", DICTIONARY_OBJ(types));
}
+
static void init_type_metadata(Dictionary *metadata)
{
Dictionary types = ARRAY_DICT_INIT;
Dictionary buffer_metadata = ARRAY_DICT_INIT;
PUT(buffer_metadata, "id", INTEGER_OBJ(kObjectTypeBuffer));
+ PUT(buffer_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_buf_")));
Dictionary window_metadata = ARRAY_DICT_INIT;
PUT(window_metadata, "id", INTEGER_OBJ(kObjectTypeWindow));
+ PUT(window_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_win_")));
Dictionary tabpage_metadata = ARRAY_DICT_INIT;
PUT(tabpage_metadata, "id", INTEGER_OBJ(kObjectTypeTabpage));
+ PUT(tabpage_metadata, "prefix", STRING_OBJ(cstr_to_string("nvim_tabpage_")));
PUT(types, "Buffer", DICTIONARY_OBJ(buffer_metadata));
PUT(types, "Window", DICTIONARY_OBJ(window_metadata));
@@ -633,131 +889,6 @@ Object copy_object(Object obj)
}
}
-/// Recursion helper for the `vim_to_object`. This uses a pointer table
-/// to avoid infinite recursion due to cyclic references
-///
-/// @param obj The source object
-/// @param lookup Lookup table containing pointers to all processed objects
-/// @return The converted value
-static Object vim_to_object_rec(typval_T *obj, PMap(ptr_t) *lookup)
-{
- Object rv = OBJECT_INIT;
-
- if (obj->v_type == VAR_LIST || obj->v_type == VAR_DICT) {
- // Container object, add it to the lookup table
- if (pmap_has(ptr_t)(lookup, obj)) {
- // It's already present, meaning we alredy processed it so just return
- // nil instead.
- return rv;
- }
- pmap_put(ptr_t)(lookup, obj, NULL);
- }
-
- switch (obj->v_type) {
- case VAR_SPECIAL:
- switch (obj->vval.v_special) {
- case kSpecialVarTrue:
- case kSpecialVarFalse: {
- rv.type = kObjectTypeBoolean;
- rv.data.boolean = (obj->vval.v_special == kSpecialVarTrue);
- break;
- }
- case kSpecialVarNull: {
- rv.type = kObjectTypeNil;
- break;
- }
- }
- break;
-
- case VAR_STRING:
- rv.type = kObjectTypeString;
- rv.data.string = cstr_to_string((char *) obj->vval.v_string);
- break;
-
- case VAR_NUMBER:
- rv.type = kObjectTypeInteger;
- rv.data.integer = obj->vval.v_number;
- break;
-
- case VAR_FLOAT:
- rv.type = kObjectTypeFloat;
- rv.data.floating = obj->vval.v_float;
- break;
-
- case VAR_LIST:
- {
- list_T *list = obj->vval.v_list;
- listitem_T *item;
-
- if (list != NULL) {
- rv.type = kObjectTypeArray;
- assert(list->lv_len >= 0);
- rv.data.array.size = (size_t)list->lv_len;
- rv.data.array.items = xmalloc(rv.data.array.size * sizeof(Object));
-
- uint32_t i = 0;
- for (item = list->lv_first; item != NULL; item = item->li_next) {
- rv.data.array.items[i] = vim_to_object_rec(&item->li_tv, lookup);
- i++;
- }
- }
- }
- break;
-
- case VAR_DICT:
- {
- dict_T *dict = obj->vval.v_dict;
- hashtab_T *ht;
- uint64_t todo;
- hashitem_T *hi;
- dictitem_T *di;
-
- if (dict != NULL) {
- ht = &obj->vval.v_dict->dv_hashtab;
- todo = ht->ht_used;
- rv.type = kObjectTypeDictionary;
-
- // Count items
- rv.data.dictionary.size = 0;
- for (hi = ht->ht_array; todo > 0; ++hi) {
- if (!HASHITEM_EMPTY(hi)) {
- todo--;
- rv.data.dictionary.size++;
- }
- }
-
- rv.data.dictionary.items =
- xmalloc(rv.data.dictionary.size * sizeof(KeyValuePair));
- todo = ht->ht_used;
- uint32_t i = 0;
-
- // Convert all
- for (hi = ht->ht_array; todo > 0; ++hi) {
- if (!HASHITEM_EMPTY(hi)) {
- di = dict_lookup(hi);
- // Convert key
- rv.data.dictionary.items[i].key =
- cstr_to_string((char *) hi->hi_key);
- // Convert value
- rv.data.dictionary.items[i].value =
- vim_to_object_rec(&di->di_tv, lookup);
- todo--;
- i++;
- }
- }
- }
- }
- break;
-
- case VAR_UNKNOWN:
- case VAR_FUNC:
- break;
- }
-
- return rv;
-}
-
-
static void set_option_value_for(char *key,
int numval,
char *stringval,
diff --git a/src/nvim/api/private/helpers.h b/src/nvim/api/private/helpers.h
index a0f14ac7a4..9fe8c351cf 100644
--- a/src/nvim/api/private/helpers.h
+++ b/src/nvim/api/private/helpers.h
@@ -8,69 +8,70 @@
#include "nvim/memory.h"
#include "nvim/lib/kvec.h"
-#define api_set_error(err, errtype, ...) \
- do { \
- snprintf((err)->msg, \
- sizeof((err)->msg), \
- __VA_ARGS__); \
- (err)->set = true; \
- (err)->type = kErrorType##errtype; \
+#define api_set_error(err, errtype, ...) \
+ do { \
+ snprintf((err)->msg, \
+ sizeof((err)->msg), \
+ __VA_ARGS__); \
+ (err)->set = true; \
+ (err)->type = kErrorType##errtype; \
} while (0)
#define OBJECT_OBJ(o) o
-#define BOOLEAN_OBJ(b) ((Object) { \
- .type = kObjectTypeBoolean, \
- .data.boolean = b \
- })
-
-#define INTEGER_OBJ(i) ((Object) { \
- .type = kObjectTypeInteger, \
- .data.integer = i \
- })
-
-#define STRING_OBJ(s) ((Object) { \
- .type = kObjectTypeString, \
- .data.string = s \
- })
-
-#define BUFFER_OBJ(s) ((Object) { \
- .type = kObjectTypeBuffer, \
- .data.buffer = s \
- })
-
-#define WINDOW_OBJ(s) ((Object) { \
- .type = kObjectTypeWindow, \
- .data.window = s \
- })
-
-#define TABPAGE_OBJ(s) ((Object) { \
- .type = kObjectTypeTabpage, \
- .data.tabpage = s \
- })
-
-#define ARRAY_OBJ(a) ((Object) { \
- .type = kObjectTypeArray, \
- .data.array = a \
- })
-
-#define DICTIONARY_OBJ(d) ((Object) { \
- .type = kObjectTypeDictionary, \
- .data.dictionary = d \
- })
+#define BOOLEAN_OBJ(b) ((Object) { \
+ .type = kObjectTypeBoolean, \
+ .data.boolean = b })
+
+#define INTEGER_OBJ(i) ((Object) { \
+ .type = kObjectTypeInteger, \
+ .data.integer = i })
+
+#define FLOATING_OBJ(f) ((Object) { \
+ .type = kObjectTypeFloat, \
+ .data.floating = f })
+
+#define STRING_OBJ(s) ((Object) { \
+ .type = kObjectTypeString, \
+ .data.string = s })
+
+#define BUFFER_OBJ(s) ((Object) { \
+ .type = kObjectTypeBuffer, \
+ .data.integer = s })
+
+#define WINDOW_OBJ(s) ((Object) { \
+ .type = kObjectTypeWindow, \
+ .data.integer = s })
+
+#define TABPAGE_OBJ(s) ((Object) { \
+ .type = kObjectTypeTabpage, \
+ .data.integer = s })
+
+#define ARRAY_OBJ(a) ((Object) { \
+ .type = kObjectTypeArray, \
+ .data.array = a })
+
+#define DICTIONARY_OBJ(d) ((Object) { \
+ .type = kObjectTypeDictionary, \
+ .data.dictionary = d })
#define NIL ((Object) {.type = kObjectTypeNil})
-#define PUT(dict, k, v) \
- kv_push(KeyValuePair, \
- dict, \
- ((KeyValuePair) {.key = cstr_to_string(k), .value = v}))
+#define PUT(dict, k, v) \
+ kv_push(dict, ((KeyValuePair) { .key = cstr_to_string(k), .value = v }))
-#define ADD(array, item) \
- kv_push(Object, array, item)
+#define ADD(array, item) \
+ kv_push(array, item)
#define STATIC_CSTR_AS_STRING(s) ((String) {.data = s, .size = sizeof(s) - 1})
+/// Create a new String instance, putting data in allocated memory
+///
+/// @param[in] s String to work with. Must be a string literal.
+#define STATIC_CSTR_TO_STRING(s) ((String){ \
+ .data = xmemdupz(s, sizeof(s) - 1), \
+ .size = sizeof(s) - 1 })
+
// Helpers used by the generated msgpack-rpc api wrappers
#define api_init_boolean
#define api_init_integer
diff --git a/src/nvim/api/tabpage.c b/src/nvim/api/tabpage.c
index c8311b0aa0..9e61ec1871 100644
--- a/src/nvim/api/tabpage.c
+++ b/src/nvim/api/tabpage.c
@@ -11,10 +11,10 @@
/// Gets the windows in a tabpage
///
-/// @param tabpage The tabpage
-/// @param[out] err Details of an error that may have occurred
-/// @return The windows in `tabpage`
-ArrayOf(Window) tabpage_get_windows(Tabpage tabpage, Error *err)
+/// @param tabpage Tabpage
+/// @param[out] err Error details, if any
+/// @return List of windows in `tabpage`
+ArrayOf(Window) nvim_tabpage_list_wins(Tabpage tabpage, Error *err)
{
Array rv = ARRAY_DICT_INIT;
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -39,11 +39,11 @@ ArrayOf(Window) tabpage_get_windows(Tabpage tabpage, Error *err)
/// Gets a tab-scoped (t:) variable
///
-/// @param tabpage The tab page handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The variable value
-Object tabpage_get_var(Tabpage tabpage, String name, Error *err)
+/// @param tabpage Tabpage handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Variable value
+Object nvim_tabpage_get_var(Tabpage tabpage, String name, Error *err)
{
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -56,11 +56,49 @@ Object tabpage_get_var(Tabpage tabpage, String name, Error *err)
/// Sets a tab-scoped (t:) variable
///
-/// @param tabpage handle
-/// @param name The variable name
-/// @param value The variable value
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @param tabpage Tabpage handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+void nvim_tabpage_set_var(Tabpage tabpage,
+ String name,
+ Object value,
+ Error *err)
+{
+ tabpage_T *tab = find_tab_by_handle(tabpage, err);
+
+ if (!tab) {
+ return;
+ }
+
+ dict_set_value(tab->tp_vars, name, value, false, false, err);
+}
+
+/// Removes a tab-scoped (t:) variable
+///
+/// @param tabpage Tabpage handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+void nvim_tabpage_del_var(Tabpage tabpage, String name, Error *err)
+{
+ tabpage_T *tab = find_tab_by_handle(tabpage, err);
+
+ if (!tab) {
+ return;
+ }
+
+ dict_set_value(tab->tp_vars, name, NIL, true, false, err);
+}
+
+/// Sets a tab-scoped (t:) variable
+///
+/// @deprecated
+///
+/// @param tabpage Tabpage handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+/// @return Old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
/// or if previous value was `v:null`.
@@ -72,18 +110,17 @@ Object tabpage_set_var(Tabpage tabpage, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(tab->tp_vars, name, value, false, err);
+ return dict_set_value(tab->tp_vars, name, value, false, true, err);
}
/// Removes a tab-scoped (t:) variable
///
-/// @param tabpage handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @deprecated
///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @param tabpage Tabpage handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Old value
Object tabpage_del_var(Tabpage tabpage, String name, Error *err)
{
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -92,15 +129,15 @@ Object tabpage_del_var(Tabpage tabpage, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(tab->tp_vars, name, NIL, true, err);
+ return dict_set_value(tab->tp_vars, name, NIL, true, true, err);
}
-/// Gets the current window in a tab page
+/// Gets the current window in a tabpage
///
-/// @param tabpage The tab page handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The Window handle
-Window tabpage_get_window(Tabpage tabpage, Error *err)
+/// @param tabpage Tabpage handle
+/// @param[out] err Error details, if any
+/// @return Window handle
+Window nvim_tabpage_get_win(Tabpage tabpage, Error *err)
{
Window rv = 0;
tabpage_T *tab = find_tab_by_handle(tabpage, err);
@@ -110,7 +147,7 @@ Window tabpage_get_window(Tabpage tabpage, Error *err)
}
if (tab == curtab) {
- return vim_get_current_window();
+ return nvim_get_current_win();
} else {
FOR_ALL_WINDOWS_IN_TAB(wp, tab) {
if (wp == tab->tp_curwin) {
@@ -122,11 +159,28 @@ Window tabpage_get_window(Tabpage tabpage, Error *err)
}
}
-/// Checks if a tab page is valid
+/// Gets the tabpage number
+///
+/// @param tabpage Tabpage handle
+/// @param[out] err Error details, if any
+/// @return Tabpage number
+Integer nvim_tabpage_get_number(Tabpage tabpage, Error *err)
+{
+ Integer rv = 0;
+ tabpage_T *tab = find_tab_by_handle(tabpage, err);
+
+ if (!tab) {
+ return rv;
+ }
+
+ return tabpage_index(tab);
+}
+
+/// Checks if a tabpage is valid
///
-/// @param tabpage The tab page handle
-/// @return true if the tab page is valid, false otherwise
-Boolean tabpage_is_valid(Tabpage tabpage)
+/// @param tabpage Tabpage handle
+/// @return true if the tabpage is valid, false otherwise
+Boolean nvim_tabpage_is_valid(Tabpage tabpage)
{
Error stub = ERROR_INIT;
return find_tab_by_handle(tabpage, &stub) != NULL;
diff --git a/src/nvim/msgpack_rpc/remote_ui.c b/src/nvim/api/ui.c
index 6ffcffe2e1..9178538110 100644
--- a/src/nvim/msgpack_rpc/remote_ui.c
+++ b/src/nvim/api/ui.c
@@ -7,13 +7,14 @@
#include "nvim/ui.h"
#include "nvim/memory.h"
#include "nvim/map.h"
-#include "nvim/msgpack_rpc/remote_ui.h"
#include "nvim/msgpack_rpc/channel.h"
+#include "nvim/api/ui.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/private/helpers.h"
+#include "nvim/popupmnu.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "msgpack_rpc/remote_ui.c.generated.h"
+# include "api/ui.c.generated.h"
#endif
typedef struct {
@@ -24,21 +25,13 @@ typedef struct {
static PMap(uint64_t) *connected_uis = NULL;
void remote_ui_init(void)
+ FUNC_API_NOEXPORT
{
connected_uis = pmap_new(uint64_t)();
- // Add handler for "attach_ui"
- String method = cstr_as_string("ui_attach");
- MsgpackRpcRequestHandler handler = {.fn = remote_ui_attach, .async = false};
- msgpack_rpc_add_method_handler(method, handler);
- method = cstr_as_string("ui_detach");
- handler.fn = remote_ui_detach;
- msgpack_rpc_add_method_handler(method, handler);
- method = cstr_as_string("ui_try_resize");
- handler.fn = remote_ui_try_resize;
- msgpack_rpc_add_method_handler(method, handler);
}
void remote_ui_disconnect(uint64_t channel_id)
+ FUNC_API_NOEXPORT
{
UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
if (!ui) {
@@ -49,35 +42,29 @@ void remote_ui_disconnect(uint64_t channel_id)
api_free_array(data->buffer);
pmap_del(uint64_t)(connected_uis, channel_id);
xfree(ui->data);
- ui_detach(ui);
+ ui_detach_impl(ui);
xfree(ui);
}
-static Object remote_ui_attach(uint64_t channel_id, uint64_t request_id,
- Array args, Error *error)
+void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height,
+ Dictionary options, Error *err)
+ FUNC_API_NOEVAL
{
if (pmap_has(uint64_t)(connected_uis, channel_id)) {
- api_set_error(error, Exception, _("UI already attached for channel"));
- return NIL;
+ api_set_error(err, Exception, _("UI already attached for channel"));
+ return;
}
- if (args.size != 3 || args.items[0].type != kObjectTypeInteger
- || args.items[1].type != kObjectTypeInteger
- || args.items[2].type != kObjectTypeBoolean
- || args.items[0].data.integer <= 0 || args.items[1].data.integer <= 0) {
- api_set_error(error, Validation,
- _("Invalid arguments. Expected: "
- "(uint width > 0, uint height > 0, bool enable_rgb)"));
- return NIL;
+ if (width <= 0 || height <= 0) {
+ api_set_error(err, Validation,
+ _("Expected width > 0 and height > 0"));
+ return;
}
- UIData *data = xmalloc(sizeof(UIData));
- data->channel_id = channel_id;
- data->buffer = (Array)ARRAY_DICT_INIT;
UI *ui = xcalloc(1, sizeof(UI));
- ui->width = (int)args.items[0].data.integer;
- ui->height = (int)args.items[1].data.integer;
- ui->rgb = args.items[2].data.boolean;
- ui->data = data;
+ ui->width = (int)width;
+ ui->height = (int)height;
+ ui->rgb = true;
+ ui->pum_external = false;
ui->resize = remote_ui_resize;
ui->clear = remote_ui_clear;
ui->eol_clear = remote_ui_eol_clear;
@@ -101,45 +88,101 @@ static Object remote_ui_attach(uint64_t channel_id, uint64_t request_id,
ui->suspend = remote_ui_suspend;
ui->set_title = remote_ui_set_title;
ui->set_icon = remote_ui_set_icon;
+ ui->event = remote_ui_event;
+
+ for (size_t i = 0; i < options.size; i++) {
+ ui_set_option(ui, options.items[i].key, options.items[i].value, err);
+ if (err->set) {
+ xfree(ui);
+ return;
+ }
+ }
+
+ UIData *data = xmalloc(sizeof(UIData));
+ data->channel_id = channel_id;
+ data->buffer = (Array)ARRAY_DICT_INIT;
+ ui->data = data;
+
pmap_put(uint64_t)(connected_uis, channel_id, ui);
- ui_attach(ui);
- return NIL;
+ ui_attach_impl(ui);
+}
+
+/// @deprecated
+void ui_attach(uint64_t channel_id, Integer width, Integer height,
+ Boolean enable_rgb, Error *err)
+{
+ Dictionary opts = ARRAY_DICT_INIT;
+ PUT(opts, "rgb", BOOLEAN_OBJ(enable_rgb));
+ nvim_ui_attach(channel_id, width, height, opts, err);
+ api_free_dictionary(opts);
}
-static Object remote_ui_detach(uint64_t channel_id, uint64_t request_id,
- Array args, Error *error)
+void nvim_ui_detach(uint64_t channel_id, Error *err)
+ FUNC_API_NOEVAL
{
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
- api_set_error(error, Exception, _("UI is not attached for channel"));
+ api_set_error(err, Exception, _("UI is not attached for channel"));
+ return;
}
remote_ui_disconnect(channel_id);
-
- return NIL;
}
-static Object remote_ui_try_resize(uint64_t channel_id, uint64_t request_id,
- Array args, Error *error)
+
+void nvim_ui_try_resize(uint64_t channel_id, Integer width,
+ Integer height, Error *err)
+ FUNC_API_NOEVAL
{
if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
- api_set_error(error, Exception, _("UI is not attached for channel"));
+ api_set_error(err, Exception, _("UI is not attached for channel"));
+ return;
}
- if (args.size != 2 || args.items[0].type != kObjectTypeInteger
- || args.items[1].type != kObjectTypeInteger
- || args.items[0].data.integer <= 0 || args.items[1].data.integer <= 0) {
- api_set_error(error, Validation,
- _("Invalid arguments. Expected: "
- "(uint width > 0, uint height > 0)"));
- return NIL;
+ if (width <= 0 || height <= 0) {
+ api_set_error(err, Validation,
+ _("Expected width > 0 and height > 0"));
+ return;
}
UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
- ui->width = (int)args.items[0].data.integer;
- ui->height = (int)args.items[1].data.integer;
+ ui->width = (int)width;
+ ui->height = (int)height;
ui_refresh();
- return NIL;
}
+void nvim_ui_set_option(uint64_t channel_id, String name,
+ Object value, Error *error)
+ FUNC_API_NOEVAL
+{
+ if (!pmap_has(uint64_t)(connected_uis, channel_id)) {
+ api_set_error(error, Exception, _("UI is not attached for channel"));
+ return;
+ }
+ UI *ui = pmap_get(uint64_t)(connected_uis, channel_id);
+
+ ui_set_option(ui, name, value, error);
+ if (!error->set) {
+ ui_refresh();
+ }
+}
+
+static void ui_set_option(UI *ui, String name, Object value, Error *error) {
+ if (strcmp(name.data, "rgb") == 0) {
+ if (value.type != kObjectTypeBoolean) {
+ api_set_error(error, Validation, _("rgb must be a Boolean"));
+ return;
+ }
+ ui->rgb = value.data.boolean;
+ } else if (strcmp(name.data, "popupmenu_external") == 0) {
+ if (value.type != kObjectTypeBoolean) {
+ api_set_error(error, Validation,
+ _("popupmenu_external must be a Boolean"));
+ return;
+ }
+ ui->pum_external = value.data.boolean;
+ } else {
+ api_set_error(error, Validation, _("No such ui option"));
+ }
+}
static void push_call(UI *ui, char *name, Array args)
{
@@ -228,6 +271,8 @@ static void remote_ui_mode_change(UI *ui, int mode)
ADD(args, STRING_OBJ(cstr_to_string("insert")));
} else if (mode == REPLACE) {
ADD(args, STRING_OBJ(cstr_to_string("replace")));
+ } else if (mode == CMDLINE) {
+ ADD(args, STRING_OBJ(cstr_to_string("cmdline")));
} else {
assert(mode == NORMAL);
ADD(args, STRING_OBJ(cstr_to_string("normal")));
@@ -236,7 +281,7 @@ static void remote_ui_mode_change(UI *ui, int mode)
}
static void remote_ui_set_scroll_region(UI *ui, int top, int bot, int left,
- int right)
+ int right)
{
Array args = ARRAY_DICT_INIT;
ADD(args, INTEGER_OBJ(top));
@@ -297,7 +342,7 @@ static void remote_ui_highlight_set(UI *ui, HlAttrs attrs)
static void remote_ui_put(UI *ui, uint8_t *data, size_t size)
{
Array args = ARRAY_DICT_INIT;
- String str = {.data = xmemdupz(data, size), .size = size};
+ String str = { .data = xmemdupz(data, size), .size = size };
ADD(args, STRING_OBJ(str));
push_call(ui, "put", args);
}
@@ -361,3 +406,19 @@ static void remote_ui_set_icon(UI *ui, char *icon)
ADD(args, STRING_OBJ(cstr_to_string(icon)));
push_call(ui, "set_icon", args);
}
+
+static void remote_ui_event(UI *ui, char *name, Array args, bool *args_consumed)
+{
+ Array my_args = ARRAY_DICT_INIT;
+ // Objects are currently single-reference
+ // make a copy, but only if necessary
+ if (*args_consumed) {
+ for (size_t i = 0; i < args.size; i++) {
+ ADD(my_args, copy_object(args.items[i]));
+ }
+ } else {
+ my_args = args;
+ *args_consumed = true;
+ }
+ push_call(ui, name, my_args);
+}
diff --git a/src/nvim/api/ui.h b/src/nvim/api/ui.h
new file mode 100644
index 0000000000..b3af14f8a8
--- /dev/null
+++ b/src/nvim/api/ui.h
@@ -0,0 +1,11 @@
+#ifndef NVIM_API_UI_H
+#define NVIM_API_UI_H
+
+#include <stdint.h>
+
+#include "nvim/api/private/defs.h"
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "api/ui.h.generated.h"
+#endif
+#endif // NVIM_API_UI_H
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c
index 46ac3c9022..1732ee0bae 100644
--- a/src/nvim/api/vim.c
+++ b/src/nvim/api/vim.c
@@ -14,6 +14,7 @@
#include "nvim/msgpack_rpc/channel.h"
#include "nvim/vim.h"
#include "nvim/buffer.h"
+#include "nvim/file_search.h"
#include "nvim/window.h"
#include "nvim/types.h"
#include "nvim/ex_docmd.h"
@@ -21,7 +22,7 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/eval.h"
-#include "nvim/misc2.h"
+#include "nvim/option.h"
#include "nvim/syntax.h"
#include "nvim/getchar.h"
#include "nvim/os/input.h"
@@ -32,35 +33,35 @@
# include "api/vim.c.generated.h"
#endif
-/// Executes an ex-mode command str
+/// Executes an ex-command.
+/// On VimL error: Returns the VimL error; v:errmsg is not updated.
///
-/// @param str The command str
-/// @param[out] err Details of an error that may have occurred
-void vim_command(String str, Error *err)
+/// @param command Ex-command string
+/// @param[out] err Error details (including actual VimL error), if any
+void nvim_command(String command, Error *err)
{
// Run the command
try_start();
- do_cmdline_cmd(str.data);
+ do_cmdline_cmd(command.data);
update_screen(VALID);
try_end(err);
}
-/// Passes input keys to Neovim
+/// Passes input keys to Nvim.
+/// On VimL error: Does not fail, but updates v:errmsg.
///
-/// @param keys to be typed
-/// @param mode specifies the mapping options
-/// @param escape_csi the string needs escaping for K_SPECIAL/CSI bytes
+/// @param keys to be typed
+/// @param mode mapping options
+/// @param escape_csi If true, escape K_SPECIAL/CSI bytes in `keys`
/// @see feedkeys()
/// @see vim_strsave_escape_csi
-void vim_feedkeys(String keys, String mode, Boolean escape_csi)
+void nvim_feedkeys(String keys, String mode, Boolean escape_csi)
{
bool remap = true;
bool insert = false;
bool typed = false;
-
- if (keys.size == 0) {
- return;
- }
+ bool execute = false;
+ bool dangerous = false;
for (size_t i = 0; i < mode.size; ++i) {
switch (mode.data[i]) {
@@ -68,9 +69,15 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)
case 'm': remap = true; break;
case 't': typed = true; break;
case 'i': insert = true; break;
+ case 'x': execute = true; break;
+ case '!': dangerous = true; break;
}
}
+ if (keys.size == 0 && !execute) {
+ return;
+ }
+
char *keys_esc;
if (escape_csi) {
// Need to escape K_SPECIAL and CSI before putting the string in the
@@ -86,19 +93,36 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)
xfree(keys_esc);
}
- if (vgetc_busy)
+ if (vgetc_busy) {
typebuf_was_filled = true;
+ }
+ if (execute) {
+ int save_msg_scroll = msg_scroll;
+
+ /* Avoid a 1 second delay when the keys start Insert mode. */
+ msg_scroll = false;
+ if (!dangerous) {
+ ex_normal_busy++;
+ }
+ exec_normal(true);
+ if (!dangerous) {
+ ex_normal_busy--;
+ }
+ msg_scroll |= save_msg_scroll;
+ }
}
-/// Passes input keys to Neovim. Unlike `vim_feedkeys`, this will use a
-/// lower-level input buffer and the call is not deferred.
-/// This is the most reliable way to emulate real user input.
+/// Passes keys to Nvim as raw user-input.
+/// On VimL error: Does not fail, but updates v:errmsg.
+///
+/// Unlike `nvim_feedkeys`, this uses a lower-level input buffer and the call
+/// is not deferred. This is the most reliable way to emulate real user input.
///
/// @param keys to be typed
-/// @return The number of bytes actually written, which can be lower than
-/// requested if the buffer becomes full.
-Integer vim_input(String keys)
- FUNC_ATTR_ASYNC
+/// @return Number of bytes actually written (can be fewer than
+/// requested if the buffer becomes full).
+Integer nvim_input(String keys)
+ FUNC_API_ASYNC
{
return (Integer)input_enqueue(keys);
}
@@ -107,7 +131,7 @@ Integer vim_input(String keys)
///
/// @see replace_termcodes
/// @see cpoptions
-String vim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
+String nvim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
Boolean special)
{
if (str.size == 0) {
@@ -127,10 +151,10 @@ String vim_replace_termcodes(String str, Boolean from_part, Boolean do_lt,
return cstr_as_string(ptr);
}
-String vim_command_output(String str, Error *err)
+String nvim_command_output(String str, Error *err)
{
do_cmdline_cmd("redir => v:command_output");
- vim_command(str, err);
+ nvim_command(str, err);
do_cmdline_cmd("redir END");
if (err->set) {
@@ -140,19 +164,19 @@ String vim_command_output(String str, Error *err)
return cstr_to_string((char *)get_vim_var_str(VV_COMMAND_OUTPUT));
}
-/// Evaluates the expression str using the Vim internal expression
-/// evaluator (see |expression|).
-/// Dictionaries and lists are recursively expanded.
+/// Evaluates a VimL expression (:help expression).
+/// Dictionaries and Lists are recursively expanded.
+/// On VimL error: Returns a generic error; v:errmsg is not updated.
///
-/// @param str The expression str
-/// @param[out] err Details of an error that may have occurred
-/// @return The expanded object
-Object vim_eval(String str, Error *err)
+/// @param expr VimL expression string
+/// @param[out] err Error details, if any
+/// @return Evaluation result or expanded object
+Object nvim_eval(String expr, Error *err)
{
Object rv = OBJECT_INIT;
// Evaluate the expression
try_start();
- typval_T *expr_result = eval_expr((char_u *) str.data, NULL);
+ typval_T *expr_result = eval_expr((char_u *)expr.data, NULL);
if (!expr_result) {
api_set_error(err, Exception, _("Failed to evaluate expression"));
@@ -168,13 +192,14 @@ Object vim_eval(String str, Error *err)
return rv;
}
-/// Call the given function with the given arguments stored in an array.
+/// Calls a VimL function with the given arguments.
+/// On VimL error: Returns a generic error; v:errmsg is not updated.
///
-/// @param fname Function to call
-/// @param args Functions arguments packed in an Array
-/// @param[out] err Details of an error that may have occurred
+/// @param fname Function to call
+/// @param args Function arguments packed in an Array
+/// @param[out] err Error details, if any
/// @return Result of the function call
-Object vim_call_function(String fname, Array args, Error *err)
+Object nvim_call_function(String fname, Array args, Error *err)
{
Object rv = OBJECT_INIT;
if (args.size > MAX_FUNC_ARGS) {
@@ -200,7 +225,7 @@ Object vim_call_function(String fname, Array args, Error *err)
&rettv, (int) args.size, vim_args,
curwin->w_cursor.lnum, curwin->w_cursor.lnum, &dummy,
true,
- NULL);
+ NULL, NULL);
if (r == FAIL) {
api_set_error(err, Exception, _("Error calling function."));
}
@@ -217,13 +242,13 @@ free_vim_args:
return rv;
}
-/// Calculates the number of display cells `str` occupies, tab is counted as
-/// one cell.
+/// Calculates the number of display cells occupied by `text`.
+/// <Tab> counts as one cell.
///
-/// @param str Some text
-/// @param[out] err Details of an error that may have occurred
-/// @return The number of cells
-Integer vim_strwidth(String str, Error *err)
+/// @param text Some text
+/// @param[out] err Error details, if any
+/// @return Number of cells
+Integer nvim_strwidth(String str, Error *err)
{
if (str.size > INT_MAX) {
api_set_error(err, Validation, _("String length is too high"));
@@ -233,10 +258,10 @@ Integer vim_strwidth(String str, Error *err)
return (Integer) mb_string2cells((char_u *) str.data);
}
-/// Gets a list of paths contained in 'runtimepath'
+/// Gets the paths contained in 'runtimepath'.
///
-/// @return The list of paths
-ArrayOf(String) vim_list_runtime_paths(void)
+/// @return List of paths
+ArrayOf(String) nvim_list_runtime_paths(void)
{
Array rv = ARRAY_DICT_INIT;
uint8_t *rtp = p_rtp;
@@ -273,11 +298,11 @@ ArrayOf(String) vim_list_runtime_paths(void)
return rv;
}
-/// Changes Vim working directory
+/// Changes the global working directory.
///
-/// @param dir The new working directory
-/// @param[out] err Details of an error that may have occurred
-void vim_change_directory(String dir, Error *err)
+/// @param dir Directory path
+/// @param[out] err Error details, if any
+void nvim_set_current_dir(String dir, Error *err)
{
if (dir.size >= MAXPATHL) {
api_set_error(err, Validation, _("Directory string is too long"));
@@ -285,12 +310,12 @@ void vim_change_directory(String dir, Error *err)
}
char string[MAXPATHL];
- strncpy(string, dir.data, dir.size);
+ memcpy(string, dir.data, dir.size);
string[dir.size] = NUL;
try_start();
- if (vim_chdir((char_u *)string)) {
+ if (vim_chdir((char_u *)string, kCdScopeGlobal)) {
if (!try_end(err)) {
api_set_error(err, Exception, _("Failed to change directory"));
}
@@ -303,127 +328,148 @@ void vim_change_directory(String dir, Error *err)
/// Gets the current line
///
-/// @param[out] err Details of an error that may have occurred
-/// @return The current line string
-String vim_get_current_line(Error *err)
+/// @param[out] err Error details, if any
+/// @return Current line string
+String nvim_get_current_line(Error *err)
{
return buffer_get_line(curbuf->handle, curwin->w_cursor.lnum - 1, err);
}
/// Sets the current line
///
-/// @param line The line contents
-/// @param[out] err Details of an error that may have occurred
-void vim_set_current_line(String line, Error *err)
+/// @param line Line contents
+/// @param[out] err Error details, if any
+void nvim_set_current_line(String line, Error *err)
{
buffer_set_line(curbuf->handle, curwin->w_cursor.lnum - 1, line, err);
}
/// Deletes the current line
///
-/// @param[out] err Details of an error that may have occurred
-void vim_del_current_line(Error *err)
+/// @param[out] err Error details, if any
+void nvim_del_current_line(Error *err)
{
buffer_del_line(curbuf->handle, curwin->w_cursor.lnum - 1, err);
}
-/// Gets a global variable
+/// Gets a global (g:) variable
///
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The variable value
-Object vim_get_var(String name, Error *err)
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Variable value
+Object nvim_get_var(String name, Error *err)
{
return dict_get_value(&globvardict, name, err);
}
+/// Sets a global (g:) variable
+///
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+void nvim_set_var(String name, Object value, Error *err)
+{
+ dict_set_value(&globvardict, name, value, false, false, err);
+}
+
+/// Removes a global (g:) variable
+///
+/// @param name Variable name
+/// @param[out] err Error details, if any
+void nvim_del_var(String name, Error *err)
+{
+ dict_set_value(&globvardict, name, NIL, true, false, err);
+}
+
/// Sets a global variable
///
-/// @param name The variable name
-/// @param value The variable value
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @deprecated
+///
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+/// @return Old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
/// or if previous value was `v:null`.
Object vim_set_var(String name, Object value, Error *err)
{
- return dict_set_value(&globvardict, name, value, false, err);
+ return dict_set_value(&globvardict, name, value, false, true, err);
}
/// Removes a global variable
///
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @deprecated
///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Old value
Object vim_del_var(String name, Error *err)
{
- return dict_set_value(&globvardict, name, NIL, true, err);
+ return dict_set_value(&globvardict, name, NIL, true, true, err);
}
-/// Gets a vim variable
+/// Gets a v: variable
///
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The variable value
-Object vim_get_vvar(String name, Error *err)
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Variable value
+Object nvim_get_vvar(String name, Error *err)
{
return dict_get_value(&vimvardict, name, err);
}
/// Gets an option value string
///
-/// @param name The option name
-/// @param[out] err Details of an error that may have occurred
-/// @return The option value
-Object vim_get_option(String name, Error *err)
+/// @param name Option name
+/// @param[out] err Error details, if any
+/// @return Option value
+Object nvim_get_option(String name, Error *err)
{
return get_option_from(NULL, SREQ_GLOBAL, name, err);
}
/// Sets an option value
///
-/// @param name The option name
-/// @param value The new option value
-/// @param[out] err Details of an error that may have occurred
-void vim_set_option(String name, Object value, Error *err)
+/// @param name Option name
+/// @param value New option value
+/// @param[out] err Error details, if any
+void nvim_set_option(String name, Object value, Error *err)
{
set_option_to(NULL, SREQ_GLOBAL, name, value, err);
}
/// Writes a message to vim output buffer
///
-/// @param str The message
-void vim_out_write(String str)
+/// @param str Message
+void nvim_out_write(String str)
{
write_msg(str, false);
}
/// Writes a message to vim error buffer
///
-/// @param str The message
-void vim_err_write(String str)
+/// @param str Message
+void nvim_err_write(String str)
{
write_msg(str, true);
}
-/// Higher level error reporting function that ensures all str contents
-/// are written by sending a trailing linefeed to `vim_err_write`
+/// Writes a message to vim error buffer. Appends a linefeed to ensure all
+/// contents are written.
///
-/// @param str The message
-void vim_report_error(String str)
+/// @param str Message
+/// @see nvim_err_write()
+void nvim_err_writeln(String str)
{
- vim_err_write(str);
- vim_err_write((String) {.data = "\n", .size = 1});
+ nvim_err_write(str);
+ nvim_err_write((String) { .data = "\n", .size = 1 });
}
/// Gets the current list of buffer handles
///
-/// @return The number of buffers
-ArrayOf(Buffer) vim_get_buffers(void)
+/// @return List of buffer handles
+ArrayOf(Buffer) nvim_list_bufs(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -443,17 +489,17 @@ ArrayOf(Buffer) vim_get_buffers(void)
/// Gets the current buffer
///
-/// @reqturn The buffer handle
-Buffer vim_get_current_buffer(void)
+/// @return Buffer handle
+Buffer nvim_get_current_buf(void)
{
return curbuf->handle;
}
/// Sets the current buffer
///
-/// @param id The buffer handle
-/// @param[out] err Details of an error that may have occurred
-void vim_set_current_buffer(Buffer buffer, Error *err)
+/// @param id Buffer handle
+/// @param[out] err Error details, if any
+void nvim_set_current_buf(Buffer buffer, Error *err)
{
buf_T *buf = find_buffer_by_handle(buffer, err);
@@ -466,15 +512,15 @@ void vim_set_current_buffer(Buffer buffer, Error *err)
if (!try_end(err) && result == FAIL) {
api_set_error(err,
Exception,
- _("Failed to switch to buffer %" PRIu64),
+ _("Failed to switch to buffer %d"),
buffer);
}
}
/// Gets the current list of window handles
///
-/// @return The number of windows
-ArrayOf(Window) vim_get_windows(void)
+/// @return List of window handles
+ArrayOf(Window) nvim_list_wins(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -494,16 +540,16 @@ ArrayOf(Window) vim_get_windows(void)
/// Gets the current window
///
-/// @return The window handle
-Window vim_get_current_window(void)
+/// @return Window handle
+Window nvim_get_current_win(void)
{
return curwin->handle;
}
/// Sets the current window
///
-/// @param handle The window handle
-void vim_set_current_window(Window window, Error *err)
+/// @param handle Window handle
+void nvim_set_current_win(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -516,15 +562,15 @@ void vim_set_current_window(Window window, Error *err)
if (!try_end(err) && win != curwin) {
api_set_error(err,
Exception,
- _("Failed to switch to window %" PRIu64),
+ _("Failed to switch to window %d"),
window);
}
}
/// Gets the current list of tabpage handles
///
-/// @return The number of tab pages
-ArrayOf(Tabpage) vim_get_tabpages(void)
+/// @return List of tabpage handles
+ArrayOf(Tabpage) nvim_list_tabpages(void)
{
Array rv = ARRAY_DICT_INIT;
@@ -542,19 +588,19 @@ ArrayOf(Tabpage) vim_get_tabpages(void)
return rv;
}
-/// Gets the current tab page
+/// Gets the current tabpage
///
-/// @return The tab page handle
-Tabpage vim_get_current_tabpage(void)
+/// @return Tabpage handle
+Tabpage nvim_get_current_tabpage(void)
{
return curtab->handle;
}
-/// Sets the current tab page
+/// Sets the current tabpage
///
-/// @param handle The tab page handle
-/// @param[out] err Details of an error that may have occurred
-void vim_set_current_tabpage(Tabpage tabpage, Error *err)
+/// @param handle Tabpage handle
+/// @param[out] err Error details, if any
+void nvim_set_current_tabpage(Tabpage tabpage, Error *err)
{
tabpage_T *tp = find_tab_by_handle(tabpage, err);
@@ -567,16 +613,17 @@ void vim_set_current_tabpage(Tabpage tabpage, Error *err)
if (!try_end(err) && tp != curtab) {
api_set_error(err,
Exception,
- _("Failed to switch to tabpage %" PRIu64),
+ _("Failed to switch to tabpage %d"),
tabpage);
}
}
/// Subscribes to event broadcasts
///
-/// @param channel_id The channel id (passed automatically by the dispatcher)
-/// @param event The event type string
-void vim_subscribe(uint64_t channel_id, String event)
+/// @param channel_id Channel id (passed automatically by the dispatcher)
+/// @param event Event type string
+void nvim_subscribe(uint64_t channel_id, String event)
+ FUNC_API_NOEVAL
{
size_t length = (event.size < METHOD_MAXLEN ? event.size : METHOD_MAXLEN);
char e[METHOD_MAXLEN + 1];
@@ -587,9 +634,10 @@ void vim_subscribe(uint64_t channel_id, String event)
/// Unsubscribes to event broadcasts
///
-/// @param channel_id The channel id (passed automatically by the dispatcher)
-/// @param event The event type string
-void vim_unsubscribe(uint64_t channel_id, String event)
+/// @param channel_id Channel id (passed automatically by the dispatcher)
+/// @param event Event type string
+void nvim_unsubscribe(uint64_t channel_id, String event)
+ FUNC_API_NOEVAL
{
size_t length = (event.size < METHOD_MAXLEN ?
event.size :
@@ -600,12 +648,12 @@ void vim_unsubscribe(uint64_t channel_id, String event)
channel_unsubscribe(channel_id, e);
}
-Integer vim_name_to_color(String name)
+Integer nvim_get_color_by_name(String name)
{
return name_to_color((uint8_t *)name.data);
}
-Dictionary vim_get_color_map(void)
+Dictionary nvim_get_color_map(void)
{
Dictionary colors = ARRAY_DICT_INIT;
@@ -617,8 +665,8 @@ Dictionary vim_get_color_map(void)
}
-Array vim_get_api_info(uint64_t channel_id)
- FUNC_ATTR_ASYNC
+Array nvim_get_api_info(uint64_t channel_id)
+ FUNC_API_ASYNC FUNC_API_NOEVAL
{
Array rv = ARRAY_DICT_INIT;
@@ -629,26 +677,114 @@ Array vim_get_api_info(uint64_t channel_id)
return rv;
}
+/// Call many api methods atomically
+///
+/// This has two main usages: Firstly, to perform several requests from an
+/// async context atomically, i.e. without processing requests from other rpc
+/// clients or redrawing or allowing user interaction in between. Note that api
+/// methods that could fire autocommands or do event processing still might do
+/// so. For instance invoking the :sleep command might call timer callbacks.
+/// Secondly, it can be used to reduce rpc overhead (roundtrips) when doing
+/// many requests in sequence.
+///
+/// @param calls an array of calls, where each call is described by an array
+/// with two elements: the request name, and an array of arguments.
+/// @param[out] err Details of a validation error of the nvim_multi_request call
+/// itself, i e malformatted `calls` parameter. Errors from called methods will
+/// be indicated in the return value, see below.
+///
+/// @return an array with two elements. The first is an array of return
+/// values. The second is NIL if all calls succeeded. If a call resulted in
+/// an error, it is a three-element array with the zero-based index of the call
+/// which resulted in an error, the error type and the error message. If an
+/// error ocurred, the values from all preceding calls will still be returned.
+Array nvim_call_atomic(uint64_t channel_id, Array calls, Error *err)
+ FUNC_API_NOEVAL
+{
+ Array rv = ARRAY_DICT_INIT;
+ Array results = ARRAY_DICT_INIT;
+ Error nested_error = ERROR_INIT;
+
+ size_t i; // also used for freeing the variables
+ for (i = 0; i < calls.size; i++) {
+ if (calls.items[i].type != kObjectTypeArray) {
+ api_set_error(err,
+ Validation,
+ _("All items in calls array must be arrays"));
+ goto validation_error;
+ }
+ Array call = calls.items[i].data.array;
+ if (call.size != 2) {
+ api_set_error(err,
+ Validation,
+ _("All items in calls array must be arrays of size 2"));
+ goto validation_error;
+ }
+
+ if (call.items[0].type != kObjectTypeString) {
+ api_set_error(err,
+ Validation,
+ _("name must be String"));
+ goto validation_error;
+ }
+ String name = call.items[0].data.string;
+
+ if (call.items[1].type != kObjectTypeArray) {
+ api_set_error(err,
+ Validation,
+ _("args must be Array"));
+ goto validation_error;
+ }
+ Array args = call.items[1].data.array;
+
+ MsgpackRpcRequestHandler handler = msgpack_rpc_get_handler_for(name.data,
+ name.size);
+ Object result = handler.fn(channel_id, args, &nested_error);
+ if (nested_error.set) {
+ // error handled after loop
+ break;
+ }
+
+ ADD(results, result);
+ }
+
+ ADD(rv, ARRAY_OBJ(results));
+ if (nested_error.set) {
+ Array errval = ARRAY_DICT_INIT;
+ ADD(errval, INTEGER_OBJ((Integer)i));
+ ADD(errval, INTEGER_OBJ(nested_error.type));
+ ADD(errval, STRING_OBJ(cstr_to_string(nested_error.msg)));
+ ADD(rv, ARRAY_OBJ(errval));
+ } else {
+ ADD(rv, NIL);
+ }
+ return rv;
+
+validation_error:
+ api_free_array(results);
+ return rv;
+}
+
+
/// Writes a message to vim output or error buffer. The string is split
/// and flushed after each newline. Incomplete lines are kept for writing
/// later.
///
-/// @param message The message to write
-/// @param to_err true if it should be treated as an error message (use
-/// `emsg` instead of `msg` to print each line)
+/// @param message Message to write
+/// @param to_err true: message is an error (uses `emsg` instead of `msg`)
static void write_msg(String message, bool to_err)
{
static size_t out_pos = 0, err_pos = 0;
static char out_line_buf[LINE_BUFFER_SIZE], err_line_buf[LINE_BUFFER_SIZE];
-#define PUSH_CHAR(i, pos, line_buf, msg) \
- if (message.data[i] == NL || pos == LINE_BUFFER_SIZE - 1) { \
- line_buf[pos] = NUL; \
- msg((uint8_t *)line_buf); \
- pos = 0; \
- continue; \
- } \
- \
+#define PUSH_CHAR(i, pos, line_buf, msg) \
+ if (message.data[i] == NL || pos == LINE_BUFFER_SIZE - 1) { \
+ line_buf[pos] = NUL; \
+ msg((uint8_t *)line_buf); \
+ pos = 0; \
+ continue; \
+ } \
+ \
line_buf[pos++] = message.data[i];
++no_wait_return;
diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c
index f644453358..1f555a6a05 100644
--- a/src/nvim/api/window.c
+++ b/src/nvim/api/window.c
@@ -11,15 +11,14 @@
#include "nvim/window.h"
#include "nvim/screen.h"
#include "nvim/move.h"
-#include "nvim/misc2.h"
/// Gets the current buffer in a window
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The buffer handle
-Buffer window_get_buffer(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return Buffer handle
+Buffer nvim_win_get_buf(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -32,10 +31,10 @@ Buffer window_get_buffer(Window window, Error *err)
/// Gets the cursor position in the window
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return the (row, col) tuple
-ArrayOf(Integer, 2) window_get_cursor(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return (row, col) tuple
+ArrayOf(Integer, 2) nvim_win_get_cursor(Window window, Error *err)
{
Array rv = ARRAY_DICT_INIT;
win_T *win = find_window_by_handle(window, err);
@@ -50,10 +49,10 @@ ArrayOf(Integer, 2) window_get_cursor(Window window, Error *err)
/// Sets the cursor position in the window
///
-/// @param window The window handle
-/// @param pos the (row, col) tuple representing the new position
-/// @param[out] err Details of an error that may have occurred
-void window_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
+/// @param window Window handle
+/// @param pos (row, col) tuple representing the new position
+/// @param[out] err Error details, if any
+void nvim_win_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -96,10 +95,10 @@ void window_set_cursor(Window window, ArrayOf(Integer, 2) pos, Error *err)
/// Gets the window height
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return the height in rows
-Integer window_get_height(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return Height as a count of rows
+Integer nvim_win_get_height(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -113,10 +112,10 @@ Integer window_get_height(Window window, Error *err)
/// Sets the window height. This will only succeed if the screen is split
/// horizontally.
///
-/// @param window The window handle
-/// @param height the new height in rows
-/// @param[out] err Details of an error that may have occurred
-void window_set_height(Window window, Integer height, Error *err)
+/// @param window Window handle
+/// @param height Height as a count of rows
+/// @param[out] err Error details, if any
+void nvim_win_set_height(Window window, Integer height, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -139,10 +138,10 @@ void window_set_height(Window window, Integer height, Error *err)
/// Gets the window width
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return the width in columns
-Integer window_get_width(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return Width as a count of columns
+Integer nvim_win_get_width(Window window, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -156,10 +155,10 @@ Integer window_get_width(Window window, Error *err)
/// Sets the window width. This will only succeed if the screen is split
/// vertically.
///
-/// @param window The window handle
-/// @param width the new width in columns
-/// @param[out] err Details of an error that may have occurred
-void window_set_width(Window window, Integer width, Error *err)
+/// @param window Window handle
+/// @param width Width as a count of columns
+/// @param[out] err Error details, if any
+void nvim_win_set_width(Window window, Integer width, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -182,11 +181,11 @@ void window_set_width(Window window, Integer width, Error *err)
/// Gets a window-scoped (w:) variable
///
-/// @param window The window handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The variable value
-Object window_get_var(Window window, String name, Error *err)
+/// @param window Window handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+/// @return Variable value
+Object nvim_win_get_var(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -199,11 +198,46 @@ Object window_get_var(Window window, String name, Error *err)
/// Sets a window-scoped (w:) variable
///
-/// @param window The window handle
-/// @param name The variable name
-/// @param value The variable value
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @param window Window handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+void nvim_win_set_var(Window window, String name, Object value, Error *err)
+{
+ win_T *win = find_window_by_handle(window, err);
+
+ if (!win) {
+ return;
+ }
+
+ dict_set_value(win->w_vars, name, value, false, false, err);
+}
+
+/// Removes a window-scoped (w:) variable
+///
+/// @param window Window handle
+/// @param name Variable name
+/// @param[out] err Error details, if any
+void nvim_win_del_var(Window window, String name, Error *err)
+{
+ win_T *win = find_window_by_handle(window, err);
+
+ if (!win) {
+ return;
+ }
+
+ dict_set_value(win->w_vars, name, NIL, true, false, err);
+}
+
+/// Sets a window-scoped (w:) variable
+///
+/// @deprecated
+///
+/// @param window Window handle
+/// @param name Variable name
+/// @param value Variable value
+/// @param[out] err Error details, if any
+/// @return Old value or nil if there was no previous value.
///
/// @warning It may return nil if there was no previous value
/// or if previous value was `v:null`.
@@ -215,18 +249,17 @@ Object window_set_var(Window window, String name, Object value, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(win->w_vars, name, value, false, err);
+ return dict_set_value(win->w_vars, name, value, false, true, err);
}
/// Removes a window-scoped (w:) variable
///
-/// @param window The window handle
-/// @param name The variable name
-/// @param[out] err Details of an error that may have occurred
-/// @return The old value or nil if there was no previous value.
+/// @deprecated
///
-/// @warning It may return nil if there was no previous value
-/// or if previous value was `v:null`.
+/// @param window Window handle
+/// @param name variable name
+/// @param[out] err Error details, if any
+/// @return Old value
Object window_del_var(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -235,16 +268,16 @@ Object window_del_var(Window window, String name, Error *err)
return (Object) OBJECT_INIT;
}
- return dict_set_value(win->w_vars, name, NIL, true, err);
+ return dict_set_value(win->w_vars, name, NIL, true, true, err);
}
/// Gets a window option value
///
-/// @param window The window handle
-/// @param name The option name
-/// @param[out] err Details of an error that may have occurred
-/// @return The option value
-Object window_get_option(Window window, String name, Error *err)
+/// @param window Window handle
+/// @param name Option name
+/// @param[out] err Error details, if any
+/// @return Option value
+Object nvim_win_get_option(Window window, String name, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -258,11 +291,11 @@ Object window_get_option(Window window, String name, Error *err)
/// Sets a window option value. Passing 'nil' as value deletes the option(only
/// works if there's a global fallback)
///
-/// @param window The window handle
-/// @param name The option name
-/// @param value The option value
-/// @param[out] err Details of an error that may have occurred
-void window_set_option(Window window, String name, Object value, Error *err)
+/// @param window Window handle
+/// @param name Option name
+/// @param value Option value
+/// @param[out] err Error details, if any
+void nvim_win_set_option(Window window, String name, Object value, Error *err)
{
win_T *win = find_window_by_handle(window, err);
@@ -275,10 +308,10 @@ void window_set_option(Window window, String name, Object value, Error *err)
/// Gets the window position in display cells. First position is zero.
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The (row, col) tuple with the window position
-ArrayOf(Integer, 2) window_get_position(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return (row, col) tuple with the window position
+ArrayOf(Integer, 2) nvim_win_get_position(Window window, Error *err)
{
Array rv = ARRAY_DICT_INIT;
win_T *win = find_window_by_handle(window, err);
@@ -291,12 +324,12 @@ ArrayOf(Integer, 2) window_get_position(Window window, Error *err)
return rv;
}
-/// Gets the window tab page
+/// Gets the window tabpage
///
-/// @param window The window handle
-/// @param[out] err Details of an error that may have occurred
-/// @return The tab page that contains the window
-Tabpage window_get_tabpage(Window window, Error *err)
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return Tabpage that contains the window
+Tabpage nvim_win_get_tabpage(Window window, Error *err)
{
Tabpage rv = 0;
win_T *win = find_window_by_handle(window, err);
@@ -308,11 +341,31 @@ Tabpage window_get_tabpage(Window window, Error *err)
return rv;
}
+/// Gets the window number
+///
+/// @param window Window handle
+/// @param[out] err Error details, if any
+/// @return Window number
+Integer nvim_win_get_number(Window window, Error *err)
+{
+ int rv = 0;
+ win_T *win = find_window_by_handle(window, err);
+
+ if (!win) {
+ return rv;
+ }
+
+ int tabnr;
+ win_get_tabwin(window, &tabnr, &rv);
+
+ return rv;
+}
+
/// Checks if a window is valid
///
-/// @param window The window handle
+/// @param window Window handle
/// @return true if the window is valid, false otherwise
-Boolean window_is_valid(Window window)
+Boolean nvim_win_is_valid(Window window)
{
Error stub = ERROR_INIT;
return find_window_by_handle(window, &stub) != NULL;
diff --git a/src/nvim/auevents.lua b/src/nvim/auevents.lua
index 8d891effae..68a47c244f 100644
--- a/src/nvim/auevents.lua
+++ b/src/nvim/auevents.lua
@@ -28,6 +28,7 @@ return {
'CursorHoldI', -- idem, in Insert mode
'CursorMoved', -- cursor was moved
'CursorMovedI', -- cursor was moved in Insert mode
+ 'DirChanged', -- directory changed
'EncodingChanged', -- after changing the 'encoding' option
'FileAppendCmd', -- append to a file using command
'FileAppendPost', -- after appending to a file
@@ -89,6 +90,7 @@ return {
'VimLeave', -- before exiting Vim
'VimLeavePre', -- before exiting Vim and writing ShaDa file
'VimResized', -- after Vim window was resized
+ 'WinNew', -- when entering a new window
'WinEnter', -- after entering a window
'WinLeave', -- before leaving a window
},
@@ -101,6 +103,7 @@ return {
-- List of neovim-specific events or aliases for the purpose of generating
-- syntax file
neovim_specific = {
+ DirChanged=true,
TabClosed=true,
TabNew=true,
TabNewEntered=true,
diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c
index 72716daf0e..26dbbe8bb5 100644
--- a/src/nvim/buffer.c
+++ b/src/nvim/buffer.c
@@ -36,6 +36,7 @@
#include "nvim/ex_eval.h"
#include "nvim/ex_getln.h"
#include "nvim/fileio.h"
+#include "nvim/file_search.h"
#include "nvim/fold.h"
#include "nvim/getchar.h"
#include "nvim/hashtab.h"
@@ -48,7 +49,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/option.h"
@@ -189,14 +189,18 @@ open_buffer (
curwin->w_cursor.lnum = 1;
curwin->w_cursor.col = 0;
- /* Set or reset 'modified' before executing autocommands, so that
- * it can be changed there. */
- if (!readonlymode && !bufempty())
+ // Set or reset 'modified' before executing autocommands, so that
+ // it can be changed there.
+ if (!readonlymode && !bufempty()) {
changed();
- else if (retval != FAIL)
- unchanged(curbuf, FALSE);
- apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, FALSE,
- curbuf, &retval);
+ } else if (retval == OK) {
+ unchanged(curbuf, false);
+ }
+
+ if (retval == OK) {
+ apply_autocmds_retval(EVENT_STDINREADPOST, NULL, NULL, false,
+ curbuf, &retval);
+ }
}
}
@@ -206,22 +210,21 @@ open_buffer (
parse_cino(curbuf);
}
- /*
- * Set/reset the Changed flag first, autocmds may change the buffer.
- * Apply the automatic commands, before processing the modelines.
- * So the modelines have priority over auto commands.
- */
- /* When reading stdin, the buffer contents always needs writing, so set
- * the changed flag. Unless in readonly mode: "ls | nvim -R -".
- * When interrupted and 'cpoptions' contains 'i' set changed flag. */
+ // Set/reset the Changed flag first, autocmds may change the buffer.
+ // Apply the automatic commands, before processing the modelines.
+ // So the modelines have priority over auto commands.
+
+ // When reading stdin, the buffer contents always needs writing, so set
+ // the changed flag. Unless in readonly mode: "ls | nvim -R -".
+ // When interrupted and 'cpoptions' contains 'i' set changed flag.
if ((got_int && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
- || modified_was_set /* ":set modified" used in autocmd */
- || (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)
- )
+ || modified_was_set // ":set modified" used in autocmd
+ || (aborting() && vim_strchr(p_cpo, CPO_INTMOD) != NULL)) {
changed();
- else if (retval != FAIL && !read_stdin)
- unchanged(curbuf, FALSE);
- save_file_ff(curbuf); /* keep this fileformat */
+ } else if (retval == OK && !read_stdin) {
+ unchanged(curbuf, false);
+ }
+ save_file_ff(curbuf); // keep this fileformat
/* require "!" to overwrite the file, because it wasn't read completely */
if (aborting())
@@ -268,6 +271,9 @@ open_buffer (
bool buf_valid(buf_T *buf)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
+ if (buf == NULL) {
+ return false;
+ }
FOR_ALL_BUFFERS(bp) {
if (bp == buf) {
return true;
@@ -276,30 +282,46 @@ bool buf_valid(buf_T *buf)
return false;
}
-/*
- * Close the link to a buffer.
- * "action" is used when there is no longer a window for the buffer.
- * It can be:
- * 0 buffer becomes hidden
- * DOBUF_UNLOAD buffer is unloaded
- * DOBUF_DELETE buffer is unloaded and removed from buffer list
- * DOBUF_WIPE buffer is unloaded and really deleted
- * When doing all but the first one on the current buffer, the caller should
- * get a new buffer very soon!
- *
- * The 'bufhidden' option can force freeing and deleting.
- *
- * When "abort_if_last" is TRUE then do not close the buffer if autocommands
- * cause there to be only one window with this buffer. e.g. when ":quit" is
- * supposed to close the window but autocommands close all other windows.
- */
-void
-close_buffer (
- win_T *win, /* if not NULL, set b_last_cursor */
- buf_T *buf,
- int action,
- int abort_if_last
-)
+// Map used to quickly lookup a buffer by its number.
+static PMap(handle_T) *buf_map = NULL;
+
+static void buf_hashtab_add(buf_T *buf)
+ FUNC_ATTR_NONNULL_ALL
+{
+ if (pmap_has(handle_T)(buf_map, buf->handle)) {
+ EMSG(_("E931: Buffer cannot be registered"));
+ } else {
+ pmap_put(handle_T)(buf_map, buf->handle, buf);
+ }
+}
+
+static void buf_hashtab_remove(buf_T *buf)
+ FUNC_ATTR_NONNULL_ALL
+{
+ if (pmap_has(handle_T)(buf_map, buf->handle)) {
+ pmap_del(handle_T)(buf_map, buf->handle);
+ }
+}
+
+/// Close the link to a buffer.
+///
+/// @param win If not NULL, set b_last_cursor.
+/// @param buf
+/// @param action Used when there is no longer a window for the buffer.
+/// Possible values:
+/// 0 buffer becomes hidden
+/// DOBUF_UNLOAD buffer is unloaded
+/// DOBUF_DELETE buffer is unloaded and removed from buffer list
+/// DOBUF_WIPE buffer is unloaded and really deleted
+/// When doing all but the first one on the current buffer, the
+/// caller should get a new buffer very soon!
+/// The 'bufhidden' option can force freeing and deleting.
+/// @param abort_if_last
+/// If TRUE, do not close the buffer if autocommands cause
+/// there to be only one window with this buffer. e.g. when
+/// ":quit" is supposed to close the window but autocommands
+/// close all other windows.
+void close_buffer(win_T *win, buf_T *buf, int action, int abort_if_last)
{
bool unload_buf = (action != 0);
bool del_buf = (action == DOBUF_DEL || action == DOBUF_WIPE);
@@ -328,13 +350,14 @@ close_buffer (
wipe_buf = true;
}
- if (win_valid(win)) {
- /* Set b_last_cursor when closing the last window for the buffer.
- * Remember the last cursor position and window options of the buffer.
- * This used to be only for the current window, but then options like
- * 'foldmethod' may be lost with a ":only" command. */
- if (buf->b_nwindows == 1)
+ if (win_valid_any_tab(win)) {
+ // Set b_last_cursor when closing the last window for the buffer.
+ // Remember the last cursor position and window options of the buffer.
+ // This used to be only for the current window, but then options like
+ // 'foldmethod' may be lost with a ":only" command.
+ if (buf->b_nwindows == 1) {
set_last_cursor(win);
+ }
buflist_setfpos(buf, win,
win->w_cursor.lnum == 1 ? 0 : win->w_cursor.lnum,
win->w_cursor.col, TRUE);
@@ -407,9 +430,6 @@ close_buffer (
buf->b_nwindows = nwindows;
buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
- if (win_valid(win) && win->w_buffer == buf) {
- win->w_buffer = NULL; // make sure we don't use the buffer now
- }
/* Autocommands may have deleted the buffer. */
if (!buf_valid(buf))
@@ -417,11 +437,6 @@ close_buffer (
if (aborting()) /* autocmds may abort script processing */
return;
- /* Autocommands may have opened or closed windows for this buffer.
- * Decrement the count for the close we do here. */
- if (buf->b_nwindows > 0)
- --buf->b_nwindows;
-
/*
* It's possible that autocommands change curbuf to the one being deleted.
* This might cause the previous curbuf to be deleted unexpectedly. But
@@ -432,6 +447,16 @@ close_buffer (
if (buf == curbuf && !is_curbuf)
return;
+ if (win_valid_any_tab(win) && win->w_buffer == buf) {
+ win->w_buffer = NULL; // make sure we don't use the buffer now
+ }
+
+ // Autocommands may have opened or closed windows for this buffer.
+ // Decrement the count for the close we do here.
+ if (buf->b_nwindows > 0) {
+ buf->b_nwindows--;
+ }
+
/* Change directories when the 'acd' option is set. */
do_autochdir();
@@ -483,21 +508,39 @@ void buf_clear_file(buf_T *buf)
buf->b_ml.ml_flags = ML_EMPTY; /* empty buffer */
}
-/*
- * buf_freeall() - free all things allocated for a buffer that are related to
- * the file. flags:
- * BFA_DEL buffer is going to be deleted
- * BFA_WIPE buffer is going to be wiped out
- * BFA_KEEP_UNDO do not free undo information
- */
+/// Clears the current buffer contents.
+void buf_clear(void)
+{
+ linenr_T line_count = curbuf->b_ml.ml_line_count;
+ while (!(curbuf->b_ml.ml_flags & ML_EMPTY)) {
+ ml_delete((linenr_T)1, false);
+ }
+ deleted_lines_mark(1, line_count); // prepare for display
+ ml_close(curbuf, true); // free memline_T
+ buf_clear_file(curbuf);
+}
+
+/// buf_freeall() - free all things allocated for a buffer that are related to
+/// the file. Careful: get here with "curwin" NULL when exiting.
+///
+/// @param flags BFA_DEL buffer is going to be deleted
+/// BFA_WIPE buffer is going to be wiped out
+/// BFA_KEEP_UNDO do not free undo information
void buf_freeall(buf_T *buf, int flags)
{
bool is_curbuf = (buf == curbuf);
+ int is_curwin = (curwin != NULL && curwin->w_buffer == buf);
+ win_T *the_curwin = curwin;
+ tabpage_T *the_curtab = curtab;
+ // Make sure the buffer isn't closed by autocommands.
buf->b_closing = true;
- apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
- if (!buf_valid(buf)) /* autocommands may delete the buffer */
- return;
+ if (buf->b_ml.ml_mfp != NULL) {
+ apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, false, buf);
+ if (!buf_valid(buf)) { // autocommands may delete the buffer
+ return;
+ }
+ }
if ((flags & BFA_DEL) && buf->b_p_bl) {
apply_autocmds(EVENT_BUFDELETE, buf->b_fname, buf->b_fname, FALSE, buf);
if (!buf_valid(buf)) /* autocommands may delete the buffer */
@@ -510,8 +553,18 @@ void buf_freeall(buf_T *buf, int flags)
return;
}
buf->b_closing = false;
- if (aborting()) /* autocmds may abort script processing */
+
+ // If the buffer was in curwin and the window has changed, go back to that
+ // window, if it still exists. This avoids that ":edit x" triggering a
+ // "tabnext" BufUnload autocmd leaves a window behind without a buffer.
+ if (is_curwin && curwin != the_curwin && win_valid_any_tab(the_curwin)) {
+ block_autocmds();
+ goto_tabpage_win(the_curtab, the_curwin);
+ unblock_autocmds();
+ }
+ if (aborting()) { // autocmds may abort script processing
return;
+ }
/*
* It's possible that autocommands change curbuf to the one being deleted.
@@ -553,6 +606,7 @@ static void free_buffer(buf_T *buf)
free_buffer_stuff(buf, TRUE);
unref_var_dict(buf->b_vars);
aubuflocal_remove(buf);
+ buf_hashtab_remove(buf);
dict_unref(buf->additional_data);
clear_fmark(&buf->b_last_cursor);
clear_fmark(&buf->b_last_insert);
@@ -662,14 +716,15 @@ void handle_swap_exists(buf_T *old_curbuf)
* aborting() returns FALSE when closing a buffer. */
enter_cleanup(&cs);
- /* User selected Quit at ATTENTION prompt. Go back to previous
- * buffer. If that buffer is gone or the same as the current one,
- * open a new, empty buffer. */
- swap_exists_action = SEA_NONE; /* don't want it again */
- swap_exists_did_quit = TRUE;
- close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
- if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ // User selected Quit at ATTENTION prompt. Go back to previous
+ // buffer. If that buffer is gone or the same as the current one,
+ // open a new, empty buffer.
+ swap_exists_action = SEA_NONE; // don't want it again
+ swap_exists_did_quit = true;
+ close_buffer(curwin, curbuf, DOBUF_UNLOAD, false);
+ if (!buf_valid(old_curbuf) || old_curbuf == curbuf) {
old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ }
if (old_curbuf != NULL) {
enter_buffer(old_curbuf);
if (old_tw != curbuf->b_p_tw)
@@ -1249,6 +1304,10 @@ void enter_buffer(buf_T *buf)
/* mark cursor position as being invalid */
curwin->w_valid = 0;
+ if (buf->terminal) {
+ terminal_resize(buf->terminal, curwin->w_width, curwin->w_height);
+ }
+
/* Make sure the buffer is loaded. */
if (curbuf->b_ml.ml_mfp == NULL) { /* need to load the file */
/* If there is no filetype, allow for detecting one. Esp. useful for
@@ -1306,32 +1365,36 @@ void do_autochdir(void)
}
}
-/*
- * functions for dealing with the buffer list
- */
+//
+// functions for dealing with the buffer list
+//
-/*
- * Add a file name to the buffer list. Return a pointer to the buffer.
- * If the same file name already exists return a pointer to that buffer.
- * If it does not exist, or if fname == NULL, a new entry is created.
- * If (flags & BLN_CURBUF) is TRUE, may use current buffer.
- * If (flags & BLN_LISTED) is TRUE, add new buffer to buffer list.
- * If (flags & BLN_DUMMY) is TRUE, don't count it as a real buffer.
- * This is the ONLY way to create a new buffer.
- */
-static int top_file_num = 1; /* highest file number */
-
-buf_T *
-buflist_new (
- char_u *ffname, /* full path of fname or relative */
- char_u *sfname, /* short fname or NULL */
- linenr_T lnum, /* preferred cursor line */
- int flags /* BLN_ defines */
-)
+static int top_file_num = 1; ///< highest file number
+
+/// Add a file name to the buffer list.
+/// If the same file name already exists return a pointer to that buffer.
+/// If it does not exist, or if fname == NULL, a new entry is created.
+/// If (flags & BLN_CURBUF) is TRUE, may use current buffer.
+/// If (flags & BLN_LISTED) is TRUE, add new buffer to buffer list.
+/// If (flags & BLN_DUMMY) is TRUE, don't count it as a real buffer.
+/// If (flags & BLN_NEW) is TRUE, don't use an existing buffer.
+/// This is the ONLY way to create a new buffer.
+///
+/// @param ffname full path of fname or relative
+/// @param sfname short fname or NULL
+/// @param lnum preferred cursor line
+/// @param flags BLN_ defines
+/// @param bufnr
+///
+/// @return pointer to the buffer
+buf_T * buflist_new(char_u *ffname, char_u *sfname, linenr_T lnum, int flags)
{
buf_T *buf;
- fname_expand(curbuf, &ffname, &sfname); /* will allocate ffname */
+ if (top_file_num == 1) {
+ buf_map = pmap_new(handle_T)();
+ }
+ fname_expand(curbuf, &ffname, &sfname); // will allocate ffname
/*
* If file name already exists in the list, update the entry.
@@ -1393,8 +1456,7 @@ buflist_new (
}
if (buf != curbuf || curbuf == NULL) {
buf = xcalloc(1, sizeof(buf_T));
- handle_register_buffer(buf);
- /* init b: variables */
+ // init b: variables
buf->b_vars = dict_alloc();
init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
}
@@ -1447,14 +1509,16 @@ buflist_new (
lastbuf = buf;
buf->b_fnum = top_file_num++;
- if (top_file_num < 0) { /* wrap around (may cause duplicates) */
+ handle_register_buffer(buf);
+ if (top_file_num < 0) { // wrap around (may cause duplicates)
EMSG(_("W14: Warning: List of file names overflow"));
if (emsg_silent == 0) {
ui_flush();
- os_delay(3000L, true); /* make sure it is noticed */
+ os_delay(3000L, true); // make sure it is noticed
}
top_file_num = 1;
}
+ buf_hashtab_add(buf);
/*
* Always copy the options from the current buffer.
@@ -1534,6 +1598,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
clear_string_option(&buf->b_p_cms);
clear_string_option(&buf->b_p_nf);
clear_string_option(&buf->b_p_syn);
+ clear_string_option(&buf->b_s.b_syn_isk);
clear_string_option(&buf->b_s.b_p_spc);
clear_string_option(&buf->b_s.b_p_spf);
vim_regfree(buf->b_s.b_cap_prog);
@@ -1963,19 +2028,15 @@ static char_u *fname_match(regmatch_T *rmp, char_u *name, bool ignore_case)
return match;
}
-/*
- * find file in buffer list by number
- */
+/// Find a file in the buffer list by buffer number.
buf_T *buflist_findnr(int nr)
{
if (nr == 0) {
nr = curwin->w_alt_fnum;
}
- FOR_ALL_BUFFERS(buf) {
- if (buf->b_fnum == nr) {
- return buf;
- }
+ if (pmap_has(handle_T)(buf_map, (handle_T)nr)) {
+ return pmap_get(handle_T)(buf_map, (handle_T)nr);
}
return NULL;
}
@@ -2360,10 +2421,11 @@ buf_T *setaltfname(char_u *ffname, char_u *sfname, linenr_T lnum)
{
buf_T *buf;
- /* Create a buffer. 'buflisted' is not set if it's a new buffer */
+ // Create a buffer. 'buflisted' is not set if it's a new buffer
buf = buflist_new(ffname, sfname, lnum, 0);
- if (buf != NULL && !cmdmod.keepalt)
+ if (buf != NULL && !cmdmod.keepalt) {
curwin->w_alt_fnum = buf->b_fnum;
+ }
return buf;
}
@@ -2398,8 +2460,9 @@ int buflist_add(char_u *fname, int flags)
buf_T *buf;
buf = buflist_new(fname, NULL, (linenr_T)0, flags);
- if (buf != NULL)
+ if (buf != NULL) {
return buf->b_fnum;
+ }
return 0;
}
@@ -2848,7 +2911,7 @@ typedef enum {
/// is "curwin".
///
/// Items are drawn interspersed with the text that surrounds it
-/// Specials: %-<wid>(xxx%) => group, %= => middle marker, %< => truncation
+/// Specials: %-<wid>(xxx%) => group, %= => separation marker, %< => truncation
/// Item: %-<minwid>.<maxwid><itemch> All but <itemch> are optional
///
/// If maxwidth is not zero, the string will be filled at any middle marker
@@ -2892,7 +2955,7 @@ int build_stl_str_hl(
Normal,
Empty,
Group,
- Middle,
+ Separate,
Highlight,
TabPage,
ClickFunc,
@@ -2993,14 +3056,14 @@ int build_stl_str_hl(
continue;
}
- // STL_MIDDLEMARK: Separation place between left and right aligned items.
- if (*fmt_p == STL_MIDDLEMARK) {
+ // STL_SEPARATE: Separation place between left and right aligned items.
+ if (*fmt_p == STL_SEPARATE) {
fmt_p++;
// Ignored when we are inside of a grouping
if (groupdepth > 0) {
continue;
}
- item[curitem].type = Middle;
+ item[curitem].type = Separate;
item[curitem++].start = out_p;
continue;
}
@@ -3404,7 +3467,7 @@ int build_stl_str_hl(
case STL_KEYMAP:
fillable = false;
- if (get_keymap_str(wp, tmp, TMPLEN))
+ if (get_keymap_str(wp, (char_u *)"<%s>", tmp, TMPLEN))
str = tmp;
break;
case STL_PAGENUM:
@@ -3839,27 +3902,53 @@ int build_stl_str_hl(
width = maxwidth;
// If there is room left in our statusline, and room left in our buffer,
- // add characters at the middle marker (if there is one) to
+ // add characters at the separate marker (if there is one) to
// fill up the available space.
} else if (width < maxwidth
- && STRLEN(out) + maxwidth - width + 1 < outlen) {
- for (int item_idx = 0; item_idx < itemcnt; item_idx++) {
- if (item[item_idx].type == Middle) {
- // Move the statusline to make room for the middle characters
- char_u *middle_end = item[item_idx].start + (maxwidth - width);
- STRMOVE(middle_end, item[item_idx].start);
-
- // Fill the middle section with our fill character
- for (char_u *s = item[item_idx].start; s < middle_end; s++)
- *s = fillchar;
+ && STRLEN(out) + maxwidth - width + 1 < outlen) {
+ // Find how many separators there are, which we will use when
+ // figuring out how many groups there are.
+ int num_separators = 0;
+ for (int i = 0; i < itemcnt; i++) {
+ if (item[i].type == Separate) {
+ num_separators++;
+ }
+ }
+
+ // If we have separated groups, then we deal with it now
+ if (num_separators) {
+ // Create an array of the start location for each
+ // separator mark.
+ int separator_locations[STL_MAX_ITEM];
+ int index = 0;
+ for (int i = 0; i < itemcnt; i++) {
+ if (item[i].type == Separate) {
+ separator_locations[index] = i;
+ index++;
+ }
+ }
- // Adjust the offset of any items after the middle
- for (item_idx++; item_idx < itemcnt; item_idx++)
- item[item_idx].start += maxwidth - width;
+ int standard_spaces = (maxwidth - width) / num_separators;
+ int final_spaces = (maxwidth - width) -
+ standard_spaces * (num_separators - 1);
- width = maxwidth;
- break;
+ for (int i = 0; i < num_separators; i++) {
+ int dislocation = (i == (num_separators - 1)) ?
+ final_spaces : standard_spaces;
+ char_u *sep_loc = item[separator_locations[i]].start + dislocation;
+ STRMOVE(sep_loc, item[separator_locations[i]].start);
+ for (char_u *s = item[separator_locations[i]].start; s < sep_loc; s++) {
+ *s = fillchar;
+ }
+
+ for (int item_idx = separator_locations[i] + 1;
+ item_idx < itemcnt;
+ item_idx++) {
+ item[item_idx].start += dislocation;
+ }
}
+
+ width = maxwidth;
}
}
@@ -3999,8 +4088,8 @@ void fname_expand(buf_T *buf, char_u **ffname, char_u **sfname)
if (!buf->b_p_bin) {
char_u *rfname;
- /* If the file name is a shortcut file, use the file it links to. */
- rfname = mch_resolve_shortcut(*ffname);
+ // If the file name is a shortcut file, use the file it links to.
+ rfname = os_resolve_shortcut(*ffname);
if (rfname != NULL) {
xfree(*ffname);
*ffname = rfname;
@@ -4090,12 +4179,10 @@ do_arg_all (
wpnext = wp->w_next;
buf = wp->w_buffer;
if (buf->b_ffname == NULL
- || (!keep_tabs && buf->b_nwindows > 1)
- || wp->w_width != Columns
- )
+ || (!keep_tabs && (buf->b_nwindows > 1 || wp->w_width != Columns))) {
i = opened_len;
- else {
- /* check if the buffer in this window is in the arglist */
+ } else {
+ // check if the buffer in this window is in the arglist
for (i = 0; i < opened_len; ++i) {
if (i < alist->al_ga.ga_len
&& (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
@@ -4483,7 +4570,7 @@ chk_modeline (
char_u *e;
char_u *linecopy; /* local copy of any modeline found */
int prev;
- int vers;
+ intmax_t vers;
int end;
int retval = OK;
char_u *save_sourcing_name;
@@ -4502,7 +4589,10 @@ chk_modeline (
e = s + 4;
else
e = s + 3;
- vers = getdigits_int(&e);
+ if (getdigits_safe(&e, &vers) != OK) {
+ continue;
+ }
+
if (*e == ':'
&& (s[0] != 'V'
|| STRNCMP(skipwhite(e + 1), "set", 3) == 0)
@@ -4510,8 +4600,9 @@ chk_modeline (
|| (VIM_VERSION_100 >= vers && isdigit(s[3]))
|| (VIM_VERSION_100 < vers && s[3] == '<')
|| (VIM_VERSION_100 > vers && s[3] == '>')
- || (VIM_VERSION_100 == vers && s[3] == '=')))
+ || (VIM_VERSION_100 == vers && s[3] == '='))) {
break;
+ }
}
}
prev = *s;
@@ -4950,7 +5041,7 @@ int bufhl_add_hl(buf_T *buf,
bufhl_vec_T* lineinfo = map_ref(linenr_T, bufhl_vec_T)(buf->b_bufhl_info,
lnum, true);
- bufhl_hl_item_T *hlentry = kv_pushp(bufhl_hl_item_T, *lineinfo);
+ bufhl_hl_item_T *hlentry = kv_pushp(*lineinfo);
hlentry->src_id = src_id;
hlentry->hl_id = hl_id;
hlentry->start = col_start;
@@ -5200,12 +5291,30 @@ wipe_buffer (
int aucmd /* When TRUE trigger autocommands. */
)
{
- if (buf->b_fnum == top_file_num - 1)
- --top_file_num;
-
- if (!aucmd) /* Don't trigger BufDelete autocommands here. */
+ if (!aucmd) {
+ // Don't trigger BufDelete autocommands here.
block_autocmds();
- close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
- if (!aucmd)
+ }
+ close_buffer(NULL, buf, DOBUF_WIPE, false);
+ if (!aucmd) {
unblock_autocmds();
+ }
+}
+
+/// Creates or switches to a scratch buffer. :h special-buffers
+/// Scratch buffer is:
+/// - buftype=nofile bufhidden=hide noswapfile
+/// - Always considered 'nomodified'
+///
+/// @param bufnr Buffer to switch to, or 0 to create a new buffer.
+///
+/// @see curbufIsChanged()
+void buf_open_scratch(handle_T bufnr, char *bufname)
+{
+ (void)do_ecmd((int)bufnr, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
+ (void)setfname(curbuf, (char_u *)bufname, NULL, true);
+ set_option_value((char_u *)"bh", 0L, (char_u *)"hide", OPT_LOCAL);
+ set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
+ set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
+ RESET_BINDING(curwin);
}
diff --git a/src/nvim/buffer.h b/src/nvim/buffer.h
index d51a2f7dae..36cbec7e60 100644
--- a/src/nvim/buffer.h
+++ b/src/nvim/buffer.h
@@ -76,14 +76,14 @@ static inline void restore_win_for_buf(win_T *save_curwin,
}
}
-#define WITH_BUFFER(b, code) \
- do { \
- buf_T *save_curbuf = NULL; \
- win_T *save_curwin = NULL; \
- tabpage_T *save_curtab = NULL; \
- switch_to_win_for_buf(b, &save_curwin, &save_curtab, &save_curbuf); \
- code; \
- restore_win_for_buf(save_curwin, save_curtab, save_curbuf); \
+#define WITH_BUFFER(b, code) \
+ do { \
+ buf_T *save_curbuf = NULL; \
+ win_T *save_curwin = NULL; \
+ tabpage_T *save_curtab = NULL; \
+ switch_to_win_for_buf(b, &save_curwin, &save_curtab, &save_curbuf); \
+ code; \
+ restore_win_for_buf(save_curwin, save_curtab, save_curbuf); \
} while (0)
diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h
index 0324f6b88a..29f4dfe4fb 100644
--- a/src/nvim/buffer_defs.h
+++ b/src/nvim/buffer_defs.h
@@ -237,6 +237,8 @@ typedef struct {
# define w_p_crb w_onebuf_opt.wo_crb /* 'cursorbind' */
int wo_crb_save; /* 'cursorbind' state saved for diff mode*/
# define w_p_crb_save w_onebuf_opt.wo_crb_save
+ char_u *wo_scl;
+# define w_p_scl w_onebuf_opt.wo_scl // 'signcolumn'
int wo_scriptID[WV_COUNT]; /* SIDs for window-local options */
# define w_p_scriptID w_onebuf_opt.wo_scriptID
@@ -438,18 +440,23 @@ typedef struct {
linenr_T b_sst_check_lnum;
uint16_t b_sst_lasttick; /* last display tick */
- /* for spell checking */
- garray_T b_langp; /* list of pointers to slang_T, see spell.c */
- bool b_spell_ismw[256]; /* flags: is midword char */
- char_u *b_spell_ismw_mb; /* multi-byte midword chars */
- char_u *b_p_spc; /* 'spellcapcheck' */
- regprog_T *b_cap_prog; /* program for 'spellcapcheck' */
- char_u *b_p_spf; /* 'spellfile' */
- char_u *b_p_spl; /* 'spelllang' */
- int b_cjk; /* all CJK letters as OK */
+ // for spell checking
+ garray_T b_langp; // list of pointers to slang_T, see spell.c
+ bool b_spell_ismw[256]; // flags: is midword char
+ char_u *b_spell_ismw_mb; // multi-byte midword chars
+ char_u *b_p_spc; // 'spellcapcheck'
+ regprog_T *b_cap_prog; // program for 'spellcapcheck'
+ char_u *b_p_spf; // 'spellfile'
+ char_u *b_p_spl; // 'spelllang'
+ int b_cjk; // all CJK letters as OK
+ char_u b_syn_chartab[32]; // syntax iskeyword option
+ char_u *b_syn_isk; // iskeyword option
} synblock_T;
+#define BUF_HAS_QF_ENTRY 1
+#define BUF_HAS_LL_ENTRY 2
+
/*
* buffer: structure that holds information about one file
*
@@ -459,9 +466,10 @@ typedef struct {
*/
struct file_buffer {
- uint64_t handle; // unique identifier for the buffer
- memline_T b_ml; /* associated memline (also contains line
- count) */
+ handle_T handle; // unique id for the buffer (buffer number)
+#define b_fnum handle
+
+ memline_T b_ml; // associated memline (also contains line count
buf_T *b_next; /* links in list of buffers */
buf_T *b_prev;
@@ -485,11 +493,9 @@ struct file_buffer {
bool file_id_valid;
FileID file_id;
- int b_fnum; /* buffer number for this file. */
-
- bool b_changed; /* 'modified': Set to true if something in the
- file has been changed and not written out. */
- int b_changedtick; /* incremented for each change, also for undo */
+ int b_changed; // 'modified': Set to true if something in the
+ // file has been changed and not written out.
+ int b_changedtick; // incremented for each change, also for undo
bool b_saving; /* Set to true if we are in the middle of
saving the buffer. */
@@ -608,6 +614,7 @@ struct file_buffer {
int b_p_bomb; ///< 'bomb'
char_u *b_p_bh; ///< 'bufhidden'
char_u *b_p_bt; ///< 'buftype'
+ int b_has_qf_entry; ///< quickfix exists for buffer
int b_p_bl; ///< 'buflisted'
int b_p_cin; ///< 'cindent'
char_u *b_p_cino; ///< 'cinoptions'
@@ -654,7 +661,7 @@ struct file_buffer {
long b_p_sts; ///< 'softtabstop'
long b_p_sts_nopaste; ///< b_p_sts saved for paste mode
char_u *b_p_sua; ///< 'suffixesadd'
- bool b_p_swf; ///< 'swapfile'
+ int b_p_swf; ///< 'swapfile'
long b_p_smc; ///< 'synmaxcol'
char_u *b_p_syn; ///< 'syntax'
long b_p_ts; ///< 'tabstop'
@@ -770,7 +777,7 @@ struct file_buffer {
/*
* Stuff for diff mode.
*/
-# define DB_COUNT 4 /* up to four buffers can be diff'ed */
+# define DB_COUNT 8 // up to four buffers can be diff'ed
/*
* Each diffblock defines where a block of lines starts in each of the buffers
@@ -797,28 +804,27 @@ struct diffblock_S {
# define SNAP_AUCMD_IDX 1
# define SNAP_COUNT 2
-/*
- * Tab pages point to the top frame of each tab page.
- * Note: Most values are NOT valid for the current tab page! Use "curwin",
- * "firstwin", etc. for that. "tp_topframe" is always valid and can be
- * compared against "topframe" to find the current tab page.
- */
+/// Tab pages point to the top frame of each tab page.
+/// Note: Most values are NOT valid for the current tab page! Use "curwin",
+/// "firstwin", etc. for that. "tp_topframe" is always valid and can be
+/// compared against "topframe" to find the current tab page.
typedef struct tabpage_S tabpage_T;
struct tabpage_S {
- uint64_t handle;
- tabpage_T *tp_next; /* next tabpage or NULL */
- frame_T *tp_topframe; /* topframe for the windows */
- win_T *tp_curwin; /* current window in this Tab page */
- win_T *tp_prevwin; /* previous window in this Tab page */
- win_T *tp_firstwin; /* first window in this Tab page */
- win_T *tp_lastwin; /* last window in this Tab page */
- long tp_old_Rows; /* Rows when Tab page was left */
- long tp_old_Columns; /* Columns when Tab page was left */
- long tp_ch_used; /* value of 'cmdheight' when frame size
- was set */
+ handle_T handle;
+ tabpage_T *tp_next; ///< next tabpage or NULL
+ frame_T *tp_topframe; ///< topframe for the windows
+ win_T *tp_curwin; ///< current window in this Tab page
+ win_T *tp_prevwin; ///< previous window in this Tab page
+ win_T *tp_firstwin; ///< first window in this Tab page
+ win_T *tp_lastwin; ///< last window in this Tab page
+ long tp_old_Rows; ///< Rows when Tab page was left
+ long tp_old_Columns; ///< Columns when Tab page was left
+ long tp_ch_used; ///< value of 'cmdheight' when frame size
+ ///< was set
+
diff_T *tp_first_diff;
buf_T *(tp_diffbuf[DB_COUNT]);
- int tp_diff_invalid; ///< list of diffs is outdated */
+ int tp_diff_invalid; ///< list of diffs is outdated
frame_T *(tp_snapshot[SNAP_COUNT]); ///< window layout snapshots
dictitem_T tp_winvar; ///< variable for "t:" Dictionary
dict_T *tp_vars; ///< internal variables, local to tab page
@@ -877,16 +883,17 @@ struct frame_S {
* match functions there is a different pattern for each window.
*/
typedef struct {
- regmmatch_T rm; /* points to the regexp program; contains last found
- match (may continue in next line) */
- buf_T *buf; /* the buffer to search for a match */
- linenr_T lnum; /* the line to search for a match */
- int attr; /* attributes to be used for a match */
- int attr_cur; /* attributes currently active in win_line() */
- linenr_T first_lnum; /* first lnum to search for multi-line pat */
- colnr_T startcol; /* in win_line() points to char where HL starts */
- colnr_T endcol; /* in win_line() points to char where HL ends */
- proftime_T tm; /* for a time limit */
+ regmmatch_T rm; // points to the regexp program; contains last found
+ // match (may continue in next line)
+ buf_T *buf; // the buffer to search for a match
+ linenr_T lnum; // the line to search for a match
+ int attr; // attributes to be used for a match
+ int attr_cur; // attributes currently active in win_line()
+ linenr_T first_lnum; // first lnum to search for multi-line pat
+ colnr_T startcol; // in win_line() points to char where HL starts
+ colnr_T endcol; // in win_line() points to char where HL ends
+ bool is_addpos; // position specified directly by matchaddpos()
+ proftime_T tm; // for a time limit
} match_T;
/// number of positions supported by matchaddpos()
@@ -934,9 +941,10 @@ struct matchitem {
* All row numbers are relative to the start of the window, except w_winrow.
*/
struct window_S {
- uint64_t handle;
- buf_T *w_buffer; /* buffer we are a window into (used
- often, keep it the first item!) */
+ handle_T handle; ///< unique identifier for the window
+
+ buf_T *w_buffer; ///< buffer we are a window into (used
+ ///< often, keep it the first item!)
synblock_T *w_s; /* for :ownsyntax */
@@ -1034,11 +1042,11 @@ struct window_S {
*/
int w_wrow, w_wcol; /* cursor position in window */
- linenr_T w_botline; /* number of the line below the bottom of
- the screen */
- int w_empty_rows; /* number of ~ rows in window */
- int w_filler_rows; /* number of filler rows at the end of the
- window */
+ linenr_T w_botline; // number of the line below the bottom of
+ // the window
+ int w_empty_rows; // number of ~ rows in window
+ int w_filler_rows; // number of filler rows at the end of the
+ // window
/*
* Info about the lines currently in the window is remembered to avoid
diff --git a/src/nvim/charset.c b/src/nvim/charset.c
index d0dc7b66fc..4d150c3230 100644
--- a/src/nvim/charset.c
+++ b/src/nvim/charset.c
@@ -19,10 +19,11 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
+#include "nvim/option.h"
#include "nvim/os_unix.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/path.h"
@@ -43,20 +44,25 @@ static bool chartab_initialized = false;
#define GET_CHARTAB(buf, c) \
((buf)->b_chartab[(unsigned)(c) >> 6] & (1ull << ((c) & 0x3f)))
-/// Fill chartab[]. Also fills curbuf->b_chartab[] with flags for keyword
+// Table used below, see init_chartab() for an explanation
+static char_u g_chartab[256];
+
+// Flags for g_chartab[].
+#define CT_CELL_MASK 0x07 ///< mask: nr of display cells (1, 2 or 4)
+#define CT_PRINT_CHAR 0x10 ///< flag: set for printable chars
+#define CT_ID_CHAR 0x20 ///< flag: set for ID chars
+#define CT_FNAME_CHAR 0x40 ///< flag: set for file name chars
+
+/// Fill g_chartab[]. Also fills curbuf->b_chartab[] with flags for keyword
/// characters for current buffer.
///
/// Depends on the option settings 'iskeyword', 'isident', 'isfname',
/// 'isprint' and 'encoding'.
///
-/// The index in chartab[] depends on 'encoding':
-/// - For non-multi-byte index with the byte (same as the character).
-/// - For DBCS index with the first byte.
-/// - For UTF-8 index with the character (when first byte is up to 0x80 it is
-/// the same as the character, if the first byte is 0x80 and above it depends
-/// on further bytes).
+/// The index in g_chartab[] is the character when first byte is up to 0x80,
+/// if the first byte is 0x80 and above it depends on further bytes.
///
-/// The contents of chartab[]:
+/// The contents of g_chartab[]:
/// - The lower two bits, masked by CT_CELL_MASK, give the number of display
/// cells the character occupies (1 or 2). Not valid for UTF-8 above 0x80.
/// - CT_PRINT_CHAR bit is set when the character is printable (no need to
@@ -94,41 +100,33 @@ int buf_init_chartab(buf_T *buf, int global)
c = 0;
while (c < ' ') {
- chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2;
+ g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2;
}
while (c <= '~') {
- chartab[c++] = 1 + CT_PRINT_CHAR;
+ g_chartab[c++] = 1 + CT_PRINT_CHAR;
}
if (p_altkeymap) {
while (c < YE) {
- chartab[c++] = 1 + CT_PRINT_CHAR;
+ g_chartab[c++] = 1 + CT_PRINT_CHAR;
}
}
while (c < 256) {
- if (enc_utf8 && (c >= 0xa0)) {
+ if (c >= 0xa0) {
// UTF-8: bytes 0xa0 - 0xff are printable (latin1)
- chartab[c++] = CT_PRINT_CHAR + 1;
- } else if ((enc_dbcs == DBCS_JPNU) && (c == 0x8e)) {
- // euc-jp characters starting with 0x8e are single width
- chartab[c++] = CT_PRINT_CHAR + 1;
- } else if ((enc_dbcs != 0) && (MB_BYTE2LEN(c) == 2)) {
- // other double-byte chars can be printable AND double-width
- chartab[c++] = CT_PRINT_CHAR + 2;
+ g_chartab[c++] = CT_PRINT_CHAR + 1;
} else {
// the rest is unprintable by default
- chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2;
+ g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2;
}
}
// Assume that every multi-byte char is a filename character.
- for (c = 1; c < 256; ++c) {
- if (((enc_dbcs != 0) && (MB_BYTE2LEN(c) > 1))
- || ((enc_dbcs == DBCS_JPNU) && (c == 0x8e))
- || (enc_utf8 && (c >= 0xa0))) {
- chartab[c] |= CT_FNAME_CHAR;
+ for (c = 1; c < 256; c++) {
+ if (c >= 0xa0) {
+ g_chartab[c] |= CT_FNAME_CHAR;
}
}
}
@@ -136,15 +134,6 @@ int buf_init_chartab(buf_T *buf, int global)
// Init word char flags all to false
memset(buf->b_chartab, 0, (size_t)32);
- if (enc_dbcs != 0) {
- for (c = 0; c < 256; ++c) {
- // double-byte characters are probably word characters
- if (MB_BYTE2LEN(c) == 2) {
- SET_CHARTAB(buf, c);
- }
- }
- }
-
// In lisp mode the '-' character is included in keywords.
if (buf->b_p_lisp) {
SET_CHARTAB(buf, '-');
@@ -179,10 +168,8 @@ int buf_init_chartab(buf_T *buf, int global)
if (ascii_isdigit(*p)) {
c = getdigits_int(&p);
- } else if (has_mbyte) {
- c = mb_ptr2char_adv(&p);
} else {
- c = *p++;
+ c = mb_ptr2char_adv(&p);
}
c2 = -1;
@@ -191,10 +178,8 @@ int buf_init_chartab(buf_T *buf, int global)
if (ascii_isdigit(*p)) {
c2 = getdigits_int(&p);
- } else if (has_mbyte) {
- c2 = mb_ptr2char_adv(&p);
} else {
- c2 = *p++;
+ c2 = mb_ptr2char_adv(&p);
}
}
@@ -231,9 +216,9 @@ int buf_init_chartab(buf_T *buf, int global)
if (i == 0) {
// (re)set ID flag
if (tilde) {
- chartab[c] &= (uint8_t)~CT_ID_CHAR;
+ g_chartab[c] &= (uint8_t)~CT_ID_CHAR;
} else {
- chartab[c] |= CT_ID_CHAR;
+ g_chartab[c] |= CT_ID_CHAR;
}
} else if (i == 1) {
// (re)set printable
@@ -241,23 +226,22 @@ int buf_init_chartab(buf_T *buf, int global)
// that we can detect it from the first byte.
if (((c < ' ')
|| (c > '~')
- || (p_altkeymap && (F_isalpha(c) || F_isdigit(c))))
- && !(enc_dbcs && (MB_BYTE2LEN(c) == 2))) {
+ || (p_altkeymap && (F_isalpha(c) || F_isdigit(c))))) {
if (tilde) {
- chartab[c] = (uint8_t)((chartab[c] & ~CT_CELL_MASK)
- + ((dy_flags & DY_UHEX) ? 4 : 2));
- chartab[c] &= (uint8_t)~CT_PRINT_CHAR;
+ g_chartab[c] = (uint8_t)((g_chartab[c] & ~CT_CELL_MASK)
+ + ((dy_flags & DY_UHEX) ? 4 : 2));
+ g_chartab[c] &= (uint8_t)~CT_PRINT_CHAR;
} else {
- chartab[c] = (uint8_t)((chartab[c] & ~CT_CELL_MASK) + 1);
- chartab[c] |= CT_PRINT_CHAR;
+ g_chartab[c] = (uint8_t)((g_chartab[c] & ~CT_CELL_MASK) + 1);
+ g_chartab[c] |= CT_PRINT_CHAR;
}
}
} else if (i == 2) {
// (re)set fname flag
if (tilde) {
- chartab[c] &= (uint8_t)~CT_FNAME_CHAR;
+ g_chartab[c] &= (uint8_t)~CT_FNAME_CHAR;
} else {
- chartab[c] |= CT_FNAME_CHAR;
+ g_chartab[c] |= CT_FNAME_CHAR;
}
} else { // i == 3
// (re)set keyword flag
@@ -303,7 +287,7 @@ void trans_characters(char_u *buf, int bufsize)
while (*buf != 0) {
// Assume a multi-byte character doesn't need translation.
- if (has_mbyte && ((trs_len = (*mb_ptr2len)(buf)) > 1)) {
+ if ((trs_len = (*mb_ptr2len)(buf)) > 1) {
len -= trs_len;
} else {
trs = transchar_byte(*buf);
@@ -337,44 +321,40 @@ char_u *transstr(char_u *s) FUNC_ATTR_NONNULL_RET
size_t l;
char_u hexbuf[11];
- if (has_mbyte) {
- // Compute the length of the result, taking account of unprintable
- // multi-byte characters.
- size_t len = 0;
- p = s;
+ // Compute the length of the result, taking account of unprintable
+ // multi-byte characters.
+ size_t len = 0;
+ p = s;
- while (*p != NUL) {
- if ((l = (size_t)(*mb_ptr2len)(p)) > 1) {
- c = (*mb_ptr2char)(p);
- p += l;
+ while (*p != NUL) {
+ if ((l = (size_t)(*mb_ptr2len)(p)) > 1) {
+ c = (*mb_ptr2char)(p);
+ p += l;
- if (vim_isprintc(c)) {
- len += l;
- } else {
- transchar_hex(hexbuf, c);
- len += STRLEN(hexbuf);
- }
+ if (vim_isprintc(c)) {
+ len += l;
} else {
- l = (size_t)byte2cells(*p++);
+ transchar_hex(hexbuf, c);
+ len += STRLEN(hexbuf);
+ }
+ } else {
+ l = (size_t)byte2cells(*p++);
- if (l > 0) {
- len += l;
- } else {
- // illegal byte sequence
- len += 4;
- }
+ if (l > 0) {
+ len += l;
+ } else {
+ // illegal byte sequence
+ len += 4;
}
}
- res = xmallocz(len);
- } else {
- res = xmallocz((size_t)vim_strsize(s));
}
+ res = xmallocz(len);
*res = NUL;
p = s;
while (*p != NUL) {
- if (has_mbyte && ((l = (size_t)(*mb_ptr2len)(p)) > 1)) {
+ if ((l = (size_t)(*mb_ptr2len)(p)) > 1) {
c = (*mb_ptr2char)(p);
if (vim_isprintc(c)) {
@@ -433,68 +413,58 @@ char_u* str_foldcase(char_u *str, int orglen, char_u *buf, int buflen)
// Make each character lower case.
i = 0;
while (STR_CHAR(i) != NUL) {
- if (enc_utf8 || (has_mbyte && (MB_BYTE2LEN(STR_CHAR(i)) > 1))) {
- if (enc_utf8) {
- int c = utf_ptr2char(STR_PTR(i));
- int olen = utf_ptr2len(STR_PTR(i));
- int lc = utf_tolower(c);
-
- // Only replace the character when it is not an invalid
- // sequence (ASCII character or more than one byte) and
- // utf_tolower() doesn't return the original character.
- if (((c < 0x80) || (olen > 1)) && (c != lc)) {
- int nlen = utf_char2len(lc);
-
- // If the byte length changes need to shift the following
- // characters forward or backward.
- if (olen != nlen) {
- if (nlen > olen) {
- if (buf == NULL) {
- ga_grow(&ga, nlen - olen + 1);
- } else {
- if (len + nlen - olen >= buflen) {
- // out of memory, keep old char
- lc = c;
- nlen = olen;
- }
- }
- }
-
- if (olen != nlen) {
- if (buf == NULL) {
- STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
- ga.ga_len += nlen - olen;
- } else {
- STRMOVE(buf + i + nlen, buf + i + olen);
- len += nlen - olen;
- }
+ int c = utf_ptr2char(STR_PTR(i));
+ int olen = utf_ptr2len(STR_PTR(i));
+ int lc = utf_tolower(c);
+
+ // Only replace the character when it is not an invalid
+ // sequence (ASCII character or more than one byte) and
+ // utf_tolower() doesn't return the original character.
+ if (((c < 0x80) || (olen > 1)) && (c != lc)) {
+ int nlen = utf_char2len(lc);
+
+ // If the byte length changes need to shift the following
+ // characters forward or backward.
+ if (olen != nlen) {
+ if (nlen > olen) {
+ if (buf == NULL) {
+ ga_grow(&ga, nlen - olen + 1);
+ } else {
+ if (len + nlen - olen >= buflen) {
+ // out of memory, keep old char
+ lc = c;
+ nlen = olen;
}
}
- (void)utf_char2bytes(lc, STR_PTR(i));
}
- }
- // skip to next multi-byte char
- i += (*mb_ptr2len)(STR_PTR(i));
- } else {
- if (buf == NULL) {
- GA_CHAR(i) = (char_u)TOLOWER_LOC(GA_CHAR(i));
- } else {
- buf[i] = (char_u)TOLOWER_LOC(buf[i]);
+ if (olen != nlen) {
+ if (buf == NULL) {
+ STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
+ ga.ga_len += nlen - olen;
+ } else {
+ STRMOVE(buf + i + nlen, buf + i + olen);
+ len += nlen - olen;
+ }
+ }
}
- ++i;
+ (void)utf_char2bytes(lc, STR_PTR(i));
}
+
+ // skip to next multi-byte char
+ i += (*mb_ptr2len)(STR_PTR(i));
}
+
if (buf == NULL) {
return (char_u *)ga.ga_data;
}
return buf;
}
-// Catch 22: chartab[] can't be initialized before the options are
+// Catch 22: g_chartab[] can't be initialized before the options are
// initialized, and initializing options may cause transchar() to be called!
-// When chartab_initialized == false don't use chartab[].
+// When chartab_initialized == false don't use g_chartab[].
// Does NOT work for multi-byte characters, c must be <= 255.
// Also doesn't work for the first byte of a multi-byte, "c" must be a
// character!
@@ -535,7 +505,7 @@ char_u* transchar(int c)
/// @return pointer to translated character in transchar_buf.
char_u* transchar_byte(int c)
{
- if (enc_utf8 && (c >= 0x80)) {
+ if (c >= 0x80) {
transchar_nonprint(transchar_buf, c);
return transchar_buf;
}
@@ -568,7 +538,7 @@ void transchar_nonprint(char_u *buf, int c)
buf[1] = (char_u)(c ^ 0x40);
buf[2] = NUL;
- } else if (enc_utf8 && (c >= 0x80)) {
+ } else if (c >= 0x80) {
transchar_hex(buf, c);
} else if ((c >= ' ' + 0x80) && (c <= '~' + 0x80)) {
// 0xa0 - 0xfe
@@ -622,18 +592,18 @@ static unsigned nr2hex(unsigned c)
/// Caller must make sure 0 <= b <= 255.
/// For multi-byte mode "b" must be the first byte of a character.
/// A TAB is counted as two cells: "^I".
-/// For UTF-8 mode this will return 0 for bytes >= 0x80, because the number of
-/// cells depends on further bytes.
+/// This will return 0 for bytes >= 0x80, because the number of
+/// cells depends on further bytes in UTF-8.
///
/// @param b
///
/// @reeturn Number of display cells.
int byte2cells(int b)
{
- if (enc_utf8 && (b >= 0x80)) {
+ if (b >= 0x80) {
return 0;
}
- return chartab[b] & CT_CELL_MASK;
+ return g_chartab[b] & CT_CELL_MASK;
}
/// Return number of display cells occupied by character "c".
@@ -652,20 +622,9 @@ int char2cells(int c)
if (c >= 0x80) {
// UTF-8: above 0x80 need to check the value
- if (enc_utf8) {
- return utf_char2cells(c);
- }
-
- // DBCS: double-byte means double-width, except for euc-jp with first
- // byte 0x8e
- if ((enc_dbcs != 0) && (c >= 0x100)) {
- if ((enc_dbcs == DBCS_JPNU) && (((unsigned)c >> 8) == 0x8e)) {
- return 1;
- }
- return 2;
- }
+ return utf_char2cells(c);
}
- return chartab[c & 0xff] & CT_CELL_MASK;
+ return g_chartab[c & 0xff] & CT_CELL_MASK;
}
/// Return number of display cells occupied by character at "*p".
@@ -677,12 +636,12 @@ int char2cells(int c)
int ptr2cells(char_u *p)
{
// For UTF-8 we need to look at more bytes if the first byte is >= 0x80.
- if (enc_utf8 && (*p >= 0x80)) {
+ if (*p >= 0x80) {
return utf_ptr2cells(p);
}
// For DBCS we can tell the cell count from the first byte.
- return chartab[*p] & CT_CELL_MASK;
+ return g_chartab[*p] & CT_CELL_MASK;
}
/// Return the number of character cells string "s" will take on the screen,
@@ -712,14 +671,10 @@ int vim_strnsize(char_u *s, int len)
assert(s != NULL);
int size = 0;
while (*s != NUL && --len >= 0) {
- if (has_mbyte) {
- int l = (*mb_ptr2len)(s);
- size += ptr2cells(s);
- s += l;
- len -= l - 1;
- } else {
- size += byte2cells(*s++);
- }
+ int l = (*mb_ptr2len)(s);
+ size += ptr2cells(s);
+ s += l;
+ len -= l - 1;
}
return size;
}
@@ -806,7 +761,7 @@ unsigned int win_linetabsize(win_T *wp, char_u *line, colnr_T len)
bool vim_isIDc(int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
- return c > 0 && c < 0x100 && (chartab[c] & CT_ID_CHAR);
+ return c > 0 && c < 0x100 && (g_chartab[c] & CT_ID_CHAR);
}
/// Check that "c" is a keyword character:
@@ -830,13 +785,7 @@ bool vim_iswordc_buf(int c, buf_T *buf)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ARG(2)
{
if (c >= 0x100) {
- if (enc_dbcs != 0) {
- return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2;
- }
-
- if (enc_utf8) {
- return utf_class(c) >= 2;
- }
+ return utf_class(c) >= 2;
}
return c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0;
}
@@ -849,7 +798,7 @@ bool vim_iswordc_buf(int c, buf_T *buf)
bool vim_iswordp(char_u *p)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
- if (has_mbyte && (MB_BYTE2LEN(*p) > 1)) {
+ if (MB_BYTE2LEN(*p) > 1) {
return mb_get_class(p) >= 2;
}
return GET_CHARTAB(curbuf, *p) != 0;
@@ -865,7 +814,7 @@ bool vim_iswordp(char_u *p)
bool vim_iswordp_buf(char_u *p, buf_T *buf)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
- if (has_mbyte && (MB_BYTE2LEN(*p) > 1)) {
+ if (MB_BYTE2LEN(*p) > 1) {
return mb_get_class(p) >= 2;
}
return GET_CHARTAB(buf, *p) != 0;
@@ -878,7 +827,7 @@ bool vim_iswordp_buf(char_u *p, buf_T *buf)
bool vim_isfilec(int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
- return c >= 0x100 || (c > 0 && (chartab[c] & CT_FNAME_CHAR));
+ return c >= 0x100 || (c > 0 && (g_chartab[c] & CT_FNAME_CHAR));
}
/// Check that "c" is a valid file-name character or a wildcard character
@@ -903,10 +852,10 @@ bool vim_isfilec_or_wc(int c)
bool vim_isprintc(int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
- if (enc_utf8 && (c >= 0x100)) {
+ if (c >= 0x100) {
return utf_printable(c);
}
- return c >= 0x100 || (c > 0 && (chartab[c] & CT_PRINT_CHAR));
+ return c >= 0x100 || (c > 0 && (g_chartab[c] & CT_PRINT_CHAR));
}
/// Strict version of vim_isprintc(c), don't return true if "c" is the head
@@ -918,14 +867,10 @@ bool vim_isprintc(int c)
bool vim_isprintc_strict(int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
- if ((enc_dbcs != 0) && (c < 0x100) && (MB_BYTE2LEN(c) > 1)) {
- return false;
- }
-
- if (enc_utf8 && (c >= 0x100)) {
+ if (c >= 0x100) {
return utf_printable(c);
}
- return c >= 0x100 || (c > 0 && (chartab[c] & CT_PRINT_CHAR));
+ return c > 0 && (g_chartab[c] & CT_PRINT_CHAR);
}
/// like chartabsize(), but also check for line breaks on the screen
@@ -1042,8 +987,7 @@ int win_lbr_chartabsize(win_T *wp, char_u *line, char_u *s, colnr_T col, int *he
break;
}
}
- } else if (has_mbyte
- && (size == 2)
+ } else if ((size == 2)
&& (MB_BYTE2LEN(*s) > 1)
&& wp->w_p_wrap
&& in_win_border(wp, col)) {
@@ -1241,27 +1185,23 @@ void getvcol(win_T *wp, pos_T *pos, colnr_T *start, colnr_T *cursor,
if (c == TAB) {
incr = ts - (vcol % ts);
} else {
- if (has_mbyte) {
- // For utf-8, if the byte is >= 0x80, need to look at
- // further bytes to find the cell width.
- if (enc_utf8 && (c >= 0x80)) {
- incr = utf_ptr2cells(ptr);
- } else {
- incr = CHARSIZE(c);
- }
-
- // If a double-cell char doesn't fit at the end of a line
- // it wraps to the next line, it's like this char is three
- // cells wide.
- if ((incr == 2)
- && wp->w_p_wrap
- && (MB_BYTE2LEN(*ptr) > 1)
- && in_win_border(wp, vcol)) {
- ++incr;
- head = 1;
- }
+ // For utf-8, if the byte is >= 0x80, need to look at
+ // further bytes to find the cell width.
+ if (c >= 0x80) {
+ incr = utf_ptr2cells(ptr);
} else {
- incr = CHARSIZE(c);
+ incr = g_chartab[c] & CT_CELL_MASK;
+ }
+
+ // If a double-cell char doesn't fit at the end of a line
+ // it wraps to the next line, it's like this char is three
+ // cells wide.
+ if ((incr == 2)
+ && wp->w_p_wrap
+ && (MB_BYTE2LEN(*ptr) > 1)
+ && in_win_border(wp, vcol)) {
+ incr++;
+ head = 1;
}
}
@@ -1547,64 +1487,19 @@ char_u* skiptohex(char_u *q)
// islower()/toupper() etc. do not work properly: they crash when used with
// invalid values or can't handle latin1 when the locale is C.
// Speed is most important here.
-#define LATIN1LOWER 'l'
-#define LATIN1UPPER 'U'
-
-static char_u latin1flags[257] =
- " "
- " UUUUUUUUUUUUUUUUUUUUUUUUUU llllllllllllllllllllllllll "
- " "
- "UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
-static char_u latin1upper[257] =
- " !\"#$%&'()*+,-./0123456789:;<=>"
- "?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~"
- "\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e"
- "\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e"
- "\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae"
- "\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe"
- "\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce"
- "\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde"
- "\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce"
- "\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
-static char_u latin1lower[257] =
- " !\"#$%&'()*+,-./0123456789:;<=>"
- "?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
- "\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e"
- "\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e"
- "\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae"
- "\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe"
- "\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee"
- "\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe"
- "\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee"
- "\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
/// Check that the character is lower-case
///
/// @param c character to check
bool vim_islower(int c)
- FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
+ FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
if (c <= '@') {
return false;
}
if (c >= 0x80) {
- if (enc_utf8) {
- return utf_islower(c);
- }
-
- if (c >= 0x100) {
- if (has_mbyte) {
- return iswlower((wint_t)c);
- }
-
- // islower() can't handle these chars and may crash
- return false;
- }
-
- if (enc_latin1like) {
- return (latin1flags[c] & LATIN1LOWER) == LATIN1LOWER;
- }
+ return utf_islower(c);
}
return islower(c);
}
@@ -1613,29 +1508,14 @@ bool vim_islower(int c)
///
/// @param c character to check
bool vim_isupper(int c)
- FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
+ FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
if (c <= '@') {
return false;
}
if (c >= 0x80) {
- if (enc_utf8) {
return utf_isupper(c);
- }
-
- if (c >= 0x100) {
- if (has_mbyte) {
- return iswupper((wint_t)c);
- }
-
- // isupper() can't handle these chars and may crash
- return false;
- }
-
- if (enc_latin1like) {
- return (latin1flags[c] & LATIN1UPPER) == LATIN1UPPER;
- }
}
return isupper(c);
}
@@ -1647,22 +1527,7 @@ int vim_toupper(int c)
}
if (c >= 0x80) {
- if (enc_utf8) {
- return utf_toupper(c);
- }
-
- if (c >= 0x100) {
- if (has_mbyte) {
- return (int)towupper((wint_t)c);
- }
-
- // toupper() can't handle these chars and may crash
- return c;
- }
-
- if (enc_latin1like) {
- return latin1upper[c];
- }
+ return utf_toupper(c);
}
return TOUPPER_LOC(c);
}
@@ -1674,22 +1539,7 @@ int vim_tolower(int c)
}
if (c >= 0x80) {
- if (enc_utf8) {
- return utf_tolower(c);
- }
-
- if (c >= 0x100) {
- if (has_mbyte) {
- return (int)towlower((wint_t)c);
- }
-
- // tolower() can't handle these chars and may crash
- return c;
- }
-
- if (enc_latin1like) {
- return latin1lower[c];
- }
+ return utf_tolower(c);
}
return TOLOWER_LOC(c);
}
@@ -1722,6 +1572,26 @@ char_u* skiptowhite_esc(char_u *p) {
return p;
}
+/// Get a number from a string and skip over it, signalling overflows
+///
+/// @param[out] pp A pointer to a pointer to char_u.
+/// It will be advanced past the read number.
+/// @param[out] nr Number read from the string.
+///
+/// @return OK on success, FAIL on error/overflow
+int getdigits_safe(char_u **pp, intmax_t *nr)
+{
+ errno = 0;
+ *nr = strtoimax((char *)(*pp), (char **)pp, 10);
+
+ if ((*nr == INTMAX_MIN || *nr == INTMAX_MAX)
+ && errno == ERANGE) {
+ return FAIL;
+ }
+
+ return OK;
+}
+
/// Get a number from a string and skip over it.
///
/// @param[out] pp A pointer to a pointer to char_u.
@@ -1730,14 +1600,16 @@ char_u* skiptowhite_esc(char_u *p) {
/// @return Number read from the string.
intmax_t getdigits(char_u **pp)
{
- intmax_t number = strtoimax((char *)*pp, (char **)pp, 10);
- assert(errno != ERANGE);
+ intmax_t number;
+ int ret = getdigits_safe(pp, &number);
+
+ (void)ret; // Avoid "unused variable" warning in Release build
+ assert(ret == OK);
+
return number;
}
-/// Get an int number from a string.
-///
-/// A getdigits wrapper restricted to int values.
+/// Get an int number from a string. Like getdigits(), but restricted to `int`.
int getdigits_int(char_u **pp)
{
intmax_t number = getdigits(pp);
@@ -1747,9 +1619,7 @@ int getdigits_int(char_u **pp)
return (int)number;
}
-/// Get a long number from a string.
-///
-/// A getdigits wrapper restricted to long values.
+/// Get a long number from a string. Like getdigits(), but restricted to `long`.
long getdigits_long(char_u **pp)
{
intmax_t number = getdigits(pp);
diff --git a/src/nvim/charset.h b/src/nvim/charset.h
index 995ad123ae..78d6f2a76c 100644
--- a/src/nvim/charset.h
+++ b/src/nvim/charset.h
@@ -1,14 +1,6 @@
#ifndef NVIM_CHARSET_H
#define NVIM_CHARSET_H
-/*
- * Flags for chartab[].
- */
-#define CT_CELL_MASK 0x07 /* mask: nr of display cells (1, 2 or 4) */
-#define CT_PRINT_CHAR 0x10 /* flag: set for printable chars */
-#define CT_ID_CHAR 0x20 /* flag: set for ID chars */
-#define CT_FNAME_CHAR 0x40 /* flag: set for file name chars */
-
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "charset.h.generated.h"
#endif
diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c
index afaa6022c9..3ba9da34f2 100644
--- a/src/nvim/cursor.c
+++ b/src/nvim/cursor.c
@@ -9,6 +9,7 @@
#include "nvim/misc1.h"
#include "nvim/move.h"
#include "nvim/screen.h"
+#include "nvim/state.h"
#include "nvim/vim.h"
#include "nvim/ascii.h"
diff --git a/src/nvim/cursor.h b/src/nvim/cursor.h
index 09cc5a813c..1cbe8a609e 100644
--- a/src/nvim/cursor.h
+++ b/src/nvim/cursor.h
@@ -4,7 +4,6 @@
#include <stdbool.h>
#include "nvim/vim.h"
-#include "nvim/misc2.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "cursor.h.generated.h"
diff --git a/src/nvim/cursor_shape.c b/src/nvim/cursor_shape.c
index 87425ca567..b50462664c 100644
--- a/src/nvim/cursor_shape.c
+++ b/src/nvim/cursor_shape.c
@@ -3,7 +3,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/cursor_shape.h"
-#include "nvim/misc2.h"
#include "nvim/ex_getln.h"
#include "nvim/charset.h"
#include "nvim/strings.h"
diff --git a/src/nvim/diff.c b/src/nvim/diff.c
index 4826e70727..f7b96ba3e1 100644
--- a/src/nvim/diff.c
+++ b/src/nvim/diff.c
@@ -21,7 +21,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -907,8 +906,7 @@ void ex_diffpatch(exarg_T *eap)
eval_patch((char *) tmp_orig, (char *) eap->arg, (char *) tmp_new);
#endif // ifdef UNIX
} else {
- // Build the patch command and execute it. Ignore errors. Switch to
- // cooked mode to allow the user to respond to prompts.
+ // Build the patch command and execute it. Ignore errors.
#ifdef UNIX
vim_snprintf((char *)buf, buflen, "patch -o %s %s < \"%s\"",
tmp_new, tmp_orig, fullname != NULL ? fullname : eap->arg);
@@ -916,8 +914,7 @@ void ex_diffpatch(exarg_T *eap)
vim_snprintf((char *)buf, buflen, "patch -o %s %s < \"%s\"",
tmp_new, tmp_orig, eap->arg);
#endif // ifdef UNIX
- // Avoid ShellCmdPost stuff
- block_autocmds();
+ block_autocmds(); // Avoid ShellCmdPost stuff
(void)call_shell(buf, kShellOptFilter, NULL);
unblock_autocmds();
}
diff --git a/src/nvim/digraph.c b/src/nvim/digraph.c
index 9525024c1b..6ba6e659a6 100644
--- a/src/nvim/digraph.c
+++ b/src/nvim/digraph.c
@@ -17,7 +17,6 @@
#include "nvim/getchar.h"
#include "nvim/mbyte.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/garray.h"
#include "nvim/normal.h"
@@ -1691,8 +1690,11 @@ static void printdigraph(digr_T *dp)
msg_putchar('\n');
}
- if (msg_col) {
- while (msg_col % list_width != 0) {
+
+ // Make msg_col a multiple of list_width by using spaces.
+ if (msg_col % list_width != 0) {
+ int spaces = (msg_col / list_width + 1) * list_width - msg_col;
+ while (spaces--) {
msg_putchar(' ');
}
}
@@ -1757,12 +1759,12 @@ char_u* keymap_init(void)
vim_snprintf(buf, buflen, "keymap/%s_%s.vim",
curbuf->b_p_keymap, p_enc);
- if (source_runtime((char_u *)buf, FALSE) == FAIL) {
+ if (source_runtime((char_u *)buf, 0) == FAIL) {
// try finding "keymap/'keymap'.vim" in 'runtimepath'
vim_snprintf(buf, buflen, "keymap/%s.vim",
curbuf->b_p_keymap);
- if (source_runtime((char_u *)buf, FALSE) == FAIL) {
+ if (source_runtime((char_u *)buf, 0) == FAIL) {
xfree(buf);
return (char_u *)N_("E544: Keymap file not found");
}
diff --git a/src/nvim/edit.c b/src/nvim/edit.c
index e131da8fe0..95c33916f1 100644
--- a/src/nvim/edit.c
+++ b/src/nvim/edit.c
@@ -29,7 +29,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -463,6 +462,7 @@ static void insert_enter(InsertState *s)
o_lnum = curwin->w_cursor.lnum;
}
+ foldUpdateAfterInsert();
if (s->cmdchar != 'r' && s->cmdchar != 'v') {
apply_autocmds(EVENT_INSERTLEAVE, NULL, NULL, false, curbuf);
}
@@ -474,7 +474,9 @@ static int insert_check(VimState *state)
InsertState *s = (InsertState *)state;
// If typed something may trigger CursorHoldI again.
- if (s->c != K_EVENT) {
+ if (s->c != K_EVENT
+ // but not in CTRL-X mode, a script can't restore the state
+ && ctrl_x_mode == 0) {
did_cursorhold = false;
}
@@ -501,7 +503,7 @@ static int insert_check(VimState *state)
Insstart_orig = Insstart;
}
- if (stop_insert_mode) {
+ if (stop_insert_mode && !pum_visible()) {
// ":stopinsert" used or 'insertmode' reset
s->count = 0;
return 0; // exit insert mode
@@ -664,11 +666,12 @@ static int insert_execute(VimState *state, int key)
// Pressing CTRL-Y selects the current match. When
// compl_enter_selects is set the Enter key does the same.
- if (s->c == Ctrl_Y
- || (compl_enter_selects
- && (s->c == CAR || s->c == K_KENTER || s->c == NL))) {
+ if ((s->c == Ctrl_Y
+ || (compl_enter_selects
+ && (s->c == CAR || s->c == K_KENTER || s->c == NL)))
+ && stop_arrow() == OK) {
ins_compl_delete();
- ins_compl_insert();
+ ins_compl_insert(false);
}
}
}
@@ -961,7 +964,7 @@ static int insert_handle_key(InsertState *s)
break;
case K_EVENT: // some event
- queue_process_events(loop.events);
+ multiqueue_process_events(main_loop.events);
break;
case K_FOCUSGAINED: // Neovim has been given focus
@@ -1285,10 +1288,9 @@ bool edit(int cmdchar, bool startln, long count)
{
if (curbuf->terminal) {
if (ex_normal_busy) {
- // don't enter terminal mode from `ex_normal`, which can result in all
- // kinds of havoc(such as terminal mode recursiveness). Instead, set a
- // flag that allow us to force-set the value of `restart_edit` before
- // `ex_normal` returns
+ // Do not enter terminal mode from ex_normal(), which would cause havoc
+ // (such as terminal-mode recursiveness). Instead set a flag to force-set
+ // the value of `restart_edit` before `ex_normal` returns.
restart_edit = 'i';
force_restart_edit = true;
} else {
@@ -2322,7 +2324,6 @@ static int ins_compl_make_cyclic(void)
return count;
}
-
// Set variables that store noselect and noinsert behavior from the
// 'completeopt' value.
void completeopt_was_set(void)
@@ -2351,9 +2352,6 @@ void set_completion(colnr_T startcol, list_T *list)
}
ins_compl_clear();
- if (stop_arrow() == FAIL)
- return;
-
compl_direction = FORWARD;
if (startcol > curwin->w_cursor.col)
startcol = curwin->w_cursor.col;
@@ -2385,6 +2383,7 @@ void set_completion(colnr_T startcol, list_T *list)
} else {
ins_complete(Ctrl_N, false);
}
+ compl_enter_selects = compl_no_insert;
// Lazily show the popup menu, unless we got interrupted.
if (!compl_interrupted) {
@@ -2471,6 +2470,7 @@ void ins_compl_show_pum(void)
int cur = -1;
colnr_T col;
int lead_len = 0;
+ bool array_changed = false;
if (!pum_wanted() || !pum_enough_matches())
return;
@@ -2482,7 +2482,8 @@ void ins_compl_show_pum(void)
update_screen(0);
if (compl_match_array == NULL) {
- /* Need to build the popup menu list. */
+ array_changed = true;
+ // Need to build the popup menu list.
compl_match_arraysize = 0;
compl = compl_first_match;
/*
@@ -2585,7 +2586,7 @@ void ins_compl_show_pum(void)
// Use the cursor to get all wrapping and other settings right.
col = curwin->w_cursor.col;
curwin->w_cursor.col = compl_col;
- pum_display(compl_match_array, compl_match_arraysize, cur);
+ pum_display(compl_match_array, compl_match_arraysize, cur, array_changed);
curwin->w_cursor.col = col;
}
@@ -2775,7 +2776,7 @@ static void ins_compl_files(int count, char_u **files, int thesaurus, int flags,
break;
}
line_breakcheck();
- ins_compl_check_keys(50);
+ ins_compl_check_keys(50, false);
}
fclose(fp);
}
@@ -3261,14 +3262,19 @@ static bool ins_compl_prep(int c)
} else {
int prev_col = curwin->w_cursor.col;
- /* put the cursor on the last char, for 'tw' formatting */
- if (prev_col > 0)
+ // put the cursor on the last char, for 'tw' formatting
+ if (prev_col > 0) {
dec_cursor();
- if (stop_arrow() == OK)
+ }
+
+ if (!arrow_used && !ins_need_undo && c != Ctrl_E) {
insertchar(NUL, 0, -1);
+ }
+
if (prev_col > 0
- && get_cursor_line_ptr()[curwin->w_cursor.col] != NUL)
+ && get_cursor_line_ptr()[curwin->w_cursor.col] != NUL) {
inc_cursor();
+ }
}
// If the popup menu is displayed pressing CTRL-Y means accepting
@@ -3280,7 +3286,8 @@ static bool ins_compl_prep(int c)
retval = true;
}
- /* CTRL-E means completion is Ended, go back to the typed text. */
+ // CTRL-E means completion is Ended, go back to the typed text.
+ // but only do this, if the Popup is still visible
if (c == Ctrl_E) {
ins_compl_delete();
if (compl_leader != NULL) {
@@ -3529,21 +3536,15 @@ int ins_compl_add_tv(typval_T *tv, int dir)
char_u *(cptext[CPT_COUNT]);
if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL) {
- word = get_dict_string(tv->vval.v_dict, (char_u *)"word", FALSE);
- cptext[CPT_ABBR] = get_dict_string(tv->vval.v_dict,
- (char_u *)"abbr", FALSE);
- cptext[CPT_MENU] = get_dict_string(tv->vval.v_dict,
- (char_u *)"menu", FALSE);
- cptext[CPT_KIND] = get_dict_string(tv->vval.v_dict,
- (char_u *)"kind", FALSE);
- cptext[CPT_INFO] = get_dict_string(tv->vval.v_dict,
- (char_u *)"info", FALSE);
- if (get_dict_string(tv->vval.v_dict, (char_u *)"icase", FALSE) != NULL)
- icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
- if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
- adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
- if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
- aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
+ word = get_dict_string(tv->vval.v_dict, "word", false);
+ cptext[CPT_ABBR] = get_dict_string(tv->vval.v_dict, "abbr", false);
+ cptext[CPT_MENU] = get_dict_string(tv->vval.v_dict, "menu", false);
+ cptext[CPT_KIND] = get_dict_string(tv->vval.v_dict, "kind", false);
+ cptext[CPT_INFO] = get_dict_string(tv->vval.v_dict, "info", false);
+
+ icase = get_dict_number(tv->vval.v_dict, "icase");
+ adup = get_dict_number(tv->vval.v_dict, "dup");
+ aempty = get_dict_number(tv->vval.v_dict, "empty");
} else {
word = get_tv_string_chk(tv);
memset(cptext, 0, sizeof(cptext));
@@ -3846,13 +3847,11 @@ static int ins_compl_get_exp(pos_T *ini)
if ((compl_cont_status & CONT_ADDING)
&& len == compl_length) {
if (pos->lnum < ins_buf->b_ml.ml_line_count) {
- /* Try next line, if any. the new word will be
- * "join" as if the normal command "J" was used.
- * IOSIZE is always greater than
- * compl_length, so the next STRNCPY always
- * works -- Acevedo */
+ // Try next line, if any. the new word will be "join" as if the
+ // normal command "J" was used. IOSIZE is always greater than
+ // compl_length, so the next STRNCPY always works -- Acevedo
STRNCPY(IObuff, ptr, len);
- ptr = ml_get_buf(ins_buf, pos->lnum + 1, FALSE);
+ ptr = ml_get_buf(ins_buf, pos->lnum + 1, false);
tmp_ptr = ptr = skipwhite(ptr);
/* Find start of next word. */
tmp_ptr = find_word_start(tmp_ptr);
@@ -3908,7 +3907,7 @@ static int ins_compl_get_exp(pos_T *ini)
break;
/* Fill the popup menu as soon as possible. */
if (type != -1)
- ins_compl_check_keys(0);
+ ins_compl_check_keys(0, false);
if ((l_ctrl_x_mode != 0 && !CTRL_X_MODE_LINE_OR_EVAL(l_ctrl_x_mode))
|| compl_interrupted) {
@@ -3951,23 +3950,28 @@ static int ins_compl_get_exp(pos_T *ini)
/* Delete the old text being completed. */
static void ins_compl_delete(void)
{
- int i;
+ int col;
- /*
- * In insert mode: Delete the typed part.
- * In replace mode: Put the old characters back, if any.
- */
- i = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
- backspace_until_column(i);
- // TODO: is this sufficient for redrawing? Redrawing everything causes
- // flicker, thus we can't do that.
+ // In insert mode: Delete the typed part.
+ // In replace mode: Put the old characters back, if any.
+ col = compl_col + (compl_cont_status & CONT_ADDING ? compl_length : 0);
+ if ((int)curwin->w_cursor.col > col) {
+ if (stop_arrow() == FAIL) {
+ return;
+ }
+ backspace_until_column(col);
+ }
+
+ // TODO(vim): is this sufficient for redrawing? Redrawing everything
+ // causes flicker, thus we can't do that.
changed_cline_bef_curs();
// clear v:completed_item
set_vim_var_dict(VV_COMPLETED_ITEM, dict_alloc());
}
-/* Insert the new text being completed. */
-static void ins_compl_insert(void)
+// Insert the new text being completed.
+// "in_compl_func" is TRUE when called from complete_check().
+static void ins_compl_insert(int in_compl_func)
{
ins_bytes(compl_shown_match->cp_str + ins_compl_len());
if (compl_shown_match->cp_flags & ORIGINAL_TEXT)
@@ -3989,6 +3993,9 @@ static void ins_compl_insert(void)
dict_add_nr_str(dict, "info", 0L,
EMPTY_IF_NULL(compl_shown_match->cp_text[CPT_INFO]));
set_vim_var_dict(VV_COMPLETED_ITEM, dict);
+ if (!in_compl_func) {
+ compl_curr_match = compl_shown_match;
+ }
}
/*
@@ -4010,9 +4017,10 @@ static void ins_compl_insert(void)
static int
ins_compl_next (
int allow_get_expansion,
- int count, /* repeat completion this many times; should
- be at least 1 */
- int insert_match /* Insert the newly selected match */
+ int count, // Repeat completion this many times; should
+ // be at least 1
+ int insert_match, // Insert the newly selected match
+ int in_compl_func // Called from complete_check()
)
{
int num_matches = -1;
@@ -4142,7 +4150,7 @@ ins_compl_next (
compl_used_match = FALSE;
} else if (insert_match) {
if (!compl_get_longest || compl_used_match) {
- ins_compl_insert();
+ ins_compl_insert(in_compl_func);
} else {
ins_bytes(compl_leader + ins_compl_len());
}
@@ -4192,14 +4200,14 @@ ins_compl_next (
return num_matches;
}
-/*
- * Call this while finding completions, to check whether the user has hit a key
- * that should change the currently displayed completion, or exit completion
- * mode. Also, when compl_pending is not zero, show a completion as soon as
- * possible. -- webb
- * "frequency" specifies out of how many calls we actually check.
- */
-void ins_compl_check_keys(int frequency)
+// Call this while finding completions, to check whether the user has hit a key
+// that should change the currently displayed completion, or exit completion
+// mode. Also, when compl_pending is not zero, show a completion as soon as
+// possible. -- webb
+// "frequency" specifies out of how many calls we actually check.
+// "in_compl_func" is TRUE when called from complete_check(), don't set
+// compl_curr_match.
+void ins_compl_check_keys(int frequency, int in_compl_func)
{
static int count = 0;
@@ -4222,8 +4230,8 @@ void ins_compl_check_keys(int frequency)
if (vim_is_ctrl_x_key(c) && c != Ctrl_X && c != Ctrl_R) {
c = safe_vgetc(); /* Eat the character */
compl_shows_dir = ins_compl_key2dir(c);
- (void)ins_compl_next(FALSE, ins_compl_key2count(c),
- c != K_UP && c != K_DOWN);
+ (void)ins_compl_next(false, ins_compl_key2count(c),
+ c != K_UP && c != K_DOWN, in_compl_func);
} else {
/* Need to get the character to have KeyTyped set. We'll put it
* back with vungetc() below. But skip K_IGNORE. */
@@ -4242,7 +4250,7 @@ void ins_compl_check_keys(int frequency)
int todo = compl_pending > 0 ? compl_pending : -compl_pending;
compl_pending = 0;
- (void)ins_compl_next(FALSE, todo, TRUE);
+ (void)ins_compl_next(false, todo, true, in_compl_func);
}
}
@@ -4321,8 +4329,11 @@ static int ins_complete(int c, bool enable_pum)
colnr_T curs_col; /* cursor column */
int n;
int save_w_wrow;
+ int insert_match;
compl_direction = ins_compl_key2dir(c);
+ insert_match = ins_compl_use_match(c);
+
if (!compl_started) {
/* First time we hit ^N or ^P (in a row, I mean) */
@@ -4504,14 +4515,15 @@ static int ins_complete(int c, bool enable_pum)
} else if (ctrl_x_mode == CTRL_X_CMDLINE) {
compl_pattern = vim_strnsave(line, curs_col);
set_cmd_context(&compl_xp, compl_pattern,
- (int)STRLEN(compl_pattern), curs_col);
+ (int)STRLEN(compl_pattern), curs_col, false);
if (compl_xp.xp_context == EXPAND_UNSUCCESSFUL
- || compl_xp.xp_context == EXPAND_NOTHING)
- /* No completion possible, use an empty pattern to get a
- * "pattern not found" message. */
+ || compl_xp.xp_context == EXPAND_NOTHING) {
+ // No completion possible, use an empty pattern to get a
+ // "pattern not found" message.
compl_col = curs_col;
- else
+ } else {
compl_col = (int)(compl_xp.xp_pattern - compl_pattern);
+ }
compl_length = curs_col - compl_col;
} else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode ==
CTRL_X_OMNI) {
@@ -4655,6 +4667,8 @@ static int ins_complete(int c, bool enable_pum)
showmode();
edit_submode_extra = NULL;
ui_flush();
+ } else if (insert_match && stop_arrow() == FAIL) {
+ return FAIL;
}
compl_shown_match = compl_curr_match;
@@ -4664,7 +4678,7 @@ static int ins_complete(int c, bool enable_pum)
* Find next match (and following matches).
*/
save_w_wrow = curwin->w_wrow;
- n = ins_compl_next(TRUE, ins_compl_key2count(c), ins_compl_use_match(c));
+ n = ins_compl_next(true, ins_compl_key2count(c), insert_match, false);
/* may undisplay the popup menu */
ins_compl_upd_pum();
@@ -5692,7 +5706,7 @@ comp_textwidth (
textwidth -= 1;
textwidth -= curwin->w_p_fdc;
- if (curwin->w_buffer->b_signlist != NULL) {
+ if (signcolumn_on(curwin)) {
textwidth -= 1;
}
@@ -6952,8 +6966,8 @@ static void ins_reg(void)
AppendCharToRedobuff(literally);
AppendCharToRedobuff(regname);
- do_put(regname, NULL, BACKWARD, 1L,
- (literally == Ctrl_P ? PUT_FIXINDENT : 0) | PUT_CURSEND);
+ do_put(regname, NULL, BACKWARD, 1,
+ (literally == Ctrl_P ? PUT_FIXINDENT : 0) | PUT_CURSEND);
} else if (insert_reg(regname, literally) == FAIL) {
vim_beep(BO_REG);
need_redraw = true; // remove the '"'
@@ -7701,7 +7715,7 @@ static void ins_mouse(int c)
undisplay_dollar();
tpos = curwin->w_cursor;
- if (do_mouse(NULL, c, BACKWARD, 1L, 0)) {
+ if (do_mouse(NULL, c, BACKWARD, 1, 0)) {
win_T *new_curwin = curwin;
if (curwin != old_curwin && win_valid(old_curwin)) {
diff --git a/src/nvim/eval.c b/src/nvim/eval.c
index 96c008b0e0..9c041ca790 100644
--- a/src/nvim/eval.c
+++ b/src/nvim/eval.c
@@ -44,7 +44,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/map.h"
#include "nvim/file_search.h"
@@ -63,10 +62,12 @@
#include "nvim/search.h"
#include "nvim/sha256.h"
#include "nvim/spell.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/tag.h"
#include "nvim/ui.h"
+#include "nvim/main.h"
#include "nvim/mouse.h"
#include "nvim/terminal.h"
#include "nvim/undo.h"
@@ -76,9 +77,10 @@
#include "nvim/eval/decode.h"
#include "nvim/os/os.h"
#include "nvim/event/libuv_process.h"
-#include "nvim/event/pty_process.h"
+#include "nvim/os/pty_process.h"
#include "nvim/event/rstream.h"
#include "nvim/event/wstream.h"
+#include "nvim/event/time.h"
#include "nvim/os/time.h"
#include "nvim/msgpack_rpc/channel.h"
#include "nvim/msgpack_rpc/server.h"
@@ -88,7 +90,10 @@
#include "nvim/os/dl.h"
#include "nvim/os/input.h"
#include "nvim/event/loop.h"
+#include "nvim/lib/kvec.h"
+#include "nvim/lib/khash.h"
#include "nvim/lib/queue.h"
+#include "nvim/eval/typval_encode.h"
#define DICT_MAXNEST 100 /* maximum nesting of lists and dicts */
@@ -153,7 +158,7 @@ static char *e_listdictarg = N_(
static char *e_emptykey = N_("E713: Cannot use empty key for Dictionary");
static char *e_listreq = N_("E714: List required");
static char *e_dictreq = N_("E715: Dictionary required");
-static char *e_strreq = N_("E114: String required");
+static char *e_stringreq = N_("E928: String required");
static char *e_toomanyarg = N_("E118: Too many arguments for function: %s");
static char *e_dictkey = N_("E716: Key not present in Dictionary: %s");
static char *e_funcexts = N_(
@@ -212,9 +217,11 @@ static int echo_attr = 0; /* attributes used for ":echo" */
/* The names of packages that once were loaded are remembered. */
static garray_T ga_loaded = {0, 0, sizeof(char_u *), 4, NULL};
-/* list heads for garbage collection */
-static dict_T *first_dict = NULL; /* list of all dicts */
-static list_T *first_list = NULL; /* list of all lists */
+// List heads for garbage collection. Although there can be a reference loop
+// from partial to dict to partial, we don't need to keep track of the partial,
+// since it will get freed when the dict is unused and gets freed.
+static dict_T *first_dict = NULL; // list of all dicts
+static list_T *first_list = NULL; // list of all lists
#define FUNCARG(fp, j) ((char_u **)(fp->uf_args.ga_data))[j]
#define FUNCLINE(fp, j) ((char_u **)(fp->uf_lines.ga_data))[j]
@@ -287,8 +294,8 @@ typedef enum {
.vv_di = { \
.di_tv = { .v_type = type }, \
.di_flags = 0, \
+ .di_key = { 0 }, \
}, \
- .vv_filler = { 0 }, \
.vv_flags = flags, \
}
@@ -298,8 +305,7 @@ typedef enum {
// variables with the VV_ defines.
static struct vimvar {
char *vv_name; ///< Name of the variable, without v:.
- dictitem_T vv_di; ///< Value of the variable, with name.
- char vv_filler[16]; ///< Space for longest name from below.
+ dictitem16_T vv_di; ///< Value and name for key (max 16 chars)
char vv_flags; ///< Flags: #VV_COMPAT, #VV_RO, #VV_RO_SBX.
} vimvars[] =
{
@@ -350,6 +356,7 @@ static struct vimvar {
VV(VV_FCS_CHOICE, "fcs_choice", VAR_STRING, 0),
VV(VV_BEVAL_BUFNR, "beval_bufnr", VAR_NUMBER, VV_RO),
VV(VV_BEVAL_WINNR, "beval_winnr", VAR_NUMBER, VV_RO),
+ VV(VV_BEVAL_WINID, "beval_winid", VAR_NUMBER, VV_RO),
VV(VV_BEVAL_LNUM, "beval_lnum", VAR_NUMBER, VV_RO),
VV(VV_BEVAL_COL, "beval_col", VAR_NUMBER, VV_RO),
VV(VV_BEVAL_TEXT, "beval_text", VAR_STRING, VV_RO),
@@ -359,6 +366,7 @@ static struct vimvar {
VV(VV_SWAPCOMMAND, "swapcommand", VAR_STRING, VV_RO),
VV(VV_CHAR, "char", VAR_STRING, 0),
VV(VV_MOUSE_WIN, "mouse_win", VAR_NUMBER, 0),
+ VV(VV_MOUSE_WINID, "mouse_winid", VAR_NUMBER, 0),
VV(VV_MOUSE_LNUM, "mouse_lnum", VAR_NUMBER, 0),
VV(VV_MOUSE_COL, "mouse_col", VAR_NUMBER, 0),
VV(VV_OP, "operator", VAR_STRING, VV_RO),
@@ -380,6 +388,15 @@ static struct vimvar {
VV(VV_NULL, "null", VAR_SPECIAL, VV_RO),
VV(VV__NULL_LIST, "_null_list", VAR_LIST, VV_RO),
VV(VV__NULL_DICT, "_null_dict", VAR_DICT, VV_RO),
+ VV(VV_VIM_DID_ENTER, "vim_did_enter", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_NUMBER, "t_number", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_STRING, "t_string", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_FUNC, "t_func", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_LIST, "t_list", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_DICT, "t_dict", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_FLOAT, "t_float", VAR_NUMBER, VV_RO),
+ VV(VV_TYPE_BOOL, "t_bool", VAR_NUMBER, VV_RO),
+ VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO),
};
#undef VV
@@ -393,28 +410,43 @@ static struct vimvar {
#define vv_dict vv_di.di_tv.vval.v_dict
#define vv_tv vv_di.di_tv
-static dictitem_T vimvars_var; /* variable used for v: */
+static dictitem_T vimvars_var; // variable used for v:
#define vimvarht vimvardict.dv_hashtab
+typedef enum {
+ kCallbackNone,
+ kCallbackFuncref,
+ kCallbackPartial,
+} CallbackType;
+
+typedef struct {
+ union {
+ char_u *funcref;
+ partial_T *partial;
+ } data;
+ CallbackType type;
+} Callback;
+#define CALLBACK_NONE ((Callback){ .type = kCallbackNone })
+
typedef struct {
union {
LibuvProcess uv;
PtyProcess pty;
} proc;
- Stream in, out, err;
+ Stream in, out, err; // Initialized in common_job_start().
Terminal *term;
bool stopped;
bool exited;
+ bool rpc;
int refcount;
- ufunc_T *on_stdout, *on_stderr, *on_exit;
- dict_T *self;
+ Callback on_stdout, on_stderr, on_exit;
int *status_ptr;
uint64_t id;
- Queue *events;
+ MultiQueue *events;
} TerminalJobData;
typedef struct dict_watcher {
- ufunc_T *callback;
+ Callback callback;
char *key_pattern;
QUEUE node;
bool busy; // prevent recursion if the dict is changed in the callback
@@ -422,12 +454,38 @@ typedef struct dict_watcher {
typedef struct {
TerminalJobData *data;
- ufunc_T *callback;
+ Callback *callback;
const char *type;
list_T *received;
int status;
} JobEvent;
+typedef struct {
+ TimeWatcher tw;
+ int timer_id;
+ int repeat_count;
+ int refcount;
+ long timeout;
+ bool stopped;
+ Callback callback;
+} timer_T;
+
+typedef void (*FunPtr)(void);
+
+/// Prototype of C function that implements VimL function
+typedef void (*VimLFunc)(typval_T *args, typval_T *rvar, FunPtr data);
+
+/// Structure holding VimL function definition
+typedef struct fst {
+ char *name; ///< Name of the function.
+ uint8_t min_argc; ///< Minimal number of arguments.
+ uint8_t max_argc; ///< Maximal number of arguments.
+ VimLFunc func; ///< Function implementation.
+ FunPtr data; ///< Userdata for function implementation.
+} VimLFuncDef;
+
+KHASH_MAP_INIT_STR(functions, VimLFuncDef)
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "eval.c.generated.h"
#endif
@@ -435,8 +493,10 @@ typedef struct {
#define FNE_INCL_BR 1 /* find_name_end(): include [] in name */
#define FNE_CHECK_START 2 /* find_name_end(): check name starts with
valid character */
-static uint64_t current_job_id = 1;
-static PMap(uint64_t) *jobs = NULL;
+static PMap(uint64_t) *jobs = NULL;
+
+static uint64_t last_timer_id = 0;
+static PMap(uint64_t) *timers = NULL;
static const char *const msgpack_type_names[] = {
[kMPNil] = "nil",
@@ -469,6 +529,7 @@ void eval_init(void)
vimvars[VV_VERSION].vv_nr = VIM_VERSION_100;
jobs = pmap_new(uint64_t)();
+ timers = pmap_new(uint64_t)();
struct vimvar *p;
init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
@@ -479,6 +540,7 @@ void eval_init(void)
for (size_t i = 0; i < ARRAY_SIZE(vimvars); i++) {
p = &vimvars[i];
+ assert(STRLEN(p->vv_name) <= 16);
STRCPY(p->vv_di.di_key, p->vv_name);
if (p->vv_flags & VV_RO)
p->vv_di.di_flags = DI_FLAGS_RO | DI_FLAGS_FIX;
@@ -494,6 +556,7 @@ void eval_init(void)
/* add to compat scope dict */
hash_add(&compat_hashtab, p->vv_di.di_key);
}
+ vimvars[VV_VERSION].vv_nr = VIM_VERSION_100;
dict_T *const msgpack_types_dict = dict_alloc();
for (size_t i = 0; i < ARRAY_SIZE(msgpack_type_names); i++) {
@@ -523,10 +586,19 @@ void eval_init(void)
set_vim_var_list(VV_ERRORS, list_alloc());
set_vim_var_nr(VV_SEARCHFORWARD, 1L);
set_vim_var_nr(VV_HLSEARCH, 1L);
+ set_vim_var_nr(VV_COUNT1, 1);
+ set_vim_var_nr(VV_TYPE_NUMBER, VAR_TYPE_NUMBER);
+ set_vim_var_nr(VV_TYPE_STRING, VAR_TYPE_STRING);
+ set_vim_var_nr(VV_TYPE_FUNC, VAR_TYPE_FUNC);
+ set_vim_var_nr(VV_TYPE_LIST, VAR_TYPE_LIST);
+ set_vim_var_nr(VV_TYPE_DICT, VAR_TYPE_DICT);
+ set_vim_var_nr(VV_TYPE_FLOAT, VAR_TYPE_FLOAT);
+ set_vim_var_nr(VV_TYPE_BOOL, VAR_TYPE_BOOL);
set_vim_var_special(VV_FALSE, kSpecialVarFalse);
set_vim_var_special(VV_TRUE, kSpecialVarTrue);
set_vim_var_special(VV_NULL, kSpecialVarNull);
+ set_vim_var_special(VV_EXITING, kSpecialVarNull);
set_reg_var(0); // default for v:register is not 0 but '"'
}
@@ -1152,7 +1224,7 @@ int call_vim_function(
rettv->v_type = VAR_UNKNOWN; /* clear_tv() uses this */
ret = call_func(func, (int)STRLEN(func), rettv, argc, argvars,
curwin->w_cursor.lnum, curwin->w_cursor.lnum,
- &doesrange, true, NULL);
+ &doesrange, true, NULL, NULL);
if (safe) {
--sandbox;
restore_funccal(save_funccalp);
@@ -1876,7 +1948,7 @@ ex_let_one (
}
}
if (p != NULL) {
- write_reg_contents(*arg == '@' ? '"' : *arg, p, -1, FALSE);
+ write_reg_contents(*arg == '@' ? '"' : *arg, p, STRLEN(p), false);
arg_end = arg + 1;
}
xfree(ptofree);
@@ -2106,11 +2178,9 @@ get_lval (
if (lp->ll_tv->v_type == VAR_DICT) {
if (len == -1) {
- /* "[key]": get key from "var1" */
- key = get_tv_string(&var1); /* is number or string */
- if (*key == NUL) {
- if (!quiet)
- EMSG(_(e_emptykey));
+ // "[key]": get key from "var1"
+ key = get_tv_string_chk(&var1); // is number or string
+ if (key == NULL) {
clear_tv(&var1);
return NULL;
}
@@ -2401,6 +2471,7 @@ static int tv_op(typval_T *tv1, typval_T *tv2, char_u *op)
switch (tv1->v_type) {
case VAR_DICT:
case VAR_FUNC:
+ case VAR_PARTIAL:
case VAR_SPECIAL:
break;
@@ -2550,9 +2621,12 @@ void *eval_for_line(char_u *arg, int *errp, char_u **nextcmdp, int skip)
*errp = FALSE;
if (!skip) {
l = tv.vval.v_list;
- if (tv.v_type != VAR_LIST || l == NULL) {
+ if (tv.v_type != VAR_LIST) {
EMSG(_(e_listreq));
clear_tv(&tv);
+ } else if (l == NULL) {
+ // a null list is like an empty list: do nothing
+ clear_tv(&tv);
} else {
/* No need to increment the refcount, it's already set for the
* list being used in "tv". */
@@ -2648,6 +2722,10 @@ void set_context_for_expression(expand_T *xp, char_u *arg, cmdidx_T cmdidx)
} else if (c == '=') {
got_eq = TRUE;
xp->xp_context = EXPAND_EXPRESSION;
+ } else if (c == '#'
+ && xp->xp_context == EXPAND_EXPRESSION) {
+ // Autoload function/variable contains '#'
+ break;
} else if ((c == '<' || c == '#')
&& xp->xp_context == EXPAND_FUNCTIONS
&& vim_strchr(xp->xp_pattern, '(') == NULL) {
@@ -2698,8 +2776,9 @@ void ex_call(exarg_T *eap)
typval_T rettv;
linenr_T lnum;
int doesrange;
- int failed = FALSE;
+ bool failed = false;
funcdict_T fudi;
+ partial_T *partial = NULL;
if (eap->skip) {
/* trans_function_name() doesn't work well when skipping, use eval0()
@@ -2712,7 +2791,7 @@ void ex_call(exarg_T *eap)
return;
}
- tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+ tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi, &partial);
if (fudi.fd_newkey != NULL) {
/* Still need to give an error message for missing key. */
EMSG2(_(e_dictkey), fudi.fd_newkey);
@@ -2726,9 +2805,12 @@ void ex_call(exarg_T *eap)
if (fudi.fd_dict != NULL)
++fudi.fd_dict->dv_refcount;
- /* If it is the name of a variable of type VAR_FUNC use its contents. */
+ // If it is the name of a variable of type VAR_FUNC or VAR_PARTIAL use its
+ // contents. For VAR_PARTIAL get its partial, unless we already have one
+ // from trans_function_name().
len = (int)STRLEN(tofree);
- name = deref_func_name(tofree, &len, FALSE);
+ name = deref_func_name(tofree, &len,
+ partial != NULL ? NULL : &partial, false);
/* Skip white space to allow ":call func ()". Not good, but required for
* backward compatibility. */
@@ -2759,9 +2841,9 @@ void ex_call(exarg_T *eap)
}
arg = startarg;
if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
- eap->line1, eap->line2, &doesrange,
- !eap->skip, fudi.fd_dict) == FAIL) {
- failed = TRUE;
+ eap->line1, eap->line2, &doesrange,
+ !eap->skip, partial, fudi.fd_dict) == FAIL) {
+ failed = true;
break;
}
@@ -2964,11 +3046,16 @@ int do_unlet(char_u *name, int forceit)
} else if (current_funccal != NULL
&& ht == &current_funccal->l_vars.dv_hashtab) {
d = &current_funccal->l_vars;
+ } else if (ht == &compat_hashtab) {
+ d = &vimvardict;
} else {
di = find_var_in_ht(ht, *name, (char_u *)"", false);
d = di->di_tv.vval.v_dict;
}
-
+ if (d == NULL) {
+ EMSG2(_(e_intern2), "do_unlet()");
+ return FAIL;
+ }
hi = hash_find(ht, varname);
if (!HASHITEM_EMPTY(hi)) {
di = HI2DI(hi);
@@ -2977,6 +3064,11 @@ int do_unlet(char_u *name, int forceit)
|| tv_check_lock(d->dv_lock, name, false)) {
return FAIL;
}
+
+ if (d == NULL || tv_check_lock(d->dv_lock, name, false)) {
+ return FAIL;
+ }
+
typval_T oldtv;
bool watched = is_watched(dict);
@@ -3114,6 +3206,7 @@ static void item_lock(typval_T *tv, int deep, int lock)
case VAR_FLOAT:
case VAR_STRING:
case VAR_FUNC:
+ case VAR_PARTIAL:
case VAR_SPECIAL:
break;
case VAR_UNKNOWN:
@@ -3270,6 +3363,26 @@ char_u *get_user_var_name(expand_T *xp, int idx)
}
+/// Return TRUE if "pat" matches "text".
+/// Does not use 'cpo' and always uses 'magic'.
+static int pattern_match(char_u *pat, char_u *text, int ic)
+{
+ int matches = 0;
+ regmatch_T regmatch;
+
+ // avoid 'l' flag in 'cpoptions'
+ char_u *save_cpo = p_cpo;
+ p_cpo = (char_u *)"";
+ regmatch.regprog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
+ if (regmatch.regprog != NULL) {
+ regmatch.rm_ic = ic;
+ matches = vim_regexec_nl(&regmatch, text, (colnr_T)0);
+ vim_regfree(regmatch.regprog);
+ }
+ p_cpo = save_cpo;
+ return matches;
+}
+
/*
* types for expressions.
*/
@@ -3545,9 +3658,7 @@ static int eval4(char_u **arg, typval_T *rettv, int evaluate)
long n1, n2;
char_u *s1, *s2;
char_u buf1[NUMBUFLEN], buf2[NUMBUFLEN];
- regmatch_T regmatch;
int ic;
- char_u *save_cpo;
/*
* Get the first variable.
@@ -3668,26 +3779,37 @@ static int eval4(char_u **arg, typval_T *rettv, int evaluate)
if (type == TYPE_NEQUAL)
n1 = !n1;
}
- } else if (rettv->v_type == VAR_FUNC || var2.v_type == VAR_FUNC) {
- if (rettv->v_type != var2.v_type
- || (type != TYPE_EQUAL && type != TYPE_NEQUAL)) {
- if (rettv->v_type != var2.v_type)
- EMSG(_("E693: Can only compare Funcref with Funcref"));
- else
- EMSG(_("E694: Invalid operation for Funcrefs"));
+ } else if (rettv->v_type == VAR_FUNC || var2.v_type == VAR_FUNC
+ || rettv->v_type == VAR_PARTIAL
+ || var2.v_type == VAR_PARTIAL) {
+ if (type != TYPE_EQUAL && type != TYPE_NEQUAL) {
+ EMSG(_("E694: Invalid operation for Funcrefs"));
clear_tv(rettv);
clear_tv(&var2);
return FAIL;
+ }
+ if ((rettv->v_type == VAR_PARTIAL
+ && rettv->vval.v_partial == NULL)
+ || (var2.v_type == VAR_PARTIAL
+ && var2.vval.v_partial == NULL)) {
+ // when a partial is NULL assume not equal
+ n1 = false;
+ } else if (type_is) {
+ if (rettv->v_type == VAR_FUNC && var2.v_type == VAR_FUNC) {
+ // strings are considered the same if their value is
+ // the same
+ n1 = tv_equal(rettv, &var2, ic, false);
+ } else if (rettv->v_type == VAR_PARTIAL
+ && var2.v_type == VAR_PARTIAL) {
+ n1 = (rettv->vval.v_partial == var2.vval.v_partial);
+ } else {
+ n1 = false;
+ }
} else {
- /* Compare two Funcrefs for being equal or unequal. */
- if (rettv->vval.v_string == NULL
- || var2.vval.v_string == NULL)
- n1 = FALSE;
- else
- n1 = STRCMP(rettv->vval.v_string,
- var2.vval.v_string) == 0;
- if (type == TYPE_NEQUAL)
- n1 = !n1;
+ n1 = tv_equal(rettv, &var2, ic, false);
+ }
+ if (type == TYPE_NEQUAL) {
+ n1 = !n1;
}
}
/*
@@ -3756,19 +3878,10 @@ static int eval4(char_u **arg, typval_T *rettv, int evaluate)
case TYPE_MATCH:
case TYPE_NOMATCH:
- /* avoid 'l' flag in 'cpoptions' */
- save_cpo = p_cpo;
- p_cpo = (char_u *)"";
- regmatch.regprog = vim_regcomp(s2,
- RE_MAGIC + RE_STRING);
- regmatch.rm_ic = ic;
- if (regmatch.regprog != NULL) {
- n1 = vim_regexec_nl(&regmatch, s1, (colnr_T)0);
- vim_regfree(regmatch.regprog);
- if (type == TYPE_NOMATCH)
- n1 = !n1;
+ n1 = pattern_match(s2, s1, ic);
+ if (type == TYPE_NOMATCH) {
+ n1 = !n1;
}
- p_cpo = save_cpo;
break;
case TYPE_UNKNOWN: break; /* avoid gcc warning */
@@ -4231,14 +4344,15 @@ static int eval7(
ret = FAIL;
} else {
if (**arg == '(') { // recursive!
+ partial_T *partial;
// If "s" is the name of a variable of type VAR_FUNC
// use its contents.
- s = deref_func_name(s, &len, !evaluate);
+ s = deref_func_name(s, &len, &partial, !evaluate);
// Invoke the function.
ret = get_func_tv(s, len, rettv, arg,
- curwin->w_cursor.lnum, curwin->w_cursor.lnum,
- &len, evaluate, NULL);
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &len, evaluate, partial, NULL);
// If evaluate is false rettv->v_type was not set in
// get_func_tv, but it's needed in handle_subscript() to parse
@@ -4341,7 +4455,8 @@ eval_index (
char_u *key = NULL;
switch (rettv->v_type) {
- case VAR_FUNC: {
+ case VAR_FUNC:
+ case VAR_PARTIAL: {
if (verbose) {
EMSG(_("E695: Cannot index a Funcref"));
}
@@ -4538,10 +4653,8 @@ eval_index (
dictitem_T *item;
if (len == -1) {
- key = get_tv_string(&var1);
- if (*key == NUL) {
- if (verbose)
- EMSG(_(e_emptykey));
+ key = get_tv_string_chk(&var1);
+ if (key == NULL) {
clear_tv(&var1);
return FAIL;
}
@@ -4563,6 +4676,7 @@ eval_index (
break;
case VAR_SPECIAL:
case VAR_FUNC:
+ case VAR_PARTIAL:
case VAR_FLOAT:
case VAR_UNKNOWN:
break; // Not evaluating, skipping over subscript
@@ -4816,10 +4930,29 @@ static int get_lit_string_tv(char_u **arg, typval_T *rettv, int evaluate)
return OK;
}
-/*
- * Allocate a variable for a List and fill it from "*arg".
- * Return OK or FAIL.
- */
+static void partial_free(partial_T *pt)
+{
+ for (int i = 0; i < pt->pt_argc; i++) {
+ clear_tv(&pt->pt_argv[i]);
+ }
+ xfree(pt->pt_argv);
+ dict_unref(pt->pt_dict);
+ func_unref(pt->pt_name);
+ xfree(pt->pt_name);
+ xfree(pt);
+}
+
+/// Unreference a closure: decrement the reference count and free it when it
+/// becomes zero.
+void partial_unref(partial_T *pt)
+{
+ if (pt != NULL && --pt->pt_refcount <= 0) {
+ partial_free(pt);
+ }
+}
+
+/// Allocate a variable for a List and fill it from "*arg".
+/// Return OK or FAIL.
static int get_list_tv(char_u **arg, typval_T *rettv, int evaluate)
{
list_T *l = NULL;
@@ -4853,8 +4986,9 @@ static int get_list_tv(char_u **arg, typval_T *rettv, int evaluate)
if (**arg != ']') {
EMSG2(_("E697: Missing end of List ']': %s"), *arg);
failret:
- if (evaluate)
- list_free(l, TRUE);
+ if (evaluate) {
+ list_free(l);
+ }
return FAIL;
}
@@ -4893,51 +5027,53 @@ static list_T *rettv_list_alloc(typval_T *rettv)
list_T *l = list_alloc();
rettv->vval.v_list = l;
rettv->v_type = VAR_LIST;
- ++l->lv_refcount;
+ rettv->v_lock = VAR_UNLOCKED;
+ l->lv_refcount++;
return l;
}
-/*
- * Unreference a list: decrement the reference count and free it when it
- * becomes zero.
- */
-void list_unref(list_T *l)
-{
- if (l != NULL && --l->lv_refcount <= 0)
- list_free(l, TRUE);
+/// Unreference a list: decrement the reference count and free it when it
+/// becomes zero.
+void list_unref(list_T *l) {
+ if (l != NULL && --l->lv_refcount <= 0) {
+ list_free(l);
+ }
}
-/*
- * Free a list, including all items it points to.
- * Ignores the reference count.
- */
-void
-list_free (
- list_T *l,
- int recurse /* Free Lists and Dictionaries recursively. */
-)
-{
+/// Free a list, including all items it points to.
+/// Ignores the reference count.
+static void list_free_contents(list_T *l) {
listitem_T *item;
- /* Remove the list from the list of lists for garbage collection. */
- if (l->lv_used_prev == NULL)
- first_list = l->lv_used_next;
- else
- l->lv_used_prev->lv_used_next = l->lv_used_next;
- if (l->lv_used_next != NULL)
- l->lv_used_next->lv_used_prev = l->lv_used_prev;
-
for (item = l->lv_first; item != NULL; item = l->lv_first) {
- /* Remove the item before deleting it. */
+ // Remove the item before deleting it.
l->lv_first = item->li_next;
- if (recurse || (item->li_tv.v_type != VAR_LIST
- && item->li_tv.v_type != VAR_DICT))
- clear_tv(&item->li_tv);
+ clear_tv(&item->li_tv);
xfree(item);
}
+}
+
+static void list_free_list(list_T *l) {
+ // Remove the list from the list of lists for garbage collection.
+ if (l->lv_used_prev == NULL) {
+ first_list = l->lv_used_next;
+ } else {
+ l->lv_used_prev->lv_used_next = l->lv_used_next;
+ }
+ if (l->lv_used_next != NULL) {
+ l->lv_used_next->lv_used_prev = l->lv_used_prev;
+ }
+
xfree(l);
}
+void list_free(list_T *l) {
+ if (!in_free_unref_items) {
+ list_free_contents(l);
+ list_free_list(l);
+ }
+}
+
/*
* Allocate a list item.
* It is not initialized, don't forget to set v_lock.
@@ -5026,12 +5162,18 @@ dict_equal (
dictitem_T *item2;
int todo;
- if (d1 == NULL || d2 == NULL)
- return FALSE;
- if (d1 == d2)
- return TRUE;
- if (dict_len(d1) != dict_len(d2))
- return FALSE;
+ if (d1 == NULL && d2 == NULL) {
+ return true;
+ }
+ if (d1 == NULL || d2 == NULL) {
+ return false;
+ }
+ if (d1 == d2) {
+ return true;
+ }
+ if (dict_len(d1) != dict_len(d2)) {
+ return false;
+ }
todo = (int)d1->dv_hashtab.ht_used;
for (hi = d1->dv_hashtab.ht_array; todo > 0; ++hi) {
@@ -5049,6 +5191,60 @@ dict_equal (
static int tv_equal_recurse_limit;
+static bool func_equal(
+ typval_T *tv1,
+ typval_T *tv2,
+ bool ic // ignore case
+) {
+ char_u *s1, *s2;
+ dict_T *d1, *d2;
+ int a1, a2;
+
+ // empty and NULL function name considered the same
+ s1 = tv1->v_type == VAR_FUNC ? tv1->vval.v_string
+ : tv1->vval.v_partial->pt_name;
+ if (s1 != NULL && *s1 == NUL) {
+ s1 = NULL;
+ }
+ s2 = tv2->v_type == VAR_FUNC ? tv2->vval.v_string
+ : tv2->vval.v_partial->pt_name;
+ if (s2 != NULL && *s2 == NUL) {
+ s2 = NULL;
+ }
+ if (s1 == NULL || s2 == NULL) {
+ if (s1 != s2) {
+ return false;
+ }
+ } else if (STRCMP(s1, s2) != 0) {
+ return false;
+ }
+
+ // empty dict and NULL dict is different
+ d1 = tv1->v_type == VAR_FUNC ? NULL : tv1->vval.v_partial->pt_dict;
+ d2 = tv2->v_type == VAR_FUNC ? NULL : tv2->vval.v_partial->pt_dict;
+ if (d1 == NULL || d2 == NULL) {
+ if (d1 != d2) {
+ return false;
+ }
+ } else if (!dict_equal(d1, d2, ic, true)) {
+ return false;
+ }
+
+ // empty list and no list considered the same
+ a1 = tv1->v_type == VAR_FUNC ? 0 : tv1->vval.v_partial->pt_argc;
+ a2 = tv2->v_type == VAR_FUNC ? 0 : tv2->vval.v_partial->pt_argc;
+ if (a1 != a2) {
+ return false;
+ }
+ for (int i = 0; i < a1; i++) {
+ if (!tv_equal(tv1->vval.v_partial->pt_argv + i,
+ tv2->vval.v_partial->pt_argv + i, ic, true)) {
+ return false;
+ }
+ }
+ return true;
+}
+
/*
* Return TRUE if "tv1" and "tv2" have the same value.
* Compares the items just like "==" would compare them, but strings and
@@ -5067,9 +5263,6 @@ tv_equal (
static int recursive_cnt = 0; /* catch recursive loops */
int r;
- if (tv1->v_type != tv2->v_type)
- return FALSE;
-
/* Catch lists and dicts that have an endless loop by limiting
* recursiveness to a limit. We guess they are equal then.
* A fixed limit has the problem of still taking an awful long time.
@@ -5083,6 +5276,20 @@ tv_equal (
return TRUE;
}
+ // For VAR_FUNC and VAR_PARTIAL only compare the function name.
+ if ((tv1->v_type == VAR_FUNC
+ || (tv1->v_type == VAR_PARTIAL && tv1->vval.v_partial != NULL))
+ && (tv2->v_type == VAR_FUNC
+ || (tv2->v_type == VAR_PARTIAL && tv2->vval.v_partial != NULL))) {
+ recursive_cnt++;
+ r = func_equal(tv1, tv2, ic);
+ recursive_cnt--;
+ return r;
+ }
+ if (tv1->v_type != tv2->v_type) {
+ return false;
+ }
+
switch (tv1->v_type) {
case VAR_LIST:
++recursive_cnt;
@@ -5096,11 +5303,6 @@ tv_equal (
--recursive_cnt;
return r;
- case VAR_FUNC:
- return tv1->vval.v_string != NULL
- && tv2->vval.v_string != NULL
- && STRCMP(tv1->vval.v_string, tv2->vval.v_string) == 0;
-
case VAR_NUMBER:
return tv1->vval.v_number == tv2->vval.v_number;
@@ -5115,6 +5317,8 @@ tv_equal (
case VAR_SPECIAL:
return tv1->vval.v_special == tv2->vval.v_special;
+ case VAR_FUNC:
+ case VAR_PARTIAL:
case VAR_UNKNOWN:
// VAR_UNKNOWN can be the result of an invalid expression, let’s say it does
// not equal anything, not even self.
@@ -5728,7 +5932,17 @@ bool garbage_collect(void)
{
TerminalJobData *data;
map_foreach_value(jobs, data, {
- ABORTING(set_ref_dict)(data->self, copyID);
+ set_ref_in_callback(&data->on_stdout, copyID, NULL, NULL);
+ set_ref_in_callback(&data->on_stderr, copyID, NULL, NULL);
+ set_ref_in_callback(&data->on_exit, copyID, NULL, NULL);
+ })
+ }
+
+ // Timers
+ {
+ timer_T *timer;
+ map_foreach_value(timers, timer, {
+ set_ref_in_callback(&timer->callback, copyID, NULL, NULL);
})
}
@@ -5804,42 +6018,63 @@ bool garbage_collect(void)
/// @return true, if something was freed.
static int free_unref_items(int copyID)
{
+ dict_T *dd, *dd_next;
+ list_T *ll, *ll_next;
bool did_free = false;
+ // Let all "free" functions know that we are here. This means no
+ // dictionaries, lists, or jobs are to be freed, because we will
+ // do that here.
+ in_free_unref_items = true;
+
+ // PASS 1: free the contents of the items. We don't free the items
+ // themselves yet, so that it is possible to decrement refcount counters.
+
// Go through the list of dicts and free items without the copyID.
// Don't free dicts that are referenced internally.
- for (dict_T *dd = first_dict; dd != NULL; ) {
+ for (dict_T *dd = first_dict; dd != NULL; dd = dd->dv_used_next) {
if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)) {
// Free the Dictionary and ordinary items it contains, but don't
// recurse into Lists and Dictionaries, they will be in the list
- // of dicts or list of lists. */
- dict_T *dd_next = dd->dv_used_next;
- dict_free(dd, FALSE);
+ // of dicts or list of lists.
+ dict_free_contents(dd);
did_free = true;
- dd = dd_next;
- } else {
- dd = dd->dv_used_next;
}
}
// Go through the list of lists and free items without the copyID.
// But don't free a list that has a watcher (used in a for loop), these
// are not referenced anywhere.
- for (list_T *ll = first_list; ll != NULL;) {
+ for (list_T *ll = first_list; ll != NULL; ll = ll->lv_used_next) {
if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)
&& ll->lv_watch == NULL) {
// Free the List and ordinary items it contains, but don't recurse
// into Lists and Dictionaries, they will be in the list of dicts
// or list of lists.
- list_T* ll_next = ll->lv_used_next;
- list_free(ll, FALSE);
+ list_free_contents(ll);
did_free = true;
- ll = ll_next;
- } else {
- ll = ll->lv_used_next;
}
}
+ // PASS 2: free the items themselves.
+ for (dd = first_dict; dd != NULL; dd = dd_next) {
+ dd_next = dd->dv_used_next;
+ if ((dd->dv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)) {
+ dict_free_dict(dd);
+ }
+ }
+
+ for (ll = first_list; ll != NULL; ll = ll_next) {
+ ll_next = ll->lv_used_next;
+ if ((ll->lv_copyID & COPYID_MASK) != (copyID & COPYID_MASK)
+ && ll->lv_watch == NULL) {
+ // Free the List and ordinary items it contains, but don't recurse
+ // into Lists and Dictionaries, they will be in the list of dicts
+ // or list of lists.
+ list_free_list(ll);
+ }
+ }
+ in_free_unref_items = false;
return did_free;
}
@@ -5957,6 +6192,24 @@ bool set_ref_in_item(typval_T *tv, int copyID, ht_stack_T **ht_stack,
*ht_stack = newitem;
}
}
+
+ QUEUE *w = NULL;
+ DictWatcher *watcher = NULL;
+ QUEUE_FOREACH(w, &dd->watchers) {
+ watcher = dictwatcher_node_data(w);
+ set_ref_in_callback(&watcher->callback, copyID, ht_stack, list_stack);
+ }
+ }
+ if (tv->v_type == VAR_PARTIAL) {
+ partial_T *pt = tv->vval.v_partial;
+ int i;
+
+ if (pt != NULL) {
+ for (i = 0; i < pt->pt_argc; i++) {
+ abort = abort || set_ref_in_item(&pt->pt_argv[i], copyID,
+ ht_stack, list_stack);
+ }
+ }
}
break;
}
@@ -5982,6 +6235,26 @@ bool set_ref_in_item(typval_T *tv, int copyID, ht_stack_T **ht_stack,
break;
}
+ case VAR_PARTIAL: {
+ partial_T *pt = tv->vval.v_partial;
+
+ // A partial does not have a copyID, because it cannot contain itself.
+ if (pt != NULL) {
+ if (pt->pt_dict != NULL) {
+ typval_T dtv;
+
+ dtv.v_type = VAR_DICT;
+ dtv.vval.v_dict = pt->pt_dict;
+ abort = abort || set_ref_in_item(&dtv, copyID, ht_stack, list_stack);
+ }
+
+ for (int i = 0; i < pt->pt_argc; i++) {
+ abort = abort || set_ref_in_item(&pt->pt_argv[i], copyID,
+ ht_stack, list_stack);
+ }
+ }
+ break;
+ }
case VAR_FUNC:
case VAR_UNKNOWN:
case VAR_SPECIAL:
@@ -6073,7 +6346,8 @@ static void rettv_dict_alloc(typval_T *rettv)
rettv->vval.v_dict = d;
rettv->v_type = VAR_DICT;
- ++d->dv_refcount;
+ rettv->v_lock = VAR_UNLOCKED;
+ d->dv_refcount++;
}
/// Clear all the keys of a Dictionary. "d" remains a valid empty Dictionary.
@@ -6104,31 +6378,18 @@ void dict_clear(dict_T *d)
*/
void dict_unref(dict_T *d)
{
- if (d != NULL && --d->dv_refcount <= 0)
- dict_free(d, TRUE);
+ if (d != NULL && --d->dv_refcount <= 0) {
+ dict_free(d);
+ }
}
-/*
- * Free a Dictionary, including all items it contains.
- * Ignores the reference count.
- */
-void
-dict_free (
- dict_T *d,
- int recurse /* Free Lists and Dictionaries recursively. */
-)
-{
+/// Free a Dictionary, including all items it contains.
+/// Ignores the reference count.
+static void dict_free_contents(dict_T *d) {
int todo;
hashitem_T *hi;
dictitem_T *di;
- /* Remove the dict from the list of dicts for garbage collection. */
- if (d->dv_used_prev == NULL)
- first_dict = d->dv_used_next;
- else
- d->dv_used_prev->dv_used_next = d->dv_used_next;
- if (d->dv_used_next != NULL)
- d->dv_used_next->dv_used_prev = d->dv_used_prev;
/* Lock the hashtab, we don't want it to resize while freeing items. */
hash_lock(&d->dv_hashtab);
@@ -6140,9 +6401,7 @@ dict_free (
* something recursive causing trouble. */
di = HI2DI(hi);
hash_remove(&d->dv_hashtab, hi);
- if (recurse || (di->di_tv.v_type != VAR_LIST
- && di->di_tv.v_type != VAR_DICT))
- clear_tv(&di->di_tv);
+ clear_tv(&di->di_tv);
xfree(di);
--todo;
}
@@ -6151,14 +6410,34 @@ dict_free (
while (!QUEUE_EMPTY(&d->watchers)) {
QUEUE *w = QUEUE_HEAD(&d->watchers);
DictWatcher *watcher = dictwatcher_node_data(w);
- dictwatcher_free(watcher);
QUEUE_REMOVE(w);
+ dictwatcher_free(watcher);
}
hash_clear(&d->dv_hashtab);
+}
+
+static void dict_free_dict(dict_T *d) {
+ // Remove the dict from the list of dicts for garbage collection.
+ if (d->dv_used_prev == NULL) {
+ first_dict = d->dv_used_next;
+ } else {
+ d->dv_used_prev->dv_used_next = d->dv_used_next;
+ }
+ if (d->dv_used_next != NULL) {
+ d->dv_used_next->dv_used_prev = d->dv_used_prev;
+ }
+
xfree(d);
}
+void dict_free(dict_T *d) {
+ if (!in_free_unref_items) {
+ dict_free_contents(d);
+ dict_free_dict(d);
+ }
+}
+
/*
* Allocate a Dictionary item.
* The "key" is copied to the new item.
@@ -6166,7 +6445,7 @@ dict_free (
*/
dictitem_T *dictitem_alloc(char_u *key) FUNC_ATTR_NONNULL_RET
{
- dictitem_T *di = xmalloc(sizeof(dictitem_T) + STRLEN(key));
+ dictitem_T *di = xmalloc(offsetof(dictitem_T, di_key) + STRLEN(key) + 1);
#ifndef __clang_analyzer__
STRCPY(di->di_key, key);
#endif
@@ -6338,6 +6617,23 @@ int dict_add_list(dict_T *d, char *key, list_T *list)
return OK;
}
+/// Add a dict entry to dictionary "d".
+/// Returns FAIL when out of memory and when key already exists.
+int dict_add_dict(dict_T *d, char *key, dict_T *dict)
+{
+ dictitem_T *item = dictitem_alloc((char_u *)key);
+
+ item->di_tv.v_lock = 0;
+ item->di_tv.v_type = VAR_DICT;
+ item->di_tv.vval.v_dict = dict;
+ if (dict_add(d, item) == FAIL) {
+ dictitem_free(item);
+ return FAIL;
+ }
+ dict->dv_refcount++;
+ return OK;
+}
+
/// Set all existing keys in "dict" as read-only.
///
/// This does not protect against adding new keys to the Dictionary.
@@ -6379,9 +6675,12 @@ dictitem_T *dict_find(dict_T *d, char_u *key, int len)
char_u *tofree = NULL;
hashitem_T *hi;
- if (len < 0)
+ if (d == NULL) {
+ return NULL;
+ }
+ if (len < 0) {
akey = key;
- else if (len >= AKEYLEN) {
+ } else if (len >= AKEYLEN) {
tofree = akey = vim_strnsave(key, len);
} else {
/* Avoid a malloc/free by using buf[]. */
@@ -6400,64 +6699,45 @@ dictitem_T *dict_find(dict_T *d, char_u *key, int len)
/// @param[out] result The address where a pointer to the wanted callback
/// will be left.
/// @return true/false on success/failure.
-static bool get_dict_callback(dict_T *d, char *key, ufunc_T **result)
+static bool get_dict_callback(dict_T *d, char *key, Callback *result)
{
dictitem_T *di = dict_find(d, (uint8_t *)key, -1);
if (di == NULL) {
- *result = NULL;
+ result->type = kCallbackNone;
return true;
}
-
- if (di->di_tv.v_type != VAR_FUNC && di->di_tv.v_type != VAR_STRING) {
- EMSG(_("Argument is not a function or function name"));
- *result = NULL;
- return false;
- }
- if ((*result = find_ufunc(di->di_tv.vval.v_string)) == NULL) {
+ if (di->di_tv.v_type != VAR_FUNC && di->di_tv.v_type != VAR_STRING
+ && di->di_tv.v_type != VAR_PARTIAL) {
+ EMSG(_("Argument is not a function or function name"));
+ result->type = kCallbackNone;
return false;
}
- (*result)->uf_refcount++;
- return true;
-}
-
-static ufunc_T *find_ufunc(uint8_t *name)
-{
- uint8_t *n = name;
- ufunc_T *rv = NULL;
- if (*n > '9' || *n < '0') {
- if ((n = trans_function_name(&n, false, TFN_INT|TFN_QUIET, NULL))) {
- rv = find_func(n);
- xfree(n);
- }
- } else {
- // dict function, name is already translated
- rv = find_func(n);
- }
-
- if (!rv) {
- EMSG2(_("Function %s doesn't exist"), name);
- return NULL;
- }
-
- return rv;
+ typval_T tv;
+ copy_tv(&di->di_tv, &tv);
+ set_selfdict(&tv, d);
+ bool res = callback_from_typval(result, &tv);
+ clear_tv(&tv);
+ return res;
}
-/*
- * Get a string item from a dictionary.
- * When "save" is TRUE allocate memory for it.
- * Returns NULL if the entry doesn't exist.
- */
-char_u *get_dict_string(dict_T *d, char_u *key, int save)
+/// Get a string item from a dictionary.
+///
+/// @param save whether memory should be allocated for the return value
+/// when false a shared buffer is used, can only be used once!
+///
+/// @return the entry or NULL if the entry doesn't exist.
+char_u *get_dict_string(dict_T *d, char *key, bool save)
{
dictitem_T *di;
char_u *s;
- di = dict_find(d, key, -1);
- if (di == NULL)
+ di = dict_find(d, (char_u *)key, -1);
+ if (di == NULL) {
return NULL;
+ }
s = get_tv_string(&di->di_tv);
if (save) {
s = vim_strsave(s);
@@ -6465,15 +6745,15 @@ char_u *get_dict_string(dict_T *d, char_u *key, int save)
return s;
}
-/*
- * Get a number item from a dictionary.
- * Returns 0 if the entry doesn't exist.
- */
-long get_dict_number(dict_T *d, char_u *key)
+/// Get a number item from a dictionary.
+///
+/// @return the entry or 0 if the entry doesn't exist.
+long get_dict_number(dict_T *d, char *key)
{
- dictitem_T *di = dict_find(d, key, -1);
- if (di == NULL)
+ dictitem_T *di = dict_find(d, (char_u *)key, -1);
+ if (di == NULL) {
return 0;
+ }
return get_tv_number(&di->di_tv);
}
@@ -6522,10 +6802,8 @@ static int get_dict_tv(char_u **arg, typval_T *rettv, int evaluate)
}
if (evaluate) {
key = get_tv_string_buf_chk(&tvkey, buf);
- if (key == NULL || *key == NUL) {
- /* "key" is NULL when get_tv_string_buf_chk() gave an errmsg */
- if (key != NULL)
- EMSG(_(e_emptykey));
+ if (key == NULL) {
+ // "key" is NULL when get_tv_string_buf_chk() gave an errmsg
clear_tv(&tvkey);
goto failret;
}
@@ -6566,8 +6844,9 @@ static int get_dict_tv(char_u **arg, typval_T *rettv, int evaluate)
if (**arg != '}') {
EMSG2(_("E723: Missing end of Dictionary '}': %s"), *arg);
failret:
- if (evaluate)
- dict_free(d, TRUE);
+ if (evaluate) {
+ dict_free(d);
+ }
return FAIL;
}
@@ -6643,319 +6922,9 @@ static int get_env_tv(char_u **arg, typval_T *rettv, int evaluate)
return OK;
}
-/*
- * Array with names and number of arguments of all internal functions
- * MUST BE KEPT SORTED IN strcmp() ORDER FOR BINARY SEARCH!
- */
-static struct fst {
- char *f_name; /* function name */
- char f_min_argc; /* minimal number of arguments */
- char f_max_argc; /* maximal number of arguments */
- void (*f_func)(typval_T *args, typval_T *rvar);
- /* implementation of function */
-} functions[] =
-{
- { "abs", 1, 1, f_abs },
- { "acos", 1, 1, f_acos }, // WJMc
- { "add", 2, 2, f_add },
- { "and", 2, 2, f_and },
- { "append", 2, 2, f_append },
- { "argc", 0, 0, f_argc },
- { "argidx", 0, 0, f_argidx },
- { "arglistid", 0, 2, f_arglistid },
- { "argv", 0, 1, f_argv },
- { "asin", 1, 1, f_asin }, // WJMc
- { "assert_equal", 2, 3, f_assert_equal },
- { "assert_exception", 1, 2, f_assert_exception },
- { "assert_false", 1, 2, f_assert_false },
- { "assert_true", 1, 2, f_assert_true },
- { "atan", 1, 1, f_atan },
- { "atan2", 2, 2, f_atan2 },
- { "browse", 4, 4, f_browse },
- { "browsedir", 2, 2, f_browsedir },
- { "bufexists", 1, 1, f_bufexists },
- { "buffer_exists", 1, 1, f_bufexists }, // obsolete
- { "buffer_name", 1, 1, f_bufname }, // obsolete
- { "buffer_number", 1, 1, f_bufnr }, // obsolete
- { "buflisted", 1, 1, f_buflisted },
- { "bufloaded", 1, 1, f_bufloaded },
- { "bufname", 1, 1, f_bufname },
- { "bufnr", 1, 2, f_bufnr },
- { "bufwinnr", 1, 1, f_bufwinnr },
- { "byte2line", 1, 1, f_byte2line },
- { "byteidx", 2, 2, f_byteidx },
- { "byteidxcomp", 2, 2, f_byteidxcomp },
- { "call", 2, 3, f_call },
- { "ceil", 1, 1, f_ceil },
- { "changenr", 0, 0, f_changenr },
- { "char2nr", 1, 2, f_char2nr },
- { "cindent", 1, 1, f_cindent },
- { "clearmatches", 0, 0, f_clearmatches },
- { "col", 1, 1, f_col },
- { "complete", 2, 2, f_complete },
- { "complete_add", 1, 1, f_complete_add },
- { "complete_check", 0, 0, f_complete_check },
- { "confirm", 1, 4, f_confirm },
- { "copy", 1, 1, f_copy },
- { "cos", 1, 1, f_cos },
- { "cosh", 1, 1, f_cosh },
- { "count", 2, 4, f_count },
- { "cscope_connection", 0, 3, f_cscope_connection },
- { "cursor", 1, 3, f_cursor },
- { "deepcopy", 1, 2, f_deepcopy },
- { "delete", 1, 2, f_delete },
- { "dictwatcheradd", 3, 3, f_dictwatcheradd },
- { "dictwatcherdel", 3, 3, f_dictwatcherdel },
- { "did_filetype", 0, 0, f_did_filetype },
- { "diff_filler", 1, 1, f_diff_filler },
- { "diff_hlID", 2, 2, f_diff_hlID },
- { "empty", 1, 1, f_empty },
- { "escape", 2, 2, f_escape },
- { "eval", 1, 1, f_eval },
- { "eventhandler", 0, 0, f_eventhandler },
- { "executable", 1, 1, f_executable },
- { "exepath", 1, 1, f_exepath },
- { "exists", 1, 1, f_exists },
- { "exp", 1, 1, f_exp },
- { "expand", 1, 3, f_expand },
- { "extend", 2, 3, f_extend },
- { "feedkeys", 1, 2, f_feedkeys },
- { "file_readable", 1, 1, f_filereadable }, // obsolete
- { "filereadable", 1, 1, f_filereadable },
- { "filewritable", 1, 1, f_filewritable },
- { "filter", 2, 2, f_filter },
- { "finddir", 1, 3, f_finddir },
- { "findfile", 1, 3, f_findfile },
- { "float2nr", 1, 1, f_float2nr },
- { "floor", 1, 1, f_floor },
- { "fmod", 2, 2, f_fmod },
- { "fnameescape", 1, 1, f_fnameescape },
- { "fnamemodify", 2, 2, f_fnamemodify },
- { "foldclosed", 1, 1, f_foldclosed },
- { "foldclosedend", 1, 1, f_foldclosedend },
- { "foldlevel", 1, 1, f_foldlevel },
- { "foldtext", 0, 0, f_foldtext },
- { "foldtextresult", 1, 1, f_foldtextresult },
- { "foreground", 0, 0, f_foreground },
- { "function", 1, 1, f_function },
- { "garbagecollect", 0, 1, f_garbagecollect },
- { "get", 2, 3, f_get },
- { "getbufline", 2, 3, f_getbufline },
- { "getbufvar", 2, 3, f_getbufvar },
- { "getchar", 0, 1, f_getchar },
- { "getcharmod", 0, 0, f_getcharmod },
- { "getcharsearch", 0, 0, f_getcharsearch },
- { "getcmdline", 0, 0, f_getcmdline },
- { "getcmdpos", 0, 0, f_getcmdpos },
- { "getcmdtype", 0, 0, f_getcmdtype },
- { "getcmdwintype", 0, 0, f_getcmdwintype },
- { "getcurpos", 0, 0, f_getcurpos },
- { "getcwd", 0, 2, f_getcwd },
- { "getfontname", 0, 1, f_getfontname },
- { "getfperm", 1, 1, f_getfperm },
- { "getfsize", 1, 1, f_getfsize },
- { "getftime", 1, 1, f_getftime },
- { "getftype", 1, 1, f_getftype },
- { "getline", 1, 2, f_getline },
- { "getloclist", 1, 1, f_getqflist },
- { "getmatches", 0, 0, f_getmatches },
- { "getpid", 0, 0, f_getpid },
- { "getpos", 1, 1, f_getpos },
- { "getqflist", 0, 0, f_getqflist },
- { "getreg", 0, 3, f_getreg },
- { "getregtype", 0, 1, f_getregtype },
- { "gettabvar", 2, 3, f_gettabvar },
- { "gettabwinvar", 3, 4, f_gettabwinvar },
- { "getwinposx", 0, 0, f_getwinposx },
- { "getwinposy", 0, 0, f_getwinposy },
- { "getwinvar", 2, 3, f_getwinvar },
- { "glob", 1, 4, f_glob },
- { "glob2regpat", 1, 1, f_glob2regpat },
- { "globpath", 2, 5, f_globpath },
- { "has", 1, 1, f_has },
- { "has_key", 2, 2, f_has_key },
- { "haslocaldir", 0, 2, f_haslocaldir },
- { "hasmapto", 1, 3, f_hasmapto },
- { "highlightID", 1, 1, f_hlID }, // obsolete
- { "highlight_exists", 1, 1, f_hlexists }, // obsolete
- { "histadd", 2, 2, f_histadd },
- { "histdel", 1, 2, f_histdel },
- { "histget", 1, 2, f_histget },
- { "histnr", 1, 1, f_histnr },
- { "hlID", 1, 1, f_hlID },
- { "hlexists", 1, 1, f_hlexists },
- { "hostname", 0, 0, f_hostname },
- { "iconv", 3, 3, f_iconv },
- { "indent", 1, 1, f_indent },
- { "index", 2, 4, f_index },
- { "input", 1, 3, f_input },
- { "inputdialog", 1, 3, f_inputdialog },
- { "inputlist", 1, 1, f_inputlist },
- { "inputrestore", 0, 0, f_inputrestore },
- { "inputsave", 0, 0, f_inputsave },
- { "inputsecret", 1, 2, f_inputsecret },
- { "insert", 2, 3, f_insert },
- { "invert", 1, 1, f_invert },
- { "isdirectory", 1, 1, f_isdirectory },
- { "islocked", 1, 1, f_islocked },
- { "items", 1, 1, f_items },
- { "jobclose", 1, 2, f_jobclose },
- { "jobpid", 1, 1, f_jobpid },
- { "jobresize", 3, 3, f_jobresize },
- { "jobsend", 2, 2, f_jobsend },
- { "jobstart", 1, 2, f_jobstart },
- { "jobstop", 1, 1, f_jobstop },
- { "jobwait", 1, 2, f_jobwait },
- { "join", 1, 2, f_join },
- { "json_decode", 1, 1, f_json_decode },
- { "json_encode", 1, 1, f_json_encode },
- { "keys", 1, 1, f_keys },
- { "last_buffer_nr", 0, 0, f_last_buffer_nr }, // obsolete
- { "len", 1, 1, f_len },
- { "libcall", 3, 3, f_libcall },
- { "libcallnr", 3, 3, f_libcallnr },
- { "line", 1, 1, f_line },
- { "line2byte", 1, 1, f_line2byte },
- { "lispindent", 1, 1, f_lispindent },
- { "localtime", 0, 0, f_localtime },
- { "log", 1, 1, f_log },
- { "log10", 1, 1, f_log10 },
- { "map", 2, 2, f_map },
- { "maparg", 1, 4, f_maparg },
- { "mapcheck", 1, 3, f_mapcheck },
- { "match", 2, 4, f_match },
- { "matchadd", 2, 5, f_matchadd },
- { "matchaddpos", 2, 5, f_matchaddpos },
- { "matcharg", 1, 1, f_matcharg },
- { "matchdelete", 1, 1, f_matchdelete },
- { "matchend", 2, 4, f_matchend },
- { "matchlist", 2, 4, f_matchlist },
- { "matchstr", 2, 4, f_matchstr },
- { "max", 1, 1, f_max },
- { "min", 1, 1, f_min },
- { "mkdir", 1, 3, f_mkdir },
- { "mode", 0, 1, f_mode },
- { "msgpackdump", 1, 1, f_msgpackdump },
- { "msgpackparse", 1, 1, f_msgpackparse },
- { "nextnonblank", 1, 1, f_nextnonblank },
- { "nr2char", 1, 2, f_nr2char },
- { "or", 2, 2, f_or },
- { "pathshorten", 1, 1, f_pathshorten },
- { "pow", 2, 2, f_pow },
- { "prevnonblank", 1, 1, f_prevnonblank },
- { "printf", 2, MAX_FUNC_ARGS, f_printf },
- { "pumvisible", 0, 0, f_pumvisible },
- { "py3eval", 1, 1, f_py3eval },
- { "pyeval", 1, 1, f_pyeval },
- { "range", 1, 3, f_range },
- { "readfile", 1, 3, f_readfile },
- { "reltime", 0, 2, f_reltime },
- { "reltimefloat", 1, 1, f_reltimefloat },
- { "reltimestr", 1, 1, f_reltimestr },
- { "remove", 2, 3, f_remove },
- { "rename", 2, 2, f_rename },
- { "repeat", 2, 2, f_repeat },
- { "resolve", 1, 1, f_resolve },
- { "reverse", 1, 1, f_reverse },
- { "round", 1, 1, f_round },
- { "rpcnotify", 2, MAX_FUNC_ARGS, f_rpcnotify },
- { "rpcrequest", 2, MAX_FUNC_ARGS, f_rpcrequest },
- { "rpcstart", 1, 2, f_rpcstart },
- { "rpcstop", 1, 1, f_rpcstop },
- { "screenattr", 2, 2, f_screenattr },
- { "screenchar", 2, 2, f_screenchar },
- { "screencol", 0, 0, f_screencol },
- { "screenrow", 0, 0, f_screenrow },
- { "search", 1, 4, f_search },
- { "searchdecl", 1, 3, f_searchdecl },
- { "searchpair", 3, 7, f_searchpair },
- { "searchpairpos", 3, 7, f_searchpairpos },
- { "searchpos", 1, 4, f_searchpos },
- { "serverlist", 0, 0, f_serverlist },
- { "serverstart", 0, 1, f_serverstart },
- { "serverstop", 1, 1, f_serverstop },
- { "setbufvar", 3, 3, f_setbufvar },
- { "setcharsearch", 1, 1, f_setcharsearch },
- { "setcmdpos", 1, 1, f_setcmdpos },
- { "setfperm", 2, 2, f_setfperm },
- { "setline", 2, 2, f_setline },
- { "setloclist", 2, 4, f_setloclist },
- { "setmatches", 1, 1, f_setmatches },
- { "setpos", 2, 2, f_setpos },
- { "setqflist", 1, 3, f_setqflist },
- { "setreg", 2, 3, f_setreg },
- { "settabvar", 3, 3, f_settabvar },
- { "settabwinvar", 4, 4, f_settabwinvar },
- { "setwinvar", 3, 3, f_setwinvar },
- { "sha256", 1, 1, f_sha256 },
- { "shellescape", 1, 2, f_shellescape },
- { "shiftwidth", 0, 0, f_shiftwidth },
- { "simplify", 1, 1, f_simplify },
- { "sin", 1, 1, f_sin },
- { "sinh", 1, 1, f_sinh },
- { "sort", 1, 3, f_sort },
- { "soundfold", 1, 1, f_soundfold },
- { "spellbadword", 0, 1, f_spellbadword },
- { "spellsuggest", 1, 3, f_spellsuggest },
- { "split", 1, 3, f_split },
- { "sqrt", 1, 1, f_sqrt },
- { "str2float", 1, 1, f_str2float },
- { "str2nr", 1, 2, f_str2nr },
- { "strchars", 1, 2, f_strchars },
- { "strdisplaywidth", 1, 2, f_strdisplaywidth },
- { "strftime", 1, 2, f_strftime },
- { "stridx", 2, 3, f_stridx },
- { "string", 1, 1, f_string },
- { "strlen", 1, 1, f_strlen },
- { "strpart", 2, 3, f_strpart },
- { "strridx", 2, 3, f_strridx },
- { "strtrans", 1, 1, f_strtrans },
- { "strwidth", 1, 1, f_strwidth },
- { "submatch", 1, 2, f_submatch },
- { "substitute", 4, 4, f_substitute },
- { "synID", 3, 3, f_synID },
- { "synIDattr", 2, 3, f_synIDattr },
- { "synIDtrans", 1, 1, f_synIDtrans },
- { "synconcealed", 2, 2, f_synconcealed },
- { "synstack", 2, 2, f_synstack },
- { "system", 1, 2, f_system },
- { "systemlist", 1, 3, f_systemlist },
- { "tabpagebuflist", 0, 1, f_tabpagebuflist },
- { "tabpagenr", 0, 1, f_tabpagenr },
- { "tabpagewinnr", 1, 2, f_tabpagewinnr },
- { "tagfiles", 0, 0, f_tagfiles },
- { "taglist", 1, 1, f_taglist },
- { "tan", 1, 1, f_tan },
- { "tanh", 1, 1, f_tanh },
- { "tempname", 0, 0, f_tempname },
- { "termopen", 1, 2, f_termopen },
- { "test", 1, 1, f_test },
- { "tolower", 1, 1, f_tolower },
- { "toupper", 1, 1, f_toupper },
- { "tr", 3, 3, f_tr },
- { "trunc", 1, 1, f_trunc },
- { "type", 1, 1, f_type },
- { "undofile", 1, 1, f_undofile },
- { "undotree", 0, 0, f_undotree },
- { "uniq", 1, 3, f_uniq },
- { "values", 1, 1, f_values },
- { "virtcol", 1, 1, f_virtcol },
- { "visualmode", 0, 1, f_visualmode },
- { "wildmenumode", 0, 0, f_wildmenumode },
- { "winbufnr", 1, 1, f_winbufnr },
- { "wincol", 0, 0, f_wincol },
- { "winheight", 1, 1, f_winheight },
- { "winline", 0, 0, f_winline },
- { "winnr", 0, 1, f_winnr },
- { "winrestcmd", 0, 0, f_winrestcmd },
- { "winrestview", 1, 1, f_winrestview },
- { "winsaveview", 0, 0, f_winsaveview },
- { "winwidth", 1, 1, f_winwidth },
- { "wordcount", 0, 0, f_wordcount },
- { "writefile", 2, 3, f_writefile },
- { "xor", 2, 2, f_xor },
-};
-
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "funcs.generated.h"
+#endif
/*
* Function given to ExpandGeneric() to obtain the list of internal
@@ -6973,15 +6942,25 @@ char_u *get_function_name(expand_T *xp, int idx)
if (name != NULL)
return name;
}
- if (++intidx < (int)ARRAY_SIZE(functions)) {
- STRCPY(IObuff, functions[intidx].f_name);
- STRCAT(IObuff, "(");
- if (functions[intidx].f_max_argc == 0)
- STRCAT(IObuff, ")");
- return IObuff;
+ while ( (size_t)++intidx < ARRAY_SIZE(functions)
+ && functions[intidx].name[0] == '\0') {
}
- return NULL;
+ if ((size_t)intidx >= ARRAY_SIZE(functions)) {
+ return NULL;
+ }
+
+ const char *const key = functions[intidx].name;
+ const size_t key_len = strlen(key);
+ memcpy(IObuff, key, key_len);
+ IObuff[key_len] = '(';
+ if (functions[intidx].max_argc == 0) {
+ IObuff[key_len + 1] = ')';
+ IObuff[key_len + 2] = NUL;
+ } else {
+ IObuff[key_len + 1] = NUL;
+ }
+ return IObuff;
}
/*
@@ -7006,42 +6985,32 @@ char_u *get_expr_name(expand_T *xp, int idx)
-/*
- * Find internal function in table above.
- * Return index, or -1 if not found
- */
-static int
-find_internal_func (
- char_u *name /* name of the function */
-)
+/// Find internal function in hash functions
+///
+/// @param[in] name Name of the function.
+///
+/// Returns pointer to the function definition or NULL if not found.
+static VimLFuncDef *find_internal_func(const char *const name)
+ FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE FUNC_ATTR_NONNULL_ALL
{
- int first = 0;
- int last = (int)ARRAY_SIZE(functions) - 1;
-
- /*
- * Find the function name in the table. Binary search.
- */
- while (first <= last) {
- int x = first + ((unsigned)(last - first)) / 2;
- int cmp = STRCMP(name, functions[x].f_name);
- if (cmp < 0)
- last = x - 1;
- else if (cmp > 0)
- first = x + 1;
- else
- return x;
- }
- return -1;
+ size_t len = strlen(name);
+ return find_internal_func_gperf(name, len);
}
-/*
- * Check if "name" is a variable of type VAR_FUNC. If so, return the function
- * name it contains, otherwise return "name".
- */
-static char_u *deref_func_name(char_u *name, int *lenp, int no_autoload)
+/// Check if "name" is a variable of type VAR_FUNC. If so, return the function
+/// name it contains, otherwise return "name".
+/// If "partialp" is not NULL, and "name" is of type VAR_PARTIAL also set
+/// "partialp".
+static char_u *deref_func_name(
+ char_u *name, int *lenp,
+ partial_T **partialp, bool no_autoload
+)
{
dictitem_T *v;
int cc;
+ if (partialp != NULL) {
+ *partialp = NULL;
+ }
cc = name[*lenp];
name[*lenp] = NUL;
@@ -7056,6 +7025,20 @@ static char_u *deref_func_name(char_u *name, int *lenp, int no_autoload)
return v->di_tv.vval.v_string;
}
+ if (v != NULL && v->di_tv.v_type == VAR_PARTIAL) {
+ partial_T *pt = v->di_tv.vval.v_partial;
+
+ if (pt == NULL) {
+ *lenp = 0;
+ return (char_u *)""; // just in case
+ }
+ if (partialp != NULL) {
+ *partialp = pt;
+ }
+ *lenp = (int)STRLEN(pt->pt_name);
+ return pt->pt_name;
+ }
+
return name;
}
@@ -7073,7 +7056,8 @@ get_func_tv (
linenr_T lastline, /* last line of range */
int *doesrange, /* return: function handled range */
int evaluate,
- dict_T *selfdict /* Dictionary for "self" */
+ partial_T *partial, // for extra arguments
+ dict_T *selfdict // Dictionary for "self"
)
{
char_u *argp;
@@ -7085,10 +7069,11 @@ get_func_tv (
* Get the arguments.
*/
argp = *arg;
- while (argcount < MAX_FUNC_ARGS) {
- argp = skipwhite(argp + 1); /* skip the '(' or ',' */
- if (*argp == ')' || *argp == ',' || *argp == NUL)
+ while (argcount < MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc)) {
+ argp = skipwhite(argp + 1); // skip the '(' or ','
+ if (*argp == ')' || *argp == ',' || *argp == NUL) {
break;
+ }
if (eval1(&argp, &argvars[argcount], evaluate) == FAIL) {
ret = FAIL;
break;
@@ -7102,14 +7087,16 @@ get_func_tv (
else
ret = FAIL;
- if (ret == OK)
+ if (ret == OK) {
ret = call_func(name, len, rettv, argcount, argvars,
- firstline, lastline, doesrange, evaluate, selfdict);
- else if (!aborting()) {
- if (argcount == MAX_FUNC_ARGS)
+ firstline, lastline, doesrange, evaluate,
+ partial, selfdict);
+ } else if (!aborting()) {
+ if (argcount == MAX_FUNC_ARGS) {
emsg_funcname(N_("E740: Too many arguments for function %s"), name);
- else
+ } else {
emsg_funcname(N_("E116: Invalid arguments for function %s"), name);
+ }
}
while (--argcount >= 0)
@@ -7119,28 +7106,6 @@ get_func_tv (
return ret;
}
-
-/*
- * Call a function with its resolved parameters
- * Return FAIL when the function can't be called, OK otherwise.
- * Also returns OK when an error was encountered while executing the function.
- */
-int
-call_func (
- char_u *funcname, /* name of the function */
- int len, /* length of "name" */
- typval_T *rettv, /* return value goes here */
- int argcount, /* number of "argvars" */
- typval_T *argvars, /* vars for arguments, must have "argcount"
- PLUS ONE elements! */
- linenr_T firstline, /* first line of range */
- linenr_T lastline, /* last line of range */
- int *doesrange, /* return: function handled range */
- int evaluate,
- dict_T *selfdict /* Dictionary for "self" */
-)
-{
- int ret = FAIL;
#define ERROR_UNKNOWN 0
#define ERROR_TOOMANY 1
#define ERROR_TOOFEW 2
@@ -7148,35 +7113,31 @@ call_func (
#define ERROR_DICT 4
#define ERROR_NONE 5
#define ERROR_OTHER 6
- int error = ERROR_NONE;
- int i;
- int llen;
- ufunc_T *fp;
+#define ERROR_BOTH 7
#define FLEN_FIXED 40
- char_u fname_buf[FLEN_FIXED + 1];
- char_u *fname;
- char_u *name;
- /* Make a copy of the name, if it comes from a funcref variable it could
- * be changed or deleted in the called function. */
- name = vim_strnsave(funcname, len);
+/// In a script change <SID>name() and s:name() to K_SNR 123_name().
+/// Change <SNR>123_name() to K_SNR 123_name().
+/// Use "fname_buf[FLEN_FIXED + 1]" when it fits, otherwise allocate memory
+/// (slow).
+static char_u *
+fname_trans_sid(char_u *name, char_u *fname_buf, char_u **tofree, int *error) {
+ int llen;
+ char_u *fname;
+ int i;
- /*
- * In a script change <SID>name() and s:name() to K_SNR 123_name().
- * Change <SNR>123_name() to K_SNR 123_name().
- * Use fname_buf[] when it fits, otherwise allocate memory (slow).
- */
llen = eval_fname_script(name);
if (llen > 0) {
fname_buf[0] = K_SPECIAL;
fname_buf[1] = KS_EXTRA;
fname_buf[2] = (int)KE_SNR;
i = 3;
- if (eval_fname_sid(name)) { /* "<SID>" or "s:" */
- if (current_SID <= 0)
- error = ERROR_SCRIPT;
- else {
- sprintf((char *)fname_buf + 3, "%" PRId64 "_", (int64_t)current_SID);
+ if (eval_fname_sid(name)) { // "<SID>" or "s:"
+ if (current_SID <= 0) {
+ *error = ERROR_SCRIPT;
+ } else {
+ snprintf((char *)fname_buf + 3, FLEN_FIXED + 1, "%" PRId64 "_",
+ (int64_t)current_SID);
i = (int)STRLEN(fname_buf);
}
}
@@ -7185,13 +7146,83 @@ call_func (
fname = fname_buf;
} else {
fname = xmalloc(i + STRLEN(name + llen) + 1);
- memmove(fname, fname_buf, (size_t)i);
- STRCPY(fname + i, name + llen);
+ if (fname == NULL) {
+ *error = ERROR_OTHER;
+ } else {
+ *tofree = fname;
+ memmove(fname, fname_buf, (size_t)i);
+ STRCPY(fname + i, name + llen);
+ }
}
- } else
+ } else {
fname = name;
+ }
- *doesrange = FALSE;
+ return fname;
+}
+
+/// Call a function with its resolved parameters
+/// Return FAIL when the function can't be called, OK otherwise.
+/// Also returns OK when an error was encountered while executing the function.
+int
+call_func(
+ char_u *funcname, // name of the function
+ int len, // length of "name"
+ typval_T *rettv, // return value goes here
+ int argcount_in, // number of "argvars"
+ typval_T *argvars_in, // vars for arguments, must have "argcount"
+ // PLUS ONE elements!
+ linenr_T firstline, // first line of range
+ linenr_T lastline, // last line of range
+ int *doesrange, // return: function handled range
+ bool evaluate,
+ partial_T *partial, // optional, can be NULL
+ dict_T *selfdict_in // Dictionary for "self"
+)
+{
+ int ret = FAIL;
+ int error = ERROR_NONE;
+ ufunc_T *fp;
+ char_u fname_buf[FLEN_FIXED + 1];
+ char_u *tofree = NULL;
+ char_u *fname;
+ char_u *name;
+ int argcount = argcount_in;
+ typval_T *argvars = argvars_in;
+ dict_T *selfdict = selfdict_in;
+ typval_T argv[MAX_FUNC_ARGS + 1]; // used when "partial" is not NULL
+ int argv_clear = 0;
+
+ // Make a copy of the name, if it comes from a funcref variable it could
+ // be changed or deleted in the called function.
+ name = vim_strnsave(funcname, len);
+ if (name == NULL) {
+ return ret;
+ }
+
+ fname = fname_trans_sid(name, fname_buf, &tofree, &error);
+
+ *doesrange = false;
+
+ if (partial != NULL) {
+ // When the function has a partial with a dict and there is a dict
+ // argument, use the dict argument. That is backwards compatible.
+ // When the dict was bound explicitly use the one from the partial.
+ if (partial->pt_dict != NULL
+ && (selfdict_in == NULL || !partial->pt_auto)) {
+ selfdict = partial->pt_dict;
+ }
+ if (error == ERROR_NONE && partial->pt_argc > 0) {
+ for (argv_clear = 0; argv_clear < partial->pt_argc; argv_clear++) {
+ copy_tv(&partial->pt_argv[argv_clear], &argv[argv_clear]);
+ }
+ for (int i = 0; i < argcount_in; i++) {
+ argv[i + argv_clear] = argvars_in[i];
+ }
+ argvars = argv;
+ argcount = partial->pt_argc + argcount_in;
+ }
+ }
/* execute the function if no errors detected and executing */
@@ -7243,18 +7274,16 @@ call_func (
}
}
} else {
- /*
- * Find the function name in the table, call its implementation.
- */
- i = find_internal_func(fname);
- if (i >= 0) {
- if (argcount < functions[i].f_min_argc)
+ // Find the function name in the table, call its implementation.
+ VimLFuncDef *const fdef = find_internal_func((char *)fname);
+ if (fdef != NULL) {
+ if (argcount < fdef->min_argc) {
error = ERROR_TOOFEW;
- else if (argcount > functions[i].f_max_argc)
+ } else if (argcount > fdef->max_argc) {
error = ERROR_TOOMANY;
- else {
+ } else {
argvars[argcount].v_type = VAR_UNKNOWN;
- functions[i].f_func(argvars, rettv);
+ fdef->func(argvars, rettv, fdef->data);
error = ERROR_NONE;
}
}
@@ -7301,8 +7330,10 @@ call_func (
}
}
- if (fname != name && fname != fname_buf)
- xfree(fname);
+ while (argv_clear > 0) {
+ clear_tv(&argv[--argv_clear]);
+ }
+ xfree(tofree);
xfree(name);
return ret;
@@ -7365,13 +7396,10 @@ static inline int get_float_arg(typval_T *argvars, float_T *f)
// Some versions of glibc on i386 have an optimization that makes it harder to
// call math functions indirectly from inside an inlined function, causing
// compile-time errors. Avoid `inline` in that case. #3072
-#ifndef ARCH_32
-inline
-#endif
-static void float_op_wrapper(typval_T *argvars, typval_T *rettv,
- float_T (*function)(float_T))
+static void float_op_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T f;
+ float_T (*function)(float_T) = (float_T (*)(float_T))fptr;
rettv->v_type = VAR_FLOAT;
if (get_float_arg(argvars, &f) == OK) {
@@ -7381,13 +7409,40 @@ static void float_op_wrapper(typval_T *argvars, typval_T *rettv,
}
}
+static void api_wrapper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ ApiDispatchWrapper fn = (ApiDispatchWrapper)fptr;
+
+ Array args = ARRAY_DICT_INIT;
+
+ for (typval_T *tv = argvars; tv->v_type != VAR_UNKNOWN; tv++) {
+ ADD(args, vim_to_object(tv));
+ }
+
+ Error err = ERROR_INIT;
+ Object result = fn(INTERNAL_CALL, args, &err);
+
+ if (err.set) {
+ nvim_err_writeln(cstr_as_string(err.msg));
+ goto end;
+ }
+
+ if (!object_to_vim(result, rettv, &err)) {
+ EMSG2(_("Error converting the call result: %s"), err.msg);
+ }
+
+end:
+ api_free_array(args);
+ api_free_object(result);
+}
+
/*
* "abs(expr)" function
*/
-static void f_abs(typval_T *argvars, typval_T *rettv)
+static void f_abs(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (argvars[0].v_type == VAR_FLOAT) {
- float_op_wrapper(argvars, rettv, &fabs);
+ float_op_wrapper(argvars, rettv, (FunPtr)&fabs);
} else {
varnumber_T n;
int error = FALSE;
@@ -7403,17 +7458,9 @@ static void f_abs(typval_T *argvars, typval_T *rettv)
}
/*
- * "acos()" function
- */
-static void f_acos(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &acos);
-}
-
-/*
* "add(list, item)" function
*/
-static void f_add(typval_T *argvars, typval_T *rettv)
+static void f_add(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
@@ -7432,16 +7479,25 @@ static void f_add(typval_T *argvars, typval_T *rettv)
/*
* "and(expr, expr)" function
*/
-static void f_and(typval_T *argvars, typval_T *rettv)
+static void f_and(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
& get_tv_number_chk(&argvars[1], NULL);
}
+
+/// "api_info()" function
+static void f_api_info(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ Dictionary metadata = api_metadata();
+ (void)object_to_vim(DICTIONARY_OBJ(metadata), rettv, NULL);
+ api_free_dictionary(metadata);
+}
+
/*
* "append(lnum, string/list)" function
*/
-static void f_append(typval_T *argvars, typval_T *rettv)
+static void f_append(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
char_u *line;
@@ -7496,7 +7552,7 @@ static void f_append(typval_T *argvars, typval_T *rettv)
/*
* "argc()" function
*/
-static void f_argc(typval_T *argvars, typval_T *rettv)
+static void f_argc(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ARGCOUNT;
}
@@ -7504,41 +7560,25 @@ static void f_argc(typval_T *argvars, typval_T *rettv)
/*
* "argidx()" function
*/
-static void f_argidx(typval_T *argvars, typval_T *rettv)
+static void f_argidx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = curwin->w_arg_idx;
}
/// "arglistid" function
-static void f_arglistid(typval_T *argvars, typval_T *rettv)
+static void f_arglistid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
- if (argvars[0].v_type != VAR_UNKNOWN) {
- tabpage_T *tp = NULL;
- if (argvars[1].v_type != VAR_UNKNOWN) {
- long n = get_tv_number(&argvars[1]);
- if (n >= 0) {
- tp = find_tabpage(n);
- }
- } else {
- tp = curtab;
- }
-
- if (tp != NULL) {
- win_T *wp = find_win_by_nr(&argvars[0], tp);
- if (wp != NULL) {
- rettv->vval.v_number = wp->w_alist->id;
- }
- }
- } else {
- rettv->vval.v_number = curwin->w_alist->id;
+ win_T *wp = find_tabwin(&argvars[0], &argvars[1]);
+ if (wp != NULL) {
+ rettv->vval.v_number = wp->w_alist->id;
}
}
/*
* "argv(nr)" function
*/
-static void f_argv(typval_T *argvars, typval_T *rettv)
+static void f_argv(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int idx;
@@ -7581,7 +7621,7 @@ static void prepare_assert_error(garray_T *gap)
// Fill "gap" with information about an assert error.
static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
char_u *exp_str, typval_T *exp_tv,
- typval_T *got_tv)
+ typval_T *got_tv, assert_type_T atype)
{
char_u *tofree;
@@ -7590,7 +7630,11 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
ga_concat(gap, tofree);
xfree(tofree);
} else {
- ga_concat(gap, (char_u *)"Expected ");
+ if (atype == ASSERT_MATCH || atype == ASSERT_NOTMATCH) {
+ ga_concat(gap, (char_u *)"Pattern ");
+ } else {
+ ga_concat(gap, (char_u *)"Expected ");
+ }
if (exp_str == NULL) {
tofree = (char_u *) encode_tv2string(exp_tv, NULL);
ga_concat(gap, tofree);
@@ -7598,8 +7642,16 @@ static void fill_assert_error(garray_T *gap, typval_T *opt_msg_tv,
} else {
ga_concat(gap, exp_str);
}
- tofree = (char_u *) encode_tv2string(got_tv, NULL);
- ga_concat(gap, (char_u *)" but got ");
+ tofree = (char_u *)encode_tv2string(got_tv, NULL);
+ if (atype == ASSERT_MATCH) {
+ ga_concat(gap, (char_u *)" does not match ");
+ } else if (atype == ASSERT_NOTMATCH) {
+ ga_concat(gap, (char_u *)" does match ");
+ } else if (atype == ASSERT_NOTEQUAL) {
+ ga_concat(gap, (char_u *)" differs from ");
+ } else {
+ ga_concat(gap, (char_u *)" but got ");
+ }
ga_concat(gap, tofree);
xfree(tofree);
}
@@ -7618,22 +7670,34 @@ static void assert_error(garray_T *gap)
gap->ga_data, gap->ga_len);
}
-// "assert_equal(expected, actual[, msg])" function
-static void f_assert_equal(typval_T *argvars, typval_T *rettv)
+static void assert_equal_common(typval_T *argvars, assert_type_T atype)
{
garray_T ga;
- if (!tv_equal(&argvars[0], &argvars[1], false, false)) {
+ if (tv_equal(&argvars[0], &argvars[1], false, false)
+ != (atype == ASSERT_EQUAL)) {
prepare_assert_error(&ga);
fill_assert_error(&ga, &argvars[2], NULL,
- &argvars[0], &argvars[1]);
+ &argvars[0], &argvars[1], atype);
assert_error(&ga);
ga_clear(&ga);
}
}
+// "assert_equal(expected, actual[, msg])" function
+static void f_assert_equal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ assert_equal_common(argvars, ASSERT_EQUAL);
+}
+
+// "assert_notequal(expected, actual[, msg])" function
+static void f_assert_notequal(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ assert_equal_common(argvars, ASSERT_NOTEQUAL);
+}
+
/// "assert_exception(string[, msg])" function
-static void f_assert_exception(typval_T *argvars, typval_T *rettv)
+static void f_assert_exception(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
garray_T ga;
@@ -7643,15 +7707,53 @@ static void f_assert_exception(typval_T *argvars, typval_T *rettv)
ga_concat(&ga, (char_u *)"v:exception is not set");
assert_error(&ga);
ga_clear(&ga);
- } else if (strstr((char *)vimvars[VV_EXCEPTION].vv_str, error) == NULL) {
+ } else if (error != NULL
+ && strstr((char *)vimvars[VV_EXCEPTION].vv_str, error) == NULL) {
prepare_assert_error(&ga);
fill_assert_error(&ga, &argvars[1], NULL, &argvars[0],
- &vimvars[VV_EXCEPTION].vv_tv);
+ &vimvars[VV_EXCEPTION].vv_tv, ASSERT_OTHER);
assert_error(&ga);
ga_clear(&ga);
}
}
+/// "assert_fails(cmd [, error])" function
+static void f_assert_fails(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ char_u *cmd = get_tv_string_chk(&argvars[0]);
+ garray_T ga;
+
+ called_emsg = false;
+ suppress_errthrow = true;
+ emsg_silent = true;
+ do_cmdline_cmd((char *)cmd);
+ if (!called_emsg) {
+ prepare_assert_error(&ga);
+ ga_concat(&ga, (char_u *)"command did not fail: ");
+ ga_concat(&ga, cmd);
+ assert_error(&ga);
+ ga_clear(&ga);
+ } else if (argvars[1].v_type != VAR_UNKNOWN) {
+ char_u buf[NUMBUFLEN];
+ char *error = (char *)get_tv_string_buf_chk(&argvars[1], buf);
+
+ if (error == NULL
+ || strstr((char *)vimvars[VV_ERRMSG].vv_str, error) == NULL) {
+ prepare_assert_error(&ga);
+ fill_assert_error(&ga, &argvars[2], NULL, &argvars[1],
+ &vimvars[VV_ERRMSG].vv_tv, ASSERT_OTHER);
+ assert_error(&ga);
+ ga_clear(&ga);
+ }
+ }
+
+ called_emsg = false;
+ suppress_errthrow = false;
+ emsg_silent = false;
+ emsg_on_display = false;
+ set_vim_var_string(VV_ERRMSG, NULL, 0);
+}
+
// Common for assert_true() and assert_false().
static void assert_bool(typval_T *argvars, bool is_true)
{
@@ -7669,44 +7771,58 @@ static void assert_bool(typval_T *argvars, bool is_true)
prepare_assert_error(&ga);
fill_assert_error(&ga, &argvars[1],
(char_u *)(is_true ? "True" : "False"),
- NULL, &argvars[0]);
+ NULL, &argvars[0], ASSERT_OTHER);
assert_error(&ga);
ga_clear(&ga);
}
}
// "assert_false(actual[, msg])" function
-static void f_assert_false(typval_T *argvars, typval_T *rettv)
+static void f_assert_false(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
assert_bool(argvars, false);
}
-// "assert_true(actual[, msg])" function
-static void f_assert_true(typval_T *argvars, typval_T *rettv)
+static void assert_match_common(typval_T *argvars, assert_type_T atype)
{
- assert_bool(argvars, true);
+ char_u buf1[NUMBUFLEN];
+ char_u buf2[NUMBUFLEN];
+ char_u *pat = get_tv_string_buf_chk(&argvars[0], buf1);
+ char_u *text = get_tv_string_buf_chk(&argvars[1], buf2);
+
+ if (pat == NULL || text == NULL) {
+ EMSG(_(e_invarg));
+ } else if (pattern_match(pat, text, false) != (atype == ASSERT_MATCH)) {
+ garray_T ga;
+ prepare_assert_error(&ga);
+ fill_assert_error(&ga, &argvars[2], NULL, &argvars[0], &argvars[1], atype);
+ assert_error(&ga);
+ ga_clear(&ga);
+ }
}
-/*
- * "asin()" function
- */
-static void f_asin(typval_T *argvars, typval_T *rettv)
+/// "assert_match(pattern, actual[, msg])" function
+static void f_assert_match(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- float_op_wrapper(argvars, rettv, &asin);
+ assert_match_common(argvars, ASSERT_MATCH);
}
-/*
- * "atan()" function
- */
-static void f_atan(typval_T *argvars, typval_T *rettv)
+/// "assert_notmatch(pattern, actual[, msg])" function
+static void f_assert_notmatch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ assert_match_common(argvars, ASSERT_NOTMATCH);
+}
+
+// "assert_true(actual[, msg])" function
+static void f_assert_true(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- float_op_wrapper(argvars, rettv, &atan);
+ assert_bool(argvars, true);
}
/*
* "atan2()" function
*/
-static void f_atan2(typval_T *argvars, typval_T *rettv)
+static void f_atan2(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -7721,7 +7837,7 @@ static void f_atan2(typval_T *argvars, typval_T *rettv)
/*
* "browse(save, title, initdir, default)" function
*/
-static void f_browse(typval_T *argvars, typval_T *rettv)
+static void f_browse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = NULL;
rettv->v_type = VAR_STRING;
@@ -7730,9 +7846,9 @@ static void f_browse(typval_T *argvars, typval_T *rettv)
/*
* "browsedir(title, initdir)" function
*/
-static void f_browsedir(typval_T *argvars, typval_T *rettv)
+static void f_browsedir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- f_browse(argvars, rettv);
+ f_browse(argvars, rettv, NULL);
}
@@ -7768,7 +7884,7 @@ static buf_T *find_buffer(typval_T *avar)
/*
* "bufexists(expr)" function
*/
-static void f_bufexists(typval_T *argvars, typval_T *rettv)
+static void f_bufexists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (find_buffer(&argvars[0]) != NULL);
}
@@ -7776,7 +7892,7 @@ static void f_bufexists(typval_T *argvars, typval_T *rettv)
/*
* "buflisted(expr)" function
*/
-static void f_buflisted(typval_T *argvars, typval_T *rettv)
+static void f_buflisted(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7787,7 +7903,7 @@ static void f_buflisted(typval_T *argvars, typval_T *rettv)
/*
* "bufloaded(expr)" function
*/
-static void f_bufloaded(typval_T *argvars, typval_T *rettv)
+static void f_bufloaded(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7837,7 +7953,7 @@ static buf_T *get_buf_tv(typval_T *tv, int curtab_only)
/*
* "bufname(expr)" function
*/
-static void f_bufname(typval_T *argvars, typval_T *rettv)
+static void f_bufname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
@@ -7855,7 +7971,7 @@ static void f_bufname(typval_T *argvars, typval_T *rettv)
/*
* "bufnr(expr)" function
*/
-static void f_bufnr(typval_T *argvars, typval_T *rettv)
+static void f_bufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
int error = FALSE;
@@ -7882,32 +7998,53 @@ static void f_bufnr(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = -1;
}
-/*
- * "bufwinnr(nr)" function
- */
-static void f_bufwinnr(typval_T *argvars, typval_T *rettv)
+static void buf_win_common(typval_T *argvars, typval_T *rettv, bool get_nr)
{
- (void)get_tv_number(&argvars[0]); /* issue errmsg if type error */
- ++emsg_off;
+ int error = false;
+ (void)get_tv_number_chk(&argvars[0], &error); // issue errmsg if type error
+ if (error) { // the argument has an invalid type
+ rettv->vval.v_number = -1;
+ return;
+ }
+
+ emsg_off++;
+ buf_T *buf = get_buf_tv(&argvars[0], true);
+ if (buf == NULL) { // no need to search if buffer was not found
+ rettv->vval.v_number = -1;
+ goto end;
+ }
- buf_T *buf = get_buf_tv(&argvars[0], TRUE);
int winnr = 0;
+ int winid;
bool found_buf = false;
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- ++winnr;
+ winnr++;
if (wp->w_buffer == buf) {
found_buf = true;
+ winid = wp->handle;
break;
}
}
- rettv->vval.v_number = (found_buf ? winnr : -1);
- --emsg_off;
+ rettv->vval.v_number = (found_buf ? (get_nr ? winnr : winid) : -1);
+end:
+ emsg_off--;
+}
+
+/// "bufwinid(nr)" function
+static void f_bufwinid(typval_T *argvars, typval_T *rettv, FunPtr fptr) {
+ buf_win_common(argvars, rettv, false);
+}
+
+/// "bufwinnr(nr)" function
+static void f_bufwinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ buf_win_common(argvars, rettv, true);
}
/*
* "byte2line(byte)" function
*/
-static void f_byte2line(typval_T *argvars, typval_T *rettv)
+static void f_byte2line(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long boff = 0;
@@ -7946,7 +8083,7 @@ static void byteidx(typval_T *argvars, typval_T *rettv, int comp)
/*
* "byteidx()" function
*/
-static void f_byteidx(typval_T *argvars, typval_T *rettv)
+static void f_byteidx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
byteidx(argvars, rettv, FALSE);
}
@@ -7954,12 +8091,13 @@ static void f_byteidx(typval_T *argvars, typval_T *rettv)
/*
* "byteidxcomp()" function
*/
-static void f_byteidxcomp(typval_T *argvars, typval_T *rettv)
+static void f_byteidxcomp(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
byteidx(argvars, rettv, TRUE);
}
-int func_call(char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv)
+int func_call(char_u *name, typval_T *args, partial_T *partial,
+ dict_T *selfdict, typval_T *rettv)
{
listitem_T *item;
typval_T argv[MAX_FUNC_ARGS + 1];
@@ -7969,7 +8107,7 @@ int func_call(char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv)
for (item = args->vval.v_list->lv_first; item != NULL;
item = item->li_next) {
- if (argc == MAX_FUNC_ARGS) {
+ if (argc == MAX_FUNC_ARGS - (partial == NULL ? 0 : partial->pt_argc)) {
EMSG(_("E699: Too many arguments"));
break;
}
@@ -7979,10 +8117,11 @@ int func_call(char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv)
copy_tv(&item->li_tv, &argv[argc++]);
}
- if (item == NULL)
+ if (item == NULL) {
r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
- curwin->w_cursor.lnum, curwin->w_cursor.lnum,
- &dummy, TRUE, selfdict);
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &dummy, true, partial, selfdict);
+ }
/* Free the arguments. */
while (argc > 0)
@@ -7991,12 +8130,11 @@ int func_call(char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv)
return r;
}
-/*
- * "call(func, arglist)" function
- */
-static void f_call(typval_T *argvars, typval_T *rettv)
+/// "call(func, arglist [, dict])" function
+static void f_call(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *func;
+ partial_T *partial = NULL;
dict_T *selfdict = NULL;
if (argvars[1].v_type != VAR_LIST) {
@@ -8006,12 +8144,17 @@ static void f_call(typval_T *argvars, typval_T *rettv)
if (argvars[1].vval.v_list == NULL)
return;
- if (argvars[0].v_type == VAR_FUNC)
+ if (argvars[0].v_type == VAR_FUNC) {
func = argvars[0].vval.v_string;
- else
+ } else if (argvars[0].v_type == VAR_PARTIAL) {
+ partial = argvars[0].vval.v_partial;
+ func = partial->pt_name;
+ } else {
func = get_tv_string(&argvars[0]);
- if (*func == NUL)
- return; /* type error or empty name */
+ }
+ if (*func == NUL) {
+ return; // type error or empty name
+ }
if (argvars[2].v_type != VAR_UNKNOWN) {
if (argvars[2].v_type != VAR_DICT) {
@@ -8021,21 +8164,13 @@ static void f_call(typval_T *argvars, typval_T *rettv)
selfdict = argvars[2].vval.v_dict;
}
- (void)func_call(func, &argvars[1], selfdict, rettv);
-}
-
-/*
- * "ceil({float})" function
- */
-static void f_ceil(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &ceil);
+ func_call(func, &argvars[1], partial, selfdict, rettv);
}
/*
* "changenr()" function
*/
-static void f_changenr(typval_T *argvars, typval_T *rettv)
+static void f_changenr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = curbuf->b_u_seq_cur;
}
@@ -8043,7 +8178,7 @@ static void f_changenr(typval_T *argvars, typval_T *rettv)
/*
* "char2nr(string)" function
*/
-static void f_char2nr(typval_T *argvars, typval_T *rettv)
+static void f_char2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (has_mbyte) {
int utf8 = 0;
@@ -8062,7 +8197,7 @@ static void f_char2nr(typval_T *argvars, typval_T *rettv)
/*
* "cindent(lnum)" function
*/
-static void f_cindent(typval_T *argvars, typval_T *rettv)
+static void f_cindent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
linenr_T lnum;
@@ -8080,7 +8215,7 @@ static void f_cindent(typval_T *argvars, typval_T *rettv)
/*
* "clearmatches()" function
*/
-static void f_clearmatches(typval_T *argvars, typval_T *rettv)
+static void f_clearmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
clear_matches(curwin);
}
@@ -8088,7 +8223,7 @@ static void f_clearmatches(typval_T *argvars, typval_T *rettv)
/*
* "col(string)" function
*/
-static void f_col(typval_T *argvars, typval_T *rettv)
+static void f_col(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
colnr_T col = 0;
pos_T *fp;
@@ -8125,7 +8260,7 @@ static void f_col(typval_T *argvars, typval_T *rettv)
/*
* "complete()" function
*/
-static void f_complete(typval_T *argvars, typval_T *rettv)
+static void f_complete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int startcol;
@@ -8154,7 +8289,7 @@ static void f_complete(typval_T *argvars, typval_T *rettv)
/*
* "complete_add()" function
*/
-static void f_complete_add(typval_T *argvars, typval_T *rettv)
+static void f_complete_add(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ins_compl_add_tv(&argvars[0], 0);
}
@@ -8162,12 +8297,12 @@ static void f_complete_add(typval_T *argvars, typval_T *rettv)
/*
* "complete_check()" function
*/
-static void f_complete_check(typval_T *argvars, typval_T *rettv)
+static void f_complete_check(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int saved = RedrawingDisabled;
RedrawingDisabled = 0;
- ins_compl_check_keys(0);
+ ins_compl_check_keys(0, true);
rettv->vval.v_number = compl_interrupted;
RedrawingDisabled = saved;
}
@@ -8175,7 +8310,7 @@ static void f_complete_check(typval_T *argvars, typval_T *rettv)
/*
* "confirm(message, buttons[, default [, type]])" function
*/
-static void f_confirm(typval_T *argvars, typval_T *rettv)
+static void f_confirm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *message;
char_u *buttons = NULL;
@@ -8223,31 +8358,15 @@ static void f_confirm(typval_T *argvars, typval_T *rettv)
/*
* "copy()" function
*/
-static void f_copy(typval_T *argvars, typval_T *rettv)
+static void f_copy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
var_item_copy(NULL, &argvars[0], rettv, false, 0);
}
/*
- * "cos()" function
- */
-static void f_cos(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &cos);
-}
-
-/*
- * "cosh()" function
- */
-static void f_cosh(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &cosh);
-}
-
-/*
* "count()" function
*/
-static void f_count(typval_T *argvars, typval_T *rettv)
+static void f_count(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long n = 0;
int ic = FALSE;
@@ -8312,7 +8431,7 @@ static void f_count(typval_T *argvars, typval_T *rettv)
*
* Checks the existence of a cscope connection.
*/
-static void f_cscope_connection(typval_T *argvars, typval_T *rettv)
+static void f_cscope_connection(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int num = 0;
char_u *dbpath = NULL;
@@ -8336,7 +8455,7 @@ static void f_cscope_connection(typval_T *argvars, typval_T *rettv)
/// Moves the cursor to the specified line and column.
///
/// @returns 0 when the position could be set, -1 otherwise.
-static void f_cursor(typval_T *argvars, typval_T *rettv)
+static void f_cursor(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long line, col;
long coladd = 0;
@@ -8392,7 +8511,7 @@ static void f_cursor(typval_T *argvars, typval_T *rettv)
/*
* "deepcopy()" function
*/
-static void f_deepcopy(typval_T *argvars, typval_T *rettv)
+static void f_deepcopy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int noref = 0;
@@ -8408,7 +8527,7 @@ static void f_deepcopy(typval_T *argvars, typval_T *rettv)
}
// "delete()" function
-static void f_delete(typval_T *argvars, typval_T *rettv)
+static void f_delete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u nbuf[NUMBUFLEN];
char_u *name;
@@ -8446,7 +8565,7 @@ static void f_delete(typval_T *argvars, typval_T *rettv)
}
// dictwatcheradd(dict, key, funcref) function
-static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv)
+static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -8476,22 +8595,20 @@ static void f_dictwatcheradd(typval_T *argvars, typval_T *rettv)
return;
}
- ufunc_T *func = find_ufunc(argvars[2].vval.v_string);
- if (!func) {
- // Invalid function name. Error already reported by `find_ufunc`.
+ Callback callback;
+ if (!callback_from_typval(&callback, &argvars[2])) {
return;
}
- func->uf_refcount++;
DictWatcher *watcher = xmalloc(sizeof(DictWatcher));
watcher->key_pattern = xmemdupz(key_pattern, key_len);
- watcher->callback = func;
+ watcher->callback = callback;
watcher->busy = false;
QUEUE_INSERT_TAIL(&argvars[0].vval.v_dict->watchers, &watcher->node);
}
// dictwatcherdel(dict, key, funcref) function
-static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
+static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -8521,9 +8638,8 @@ static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
return;
}
- ufunc_T *func = find_ufunc(argvars[2].vval.v_string);
- if (!func) {
- // Invalid function name. Error already reported by `find_ufunc`.
+ Callback callback;
+ if (!callback_from_typval(&callback, &argvars[2])) {
return;
}
@@ -8533,13 +8649,15 @@ static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
bool matched = false;
QUEUE_FOREACH(w, &dict->watchers) {
watcher = dictwatcher_node_data(w);
- if (func == watcher->callback
+ if (callback_equal(&watcher->callback, &callback)
&& !strcmp(watcher->key_pattern, key_pattern)) {
matched = true;
break;
}
}
+ callback_free(&callback);
+
if (!matched) {
EMSG("Couldn't find a watcher matching key and callback");
return;
@@ -8552,7 +8670,7 @@ static void f_dictwatcherdel(typval_T *argvars, typval_T *rettv)
/*
* "did_filetype()" function
*/
-static void f_did_filetype(typval_T *argvars, typval_T *rettv)
+static void f_did_filetype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = did_filetype;
}
@@ -8560,7 +8678,7 @@ static void f_did_filetype(typval_T *argvars, typval_T *rettv)
/*
* "diff_filler()" function
*/
-static void f_diff_filler(typval_T *argvars, typval_T *rettv)
+static void f_diff_filler(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = diff_check_fill(curwin, get_tv_lnum(argvars));
}
@@ -8568,7 +8686,7 @@ static void f_diff_filler(typval_T *argvars, typval_T *rettv)
/*
* "diff_hlID()" function
*/
-static void f_diff_hlID(typval_T *argvars, typval_T *rettv)
+static void f_diff_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum = get_tv_lnum(argvars);
static linenr_T prev_lnum = 0;
@@ -8617,7 +8735,7 @@ static void f_diff_hlID(typval_T *argvars, typval_T *rettv)
/*
* "empty({expr})" function
*/
-static void f_empty(typval_T *argvars, typval_T *rettv)
+static void f_empty(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
bool n = true;
@@ -8627,6 +8745,9 @@ static void f_empty(typval_T *argvars, typval_T *rettv)
n = argvars[0].vval.v_string == NULL
|| *argvars[0].vval.v_string == NUL;
break;
+ case VAR_PARTIAL:
+ n = false;
+ break;
case VAR_NUMBER:
n = argvars[0].vval.v_number == 0;
break;
@@ -8655,7 +8776,7 @@ static void f_empty(typval_T *argvars, typval_T *rettv)
/*
* "escape({string}, {chars})" function
*/
-static void f_escape(typval_T *argvars, typval_T *rettv)
+static void f_escape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -8667,7 +8788,7 @@ static void f_escape(typval_T *argvars, typval_T *rettv)
/*
* "eval()" function
*/
-static void f_eval(typval_T *argvars, typval_T *rettv)
+static void f_eval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
@@ -8691,7 +8812,7 @@ static void f_eval(typval_T *argvars, typval_T *rettv)
/*
* "eventhandler()" function
*/
-static void f_eventhandler(typval_T *argvars, typval_T *rettv)
+static void f_eventhandler(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = vgetc_busy;
}
@@ -8699,7 +8820,7 @@ static void f_eventhandler(typval_T *argvars, typval_T *rettv)
/*
* "executable()" function
*/
-static void f_executable(typval_T *argvars, typval_T *rettv)
+static void f_executable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *name = get_tv_string(&argvars[0]);
@@ -8708,8 +8829,79 @@ static void f_executable(typval_T *argvars, typval_T *rettv)
|| (gettail_dir(name) != name && os_can_exe(name, NULL, false));
}
+static char_u * get_list_line(int c, void *cookie, int indent)
+{
+ listitem_T **p = (listitem_T **)cookie;
+ listitem_T *item = *p;
+ char_u buf[NUMBUFLEN];
+ char_u *s;
+
+ if (item == NULL) {
+ return NULL;
+ }
+ s = get_tv_string_buf_chk(&item->li_tv, buf);
+ *p = item->li_next;
+ return s == NULL ? NULL : vim_strsave(s);
+}
+
+// "execute(command)" function
+static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ int save_msg_silent = msg_silent;
+ int save_emsg_silent = emsg_silent;
+ bool save_emsg_noredir = emsg_noredir;
+ garray_T *save_capture_ga = capture_ga;
+
+ if (check_secure()) {
+ return;
+ }
+
+ if (argvars[1].v_type != VAR_UNKNOWN) {
+ char_u buf[NUMBUFLEN];
+ char_u *s = get_tv_string_buf_chk(&argvars[1], buf);
+
+ if (s == NULL) {
+ return;
+ }
+ if (STRNCMP(s, "silent", 6) == 0) {
+ msg_silent++;
+ }
+ if (STRCMP(s, "silent!") == 0) {
+ emsg_silent = true;
+ emsg_noredir = true;
+ }
+ } else {
+ msg_silent++;
+ }
+
+ garray_T capture_local;
+ ga_init(&capture_local, (int)sizeof(char), 80);
+ capture_ga = &capture_local;
+
+ if (argvars[0].v_type != VAR_LIST) {
+ do_cmdline_cmd((char *)get_tv_string(&argvars[0]));
+ } else if (argvars[0].vval.v_list != NULL) {
+ list_T *list = argvars[0].vval.v_list;
+ list->lv_refcount++;
+ listitem_T *item = list->lv_first;
+ do_cmdline(NULL, get_list_line, (void *)&item,
+ DOCMD_NOWAIT|DOCMD_VERBOSE|DOCMD_REPEAT|DOCMD_KEYTYPED);
+ list->lv_refcount--;
+ }
+ msg_silent = save_msg_silent;
+ emsg_silent = save_emsg_silent;
+ emsg_noredir = save_emsg_noredir;
+
+ ga_append(capture_ga, NUL);
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strsave(capture_ga->ga_data);
+ ga_clear(capture_ga);
+
+ capture_ga = save_capture_ga;
+}
+
/// "exepath()" function
-static void f_exepath(typval_T *argvars, typval_T *rettv)
+static void f_exepath(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *arg = get_tv_string(&argvars[0]);
char_u *path = NULL;
@@ -8723,7 +8915,7 @@ static void f_exepath(typval_T *argvars, typval_T *rettv)
/*
* "exists()" function
*/
-static void f_exists(typval_T *argvars, typval_T *rettv)
+static void f_exists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
char_u *name;
@@ -8784,17 +8976,9 @@ static void f_exists(typval_T *argvars, typval_T *rettv)
}
/*
- * "exp()" function
- */
-static void f_exp(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &exp);
-}
-
-/*
* "expand()" function
*/
-static void f_expand(typval_T *argvars, typval_T *rettv)
+static void f_expand(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
size_t len;
@@ -8923,7 +9107,7 @@ void dict_extend(dict_T *d1, dict_T *d2, char_u *action)
* "extend(list, list [, idx])" function
* "extend(dict, dict [, action])" function
*/
-static void f_extend(typval_T *argvars, typval_T *rettv)
+static void f_extend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *arg_errmsg = (char_u *)N_("extend() argument");
@@ -8995,7 +9179,7 @@ static void f_extend(typval_T *argvars, typval_T *rettv)
/*
* "feedkeys()" function
*/
-static void f_feedkeys(typval_T *argvars, typval_T *rettv)
+static void f_feedkeys(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *keys, *flags = NULL;
char_u nbuf[NUMBUFLEN];
@@ -9007,18 +9191,17 @@ static void f_feedkeys(typval_T *argvars, typval_T *rettv)
return;
keys = get_tv_string(&argvars[0]);
- if (*keys != NUL) {
- if (argvars[1].v_type != VAR_UNKNOWN) {
- flags = get_tv_string_buf(&argvars[1], nbuf);
- }
- vim_feedkeys(cstr_as_string((char *)keys),
- cstr_as_string((char *)flags), true);
+ if (argvars[1].v_type != VAR_UNKNOWN) {
+ flags = get_tv_string_buf(&argvars[1], nbuf);
}
+
+ nvim_feedkeys(cstr_as_string((char *)keys),
+ cstr_as_string((char *)flags), true);
}
/// "filereadable()" function
-static void f_filereadable(typval_T *argvars, typval_T *rettv)
+static void f_filereadable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = get_tv_string(&argvars[0]);
rettv->vval.v_number =
@@ -9029,7 +9212,7 @@ static void f_filereadable(typval_T *argvars, typval_T *rettv)
* Return 0 for not writable, 1 for writable file, 2 for a dir which we have
* rights to write into.
*/
-static void f_filewritable(typval_T *argvars, typval_T *rettv)
+static void f_filewritable(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *filename = (char *)get_tv_string(&argvars[0]);
rettv->vval.v_number = os_file_is_writable(filename);
@@ -9108,7 +9291,7 @@ static void filter_map(typval_T *argvars, typval_T *rettv, int map)
dict_T *d = NULL;
typval_T save_val;
typval_T save_key;
- int rem;
+ int rem = false;
int todo;
char_u *ermsg = (char_u *)(map ? "map()" : "filter()");
char_u *arg_errmsg = (char_u *)(map ? N_("map() argument")
@@ -9244,7 +9427,7 @@ theend:
/*
* "filter()" function
*/
-static void f_filter(typval_T *argvars, typval_T *rettv)
+static void f_filter(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
filter_map(argvars, rettv, FALSE);
}
@@ -9252,7 +9435,7 @@ static void f_filter(typval_T *argvars, typval_T *rettv)
/*
* "finddir({fname}[, {path}[, {count}]])" function
*/
-static void f_finddir(typval_T *argvars, typval_T *rettv)
+static void f_finddir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
findfilendir(argvars, rettv, FINDFILE_DIR);
}
@@ -9260,7 +9443,7 @@ static void f_finddir(typval_T *argvars, typval_T *rettv)
/*
* "findfile({fname}[, {path}[, {count}]])" function
*/
-static void f_findfile(typval_T *argvars, typval_T *rettv)
+static void f_findfile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
findfilendir(argvars, rettv, FINDFILE_FILE);
}
@@ -9268,7 +9451,7 @@ static void f_findfile(typval_T *argvars, typval_T *rettv)
/*
* "float2nr({float})" function
*/
-static void f_float2nr(typval_T *argvars, typval_T *rettv)
+static void f_float2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T f;
@@ -9283,17 +9466,9 @@ static void f_float2nr(typval_T *argvars, typval_T *rettv)
}
/*
- * "floor({float})" function
- */
-static void f_floor(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &floor);
-}
-
-/*
* "fmod()" function
*/
-static void f_fmod(typval_T *argvars, typval_T *rettv)
+static void f_fmod(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -9308,7 +9483,7 @@ static void f_fmod(typval_T *argvars, typval_T *rettv)
/*
* "fnameescape({string})" function
*/
-static void f_fnameescape(typval_T *argvars, typval_T *rettv)
+static void f_fnameescape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = vim_strsave_fnameescape(
get_tv_string(&argvars[0]), FALSE);
@@ -9318,7 +9493,7 @@ static void f_fnameescape(typval_T *argvars, typval_T *rettv)
/*
* "fnamemodify({fname}, {mods})" function
*/
-static void f_fnamemodify(typval_T *argvars, typval_T *rettv)
+static void f_fnamemodify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
char_u *mods;
@@ -9369,7 +9544,7 @@ static void foldclosed_both(typval_T *argvars, typval_T *rettv, int end)
/*
* "foldclosed()" function
*/
-static void f_foldclosed(typval_T *argvars, typval_T *rettv)
+static void f_foldclosed(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
foldclosed_both(argvars, rettv, FALSE);
}
@@ -9377,7 +9552,7 @@ static void f_foldclosed(typval_T *argvars, typval_T *rettv)
/*
* "foldclosedend()" function
*/
-static void f_foldclosedend(typval_T *argvars, typval_T *rettv)
+static void f_foldclosedend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
foldclosed_both(argvars, rettv, TRUE);
}
@@ -9385,7 +9560,7 @@ static void f_foldclosedend(typval_T *argvars, typval_T *rettv)
/*
* "foldlevel()" function
*/
-static void f_foldlevel(typval_T *argvars, typval_T *rettv)
+static void f_foldlevel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -9397,26 +9572,31 @@ static void f_foldlevel(typval_T *argvars, typval_T *rettv)
/*
* "foldtext()" function
*/
-static void f_foldtext(typval_T *argvars, typval_T *rettv)
+static void f_foldtext(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- linenr_T lnum;
+ linenr_T foldstart;
+ linenr_T foldend;
+ char_u *dashes;
+ linenr_T lnum;
char_u *s;
char_u *r;
- int len;
+ int len;
char *txt;
+ long count;
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
- if ((linenr_T)vimvars[VV_FOLDSTART].vv_nr > 0
- && (linenr_T)vimvars[VV_FOLDEND].vv_nr
- <= curbuf->b_ml.ml_line_count
- && vimvars[VV_FOLDDASHES].vv_str != NULL) {
+
+ foldstart = (linenr_T)get_vim_var_nr(VV_FOLDSTART);
+ foldend = (linenr_T)get_vim_var_nr(VV_FOLDEND);
+ dashes = get_vim_var_str(VV_FOLDDASHES);
+ if (foldstart > 0 && foldend <= curbuf->b_ml.ml_line_count
+ && dashes != NULL) {
/* Find first non-empty line in the fold. */
- lnum = (linenr_T)vimvars[VV_FOLDSTART].vv_nr;
- while (lnum < (linenr_T)vimvars[VV_FOLDEND].vv_nr) {
- if (!linewhite(lnum))
+ for (lnum = foldstart; lnum < foldend; ++lnum) {
+ if (!linewhite(lnum)) {
break;
- ++lnum;
+ }
}
/* Find interesting text in this line. */
@@ -9424,21 +9604,19 @@ static void f_foldtext(typval_T *argvars, typval_T *rettv)
/* skip C comment-start */
if (s[0] == '/' && (s[1] == '*' || s[1] == '/')) {
s = skipwhite(s + 2);
- if (*skipwhite(s) == NUL
- && lnum + 1 < (linenr_T)vimvars[VV_FOLDEND].vv_nr) {
+ if (*skipwhite(s) == NUL && lnum + 1 < foldend) {
s = skipwhite(ml_get(lnum + 1));
if (*s == '*')
s = skipwhite(s + 1);
}
}
+ count = (long)(foldend - foldstart + 1);
txt = _("+-%s%3ld lines: ");
r = xmalloc(STRLEN(txt)
- + STRLEN(vimvars[VV_FOLDDASHES].vv_str) // for %s
- + 20 // for %3ld
- + STRLEN(s)); // concatenated
- sprintf((char *)r, txt, vimvars[VV_FOLDDASHES].vv_str,
- (long)((linenr_T)vimvars[VV_FOLDEND].vv_nr
- - (linenr_T)vimvars[VV_FOLDSTART].vv_nr + 1));
+ + STRLEN(dashes) // for %s
+ + 20 // for %3ld
+ + STRLEN(s)); // concatenated
+ sprintf((char *)r, txt, dashes, count);
len = (int)STRLEN(r);
STRCAT(r, s);
/* remove 'foldmarker' and 'commentstring' */
@@ -9450,7 +9628,7 @@ static void f_foldtext(typval_T *argvars, typval_T *rettv)
/*
* "foldtextresult(lnum)" function
*/
-static void f_foldtextresult(typval_T *argvars, typval_T *rettv)
+static void f_foldtextresult(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
char_u *text;
@@ -9477,46 +9655,160 @@ static void f_foldtextresult(typval_T *argvars, typval_T *rettv)
/*
* "foreground()" function
*/
-static void f_foreground(typval_T *argvars, typval_T *rettv)
+static void f_foreground(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
}
/*
* "function()" function
*/
-static void f_function(typval_T *argvars, typval_T *rettv)
+static void f_function(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
+ char_u *name;
+ bool use_string = false;
+ partial_T *arg_pt = NULL;
+
+ if (argvars[0].v_type == VAR_FUNC) {
+ // function(MyFunc, [arg], dict)
+ s = argvars[0].vval.v_string;
+ } else if (argvars[0].v_type == VAR_PARTIAL
+ && argvars[0].vval.v_partial != NULL) {
+ // function(dict.MyFunc, [arg])
+ arg_pt = argvars[0].vval.v_partial;
+ s = arg_pt->pt_name;
+ } else {
+ // function('MyFunc', [arg], dict)
+ s = get_tv_string(&argvars[0]);
+ use_string = true;
+ }
- s = get_tv_string(&argvars[0]);
- if (s == NULL || *s == NUL || ascii_isdigit(*s))
+ if (s == NULL || *s == NUL || (use_string && ascii_isdigit(*s))) {
EMSG2(_(e_invarg2), s);
- /* Don't check an autoload name for existence here. */
- else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s))
+ } else if (use_string && vim_strchr(s, AUTOLOAD_CHAR) == NULL
+ && !function_exists(s)) {
+ // Don't check an autoload name for existence here.
EMSG2(_("E700: Unknown function: %s"), s);
- else {
+ } else {
+ int dict_idx = 0;
+ int arg_idx = 0;
+ list_T *list = NULL;
if (STRNCMP(s, "s:", 2) == 0 || STRNCMP(s, "<SID>", 5) == 0) {
char sid_buf[25];
int off = *s == 's' ? 2 : 5;
- /* Expand s: and <SID> into <SNR>nr_, so that the function can
- * also be called from another script. Using trans_function_name()
- * would also work, but some plugins depend on the name being
- * printable text. */
- sprintf(sid_buf, "<SNR>%" PRId64 "_", (int64_t)current_SID);
- rettv->vval.v_string = xmalloc(STRLEN(sid_buf) + STRLEN(s + off) + 1);
- STRCPY(rettv->vval.v_string, sid_buf);
- STRCAT(rettv->vval.v_string, s + off);
- } else
- rettv->vval.v_string = vim_strsave(s);
- rettv->v_type = VAR_FUNC;
+ // Expand s: and <SID> into <SNR>nr_, so that the function can
+ // also be called from another script. Using trans_function_name()
+ // would also work, but some plugins depend on the name being
+ // printable text.
+ snprintf(sid_buf, sizeof(sid_buf), "<SNR>%" PRId64 "_",
+ (int64_t)current_SID);
+ name = xmalloc(STRLEN(sid_buf) + STRLEN(s + off) + 1);
+ if (name != NULL) {
+ STRCPY(name, sid_buf);
+ STRCAT(name, s + off);
+ }
+ } else {
+ name = vim_strsave(s);
+ }
+
+ if (argvars[1].v_type != VAR_UNKNOWN) {
+ if (argvars[2].v_type != VAR_UNKNOWN) {
+ // function(name, [args], dict)
+ arg_idx = 1;
+ dict_idx = 2;
+ } else if (argvars[1].v_type == VAR_DICT) {
+ // function(name, dict)
+ dict_idx = 1;
+ } else {
+ // function(name, [args])
+ arg_idx = 1;
+ }
+ if (dict_idx > 0) {
+ if (argvars[dict_idx].v_type != VAR_DICT) {
+ EMSG(_("E922: expected a dict"));
+ xfree(name);
+ return;
+ }
+ if (argvars[dict_idx].vval.v_dict == NULL) {
+ dict_idx = 0;
+ }
+ }
+ if (arg_idx > 0) {
+ if (argvars[arg_idx].v_type != VAR_LIST) {
+ EMSG(_("E923: Second argument of function() must be "
+ "a list or a dict"));
+ xfree(name);
+ return;
+ }
+ list = argvars[arg_idx].vval.v_list;
+ if (list == NULL || list->lv_len == 0) {
+ arg_idx = 0;
+ }
+ }
+ }
+ if (dict_idx > 0 || arg_idx > 0 || arg_pt != NULL) {
+ partial_T *const pt = xcalloc(1, sizeof(*pt));
+
+ // result is a VAR_PARTIAL
+ if (arg_idx > 0 || (arg_pt != NULL && arg_pt->pt_argc > 0)) {
+ const int arg_len = (arg_pt == NULL ? 0 : arg_pt->pt_argc);
+ const int lv_len = (list == NULL ? 0 : list->lv_len);
+
+ pt->pt_argc = arg_len + lv_len;
+ pt->pt_argv = xmalloc(sizeof(pt->pt_argv[0]) * pt->pt_argc);
+ if (pt->pt_argv == NULL) {
+ xfree(pt);
+ xfree(name);
+ return;
+ } else {
+ int i = 0;
+ for (; i < arg_len; i++) {
+ copy_tv(&arg_pt->pt_argv[i], &pt->pt_argv[i]);
+ }
+ if (lv_len > 0) {
+ for (listitem_T *li = list->lv_first;
+ li != NULL;
+ li = li->li_next) {
+ copy_tv(&li->li_tv, &pt->pt_argv[i++]);
+ }
+ }
+ }
+ }
+
+ // For "function(dict.func, [], dict)" and "func" is a partial
+ // use "dict". That is backwards compatible.
+ if (dict_idx > 0) {
+ // The dict is bound explicitly, pt_auto is false
+ pt->pt_dict = argvars[dict_idx].vval.v_dict;
+ (pt->pt_dict->dv_refcount)++;
+ } else if (arg_pt != NULL) {
+ // If the dict was bound automatically the result is also
+ // bound automatically.
+ pt->pt_dict = arg_pt->pt_dict;
+ pt->pt_auto = arg_pt->pt_auto;
+ if (pt->pt_dict != NULL) {
+ (pt->pt_dict->dv_refcount)++;
+ }
+ }
+
+ pt->pt_refcount = 1;
+ pt->pt_name = name;
+ func_ref(pt->pt_name);
+
+ rettv->v_type = VAR_PARTIAL;
+ rettv->vval.v_partial = pt;
+ } else {
+ // result is a VAR_FUNC
+ rettv->v_type = VAR_FUNC;
+ rettv->vval.v_string = name;
+ func_ref(name);
+ }
}
}
-/*
- * "garbagecollect()" function
- */
-static void f_garbagecollect(typval_T *argvars, typval_T *rettv)
+/// "garbagecollect()" function
+static void f_garbagecollect(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
/* This is postponed until we are back at the toplevel, because we may be
* using Lists and Dicts internally. E.g.: ":echo [garbagecollect()]". */
@@ -9529,7 +9821,7 @@ static void f_garbagecollect(typval_T *argvars, typval_T *rettv)
/*
* "get()" function
*/
-static void f_get(typval_T *argvars, typval_T *rettv)
+static void f_get(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
listitem_T *li;
list_T *l;
@@ -9551,8 +9843,50 @@ static void f_get(typval_T *argvars, typval_T *rettv)
if (di != NULL)
tv = &di->di_tv;
}
- } else
+ } else if (argvars[0].v_type == VAR_PARTIAL
+ || argvars[0].v_type == VAR_FUNC) {
+ partial_T *pt;
+ partial_T fref_pt;
+
+ if (argvars[0].v_type == VAR_PARTIAL) {
+ pt = argvars[0].vval.v_partial;
+ } else {
+ memset(&fref_pt, 0, sizeof(fref_pt));
+ fref_pt.pt_name = argvars[0].vval.v_string;
+ pt = &fref_pt;
+ }
+
+ if (pt != NULL) {
+ char_u *what = get_tv_string(&argvars[1]);
+
+ if (STRCMP(what, "func") == 0 || STRCMP(what, "name") == 0) {
+ rettv->v_type = (*what == 'f' ? VAR_FUNC : VAR_STRING);
+ if (pt->pt_name != NULL) {
+ rettv->vval.v_string = vim_strsave(pt->pt_name);
+ }
+ } else if (STRCMP(what, "dict") == 0) {
+ rettv->v_type = VAR_DICT;
+ rettv->vval.v_dict = pt->pt_dict;
+ if (pt->pt_dict != NULL) {
+ (pt->pt_dict->dv_refcount)++;
+ }
+ } else if (STRCMP(what, "args") == 0) {
+ rettv->v_type = VAR_LIST;
+ if (rettv_list_alloc(rettv) != NULL) {
+ int i;
+
+ for (i = 0; i < pt->pt_argc; i++) {
+ list_append_tv(rettv->vval.v_list, &pt->pt_argv[i]);
+ }
+ }
+ } else {
+ EMSG2(_(e_invarg2), what);
+ }
+ return;
+ }
+ } else {
EMSG2(_(e_listdictarg), "get()");
+ }
if (tv == NULL) {
if (argvars[2].v_type != VAR_UNKNOWN)
@@ -9561,6 +9895,118 @@ static void f_get(typval_T *argvars, typval_T *rettv)
copy_tv(tv, rettv);
}
+/// Returns information about signs placed in a buffer as list of dicts.
+static void get_buffer_signs(buf_T *buf, list_T *l)
+{
+ for (signlist_T *sign = buf->b_signlist; sign; sign = sign->next) {
+ dict_T *d = dict_alloc();
+
+ dict_add_nr_str(d, "id", sign->id, NULL);
+ dict_add_nr_str(d, "lnum", sign->lnum, NULL);
+ dict_add_nr_str(d, "name", 0L, sign_typenr2name(sign->typenr));
+
+ list_append_dict(l, d);
+ }
+}
+
+/// Returns buffer options, variables and other attributes in a dictionary.
+static dict_T *get_buffer_info(buf_T *buf)
+{
+ dict_T *dict = dict_alloc();
+
+ dict_add_nr_str(dict, "bufnr", buf->b_fnum, NULL);
+ dict_add_nr_str(dict, "name", 0L,
+ buf->b_ffname != NULL ? buf->b_ffname : (char_u *)"");
+ dict_add_nr_str(dict, "lnum", buflist_findlnum(buf), NULL);
+ dict_add_nr_str(dict, "loaded", buf->b_ml.ml_mfp != NULL, NULL);
+ dict_add_nr_str(dict, "listed", buf->b_p_bl, NULL);
+ dict_add_nr_str(dict, "changed", bufIsChanged(buf), NULL);
+ dict_add_nr_str(dict, "changedtick", buf->b_changedtick, NULL);
+ dict_add_nr_str(dict, "hidden",
+ buf->b_ml.ml_mfp != NULL && buf->b_nwindows == 0,
+ NULL);
+
+ // Get a reference to buffer variables
+ dict_add_dict(dict, "variables", buf->b_vars);
+
+ // List of windows displaying this buffer
+ list_T *windows = list_alloc();
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp->w_buffer == buf) {
+ list_append_number(windows, (varnumber_T)wp->handle);
+ }
+ }
+ dict_add_list(dict, "windows", windows);
+
+ if (buf->b_signlist != NULL) {
+ // List of signs placed in this buffer
+ list_T *signs = list_alloc();
+ get_buffer_signs(buf, signs);
+ dict_add_list(dict, "signs", signs);
+ }
+
+ return dict;
+}
+
+/// "getbufinfo()" function
+static void f_getbufinfo(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ buf_T *argbuf = NULL;
+ bool filtered = false;
+ bool sel_buflisted = false;
+ bool sel_bufloaded = false;
+
+ rettv_list_alloc(rettv);
+
+ // List of all the buffers or selected buffers
+ if (argvars[0].v_type == VAR_DICT) {
+ dict_T *sel_d = argvars[0].vval.v_dict;
+
+ if (sel_d != NULL) {
+ dictitem_T *di;
+
+ filtered = true;
+
+ di = dict_find(sel_d, (char_u *)"buflisted", -1);
+ if (di != NULL && get_tv_number(&di->di_tv)) {
+ sel_buflisted = true;
+ }
+
+ di = dict_find(sel_d, (char_u *)"bufloaded", -1);
+ if (di != NULL && get_tv_number(&di->di_tv)) {
+ sel_bufloaded = true;
+ }
+ }
+ } else if (argvars[0].v_type != VAR_UNKNOWN) {
+ // Information about one buffer. Argument specifies the buffer
+ (void)get_tv_number(&argvars[0]); // issue errmsg if type error
+ emsg_off++;
+ argbuf = get_buf_tv(&argvars[0], false);
+ emsg_off--;
+ if (argbuf == NULL) {
+ return;
+ }
+ }
+
+ // Return information about all the buffers or a specified buffer
+ FOR_ALL_BUFFERS(buf) {
+ if (argbuf != NULL && argbuf != buf) {
+ continue;
+ }
+ if (filtered && ((sel_bufloaded && buf->b_ml.ml_mfp == NULL)
+ || (sel_buflisted && !buf->b_p_bl))) {
+ continue;
+ }
+
+ dict_T *d = get_buffer_info(buf);
+ if (d != NULL) {
+ list_append_dict(rettv->vval.v_list, d);
+ }
+ if (argbuf != NULL) {
+ return;
+ }
+ }
+}
/*
* Get line or list of lines from buffer "buf" into "rettv".
@@ -9605,7 +10051,7 @@ static void get_buffer_lines(buf_T *buf, linenr_T start, linenr_T end, int retli
/*
* "getbufline()" function
*/
-static void f_getbufline(typval_T *argvars, typval_T *rettv)
+static void f_getbufline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
linenr_T end;
@@ -9628,7 +10074,7 @@ static void f_getbufline(typval_T *argvars, typval_T *rettv)
/*
* "getbufvar()" function
*/
-static void f_getbufvar(typval_T *argvars, typval_T *rettv)
+static void f_getbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
buf_T *save_curbuf;
@@ -9649,13 +10095,25 @@ static void f_getbufvar(typval_T *argvars, typval_T *rettv)
save_curbuf = curbuf;
curbuf = buf;
- if (*varname == '&') { /* buffer-local-option */
- if (get_option_tv(&varname, rettv, TRUE) == OK)
- done = TRUE;
+ if (*varname == '&') { // buffer-local-option
+ if (varname[1] == NUL) {
+ // get all buffer-local options in a dict
+ dict_T *opts = get_winbuf_options(true);
+
+ if (opts != NULL) {
+ rettv->v_type = VAR_DICT;
+ rettv->vval.v_dict = opts;
+ opts->dv_refcount++;
+ done = true;
+ }
+ } else if (get_option_tv(&varname, rettv, true) == OK) {
+ // buffer-local-option
+ done = true;
+ }
} else if (STRCMP(varname, "changedtick") == 0) {
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = curbuf->b_changedtick;
- done = TRUE;
+ done = true;
} else {
/* Look up the variable. */
/* Let getbufvar({nr}, "") return the "b:" dictionary. */
@@ -9681,29 +10139,40 @@ static void f_getbufvar(typval_T *argvars, typval_T *rettv)
/*
* "getchar()" function
*/
-static void f_getchar(typval_T *argvars, typval_T *rettv)
+static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
varnumber_T n;
int error = FALSE;
- /* Position the cursor. Needed after a message that ends in a space. */
- ui_cursor_goto(msg_row, msg_col);
-
++no_mapping;
++allow_keys;
for (;; ) {
- if (argvars[0].v_type == VAR_UNKNOWN)
- /* getchar(): blocking wait. */
+ // Position the cursor. Needed after a message that ends in a space,
+ // or if event processing caused a redraw.
+ ui_cursor_goto(msg_row, msg_col);
+
+ if (argvars[0].v_type == VAR_UNKNOWN) {
+ // getchar(): blocking wait.
+ if (!(char_avail() || using_script() || input_available())) {
+ input_enable_events();
+ (void)os_inchar(NULL, 0, -1, 0);
+ input_disable_events();
+ if (!multiqueue_empty(main_loop.events)) {
+ multiqueue_process_events(main_loop.events);
+ continue;
+ }
+ }
n = safe_vgetc();
- else if (get_tv_number_chk(&argvars[0], &error) == 1)
- /* getchar(1): only check if char avail */
+ } else if (get_tv_number_chk(&argvars[0], &error) == 1) {
+ // getchar(1): only check if char avail
n = vpeekc_any();
- else if (error || vpeekc_any() == NUL)
- /* illegal argument or getchar(0) and no char avail: return zero */
+ } else if (error || vpeekc_any() == NUL) {
+ // illegal argument or getchar(0) and no char avail: return zero
n = 0;
- else
- /* getchar(0) and char avail: return char */
+ } else {
+ // getchar(0) and char avail: return char
n = safe_vgetc();
+ }
if (n == K_IGNORE)
continue;
@@ -9713,6 +10182,7 @@ static void f_getchar(typval_T *argvars, typval_T *rettv)
--allow_keys;
vimvars[VV_MOUSE_WIN].vv_nr = 0;
+ vimvars[VV_MOUSE_WINID].vv_nr = 0;
vimvars[VV_MOUSE_LNUM].vv_nr = 0;
vimvars[VV_MOUSE_COL].vv_nr = 0;
@@ -9755,6 +10225,7 @@ static void f_getchar(typval_T *argvars, typval_T *rettv)
for (wp = firstwin; wp != win; wp = wp->w_next)
++winnr;
vimvars[VV_MOUSE_WIN].vv_nr = winnr;
+ vimvars[VV_MOUSE_WINID].vv_nr = wp->handle;
vimvars[VV_MOUSE_LNUM].vv_nr = lnum;
vimvars[VV_MOUSE_COL].vv_nr = col + 1;
}
@@ -9765,7 +10236,7 @@ static void f_getchar(typval_T *argvars, typval_T *rettv)
/*
* "getcharmod()" function
*/
-static void f_getcharmod(typval_T *argvars, typval_T *rettv)
+static void f_getcharmod(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = mod_mask;
}
@@ -9773,7 +10244,7 @@ static void f_getcharmod(typval_T *argvars, typval_T *rettv)
/*
* "getcharsearch()" function
*/
-static void f_getcharsearch(typval_T *argvars, typval_T *rettv)
+static void f_getcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
@@ -9787,7 +10258,7 @@ static void f_getcharsearch(typval_T *argvars, typval_T *rettv)
/*
* "getcmdline()" function
*/
-static void f_getcmdline(typval_T *argvars, typval_T *rettv)
+static void f_getcmdline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = get_cmdline_str();
@@ -9796,7 +10267,7 @@ static void f_getcmdline(typval_T *argvars, typval_T *rettv)
/*
* "getcmdpos()" function
*/
-static void f_getcmdpos(typval_T *argvars, typval_T *rettv)
+static void f_getcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_cmdline_pos() + 1;
}
@@ -9804,7 +10275,7 @@ static void f_getcmdpos(typval_T *argvars, typval_T *rettv)
/*
* "getcmdtype()" function
*/
-static void f_getcmdtype(typval_T *argvars, typval_T *rettv)
+static void f_getcmdtype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = xmallocz(1);
@@ -9814,7 +10285,7 @@ static void f_getcmdtype(typval_T *argvars, typval_T *rettv)
/*
* "getcmdwintype()" function
*/
-static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)
+static void f_getcmdwintype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -9822,6 +10293,69 @@ static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)
rettv->vval.v_string[0] = cmdwin_type;
}
+// "getcompletion()" function
+static void f_getcompletion(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ char_u *pat;
+ expand_T xpc;
+ bool filtered = false;
+ int options = WILD_SILENT | WILD_USE_NL | WILD_ADD_SLASH
+ | WILD_NO_BEEP;
+
+ if (argvars[2].v_type != VAR_UNKNOWN) {
+ filtered = get_tv_number_chk(&argvars[2], NULL);
+ }
+
+ if (p_wic) {
+ options |= WILD_ICASE;
+ }
+
+ // For filtered results, 'wildignore' is used
+ if (!filtered) {
+ options |= WILD_KEEP_ALL;
+ }
+
+ ExpandInit(&xpc);
+ xpc.xp_pattern = get_tv_string(&argvars[0]);
+ xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
+ xpc.xp_context = cmdcomplete_str_to_type(get_tv_string(&argvars[1]));
+ if (xpc.xp_context == EXPAND_NOTHING) {
+ if (argvars[1].v_type == VAR_STRING) {
+ EMSG2(_(e_invarg2), argvars[1].vval.v_string);
+ } else {
+ EMSG(_(e_invarg));
+ }
+ return;
+ }
+
+ if (xpc.xp_context == EXPAND_MENUS) {
+ set_context_in_menu_cmd(&xpc, (char_u *)"menu", xpc.xp_pattern, false);
+ xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
+ }
+
+ if (xpc.xp_context == EXPAND_CSCOPE) {
+ set_context_in_cscope_cmd(&xpc, xpc.xp_pattern, CMD_cscope);
+ xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
+ }
+
+ if (xpc.xp_context == EXPAND_SIGN) {
+ set_context_in_sign_cmd(&xpc, xpc.xp_pattern);
+ xpc.xp_pattern_len = STRLEN(xpc.xp_pattern);
+ }
+
+ pat = addstar(xpc.xp_pattern, xpc.xp_pattern_len, xpc.xp_context);
+ rettv_list_alloc(rettv);
+ if (pat != NULL) {
+ ExpandOne(&xpc, pat, NULL, options, WILD_ALL_KEEP);
+
+ for (int i = 0; i < xpc.xp_numfiles; i++) {
+ list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
+ }
+ }
+ xfree(pat);
+ ExpandCleanup(&xpc);
+}
+
/// `getcwd([{win}[, {tab}]])` function
///
/// Every scope not specified implies the currently selected scope object.
@@ -9831,10 +10365,10 @@ static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)
/// @pre An argument may not be -1 if preceding arguments are not all -1.
///
/// @post The return value will be a string.
-static void f_getcwd(typval_T *argvars, typval_T *rettv)
+static void f_getcwd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Possible scope of working directory to return.
- CdScope scope = MIN_CD_SCOPE;
+ CdScope scope = kCdScopeInvalid;
// Numbers of the scope objects (window, tab) we want the working directory
// of. A `-1` means to skip this scope, a `0` means the current object.
@@ -9863,26 +10397,27 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
return;
}
scope_number[i] = argvars[i].vval.v_number;
- // The scope is the current iteration step.
- scope = i;
// It is an error for the scope number to be less than `-1`.
if (scope_number[i] < -1) {
EMSG(_(e_invarg));
return;
}
+ // Use the narrowest scope the user requested
+ if (scope_number[i] >= 0 && scope == kCdScopeInvalid) {
+ // The scope is the current iteration step.
+ scope = i;
+ } else if (scope_number[i] < 0) {
+ scope = i + 1;
+ }
}
- // Normalize scope, the number of the new scope will be 0.
- if (scope_number[scope] < 0) {
- // Arguments to `getcwd` always end at second-highest scope, so scope will
- // always be <= `MAX_CD_SCOPE`.
- scope++;
+ // If the user didn't specify anything, default to window scope
+ if (scope == kCdScopeInvalid) {
+ scope = MIN_CD_SCOPE;
}
// Find the tabpage by number
- if (scope_number[kCdScopeTab] == -1) {
- tp = NULL;
- } else if (scope_number[kCdScopeTab] > 0) {
+ if (scope_number[kCdScopeTab] > 0) {
tp = find_tabpage(scope_number[kCdScopeTab]);
if (!tp) {
EMSG(_("E5000: Cannot find tab number."));
@@ -9891,16 +10426,14 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
}
// Find the window in `tp` by number, `NULL` if none.
- if (scope_number[kCdScopeWindow] == -1) {
- win = NULL;
- } else if (scope_number[kCdScopeWindow] >= 0) {
- if (!tp) {
+ if (scope_number[kCdScopeWindow] >= 0) {
+ if (scope_number[kCdScopeTab] < 0) {
EMSG(_("E5001: Higher scope cannot be -1 if lower scope is >= 0."));
return;
}
if (scope_number[kCdScopeWindow] > 0) {
- win = find_win_by_nr(&argvars[0], curtab);
+ win = find_win_by_nr(&argvars[0], tp);
if (!win) {
EMSG(_("E5002: Cannot find window number."));
return;
@@ -9917,24 +10450,21 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
if (from) {
break;
}
- case kCdScopeTab: // FALLTHROUGH
+ case kCdScopeTab: // FALLTHROUGH
assert(tp);
from = tp->localdir;
if (from) {
break;
}
- case kCdScopeGlobal: // FALLTHROUGH
- // The `globaldir` variable is not always set.
- if (globaldir) {
+ case kCdScopeGlobal: // FALLTHROUGH
+ if (globaldir) { // `globaldir` is not always set.
from = globaldir;
- } else {
- // We have to copy the OS path directly into output string.
- if (os_dirname(cwd, MAXPATHL) == FAIL) {
- EMSG(_("E41: Could not display path."));
- goto end;
- }
+ } else if (os_dirname(cwd, MAXPATHL) == FAIL) { // Get the OS CWD.
+ from = (char_u *)""; // Return empty string on failure.
}
break;
+ case kCdScopeInvalid: // We should never get here
+ assert(false);
}
if (from) {
@@ -9945,14 +10475,14 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)
#ifdef BACKSLASH_IN_FILENAME
slash_adjust(rettv->vval.v_string);
#endif
-end:
+
xfree(cwd);
}
/*
* "getfontname()" function
*/
-static void f_getfontname(typval_T *argvars, typval_T *rettv)
+static void f_getfontname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -9961,7 +10491,7 @@ static void f_getfontname(typval_T *argvars, typval_T *rettv)
/*
* "getfperm({fname})" function
*/
-static void f_getfperm(typval_T *argvars, typval_T *rettv)
+static void f_getfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *perm = NULL;
char_u flags[] = "rwx";
@@ -9982,7 +10512,7 @@ static void f_getfperm(typval_T *argvars, typval_T *rettv)
/*
* "getfsize({fname})" function
*/
-static void f_getfsize(typval_T *argvars, typval_T *rettv)
+static void f_getfsize(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *fname = (char *)get_tv_string(&argvars[0]);
@@ -10009,7 +10539,7 @@ static void f_getfsize(typval_T *argvars, typval_T *rettv)
/*
* "getftime({fname})" function
*/
-static void f_getftime(typval_T *argvars, typval_T *rettv)
+static void f_getftime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char *fname = (char *)get_tv_string(&argvars[0]);
@@ -10024,7 +10554,7 @@ static void f_getftime(typval_T *argvars, typval_T *rettv)
/*
* "getftype({fname})" function
*/
-static void f_getftype(typval_T *argvars, typval_T *rettv)
+static void f_getftype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
char_u *type = NULL;
@@ -10100,7 +10630,7 @@ static void f_getftype(typval_T *argvars, typval_T *rettv)
/*
* "getline(lnum, [end])" function
*/
-static void f_getline(typval_T *argvars, typval_T *rettv)
+static void f_getline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
linenr_T end;
@@ -10121,7 +10651,7 @@ static void f_getline(typval_T *argvars, typval_T *rettv)
/*
* "getmatches()" function
*/
-static void f_getmatches(typval_T *argvars, typval_T *rettv)
+static void f_getmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
matchitem_T *cur = curwin->w_match_head;
int i;
@@ -10170,7 +10700,7 @@ static void f_getmatches(typval_T *argvars, typval_T *rettv)
/*
* "getpid()" function
*/
-static void f_getpid(typval_T *argvars, typval_T *rettv)
+static void f_getpid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = os_get_pid();
}
@@ -10206,7 +10736,7 @@ static void getpos_both(typval_T *argvars, typval_T *rettv, bool getcurpos)
/*
* "getcurpos(string)" function
*/
-static void f_getcurpos(typval_T *argvars, typval_T *rettv)
+static void f_getcurpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getpos_both(argvars, rettv, true);
}
@@ -10214,7 +10744,7 @@ static void f_getcurpos(typval_T *argvars, typval_T *rettv)
/*
* "getpos(string)" function
*/
-static void f_getpos(typval_T *argvars, typval_T *rettv)
+static void f_getpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getpos_both(argvars, rettv, false);
}
@@ -10222,7 +10752,7 @@ static void f_getpos(typval_T *argvars, typval_T *rettv)
/*
* "getqflist()" and "getloclist()" functions
*/
-static void f_getqflist(typval_T *argvars, typval_T *rettv)
+static void f_getqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_list_alloc(rettv);
win_T *wp = NULL;
@@ -10236,7 +10766,7 @@ static void f_getqflist(typval_T *argvars, typval_T *rettv)
}
/// "getreg()" function
-static void f_getreg(typval_T *argvars, typval_T *rettv)
+static void f_getreg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *strregname;
int regname;
@@ -10282,7 +10812,7 @@ static void f_getreg(typval_T *argvars, typval_T *rettv)
/*
* "getregtype()" function
*/
-static void f_getregtype(typval_T *argvars, typval_T *rettv)
+static void f_getregtype(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *strregname;
int regname;
@@ -10311,10 +10841,62 @@ static void f_getregtype(typval_T *argvars, typval_T *rettv)
rettv->vval.v_string = (char_u *)xstrdup(buf);
}
+/// Returns information (variables, options, etc.) about a tab page
+/// as a dictionary.
+static dict_T *get_tabpage_info(tabpage_T *tp, int tp_idx)
+{
+ dict_T *dict = dict_alloc();
+
+ dict_add_nr_str(dict, "tabnr", tp_idx, NULL);
+
+ list_T *l = list_alloc();
+ FOR_ALL_WINDOWS_IN_TAB(wp, tp) {
+ list_append_number(l, (varnumber_T)wp->handle);
+ }
+ dict_add_list(dict, "windows", l);
+
+ // Make a reference to tabpage variables
+ dict_add_dict(dict, "variables", tp->tp_vars);
+
+ return dict;
+}
+
+/// "gettabinfo()" function
+static void f_gettabinfo(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ tabpage_T *tparg = NULL;
+
+ rettv_list_alloc(rettv);
+
+ if (argvars[0].v_type != VAR_UNKNOWN) {
+ // Information about one tab page
+ tparg = find_tabpage((int)get_tv_number_chk(&argvars[0], NULL));
+ if (tparg == NULL) {
+ return;
+ }
+ }
+
+ // Get information about a specific tab page or all tab pages
+ int tpnr = 0;
+ FOR_ALL_TABS(tp) {
+ tpnr++;
+ if (tparg != NULL && tp != tparg) {
+ continue;
+ }
+ dict_T *d = get_tabpage_info(tp, tpnr);
+ if (d != NULL) {
+ list_append_dict(rettv->vval.v_list, d);
+ }
+ if (tparg != NULL) {
+ return;
+ }
+ }
+}
+
/*
* "gettabvar()" function
*/
-static void f_gettabvar(typval_T *argvars, typval_T *rettv)
+static void f_gettabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *oldcurwin;
tabpage_T *tp, *oldtabpage;
@@ -10353,15 +10935,75 @@ static void f_gettabvar(typval_T *argvars, typval_T *rettv)
/*
* "gettabwinvar()" function
*/
-static void f_gettabwinvar(typval_T *argvars, typval_T *rettv)
+static void f_gettabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getwinvar(argvars, rettv, 1);
}
+/// Returns information about a window as a dictionary.
+static dict_T *get_win_info(win_T *wp, int16_t tpnr, int16_t winnr)
+{
+ dict_T *dict = dict_alloc();
+
+ dict_add_nr_str(dict, "tabnr", tpnr, NULL);
+ dict_add_nr_str(dict, "winnr", winnr, NULL);
+ dict_add_nr_str(dict, "winid", wp->handle, NULL);
+ dict_add_nr_str(dict, "height", wp->w_height, NULL);
+ dict_add_nr_str(dict, "width", wp->w_width, NULL);
+ dict_add_nr_str(dict, "bufnr", wp->w_buffer->b_fnum, NULL);
+
+ dict_add_nr_str(dict, "quickfix", bt_quickfix(wp->w_buffer), NULL);
+ dict_add_nr_str(dict, "loclist",
+ (bt_quickfix(wp->w_buffer) && wp->w_llist_ref != NULL),
+ NULL);
+
+ // Add a reference to window variables
+ dict_add_dict(dict, "variables", wp->w_vars);
+
+ return dict;
+}
+
+/// "getwininfo()" function
+static void f_getwininfo(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ win_T *wparg = NULL;
+
+ rettv_list_alloc(rettv);
+
+ if (argvars[0].v_type != VAR_UNKNOWN) {
+ wparg = win_id2wp(argvars);
+ if (wparg == NULL) {
+ return;
+ }
+ }
+
+ // Collect information about either all the windows across all the tab
+ // pages or one particular window.
+ int16_t tabnr = 0;
+ FOR_ALL_TABS(tp) {
+ tabnr++;
+ int16_t winnr = 0;
+ FOR_ALL_WINDOWS_IN_TAB(wp, tp) {
+ if (wparg != NULL && wp != wparg) {
+ continue;
+ }
+ winnr++;
+ dict_T *d = get_win_info(wp, tabnr, winnr);
+ if (d != NULL) {
+ list_append_dict(rettv->vval.v_list, d);
+ }
+ if (wparg != NULL) {
+ // found information about a specific window
+ return;
+ }
+ }
+ }
+}
+
/*
* "getwinposx()" function
*/
-static void f_getwinposx(typval_T *argvars, typval_T *rettv)
+static void f_getwinposx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
}
@@ -10369,7 +11011,7 @@ static void f_getwinposx(typval_T *argvars, typval_T *rettv)
/*
* "getwinposy()" function
*/
-static void f_getwinposy(typval_T *argvars, typval_T *rettv)
+static void f_getwinposy(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
}
@@ -10399,17 +11041,45 @@ find_win_by_nr (
}
FOR_ALL_WINDOWS_IN_TAB(wp, tp) {
- if (--nr <= 0) {
+ if (nr >= LOWEST_WIN_ID) {
+ if (wp->handle == nr) {
+ return wp;
+ }
+ } else if (--nr <= 0) {
return wp;
}
}
return NULL;
}
-/*
- * "getwinvar()" function
- */
-static void f_getwinvar(typval_T *argvars, typval_T *rettv)
+/// Find window specified by "wvp" in tabpage "tvp".
+static win_T *find_tabwin(typval_T *wvp, typval_T *tvp)
+{
+ win_T *wp = NULL;
+ tabpage_T *tp = NULL;
+
+ if (wvp->v_type != VAR_UNKNOWN) {
+ if (tvp->v_type != VAR_UNKNOWN) {
+ long n = get_tv_number(tvp);
+ if (n >= 0) {
+ tp = find_tabpage(n);
+ }
+ } else {
+ tp = curtab;
+ }
+
+ if (tp != NULL) {
+ wp = find_win_by_nr(wvp, tp);
+ }
+ } else {
+ wp = curwin;
+ }
+
+ return wp;
+}
+
+/// "getwinvar()" function
+static void f_getwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
getwinvar(argvars, rettv, 0);
}
@@ -10449,8 +11119,19 @@ getwinvar (
bool need_switch_win = tp != curtab || win != curwin;
if (!need_switch_win
|| switch_win(&oldcurwin, &oldtabpage, win, tp, true) == OK) {
- if (*varname == '&') { // window-local-option
- if (get_option_tv(&varname, rettv, 1) == OK) {
+ if (*varname == '&') {
+ if (varname[1] == NUL) {
+ // get all window-local options in a dict
+ dict_T *opts = get_winbuf_options(false);
+
+ if (opts != NULL) {
+ rettv->v_type = VAR_DICT;
+ rettv->vval.v_dict = opts;
+ opts->dv_refcount++;
+ done = true;
+ }
+ } else if (get_option_tv(&varname, rettv, 1) == OK) {
+ // window-local-option
done = true;
}
} else {
@@ -10480,7 +11161,7 @@ getwinvar (
/*
* "glob()" function
*/
-static void f_glob(typval_T *argvars, typval_T *rettv)
+static void f_glob(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int options = WILD_SILENT|WILD_USE_NL;
expand_T xpc;
@@ -10524,7 +11205,7 @@ static void f_glob(typval_T *argvars, typval_T *rettv)
}
/// "globpath()" function
-static void f_globpath(typval_T *argvars, typval_T *rettv)
+static void f_globpath(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int flags = 0; // Flags for globpath.
int error = false;
@@ -10575,7 +11256,7 @@ static void f_globpath(typval_T *argvars, typval_T *rettv)
}
// "glob2regpat()" function
-static void f_glob2regpat(typval_T *argvars, typval_T *rettv)
+static void f_glob2regpat(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *pat = get_tv_string_chk(&argvars[0]); // NULL on type error
@@ -10585,16 +11266,10 @@ static void f_glob2regpat(typval_T *argvars, typval_T *rettv)
: file_pat_to_reg_pat(pat, NULL, NULL, false);
}
-/*
- * "has()" function
- */
-static void f_has(typval_T *argvars, typval_T *rettv)
+/// "has()" function
+static void f_has(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- int i;
- char_u *name;
- int n = FALSE;
- static char *(has_list[]) =
- {
+ static char *(has_list[]) = {
#ifdef UNIX
"unix",
#endif
@@ -10661,6 +11336,7 @@ static void f_has(typval_T *argvars, typval_T *rettv)
"mouse",
"multi_byte",
"multi_lang",
+ "packages",
"path_extra",
"persistent_undo",
"postscript",
@@ -10688,6 +11364,7 @@ static void f_has(typval_T *argvars, typval_T *rettv)
"termguicolors",
"termresponse",
"textobjects",
+ "timers",
"title",
"user-commands", /* was accidentally included in 5.4 */
"user_commands",
@@ -10705,36 +11382,42 @@ static void f_has(typval_T *argvars, typval_T *rettv)
NULL
};
- name = get_tv_string(&argvars[0]);
- for (i = 0; has_list[i] != NULL; ++i)
+ bool n = false;
+ char *name = (char *)get_tv_string(&argvars[0]);
+
+ for (int i = 0; has_list[i] != NULL; i++) {
if (STRICMP(name, has_list[i]) == 0) {
- n = TRUE;
+ n = true;
break;
}
+ }
- if (n == FALSE) {
+ if (!n) {
if (STRNICMP(name, "patch", 5) == 0) {
if (name[5] == '-'
- && STRLEN(name) > 11
+ && strlen(name) >= 11
&& ascii_isdigit(name[6])
&& ascii_isdigit(name[8])
&& ascii_isdigit(name[10])) {
- int major = atoi((char *)name + 6);
- int minor = atoi((char *)name + 8);
+ int major = atoi(name + 6);
+ int minor = atoi(name + 8);
// Expect "patch-9.9.01234".
n = (major < VIM_VERSION_MAJOR
|| (major == VIM_VERSION_MAJOR
&& (minor < VIM_VERSION_MINOR
|| (minor == VIM_VERSION_MINOR
- && has_patch(atoi((char *)name + 10))))));
+ && has_vim_patch(atoi(name + 10))))));
} else {
- n = has_patch(atoi((char *)name + 5));
+ n = has_vim_patch(atoi(name + 5));
}
+ } else if (STRNICMP(name, "nvim-", 5) == 0) {
+ // Expect "nvim-x.y.z"
+ n = has_nvim_version(name + 5);
} else if (STRICMP(name, "vim_starting") == 0) {
n = (starting != 0);
} else if (STRICMP(name, "multi_byte_encoding") == 0) {
- n = has_mbyte;
+ n = has_mbyte != 0;
#if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
} else if (STRICMP(name, "iconv") == 0) {
n = iconv_enabled(false);
@@ -10744,8 +11427,8 @@ static void f_has(typval_T *argvars, typval_T *rettv)
}
}
- if (n == FALSE && eval_has_provider((char *)name)) {
- n = TRUE;
+ if (!n && eval_has_provider(name)) {
+ n = true;
}
rettv->vval.v_number = n;
@@ -10754,7 +11437,7 @@ static void f_has(typval_T *argvars, typval_T *rettv)
/*
* "has_key()" function
*/
-static void f_has_key(typval_T *argvars, typval_T *rettv)
+static void f_has_key(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (argvars[0].v_type != VAR_DICT) {
EMSG(_(e_dictreq));
@@ -10778,10 +11461,10 @@ static void f_has_key(typval_T *argvars, typval_T *rettv)
/// @pre An argument may not be -1 if preceding arguments are not all -1.
///
/// @post The return value will be either the number `1` or `0`.
-static void f_haslocaldir(typval_T *argvars, typval_T *rettv)
+static void f_haslocaldir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Possible scope of working directory to return.
- CdScope scope = MIN_CD_SCOPE;
+ CdScope scope = kCdScopeInvalid;
// Numbers of the scope objects (window, tab) we want the working directory
// of. A `-1` means to skip this scope, a `0` means the current object.
@@ -10806,43 +11489,42 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)
return;
}
scope_number[i] = argvars[i].vval.v_number;
- // The scope is the current iteration step.
- scope = i;
if (scope_number[i] < -1) {
EMSG(_(e_invarg));
return;
}
+ // Use the narrowest scope the user requested
+ if (scope_number[i] >= 0 && scope == kCdScopeInvalid) {
+ // The scope is the current iteration step.
+ scope = i;
+ } else if (scope_number[i] < 0) {
+ scope = i + 1;
+ }
}
- // Normalize scope, the number of the new scope will be 0.
- if (scope_number[scope] < 0) {
- // Arguments to `haslocaldir` always end at second-highest scope, so scope
- // will always be <= `MAX_CD_SCOPE`.
- scope++;
+ // If the user didn't specify anything, default to window scope
+ if (scope == kCdScopeInvalid) {
+ scope = MIN_CD_SCOPE;
}
// Find the tabpage by number
- if (scope_number[kCdScopeTab] == -1) {
- tp = NULL;
- } else if (scope_number[kCdScopeTab] > 0) {
+ if (scope_number[kCdScopeTab] > 0) {
tp = find_tabpage(scope_number[kCdScopeTab]);
if (!tp) {
- EMSG(_("5000: Cannot find tab number."));
+ EMSG(_("E5000: Cannot find tab number."));
return;
}
}
// Find the window in `tp` by number, `NULL` if none.
- if (scope_number[kCdScopeWindow] == -1) {
- win = NULL;
- } else if (scope_number[kCdScopeWindow] >= 0) {
- if (!tp) {
+ if (scope_number[kCdScopeWindow] >= 0) {
+ if (scope_number[kCdScopeTab] < 0) {
EMSG(_("E5001: Higher scope cannot be -1 if lower scope is >= 0."));
return;
}
if (scope_number[kCdScopeWindow] > 0) {
- win = find_win_by_nr(&argvars[0], curtab);
+ win = find_win_by_nr(&argvars[0], tp);
if (!win) {
EMSG(_("E5002: Cannot find window number."));
return;
@@ -10863,13 +11545,16 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)
// The global scope never has a local directory
rettv->vval.v_number = 0;
break;
+ case kCdScopeInvalid:
+ // We should never get here
+ assert(false);
}
}
/*
* "hasmapto()" function
*/
-static void f_hasmapto(typval_T *argvars, typval_T *rettv)
+static void f_hasmapto(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *name;
char_u *mode;
@@ -10894,7 +11579,7 @@ static void f_hasmapto(typval_T *argvars, typval_T *rettv)
/*
* "histadd()" function
*/
-static void f_histadd(typval_T *argvars, typval_T *rettv)
+static void f_histadd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
HistoryType histype;
char_u *str;
@@ -10920,7 +11605,7 @@ static void f_histadd(typval_T *argvars, typval_T *rettv)
/*
* "histdel()" function
*/
-static void f_histdel(typval_T *argvars, typval_T *rettv)
+static void f_histdel(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n;
char_u buf[NUMBUFLEN];
@@ -10947,7 +11632,7 @@ static void f_histdel(typval_T *argvars, typval_T *rettv)
/*
* "histget()" function
*/
-static void f_histget(typval_T *argvars, typval_T *rettv)
+static void f_histget(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
HistoryType type;
int idx;
@@ -10972,7 +11657,7 @@ static void f_histget(typval_T *argvars, typval_T *rettv)
/*
* "histnr()" function
*/
-static void f_histnr(typval_T *argvars, typval_T *rettv)
+static void f_histnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int i;
@@ -10991,7 +11676,7 @@ static void f_histnr(typval_T *argvars, typval_T *rettv)
/*
* "highlightID(name)" function
*/
-static void f_hlID(typval_T *argvars, typval_T *rettv)
+static void f_hlID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = syn_name2id(get_tv_string(&argvars[0]));
}
@@ -10999,7 +11684,7 @@ static void f_hlID(typval_T *argvars, typval_T *rettv)
/*
* "highlight_exists()" function
*/
-static void f_hlexists(typval_T *argvars, typval_T *rettv)
+static void f_hlexists(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = highlight_exists(get_tv_string(&argvars[0]));
}
@@ -11007,7 +11692,7 @@ static void f_hlexists(typval_T *argvars, typval_T *rettv)
/*
* "hostname()" function
*/
-static void f_hostname(typval_T *argvars, typval_T *rettv)
+static void f_hostname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char hostname[256];
@@ -11019,7 +11704,7 @@ static void f_hostname(typval_T *argvars, typval_T *rettv)
/*
* iconv() function
*/
-static void f_iconv(typval_T *argvars, typval_T *rettv)
+static void f_iconv(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf1[NUMBUFLEN];
char_u buf2[NUMBUFLEN];
@@ -11049,7 +11734,7 @@ static void f_iconv(typval_T *argvars, typval_T *rettv)
/*
* "indent()" function
*/
-static void f_indent(typval_T *argvars, typval_T *rettv)
+static void f_indent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -11063,7 +11748,7 @@ static void f_indent(typval_T *argvars, typval_T *rettv)
/*
* "index()" function
*/
-static void f_index(typval_T *argvars, typval_T *rettv)
+static void f_index(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *item;
@@ -11194,7 +11879,7 @@ static void get_user_input(typval_T *argvars, typval_T *rettv, int inputdialog)
* "input()" function
* Also handles inputsecret() when inputsecret is set.
*/
-static void f_input(typval_T *argvars, typval_T *rettv)
+static void f_input(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_user_input(argvars, rettv, FALSE);
}
@@ -11202,7 +11887,7 @@ static void f_input(typval_T *argvars, typval_T *rettv)
/*
* "inputdialog()" function
*/
-static void f_inputdialog(typval_T *argvars, typval_T *rettv)
+static void f_inputdialog(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_user_input(argvars, rettv, TRUE);
}
@@ -11210,7 +11895,7 @@ static void f_inputdialog(typval_T *argvars, typval_T *rettv)
/*
* "inputlist()" function
*/
-static void f_inputlist(typval_T *argvars, typval_T *rettv)
+static void f_inputlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
listitem_T *li;
int selected;
@@ -11246,7 +11931,7 @@ static garray_T ga_userinput = {0, 0, sizeof(tasave_T), 4, NULL};
/*
* "inputrestore()" function
*/
-static void f_inputrestore(typval_T *argvars, typval_T *rettv)
+static void f_inputrestore(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (!GA_EMPTY(&ga_userinput)) {
--ga_userinput.ga_len;
@@ -11262,7 +11947,7 @@ static void f_inputrestore(typval_T *argvars, typval_T *rettv)
/*
* "inputsave()" function
*/
-static void f_inputsave(typval_T *argvars, typval_T *rettv)
+static void f_inputsave(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
// Add an entry to the stack of typeahead storage.
tasave_T *p = GA_APPEND_VIA_PTR(tasave_T, &ga_userinput);
@@ -11272,19 +11957,19 @@ static void f_inputsave(typval_T *argvars, typval_T *rettv)
/*
* "inputsecret()" function
*/
-static void f_inputsecret(typval_T *argvars, typval_T *rettv)
+static void f_inputsecret(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- ++cmdline_star;
- ++inputsecret_flag;
- f_input(argvars, rettv);
- --cmdline_star;
- --inputsecret_flag;
+ cmdline_star++;
+ inputsecret_flag++;
+ f_input(argvars, rettv, NULL);
+ cmdline_star--;
+ inputsecret_flag--;
}
/*
* "insert()" function
*/
-static void f_insert(typval_T *argvars, typval_T *rettv)
+static void f_insert(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long before = 0;
listitem_T *item;
@@ -11323,7 +12008,7 @@ static void f_insert(typval_T *argvars, typval_T *rettv)
/*
* "invert(expr)" function
*/
-static void f_invert(typval_T *argvars, typval_T *rettv)
+static void f_invert(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
}
@@ -11331,7 +12016,7 @@ static void f_invert(typval_T *argvars, typval_T *rettv)
/*
* "isdirectory()" function
*/
-static void f_isdirectory(typval_T *argvars, typval_T *rettv)
+static void f_isdirectory(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = os_isdir(get_tv_string(&argvars[0]));
}
@@ -11339,7 +12024,7 @@ static void f_isdirectory(typval_T *argvars, typval_T *rettv)
/*
* "islocked()" function
*/
-static void f_islocked(typval_T *argvars, typval_T *rettv)
+static void f_islocked(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
lval_T lv;
char_u *end;
@@ -11451,13 +12136,13 @@ static void dict_list(typval_T *argvars, typval_T *rettv, int what)
/*
* "items(dict)" function
*/
-static void f_items(typval_T *argvars, typval_T *rettv)
+static void f_items(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 2);
}
// "jobclose(id[, stream])" function
-static void f_jobclose(typval_T *argvars, typval_T *rettv)
+static void f_jobclose(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11483,21 +12168,43 @@ static void f_jobclose(typval_T *argvars, typval_T *rettv)
if (argvars[1].v_type == VAR_STRING) {
char *stream = (char *)argvars[1].vval.v_string;
if (!strcmp(stream, "stdin")) {
- process_close_in(proc);
+ if (data->rpc) {
+ EMSG(_("Invalid stream on rpc job, use jobclose(id, 'rpc')"));
+ } else {
+ process_close_in(proc);
+ }
} else if (!strcmp(stream, "stdout")) {
- process_close_out(proc);
+ if (data->rpc) {
+ EMSG(_("Invalid stream on rpc job, use jobclose(id, 'rpc')"));
+ } else {
+ process_close_out(proc);
+ }
} else if (!strcmp(stream, "stderr")) {
process_close_err(proc);
+ } else if (!strcmp(stream, "rpc")) {
+ if (data->rpc) {
+ channel_close(data->id);
+ } else {
+ EMSG(_("Invalid job stream: Not an rpc job"));
+ }
} else {
EMSG2(_("Invalid job stream \"%s\""), stream);
}
} else {
- process_close_streams(proc);
+ if (data->rpc) {
+ channel_close(data->id);
+ process_close_err(proc);
+ } else {
+ process_close_streams(proc);
+ if (proc->type == kProcessTypePty) {
+ pty_process_close_master(&data->proc.pty);
+ }
+ }
}
}
// "jobpid(id)" function
-static void f_jobpid(typval_T *argvars, typval_T *rettv)
+static void f_jobpid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11522,7 +12229,7 @@ static void f_jobpid(typval_T *argvars, typval_T *rettv)
}
// "jobsend()" function
-static void f_jobsend(typval_T *argvars, typval_T *rettv)
+static void f_jobsend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11549,6 +12256,11 @@ static void f_jobsend(typval_T *argvars, typval_T *rettv)
return;
}
+ if (data->rpc) {
+ EMSG(_("Can't send raw data to rpc channel"));
+ return;
+ }
+
ssize_t input_len;
char *input = (char *) save_tv_as_string(&argvars[1], &input_len, false);
if (!input) {
@@ -11562,7 +12274,7 @@ static void f_jobsend(typval_T *argvars, typval_T *rettv)
}
// "jobresize(job, width, height)" function
-static void f_jobresize(typval_T *argvars, typval_T *rettv)
+static void f_jobresize(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11595,7 +12307,7 @@ static void f_jobresize(typval_T *argvars, typval_T *rettv)
rettv->vval.v_number = 1;
}
-static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
+static char **tv_to_argv(typval_T *cmd_tv, char **cmd, bool *executable)
{
if (cmd_tv->v_type == VAR_STRING) {
char *cmd_str = (char *)get_tv_string(cmd_tv);
@@ -11613,7 +12325,7 @@ static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
list_T *argl = cmd_tv->vval.v_list;
int argc = argl->lv_len;
if (!argc) {
- EMSG(_("Argument vector must have at least one item"));
+ EMSG(_(e_invarg)); // List must have at least one item.
return NULL;
}
@@ -11621,9 +12333,8 @@ static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
const char_u *exe = get_tv_string_chk(&argl->lv_first->li_tv);
if (!exe || !os_can_exe(exe, NULL, true)) {
- // String is not executable
- if (exe) {
- EMSG2(e_jobexe, exe);
+ if (exe && executable) {
+ *executable = false;
}
return NULL;
}
@@ -11631,7 +12342,7 @@ static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
if (cmd) {
*cmd = (char *)exe;
}
-
+
// Build the argument vector
int i = 0;
char **argv = xcalloc(argc + 1, sizeof(char *));
@@ -11649,7 +12360,7 @@ static char **tv_to_argv(typval_T *cmd_tv, char **cmd)
}
// "jobstart()" function
-static void f_jobstart(typval_T *argvars, typval_T *rettv)
+static void f_jobstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11658,8 +12369,10 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv)
return;
}
- char **argv = tv_to_argv(&argvars[0], NULL);
+ bool executable = true;
+ char **argv = tv_to_argv(&argvars[0], NULL, &executable);
if (!argv) {
+ rettv->vval.v_number = executable ? 0 : -1;
return; // Did error message in tv_to_argv.
}
@@ -11670,48 +12383,71 @@ static void f_jobstart(typval_T *argvars, typval_T *rettv)
return;
}
+
dict_T *job_opts = NULL;
- ufunc_T *on_stdout = NULL, *on_stderr = NULL, *on_exit = NULL;
+ bool detach = false, rpc = false, pty = false;
+ Callback on_stdout = CALLBACK_NONE, on_stderr = CALLBACK_NONE,
+ on_exit = CALLBACK_NONE;
+ char *cwd = NULL;
if (argvars[1].v_type == VAR_DICT) {
job_opts = argvars[1].vval.v_dict;
+
+ detach = get_dict_number(job_opts, "detach") != 0;
+ rpc = get_dict_number(job_opts, "rpc") != 0;
+ pty = get_dict_number(job_opts, "pty") != 0;
+ if (pty && rpc) {
+ EMSG2(_(e_invarg2), "job cannot have both 'pty' and 'rpc' options set");
+ shell_free_argv(argv);
+ return;
+ }
+
+ char *new_cwd = (char *)get_dict_string(job_opts, "cwd", false);
+ if (new_cwd && strlen(new_cwd) > 0) {
+ cwd = new_cwd;
+ // The new cwd must be a directory.
+ if (!os_isdir((char_u *)cwd)) {
+ EMSG2(_(e_invarg2), "expected valid directory");
+ shell_free_argv(argv);
+ return;
+ }
+ }
+
if (!common_job_callbacks(job_opts, &on_stdout, &on_stderr, &on_exit)) {
shell_free_argv(argv);
return;
}
}
- bool pty = job_opts && get_dict_number(job_opts, (uint8_t *)"pty") != 0;
- bool detach = job_opts && get_dict_number(job_opts, (uint8_t *)"detach") != 0;
TerminalJobData *data = common_job_init(argv, on_stdout, on_stderr, on_exit,
- job_opts, pty, detach);
+ pty, rpc, detach, cwd);
Process *proc = (Process *)&data->proc;
if (pty) {
- uint16_t width = get_dict_number(job_opts, (uint8_t *)"width");
+ uint16_t width = get_dict_number(job_opts, "width");
if (width > 0) {
data->proc.pty.width = width;
}
- uint16_t height = get_dict_number(job_opts, (uint8_t *)"height");
+ uint16_t height = get_dict_number(job_opts, "height");
if (height > 0) {
data->proc.pty.height = height;
}
- char *term = (char *)get_dict_string(job_opts, (uint8_t *)"TERM", true);
+ char *term = (char *)get_dict_string(job_opts, "TERM", true);
if (term) {
data->proc.pty.term_name = term;
}
}
- if (!on_stdout) {
+ if (!rpc && on_stdout.type == kCallbackNone) {
proc->out = NULL;
}
- if (!on_stderr) {
+ if (on_stderr.type == kCallbackNone) {
proc->err = NULL;
}
common_job_start(data, rettv);
}
// "jobstop()" function
-static void f_jobstop(typval_T *argvars, typval_T *rettv)
+static void f_jobstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11739,7 +12475,7 @@ static void f_jobstop(typval_T *argvars, typval_T *rettv)
}
// "jobwait(ids[, timeout])" function
-static void f_jobwait(typval_T *argvars, typval_T *rettv)
+static void f_jobwait(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -11758,7 +12494,7 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv)
list_T *rv = list_alloc();
ui_busy_start();
- Queue *waiting_jobs = queue_new_parent(loop_on_put, &loop);
+ MultiQueue *waiting_jobs = multiqueue_new_parent(loop_on_put, &main_loop);
// For each item in the input list append an integer to the output list. -3
// is used to represent an invalid job id, -2 is for a interrupted job and
// -1 for jobs that were skipped or timed out.
@@ -11774,8 +12510,8 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv)
data->status_ptr = &rv->lv_last->li_tv.vval.v_number;
// Process any pending events for the job because we'll temporarily
// replace the parent queue
- queue_process_events(data->events);
- queue_replace_parent(data->events, waiting_jobs);
+ multiqueue_process_events(data->events);
+ multiqueue_replace_parent(data->events, waiting_jobs);
}
}
@@ -11835,11 +12571,11 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv)
continue;
}
// restore the parent queue for the job
- queue_process_events(data->events);
- queue_replace_parent(data->events, loop.events);
+ multiqueue_process_events(data->events);
+ multiqueue_replace_parent(data->events, main_loop.events);
}
- queue_free(waiting_jobs);
+ multiqueue_free(waiting_jobs);
ui_busy_stop();
rv->lv_refcount++;
rettv->v_type = VAR_LIST;
@@ -11849,7 +12585,7 @@ static void f_jobwait(typval_T *argvars, typval_T *rettv)
/*
* "join()" function
*/
-static void f_join(typval_T *argvars, typval_T *rettv)
+static void f_join(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
garray_T ga;
char_u *sep;
@@ -11877,7 +12613,7 @@ static void f_join(typval_T *argvars, typval_T *rettv)
}
/// json_decode() function
-static void f_json_decode(typval_T *argvars, typval_T *rettv)
+static void f_json_decode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char numbuf[NUMBUFLEN];
char *s = NULL;
@@ -11911,7 +12647,7 @@ static void f_json_decode(typval_T *argvars, typval_T *rettv)
}
/// json_encode() function
-static void f_json_encode(typval_T *argvars, typval_T *rettv)
+static void f_json_encode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = (char_u *) encode_tv2json(&argvars[0], NULL);
@@ -11920,7 +12656,7 @@ static void f_json_encode(typval_T *argvars, typval_T *rettv)
/*
* "keys()" function
*/
-static void f_keys(typval_T *argvars, typval_T *rettv)
+static void f_keys(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 0);
}
@@ -11928,7 +12664,7 @@ static void f_keys(typval_T *argvars, typval_T *rettv)
/*
* "last_buffer_nr()" function.
*/
-static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv)
+static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n = 0;
@@ -11944,7 +12680,7 @@ static void f_last_buffer_nr(typval_T *argvars, typval_T *rettv)
/*
* "len()" function
*/
-static void f_len(typval_T *argvars, typval_T *rettv)
+static void f_len(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
switch (argvars[0].v_type) {
case VAR_STRING:
@@ -11962,6 +12698,7 @@ static void f_len(typval_T *argvars, typval_T *rettv)
case VAR_SPECIAL:
case VAR_FLOAT:
case VAR_FUNC:
+ case VAR_PARTIAL:
EMSG(_("E701: Invalid type for len()"));
break;
}
@@ -12015,7 +12752,7 @@ static void libcall_common(typval_T *argvars, typval_T *rettv, int out_type)
/*
* "libcall()" function
*/
-static void f_libcall(typval_T *argvars, typval_T *rettv)
+static void f_libcall(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
libcall_common(argvars, rettv, VAR_STRING);
}
@@ -12023,7 +12760,7 @@ static void f_libcall(typval_T *argvars, typval_T *rettv)
/*
* "libcallnr()" function
*/
-static void f_libcallnr(typval_T *argvars, typval_T *rettv)
+static void f_libcallnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
libcall_common(argvars, rettv, VAR_NUMBER);
}
@@ -12031,7 +12768,7 @@ static void f_libcallnr(typval_T *argvars, typval_T *rettv)
/*
* "line(string)" function
*/
-static void f_line(typval_T *argvars, typval_T *rettv)
+static void f_line(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum = 0;
pos_T *fp;
@@ -12046,7 +12783,7 @@ static void f_line(typval_T *argvars, typval_T *rettv)
/*
* "line2byte(lnum)" function
*/
-static void f_line2byte(typval_T *argvars, typval_T *rettv)
+static void f_line2byte(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -12062,7 +12799,7 @@ static void f_line2byte(typval_T *argvars, typval_T *rettv)
/*
* "lispindent(lnum)" function
*/
-static void f_lispindent(typval_T *argvars, typval_T *rettv)
+static void f_lispindent(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
linenr_T lnum;
@@ -12080,7 +12817,7 @@ static void f_lispindent(typval_T *argvars, typval_T *rettv)
/*
* "localtime()" function
*/
-static void f_localtime(typval_T *argvars, typval_T *rettv)
+static void f_localtime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (varnumber_T)time(NULL);
}
@@ -12156,26 +12893,9 @@ static void get_maparg(typval_T *argvars, typval_T *rettv, int exact)
}
/*
- * "log()" function
- */
-static void f_log(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &log);
-}
-
-/*
- * "log10()" function
- */
-static void f_log10(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &log10);
-}
-
-
-/*
* "map()" function
*/
-static void f_map(typval_T *argvars, typval_T *rettv)
+static void f_map(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
filter_map(argvars, rettv, TRUE);
}
@@ -12183,7 +12903,7 @@ static void f_map(typval_T *argvars, typval_T *rettv)
/*
* "maparg()" function
*/
-static void f_maparg(typval_T *argvars, typval_T *rettv)
+static void f_maparg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_maparg(argvars, rettv, TRUE);
}
@@ -12191,7 +12911,7 @@ static void f_maparg(typval_T *argvars, typval_T *rettv)
/*
* "mapcheck()" function
*/
-static void f_mapcheck(typval_T *argvars, typval_T *rettv)
+static void f_mapcheck(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_maparg(argvars, rettv, FALSE);
}
@@ -12220,9 +12940,16 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)
p_cpo = (char_u *)"";
rettv->vval.v_number = -1;
- if (type == 3) {
- /* return empty list when there are no matches */
+ if (type == 3 || type == 4) {
+ // type 3: return empty list when there are no matches.
+ // type 4: return ["", -1, -1, -1]
rettv_list_alloc(rettv);
+ if (type == 4) {
+ list_append_string(rettv->vval.v_list, (char_u *)"", 0);
+ list_append_number(rettv->vval.v_list, (varnumber_T)-1);
+ list_append_number(rettv->vval.v_list, (varnumber_T)-1);
+ list_append_number(rettv->vval.v_list, (varnumber_T)-1);
+ }
} else if (type == 2) {
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -12285,7 +13012,7 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)
break;
}
xfree(tofree);
- tofree = str = (char_u *) encode_tv2echo(&li->li_tv, NULL);
+ tofree = expr = str = (char_u *)encode_tv2echo(&li->li_tv, NULL);
if (str == NULL) {
break;
}
@@ -12313,7 +13040,21 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)
}
if (match) {
- if (type == 3) {
+ if (type == 4) {
+ listitem_T *li1 = rettv->vval.v_list->lv_first;
+ listitem_T *li2 = li1->li_next;
+ listitem_T *li3 = li2->li_next;
+ listitem_T *li4 = li3->li_next;
+ xfree(li1->li_tv.vval.v_string);
+
+ int rd = (int)(regmatch.endp[0] - regmatch.startp[0]);
+ li1->li_tv.vval.v_string = vim_strnsave(regmatch.startp[0], rd);
+ li3->li_tv.vval.v_number = (varnumber_T)(regmatch.startp[0] - expr);
+ li4->li_tv.vval.v_number = (varnumber_T)(regmatch.endp[0] - expr);
+ if (l != NULL) {
+ li2->li_tv.vval.v_number = (varnumber_T)idx;
+ }
+ } else if (type == 3) {
int i;
/* return list with matched string and submatches */
@@ -12348,6 +13089,11 @@ static void find_some_match(typval_T *argvars, typval_T *rettv, int type)
vim_regfree(regmatch.regprog);
}
+ if (type == 4 && l == NULL) {
+ // matchstrpos() without a list: drop the second item
+ listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first->li_next);
+ }
+
theend:
xfree(tofree);
p_cpo = save_cpo;
@@ -12356,7 +13102,7 @@ theend:
/*
* "match()" function
*/
-static void f_match(typval_T *argvars, typval_T *rettv)
+static void f_match(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 1);
}
@@ -12364,7 +13110,7 @@ static void f_match(typval_T *argvars, typval_T *rettv)
/*
* "matchadd()" function
*/
-static void f_matchadd(typval_T *argvars, typval_T *rettv)
+static void f_matchadd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *grp = get_tv_string_buf_chk(&argvars[0], buf); /* group */
@@ -12390,7 +13136,7 @@ static void f_matchadd(typval_T *argvars, typval_T *rettv)
if (dict_find(argvars[4].vval.v_dict,
(char_u *)"conceal", -1) != NULL) {
conceal_char = get_dict_string(argvars[4].vval.v_dict,
- (char_u *)"conceal", false);
+ "conceal", false);
}
}
}
@@ -12407,7 +13153,7 @@ static void f_matchadd(typval_T *argvars, typval_T *rettv)
conceal_char);
}
-static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
+static void f_matchaddpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = -1;
@@ -12446,7 +13192,7 @@ static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_
if (dict_find(argvars[4].vval.v_dict,
(char_u *)"conceal", -1) != NULL) {
conceal_char = get_dict_string(argvars[4].vval.v_dict,
- (char_u *)"conceal", false);
+ "conceal", false);
}
}
}
@@ -12468,7 +13214,7 @@ static void f_matchaddpos(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_
/*
* "matcharg()" function
*/
-static void f_matcharg(typval_T *argvars, typval_T *rettv)
+static void f_matcharg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_list_alloc(rettv);
@@ -12490,7 +13236,7 @@ static void f_matcharg(typval_T *argvars, typval_T *rettv)
/*
* "matchdelete()" function
*/
-static void f_matchdelete(typval_T *argvars, typval_T *rettv)
+static void f_matchdelete(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = match_delete(curwin,
(int)get_tv_number(&argvars[0]), TRUE);
@@ -12499,7 +13245,7 @@ static void f_matchdelete(typval_T *argvars, typval_T *rettv)
/*
* "matchend()" function
*/
-static void f_matchend(typval_T *argvars, typval_T *rettv)
+static void f_matchend(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 0);
}
@@ -12507,7 +13253,7 @@ static void f_matchend(typval_T *argvars, typval_T *rettv)
/*
* "matchlist()" function
*/
-static void f_matchlist(typval_T *argvars, typval_T *rettv)
+static void f_matchlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 3);
}
@@ -12515,11 +13261,16 @@ static void f_matchlist(typval_T *argvars, typval_T *rettv)
/*
* "matchstr()" function
*/
-static void f_matchstr(typval_T *argvars, typval_T *rettv)
+static void f_matchstr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
find_some_match(argvars, rettv, 2);
}
+/// "matchstrpos()" function
+static void f_matchstrpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ find_some_match(argvars, rettv, 4);
+}
static void max_min(typval_T *argvars, typval_T *rettv, int domax)
{
@@ -12575,7 +13326,7 @@ static void max_min(typval_T *argvars, typval_T *rettv, int domax)
/*
* "max()" function
*/
-static void f_max(typval_T *argvars, typval_T *rettv)
+static void f_max(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
max_min(argvars, rettv, TRUE);
}
@@ -12583,7 +13334,7 @@ static void f_max(typval_T *argvars, typval_T *rettv)
/*
* "min()" function
*/
-static void f_min(typval_T *argvars, typval_T *rettv)
+static void f_min(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
max_min(argvars, rettv, FALSE);
}
@@ -12591,7 +13342,7 @@ static void f_min(typval_T *argvars, typval_T *rettv)
/*
* "mkdir()" function
*/
-static void f_mkdir(typval_T *argvars, typval_T *rettv)
+static void f_mkdir(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *dir;
char_u buf[NUMBUFLEN];
@@ -12633,7 +13384,7 @@ static void f_mkdir(typval_T *argvars, typval_T *rettv)
/*
* "mode()" function
*/
-static void f_mode(typval_T *argvars, typval_T *rettv)
+static void f_mode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[3];
@@ -12687,7 +13438,7 @@ static void f_mode(typval_T *argvars, typval_T *rettv)
}
/// "msgpackdump()" function
-static void f_msgpackdump(typval_T *argvars, typval_T *rettv)
+static void f_msgpackdump(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
if (argvars[0].v_type != VAR_LIST) {
@@ -12715,7 +13466,7 @@ static void f_msgpackdump(typval_T *argvars, typval_T *rettv)
}
/// "msgpackparse" function
-static void f_msgpackparse(typval_T *argvars, typval_T *rettv)
+static void f_msgpackparse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
if (argvars[0].v_type != VAR_LIST) {
@@ -12796,7 +13547,7 @@ f_msgpackparse_exit:
/*
* "nextnonblank()" function
*/
-static void f_nextnonblank(typval_T *argvars, typval_T *rettv)
+static void f_nextnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -12814,7 +13565,7 @@ static void f_nextnonblank(typval_T *argvars, typval_T *rettv)
/*
* "nr2char()" function
*/
-static void f_nr2char(typval_T *argvars, typval_T *rettv)
+static void f_nr2char(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -12838,7 +13589,7 @@ static void f_nr2char(typval_T *argvars, typval_T *rettv)
/*
* "or(expr, expr)" function
*/
-static void f_or(typval_T *argvars, typval_T *rettv)
+static void f_or(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
| get_tv_number_chk(&argvars[1], NULL);
@@ -12847,7 +13598,7 @@ static void f_or(typval_T *argvars, typval_T *rettv)
/*
* "pathshorten()" function
*/
-static void f_pathshorten(typval_T *argvars, typval_T *rettv)
+static void f_pathshorten(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = get_tv_string_chk(&argvars[0]);
@@ -12860,7 +13611,7 @@ static void f_pathshorten(typval_T *argvars, typval_T *rettv)
/*
* "pow()" function
*/
-static void f_pow(typval_T *argvars, typval_T *rettv)
+static void f_pow(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
float_T fx, fy;
@@ -12875,7 +13626,7 @@ static void f_pow(typval_T *argvars, typval_T *rettv)
/*
* "prevnonblank()" function
*/
-static void f_prevnonblank(typval_T *argvars, typval_T *rettv)
+static void f_prevnonblank(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
@@ -12897,7 +13648,7 @@ static va_list ap;
/*
* "printf()" function
*/
-static void f_printf(typval_T *argvars, typval_T *rettv)
+static void f_printf(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL;
@@ -12923,7 +13674,7 @@ static void f_printf(typval_T *argvars, typval_T *rettv)
/*
* "pumvisible()" function
*/
-static void f_pumvisible(typval_T *argvars, typval_T *rettv)
+static void f_pumvisible(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (pum_visible())
rettv->vval.v_number = 1;
@@ -12932,7 +13683,7 @@ static void f_pumvisible(typval_T *argvars, typval_T *rettv)
/*
* "pyeval()" function
*/
-static void f_pyeval(typval_T *argvars, typval_T *rettv)
+static void f_pyeval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
script_host_eval("python", argvars, rettv);
}
@@ -12940,7 +13691,7 @@ static void f_pyeval(typval_T *argvars, typval_T *rettv)
/*
* "py3eval()" function
*/
-static void f_py3eval(typval_T *argvars, typval_T *rettv)
+static void f_py3eval(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
script_host_eval("python3", argvars, rettv);
}
@@ -12948,7 +13699,7 @@ static void f_py3eval(typval_T *argvars, typval_T *rettv)
/*
* "range()" function
*/
-static void f_range(typval_T *argvars, typval_T *rettv)
+static void f_range(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long start;
long end;
@@ -12983,7 +13734,7 @@ static void f_range(typval_T *argvars, typval_T *rettv)
/*
* "readfile()" function
*/
-static void f_readfile(typval_T *argvars, typval_T *rettv)
+static void f_readfile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int binary = FALSE;
char_u *fname;
@@ -13182,7 +13933,7 @@ static int list2proftime(typval_T *arg, proftime_T *tm) FUNC_ATTR_NONNULL_ALL
/// one argument it returns the time passed since the argument.
/// With two arguments it returns the time passed between
/// the two arguments.
-static void f_reltime(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
+static void f_reltime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
proftime_T res;
proftime_T start;
@@ -13228,7 +13979,7 @@ static void f_reltime(typval_T *argvars, typval_T *rettv) FUNC_ATTR_NONNULL_ALL
/// @return The string representation of the argument, the format is the
/// number of seconds followed by a dot, followed by the number
/// of microseconds.
-static void f_reltimestr(typval_T *argvars, typval_T *rettv)
+static void f_reltimestr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
proftime_T tm;
@@ -13243,7 +13994,7 @@ static void f_reltimestr(typval_T *argvars, typval_T *rettv)
/*
* "remove()" function
*/
-static void f_remove(typval_T *argvars, typval_T *rettv)
+static void f_remove(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *item, *item2;
@@ -13328,7 +14079,7 @@ static void f_remove(typval_T *argvars, typval_T *rettv)
/*
* "rename({from}, {to})" function
*/
-static void f_rename(typval_T *argvars, typval_T *rettv)
+static void f_rename(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
@@ -13342,7 +14093,7 @@ static void f_rename(typval_T *argvars, typval_T *rettv)
/*
* "repeat()" function
*/
-static void f_repeat(typval_T *argvars, typval_T *rettv)
+static void f_repeat(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
int n;
@@ -13376,7 +14127,7 @@ static void f_repeat(typval_T *argvars, typval_T *rettv)
/*
* "resolve()" function
*/
-static void f_resolve(typval_T *argvars, typval_T *rettv)
+static void f_resolve(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
#ifdef HAVE_READLINK
@@ -13388,11 +14139,12 @@ static void f_resolve(typval_T *argvars, typval_T *rettv)
{
char_u *v = NULL;
- v = mch_resolve_shortcut(p);
- if (v != NULL)
+ v = os_resolve_shortcut(p);
+ if (v != NULL) {
rettv->vval.v_string = v;
- else
+ } else {
rettv->vval.v_string = vim_strsave(p);
+ }
}
#else
# ifdef HAVE_READLINK
@@ -13549,7 +14301,7 @@ fail:
/*
* "reverse({list})" function
*/
-static void f_reverse(typval_T *argvars, typval_T *rettv)
+static void f_reverse(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *li, *ni;
@@ -13720,16 +14472,8 @@ theend:
return retval;
}
-/*
- * "round({float})" function
- */
-static void f_round(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &round);
-}
-
// "rpcnotify()" function
-static void f_rpcnotify(typval_T *argvars, typval_T *rettv)
+static void f_rpcnotify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -13765,7 +14509,7 @@ static void f_rpcnotify(typval_T *argvars, typval_T *rettv)
}
// "rpcrequest()" function
-static void f_rpcrequest(typval_T *argvars, typval_T *rettv)
+static void f_rpcrequest(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -13838,7 +14582,7 @@ static void f_rpcrequest(typval_T *argvars, typval_T *rettv)
}
if (err.set) {
- vim_report_error(cstr_as_string(err.msg));
+ nvim_err_writeln(cstr_as_string(err.msg));
goto end;
}
@@ -13850,8 +14594,8 @@ end:
api_free_object(result);
}
-// "rpcstart()" function
-static void f_rpcstart(typval_T *argvars, typval_T *rettv)
+// "rpcstart()" function (DEPRECATED)
+static void f_rpcstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -13903,17 +14647,15 @@ static void f_rpcstart(typval_T *argvars, typval_T *rettv)
// The last item of argv must be NULL
argv[i] = NULL;
- uint64_t channel_id = channel_from_process(argv);
-
- if (!channel_id) {
- EMSG(_(e_api_spawn_failed));
- }
- rettv->vval.v_number = (varnumber_T)channel_id;
+ TerminalJobData *data = common_job_init(argv, CALLBACK_NONE, CALLBACK_NONE,
+ CALLBACK_NONE, false, true, false,
+ NULL);
+ common_job_start(data, rettv);
}
// "rpcstop()" function
-static void f_rpcstop(typval_T *argvars, typval_T *rettv)
+static void f_rpcstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_NUMBER;
rettv->vval.v_number = 0;
@@ -13928,13 +14670,18 @@ static void f_rpcstop(typval_T *argvars, typval_T *rettv)
return;
}
- rettv->vval.v_number = channel_close(argvars[0].vval.v_number);
+ // if called with a job, stop it, else closes the channel
+ if (pmap_get(uint64_t)(jobs, argvars[0].vval.v_number)) {
+ f_jobstop(argvars, rettv, NULL);
+ } else {
+ rettv->vval.v_number = channel_close(argvars[0].vval.v_number);
+ }
}
/*
* "screenattr()" function
*/
-static void f_screenattr(typval_T *argvars, typval_T *rettv)
+static void f_screenattr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int row;
int col;
@@ -13953,7 +14700,7 @@ static void f_screenattr(typval_T *argvars, typval_T *rettv)
/*
* "screenchar()" function
*/
-static void f_screenchar(typval_T *argvars, typval_T *rettv)
+static void f_screenchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int row;
int col;
@@ -13980,7 +14727,7 @@ static void f_screenchar(typval_T *argvars, typval_T *rettv)
*
* First column is 1 to be consistent with virtcol().
*/
-static void f_screencol(typval_T *argvars, typval_T *rettv)
+static void f_screencol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ui_current_col() + 1;
}
@@ -13988,7 +14735,7 @@ static void f_screencol(typval_T *argvars, typval_T *rettv)
/*
* "screenrow()" function
*/
-static void f_screenrow(typval_T *argvars, typval_T *rettv)
+static void f_screenrow(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = ui_current_row() + 1;
}
@@ -13996,7 +14743,7 @@ static void f_screenrow(typval_T *argvars, typval_T *rettv)
/*
* "search()" function
*/
-static void f_search(typval_T *argvars, typval_T *rettv)
+static void f_search(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int flags = 0;
@@ -14006,7 +14753,7 @@ static void f_search(typval_T *argvars, typval_T *rettv)
/*
* "searchdecl()" function
*/
-static void f_searchdecl(typval_T *argvars, typval_T *rettv)
+static void f_searchdecl(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int locally = 1;
int thisblock = 0;
@@ -14099,7 +14846,7 @@ theend:
/*
* "searchpair()" function
*/
-static void f_searchpair(typval_T *argvars, typval_T *rettv)
+static void f_searchpair(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = searchpair_cmn(argvars, NULL);
}
@@ -14107,7 +14854,7 @@ static void f_searchpair(typval_T *argvars, typval_T *rettv)
/*
* "searchpairpos()" function
*/
-static void f_searchpairpos(typval_T *argvars, typval_T *rettv)
+static void f_searchpairpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T match_pos;
int lnum = 0;
@@ -14272,7 +15019,7 @@ do_searchpair (
/*
* "searchpos()" function
*/
-static void f_searchpos(typval_T *argvars, typval_T *rettv)
+static void f_searchpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T match_pos;
int lnum = 0;
@@ -14295,7 +15042,7 @@ static void f_searchpos(typval_T *argvars, typval_T *rettv)
}
/// "serverlist()" function
-static void f_serverlist(typval_T *argvars, typval_T *rettv)
+static void f_serverlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
size_t n;
char **addrs = server_address_list(&n);
@@ -14313,7 +15060,7 @@ static void f_serverlist(typval_T *argvars, typval_T *rettv)
}
/// "serverstart()" function
-static void f_serverstart(typval_T *argvars, typval_T *rettv)
+static void f_serverstart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = NULL; // Address of the new server
@@ -14341,7 +15088,7 @@ static void f_serverstart(typval_T *argvars, typval_T *rettv)
}
/// "serverstop()" function
-static void f_serverstop(typval_T *argvars, typval_T *rettv)
+static void f_serverstop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -14360,10 +15107,9 @@ static void f_serverstop(typval_T *argvars, typval_T *rettv)
/*
* "setbufvar()" function
*/
-static void f_setbufvar(typval_T *argvars, typval_T *rettv)
+static void f_setbufvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
buf_T *buf;
- aco_save_T aco;
char_u *varname, *bufvarname;
typval_T *varp;
char_u nbuf[NUMBUFLEN];
@@ -14376,33 +15122,38 @@ static void f_setbufvar(typval_T *argvars, typval_T *rettv)
varp = &argvars[2];
if (buf != NULL && varname != NULL && varp != NULL) {
- /* set curbuf to be our buf, temporarily */
- aucmd_prepbuf(&aco, buf);
-
if (*varname == '&') {
long numval;
char_u *strval;
- int error = FALSE;
+ int error = false;
+ aco_save_T aco;
+
+ // set curbuf to be our buf, temporarily
+ aucmd_prepbuf(&aco, buf);
++varname;
numval = get_tv_number_chk(varp, &error);
strval = get_tv_string_buf_chk(varp, nbuf);
if (!error && strval != NULL)
set_option_value(varname, numval, strval, OPT_LOCAL);
+
+ // reset notion of buffer
+ aucmd_restbuf(&aco);
} else {
+ buf_T *save_curbuf = curbuf;
+
bufvarname = xmalloc(STRLEN(varname) + 3);
+ curbuf = buf;
STRCPY(bufvarname, "b:");
STRCPY(bufvarname + 2, varname);
set_var(bufvarname, varp, TRUE);
xfree(bufvarname);
+ curbuf = save_curbuf;
}
-
- /* reset notion of buffer */
- aucmd_restbuf(&aco);
}
}
-static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
+static void f_setcharsearch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *d;
dictitem_T *di;
@@ -14414,7 +15165,7 @@ static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
}
if ((d = argvars[0].vval.v_dict) != NULL) {
- csearch = get_dict_string(d, (char_u *)"char", FALSE);
+ csearch = get_dict_string(d, "char", false);
if (csearch != NULL) {
if (enc_utf8) {
int pcc[MAX_MCO];
@@ -14439,7 +15190,7 @@ static void f_setcharsearch(typval_T *argvars, typval_T *rettv)
/*
* "setcmdpos()" function
*/
-static void f_setcmdpos(typval_T *argvars, typval_T *rettv)
+static void f_setcmdpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int pos = (int)get_tv_number(&argvars[0]) - 1;
@@ -14449,7 +15200,7 @@ static void f_setcmdpos(typval_T *argvars, typval_T *rettv)
/// "setfperm({fname}, {mode})" function
-static void f_setfperm(typval_T *argvars, typval_T *rettv)
+static void f_setfperm(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = 0;
@@ -14482,7 +15233,7 @@ static void f_setfperm(typval_T *argvars, typval_T *rettv)
/*
* "setline()" function
*/
-static void f_setline(typval_T *argvars, typval_T *rettv)
+static void f_setline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
linenr_T lnum;
char_u *line = NULL;
@@ -14559,6 +15310,7 @@ static void f_setline(typval_T *argvars, typval_T *rettv)
static void set_qf_ll_list(win_T *wp, typval_T *args, typval_T *rettv)
FUNC_ATTR_NONNULL_ARG(2, 3)
{
+ static char *e_invact = N_("E927: Invalid action: '%s'");
char_u *title = NULL;
int action = ' ';
rettv->vval.v_number = -1;
@@ -14574,12 +15326,15 @@ static void set_qf_ll_list(win_T *wp, typval_T *args, typval_T *rettv)
// Option argument was not given.
goto skip_args;
} else if (action_arg->v_type != VAR_STRING) {
- EMSG(_(e_strreq));
+ EMSG(_(e_stringreq));
return;
}
char_u *act = get_tv_string_chk(action_arg);
- if (*act == 'a' || *act == 'r') {
+ if ((*act == 'a' || *act == 'r' || *act == ' ') && act[1] == NUL) {
action = *act;
+ } else {
+ EMSG2(_(e_invact), act);
+ return;
}
typval_T *title_arg = &args[2];
@@ -14607,7 +15362,7 @@ skip_args:
/*
* "setloclist()" function
*/
-static void f_setloclist(typval_T *argvars, typval_T *rettv)
+static void f_setloclist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *win;
@@ -14622,7 +15377,7 @@ static void f_setloclist(typval_T *argvars, typval_T *rettv)
/*
* "setmatches()" function
*/
-static void f_setmatches(typval_T *argvars, typval_T *rettv)
+static void f_setmatches(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
list_T *l;
listitem_T *li;
@@ -14688,22 +15443,23 @@ static void f_setmatches(typval_T *argvars, typval_T *rettv)
}
}
- char_u *group = get_dict_string(d, (char_u *)"group", false);
- int priority = get_dict_number(d, (char_u *)"priority");
- int id = get_dict_number(d, (char_u *)"id");
+ char_u *group = get_dict_string(d, "group", true);
+ int priority = get_dict_number(d, "priority");
+ int id = get_dict_number(d, "id");
char_u *conceal = dict_find(d, (char_u *)"conceal", -1) != NULL
- ? get_dict_string(d, (char_u *)"conceal",
- false)
+ ? get_dict_string(d, "conceal", true)
: NULL;
if (i == 0) {
match_add(curwin, group,
- get_dict_string(d, (char_u *)"pattern", false),
+ get_dict_string(d, "pattern", false),
priority, id, NULL, conceal);
} else {
match_add(curwin, group, NULL, priority, id, s, conceal);
list_unref(s);
s = NULL;
}
+ xfree(group);
+ xfree(conceal);
li = li->li_next;
}
rettv->vval.v_number = 0;
@@ -14713,7 +15469,7 @@ static void f_setmatches(typval_T *argvars, typval_T *rettv)
/*
* "setpos()" function
*/
-static void f_setpos(typval_T *argvars, typval_T *rettv)
+static void f_setpos(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
pos_T pos;
int fnum;
@@ -14755,7 +15511,7 @@ static void f_setpos(typval_T *argvars, typval_T *rettv)
/*
* "setqflist()" function
*/
-static void f_setqflist(typval_T *argvars, typval_T *rettv)
+static void f_setqflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
set_qf_ll_list(NULL, argvars, rettv);
}
@@ -14763,7 +15519,7 @@ static void f_setqflist(typval_T *argvars, typval_T *rettv)
/*
* "setreg()" function
*/
-static void f_setreg(typval_T *argvars, typval_T *rettv)
+static void f_setreg(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int regname;
char_u *strregname;
@@ -14811,7 +15567,10 @@ static void f_setreg(typval_T *argvars, typval_T *rettv)
}
if (argvars[1].v_type == VAR_LIST) {
- int len = argvars[1].vval.v_list->lv_len;
+ list_T *ll = argvars[1].vval.v_list;
+ // If the list is NULL handle like an empty list.
+ int len = ll == NULL ? 0 : ll->lv_len;
+
// First half: use for pointers to result lines; second half: use for
// pointers to allocated copies.
char_u **lstval = xmalloc(sizeof(char_u *) * ((len + 1) * 2));
@@ -14820,7 +15579,7 @@ static void f_setreg(typval_T *argvars, typval_T *rettv)
char_u **curallocval = allocval;
char_u buf[NUMBUFLEN];
- for (listitem_T *li = argvars[1].vval.v_list->lv_first;
+ for (listitem_T *li = ll == NULL ? NULL : ll->lv_first;
li != NULL;
li = li->li_next) {
char_u *strval = get_tv_string_buf_chk(&li->li_tv, buf);
@@ -14837,7 +15596,8 @@ static void f_setreg(typval_T *argvars, typval_T *rettv)
}
*curval++ = NULL;
- write_reg_contents_lst(regname, lstval, -1, append, yank_type, block_len);
+ write_reg_contents_lst(regname, lstval, STRLEN(lstval),
+ append, yank_type, block_len);
free_lstval:
while (curallocval > allocval)
@@ -14848,7 +15608,8 @@ free_lstval:
if (strval == NULL) {
return;
}
- write_reg_contents_ex(regname, strval, -1, append, yank_type, block_len);
+ write_reg_contents_ex(regname, strval, STRLEN(strval),
+ append, yank_type, block_len);
}
rettv->vval.v_number = 0;
}
@@ -14856,7 +15617,7 @@ free_lstval:
/*
* "settabvar()" function
*/
-static void f_settabvar(typval_T *argvars, typval_T *rettv)
+static void f_settabvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
tabpage_T *save_curtab;
tabpage_T *tp;
@@ -14893,7 +15654,7 @@ static void f_settabvar(typval_T *argvars, typval_T *rettv)
/*
* "settabwinvar()" function
*/
-static void f_settabwinvar(typval_T *argvars, typval_T *rettv)
+static void f_settabwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
setwinvar(argvars, rettv, 1);
}
@@ -14901,7 +15662,7 @@ static void f_settabwinvar(typval_T *argvars, typval_T *rettv)
/*
* "setwinvar()" function
*/
-static void f_setwinvar(typval_T *argvars, typval_T *rettv)
+static void f_setwinvar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
setwinvar(argvars, rettv, 0);
}
@@ -14961,7 +15722,7 @@ static void setwinvar(typval_T *argvars, typval_T *rettv, int off)
}
/// f_sha256 - sha256({string}) function
-static void f_sha256(typval_T *argvars, typval_T *rettv)
+static void f_sha256(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = get_tv_string(&argvars[0]);
const char_u *hash = sha256_bytes(p, (int) STRLEN(p) , NULL, 0);
@@ -14974,7 +15735,7 @@ static void f_sha256(typval_T *argvars, typval_T *rettv)
/*
* "shellescape({string})" function
*/
-static void f_shellescape(typval_T *argvars, typval_T *rettv)
+static void f_shellescape(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_string = vim_strsave_shellescape(
get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), true);
@@ -14984,7 +15745,7 @@ static void f_shellescape(typval_T *argvars, typval_T *rettv)
/*
* shiftwidth() function
*/
-static void f_shiftwidth(typval_T *argvars, typval_T *rettv)
+static void f_shiftwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_sw_value(curbuf);
}
@@ -14992,7 +15753,7 @@ static void f_shiftwidth(typval_T *argvars, typval_T *rettv)
/*
* "simplify()" function
*/
-static void f_simplify(typval_T *argvars, typval_T *rettv)
+static void f_simplify(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
@@ -15002,35 +15763,25 @@ static void f_simplify(typval_T *argvars, typval_T *rettv)
rettv->v_type = VAR_STRING;
}
-/*
- * "sin()" function
- */
-static void f_sin(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sin);
-}
-
-/*
- * "sinh()" function
- */
-static void f_sinh(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sinh);
-}
-
/// struct used in the array that's given to qsort()
typedef struct {
listitem_T *item;
int idx;
} sortItem_T;
-static int item_compare_ic;
-static bool item_compare_numeric;
-static bool item_compare_numbers;
-static bool item_compare_float;
-static char_u *item_compare_func;
-static dict_T *item_compare_selfdict;
-static int item_compare_func_err;
+/// struct storing information about current sort
+typedef struct {
+ int item_compare_ic;
+ bool item_compare_numeric;
+ bool item_compare_numbers;
+ bool item_compare_float;
+ char_u *item_compare_func;
+ partial_T *item_compare_partial;
+ dict_T *item_compare_selfdict;
+ int item_compare_func_err;
+} sortinfo_T;
+static sortinfo_T *sortinfo = NULL;
+
#define ITEM_COMPARE_FAIL 999
/*
@@ -15050,14 +15801,14 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)
typval_T *tv1 = &si1->item->li_tv;
typval_T *tv2 = &si2->item->li_tv;
- if (item_compare_numbers) {
+ if (sortinfo->item_compare_numbers) {
long v1 = get_tv_number(tv1);
long v2 = get_tv_number(tv2);
return v1 == v2 ? 0 : v1 > v2 ? 1 : -1;
}
- if (item_compare_float) {
+ if (sortinfo->item_compare_float) {
float_T v1 = get_tv_float(tv1);
float_T v2 = get_tv_float(tv2);
@@ -15068,7 +15819,7 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)
// do that for string variables. Use a single quote when comparing with
// a non-string to do what the docs promise.
if (tv1->v_type == VAR_STRING) {
- if (tv2->v_type != VAR_STRING || item_compare_numeric) {
+ if (tv2->v_type != VAR_STRING || sortinfo->item_compare_numeric) {
p1 = (char_u *)"'";
} else {
p1 = tv1->vval.v_string;
@@ -15077,7 +15828,7 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)
tofree1 = p1 = (char_u *) encode_tv2string(tv1, NULL);
}
if (tv2->v_type == VAR_STRING) {
- if (tv1->v_type != VAR_STRING || item_compare_numeric) {
+ if (tv1->v_type != VAR_STRING || sortinfo->item_compare_numeric) {
p2 = (char_u *)"'";
} else {
p2 = tv2->vval.v_string;
@@ -15085,12 +15836,14 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)
} else {
tofree2 = p2 = (char_u *) encode_tv2string(tv2, NULL);
}
- if (p1 == NULL)
+ if (p1 == NULL) {
p1 = (char_u *)"";
- if (p2 == NULL)
+ }
+ if (p2 == NULL) {
p2 = (char_u *)"";
- if (!item_compare_numeric) {
- if (item_compare_ic) {
+ }
+ if (!sortinfo->item_compare_numeric) {
+ if (sortinfo->item_compare_ic) {
res = STRICMP(p1, p2);
} else {
res = STRCMP(p1, p2);
@@ -15130,32 +15883,43 @@ static int item_compare2(const void *s1, const void *s2, bool keep_zero)
typval_T rettv;
typval_T argv[3];
int dummy;
+ char_u *func_name;
+ partial_T *partial = sortinfo->item_compare_partial;
- /* shortcut after failure in previous call; compare all items equal */
- if (item_compare_func_err)
+ // shortcut after failure in previous call; compare all items equal
+ if (sortinfo->item_compare_func_err) {
return 0;
+ }
si1 = (sortItem_T *)s1;
si2 = (sortItem_T *)s2;
+ if (partial == NULL) {
+ func_name = sortinfo->item_compare_func;
+ } else {
+ func_name = partial->pt_name;
+ }
// Copy the values. This is needed to be able to set v_lock to VAR_FIXED
// in the copy without changing the original list items.
copy_tv(&si1->item->li_tv, &argv[0]);
copy_tv(&si2->item->li_tv, &argv[1]);
- rettv.v_type = VAR_UNKNOWN; /* clear_tv() uses this */
- res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
- &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
- item_compare_selfdict);
+ rettv.v_type = VAR_UNKNOWN; // clear_tv() uses this
+ res = call_func(func_name,
+ (int)STRLEN(func_name),
+ &rettv, 2, argv, 0L, 0L, &dummy, true,
+ partial, sortinfo->item_compare_selfdict);
clear_tv(&argv[0]);
clear_tv(&argv[1]);
- if (res == FAIL)
+ if (res == FAIL) {
res = ITEM_COMPARE_FAIL;
- else
- res = get_tv_number_chk(&rettv, &item_compare_func_err);
- if (item_compare_func_err)
- res = ITEM_COMPARE_FAIL; /* return value has wrong type */
+ } else {
+ res = get_tv_number_chk(&rettv, &sortinfo->item_compare_func_err);
+ }
+ if (sortinfo->item_compare_func_err) {
+ res = ITEM_COMPARE_FAIL; // return value has wrong type
+ }
clear_tv(&rettv);
// When the result would be zero, compare the pointers themselves. Makes
@@ -15188,6 +15952,12 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)
long len;
long i;
+ // Pointer to current info struct used in compare function. Save and restore
+ // the current one for nested calls.
+ sortinfo_T info;
+ sortinfo_T *old_sortinfo = sortinfo;
+ sortinfo = &info;
+
if (argvars[0].v_type != VAR_LIST) {
EMSG2(_(e_listarg), sort ? "sort()" : "uniq()");
} else {
@@ -15198,61 +15968,73 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)
? N_("sort() argument")
: N_("uniq() argument")),
true)) {
- return;
+ goto theend;
}
rettv->vval.v_list = l;
rettv->v_type = VAR_LIST;
++l->lv_refcount;
len = list_len(l);
- if (len <= 1)
- return; /* short list sorts pretty quickly */
+ if (len <= 1) {
+ goto theend; // short list sorts pretty quickly
+ }
- item_compare_ic = FALSE;
- item_compare_numeric = false;
- item_compare_numbers = false;
- item_compare_float = false;
- item_compare_func = NULL;
- item_compare_selfdict = NULL;
+ info.item_compare_ic = false;
+ info.item_compare_numeric = false;
+ info.item_compare_numbers = false;
+ info.item_compare_float = false;
+ info.item_compare_func = NULL;
+ info.item_compare_partial = NULL;
+ info.item_compare_selfdict = NULL;
if (argvars[1].v_type != VAR_UNKNOWN) {
/* optional second argument: {func} */
if (argvars[1].v_type == VAR_FUNC) {
- item_compare_func = argvars[1].vval.v_string;
+ info.item_compare_func = argvars[1].vval.v_string;
+ } else if (argvars[1].v_type == VAR_PARTIAL) {
+ info.item_compare_partial = argvars[1].vval.v_partial;
} else {
int error = FALSE;
i = get_tv_number_chk(&argvars[1], &error);
- if (error)
- return; /* type error; errmsg already given */
- if (i == 1)
- item_compare_ic = TRUE;
- else
- item_compare_func = get_tv_string(&argvars[1]);
- if (item_compare_func != NULL) {
- if (STRCMP(item_compare_func, "n") == 0) {
- item_compare_func = NULL;
- item_compare_numeric = true;
- } else if (STRCMP(item_compare_func, "N") == 0) {
- item_compare_func = NULL;
- item_compare_numbers = true;
- } else if (STRCMP(item_compare_func, "f") == 0) {
- item_compare_func = NULL;
- item_compare_float = true;
- } else if (STRCMP(item_compare_func, "i") == 0) {
- item_compare_func = NULL;
- item_compare_ic = TRUE;
+ if (error) {
+ goto theend; // type error; errmsg already given
+ }
+ if (i == 1) {
+ info.item_compare_ic = true;
+ } else if (argvars[1].v_type != VAR_NUMBER) {
+ info.item_compare_func = get_tv_string(&argvars[1]);
+ } else if (i != 0) {
+ EMSG(_(e_invarg));
+ goto theend;
+ }
+ if (info.item_compare_func != NULL) {
+ if (*info.item_compare_func == NUL) {
+ // empty string means default sort
+ info.item_compare_func = NULL;
+ } else if (STRCMP(info.item_compare_func, "n") == 0) {
+ info.item_compare_func = NULL;
+ info.item_compare_numeric = true;
+ } else if (STRCMP(info.item_compare_func, "N") == 0) {
+ info.item_compare_func = NULL;
+ info.item_compare_numbers = true;
+ } else if (STRCMP(info.item_compare_func, "f") == 0) {
+ info.item_compare_func = NULL;
+ info.item_compare_float = true;
+ } else if (STRCMP(info.item_compare_func, "i") == 0) {
+ info.item_compare_func = NULL;
+ info.item_compare_ic = true;
}
}
}
if (argvars[2].v_type != VAR_UNKNOWN) {
- /* optional third argument: {dict} */
+ // optional third argument: {dict}
if (argvars[2].v_type != VAR_DICT) {
EMSG(_(e_dictreq));
- return;
+ goto theend;
}
- item_compare_selfdict = argvars[2].vval.v_dict;
+ info.item_compare_selfdict = argvars[2].vval.v_dict;
}
}
@@ -15268,19 +16050,22 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)
i++;
}
- item_compare_func_err = FALSE;
+ info.item_compare_func_err = false;
// Test the compare function.
- if (item_compare_func != NULL
+ if ((info.item_compare_func != NULL
+ || info.item_compare_partial != NULL)
&& item_compare2_not_keeping_zero(&ptrs[0], &ptrs[1])
== ITEM_COMPARE_FAIL) {
EMSG(_("E702: Sort compare function failed"));
} else {
// Sort the array with item pointers.
qsort(ptrs, (size_t)len, sizeof (sortItem_T),
- item_compare_func == NULL ? item_compare_not_keeping_zero :
- item_compare2_not_keeping_zero);
+ (info.item_compare_func == NULL
+ && info.item_compare_partial == NULL ?
+ item_compare_not_keeping_zero :
+ item_compare2_not_keeping_zero));
- if (!item_compare_func_err) {
+ if (!info.item_compare_func_err) {
// Clear the list and append the items in the sorted order.
l->lv_first = NULL;
l->lv_last = NULL;
@@ -15296,21 +16081,25 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)
int (*item_compare_func_ptr)(const void *, const void *);
// f_uniq(): ptrs will be a stack of items to remove.
- item_compare_func_err = FALSE;
- item_compare_func_ptr = item_compare_func ? item_compare2_keeping_zero :
- item_compare_keeping_zero;
+ info.item_compare_func_err = false;
+ if (info.item_compare_func != NULL
+ || info.item_compare_partial != NULL) {
+ item_compare_func_ptr = item_compare2_keeping_zero;
+ } else {
+ item_compare_func_ptr = item_compare_keeping_zero;
+ }
for (li = l->lv_first; li != NULL && li->li_next != NULL; li = li->li_next) {
if (item_compare_func_ptr(&li, &li->li_next) == 0) {
ptrs[i++].item = li;
}
- if (item_compare_func_err) {
+ if (info.item_compare_func_err) {
EMSG(_("E882: Uniq compare function failed"));
break;
}
}
- if (!item_compare_func_err) {
+ if (!info.item_compare_func_err) {
while (--i >= 0) {
assert(ptrs[i].item->li_next);
li = ptrs[i].item->li_next;
@@ -15329,16 +16118,19 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)
xfree(ptrs);
}
+
+theend:
+ sortinfo = old_sortinfo;
}
/// "sort"({list})" function
-static void f_sort(typval_T *argvars, typval_T *rettv)
+static void f_sort(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
do_sort_uniq(argvars, rettv, true);
}
/// "uniq({list})" function
-static void f_uniq(typval_T *argvars, typval_T *rettv)
+static void f_uniq(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
do_sort_uniq(argvars, rettv, false);
}
@@ -15346,7 +16138,7 @@ static void f_uniq(typval_T *argvars, typval_T *rettv)
//
// "reltimefloat()" function
//
-static void f_reltimefloat(typval_T *argvars , typval_T *rettv)
+static void f_reltimefloat(typval_T *argvars , typval_T *rettv, FunPtr fptr)
FUNC_ATTR_NONNULL_ALL
{
proftime_T tm;
@@ -15361,7 +16153,7 @@ static void f_reltimefloat(typval_T *argvars , typval_T *rettv)
/*
* "soundfold({word})" function
*/
-static void f_soundfold(typval_T *argvars, typval_T *rettv)
+static void f_soundfold(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s;
@@ -15373,7 +16165,7 @@ static void f_soundfold(typval_T *argvars, typval_T *rettv)
/*
* "spellbadword()" function
*/
-static void f_spellbadword(typval_T *argvars, typval_T *rettv)
+static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *word = (char_u *)"";
hlf_T attr = HLF_COUNT;
@@ -15417,7 +16209,7 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv)
/*
* "spellsuggest()" function
*/
-static void f_spellsuggest(typval_T *argvars, typval_T *rettv)
+static void f_spellsuggest(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *str;
int typeerr = FALSE;
@@ -15457,7 +16249,7 @@ static void f_spellsuggest(typval_T *argvars, typval_T *rettv)
}
}
-static void f_split(typval_T *argvars, typval_T *rettv)
+static void f_split(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *str;
char_u *end;
@@ -15526,17 +16318,9 @@ static void f_split(typval_T *argvars, typval_T *rettv)
}
/*
- * "sqrt()" function
- */
-static void f_sqrt(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &sqrt);
-}
-
-/*
* "str2float()" function
*/
-static void f_str2float(typval_T *argvars, typval_T *rettv)
+static void f_str2float(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = skipwhite(get_tv_string(&argvars[0]));
@@ -15547,7 +16331,7 @@ static void f_str2float(typval_T *argvars, typval_T *rettv)
}
// "str2nr()" function
-static void f_str2nr(typval_T *argvars, typval_T *rettv)
+static void f_str2nr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int base = 10;
char_u *p;
@@ -15586,7 +16370,7 @@ static void f_str2nr(typval_T *argvars, typval_T *rettv)
/*
* "strftime({format}[, {time}])" function
*/
-static void f_strftime(typval_T *argvars, typval_T *rettv)
+static void f_strftime(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u result_buf[256];
time_t seconds;
@@ -15634,10 +16418,43 @@ static void f_strftime(typval_T *argvars, typval_T *rettv)
}
}
+// "strgetchar()" function
+static void f_strgetchar(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ char_u *str;
+ int len;
+ int error = false;
+ int charidx;
+
+ rettv->vval.v_number = -1;
+ str = get_tv_string_chk(&argvars[0]);
+ if (str == NULL) {
+ return;
+ }
+ len = (int)STRLEN(str);
+ charidx = get_tv_number_chk(&argvars[1], &error);
+ if (error) {
+ return;
+ }
+
+ {
+ int byteidx = 0;
+
+ while (charidx >= 0 && byteidx < len) {
+ if (charidx == 0) {
+ rettv->vval.v_number = mb_ptr2char(str + byteidx);
+ break;
+ }
+ charidx--;
+ byteidx += mb_cptr2len(str + byteidx);
+ }
+ }
+}
+
/*
* "stridx()" function
*/
-static void f_stridx(typval_T *argvars, typval_T *rettv)
+static void f_stridx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *needle;
@@ -15670,7 +16487,7 @@ static void f_stridx(typval_T *argvars, typval_T *rettv)
/*
* "string()" function
*/
-static void f_string(typval_T *argvars, typval_T *rettv)
+static void f_string(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = (char_u *) encode_tv2string(&argvars[0], NULL);
@@ -15679,7 +16496,7 @@ static void f_string(typval_T *argvars, typval_T *rettv)
/*
* "strlen()" function
*/
-static void f_strlen(typval_T *argvars, typval_T *rettv)
+static void f_strlen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = (varnumber_T)(STRLEN(
get_tv_string(&argvars[0])));
@@ -15688,7 +16505,7 @@ static void f_strlen(typval_T *argvars, typval_T *rettv)
/*
* "strchars()" function
*/
-static void f_strchars(typval_T *argvars, typval_T *rettv)
+static void f_strchars(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
int skipcc = 0;
@@ -15713,7 +16530,7 @@ static void f_strchars(typval_T *argvars, typval_T *rettv)
/*
* "strdisplaywidth()" function
*/
-static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
+static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
int col = 0;
@@ -15727,17 +16544,75 @@ static void f_strdisplaywidth(typval_T *argvars, typval_T *rettv)
/*
* "strwidth()" function
*/
-static void f_strwidth(typval_T *argvars, typval_T *rettv)
+static void f_strwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *s = get_tv_string(&argvars[0]);
rettv->vval.v_number = (varnumber_T) mb_string2cells(s);
}
+// "strcharpart()" function
+static void f_strcharpart(typval_T *argvars, typval_T *rettv, FunPtr fptr) {
+ char_u *p;
+ int nchar;
+ int nbyte = 0;
+ int charlen;
+ int len = 0;
+ int slen;
+ int error = false;
+
+ p = get_tv_string(&argvars[0]);
+ slen = (int)STRLEN(p);
+
+ nchar = get_tv_number_chk(&argvars[1], &error);
+ if (!error) {
+ if (nchar > 0) {
+ while (nchar > 0 && nbyte < slen) {
+ nbyte += mb_cptr2len(p + nbyte);
+ nchar--;
+ }
+ } else {
+ nbyte = nchar;
+ }
+ }
+ if (argvars[2].v_type != VAR_UNKNOWN) {
+ charlen = get_tv_number(&argvars[2]);
+ while (charlen > 0 && nbyte + len < slen) {
+ int off = nbyte + len;
+
+ if (off < 0) {
+ len += 1;
+ } else {
+ len += mb_cptr2len(p + off);
+ }
+ charlen--;
+ }
+ } else {
+ len = slen - nbyte; // default: all bytes that are available.
+ }
+
+ // Only return the overlap between the specified part and the actual
+ // string.
+ if (nbyte < 0) {
+ len += nbyte;
+ nbyte = 0;
+ } else if (nbyte > slen) {
+ nbyte = slen;
+ }
+ if (len < 0) {
+ len = 0;
+ } else if (nbyte + len > slen) {
+ len = slen - nbyte;
+ }
+
+ rettv->v_type = VAR_STRING;
+ rettv->vval.v_string = vim_strnsave(p + nbyte, len);
+}
+
/*
* "strpart()" function
*/
-static void f_strpart(typval_T *argvars, typval_T *rettv)
+static void f_strpart(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p;
int n;
@@ -15777,7 +16652,7 @@ static void f_strpart(typval_T *argvars, typval_T *rettv)
/*
* "strridx()" function
*/
-static void f_strridx(typval_T *argvars, typval_T *rettv)
+static void f_strridx(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u buf[NUMBUFLEN];
char_u *needle;
@@ -15823,7 +16698,7 @@ static void f_strridx(typval_T *argvars, typval_T *rettv)
/*
* "strtrans()" function
*/
-static void f_strtrans(typval_T *argvars, typval_T *rettv)
+static void f_strtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = transstr(get_tv_string(&argvars[0]));
@@ -15832,7 +16707,7 @@ static void f_strtrans(typval_T *argvars, typval_T *rettv)
/*
* "submatch()" function
*/
-static void f_submatch(typval_T *argvars, typval_T *rettv)
+static void f_submatch(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int error = FALSE;
int no = (int)get_tv_number_chk(&argvars[0], &error);
@@ -15861,7 +16736,7 @@ static void f_submatch(typval_T *argvars, typval_T *rettv)
/*
* "substitute()" function
*/
-static void f_substitute(typval_T *argvars, typval_T *rettv)
+static void f_substitute(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u patbuf[NUMBUFLEN];
char_u subbuf[NUMBUFLEN];
@@ -15882,7 +16757,7 @@ static void f_substitute(typval_T *argvars, typval_T *rettv)
/*
* "synID(lnum, col, trans)" function
*/
-static void f_synID(typval_T *argvars, typval_T *rettv)
+static void f_synID(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int id = 0;
long lnum;
@@ -15904,7 +16779,7 @@ static void f_synID(typval_T *argvars, typval_T *rettv)
/*
* "synIDattr(id, what [, mode])" function
*/
-static void f_synIDattr(typval_T *argvars, typval_T *rettv)
+static void f_synIDattr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = NULL;
int id;
@@ -15980,7 +16855,7 @@ static void f_synIDattr(typval_T *argvars, typval_T *rettv)
/*
* "synIDtrans(id)" function
*/
-static void f_synIDtrans(typval_T *argvars, typval_T *rettv)
+static void f_synIDtrans(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int id;
@@ -15997,7 +16872,7 @@ static void f_synIDtrans(typval_T *argvars, typval_T *rettv)
/*
* "synconcealed(lnum, col)" function
*/
-static void f_synconcealed(typval_T *argvars, typval_T *rettv)
+static void f_synconcealed(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
long col;
@@ -16044,7 +16919,7 @@ static void f_synconcealed(typval_T *argvars, typval_T *rettv)
/*
* "synstack(lnum, col)" function
*/
-static void f_synstack(typval_T *argvars, typval_T *rettv)
+static void f_synstack(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
long lnum;
long col;
@@ -16118,8 +16993,12 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
}
// get shell command to execute
- char **argv = tv_to_argv(&argvars[0], NULL);
+ bool executable = true;
+ char **argv = tv_to_argv(&argvars[0], NULL, &executable);
if (!argv) {
+ if (!executable) {
+ set_vim_var_nr(VV_SHELL_ERROR, (long)-1);
+ }
xfree(input);
return; // Already did emsg.
}
@@ -16175,12 +17054,12 @@ static void get_system_output_as_rettv(typval_T *argvars, typval_T *rettv,
}
/// f_system - the VimL system() function
-static void f_system(typval_T *argvars, typval_T *rettv)
+static void f_system(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_system_output_as_rettv(argvars, rettv, false);
}
-static void f_systemlist(typval_T *argvars, typval_T *rettv)
+static void f_systemlist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
get_system_output_as_rettv(argvars, rettv, true);
}
@@ -16189,7 +17068,7 @@ static void f_systemlist(typval_T *argvars, typval_T *rettv)
/*
* "tabpagebuflist()" function
*/
-static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv)
+static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
tabpage_T *tp;
win_T *wp = NULL;
@@ -16214,7 +17093,7 @@ static void f_tabpagebuflist(typval_T *argvars, typval_T *rettv)
/*
* "tabpagenr()" function
*/
-static void f_tabpagenr(typval_T *argvars, typval_T *rettv)
+static void f_tabpagenr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
char_u *arg;
@@ -16278,7 +17157,7 @@ static int get_winnr(tabpage_T *tp, typval_T *argvar)
/*
* "tabpagewinnr()" function
*/
-static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv)
+static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
tabpage_T *tp;
@@ -16295,7 +17174,7 @@ static void f_tabpagewinnr(typval_T *argvars, typval_T *rettv)
/*
* "tagfiles()" function
*/
-static void f_tagfiles(typval_T *argvars, typval_T *rettv)
+static void f_tagfiles(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *fname;
tagname_T tn;
@@ -16316,7 +17195,7 @@ static void f_tagfiles(typval_T *argvars, typval_T *rettv)
/*
* "taglist()" function
*/
-static void f_taglist(typval_T *argvars, typval_T *rettv)
+static void f_taglist(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *tag_pattern;
@@ -16332,14 +17211,14 @@ static void f_taglist(typval_T *argvars, typval_T *rettv)
/*
* "tempname()" function
*/
-static void f_tempname(typval_T *argvars, typval_T *rettv)
+static void f_tempname(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = vim_tempname();
}
// "termopen(cmd[, cwd])" function
-static void f_termopen(typval_T *argvars, typval_T *rettv)
+static void f_termopen(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (check_restricted() || check_secure()) {
return;
@@ -16351,8 +17230,10 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
}
char *cmd;
- char **argv = tv_to_argv(&argvars[0], &cmd);
+ bool executable = true;
+ char **argv = tv_to_argv(&argvars[0], &cmd, &executable);
if (!argv) {
+ rettv->vval.v_number = executable ? 0 : -1;
return; // Did error message in tv_to_argv.
}
@@ -16363,10 +17244,24 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
return;
}
- ufunc_T *on_stdout = NULL, *on_stderr = NULL, *on_exit = NULL;
+ Callback on_stdout = CALLBACK_NONE, on_stderr = CALLBACK_NONE,
+ on_exit = CALLBACK_NONE;
dict_T *job_opts = NULL;
+ char *cwd = ".";
if (argvars[1].v_type == VAR_DICT) {
job_opts = argvars[1].vval.v_dict;
+
+ char *new_cwd = (char *)get_dict_string(job_opts, "cwd", false);
+ if (new_cwd && strlen(new_cwd) > 0) {
+ cwd = new_cwd;
+ // The new cwd must be a directory.
+ if (!os_isdir((char_u *)cwd)) {
+ EMSG2(_(e_invarg2), "expected valid directory");
+ shell_free_argv(argv);
+ return;
+ }
+ }
+
if (!common_job_callbacks(job_opts, &on_stdout, &on_stderr, &on_exit)) {
shell_free_argv(argv);
return;
@@ -16374,7 +17269,7 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
}
TerminalJobData *data = common_job_init(argv, on_stdout, on_stderr, on_exit,
- job_opts, true, false);
+ true, false, false, cwd);
data->proc.pty.width = curwin->w_width;
data->proc.pty.height = curwin->w_height;
data->proc.pty.term_name = xstrdup("xterm-256color");
@@ -16389,11 +17284,6 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
topts.resize_cb = term_resize;
topts.close_cb = term_close;
- char *cwd = ".";
- if (argvars[1].v_type == VAR_STRING
- && os_isdir(argvars[1].vval.v_string)) {
- cwd = (char *)argvars[1].vval.v_string;
- }
int pid = data->proc.pty.process.pid;
char buf[1024];
@@ -16406,9 +17296,9 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
// Save the job id and pid in b:terminal_job_{id,pid}
Error err;
dict_set_value(curbuf->b_vars, cstr_as_string("terminal_job_id"),
- INTEGER_OBJ(rettv->vval.v_number), false, &err);
+ INTEGER_OBJ(rettv->vval.v_number), false, false, &err);
dict_set_value(curbuf->b_vars, cstr_as_string("terminal_job_pid"),
- INTEGER_OBJ(pid), false, &err);
+ INTEGER_OBJ(pid), false, false, &err);
Terminal *term = terminal_open(topts);
data->term = term;
@@ -16417,34 +17307,264 @@ static void f_termopen(typval_T *argvars, typval_T *rettv)
return;
}
-/*
- * "test(list)" function: Just checking the walls...
- */
-static void f_test(typval_T *argvars, typval_T *rettv)
+static bool callback_from_typval(Callback *callback, typval_T *arg)
{
- /* Used for unit testing. Change the code below to your liking. */
+ if (arg->v_type == VAR_PARTIAL && arg->vval.v_partial != NULL) {
+ callback->data.partial = arg->vval.v_partial;
+ callback->data.partial->pt_refcount++;
+ callback->type = kCallbackPartial;
+ } else if (arg->v_type == VAR_FUNC || arg->v_type == VAR_STRING) {
+ char_u *name = arg->vval.v_string;
+ func_ref(name);
+ callback->data.funcref = vim_strsave(name);
+ callback->type = kCallbackFuncref;
+ } else if (arg->v_type == VAR_NUMBER && arg->vval.v_number == 0) {
+ callback->type = kCallbackNone;
+ } else {
+ EMSG(_("E921: Invalid callback argument"));
+ return false;
+ }
+ return true;
}
-/*
- * "tan()" function
- */
-static void f_tan(typval_T *argvars, typval_T *rettv)
+
+/// Unref/free callback
+static void callback_free(Callback *callback)
{
- float_op_wrapper(argvars, rettv, &tan);
+ switch (callback->type) {
+ case kCallbackFuncref:
+ func_unref(callback->data.funcref);
+ xfree(callback->data.funcref);
+ break;
+
+ case kCallbackPartial:
+ partial_unref(callback->data.partial);
+ break;
+
+ case kCallbackNone:
+ break;
+
+ default:
+ abort();
+ }
+ callback->type = kCallbackNone;
}
-/*
- * "tanh()" function
- */
-static void f_tanh(typval_T *argvars, typval_T *rettv)
+static bool callback_equal(Callback *cb1, Callback *cb2)
+{
+ if (cb1->type != cb2->type) {
+ return false;
+ }
+ switch (cb1->type) {
+ case kCallbackFuncref:
+ return STRCMP(cb1->data.funcref, cb2->data.funcref) == 0;
+
+ case kCallbackPartial:
+ // FIXME: this is inconsistent with tv_equal but is needed for precision
+ // maybe change dictwatcheradd to return a watcher id instead?
+ return cb1->data.partial == cb2->data.partial;
+
+ case kCallbackNone:
+ return true;
+
+ default:
+ abort();
+ }
+}
+
+static bool callback_call(Callback *callback, int argcount_in,
+ typval_T *argvars_in, typval_T *rettv)
+{
+ partial_T *partial;
+ char_u *name;
+ switch (callback->type) {
+ case kCallbackFuncref:
+ name = callback->data.funcref;
+ partial = NULL;
+ break;
+
+ case kCallbackPartial:
+ partial = callback->data.partial;
+ name = partial->pt_name;
+ break;
+
+ case kCallbackNone:
+ return false;
+ break;
+
+ default:
+ abort();
+ }
+
+ int dummy;
+ return call_func(name, (int)STRLEN(name), rettv, argcount_in, argvars_in,
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum, &dummy,
+ true, partial, NULL);
+}
+
+static bool set_ref_in_callback(Callback *callback, int copyID,
+ ht_stack_T **ht_stack,
+ list_stack_T **list_stack)
+{
+ typval_T tv;
+ switch (callback->type) {
+ case kCallbackFuncref:
+ case kCallbackNone:
+ break;
+
+ case kCallbackPartial:
+ tv.v_type = VAR_PARTIAL;
+ tv.vval.v_partial = callback->data.partial;
+ return set_ref_in_item(&tv, copyID, ht_stack, list_stack);
+ break;
+
+
+ default:
+ abort();
+ }
+ return false;
+}
+
+
+/// "timer_start(timeout, callback, opts)" function
+static void f_timer_start(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
- float_op_wrapper(argvars, rettv, &tanh);
+ long timeout = get_tv_number(&argvars[0]);
+ timer_T *timer;
+ int repeat = 1;
+ dict_T *dict;
+
+ rettv->vval.v_number = -1;
+
+ if (argvars[2].v_type != VAR_UNKNOWN) {
+ if (argvars[2].v_type != VAR_DICT
+ || (dict = argvars[2].vval.v_dict) == NULL) {
+ EMSG2(_(e_invarg2), get_tv_string(&argvars[2]));
+ return;
+ }
+ if (dict_find(dict, (char_u *)"repeat", -1) != NULL) {
+ repeat = get_dict_number(dict, "repeat");
+ if (repeat == 0) {
+ repeat = 1;
+ }
+ }
+ }
+
+ Callback callback;
+ if (!callback_from_typval(&callback, &argvars[1])) {
+ return;
+ }
+
+ timer = xmalloc(sizeof *timer);
+ timer->refcount = 1;
+ timer->stopped = false;
+ timer->repeat_count = repeat;
+ timer->timeout = timeout;
+ timer->timer_id = last_timer_id++;
+ timer->callback = callback;
+
+ time_watcher_init(&main_loop, &timer->tw, timer);
+ timer->tw.events = multiqueue_new_child(main_loop.events);
+ // if main loop is blocked, don't queue up multiple events
+ timer->tw.blockable = true;
+ time_watcher_start(&timer->tw, timer_due_cb, timeout,
+ timeout * (repeat != 1));
+
+ pmap_put(uint64_t)(timers, timer->timer_id, timer);
+ rettv->vval.v_number = timer->timer_id;
+}
+
+
+// "timer_stop(timerid)" function
+static void f_timer_stop(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ if (argvars[0].v_type != VAR_NUMBER) {
+ EMSG(_(e_number_exp));
+ return;
+ }
+
+ timer_T *timer = pmap_get(uint64_t)(timers, get_tv_number(&argvars[0]));
+
+ if (timer == NULL) {
+ return;
+ }
+
+ timer_stop(timer);
+}
+
+// invoked on the main loop
+static void timer_due_cb(TimeWatcher *tw, void *data)
+{
+ timer_T *timer = (timer_T *)data;
+ if (timer->stopped) {
+ return;
+ }
+ timer->refcount++;
+ // if repeat was negative repeat forever
+ if (timer->repeat_count >= 0 && --timer->repeat_count == 0) {
+ timer_stop(timer);
+ }
+
+ typval_T argv[2];
+ init_tv(argv);
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].vval.v_number = timer->timer_id;
+ typval_T rettv;
+
+ init_tv(&rettv);
+ callback_call(&timer->callback, 1, argv, &rettv);
+ clear_tv(&rettv);
+
+ if (!timer->stopped && timer->timeout == 0) {
+ // special case: timeout=0 means the callback will be
+ // invoked again on the next event loop tick.
+ // we don't use uv_idle_t to not spin the event loop
+ // when the main loop is blocked.
+ time_watcher_start(&timer->tw, timer_due_cb, 0, 0);
+ }
+ timer_decref(timer);
+}
+
+static void timer_stop(timer_T *timer)
+{
+ if (timer->stopped) {
+ // avoid double free
+ return;
+ }
+ timer->stopped = true;
+ time_watcher_stop(&timer->tw);
+ time_watcher_close(&timer->tw, timer_close_cb);
+}
+
+// invoked on next event loop tick, so queue is empty
+static void timer_close_cb(TimeWatcher *tw, void *data)
+{
+ timer_T *timer = (timer_T *)data;
+ multiqueue_free(timer->tw.events);
+ callback_free(&timer->callback);
+ pmap_del(uint64_t)(timers, timer->timer_id);
+ timer_decref(timer);
+}
+
+static void timer_decref(timer_T *timer)
+{
+ if (--timer->refcount == 0) {
+ xfree(timer);
+ }
+}
+
+void timer_teardown(void)
+{
+ timer_T *timer;
+ map_foreach_value(timers, timer, {
+ timer_stop(timer);
+ })
}
/*
* "tolower(string)" function
*/
-static void f_tolower(typval_T *argvars, typval_T *rettv)
+static void f_tolower(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *p = vim_strsave(get_tv_string(&argvars[0]));
rettv->v_type = VAR_STRING;
@@ -16475,7 +17595,7 @@ static void f_tolower(typval_T *argvars, typval_T *rettv)
/*
* "toupper(string)" function
*/
-static void f_toupper(typval_T *argvars, typval_T *rettv)
+static void f_toupper(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
rettv->vval.v_string = strup_save(get_tv_string(&argvars[0]));
@@ -16484,7 +17604,7 @@ static void f_toupper(typval_T *argvars, typval_T *rettv)
/*
* "tr(string, fromstr, tostr)" function
*/
-static void f_tr(typval_T *argvars, typval_T *rettv)
+static void f_tr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u *in_str;
char_u *fromstr;
@@ -16582,32 +17702,25 @@ error:
}
/*
- * "trunc({float})" function
- */
-static void f_trunc(typval_T *argvars, typval_T *rettv)
-{
- float_op_wrapper(argvars, rettv, &trunc);
-}
-
-/*
* "type(expr)" function
*/
-static void f_type(typval_T *argvars, typval_T *rettv)
+static void f_type(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int n = -1;
switch (argvars[0].v_type) {
- case VAR_NUMBER: n = 0; break;
- case VAR_STRING: n = 1; break;
- case VAR_FUNC: n = 2; break;
- case VAR_LIST: n = 3; break;
- case VAR_DICT: n = 4; break;
- case VAR_FLOAT: n = 5; break;
+ case VAR_NUMBER: n = VAR_TYPE_NUMBER; break;
+ case VAR_STRING: n = VAR_TYPE_STRING; break;
+ case VAR_PARTIAL:
+ case VAR_FUNC: n = VAR_TYPE_FUNC; break;
+ case VAR_LIST: n = VAR_TYPE_LIST; break;
+ case VAR_DICT: n = VAR_TYPE_DICT; break;
+ case VAR_FLOAT: n = VAR_TYPE_FLOAT; break;
case VAR_SPECIAL: {
switch (argvars[0].vval.v_special) {
case kSpecialVarTrue:
case kSpecialVarFalse: {
- n = 6;
+ n = VAR_TYPE_BOOL;
break;
}
case kSpecialVarNull: {
@@ -16628,7 +17741,7 @@ static void f_type(typval_T *argvars, typval_T *rettv)
/*
* "undofile(name)" function
*/
-static void f_undofile(typval_T *argvars, typval_T *rettv)
+static void f_undofile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->v_type = VAR_STRING;
{
@@ -16651,7 +17764,7 @@ static void f_undofile(typval_T *argvars, typval_T *rettv)
/*
* "undotree()" function
*/
-static void f_undotree(typval_T *argvars, typval_T *rettv)
+static void f_undotree(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
@@ -16674,7 +17787,7 @@ static void f_undotree(typval_T *argvars, typval_T *rettv)
/*
* "values(dict)" function
*/
-static void f_values(typval_T *argvars, typval_T *rettv)
+static void f_values(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_list(argvars, rettv, 1);
}
@@ -16682,7 +17795,7 @@ static void f_values(typval_T *argvars, typval_T *rettv)
/*
* "virtcol(string)" function
*/
-static void f_virtcol(typval_T *argvars, typval_T *rettv)
+static void f_virtcol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
colnr_T vcol = 0;
pos_T *fp;
@@ -16701,7 +17814,7 @@ static void f_virtcol(typval_T *argvars, typval_T *rettv)
/*
* "visualmode()" function
*/
-static void f_visualmode(typval_T *argvars, typval_T *rettv)
+static void f_visualmode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
char_u str[2];
@@ -16718,16 +17831,48 @@ static void f_visualmode(typval_T *argvars, typval_T *rettv)
/*
* "wildmenumode()" function
*/
-static void f_wildmenumode(typval_T *argvars, typval_T *rettv)
+static void f_wildmenumode(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
if (wild_menu_showing)
rettv->vval.v_number = 1;
}
+/// "win_findbuf()" function
+static void f_win_findbuf(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv_list_alloc(rettv);
+ win_findbuf(argvars, rettv->vval.v_list);
+}
+
+/// "win_getid()" function
+static void f_win_getid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_getid(argvars);
+}
+
+/// "win_gotoid()" function
+static void f_win_gotoid(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_gotoid(argvars);
+}
+
+/// "win_id2tabwin()" function
+static void f_win_id2tabwin(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv_list_alloc(rettv);
+ win_id2tabwin(argvars, rettv->vval.v_list);
+}
+
+/// "win_id2win()" function
+static void f_win_id2win(typval_T *argvars, typval_T *rettv, FunPtr fptr)
+{
+ rettv->vval.v_number = win_id2win(argvars);
+}
+
/*
* "winbufnr(nr)" function
*/
-static void f_winbufnr(typval_T *argvars, typval_T *rettv)
+static void f_winbufnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -16741,7 +17886,7 @@ static void f_winbufnr(typval_T *argvars, typval_T *rettv)
/*
* "wincol()" function
*/
-static void f_wincol(typval_T *argvars, typval_T *rettv)
+static void f_wincol(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
validate_cursor();
rettv->vval.v_number = curwin->w_wcol + 1;
@@ -16750,7 +17895,7 @@ static void f_wincol(typval_T *argvars, typval_T *rettv)
/*
* "winheight(nr)" function
*/
-static void f_winheight(typval_T *argvars, typval_T *rettv)
+static void f_winheight(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -16764,7 +17909,7 @@ static void f_winheight(typval_T *argvars, typval_T *rettv)
/*
* "winline()" function
*/
-static void f_winline(typval_T *argvars, typval_T *rettv)
+static void f_winline(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
validate_cursor();
rettv->vval.v_number = curwin->w_wrow + 1;
@@ -16773,7 +17918,7 @@ static void f_winline(typval_T *argvars, typval_T *rettv)
/*
* "winnr()" function
*/
-static void f_winnr(typval_T *argvars, typval_T *rettv)
+static void f_winnr(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int nr = 1;
@@ -16784,7 +17929,7 @@ static void f_winnr(typval_T *argvars, typval_T *rettv)
/*
* "winrestcmd()" function
*/
-static void f_winrestcmd(typval_T *argvars, typval_T *rettv)
+static void f_winrestcmd(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
int winnr = 1;
garray_T ga;
@@ -16807,7 +17952,7 @@ static void f_winrestcmd(typval_T *argvars, typval_T *rettv)
/*
* "winrestview()" function
*/
-static void f_winrestview(typval_T *argvars, typval_T *rettv)
+static void f_winrestview(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *dict;
@@ -16816,29 +17961,29 @@ static void f_winrestview(typval_T *argvars, typval_T *rettv)
EMSG(_(e_invarg));
else {
if (dict_find(dict, (char_u *)"lnum", -1) != NULL) {
- curwin->w_cursor.lnum = get_dict_number(dict, (char_u *)"lnum");
+ curwin->w_cursor.lnum = get_dict_number(dict, "lnum");
}
if (dict_find(dict, (char_u *)"col", -1) != NULL) {
- curwin->w_cursor.col = get_dict_number(dict, (char_u *)"col");
+ curwin->w_cursor.col = get_dict_number(dict, "col");
}
if (dict_find(dict, (char_u *)"coladd", -1) != NULL) {
- curwin->w_cursor.coladd = get_dict_number(dict, (char_u *)"coladd");
+ curwin->w_cursor.coladd = get_dict_number(dict, "coladd");
}
if (dict_find(dict, (char_u *)"curswant", -1) != NULL) {
- curwin->w_curswant = get_dict_number(dict, (char_u *)"curswant");
- curwin->w_set_curswant = FALSE;
+ curwin->w_curswant = get_dict_number(dict, "curswant");
+ curwin->w_set_curswant = false;
}
if (dict_find(dict, (char_u *)"topline", -1) != NULL) {
- set_topline(curwin, get_dict_number(dict, (char_u *)"topline"));
+ set_topline(curwin, get_dict_number(dict, "topline"));
}
if (dict_find(dict, (char_u *)"topfill", -1) != NULL) {
- curwin->w_topfill = get_dict_number(dict, (char_u *)"topfill");
+ curwin->w_topfill = get_dict_number(dict, "topfill");
}
if (dict_find(dict, (char_u *)"leftcol", -1) != NULL) {
- curwin->w_leftcol = get_dict_number(dict, (char_u *)"leftcol");
+ curwin->w_leftcol = get_dict_number(dict, "leftcol");
}
if (dict_find(dict, (char_u *)"skipcol", -1) != NULL) {
- curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+ curwin->w_skipcol = get_dict_number(dict, "skipcol");
}
check_cursor();
@@ -16857,7 +18002,7 @@ static void f_winrestview(typval_T *argvars, typval_T *rettv)
/*
* "winsaveview()" function
*/
-static void f_winsaveview(typval_T *argvars, typval_T *rettv)
+static void f_winsaveview(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
dict_T *dict;
@@ -16961,7 +18106,7 @@ static char_u *save_tv_as_string(typval_T *tv, ssize_t *len, bool endnl)
/*
* "winwidth(nr)" function
*/
-static void f_winwidth(typval_T *argvars, typval_T *rettv)
+static void f_winwidth(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
win_T *wp;
@@ -16973,14 +18118,14 @@ static void f_winwidth(typval_T *argvars, typval_T *rettv)
}
/// "wordcount()" function
-static void f_wordcount(typval_T *argvars, typval_T *rettv)
+static void f_wordcount(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv_dict_alloc(rettv);
cursor_pos_info(rettv->vval.v_dict);
}
/// "writefile()" function
-static void f_writefile(typval_T *argvars, typval_T *rettv)
+static void f_writefile(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = 0; // Assuming success.
@@ -17025,7 +18170,7 @@ static void f_writefile(typval_T *argvars, typval_T *rettv)
/*
* "xor(expr, expr)" function
*/
-static void f_xor(typval_T *argvars, typval_T *rettv)
+static void f_xor(typval_T *argvars, typval_T *rettv, FunPtr fptr)
{
rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
^ get_tv_number_chk(&argvars[1], NULL);
@@ -17519,6 +18664,8 @@ void set_vcount(long count, long count1, int set_prevcount)
/// @param[in] val Value to set to.
void set_vim_var_nr(const VimVarIndex idx, const varnumber_T val)
{
+ clear_tv(&vimvars[idx].vv_tv);
+ vimvars[idx].vv_type = VAR_NUMBER;
vimvars[idx].vv_nr = val;
}
@@ -17528,6 +18675,8 @@ void set_vim_var_nr(const VimVarIndex idx, const varnumber_T val)
/// @param[in] val Value to set to.
void set_vim_var_special(const VimVarIndex idx, const SpecialVarValue val)
{
+ clear_tv(&vimvars[idx].vv_tv);
+ vimvars[idx].vv_type = VAR_SPECIAL;
vimvars[idx].vv_special = val;
}
@@ -17540,7 +18689,8 @@ void set_vim_var_special(const VimVarIndex idx, const SpecialVarValue val)
void set_vim_var_string(const VimVarIndex idx, const char *const val,
const ptrdiff_t len)
{
- xfree(vimvars[idx].vv_str);
+ clear_tv(&vimvars[idx].vv_di.di_tv);
+ vimvars[idx].vv_type = VAR_STRING;
if (val == NULL) {
vimvars[idx].vv_str = NULL;
} else if (len == -1) {
@@ -17556,7 +18706,8 @@ void set_vim_var_string(const VimVarIndex idx, const char *const val,
/// @param[in,out] val Value to set to. Reference count will be incremented.
void set_vim_var_list(const VimVarIndex idx, list_T *const val)
{
- list_unref(vimvars[idx].vv_list);
+ clear_tv(&vimvars[idx].vv_di.di_tv);
+ vimvars[idx].vv_type = VAR_LIST;
vimvars[idx].vv_list = val;
if (val != NULL) {
val->lv_refcount++;
@@ -17570,7 +18721,8 @@ void set_vim_var_list(const VimVarIndex idx, list_T *const val)
/// Also keys of the dictionary will be made read-only.
void set_vim_var_dict(const VimVarIndex idx, dict_T *const val)
{
- dict_unref(vimvars[idx].vv_dict);
+ clear_tv(&vimvars[idx].vv_di.di_tv);
+ vimvars[idx].vv_type = VAR_DICT;
vimvars[idx].vv_dict = val;
if (val != NULL) {
@@ -17769,21 +18921,29 @@ handle_subscript (
while (ret == OK
&& (**arg == '['
|| (**arg == '.' && rettv->v_type == VAR_DICT)
- || (**arg == '(' && (!evaluate || rettv->v_type == VAR_FUNC)))
+ || (**arg == '(' && (!evaluate || rettv->v_type == VAR_FUNC
+ || rettv->v_type == VAR_PARTIAL)))
&& !ascii_iswhite(*(*arg - 1))) {
if (**arg == '(') {
- /* need to copy the funcref so that we can clear rettv */
+ partial_T *pt = NULL;
+ // need to copy the funcref so that we can clear rettv
if (evaluate) {
functv = *rettv;
rettv->v_type = VAR_UNKNOWN;
- /* Invoke the function. Recursive! */
- s = functv.vval.v_string;
- } else
+ // Invoke the function. Recursive!
+ if (functv.v_type == VAR_PARTIAL) {
+ pt = functv.vval.v_partial;
+ s = pt->pt_name;
+ } else {
+ s = functv.vval.v_string;
+ }
+ } else {
s = (char_u *)"";
+ }
ret = get_func_tv(s, (int)STRLEN(s), rettv, arg,
- curwin->w_cursor.lnum, curwin->w_cursor.lnum,
- &len, evaluate, selfdict);
+ curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ &len, evaluate, pt, selfdict);
/* Clear the funcref afterwards, so that deleting it while
* evaluating the arguments is possible (see test55). */
@@ -17814,10 +18974,82 @@ handle_subscript (
}
}
}
+
+ // Turn "dict.Func" into a partial for "Func" bound to "dict".
+ if (selfdict != NULL
+ && (rettv->v_type == VAR_FUNC
+ || rettv->v_type == VAR_PARTIAL)) {
+ set_selfdict(rettv, selfdict);
+ }
+
dict_unref(selfdict);
return ret;
}
+static void set_selfdict(typval_T *rettv, dict_T *selfdict)
+{
+ // Don't do this when "dict.Func" is already a partial that was bound
+ // explicitly (pt_auto is false).
+ if (rettv->v_type == VAR_PARTIAL && !rettv->vval.v_partial->pt_auto
+ && rettv->vval.v_partial->pt_dict != NULL) {
+ return;
+ }
+ char_u *fname = rettv->v_type == VAR_FUNC || rettv->v_type == VAR_STRING
+ ? rettv->vval.v_string
+ : rettv->vval.v_partial->pt_name;
+ char_u *tofree = NULL;
+ ufunc_T *fp;
+ char_u fname_buf[FLEN_FIXED + 1];
+ int error;
+
+ // Translate "s:func" to the stored function name.
+ fname = fname_trans_sid(fname, fname_buf, &tofree, &error);
+
+ fp = find_func(fname);
+ xfree(tofree);
+
+ // Turn "dict.Func" into a partial for "Func" with "dict".
+ if (fp != NULL && (fp->uf_flags & FC_DICT)) {
+ partial_T *pt = (partial_T *)xcalloc(1, sizeof(partial_T));
+
+ if (pt != NULL) {
+ pt->pt_refcount = 1;
+ pt->pt_dict = selfdict;
+ (selfdict->dv_refcount)++;
+ pt->pt_auto = true;
+ if (rettv->v_type == VAR_FUNC || rettv->v_type == VAR_STRING) {
+ // Just a function: Take over the function name and use selfdict.
+ pt->pt_name = rettv->vval.v_string;
+ } else {
+ partial_T *ret_pt = rettv->vval.v_partial;
+ int i;
+
+ // Partial: copy the function name, use selfdict and copy
+ // args. Can't take over name or args, the partial might
+ // be referenced elsewhere.
+ pt->pt_name = vim_strsave(ret_pt->pt_name);
+ func_ref(pt->pt_name);
+ if (ret_pt->pt_argc > 0) {
+ size_t arg_size = sizeof(typval_T) * ret_pt->pt_argc;
+ pt->pt_argv = (typval_T *)xmalloc(arg_size);
+ if (pt->pt_argv == NULL) {
+ // out of memory: drop the arguments
+ pt->pt_argc = 0;
+ } else {
+ pt->pt_argc = ret_pt->pt_argc;
+ for (i = 0; i < pt->pt_argc; i++) {
+ copy_tv(&ret_pt->pt_argv[i], &pt->pt_argv[i]);
+ }
+ }
+ }
+ partial_unref(ret_pt);
+ }
+ rettv->v_type = VAR_PARTIAL;
+ rettv->vval.v_partial = pt;
+ }
+ }
+}
+
/*
* Free the memory for a variable type-value.
*/
@@ -17831,6 +19063,9 @@ void free_tv(typval_T *varp)
case VAR_STRING:
xfree(varp->vval.v_string);
break;
+ case VAR_PARTIAL:
+ partial_unref(varp->vval.v_partial);
+ break;
case VAR_LIST:
list_unref(varp->vval.v_list);
break;
@@ -17847,45 +19082,244 @@ void free_tv(typval_T *varp)
}
}
-/*
- * Free the memory for a variable value and set the value to NULL or 0.
- */
-void clear_tv(typval_T *varp)
+#define TYPVAL_ENCODE_ALLOW_SPECIALS false
+
+#define TYPVAL_ENCODE_CONV_NIL(tv) \
+ do { \
+ tv->vval.v_special = kSpecialVarFalse; \
+ tv->v_lock = VAR_UNLOCKED; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_BOOL(tv, num) \
+ TYPVAL_ENCODE_CONV_NIL(tv)
+
+#define TYPVAL_ENCODE_CONV_NUMBER(tv, num) \
+ do { \
+ (void)num; \
+ tv->vval.v_number = 0; \
+ tv->v_lock = VAR_UNLOCKED; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER(tv, num)
+
+#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
+ do { \
+ tv->vval.v_float = 0; \
+ tv->v_lock = VAR_UNLOCKED; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_STRING(tv, buf, len) \
+ do { \
+ xfree(buf); \
+ tv->vval.v_string = NULL; \
+ tv->v_lock = VAR_UNLOCKED; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_STR_STRING(tv, buf, len)
+
+#define TYPVAL_ENCODE_CONV_EXT_STRING(tv, buf, len, type)
+
+static inline int _nothing_conv_func_start(typval_T *const tv,
+ char_u *const fun)
+ FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ARG(1)
{
- if (varp != NULL) {
- switch (varp->v_type) {
- case VAR_FUNC:
- func_unref(varp->vval.v_string);
- if (varp->vval.v_string != empty_string) {
- xfree(varp->vval.v_string);
- }
- varp->vval.v_string = NULL;
- break;
- case VAR_STRING:
- xfree(varp->vval.v_string);
- varp->vval.v_string = NULL;
- break;
- case VAR_LIST:
- list_unref(varp->vval.v_list);
- varp->vval.v_list = NULL;
- break;
- case VAR_DICT:
- dict_unref(varp->vval.v_dict);
- varp->vval.v_dict = NULL;
- break;
- case VAR_NUMBER:
- varp->vval.v_number = 0;
- break;
- case VAR_FLOAT:
- varp->vval.v_float = 0.0;
- break;
- case VAR_SPECIAL:
- varp->vval.v_special = kSpecialVarFalse;
- break;
- case VAR_UNKNOWN:
- break;
+ tv->v_lock = VAR_UNLOCKED;
+ if (tv->v_type == VAR_PARTIAL) {
+ partial_T *const pt_ = tv->vval.v_partial;
+ if (pt_ != NULL && pt_->pt_refcount > 1) {
+ pt_->pt_refcount--;
+ tv->vval.v_partial = NULL;
+ return OK;
+ }
+ } else {
+ func_unref(fun);
+ if (fun != empty_string) {
+ xfree(fun);
}
- varp->v_lock = 0;
+ tv->vval.v_string = NULL;
+ }
+ return NOTDONE;
+}
+#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
+ do { \
+ if (_nothing_conv_func_start(tv, fun) != NOTDONE) { \
+ return OK; \
+ } \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, len)
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, len)
+
+static inline void _nothing_conv_func_end(typval_T *const tv, const int copyID)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL
+{
+ if (tv->v_type == VAR_PARTIAL) {
+ partial_T *const pt = tv->vval.v_partial;
+ if (pt == NULL) {
+ return;
+ }
+ // Dictionary should already be freed by the time.
+ // If it was not freed then it is a part of the reference cycle.
+ assert(pt->pt_dict == NULL || pt->pt_dict->dv_copyID == copyID);
+ pt->pt_dict = NULL;
+ // As well as all arguments.
+ pt->pt_argc = 0;
+ assert(pt->pt_refcount <= 1);
+ partial_unref(pt);
+ tv->vval.v_partial = NULL;
+ assert(tv->v_lock == VAR_UNLOCKED);
+ }
+}
+#define TYPVAL_ENCODE_CONV_FUNC_END(tv) _nothing_conv_func_end(tv, copyID)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_LIST(tv) \
+ do { \
+ list_unref(tv->vval.v_list); \
+ tv->vval.v_list = NULL; \
+ tv->v_lock = VAR_UNLOCKED; \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, dict) \
+ do { \
+ assert((void *)&dict != (void *)&TYPVAL_ENCODE_NODICT_VAR); \
+ dict_unref((dict_T *)dict); \
+ *((dict_T **)&dict) = NULL; \
+ if (tv != NULL) { \
+ ((typval_T *)tv)->v_lock = VAR_UNLOCKED; \
+ } \
+ } while (0)
+
+static inline int _nothing_conv_real_list_after_start(
+ typval_T *const tv, MPConvStackVal *const mpsv)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ assert(tv != NULL);
+ tv->v_lock = VAR_UNLOCKED;
+ if (tv->vval.v_list->lv_refcount > 1) {
+ tv->vval.v_list->lv_refcount--;
+ tv->vval.v_list = NULL;
+ mpsv->data.l.li = NULL;
+ return OK;
+ }
+ return NOTDONE;
+}
+#define TYPVAL_ENCODE_CONV_LIST_START(tv, len)
+
+#define TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, mpsv) \
+ do { \
+ if (_nothing_conv_real_list_after_start(tv, &mpsv) != NOTDONE) { \
+ goto typval_encode_stop_converting_one_item; \
+ } \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(tv)
+
+static inline void _nothing_conv_list_end(typval_T *const tv)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ if (tv == NULL) {
+ return;
+ }
+ assert(tv->v_type == VAR_LIST);
+ list_T *const list = tv->vval.v_list;
+ list_unref(list);
+ tv->vval.v_list = NULL;
+}
+#define TYPVAL_ENCODE_CONV_LIST_END(tv) _nothing_conv_list_end(tv)
+
+static inline int _nothing_conv_real_dict_after_start(
+ typval_T *const tv, dict_T **const dictp, const void *const nodictvar,
+ MPConvStackVal *const mpsv)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (tv != NULL) {
+ tv->v_lock = VAR_UNLOCKED;
+ }
+ if ((const void *)dictp != nodictvar && (*dictp)->dv_refcount > 1) {
+ (*dictp)->dv_refcount--;
+ *dictp = NULL;
+ mpsv->data.d.todo = 0;
+ return OK;
+ }
+ return NOTDONE;
+}
+#define TYPVAL_ENCODE_CONV_DICT_START(tv, dict, len)
+
+#define TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, dict, mpsv) \
+ do { \
+ if (_nothing_conv_real_dict_after_start( \
+ tv, (dict_T **)&dict, (void *)&TYPVAL_ENCODE_NODICT_VAR, \
+ &mpsv) != NOTDONE) { \
+ goto typval_encode_stop_converting_one_item; \
+ } \
+ } while (0)
+
+#define TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(tv, dict)
+#define TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(tv, dict)
+#define TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, dict)
+
+static inline void _nothing_conv_dict_end(typval_T *const tv,
+ dict_T **const dictp,
+ const void *const nodictvar)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ if ((const void *)dictp != nodictvar) {
+ dict_unref(*dictp);
+ *dictp = NULL;
+ }
+}
+#define TYPVAL_ENCODE_CONV_DICT_END(tv, dict) \
+ _nothing_conv_dict_end(tv, (dict_T **)&dict, \
+ (void *)&TYPVAL_ENCODE_NODICT_VAR)
+
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type)
+
+#define TYPVAL_ENCODE_SCOPE static
+#define TYPVAL_ENCODE_NAME nothing
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE const void *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME ignored
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
+
+#undef TYPVAL_ENCODE_ALLOW_SPECIALS
+#undef TYPVAL_ENCODE_CONV_NIL
+#undef TYPVAL_ENCODE_CONV_BOOL
+#undef TYPVAL_ENCODE_CONV_NUMBER
+#undef TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+#undef TYPVAL_ENCODE_CONV_FLOAT
+#undef TYPVAL_ENCODE_CONV_STRING
+#undef TYPVAL_ENCODE_CONV_STR_STRING
+#undef TYPVAL_ENCODE_CONV_EXT_STRING
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+#undef TYPVAL_ENCODE_CONV_FUNC_END
+#undef TYPVAL_ENCODE_CONV_EMPTY_LIST
+#undef TYPVAL_ENCODE_CONV_EMPTY_DICT
+#undef TYPVAL_ENCODE_CONV_LIST_START
+#undef TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START
+#undef TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_CONV_LIST_END
+#undef TYPVAL_ENCODE_CONV_DICT_START
+#undef TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START
+#undef TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+#undef TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
+#undef TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_CONV_DICT_END
+#undef TYPVAL_ENCODE_CONV_RECURSE
+
+/// Free memory for a variable value and set the value to NULL or 0
+///
+/// @param[in,out] varp Value to free.
+void clear_tv(typval_T *varp)
+{
+ if (varp != NULL && varp->v_type != VAR_UNKNOWN) {
+ const int evn_ret = encode_vim_to_nothing(varp, varp, "clear_tv argument");
+ (void)evn_ret;
+ assert(evn_ret == OK);
}
}
@@ -17906,7 +19340,7 @@ static void init_tv(typval_T *varp)
* caller of incompatible types: it sets *denote to TRUE if "denote"
* is not NULL or returns -1 otherwise.
*/
-static long get_tv_number(typval_T *varp)
+long get_tv_number(typval_T *varp)
{
int error = FALSE;
@@ -17924,6 +19358,7 @@ long get_tv_number_chk(typval_T *varp, int *denote)
EMSG(_("E805: Using a Float as a Number"));
break;
case VAR_FUNC:
+ case VAR_PARTIAL:
EMSG(_("E703: Using a Funcref as a Number"));
break;
case VAR_STRING:
@@ -17971,6 +19406,7 @@ static float_T get_tv_float(typval_T *varp)
return varp->vval.v_float;
break;
case VAR_FUNC:
+ case VAR_PARTIAL:
EMSG(_("E891: Using a Funcref as a Float"));
break;
case VAR_STRING:
@@ -18002,7 +19438,7 @@ static linenr_T get_tv_lnum(typval_T *argvars)
lnum = get_tv_number_chk(&argvars[0], NULL);
if (lnum == 0) { /* no valid number, try using line() */
rettv.v_type = VAR_NUMBER;
- f_line(argvars, &rettv);
+ f_line(argvars, &rettv, NULL);
lnum = rettv.vval.v_number;
clear_tv(&rettv);
}
@@ -18067,6 +19503,7 @@ static char_u *get_tv_string_buf_chk(const typval_T *varp, char_u *buf)
sprintf((char *)buf, "%" PRId64, (int64_t)varp->vval.v_number);
return buf;
case VAR_FUNC:
+ case VAR_PARTIAL:
EMSG(_("E729: using Funcref as a String"));
break;
case VAR_LIST:
@@ -18112,11 +19549,10 @@ static dictitem_T *find_var(char_u *name, hashtab_T **htp, int no_autoload)
return find_var_in_ht(ht, *name, varname, no_autoload || htp != NULL);
}
-/*
- * Find variable "varname" in hashtab "ht" with name "htname".
- * Returns NULL if not found.
- */
-static dictitem_T *find_var_in_ht(hashtab_T *ht, int htname, char_u *varname, int no_autoload)
+/// Find variable "varname" in hashtab "ht" with name "htname".
+/// Returns NULL if not found.
+static dictitem_T *find_var_in_ht(hashtab_T *ht, int htname,
+ char_u *varname, bool no_autoload)
{
hashitem_T *hi;
@@ -18402,11 +19838,11 @@ list_one_var_a (
msg_puts(name);
msg_putchar(' ');
msg_advance(22);
- if (type == VAR_NUMBER)
+ if (type == VAR_NUMBER) {
msg_putchar('#');
- else if (type == VAR_FUNC)
+ } else if (type == VAR_FUNC || type == VAR_PARTIAL) {
msg_putchar('*');
- else if (type == VAR_LIST) {
+ } else if (type == VAR_LIST) {
msg_putchar('[');
if (*string == '[')
++string;
@@ -18419,8 +19855,9 @@ list_one_var_a (
msg_outtrans(string);
- if (type == VAR_FUNC)
+ if (type == VAR_FUNC || type == VAR_PARTIAL) {
msg_puts((char_u *)"()");
+ }
if (*first) {
msg_clr_eos();
*first = FALSE;
@@ -18458,8 +19895,10 @@ set_var (
}
v = find_var_in_ht(ht, 0, varname, TRUE);
- if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
+ if ((tv->v_type == VAR_FUNC || tv->v_type == VAR_PARTIAL)
+ && var_check_func_name(name, v == NULL)) {
return;
+ }
if (v != NULL) {
// existing variable, need to clear the value
@@ -18467,19 +19906,6 @@ set_var (
|| tv_check_lock(v->di_tv.v_lock, name, false)) {
return;
}
- if (v->di_tv.v_type != tv->v_type
- && !((v->di_tv.v_type == VAR_STRING
- || v->di_tv.v_type == VAR_NUMBER)
- && (tv->v_type == VAR_STRING
- || tv->v_type == VAR_NUMBER))
- && !((v->di_tv.v_type == VAR_NUMBER
- || v->di_tv.v_type == VAR_FLOAT)
- && (tv->v_type == VAR_NUMBER
- || tv->v_type == VAR_FLOAT))
- ) {
- EMSG2(_("E706: Variable type mismatch for: %s"), name);
- return;
- }
// Handle setting internal v: variables separately where needed to
// prevent changing the type.
@@ -18489,7 +19915,7 @@ set_var (
if (copy || tv->v_type != VAR_STRING)
v->di_tv.vval.v_string = vim_strsave(get_tv_string(tv));
else {
- /* Take over the string to avoid an extra alloc/free. */
+ // Take over the string to avoid an extra alloc/free.
v->di_tv.vval.v_string = tv->vval.v_string;
tv->vval.v_string = NULL;
}
@@ -18672,6 +20098,14 @@ void copy_tv(typval_T *from, typval_T *to)
}
}
break;
+ case VAR_PARTIAL:
+ if (from->vval.v_partial == NULL) {
+ to->vval.v_partial = NULL;
+ } else {
+ to->vval.v_partial = from->vval.v_partial;
+ (to->vval.v_partial->pt_refcount)++;
+ }
+ break;
case VAR_LIST:
if (from->vval.v_list != NULL) {
to->vval.v_list->lv_refcount++;
@@ -18724,6 +20158,7 @@ int var_item_copy(const vimconv_T *const conv,
case VAR_NUMBER:
case VAR_FLOAT:
case VAR_FUNC:
+ case VAR_PARTIAL:
case VAR_SPECIAL:
copy_tv(from, to);
break;
@@ -19083,7 +20518,7 @@ void ex_function(exarg_T *eap)
// s:func script-local function name
// g:func global function name, same as "func"
p = eap->arg;
- name = trans_function_name(&p, eap->skip, 0, &fudi);
+ name = trans_function_name(&p, eap->skip, 0, &fudi, NULL);
paren = (vim_strchr(p, '(') != NULL);
if (name == NULL && (fudi.fd_dict == NULL || !paren) && !eap->skip) {
/*
@@ -19169,7 +20604,8 @@ void ex_function(exarg_T *eap)
else
arg = fudi.fd_newkey;
if (arg != NULL && (fudi.fd_di == NULL
- || fudi.fd_di->di_tv.v_type != VAR_FUNC)) {
+ || (fudi.fd_di->di_tv.v_type != VAR_FUNC
+ && fudi.fd_di->di_tv.v_type != VAR_PARTIAL))) {
int j = (*arg == K_SPECIAL) ? 3 : 0;
while (arg[j] != NUL && (j == 0 ? eval_isnamec1(arg[j])
: eval_isnamec(arg[j])))
@@ -19350,7 +20786,7 @@ void ex_function(exarg_T *eap)
p = skipwhite(p + 1);
}
p += eval_fname_script(p);
- xfree(trans_function_name(&p, TRUE, 0, NULL));
+ xfree(trans_function_name(&p, true, 0, NULL, NULL));
if (*skipwhite(p) == '(') {
nesting++;
indent += 2;
@@ -19568,7 +21004,8 @@ trans_function_name (
char_u **pp,
int skip, /* only find the end, don't evaluate */
int flags,
- funcdict_T *fdp /* return: info about dictionary used */
+ funcdict_T *fdp, // return: info about dictionary used
+ partial_T **partial // return: partial of a FuncRef
)
{
char_u *name = NULL;
@@ -19630,6 +21067,13 @@ trans_function_name (
if (lv.ll_tv->v_type == VAR_FUNC && lv.ll_tv->vval.v_string != NULL) {
name = vim_strsave(lv.ll_tv->vval.v_string);
*pp = end;
+ } else if (lv.ll_tv->v_type == VAR_PARTIAL
+ && lv.ll_tv->vval.v_partial != NULL) {
+ name = vim_strsave(lv.ll_tv->vval.v_partial->pt_name);
+ *pp = end;
+ if (partial != NULL) {
+ *partial = lv.ll_tv->vval.v_partial;
+ }
} else {
if (!skip && !(flags & TFN_QUIET) && (fdp == NULL
|| lv.ll_dict == NULL
@@ -19652,14 +21096,17 @@ trans_function_name (
/* Check if the name is a Funcref. If so, use the value. */
if (lv.ll_exp_name != NULL) {
len = (int)STRLEN(lv.ll_exp_name);
- name = deref_func_name(lv.ll_exp_name, &len, flags & TFN_NO_AUTOLOAD);
- if (name == lv.ll_exp_name)
+ name = deref_func_name(lv.ll_exp_name, &len, partial,
+ flags & TFN_NO_AUTOLOAD);
+ if (name == lv.ll_exp_name) {
name = NULL;
+ }
} else {
len = (int)(end - *pp);
- name = deref_func_name(*pp, &len, flags & TFN_NO_AUTOLOAD);
- if (name == *pp)
+ name = deref_func_name(*pp, &len, partial, flags & TFN_NO_AUTOLOAD);
+ if (name == *pp) {
name = NULL;
+ }
}
if (name != NULL) {
name = vim_strsave(name);
@@ -19750,11 +21197,15 @@ theend:
*/
static int eval_fname_script(char_u *p)
{
- if (p[0] == '<' && (STRNICMP(p + 1, "SID>", 4) == 0
- || STRNICMP(p + 1, "SNR>", 4) == 0))
+ // Use mb_stricmp() because in Turkish comparing the "I" may not work with
+ // the standard library function.
+ if (p[0] == '<' && (mb_strnicmp(p + 1, (char_u *)"SID>", 4) == 0
+ || mb_strnicmp(p + 1, (char_u *)"SNR>", 4) == 0)) {
return 5;
- if (p[0] == 's' && p[1] == ':')
+ }
+ if (p[0] == 's' && p[1] == ':') {
return 2;
+ }
return 0;
}
@@ -19839,7 +21290,7 @@ void free_all_functions(void)
int translated_function_exists(char_u *name)
{
if (builtin_function(name, -1)) {
- return find_internal_func(name) >= 0;
+ return find_internal_func((char *)name) != NULL;
}
return find_func(name) != NULL;
}
@@ -19853,8 +21304,8 @@ static int function_exists(char_u *name)
char_u *p;
int n = FALSE;
- p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET|TFN_NO_AUTOLOAD,
- NULL);
+ p = trans_function_name(&nm, false, TFN_INT|TFN_QUIET|TFN_NO_AUTOLOAD,
+ NULL, NULL);
nm = skipwhite(nm);
/* Only accept "funcname", "funcname ", "funcname (..." and
@@ -20079,9 +21530,10 @@ script_autoload (
tofree = NULL;
}
- /* Try loading the package from $VIMRUNTIME/autoload/<name>.vim */
- if (source_runtime(scriptname, FALSE) == OK)
- ret = TRUE;
+ // Try loading the package from $VIMRUNTIME/autoload/<name>.vim
+ if (source_runtime(scriptname, 0) == OK) {
+ ret = true;
+ }
}
xfree(tofree);
@@ -20173,7 +21625,7 @@ void ex_delfunction(exarg_T *eap)
funcdict_T fudi;
p = eap->arg;
- name = trans_function_name(&p, eap->skip, 0, &fudi);
+ name = trans_function_name(&p, eap->skip, 0, &fudi, NULL);
xfree(fudi.fd_newkey);
if (name == NULL) {
if (fudi.fd_dict != NULL && !eap->skip)
@@ -20254,7 +21706,13 @@ void func_unref(char_u *name)
if (name != NULL && isdigit(*name)) {
fp = find_func(name);
if (fp == NULL) {
+#ifdef EXITFREE
+ if (!entered_free_all_mem) {
+ EMSG2(_(e_intern2), "func_unref()");
+ }
+#else
EMSG2(_(e_intern2), "func_unref()");
+#endif
} else {
user_func_unref(fp);
}
@@ -20856,7 +22314,7 @@ char_u *get_return_cmd(void *rettv)
}
STRCPY(IObuff, ":return ");
- STRNCPY(IObuff + 8, s, IOSIZE - 8);
+ STRLCPY(IObuff + 8, s, IOSIZE - 8);
if (STRLEN(s) + 8 >= IOSIZE)
STRCPY(IObuff + IOSIZE - 4, "...");
xfree(tofree);
@@ -21158,8 +22616,8 @@ void ex_oldfiles(exarg_T *eap)
/* Assume "got_int" was set to truncate the listing. */
got_int = FALSE;
- // File selection prompt on ":oldfiles!"
- if (eap->forceit) {
+ // File selection prompt on ":browse oldfiles"
+ if (cmdmod.browse) {
quit_more = false;
nr = prompt_for_number(false);
msg_starthere();
@@ -21532,24 +22990,25 @@ char_u *do_string_sub(char_u *str, char_u *pat, char_u *sub, char_u *flags)
}
static inline TerminalJobData *common_job_init(char **argv,
- ufunc_T *on_stdout,
- ufunc_T *on_stderr,
- ufunc_T *on_exit,
- dict_T *self,
+ Callback on_stdout,
+ Callback on_stderr,
+ Callback on_exit,
bool pty,
- bool detach)
+ bool rpc,
+ bool detach,
+ char *cwd)
{
TerminalJobData *data = xcalloc(1, sizeof(TerminalJobData));
data->stopped = false;
data->on_stdout = on_stdout;
data->on_stderr = on_stderr;
data->on_exit = on_exit;
- data->self = self;
- data->events = queue_new_child(loop.events);
+ data->events = multiqueue_new_child(main_loop.events);
+ data->rpc = rpc;
if (pty) {
- data->proc.pty = pty_process_init(&loop, data);
+ data->proc.pty = pty_process_init(&main_loop, data);
} else {
- data->proc.uv = libuv_process_init(&loop, data);
+ data->proc.uv = libuv_process_init(&main_loop, data);
}
Process *proc = (Process *)&data->proc;
proc->argv = argv;
@@ -21558,15 +23017,18 @@ static inline TerminalJobData *common_job_init(char **argv,
if (!pty) {
proc->err = &data->err;
}
- proc->cb = on_process_exit;
+ proc->cb = eval_job_process_exit_cb;
proc->events = data->events;
proc->detach = detach;
+ proc->cwd = cwd;
return data;
}
-/// Return true/false on success/failure.
-static inline bool common_job_callbacks(dict_T *vopts, ufunc_T **on_stdout,
- ufunc_T **on_stderr, ufunc_T **on_exit)
+/// common code for getting job callbacks for jobstart, termopen and rpcstart
+///
+/// @return true/false on success/failure.
+static inline bool common_job_callbacks(dict_T *vopts, Callback *on_stdout,
+ Callback *on_stderr, Callback *on_exit)
{
if (get_dict_callback(vopts, "on_stdout", on_stdout)
&& get_dict_callback(vopts, "on_stderr", on_stderr)
@@ -21574,15 +23036,10 @@ static inline bool common_job_callbacks(dict_T *vopts, ufunc_T **on_stdout,
vopts->dv_refcount++;
return true;
}
- if (*on_stdout) {
- user_func_unref(*on_stdout);
- }
- if (*on_stderr) {
- user_func_unref(*on_stderr);
- }
- if (*on_exit) {
- user_func_unref(*on_exit);
- }
+
+ callback_free(on_stdout);
+ callback_free(on_stderr);
+ callback_free(on_exit);
return false;
}
@@ -21591,9 +23048,15 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv)
Process *proc = (Process *)&data->proc;
if (proc->type == kProcessTypePty && proc->detach) {
EMSG2(_(e_invarg2), "terminal/pty job cannot be detached");
+ xfree(data->proc.pty.term_name);
+ shell_free_argv(proc->argv);
+ free_term_job_data_event((void **)&data);
return false;
}
+ data->id = next_chan_id++;
+ pmap_put(uint64_t)(jobs, data->id, data);
+
data->refcount++;
char *cmd = xstrdup(proc->argv[0]);
if (!process_spawn(proc)) {
@@ -21608,17 +23071,22 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv)
}
xfree(cmd);
- data->id = current_job_id++;
- wstream_init(proc->in, 0);
- if (proc->out) {
- rstream_init(proc->out, 0);
- rstream_start(proc->out, on_job_stdout);
+
+ if (data->rpc) {
+ // the rpc channel takes over the in and out streams
+ channel_from_process(proc, data->id);
+ } else {
+ wstream_init(proc->in, 0);
+ if (proc->out) {
+ rstream_init(proc->out, 0);
+ rstream_start(proc->out, on_job_stdout, data);
+ }
}
+
if (proc->err) {
rstream_init(proc->err, 0);
- rstream_start(proc->err, on_job_stderr);
+ rstream_start(proc->err, on_job_stderr, data);
}
- pmap_put(uint64_t)(jobs, data->id, data);
rettv->vval.v_number = data->id;
return true;
}
@@ -21626,20 +23094,12 @@ static inline bool common_job_start(TerminalJobData *data, typval_T *rettv)
static inline void free_term_job_data_event(void **argv)
{
TerminalJobData *data = argv[0];
- if (data->on_stdout) {
- user_func_unref(data->on_stdout);
- }
- if (data->on_stderr) {
- user_func_unref(data->on_stderr);
- }
- if (data->on_exit) {
- user_func_unref(data->on_exit);
- }
+ callback_free(&data->on_stdout);
+ callback_free(&data->on_stderr);
+ callback_free(&data->on_exit);
- if (data->self) {
- dict_unref(data->self);
- }
- queue_free(data->events);
+ multiqueue_free(data->events);
+ pmap_del(uint64_t)(jobs, data->id);
xfree(data);
}
@@ -21647,12 +23107,13 @@ static inline void free_term_job_data(TerminalJobData *data)
{
// data->queue may still be used after this function returns(process_wait), so
// only free in the next event loop iteration
- queue_put(loop.fast_events, free_term_job_data_event, 1, data);
+ multiqueue_put(main_loop.fast_events, free_term_job_data_event, 1, data);
}
// vimscript job callbacks must be executed on Nvim main loop
-static inline void process_job_event(TerminalJobData *data, ufunc_T *callback,
- const char *type, char *buf, size_t count, int status)
+static inline void process_job_event(TerminalJobData *data, Callback *callback,
+ const char *type, char *buf, size_t count,
+ int status)
{
JobEvent event_data;
event_data.received = NULL;
@@ -21692,18 +23153,19 @@ static void on_job_stdout(Stream *stream, RBuffer *buf, size_t count,
void *job, bool eof)
{
TerminalJobData *data = job;
- on_job_output(stream, job, buf, count, eof, data->on_stdout, "stdout");
+ on_job_output(stream, job, buf, count, eof, &data->on_stdout, "stdout");
}
static void on_job_stderr(Stream *stream, RBuffer *buf, size_t count,
void *job, bool eof)
{
TerminalJobData *data = job;
- on_job_output(stream, job, buf, count, eof, data->on_stderr, "stderr");
+ on_job_output(stream, job, buf, count, eof, &data->on_stderr, "stderr");
}
static void on_job_output(Stream *stream, TerminalJobData *data, RBuffer *buf,
- size_t count, bool eof, ufunc_T *callback, const char *type)
+ size_t count, bool eof, Callback *callback,
+ const char *type)
{
if (eof) {
return;
@@ -21720,14 +23182,13 @@ static void on_job_output(Stream *stream, TerminalJobData *data, RBuffer *buf,
terminal_receive(data->term, ptr, count);
}
- if (callback) {
+ rbuffer_consumed(buf, count);
+ if (callback->type != kCallbackNone) {
process_job_event(data, callback, type, ptr, count, 0);
}
-
- rbuffer_consumed(buf, count);
}
-static void on_process_exit(Process *proc, int status, void *d)
+static void eval_job_process_exit_cb(Process *proc, int status, void *d)
{
TerminalJobData *data = d;
if (data->term && !data->exited) {
@@ -21736,19 +23197,30 @@ static void on_process_exit(Process *proc, int status, void *d)
snprintf(msg, sizeof msg, "\r\n[Process exited %d]", proc->status);
terminal_close(data->term, msg);
}
+ if (data->rpc) {
+ channel_process_exit(data->id, status);
+ }
if (data->status_ptr) {
*data->status_ptr = status;
}
- process_job_event(data, data->on_exit, "exit", NULL, 0, status);
+ process_job_event(data, &data->on_exit, "exit", NULL, 0, status);
+
+ term_job_data_decref(data);
}
static void term_write(char *buf, size_t size, void *d)
{
- TerminalJobData *data = d;
+ TerminalJobData *job = d;
+ if (job->in.closed) {
+ // If the backing stream was closed abruptly, there may be write events
+ // ahead of the terminal close event. Just ignore the writes.
+ ILOG("write failed: stream is closed");
+ return;
+ }
WBuffer *wbuf = wstream_new_buffer(xmemdup(buf, size), size, 1, xfree);
- wstream_write(&data->in, wbuf);
+ wstream_write(&job->in, wbuf);
}
static void term_resize(uint16_t width, uint16_t height, void *d)
@@ -21761,7 +23233,7 @@ static inline void term_delayed_free(void **argv)
{
TerminalJobData *j = argv[0];
if (j->in.pending_reqs || j->out.pending_reqs || j->err.pending_reqs) {
- queue_put(j->events, term_delayed_free, 1, j);
+ multiqueue_put(j->events, term_delayed_free, 1, j);
return;
}
@@ -21776,7 +23248,7 @@ static void term_close(void *d)
data->exited = true;
process_stop((Process *)&data->proc);
}
- queue_put(data->events, term_delayed_free, 1, data);
+ multiqueue_put(data->events, term_delayed_free, 1, data);
}
static void term_job_data_decref(TerminalJobData *data)
@@ -21789,49 +23261,34 @@ static void term_job_data_decref(TerminalJobData *data)
static void on_job_event(JobEvent *ev)
{
if (!ev->callback) {
- goto end;
+ return;
}
- typval_T argv[3];
- int argc = ev->callback->uf_args.ga_len;
+ typval_T argv[4];
- if (argc > 0) {
- argv[0].v_type = VAR_NUMBER;
- argv[0].v_lock = 0;
- argv[0].vval.v_number = ev->data->id;
- }
+ argv[0].v_type = VAR_NUMBER;
+ argv[0].v_lock = 0;
+ argv[0].vval.v_number = ev->data->id;
- if (argc > 1) {
- if (ev->received) {
- argv[1].v_type = VAR_LIST;
- argv[1].v_lock = 0;
- argv[1].vval.v_list = ev->received;
- argv[1].vval.v_list->lv_refcount++;
- } else {
- argv[1].v_type = VAR_NUMBER;
- argv[1].v_lock = 0;
- argv[1].vval.v_number = ev->status;
- }
+ if (ev->received) {
+ argv[1].v_type = VAR_LIST;
+ argv[1].v_lock = 0;
+ argv[1].vval.v_list = ev->received;
+ argv[1].vval.v_list->lv_refcount++;
+ } else {
+ argv[1].v_type = VAR_NUMBER;
+ argv[1].v_lock = 0;
+ argv[1].vval.v_number = ev->status;
}
- if (argc > 2) {
- argv[2].v_type = VAR_STRING;
- argv[2].v_lock = 0;
- argv[2].vval.v_string = (uint8_t *)ev->type;
- }
+ argv[2].v_type = VAR_STRING;
+ argv[2].v_lock = 0;
+ argv[2].vval.v_string = (uint8_t *)ev->type;
typval_T rettv;
init_tv(&rettv);
- call_user_func(ev->callback, argc, argv, &rettv, curwin->w_cursor.lnum,
- curwin->w_cursor.lnum, ev->data->self);
+ callback_call(ev->callback, 3, argv, &rettv);
clear_tv(&rettv);
-
-end:
- if (!ev->received) {
- // exit event, safe to free job data now
- pmap_del(uint64_t)(jobs, ev->data->id);
- term_job_data_decref(ev->data);
- }
}
static TerminalJobData *find_job(uint64_t id)
@@ -21851,6 +23308,7 @@ static void script_host_eval(char *name, typval_T *argvars, typval_T *rettv)
if (argvars[0].v_type != VAR_STRING) {
EMSG(_(e_invarg));
+ return;
}
list_T *args = list_alloc();
@@ -21895,6 +23353,7 @@ typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
curwin->w_cursor.lnum,
&dummy,
true,
+ NULL,
NULL);
list_unref(arguments);
@@ -21908,17 +23367,19 @@ typval_T eval_call_provider(char *provider, char *method, list_T *arguments)
bool eval_has_provider(char *name)
{
-
-#define check_provider(name) \
- if (has_##name == -1) { \
- has_##name = !!find_func((uint8_t *)"provider#" #name "#Call"); \
- if (!has_##name) { \
- script_autoload((uint8_t *)"provider#" #name "#Call", false); \
- has_##name = !!find_func((uint8_t *)"provider#" #name "#Call"); \
- } \
+#define check_provider(name) \
+ if (has_##name == -1) { \
+ has_##name = !!find_func((uint8_t *)"provider#" #name "#Call"); \
+ if (!has_##name) { \
+ script_autoload((uint8_t *)"provider#" #name "#Call", false); \
+ has_##name = !!find_func((uint8_t *)"provider#" #name "#Call"); \
+ } \
}
- static int has_clipboard = -1, has_python = -1, has_python3 = -1;
+ static int has_clipboard = -1;
+ static int has_python = -1;
+ static int has_python3 = -1;
+ static int has_ruby = -1;
if (!strcmp(name, "clipboard")) {
check_provider(clipboard);
@@ -21929,14 +23390,16 @@ bool eval_has_provider(char *name)
} else if (!strcmp(name, "python")) {
check_provider(python);
return has_python;
+ } else if (!strcmp(name, "ruby")) {
+ check_provider(ruby);
+ return has_ruby;
}
return false;
}
-// Compute the `DictWatcher` address from a QUEUE node. This only exists because
-// ASAN doesn't handle `QUEUE_DATA` pointer arithmetic, and we blacklist this
-// function on .asan-blacklist.
+// Compute the `DictWatcher` address from a QUEUE node. This only exists for
+// .asan-blacklist (ASAN doesn't handle QUEUE_DATA pointer arithmetic).
static DictWatcher *dictwatcher_node_data(QUEUE *q)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
@@ -21948,7 +23411,7 @@ static void dictwatcher_notify(dict_T *dict, const char *key, typval_T *newtv,
typval_T *oldtv)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
- typval_T argv[3];
+ typval_T argv[4];
for (size_t i = 0; i < ARRAY_SIZE(argv); i++) {
init_tv(argv + i);
}
@@ -21981,8 +23444,7 @@ static void dictwatcher_notify(dict_T *dict, const char *key, typval_T *newtv,
if (!watcher->busy && dictwatcher_matches(watcher, key)) {
init_tv(&rettv);
watcher->busy = true;
- call_user_func(watcher->callback, ARRAY_SIZE(argv), argv, &rettv,
- curwin->w_cursor.lnum, curwin->w_cursor.lnum, NULL);
+ callback_call(&watcher->callback, 3, argv, &rettv);
watcher->busy = false;
clear_tv(&rettv);
}
@@ -22013,7 +23475,7 @@ static bool dictwatcher_matches(DictWatcher *watcher, const char *key)
static void dictwatcher_free(DictWatcher *watcher)
FUNC_ATTR_NONNULL_ALL
{
- user_func_unref(watcher->callback);
+ callback_free(&watcher->callback);
xfree(watcher->key_pattern);
xfree(watcher);
}
diff --git a/src/nvim/eval.h b/src/nvim/eval.h
index d6800afd52..630e309442 100644
--- a/src/nvim/eval.h
+++ b/src/nvim/eval.h
@@ -94,6 +94,7 @@ typedef enum {
VV_FCS_CHOICE,
VV_BEVAL_BUFNR,
VV_BEVAL_WINNR,
+ VV_BEVAL_WINID,
VV_BEVAL_LNUM,
VV_BEVAL_COL,
VV_BEVAL_TEXT,
@@ -103,6 +104,7 @@ typedef enum {
VV_SWAPCOMMAND,
VV_CHAR,
VV_MOUSE_WIN,
+ VV_MOUSE_WINID,
VV_MOUSE_LNUM,
VV_MOUSE_COL,
VV_OP,
@@ -124,6 +126,15 @@ typedef enum {
VV_NULL,
VV__NULL_LIST, // List with NULL value. For test purposes only.
VV__NULL_DICT, // Dictionary with NULL value. For test purposes only.
+ VV_VIM_DID_ENTER,
+ VV_TYPE_NUMBER,
+ VV_TYPE_STRING,
+ VV_TYPE_FUNC,
+ VV_TYPE_LIST,
+ VV_TYPE_DICT,
+ VV_TYPE_FLOAT,
+ VV_TYPE_BOOL,
+ VV_EXITING,
} VimVarIndex;
/// All recognized msgpack types
diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua
new file mode 100644
index 0000000000..e0b72feb19
--- /dev/null
+++ b/src/nvim/eval.lua
@@ -0,0 +1,337 @@
+-- File containing table with all functions.
+--
+-- Keys:
+--
+-- args Number of arguments, list with maximum and minimum number of arguments
+-- or list with a minimum number of arguments only. Defaults to zero
+-- arguments.
+-- func Name of the C function which implements the VimL function. Defaults to
+-- `f_{funcname}`.
+
+local varargs = function(nr)
+ return {nr}
+end
+
+return {
+ funcs={
+ abs={args=1},
+ acos={args=1, func="float_op_wrapper", data="&acos"}, -- WJMc
+ add={args=2},
+ ['and']={args=2},
+ api_info={},
+ append={args=2},
+ argc={},
+ argidx={},
+ arglistid={args={0, 2}},
+ argv={args={0, 1}},
+ asin={args=1, func="float_op_wrapper", data="&asin"}, -- WJMc
+ assert_equal={args={2, 3}},
+ assert_exception={args={1, 2}},
+ assert_fails={args={1, 2}},
+ assert_false={args={1, 2}},
+ assert_match={args={2, 3}},
+ assert_notequal={args={2, 3}},
+ assert_notmatch={args={2, 3}},
+ assert_true={args={1, 2}},
+ atan={args=1, func="float_op_wrapper", data="&atan"},
+ atan2={args=2},
+ browse={args=4},
+ browsedir={args=2},
+ bufexists={args=1},
+ buffer_exists={args=1, func='f_bufexists'}, -- obsolete
+ buffer_name={args=1, func='f_bufname'}, -- obsolete
+ buffer_number={args=1, func='f_bufnr'}, -- obsolete
+ buflisted={args=1},
+ bufloaded={args=1},
+ bufname={args=1},
+ bufnr={args={1, 2}},
+ bufwinid={args=1},
+ bufwinnr={args=1},
+ byte2line={args=1},
+ byteidx={args=2},
+ byteidxcomp={args=2},
+ call={args={2, 3}},
+ ceil={args=1, func="float_op_wrapper", data="&ceil"},
+ changenr={},
+ char2nr={args={1, 2}},
+ cindent={args=1},
+ clearmatches={},
+ col={args=1},
+ complete={args=2},
+ complete_add={args=1},
+ complete_check={},
+ confirm={args={1, 4}},
+ copy={args=1},
+ cos={args=1, func="float_op_wrapper", data="&cos"},
+ cosh={args=1, func="float_op_wrapper", data="&cosh"},
+ count={args={2, 4}},
+ cscope_connection={args={0, 3}},
+ cursor={args={1, 3}},
+ deepcopy={args={1, 2}},
+ delete={args={1,2}},
+ dictwatcheradd={args=3},
+ dictwatcherdel={args=3},
+ did_filetype={},
+ diff_filler={args=1},
+ diff_hlID={args=2},
+ empty={args=1},
+ escape={args=2},
+ eval={args=1},
+ eventhandler={},
+ executable={args=1},
+ execute={args={1, 2}},
+ exepath={args=1},
+ exists={args=1},
+ exp={args=1, func="float_op_wrapper", data="&exp"},
+ expand={args={1, 3}},
+ extend={args={2, 3}},
+ feedkeys={args={1, 2}},
+ file_readable={args=1, func='f_filereadable'}, -- obsolete
+ filereadable={args=1},
+ filewritable={args=1},
+ filter={args=2},
+ finddir={args={1, 3}},
+ findfile={args={1, 3}},
+ float2nr={args=1},
+ floor={args=1, func="float_op_wrapper", data="&floor"},
+ fmod={args=2},
+ fnameescape={args=1},
+ fnamemodify={args=2},
+ foldclosed={args=1},
+ foldclosedend={args=1},
+ foldlevel={args=1},
+ foldtext={},
+ foldtextresult={args=1},
+ foreground={},
+ ['function']={args={1, 3}},
+ garbagecollect={args={0, 1}},
+ get={args={2, 3}},
+ getbufinfo={args={0, 1}},
+ getbufline={args={2, 3}},
+ getbufvar={args={2, 3}},
+ getchar={args={0, 1}},
+ getcharmod={},
+ getcharsearch={},
+ getcmdline={},
+ getcmdpos={},
+ getcmdtype={},
+ getcmdwintype={},
+ getcompletion={args={2, 3}},
+ getcurpos={},
+ getcwd={args={0,2}},
+ getfontname={args={0, 1}},
+ getfperm={args=1},
+ getfsize={args=1},
+ getftime={args=1},
+ getftype={args=1},
+ getline={args={1, 2}},
+ getloclist={args=1, func='f_getqflist'},
+ getmatches={},
+ getpid={},
+ getpos={args=1},
+ getqflist={},
+ getreg={args={0, 3}},
+ getregtype={args={0, 1}},
+ gettabinfo={args={0, 1}},
+ gettabvar={args={2, 3}},
+ gettabwinvar={args={3, 4}},
+ getwininfo={args={0, 1}},
+ getwinposx={},
+ getwinposy={},
+ getwinvar={args={2, 3}},
+ glob={args={1, 4}},
+ glob2regpat={args=1},
+ globpath={args={2, 5}},
+ has={args=1},
+ has_key={args=2},
+ haslocaldir={args={0,2}},
+ hasmapto={args={1, 3}},
+ highlightID={args=1, func='f_hlID'}, -- obsolete
+ highlight_exists={args=1, func='f_hlexists'}, -- obsolete
+ histadd={args=2},
+ histdel={args={1, 2}},
+ histget={args={1, 2}},
+ histnr={args=1},
+ hlID={args=1},
+ hlexists={args=1},
+ hostname={},
+ iconv={args=3},
+ indent={args=1},
+ index={args={2, 4}},
+ input={args={1, 3}},
+ inputdialog={args={1, 3}},
+ inputlist={args=1},
+ inputrestore={},
+ inputsave={},
+ inputsecret={args={1, 2}},
+ insert={args={2, 3}},
+ invert={args=1},
+ isdirectory={args=1},
+ islocked={args=1},
+ items={args=1},
+ jobclose={args={1, 2}},
+ jobpid={args=1},
+ jobresize={args=3},
+ jobsend={args=2},
+ jobstart={args={1, 2}},
+ jobstop={args=1},
+ jobwait={args={1, 2}},
+ join={args={1, 2}},
+ json_decode={args=1},
+ json_encode={args=1},
+ keys={args=1},
+ last_buffer_nr={}, -- obsolete
+ len={args=1},
+ libcall={args=3},
+ libcallnr={args=3},
+ line={args=1},
+ line2byte={args=1},
+ lispindent={args=1},
+ localtime={},
+ log={args=1, func="float_op_wrapper", data="&log"},
+ log10={args=1, func="float_op_wrapper", data="&log10"},
+ map={args=2},
+ maparg={args={1, 4}},
+ mapcheck={args={1, 3}},
+ match={args={2, 4}},
+ matchadd={args={2, 5}},
+ matchaddpos={args={2, 5}},
+ matcharg={args=1},
+ matchdelete={args=1},
+ matchend={args={2, 4}},
+ matchlist={args={2, 4}},
+ matchstr={args={2, 4}},
+ matchstrpos={args={2,4}},
+ max={args=1},
+ min={args=1},
+ mkdir={args={1, 3}},
+ mode={args={0, 1}},
+ msgpackdump={args=1},
+ msgpackparse={args=1},
+ nextnonblank={args=1},
+ nr2char={args={1, 2}},
+ ['or']={args=2},
+ pathshorten={args=1},
+ pow={args=2},
+ prevnonblank={args=1},
+ printf={args=varargs(2)},
+ pumvisible={},
+ py3eval={args=1},
+ pyeval={args=1},
+ range={args={1, 3}},
+ readfile={args={1, 3}},
+ reltime={args={0, 2}},
+ reltimefloat={args=1},
+ reltimestr={args=1},
+ remove={args={2, 3}},
+ rename={args=2},
+ ['repeat']={args=2},
+ resolve={args=1},
+ reverse={args=1},
+ round={args=1, func="float_op_wrapper", data="&round"},
+ rpcnotify={args=varargs(2)},
+ rpcrequest={args=varargs(2)},
+ rpcstart={args={1, 2}},
+ rpcstop={args=1},
+ screenattr={args=2},
+ screenchar={args=2},
+ screencol={},
+ screenrow={},
+ search={args={1, 4}},
+ searchdecl={args={1, 3}},
+ searchpair={args={3, 7}},
+ searchpairpos={args={3, 7}},
+ searchpos={args={1, 4}},
+ serverlist={},
+ serverstart={args={0, 1}},
+ serverstop={args=1},
+ setbufvar={args=3},
+ setcharsearch={args=1},
+ setcmdpos={args=1},
+ setfperm={args=2},
+ setline={args=2},
+ setloclist={args={2, 4}},
+ setmatches={args=1},
+ setpos={args=2},
+ setqflist={args={1, 3}},
+ setreg={args={2, 3}},
+ settabvar={args=3},
+ settabwinvar={args=4},
+ setwinvar={args=3},
+ sha256={args=1},
+ shellescape={args={1, 2}},
+ shiftwidth={},
+ simplify={args=1},
+ sin={args=1, func="float_op_wrapper", data="&sin"},
+ sinh={args=1, func="float_op_wrapper", data="&sinh"},
+ sort={args={1, 3}},
+ soundfold={args=1},
+ spellbadword={args={0, 1}},
+ spellsuggest={args={1, 3}},
+ split={args={1, 3}},
+ sqrt={args=1, func="float_op_wrapper", data="&sqrt"},
+ str2float={args=1},
+ str2nr={args={1, 2}},
+ strcharpart={args={2, 3}},
+ strchars={args={1,2}},
+ strdisplaywidth={args={1, 2}},
+ strftime={args={1, 2}},
+ strgetchar={args={2, 2}},
+ stridx={args={2, 3}},
+ string={args=1},
+ strlen={args=1},
+ strpart={args={2, 3}},
+ strridx={args={2, 3}},
+ strtrans={args=1},
+ strwidth={args=1},
+ submatch={args={1, 2}},
+ substitute={args=4},
+ synID={args=3},
+ synIDattr={args={2, 3}},
+ synIDtrans={args=1},
+ synconcealed={args=2},
+ synstack={args=2},
+ system={args={1, 2}},
+ systemlist={args={1, 3}},
+ tabpagebuflist={args={0, 1}},
+ tabpagenr={args={0, 1}},
+ tabpagewinnr={args={1, 2}},
+ tagfiles={},
+ taglist={args=1},
+ tan={args=1, func="float_op_wrapper", data="&tan"},
+ tanh={args=1, func="float_op_wrapper", data="&tanh"},
+ tempname={},
+ termopen={args={1, 2}},
+ timer_start={args={2,3}},
+ timer_stop={args=1},
+ tolower={args=1},
+ toupper={args=1},
+ tr={args=3},
+ trunc={args=1, func="float_op_wrapper", data="&trunc"},
+ type={args=1},
+ undofile={args=1},
+ undotree={},
+ uniq={args={1, 3}},
+ values={args=1},
+ virtcol={args=1},
+ visualmode={args={0, 1}},
+ wildmenumode={},
+ win_findbuf={args=1},
+ win_getid={args={0,2}},
+ win_gotoid={args=1},
+ win_id2tabwin={args=1},
+ win_id2win={args=1},
+ winbufnr={args=1},
+ wincol={},
+ winheight={args=1},
+ winline={},
+ winnr={args={0, 1}},
+ winrestcmd={},
+ winrestview={args=1},
+ winsaveview={},
+ winwidth={args=1},
+ wordcount={},
+ writefile={args={2, 3}},
+ xor={args=2},
+ },
+}
diff --git a/src/nvim/eval/decode.c b/src/nvim/eval/decode.c
index 0774ef515f..43e9f76c0f 100644
--- a/src/nvim/eval/decode.c
+++ b/src/nvim/eval/decode.c
@@ -101,7 +101,7 @@ static inline int json_decoder_pop(ValuesStackItem obj,
FUNC_ATTR_NONNULL_ALL
{
if (kv_size(*container_stack) == 0) {
- kv_push(ValuesStackItem, *stack, obj);
+ kv_push(*stack, obj);
return OK;
}
ContainerStackItem last_container = kv_last(*container_stack);
@@ -190,7 +190,7 @@ static inline int json_decoder_pop(ValuesStackItem obj,
*next_map_special = true;
return OK;
}
- kv_push(ValuesStackItem, *stack, obj);
+ kv_push(*stack, obj);
}
return OK;
}
@@ -628,10 +628,8 @@ int json_decode_string(const char *const buf, const size_t buf_len,
convert_setup(&conv, (char_u *) "utf-8", p_enc);
conv.vc_fail = true;
int ret = OK;
- ValuesStack stack;
- kv_init(stack);
- ContainerStack container_stack;
- kv_init(container_stack);
+ ValuesStack stack = KV_INITIAL_VALUE;
+ ContainerStack container_stack = KV_INITIAL_VALUE;
rettv->v_type = VAR_UNKNOWN;
bool didcomma = false;
bool didcolon = false;
@@ -815,13 +813,13 @@ json_decode_string_cycle_start:
.v_lock = VAR_UNLOCKED,
.vval = { .v_list = list },
};
- kv_push(ContainerStackItem, container_stack, ((ContainerStackItem) {
+ kv_push(container_stack, ((ContainerStackItem) {
.stack_index = kv_size(stack),
.s = p,
.container = tv,
.special_val = NULL,
}));
- kv_push(ValuesStackItem, stack, OBJ(tv, false, didcomma, didcolon));
+ kv_push(stack, OBJ(tv, false, didcomma, didcolon));
break;
}
case '{': {
@@ -845,13 +843,13 @@ json_decode_string_cycle_start:
.vval = { .v_dict = dict },
};
}
- kv_push(ContainerStackItem, container_stack, ((ContainerStackItem) {
+ kv_push(container_stack, ((ContainerStackItem) {
.stack_index = kv_size(stack),
.s = p,
.container = tv,
.special_val = val_list,
}));
- kv_push(ValuesStackItem, stack, OBJ(tv, false, didcomma, didcolon));
+ kv_push(stack, OBJ(tv, false, didcomma, didcolon));
break;
}
default: {
diff --git a/src/nvim/eval/encode.c b/src/nvim/eval/encode.c
index c651a50be9..ee66b7cf09 100644
--- a/src/nvim/eval/encode.c
+++ b/src/nvim/eval/encode.c
@@ -6,6 +6,7 @@
#include <msgpack.h>
#include <inttypes.h>
+#include <stddef.h>
#include <assert.h>
#include <math.h>
@@ -22,6 +23,7 @@
#include "nvim/ascii.h"
#include "nvim/vim.h" // For _()
#include "nvim/lib/kvec.h"
+#include "nvim/eval/typval_encode.h"
#define ga_concat(a, b) ga_concat(a, (char_u *)b)
#define utf_ptr2char(b) utf_ptr2char((char_u *)b)
@@ -32,29 +34,6 @@
#define convert_setup(vcp, from, to) \
(convert_setup(vcp, (char_u *)from, (char_u *)to))
-/// Structure representing current VimL to messagepack conversion state
-typedef struct {
- enum {
- kMPConvDict, ///< Convert dict_T *dictionary.
- kMPConvList, ///< Convert list_T *list.
- kMPConvPairs, ///< Convert mapping represented as a list_T* of pairs.
- } type;
- union {
- struct {
- dict_T *dict; ///< Currently converted dictionary.
- hashitem_T *hi; ///< Currently converted dictionary item.
- size_t todo; ///< Amount of items left to process.
- } d; ///< State of dictionary conversion.
- struct {
- list_T *list; ///< Currently converted list.
- listitem_T *li; ///< Currently converted list item.
- } l; ///< State of list or generic mapping conversion.
- } data; ///< Data to convert.
-} MPConvStackVal;
-
-/// Stack used to convert VimL values to messagepack.
-typedef kvec_t(MPConvStackVal) MPConvStack;
-
const char *const encode_special_var_names[] = {
[kSpecialVarNull] = "null",
[kSpecialVarTrue] = "true",
@@ -129,9 +108,12 @@ static int conv_error(const char *const msg, const MPConvStack *const mpstack,
{
garray_T msg_ga;
ga_init(&msg_ga, (int)sizeof(char), 80);
- char *const key_msg = _("key %s");
- char *const key_pair_msg = _("key %s at index %i from special map");
- char *const idx_msg = _("index %i");
+ const char *const key_msg = _("key %s");
+ const char *const key_pair_msg = _("key %s at index %i from special map");
+ const char *const idx_msg = _("index %i");
+ const char *const partial_arg_msg = _("partial");
+ const char *const partial_arg_i_msg = _("argument %i");
+ const char *const partial_self_msg = _("partial self dictionary");
for (size_t i = 0; i < kv_size(*mpstack); i++) {
if (i != 0) {
ga_concat(&msg_ga, ", ");
@@ -175,6 +157,29 @@ static int conv_error(const char *const msg, const MPConvStack *const mpstack,
}
break;
}
+ case kMPConvPartial: {
+ switch (v.data.p.stage) {
+ case kMPConvPartialArgs: {
+ assert(false);
+ break;
+ }
+ case kMPConvPartialSelf: {
+ ga_concat(&msg_ga, partial_arg_msg);
+ break;
+ }
+ case kMPConvPartialEnd: {
+ ga_concat(&msg_ga, partial_self_msg);
+ break;
+ }
+ }
+ break;
+ }
+ case kMPConvPartialList: {
+ const int idx = (int)(v.data.a.arg - v.data.a.argv) - 1;
+ vim_snprintf((char *)IObuff, IOSIZE, partial_arg_i_msg, idx);
+ ga_concat(&msg_ga, IObuff);
+ break;
+ }
}
}
EMSG3(msg, objname, (kv_size(*mpstack) == 0
@@ -275,368 +280,7 @@ int encode_read_from_list(ListReaderState *const state, char *const buf,
: OK);
}
-/// Code for checking whether container references itself
-///
-/// @param[in,out] val Container to check.
-/// @param copyID_attr Name of the container attribute that holds copyID.
-/// After checking whether value of this attribute is
-/// copyID (variable) it is set to copyID.
-#define CHECK_SELF_REFERENCE(val, copyID_attr, conv_type) \
- do { \
- if ((val)->copyID_attr == copyID) { \
- CONV_RECURSE((val), conv_type); \
- } \
- (val)->copyID_attr = copyID; \
- } while (0)
-
-#define TV_STRLEN(tv) \
- (tv->vval.v_string == NULL ? 0 : STRLEN(tv->vval.v_string))
-
-/// Define functions which convert VimL value to something else
-///
-/// Creates function `vim_to_{name}(firstargtype firstargname, typval_T *const
-/// tv)` which returns OK or FAIL and helper functions.
-///
-/// @param firstargtype Type of the first argument. It will be used to return
-/// the results.
-/// @param firstargname Name of the first argument.
-/// @param name Name of the target converter.
-#define DEFINE_VIML_CONV_FUNCTIONS(scope, name, firstargtype, firstargname) \
-static int name##_convert_one_value(firstargtype firstargname, \
- MPConvStack *const mpstack, \
- typval_T *const tv, \
- const int copyID, \
- const char *const objname) \
- FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT \
-{ \
- switch (tv->v_type) { \
- case VAR_STRING: { \
- CONV_STRING(tv->vval.v_string, TV_STRLEN(tv)); \
- break; \
- } \
- case VAR_NUMBER: { \
- CONV_NUMBER(tv->vval.v_number); \
- break; \
- } \
- case VAR_FLOAT: { \
- CONV_FLOAT(tv->vval.v_float); \
- break; \
- } \
- case VAR_FUNC: { \
- CONV_FUNC(tv->vval.v_string); \
- break; \
- } \
- case VAR_LIST: { \
- if (tv->vval.v_list == NULL || tv->vval.v_list->lv_len == 0) { \
- CONV_EMPTY_LIST(); \
- break; \
- } \
- CHECK_SELF_REFERENCE(tv->vval.v_list, lv_copyID, kMPConvList); \
- CONV_LIST_START(tv->vval.v_list); \
- kv_push(MPConvStackVal, *mpstack, ((MPConvStackVal) { \
- .type = kMPConvList, \
- .data = { \
- .l = { \
- .list = tv->vval.v_list, \
- .li = tv->vval.v_list->lv_first, \
- }, \
- }, \
- })); \
- break; \
- } \
- case VAR_SPECIAL: { \
- switch (tv->vval.v_special) { \
- case kSpecialVarNull: { \
- CONV_NIL(); \
- break; \
- } \
- case kSpecialVarTrue: \
- case kSpecialVarFalse: { \
- CONV_BOOL(tv->vval.v_special == kSpecialVarTrue); \
- break; \
- } \
- } \
- break; \
- } \
- case VAR_DICT: { \
- if (tv->vval.v_dict == NULL \
- || tv->vval.v_dict->dv_hashtab.ht_used == 0) { \
- CONV_EMPTY_DICT(); \
- break; \
- } \
- const dictitem_T *type_di; \
- const dictitem_T *val_di; \
- if (CONV_ALLOW_SPECIAL \
- && tv->vval.v_dict->dv_hashtab.ht_used == 2 \
- && (type_di = dict_find((dict_T *) tv->vval.v_dict, \
- (char_u *) "_TYPE", -1)) != NULL \
- && type_di->di_tv.v_type == VAR_LIST \
- && (val_di = dict_find((dict_T *) tv->vval.v_dict, \
- (char_u *) "_VAL", -1)) != NULL) { \
- size_t i; \
- for (i = 0; i < ARRAY_SIZE(eval_msgpack_type_lists); i++) { \
- if (type_di->di_tv.vval.v_list == eval_msgpack_type_lists[i]) { \
- break; \
- } \
- } \
- if (i == ARRAY_SIZE(eval_msgpack_type_lists)) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- switch ((MessagePackType) i) { \
- case kMPNil: { \
- CONV_NIL(); \
- break; \
- } \
- case kMPBoolean: { \
- if (val_di->di_tv.v_type != VAR_NUMBER) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- CONV_BOOL(val_di->di_tv.vval.v_number); \
- break; \
- } \
- case kMPInteger: { \
- const list_T *val_list; \
- varnumber_T sign; \
- varnumber_T highest_bits; \
- varnumber_T high_bits; \
- varnumber_T low_bits; \
- /* List of 4 integers; first is signed (should be 1 or -1, but */ \
- /* this is not checked), second is unsigned and have at most */ \
- /* one (sign is -1) or two (sign is 1) non-zero bits (number of */ \
- /* bits is not checked), other unsigned and have at most 31 */ \
- /* non-zero bits (number of bits is not checked).*/ \
- if (val_di->di_tv.v_type != VAR_LIST \
- || (val_list = val_di->di_tv.vval.v_list) == NULL \
- || val_list->lv_len != 4 \
- || val_list->lv_first->li_tv.v_type != VAR_NUMBER \
- || (sign = val_list->lv_first->li_tv.vval.v_number) == 0 \
- || val_list->lv_first->li_next->li_tv.v_type != VAR_NUMBER \
- || (highest_bits = \
- val_list->lv_first->li_next->li_tv.vval.v_number) < 0 \
- || val_list->lv_last->li_prev->li_tv.v_type != VAR_NUMBER \
- || (high_bits = \
- val_list->lv_last->li_prev->li_tv.vval.v_number) < 0 \
- || val_list->lv_last->li_tv.v_type != VAR_NUMBER \
- || (low_bits = val_list->lv_last->li_tv.vval.v_number) < 0) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- uint64_t number = ((uint64_t) (((uint64_t) highest_bits) << 62) \
- | (uint64_t) (((uint64_t) high_bits) << 31) \
- | (uint64_t) low_bits); \
- if (sign > 0) { \
- CONV_UNSIGNED_NUMBER(number); \
- } else { \
- CONV_NUMBER(-number); \
- } \
- break; \
- } \
- case kMPFloat: { \
- if (val_di->di_tv.v_type != VAR_FLOAT) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- CONV_FLOAT(val_di->di_tv.vval.v_float); \
- break; \
- } \
- case kMPString: \
- case kMPBinary: { \
- const bool is_string = ((MessagePackType) i == kMPString); \
- if (val_di->di_tv.v_type != VAR_LIST) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- size_t len; \
- char *buf; \
- if (!encode_vim_list_to_buf(val_di->di_tv.vval.v_list, &len, \
- &buf)) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- if (is_string) { \
- CONV_STR_STRING(buf, len); \
- } else { \
- CONV_STRING(buf, len); \
- } \
- xfree(buf); \
- break; \
- } \
- case kMPArray: { \
- if (val_di->di_tv.v_type != VAR_LIST) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- CHECK_SELF_REFERENCE(val_di->di_tv.vval.v_list, lv_copyID, \
- kMPConvList); \
- CONV_LIST_START(val_di->di_tv.vval.v_list); \
- kv_push(MPConvStackVal, *mpstack, ((MPConvStackVal) { \
- .type = kMPConvList, \
- .data = { \
- .l = { \
- .list = val_di->di_tv.vval.v_list, \
- .li = val_di->di_tv.vval.v_list->lv_first, \
- }, \
- }, \
- })); \
- break; \
- } \
- case kMPMap: { \
- if (val_di->di_tv.v_type != VAR_LIST) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- list_T *const val_list = val_di->di_tv.vval.v_list; \
- if (val_list == NULL || val_list->lv_len == 0) { \
- CONV_EMPTY_DICT(); \
- break; \
- } \
- for (const listitem_T *li = val_list->lv_first; li != NULL; \
- li = li->li_next) { \
- if (li->li_tv.v_type != VAR_LIST \
- || li->li_tv.vval.v_list->lv_len != 2) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- } \
- CHECK_SELF_REFERENCE(val_list, lv_copyID, kMPConvPairs); \
- CONV_DICT_START(val_list->lv_len); \
- kv_push(MPConvStackVal, *mpstack, ((MPConvStackVal) { \
- .type = kMPConvPairs, \
- .data = { \
- .l = { \
- .list = val_list, \
- .li = val_list->lv_first, \
- }, \
- }, \
- })); \
- break; \
- } \
- case kMPExt: { \
- const list_T *val_list; \
- varnumber_T type; \
- if (val_di->di_tv.v_type != VAR_LIST \
- || (val_list = val_di->di_tv.vval.v_list) == NULL \
- || val_list->lv_len != 2 \
- || (val_list->lv_first->li_tv.v_type != VAR_NUMBER) \
- || (type = val_list->lv_first->li_tv.vval.v_number) > INT8_MAX \
- || type < INT8_MIN \
- || (val_list->lv_last->li_tv.v_type != VAR_LIST)) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- size_t len; \
- char *buf; \
- if (!encode_vim_list_to_buf(val_list->lv_last->li_tv.vval.v_list, \
- &len, &buf)) { \
- goto name##_convert_one_value_regular_dict; \
- } \
- CONV_EXT_STRING(buf, len, type); \
- xfree(buf); \
- break; \
- } \
- } \
- break; \
- } \
-name##_convert_one_value_regular_dict: \
- CHECK_SELF_REFERENCE(tv->vval.v_dict, dv_copyID, kMPConvDict); \
- CONV_DICT_START(tv->vval.v_dict->dv_hashtab.ht_used); \
- kv_push(MPConvStackVal, *mpstack, ((MPConvStackVal) { \
- .type = kMPConvDict, \
- .data = { \
- .d = { \
- .dict = tv->vval.v_dict, \
- .hi = tv->vval.v_dict->dv_hashtab.ht_array, \
- .todo = tv->vval.v_dict->dv_hashtab.ht_used, \
- }, \
- }, \
- })); \
- break; \
- } \
- case VAR_UNKNOWN: { \
- EMSG2(_(e_intern2), #name "_convert_one_value()"); \
- return FAIL; \
- } \
- } \
- return OK; \
-} \
-\
-scope int encode_vim_to_##name(firstargtype firstargname, typval_T *const tv, \
- const char *const objname) \
- FUNC_ATTR_WARN_UNUSED_RESULT \
-{ \
- const int copyID = get_copyID(); \
- MPConvStack mpstack; \
- kv_init(mpstack); \
- if (name##_convert_one_value(firstargname, &mpstack, tv, copyID, objname) \
- == FAIL) { \
- goto encode_vim_to_##name##_error_ret; \
- } \
- while (kv_size(mpstack)) { \
- MPConvStackVal *cur_mpsv = &kv_A(mpstack, kv_size(mpstack) - 1); \
- typval_T *cur_tv = NULL; \
- switch (cur_mpsv->type) { \
- case kMPConvDict: { \
- if (!cur_mpsv->data.d.todo) { \
- (void) kv_pop(mpstack); \
- cur_mpsv->data.d.dict->dv_copyID = copyID - 1; \
- CONV_DICT_END(); \
- continue; \
- } else if (cur_mpsv->data.d.todo \
- != cur_mpsv->data.d.dict->dv_hashtab.ht_used) { \
- CONV_DICT_BETWEEN_ITEMS(); \
- } \
- while (HASHITEM_EMPTY(cur_mpsv->data.d.hi)) { \
- cur_mpsv->data.d.hi++; \
- } \
- dictitem_T *const di = HI2DI(cur_mpsv->data.d.hi); \
- cur_mpsv->data.d.todo--; \
- cur_mpsv->data.d.hi++; \
- CONV_STR_STRING(&di->di_key[0], STRLEN(&di->di_key[0])); \
- CONV_DICT_AFTER_KEY(); \
- cur_tv = &di->di_tv; \
- break; \
- } \
- case kMPConvList: { \
- if (cur_mpsv->data.l.li == NULL) { \
- (void) kv_pop(mpstack); \
- cur_mpsv->data.l.list->lv_copyID = copyID - 1; \
- CONV_LIST_END(cur_mpsv->data.l.list); \
- continue; \
- } else if (cur_mpsv->data.l.li != cur_mpsv->data.l.list->lv_first) { \
- CONV_LIST_BETWEEN_ITEMS(); \
- } \
- cur_tv = &cur_mpsv->data.l.li->li_tv; \
- cur_mpsv->data.l.li = cur_mpsv->data.l.li->li_next; \
- break; \
- } \
- case kMPConvPairs: { \
- if (cur_mpsv->data.l.li == NULL) { \
- (void) kv_pop(mpstack); \
- cur_mpsv->data.l.list->lv_copyID = copyID - 1; \
- CONV_DICT_END(); \
- continue; \
- } else if (cur_mpsv->data.l.li != cur_mpsv->data.l.list->lv_first) { \
- CONV_DICT_BETWEEN_ITEMS(); \
- } \
- const list_T *const kv_pair = cur_mpsv->data.l.li->li_tv.vval.v_list; \
- CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair); \
- if (name##_convert_one_value(firstargname, &mpstack, \
- &kv_pair->lv_first->li_tv, copyID, \
- objname) == FAIL) { \
- goto encode_vim_to_##name##_error_ret; \
- } \
- CONV_DICT_AFTER_KEY(); \
- cur_tv = &kv_pair->lv_last->li_tv; \
- cur_mpsv->data.l.li = cur_mpsv->data.l.li->li_next; \
- break; \
- } \
- } \
- assert(cur_tv != NULL); \
- if (name##_convert_one_value(firstargname, &mpstack, cur_tv, copyID, \
- objname) == FAIL) { \
- goto encode_vim_to_##name##_error_ret; \
- } \
- } \
- kv_destroy(mpstack); \
- return OK; \
-encode_vim_to_##name##_error_ret: \
- kv_destroy(mpstack); \
- return FAIL; \
-}
-
-#define CONV_STRING(buf, len) \
+#define TYPVAL_ENCODE_CONV_STRING(tv, buf, len) \
do { \
const char *const buf_ = (const char *) buf; \
if (buf == NULL) { \
@@ -655,19 +299,19 @@ encode_vim_to_##name##_error_ret: \
} \
} while (0)
-#define CONV_STR_STRING(buf, len) \
- CONV_STRING(buf, len)
+#define TYPVAL_ENCODE_CONV_STR_STRING(tv, buf, len) \
+ TYPVAL_ENCODE_CONV_STRING(tv, buf, len)
-#define CONV_EXT_STRING(buf, len, type)
+#define TYPVAL_ENCODE_CONV_EXT_STRING(tv, buf, len, type)
-#define CONV_NUMBER(num) \
+#define TYPVAL_ENCODE_CONV_NUMBER(tv, num) \
do { \
char numbuf[NUMBUFLEN]; \
vim_snprintf(numbuf, ARRAY_SIZE(numbuf), "%" PRId64, (int64_t) (num)); \
ga_concat(gap, numbuf); \
} while (0)
-#define CONV_FLOAT(flt) \
+#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
do { \
const float_T flt_ = (flt); \
switch (fpclassify(flt_)) { \
@@ -690,51 +334,77 @@ encode_vim_to_##name##_error_ret: \
} \
} while (0)
-#define CONV_FUNC(fun) \
+#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
do { \
- ga_concat(gap, "function("); \
- CONV_STRING(fun, STRLEN(fun)); \
- ga_append(gap, ')'); \
+ const char *const fun_ = (const char *)(fun); \
+ if (fun_ == NULL) { \
+ EMSG2(_(e_intern2), "string(): NULL function name"); \
+ ga_concat(gap, "function(NULL"); \
+ } else { \
+ ga_concat(gap, "function("); \
+ TYPVAL_ENCODE_CONV_STRING(tv, fun_, strlen(fun_)); \
+ }\
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, len) \
+ do { \
+ if (len != 0) { \
+ ga_concat(gap, ", "); \
+ } \
} while (0)
-#define CONV_EMPTY_LIST() \
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, len) \
+ do { \
+ if ((ptrdiff_t)len != -1) { \
+ ga_concat(gap, ", "); \
+ } \
+ } while (0)
+
+#define TYPVAL_ENCODE_CONV_FUNC_END(tv) \
+ ga_append(gap, ')')
+
+#define TYPVAL_ENCODE_CONV_EMPTY_LIST(tv) \
ga_concat(gap, "[]")
-#define CONV_LIST_START(lst) \
+#define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \
ga_append(gap, '[')
-#define CONV_EMPTY_DICT() \
+#define TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, mpsv)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, dict) \
ga_concat(gap, "{}")
-#define CONV_NIL() \
+#define TYPVAL_ENCODE_CONV_NIL(tv) \
ga_concat(gap, "v:null")
-#define CONV_BOOL(num) \
+#define TYPVAL_ENCODE_CONV_BOOL(tv, num) \
ga_concat(gap, ((num)? "v:true": "v:false"))
-#define CONV_UNSIGNED_NUMBER(num)
+#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER(tv, num)
-#define CONV_DICT_START(len) \
+#define TYPVAL_ENCODE_CONV_DICT_START(tv, dict, len) \
ga_append(gap, '{')
-#define CONV_DICT_END() \
+#define TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, dict, mpsv)
+
+#define TYPVAL_ENCODE_CONV_DICT_END(tv, dict) \
ga_append(gap, '}')
-#define CONV_DICT_AFTER_KEY() \
+#define TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(tv, dict) \
ga_concat(gap, ": ")
-#define CONV_DICT_BETWEEN_ITEMS() \
+#define TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, dict) \
ga_concat(gap, ", ")
-#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair)
+#define TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(label, key)
-#define CONV_LIST_END(lst) \
+#define TYPVAL_ENCODE_CONV_LIST_END(tv) \
ga_append(gap, ']')
-#define CONV_LIST_BETWEEN_ITEMS() \
- CONV_DICT_BETWEEN_ITEMS()
+#define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(tv) \
+ TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, NULL)
-#define CONV_RECURSE(val, conv_type) \
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
do { \
if (!did_echo_string_emsg) { \
/* Only give this message once for a recursive call to avoid */ \
@@ -761,15 +431,22 @@ encode_vim_to_##name##_error_ret: \
} \
vim_snprintf(ebuf, ARRAY_SIZE(ebuf), "{E724@%zu}", backref); \
ga_concat(gap, &ebuf[0]); \
- return OK; \
} while (0)
-#define CONV_ALLOW_SPECIAL false
+#define TYPVAL_ENCODE_ALLOW_SPECIALS false
-DEFINE_VIML_CONV_FUNCTIONS(static, string, garray_T *const, gap)
+#define TYPVAL_ENCODE_SCOPE static
+#define TYPVAL_ENCODE_NAME string
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE garray_T *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME gap
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
-#undef CONV_RECURSE
-#define CONV_RECURSE(val, conv_type) \
+#undef TYPVAL_ENCODE_CONV_RECURSE
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
do { \
char ebuf[NUMBUFLEN + 7]; \
size_t backref = 0; \
@@ -796,10 +473,18 @@ DEFINE_VIML_CONV_FUNCTIONS(static, string, garray_T *const, gap)
return OK; \
} while (0)
-DEFINE_VIML_CONV_FUNCTIONS(, echo, garray_T *const, gap)
-
-#undef CONV_RECURSE
-#define CONV_RECURSE(val, conv_type) \
+#define TYPVAL_ENCODE_SCOPE
+#define TYPVAL_ENCODE_NAME echo
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE garray_T *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME gap
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
+
+#undef TYPVAL_ENCODE_CONV_RECURSE
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
do { \
if (!did_echo_string_emsg) { \
/* Only give this message once for a recursive call to avoid */ \
@@ -808,30 +493,29 @@ DEFINE_VIML_CONV_FUNCTIONS(, echo, garray_T *const, gap)
EMSG(_("E724: unable to correctly dump variable " \
"with self-referencing container")); \
} \
- return OK; \
} while (0)
-#undef CONV_ALLOW_SPECIAL
-#define CONV_ALLOW_SPECIAL true
+#undef TYPVAL_ENCODE_ALLOW_SPECIALS
+#define TYPVAL_ENCODE_ALLOW_SPECIALS true
-#undef CONV_NIL
-#define CONV_NIL() \
+#undef TYPVAL_ENCODE_CONV_NIL
+#define TYPVAL_ENCODE_CONV_NIL(tv) \
ga_concat(gap, "null")
-#undef CONV_BOOL
-#define CONV_BOOL(num) \
+#undef TYPVAL_ENCODE_CONV_BOOL
+#define TYPVAL_ENCODE_CONV_BOOL(tv, num) \
ga_concat(gap, ((num)? "true": "false"))
-#undef CONV_UNSIGNED_NUMBER
-#define CONV_UNSIGNED_NUMBER(num) \
+#undef TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER(tv, num) \
do { \
char numbuf[NUMBUFLEN]; \
vim_snprintf(numbuf, ARRAY_SIZE(numbuf), "%" PRIu64, (num)); \
ga_concat(gap, numbuf); \
} while (0)
-#undef CONV_FLOAT
-#define CONV_FLOAT(flt) \
+#undef TYPVAL_ENCODE_CONV_FLOAT
+#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
do { \
const float_T flt_ = (flt); \
switch (fpclassify(flt_)) { \
@@ -1019,24 +703,24 @@ static inline int convert_to_json_string(garray_T *const gap,
return OK;
}
-#undef CONV_STRING
-#define CONV_STRING(buf, len) \
+#undef TYPVAL_ENCODE_CONV_STRING
+#define TYPVAL_ENCODE_CONV_STRING(tv, buf, len) \
do { \
if (convert_to_json_string(gap, (const char *) (buf), (len)) != OK) { \
return FAIL; \
} \
} while (0)
-#undef CONV_EXT_STRING
-#define CONV_EXT_STRING(buf, len, type) \
+#undef TYPVAL_ENCODE_CONV_EXT_STRING
+#define TYPVAL_ENCODE_CONV_EXT_STRING(tv, buf, len, type) \
do { \
xfree(buf); \
EMSG(_("E474: Unable to convert EXT string to JSON")); \
return FAIL; \
} while (0)
-#undef CONV_FUNC
-#define CONV_FUNC(fun) \
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
return conv_error(_("E474: Error while dumping %s, %s: " \
"attempt to dump function reference"), \
mpstack, objname)
@@ -1044,9 +728,8 @@ static inline int convert_to_json_string(garray_T *const gap,
/// Check whether given key can be used in json_encode()
///
/// @param[in] tv Key to check.
-static inline bool check_json_key(const typval_T *const tv)
+bool encode_check_json_key(const typval_T *const tv)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
- FUNC_ATTR_ALWAYS_INLINE
{
if (tv->v_type == VAR_STRING) {
return true;
@@ -1080,38 +763,51 @@ static inline bool check_json_key(const typval_T *const tv)
return true;
}
-#undef CONV_SPECIAL_DICT_KEY_CHECK
-#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair) \
+#undef TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+#define TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(label, key) \
do { \
- if (!check_json_key(&kv_pair->lv_first->li_tv)) { \
+ if (!encode_check_json_key(&key)) { \
EMSG(_("E474: Invalid key in special dictionary")); \
- goto encode_vim_to_##name##_error_ret; \
+ goto label; \
} \
} while (0)
-DEFINE_VIML_CONV_FUNCTIONS(static, json, garray_T *const, gap)
-
-#undef CONV_STRING
-#undef CONV_STR_STRING
-#undef CONV_EXT_STRING
-#undef CONV_NUMBER
-#undef CONV_FLOAT
-#undef CONV_FUNC
-#undef CONV_EMPTY_LIST
-#undef CONV_LIST_START
-#undef CONV_EMPTY_DICT
-#undef CONV_NIL
-#undef CONV_BOOL
-#undef CONV_UNSIGNED_NUMBER
-#undef CONV_DICT_START
-#undef CONV_DICT_END
-#undef CONV_DICT_AFTER_KEY
-#undef CONV_DICT_BETWEEN_ITEMS
-#undef CONV_SPECIAL_DICT_KEY_CHECK
-#undef CONV_LIST_END
-#undef CONV_LIST_BETWEEN_ITEMS
-#undef CONV_RECURSE
-#undef CONV_ALLOW_SPECIAL
+#define TYPVAL_ENCODE_SCOPE static
+#define TYPVAL_ENCODE_NAME json
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE garray_T *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME gap
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
+
+#undef TYPVAL_ENCODE_CONV_STRING
+#undef TYPVAL_ENCODE_CONV_STR_STRING
+#undef TYPVAL_ENCODE_CONV_EXT_STRING
+#undef TYPVAL_ENCODE_CONV_NUMBER
+#undef TYPVAL_ENCODE_CONV_FLOAT
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+#undef TYPVAL_ENCODE_CONV_FUNC_END
+#undef TYPVAL_ENCODE_CONV_EMPTY_LIST
+#undef TYPVAL_ENCODE_CONV_LIST_START
+#undef TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START
+#undef TYPVAL_ENCODE_CONV_EMPTY_DICT
+#undef TYPVAL_ENCODE_CONV_NIL
+#undef TYPVAL_ENCODE_CONV_BOOL
+#undef TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+#undef TYPVAL_ENCODE_CONV_DICT_START
+#undef TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START
+#undef TYPVAL_ENCODE_CONV_DICT_END
+#undef TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
+#undef TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+#undef TYPVAL_ENCODE_CONV_LIST_END
+#undef TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_CONV_RECURSE
+#undef TYPVAL_ENCODE_ALLOW_SPECIALS
/// Return a string with the string representation of a variable.
/// Puts quotes around strings, so that they can be parsed back by eval().
@@ -1125,7 +821,10 @@ char *encode_tv2string(typval_T *tv, size_t *len)
{
garray_T ga;
ga_init(&ga, (int)sizeof(char), 80);
- encode_vim_to_string(&ga, tv, "encode_tv2string() argument");
+ const int evs_ret = encode_vim_to_string(&ga, tv,
+ "encode_tv2string() argument");
+ (void)evs_ret;
+ assert(evs_ret == OK);
did_echo_string_emsg = false;
if (len != NULL) {
*len = (size_t) ga.ga_len;
@@ -1151,7 +850,9 @@ char *encode_tv2echo(typval_T *tv, size_t *len)
ga_concat(&ga, tv->vval.v_string);
}
} else {
- encode_vim_to_echo(&ga, tv, ":echo argument");
+ const int eve_ret = encode_vim_to_echo(&ga, tv, ":echo argument");
+ (void)eve_ret;
+ assert(eve_ret == OK);
}
if (len != NULL) {
*len = (size_t) ga.ga_len;
@@ -1172,16 +873,19 @@ char *encode_tv2json(typval_T *tv, size_t *len)
{
garray_T ga;
ga_init(&ga, (int)sizeof(char), 80);
- encode_vim_to_json(&ga, tv, "encode_tv2json() argument");
+ const int evj_ret = encode_vim_to_json(&ga, tv, "encode_tv2json() argument");
+ if (!evj_ret) {
+ ga_clear(&ga);
+ }
did_echo_string_emsg = false;
if (len != NULL) {
- *len = (size_t) ga.ga_len;
+ *len = (size_t)ga.ga_len;
}
ga_append(&ga, '\0');
- return (char *) ga.ga_data;
+ return (char *)ga.ga_data;
}
-#define CONV_STRING(buf, len) \
+#define TYPVAL_ENCODE_CONV_STRING(tv, buf, len) \
do { \
if (buf == NULL) { \
msgpack_pack_bin(packer, 0); \
@@ -1192,7 +896,7 @@ char *encode_tv2json(typval_T *tv, size_t *len)
} \
} while (0)
-#define CONV_STR_STRING(buf, len) \
+#define TYPVAL_ENCODE_CONV_STR_STRING(tv, buf, len) \
do { \
if (buf == NULL) { \
msgpack_pack_str(packer, 0); \
@@ -1203,7 +907,7 @@ char *encode_tv2json(typval_T *tv, size_t *len)
} \
} while (0)
-#define CONV_EXT_STRING(buf, len, type) \
+#define TYPVAL_ENCODE_CONV_EXT_STRING(tv, buf, len, type) \
do { \
if (buf == NULL) { \
msgpack_pack_ext(packer, 0, (int8_t) type); \
@@ -1214,30 +918,36 @@ char *encode_tv2json(typval_T *tv, size_t *len)
} \
} while (0)
-#define CONV_NUMBER(num) \
- msgpack_pack_int64(packer, (int64_t) (num))
+#define TYPVAL_ENCODE_CONV_NUMBER(tv, num) \
+ msgpack_pack_int64(packer, (int64_t)(num))
-#define CONV_FLOAT(flt) \
- msgpack_pack_double(packer, (double) (flt))
+#define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \
+ msgpack_pack_double(packer, (double)(flt))
-#define CONV_FUNC(fun) \
- return conv_error(_("E951: Error while dumping %s, %s: " \
+#define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \
+ return conv_error(_("E5004: Error while dumping %s, %s: " \
"attempt to dump function reference"), \
mpstack, objname)
-#define CONV_EMPTY_LIST() \
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, len)
+#define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, len)
+#define TYPVAL_ENCODE_CONV_FUNC_END(tv)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_LIST(tv) \
msgpack_pack_array(packer, 0)
-#define CONV_LIST_START(lst) \
- msgpack_pack_array(packer, (size_t) (lst)->lv_len)
+#define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \
+ msgpack_pack_array(packer, (size_t)(len))
-#define CONV_EMPTY_DICT() \
+#define TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, mpsv)
+
+#define TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, dict) \
msgpack_pack_map(packer, 0)
-#define CONV_NIL() \
+#define TYPVAL_ENCODE_CONV_NIL(tv) \
msgpack_pack_nil(packer)
-#define CONV_BOOL(num) \
+#define TYPVAL_ENCODE_CONV_BOOL(tv, num) \
do { \
if ((num)) { \
msgpack_pack_true(packer); \
@@ -1246,51 +956,66 @@ char *encode_tv2json(typval_T *tv, size_t *len)
} \
} while (0)
-#define CONV_UNSIGNED_NUMBER(num) \
+#define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER(tv, num) \
msgpack_pack_uint64(packer, (num))
-#define CONV_DICT_START(len) \
- msgpack_pack_map(packer, (size_t) (len))
+#define TYPVAL_ENCODE_CONV_DICT_START(tv, dict, len) \
+ msgpack_pack_map(packer, (size_t)(len))
+
+#define TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, dict, mpsv)
-#define CONV_DICT_END()
+#define TYPVAL_ENCODE_CONV_DICT_END(tv, dict)
-#define CONV_DICT_AFTER_KEY()
+#define TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(tv, dict)
-#define CONV_DICT_BETWEEN_ITEMS()
+#define TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, dict)
-#define CONV_SPECIAL_DICT_KEY_CHECK(name, kv_pair)
+#define TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(label, key)
-#define CONV_LIST_END(lst)
+#define TYPVAL_ENCODE_CONV_LIST_END(tv)
-#define CONV_LIST_BETWEEN_ITEMS()
+#define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(tv)
-#define CONV_RECURSE(val, conv_type) \
- return conv_error(_("E952: Unable to dump %s: " \
+#define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \
+ return conv_error(_("E5005: Unable to dump %s: " \
"container references itself in %s"), \
mpstack, objname)
-#define CONV_ALLOW_SPECIAL true
-
-DEFINE_VIML_CONV_FUNCTIONS(, msgpack, msgpack_packer *const, packer)
-
-#undef CONV_STRING
-#undef CONV_STR_STRING
-#undef CONV_EXT_STRING
-#undef CONV_NUMBER
-#undef CONV_FLOAT
-#undef CONV_FUNC
-#undef CONV_EMPTY_LIST
-#undef CONV_LIST_START
-#undef CONV_EMPTY_DICT
-#undef CONV_NIL
-#undef CONV_BOOL
-#undef CONV_UNSIGNED_NUMBER
-#undef CONV_DICT_START
-#undef CONV_DICT_END
-#undef CONV_DICT_AFTER_KEY
-#undef CONV_DICT_BETWEEN_ITEMS
-#undef CONV_SPECIAL_DICT_KEY_CHECK
-#undef CONV_LIST_END
-#undef CONV_LIST_BETWEEN_ITEMS
-#undef CONV_RECURSE
-#undef CONV_ALLOW_SPECIAL
+#define TYPVAL_ENCODE_ALLOW_SPECIALS true
+
+#define TYPVAL_ENCODE_SCOPE
+#define TYPVAL_ENCODE_NAME msgpack
+#define TYPVAL_ENCODE_FIRST_ARG_TYPE msgpack_packer *const
+#define TYPVAL_ENCODE_FIRST_ARG_NAME packer
+#include "nvim/eval/typval_encode.c.h"
+#undef TYPVAL_ENCODE_SCOPE
+#undef TYPVAL_ENCODE_NAME
+#undef TYPVAL_ENCODE_FIRST_ARG_TYPE
+#undef TYPVAL_ENCODE_FIRST_ARG_NAME
+
+#undef TYPVAL_ENCODE_CONV_STRING
+#undef TYPVAL_ENCODE_CONV_STR_STRING
+#undef TYPVAL_ENCODE_CONV_EXT_STRING
+#undef TYPVAL_ENCODE_CONV_NUMBER
+#undef TYPVAL_ENCODE_CONV_FLOAT
+#undef TYPVAL_ENCODE_CONV_FUNC_START
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+#undef TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+#undef TYPVAL_ENCODE_CONV_FUNC_END
+#undef TYPVAL_ENCODE_CONV_EMPTY_LIST
+#undef TYPVAL_ENCODE_CONV_LIST_START
+#undef TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START
+#undef TYPVAL_ENCODE_CONV_EMPTY_DICT
+#undef TYPVAL_ENCODE_CONV_NIL
+#undef TYPVAL_ENCODE_CONV_BOOL
+#undef TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+#undef TYPVAL_ENCODE_CONV_DICT_START
+#undef TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START
+#undef TYPVAL_ENCODE_CONV_DICT_END
+#undef TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
+#undef TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+#undef TYPVAL_ENCODE_CONV_LIST_END
+#undef TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS
+#undef TYPVAL_ENCODE_CONV_RECURSE
+#undef TYPVAL_ENCODE_ALLOW_SPECIALS
diff --git a/src/nvim/eval/typval_encode.c.h b/src/nvim/eval/typval_encode.c.h
new file mode 100644
index 0000000000..365eb2dd77
--- /dev/null
+++ b/src/nvim/eval/typval_encode.c.h
@@ -0,0 +1,802 @@
+/// @file eval/typval_encode.c.h
+///
+/// Contains set of macros used to convert (possibly recursive) typval_T into
+/// something else. For these macros to work the following macros must be
+/// defined:
+
+/// @def TYPVAL_ENCODE_CONV_NIL
+/// @brief Macros used to convert NIL value
+///
+/// Is called both for special dictionary (unless #TYPVAL_ENCODE_ALLOW_SPECIALS
+/// is false) and `v:null`.
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. May
+/// point to special dictionary.
+
+/// @def TYPVAL_ENCODE_CONV_BOOL
+/// @brief Macros used to convert boolean value
+///
+/// Is called both for special dictionary (unless #TYPVAL_ENCODE_ALLOW_SPECIALS
+/// is false) and `v:true`/`v:false`.
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. May
+/// point to a special dictionary.
+/// @param num Boolean value to convert. Value is an expression which
+/// evaluates to some integer.
+
+/// @def TYPVAL_ENCODE_CONV_NUMBER
+/// @brief Macros used to convert integer
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. May
+/// point to a special dictionary.
+/// @param num Integer to convert, must accept both varnumber_T and int64_t.
+
+/// @def TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER
+/// @brief Macros used to convert unsigned integer
+///
+/// Not used if #TYPVAL_ENCODE_ALLOW_SPECIALS is false, but still must be
+/// defined.
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. Points
+/// to a special dictionary.
+/// @param num Integer to convert, must accept uint64_t.
+
+/// @def TYPVAL_ENCODE_CONV_FLOAT
+/// @brief Macros used to convert floating-point number
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. May
+/// point to a special dictionary.
+/// @param flt Number to convert, must accept float_T.
+
+/// @def TYPVAL_ENCODE_CONV_STRING
+/// @brief Macros used to convert plain string
+///
+/// Is used to convert VAR_STRING objects as well as BIN strings represented as
+/// special dictionary.
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. May
+/// point to a special dictionary.
+/// @param buf String to convert. Is a char[] buffer, not NUL-terminated.
+/// @param len String length.
+
+/// @def TYPVAL_ENCODE_CONV_STR_STRING
+/// @brief Like #TYPVAL_ENCODE_CONV_STRING, but for STR strings
+///
+/// Is used to convert dictionary keys and STR strings represented as special
+/// dictionaries.
+///
+/// @param tv Pointer to typval where value is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param buf String to convert. Is a char[] buffer, not NUL-terminated.
+/// @param len String length.
+
+/// @def TYPVAL_ENCODE_CONV_EXT_STRING
+/// @brief Macros used to convert EXT string
+///
+/// Is used to convert EXT strings represented as special dictionaries. Never
+/// actually used if #TYPVAL_ENCODE_ALLOW_SPECIALS is false, but still must be
+/// defined.
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL. Points
+/// to a special dictionary.
+/// @param buf String to convert. Is a char[] buffer, not NUL-terminated.
+/// @param len String length.
+/// @param type EXT type.
+
+/// @def TYPVAL_ENCODE_CONV_FUNC_START
+/// @brief Macros used when starting to convert a funcref or a partial
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL.
+/// @param fun Function name. May be NULL.
+
+/// @def TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS
+/// @brief Macros used before starting to convert partial arguments
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL.
+/// @param len Number of arguments. Zero for absent arguments or when
+/// converting a funcref.
+
+/// @def TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF
+/// @brief Macros used before starting to convert self dictionary
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL.
+/// @param len Number of arguments. May be zero for empty dictionary or -1 for
+/// missing self dictionary, also when converting function
+/// reference.
+
+/// @def TYPVAL_ENCODE_CONV_FUNC_END
+/// @brief Macros used after converting a funcref or a partial
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL.
+
+/// @def TYPVAL_ENCODE_CONV_EMPTY_LIST
+/// @brief Macros used to convert an empty list
+///
+/// @param tv Pointer to typval where value is stored. May not be NULL.
+
+/// @def TYPVAL_ENCODE_CONV_EMPTY_DICT
+/// @brief Macros used to convert an empty dictionary
+///
+/// @param tv Pointer to typval where value is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param dict Converted dictionary, lvalue or #TYPVAL_ENCODE_NODICT_VAR
+/// (for dictionaries represented as special lists).
+
+/// @def TYPVAL_ENCODE_CONV_LIST_START
+/// @brief Macros used before starting to convert non-empty list
+///
+/// @param tv Pointer to typval where value is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param len List length. Is an expression which evaluates to an integer.
+
+/// @def TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START
+/// @brief Macros used after pushing list onto the stack
+///
+/// Only used for real list_T* lists, not for special dictionaries or partial
+/// arguments.
+///
+/// @param tv Pointer to typval where value is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param mpsv Pushed MPConvStackVal value.
+
+/// @def TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS
+/// @brief Macros used after finishing converting non-last list item
+///
+/// @param tv Pointer to typval where list is stored. May be NULL.
+
+/// @def TYPVAL_ENCODE_CONV_LIST_END
+/// @brief Macros used after converting non-empty list
+///
+/// @param tv Pointer to typval where list is stored. May be NULL.
+
+/// @def TYPVAL_ENCODE_CONV_DICT_START
+/// @brief Macros used before starting to convert non-empty dictionary
+///
+/// Only used for real dict_T* dictionaries, not for special dictionaries. Also
+/// used for partial self dictionary.
+///
+/// @param tv Pointer to typval where dictionary is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param dict Converted dictionary, lvalue or #TYPVAL_ENCODE_NODICT_VAR
+/// (for dictionaries represented as special lists).
+/// @param len Dictionary length. Is an expression which evaluates to an
+/// integer.
+
+/// @def TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START
+/// @brief Macros used after pushing dictionary onto the stack
+///
+/// @param tv Pointer to typval where dictionary is stored. May be NULL.
+/// May not point to a special dictionary.
+/// @param dict Converted dictionary, lvalue.
+/// @param mpsv Pushed MPConvStackVal value.
+
+/// @def TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK
+/// @brief Macros used to check special dictionary key
+///
+/// @param label Label for goto in case check was not successfull.
+/// @param key typval_T key to check.
+
+/// @def TYPVAL_ENCODE_CONV_DICT_AFTER_KEY
+/// @brief Macros used after finishing converting dictionary key
+///
+/// @param tv Pointer to typval where dictionary is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param dict Converted dictionary, lvalue or #TYPVAL_ENCODE_NODICT_VAR
+/// (for dictionaries represented as special lists).
+
+/// @def TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS
+/// @brief Macros used after finishing converting non-last dictionary value
+///
+/// @param tv Pointer to typval where dictionary is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param dict Converted dictionary, lvalue or #TYPVAL_ENCODE_NODICT_VAR
+/// (for dictionaries represented as special lists).
+
+/// @def TYPVAL_ENCODE_CONV_DICT_END
+/// @brief Macros used after converting non-empty dictionary
+///
+/// @param tv Pointer to typval where dictionary is stored. May be NULL. May
+/// point to a special dictionary.
+/// @param dict Converted dictionary, lvalue or #TYPVAL_ENCODE_NODICT_VAR
+/// (for dictionaries represented as special lists).
+
+/// @def TYPVAL_ENCODE_CONV_RECURSE
+/// @brief Macros used when self-containing container is detected
+///
+/// @param val Container for which this situation was detected.
+/// @param conv_type Type of the stack entry, @see MPConvStackValType.
+
+/// @def TYPVAL_ENCODE_ALLOW_SPECIALS
+/// @brief Macros that specifies whether special dictionaries are special
+///
+/// Must be something that evaluates to boolean, most likely `true` or `false`.
+/// If it is false then special dictionaries are not treated specially.
+
+/// @def TYPVAL_ENCODE_SCOPE
+/// @brief Scope of the main function: either nothing or `static`
+
+/// @def TYPVAL_ENCODE_NAME
+/// @brief Name of the target converter
+///
+/// After including this file it will define function
+/// `encode_vim_to_{TYPVAL_ENCODE_NAME}` with scope #TYPVAL_ENCODE_SCOPE and
+/// static functions `_typval_encode_{TYPVAL_ENCODE_NAME}_convert_one_value` and
+/// `_typval_encode_{TYPVAL_ENCODE_NAME}_check_self_reference`.
+
+/// @def TYPVAL_ENCODE_FIRST_ARG_TYPE
+/// @brief Type of the first argument, which will be used to return the results
+///
+/// Is expected to be a pointer type.
+
+/// @def TYPVAL_ENCODE_FIRST_ARG_NAME
+/// @brief Name of the first argument
+///
+/// This name will only be used by one of the above macros which are defined by
+/// the caller. Functions defined here do not use first argument directly.
+#ifndef NVIM_EVAL_TYPVAL_ENCODE_C_H
+#define NVIM_EVAL_TYPVAL_ENCODE_C_H
+#undef NVIM_EVAL_TYPVAL_ENCODE_C_H
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <assert.h>
+
+#include "nvim/lib/kvec.h"
+#include "nvim/eval_defs.h"
+#include "nvim/eval/encode.h"
+#include "nvim/func_attr.h"
+#include "nvim/eval/typval_encode.h"
+
+/// Dummy variable used because some macros need lvalue
+///
+/// Must not be written to, if needed one must check that address of the
+/// macros argument is (not) equal to `&TYPVAL_ENCODE_NODICT_VAR`.
+const dict_T *const TYPVAL_ENCODE_NODICT_VAR = NULL;
+
+static inline int _TYPVAL_ENCODE_CHECK_SELF_REFERENCE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ void *const val, int *const val_copyID,
+ const MPConvStack *const mpstack, const int copyID,
+ const MPConvStackValType conv_type,
+ const char *const objname)
+ REAL_FATTR_NONNULL_ARG(2, 3, 4, 7) REAL_FATTR_WARN_UNUSED_RESULT
+ REAL_FATTR_ALWAYS_INLINE;
+
+/// Function for checking whether container references itself
+///
+/// @param TYPVAL_ENCODE_FIRST_ARG_NAME First argument.
+/// @param[in,out] val Container to check.
+/// @param val_copyID Pointer to the container attribute that holds copyID.
+/// After checking whether value of this attribute is
+/// copyID (variable) it is set to copyID.
+/// @param[in] mpstack Stack with values to convert. Read-only, used for error
+/// reporting.
+/// @param[in] copyID CopyID used by the caller.
+/// @param[in] conv_type Type of the conversion, @see MPConvStackValType.
+/// @param[in] objname Object name, used for error reporting.
+///
+/// @return NOTDONE in case of success, what to return in case of failure.
+static inline int _TYPVAL_ENCODE_CHECK_SELF_REFERENCE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ void *const val, int *const val_copyID,
+ const MPConvStack *const mpstack, const int copyID,
+ const MPConvStackValType conv_type,
+ const char *const objname)
+{
+ if (*val_copyID == copyID) {
+ TYPVAL_ENCODE_CONV_RECURSE(val, conv_type);
+ return OK;
+ }
+ *val_copyID = copyID;
+ return NOTDONE;
+}
+
+static int _TYPVAL_ENCODE_CONVERT_ONE_VALUE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ MPConvStack *const mpstack, MPConvStackVal *const cur_mpsv,
+ typval_T *const tv, const int copyID,
+ const char *const objname)
+ REAL_FATTR_NONNULL_ARG(2, 4, 6) REAL_FATTR_WARN_UNUSED_RESULT;
+
+/// Convert single value
+///
+/// Only scalar values are converted immediately, everything else is pushed onto
+/// the stack.
+///
+/// @param TYPVAL_ENCODE_FIRST_ARG_NAME First argument, defined by the
+/// includer. Only meaningful to macros
+/// defined by the includer.
+/// @param mpstack Stack with values to convert. Values which are not
+/// converted completely by this function (i.e.
+/// non-scalars) are pushed here.
+/// @param cur_mpsv Currently converted value from stack.
+/// @param tv Converted value.
+/// @param[in] copyID CopyID.
+/// @param[in] objname Object name, used for error reporting.
+///
+/// @return OK in case of success, FAIL in case of failure.
+static int _TYPVAL_ENCODE_CONVERT_ONE_VALUE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ MPConvStack *const mpstack, MPConvStackVal *const cur_mpsv,
+ typval_T *const tv, const int copyID,
+ const char *const objname)
+{
+ switch (tv->v_type) {
+ case VAR_STRING: {
+ TYPVAL_ENCODE_CONV_STRING(tv, tv->vval.v_string, tv_strlen(tv));
+ break;
+ }
+ case VAR_NUMBER: {
+ TYPVAL_ENCODE_CONV_NUMBER(tv, tv->vval.v_number);
+ break;
+ }
+ case VAR_FLOAT: {
+ TYPVAL_ENCODE_CONV_FLOAT(tv, tv->vval.v_float);
+ break;
+ }
+ case VAR_FUNC: {
+ TYPVAL_ENCODE_CONV_FUNC_START(tv, tv->vval.v_string);
+ TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, 0);
+ TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, -1);
+ TYPVAL_ENCODE_CONV_FUNC_END(tv);
+ break;
+ }
+ case VAR_PARTIAL: {
+ partial_T *const pt = tv->vval.v_partial;
+ (void)pt;
+ TYPVAL_ENCODE_CONV_FUNC_START(tv, (pt == NULL ? NULL : pt->pt_name));
+ _mp_push(*mpstack, ((MPConvStackVal) {
+ .type = kMPConvPartial,
+ .tv = tv,
+ .data = {
+ .p = {
+ .stage = kMPConvPartialArgs,
+ .pt = tv->vval.v_partial,
+ },
+ },
+ }));
+ break;
+ }
+ case VAR_LIST: {
+ if (tv->vval.v_list == NULL || tv->vval.v_list->lv_len == 0) {
+ TYPVAL_ENCODE_CONV_EMPTY_LIST(tv);
+ break;
+ }
+ _TYPVAL_ENCODE_DO_CHECK_SELF_REFERENCE(tv->vval.v_list, lv_copyID, copyID,
+ kMPConvList);
+ TYPVAL_ENCODE_CONV_LIST_START(tv, tv->vval.v_list->lv_len);
+ _mp_push(*mpstack, ((MPConvStackVal) {
+ .type = kMPConvList,
+ .tv = tv,
+ .data = {
+ .l = {
+ .list = tv->vval.v_list,
+ .li = tv->vval.v_list->lv_first,
+ },
+ },
+ }));
+ TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, _mp_last(*mpstack));
+ break;
+ }
+ case VAR_SPECIAL: {
+ switch (tv->vval.v_special) {
+ case kSpecialVarNull: {
+ TYPVAL_ENCODE_CONV_NIL(tv);
+ break;
+ }
+ case kSpecialVarTrue:
+ case kSpecialVarFalse: {
+ TYPVAL_ENCODE_CONV_BOOL(tv, tv->vval.v_special == kSpecialVarTrue);
+ break;
+ }
+ }
+ break;
+ }
+ case VAR_DICT: {
+ if (tv->vval.v_dict == NULL
+ || tv->vval.v_dict->dv_hashtab.ht_used == 0) {
+ TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, tv->vval.v_dict);
+ break;
+ }
+ const dictitem_T *type_di;
+ const dictitem_T *val_di;
+ if (TYPVAL_ENCODE_ALLOW_SPECIALS
+ && tv->vval.v_dict->dv_hashtab.ht_used == 2
+ && (type_di = dict_find((dict_T *)tv->vval.v_dict,
+ (char_u *)"_TYPE", -1)) != NULL
+ && type_di->di_tv.v_type == VAR_LIST
+ && (val_di = dict_find((dict_T *)tv->vval.v_dict,
+ (char_u *)"_VAL", -1)) != NULL) {
+ size_t i;
+ for (i = 0; i < ARRAY_SIZE(eval_msgpack_type_lists); i++) {
+ if (type_di->di_tv.vval.v_list == eval_msgpack_type_lists[i]) {
+ break;
+ }
+ }
+ if (i == ARRAY_SIZE(eval_msgpack_type_lists)) {
+ goto _convert_one_value_regular_dict;
+ }
+ switch ((MessagePackType)i) {
+ case kMPNil: {
+ TYPVAL_ENCODE_CONV_NIL(tv);
+ break;
+ }
+ case kMPBoolean: {
+ if (val_di->di_tv.v_type != VAR_NUMBER) {
+ goto _convert_one_value_regular_dict;
+ }
+ TYPVAL_ENCODE_CONV_BOOL(tv, val_di->di_tv.vval.v_number);
+ break;
+ }
+ case kMPInteger: {
+ const list_T *val_list;
+ varnumber_T sign;
+ varnumber_T highest_bits;
+ varnumber_T high_bits;
+ varnumber_T low_bits;
+ // List of 4 integers; first is signed (should be 1 or -1, but
+ // this is not checked), second is unsigned and have at most
+ // one (sign is -1) or two (sign is 1) non-zero bits (number of
+ // bits is not checked), other unsigned and have at most 31
+ // non-zero bits (number of bits is not checked).
+ if (val_di->di_tv.v_type != VAR_LIST
+ || (val_list = val_di->di_tv.vval.v_list) == NULL
+ || val_list->lv_len != 4
+ || val_list->lv_first->li_tv.v_type != VAR_NUMBER
+ || (sign = val_list->lv_first->li_tv.vval.v_number) == 0
+ || val_list->lv_first->li_next->li_tv.v_type != VAR_NUMBER
+ || (highest_bits =
+ val_list->lv_first->li_next->li_tv.vval.v_number) < 0
+ || val_list->lv_last->li_prev->li_tv.v_type != VAR_NUMBER
+ || (high_bits =
+ val_list->lv_last->li_prev->li_tv.vval.v_number) < 0
+ || val_list->lv_last->li_tv.v_type != VAR_NUMBER
+ || (low_bits = val_list->lv_last->li_tv.vval.v_number) < 0) {
+ goto _convert_one_value_regular_dict;
+ }
+ uint64_t number = ((uint64_t)(((uint64_t)highest_bits) << 62)
+ | (uint64_t)(((uint64_t)high_bits) << 31)
+ | (uint64_t)low_bits);
+ if (sign > 0) {
+ TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER(tv, number);
+ } else {
+ TYPVAL_ENCODE_CONV_NUMBER(tv, -number);
+ }
+ break;
+ }
+ case kMPFloat: {
+ if (val_di->di_tv.v_type != VAR_FLOAT) {
+ goto _convert_one_value_regular_dict;
+ }
+ TYPVAL_ENCODE_CONV_FLOAT(tv, val_di->di_tv.vval.v_float);
+ break;
+ }
+ case kMPString:
+ case kMPBinary: {
+ const bool is_string = ((MessagePackType)i == kMPString);
+ if (val_di->di_tv.v_type != VAR_LIST) {
+ goto _convert_one_value_regular_dict;
+ }
+ size_t len;
+ char *buf;
+ if (!encode_vim_list_to_buf(val_di->di_tv.vval.v_list, &len,
+ &buf)) {
+ goto _convert_one_value_regular_dict;
+ }
+ if (is_string) {
+ TYPVAL_ENCODE_CONV_STR_STRING(tv, buf, len);
+ } else {
+ TYPVAL_ENCODE_CONV_STRING(tv, buf, len);
+ }
+ xfree(buf);
+ break;
+ }
+ case kMPArray: {
+ if (val_di->di_tv.v_type != VAR_LIST) {
+ goto _convert_one_value_regular_dict;
+ }
+ _TYPVAL_ENCODE_DO_CHECK_SELF_REFERENCE(val_di->di_tv.vval.v_list,
+ lv_copyID, copyID,
+ kMPConvList);
+ TYPVAL_ENCODE_CONV_LIST_START(tv,
+ val_di->di_tv.vval.v_list->lv_len);
+ _mp_push(*mpstack, ((MPConvStackVal) {
+ .tv = tv,
+ .type = kMPConvList,
+ .data = {
+ .l = {
+ .list = val_di->di_tv.vval.v_list,
+ .li = val_di->di_tv.vval.v_list->lv_first,
+ },
+ },
+ }));
+ break;
+ }
+ case kMPMap: {
+ if (val_di->di_tv.v_type != VAR_LIST) {
+ goto _convert_one_value_regular_dict;
+ }
+ list_T *const val_list = val_di->di_tv.vval.v_list;
+ if (val_list == NULL || val_list->lv_len == 0) {
+ TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, TYPVAL_ENCODE_NODICT_VAR);
+ break;
+ }
+ for (const listitem_T *li = val_list->lv_first; li != NULL;
+ li = li->li_next) {
+ if (li->li_tv.v_type != VAR_LIST
+ || li->li_tv.vval.v_list->lv_len != 2) {
+ goto _convert_one_value_regular_dict;
+ }
+ }
+ _TYPVAL_ENCODE_DO_CHECK_SELF_REFERENCE(val_list, lv_copyID, copyID,
+ kMPConvPairs);
+ TYPVAL_ENCODE_CONV_DICT_START(tv, TYPVAL_ENCODE_NODICT_VAR,
+ val_list->lv_len);
+ _mp_push(*mpstack, ((MPConvStackVal) {
+ .tv = tv,
+ .type = kMPConvPairs,
+ .data = {
+ .l = {
+ .list = val_list,
+ .li = val_list->lv_first,
+ },
+ },
+ }));
+ break;
+ }
+ case kMPExt: {
+ const list_T *val_list;
+ varnumber_T type;
+ if (val_di->di_tv.v_type != VAR_LIST
+ || (val_list = val_di->di_tv.vval.v_list) == NULL
+ || val_list->lv_len != 2
+ || (val_list->lv_first->li_tv.v_type != VAR_NUMBER)
+ || (type = val_list->lv_first->li_tv.vval.v_number) > INT8_MAX
+ || type < INT8_MIN
+ || (val_list->lv_last->li_tv.v_type != VAR_LIST)) {
+ goto _convert_one_value_regular_dict;
+ }
+ size_t len;
+ char *buf;
+ if (!encode_vim_list_to_buf(val_list->lv_last->li_tv.vval.v_list,
+ &len, &buf)) {
+ goto _convert_one_value_regular_dict;
+ }
+ TYPVAL_ENCODE_CONV_EXT_STRING(tv, buf, len, type);
+ xfree(buf);
+ break;
+ }
+ }
+ break;
+ }
+_convert_one_value_regular_dict:
+ _TYPVAL_ENCODE_DO_CHECK_SELF_REFERENCE(tv->vval.v_dict, dv_copyID, copyID,
+ kMPConvDict);
+ TYPVAL_ENCODE_CONV_DICT_START(tv, tv->vval.v_dict,
+ tv->vval.v_dict->dv_hashtab.ht_used);
+ _mp_push(*mpstack, ((MPConvStackVal) {
+ .tv = tv,
+ .type = kMPConvDict,
+ .data = {
+ .d = {
+ .dict = tv->vval.v_dict,
+ .dictp = &tv->vval.v_dict,
+ .hi = tv->vval.v_dict->dv_hashtab.ht_array,
+ .todo = tv->vval.v_dict->dv_hashtab.ht_used,
+ },
+ },
+ }));
+ TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, tv->vval.v_dict,
+ _mp_last(*mpstack));
+ break;
+ }
+ case VAR_UNKNOWN: {
+ EMSG2(_(e_intern2), STR(_TYPVAL_ENCODE_CONVERT_ONE_VALUE) "()");
+ return FAIL;
+ }
+ }
+typval_encode_stop_converting_one_item:
+ return OK;
+ // Prevent “unused label†warnings.
+ goto typval_encode_stop_converting_one_item;
+}
+
+TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ typval_T *const tv, const char *const objname)
+ REAL_FATTR_NONNULL_ARG(2, 3) REAL_FATTR_WARN_UNUSED_RESULT;
+
+/// Convert the whole typval
+///
+/// @param TYPVAL_ENCODE_FIRST_ARG_NAME First argument, defined by the
+/// includer. Only meaningful to macros
+/// defined by the includer.
+/// @param top_tv Converted value.
+/// @param[in] objname Object name, used for error reporting.
+///
+/// @return OK in case of success, FAIL in case of failure.
+TYPVAL_ENCODE_SCOPE int _TYPVAL_ENCODE_ENCODE(
+ TYPVAL_ENCODE_FIRST_ARG_TYPE TYPVAL_ENCODE_FIRST_ARG_NAME,
+ typval_T *const top_tv, const char *const objname)
+{
+ const int copyID = get_copyID();
+ MPConvStack mpstack;
+ _mp_init(mpstack);
+ if (_TYPVAL_ENCODE_CONVERT_ONE_VALUE(TYPVAL_ENCODE_FIRST_ARG_NAME, &mpstack,
+ NULL,
+ top_tv, copyID, objname)
+ == FAIL) {
+ goto encode_vim_to__error_ret;
+ }
+/// Label common for this and convert_one_value functions, used for escaping
+/// from macros like TYPVAL_ENCODE_CONV_DICT_START.
+typval_encode_stop_converting_one_item:
+ while (_mp_size(mpstack)) {
+ MPConvStackVal *cur_mpsv = &_mp_last(mpstack);
+ typval_T *tv = NULL;
+ switch (cur_mpsv->type) {
+ case kMPConvDict: {
+ if (!cur_mpsv->data.d.todo) {
+ (void)_mp_pop(mpstack);
+ cur_mpsv->data.d.dict->dv_copyID = copyID - 1;
+ TYPVAL_ENCODE_CONV_DICT_END(cur_mpsv->tv, *cur_mpsv->data.d.dictp);
+ continue;
+ } else if (cur_mpsv->data.d.todo
+ != cur_mpsv->data.d.dict->dv_hashtab.ht_used) {
+ TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(cur_mpsv->tv,
+ *cur_mpsv->data.d.dictp);
+ }
+ while (HASHITEM_EMPTY(cur_mpsv->data.d.hi)) {
+ cur_mpsv->data.d.hi++;
+ }
+ dictitem_T *const di = HI2DI(cur_mpsv->data.d.hi);
+ cur_mpsv->data.d.todo--;
+ cur_mpsv->data.d.hi++;
+ TYPVAL_ENCODE_CONV_STR_STRING(NULL, &di->di_key[0],
+ strlen((char *)&di->di_key[0]));
+ TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(cur_mpsv->tv,
+ *cur_mpsv->data.d.dictp);
+ tv = &di->di_tv;
+ break;
+ }
+ case kMPConvList: {
+ if (cur_mpsv->data.l.li == NULL) {
+ (void)_mp_pop(mpstack);
+ cur_mpsv->data.l.list->lv_copyID = copyID - 1;
+ TYPVAL_ENCODE_CONV_LIST_END(cur_mpsv->tv);
+ continue;
+ } else if (cur_mpsv->data.l.li != cur_mpsv->data.l.list->lv_first) {
+ TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(cur_mpsv->tv);
+ }
+ tv = &cur_mpsv->data.l.li->li_tv;
+ cur_mpsv->data.l.li = cur_mpsv->data.l.li->li_next;
+ break;
+ }
+ case kMPConvPairs: {
+ if (cur_mpsv->data.l.li == NULL) {
+ (void)_mp_pop(mpstack);
+ cur_mpsv->data.l.list->lv_copyID = copyID - 1;
+ TYPVAL_ENCODE_CONV_DICT_END(cur_mpsv->tv, TYPVAL_ENCODE_NODICT_VAR);
+ continue;
+ } else if (cur_mpsv->data.l.li != cur_mpsv->data.l.list->lv_first) {
+ TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(
+ cur_mpsv->tv, TYPVAL_ENCODE_NODICT_VAR);
+ }
+ const list_T *const kv_pair = cur_mpsv->data.l.li->li_tv.vval.v_list;
+ TYPVAL_ENCODE_SPECIAL_DICT_KEY_CHECK(
+ encode_vim_to__error_ret, kv_pair->lv_first->li_tv);
+ if (_TYPVAL_ENCODE_CONVERT_ONE_VALUE(TYPVAL_ENCODE_FIRST_ARG_NAME,
+ &mpstack, cur_mpsv,
+ &kv_pair->lv_first->li_tv,
+ copyID,
+ objname) == FAIL) {
+ goto encode_vim_to__error_ret;
+ }
+ TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(cur_mpsv->tv,
+ TYPVAL_ENCODE_NODICT_VAR);
+ tv = &kv_pair->lv_last->li_tv;
+ cur_mpsv->data.l.li = cur_mpsv->data.l.li->li_next;
+ break;
+ }
+ case kMPConvPartial: {
+ partial_T *const pt = cur_mpsv->data.p.pt;
+ tv = cur_mpsv->tv;
+ switch (cur_mpsv->data.p.stage) {
+ case kMPConvPartialArgs: {
+ TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv,
+ pt == NULL ? 0 : pt->pt_argc);
+ cur_mpsv->data.p.stage = kMPConvPartialSelf;
+ if (pt != NULL && pt->pt_argc > 0) {
+ TYPVAL_ENCODE_CONV_LIST_START(NULL, pt->pt_argc);
+ _mp_push(mpstack, ((MPConvStackVal) {
+ .type = kMPConvPartialList,
+ .tv = NULL,
+ .data = {
+ .a = {
+ .arg = pt->pt_argv,
+ .argv = pt->pt_argv,
+ .todo = (size_t)pt->pt_argc,
+ },
+ },
+ }));
+ }
+ break;
+ }
+ case kMPConvPartialSelf: {
+ cur_mpsv->data.p.stage = kMPConvPartialEnd;
+ dict_T *const dict = pt == NULL ? NULL : pt->pt_dict;
+ if (dict != NULL) {
+ TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, dict->dv_hashtab.ht_used);
+ if (dict->dv_hashtab.ht_used == 0) {
+ TYPVAL_ENCODE_CONV_EMPTY_DICT(NULL, pt->pt_dict);
+ continue;
+ }
+ const int te_csr_ret = _TYPVAL_ENCODE_CHECK_SELF_REFERENCE(
+ TYPVAL_ENCODE_FIRST_ARG_NAME,
+ dict, &dict->dv_copyID, &mpstack, copyID, kMPConvDict,
+ objname);
+ if (te_csr_ret != NOTDONE) {
+ if (te_csr_ret == FAIL) {
+ goto encode_vim_to__error_ret;
+ } else {
+ continue;
+ }
+ }
+ TYPVAL_ENCODE_CONV_DICT_START(NULL, pt->pt_dict,
+ dict->dv_hashtab.ht_used);
+ _mp_push(mpstack, ((MPConvStackVal) {
+ .type = kMPConvDict,
+ .tv = NULL,
+ .data = {
+ .d = {
+ .dict = dict,
+ .dictp = &pt->pt_dict,
+ .hi = dict->dv_hashtab.ht_array,
+ .todo = dict->dv_hashtab.ht_used,
+ },
+ },
+ }));
+ TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(NULL, pt->pt_dict,
+ _mp_last(mpstack));
+ } else {
+ TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, -1);
+ }
+ break;
+ }
+ case kMPConvPartialEnd: {
+ TYPVAL_ENCODE_CONV_FUNC_END(tv);
+ (void)_mp_pop(mpstack);
+ break;
+ }
+ }
+ continue;
+ }
+ case kMPConvPartialList: {
+ if (!cur_mpsv->data.a.todo) {
+ (void)_mp_pop(mpstack);
+ TYPVAL_ENCODE_CONV_LIST_END(NULL);
+ continue;
+ } else if (cur_mpsv->data.a.argv != cur_mpsv->data.a.arg) {
+ TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(NULL);
+ }
+ tv = cur_mpsv->data.a.arg++;
+ cur_mpsv->data.a.todo--;
+ break;
+ }
+ }
+ assert(tv != NULL);
+ if (_TYPVAL_ENCODE_CONVERT_ONE_VALUE(TYPVAL_ENCODE_FIRST_ARG_NAME, &mpstack,
+ cur_mpsv, tv, copyID, objname)
+ == FAIL) {
+ goto encode_vim_to__error_ret;
+ }
+ }
+ _mp_destroy(mpstack);
+ return OK;
+encode_vim_to__error_ret:
+ _mp_destroy(mpstack);
+ return FAIL;
+ // Prevent “unused label†warnings.
+ goto typval_encode_stop_converting_one_item;
+}
+#endif // NVIM_EVAL_TYPVAL_ENCODE_C_H
diff --git a/src/nvim/eval/typval_encode.h b/src/nvim/eval/typval_encode.h
new file mode 100644
index 0000000000..ba325b8f55
--- /dev/null
+++ b/src/nvim/eval/typval_encode.h
@@ -0,0 +1,145 @@
+/// @file eval/typval_encode.h
+///
+/// Contains common definitions for eval/typval_encode.c.h. Most of time should
+/// not be included directly.
+#ifndef NVIM_EVAL_TYPVAL_ENCODE_H
+#define NVIM_EVAL_TYPVAL_ENCODE_H
+
+#include <stddef.h>
+#include <inttypes.h>
+#include <string.h>
+#include <assert.h>
+
+#include "nvim/lib/kvec.h"
+#include "nvim/eval_defs.h"
+#include "nvim/func_attr.h"
+
+/// Type of the stack entry
+typedef enum {
+ kMPConvDict, ///< Convert dict_T *dictionary.
+ kMPConvList, ///< Convert list_T *list.
+ kMPConvPairs, ///< Convert mapping represented as a list_T* of pairs.
+ kMPConvPartial, ///< Convert partial_T* partial.
+ kMPConvPartialList, ///< Convert argc/argv pair coming from a partial.
+} MPConvStackValType;
+
+/// Stage at which partial is being converted
+typedef enum {
+ kMPConvPartialArgs, ///< About to convert arguments.
+ kMPConvPartialSelf, ///< About to convert self dictionary.
+ kMPConvPartialEnd, ///< Already converted everything.
+} MPConvPartialStage;
+
+/// Structure representing current VimL to messagepack conversion state
+typedef struct {
+ MPConvStackValType type; ///< Type of the stack entry.
+ typval_T *tv; ///< Currently converted typval_T.
+ union {
+ struct {
+ dict_T *dict; ///< Currently converted dictionary.
+ dict_T **dictp; ///< Location where that dictionary is stored.
+ ///< Normally it is &.tv->vval.v_dict, but not when
+ ///< converting partials.
+ hashitem_T *hi; ///< Currently converted dictionary item.
+ size_t todo; ///< Amount of items left to process.
+ } d; ///< State of dictionary conversion.
+ struct {
+ list_T *list; ///< Currently converted list.
+ listitem_T *li; ///< Currently converted list item.
+ } l; ///< State of list or generic mapping conversion.
+ struct {
+ MPConvPartialStage stage; ///< Stage at which partial is being converted.
+ partial_T *pt; ///< Currently converted partial.
+ } p; ///< State of partial conversion.
+ struct {
+ typval_T *arg; ///< Currently converted argument.
+ typval_T *argv; ///< Start of the argument list.
+ size_t todo; ///< Number of items left to process.
+ } a; ///< State of list or generic mapping conversion.
+ } data; ///< Data to convert.
+} MPConvStackVal;
+
+/// Stack used to convert VimL values to messagepack.
+typedef kvec_withinit_t(MPConvStackVal, 8) MPConvStack;
+
+// Defines for MPConvStack
+#define _mp_size kv_size
+#define _mp_init kvi_init
+#define _mp_destroy kvi_destroy
+#define _mp_push kvi_push
+#define _mp_pop kv_pop
+#define _mp_last kv_last
+
+static inline size_t tv_strlen(const typval_T *const tv)
+ REAL_FATTR_ALWAYS_INLINE REAL_FATTR_PURE REAL_FATTR_WARN_UNUSED_RESULT
+ REAL_FATTR_NONNULL_ALL;
+
+/// Length of the string stored in typval_T
+///
+/// @param[in] tv String for which to compute length for. Must be typval_T
+/// with VAR_STRING.
+///
+/// @return Length of the string stored in typval_T, including 0 for NULL
+/// string.
+static inline size_t tv_strlen(const typval_T *const tv)
+{
+ assert(tv->v_type == VAR_STRING);
+ return (tv->vval.v_string == NULL
+ ? 0
+ : strlen((char *) tv->vval.v_string));
+}
+
+/// Code for checking whether container references itself
+///
+/// @param[in,out] val Container to check.
+/// @param copyID_attr Name of the container attribute that holds copyID.
+/// After checking whether value of this attribute is
+/// copyID (variable) it is set to copyID.
+/// @param[in] copyID CopyID used by the caller.
+/// @param conv_type Type of the conversion, @see MPConvStackValType.
+#define _TYPVAL_ENCODE_DO_CHECK_SELF_REFERENCE(val, copyID_attr, copyID, \
+ conv_type) \
+ do { \
+ const int te_csr_ret = _TYPVAL_ENCODE_CHECK_SELF_REFERENCE( \
+ TYPVAL_ENCODE_FIRST_ARG_NAME, \
+ (val), &(val)->copyID_attr, mpstack, copyID, conv_type, objname); \
+ if (te_csr_ret != NOTDONE) { \
+ return te_csr_ret; \
+ } \
+ } while (0)
+
+#define _TYPVAL_ENCODE_FUNC_NAME_INNER_2(pref, name, suf) \
+ pref##name##suf
+#define _TYPVAL_ENCODE_FUNC_NAME_INNER(pref, name, suf) \
+ _TYPVAL_ENCODE_FUNC_NAME_INNER_2(pref, name, suf)
+
+/// Construct function name, possibly using macros
+///
+/// Is used to expand macros that may appear in arguments.
+///
+/// @note Expands all arguments, even if only one is needed.
+///
+/// @param[in] pref Prefix.
+/// @param[in] suf Suffix.
+///
+/// @return Concat: pref + #TYPVAL_ENCODE_NAME + suf.
+#define _TYPVAL_ENCODE_FUNC_NAME(pref, suf) \
+ _TYPVAL_ENCODE_FUNC_NAME_INNER(pref, TYPVAL_ENCODE_NAME, suf)
+
+/// Self reference checker function name
+#define _TYPVAL_ENCODE_CHECK_SELF_REFERENCE \
+ _TYPVAL_ENCODE_FUNC_NAME(_typval_encode_, _check_self_reference)
+
+/// Entry point function name
+#define _TYPVAL_ENCODE_ENCODE \
+ _TYPVAL_ENCODE_FUNC_NAME(encode_vim_to_, )
+
+/// Name of the …convert_one_value function
+#define _TYPVAL_ENCODE_CONVERT_ONE_VALUE \
+ _TYPVAL_ENCODE_FUNC_NAME(_typval_encode_, _convert_one_value)
+
+/// Name of the dummy const dict_T *const variable
+#define TYPVAL_ENCODE_NODICT_VAR \
+ _TYPVAL_ENCODE_FUNC_NAME(_typval_encode_, _nodict_var)
+
+#endif // NVIM_EVAL_TYPVAL_ENCODE_H
diff --git a/src/nvim/eval_defs.h b/src/nvim/eval_defs.h
index 8ffc0c98ce..f478d19ca1 100644
--- a/src/nvim/eval_defs.h
+++ b/src/nvim/eval_defs.h
@@ -15,6 +15,7 @@ typedef double float_T;
typedef struct listvar_S list_T;
typedef struct dictvar_S dict_T;
+typedef struct partial_S partial_T;
/// Special variable values
typedef enum {
@@ -35,12 +36,13 @@ typedef enum {
VAR_UNKNOWN = 0, ///< Unknown (unspecified) value.
VAR_NUMBER, ///< Number, .v_number is used.
VAR_STRING, ///< String, .v_string is used.
- VAR_FUNC, ///< Function referene, .v_string is used for function name.
+ VAR_FUNC, ///< Function reference, .v_string is used as function name.
VAR_LIST, ///< List, .v_list is used.
VAR_DICT, ///< Dictionary, .v_dict is used.
VAR_FLOAT, ///< Floating-point value, .v_float is used.
VAR_SPECIAL, ///< Special value (true, false, null), .v_special
///< is used.
+ VAR_PARTIAL, ///< Partial, .v_partial is used.
} VarType;
/// Structure that holds an internal variable value
@@ -54,6 +56,7 @@ typedef struct {
char_u *v_string; ///< String, for VAR_STRING and VAR_FUNC, can be NULL.
list_T *v_list; ///< List for VAR_LIST, can be NULL.
dict_T *v_dict; ///< Dictionary for VAR_DICT, can be NULL.
+ partial_T *v_partial; ///< Closure: function with args.
} vval; ///< Actual value.
} typval_T;
@@ -114,6 +117,16 @@ struct dictitem_S {
typedef struct dictitem_S dictitem_T;
+/// A dictitem with a 16 character key (plus NUL)
+struct dictitem16_S {
+ typval_T di_tv; ///< type and value of the variable
+ char_u di_flags; ///< flags (only used for variable)
+ char_u di_key[17]; ///< key
+};
+
+typedef struct dictitem16_S dictitem16_T;
+
+
#define DI_FLAGS_RO 1 // "di_flags" value: read-only variable
#define DI_FLAGS_RO_SBX 2 // "di_flags" value: read-only in the sandbox
#define DI_FLAGS_FIX 4 // "di_flags" value: fixed: no :unlet or remove()
@@ -134,6 +147,16 @@ struct dictvar_S {
QUEUE watchers; ///< Dictionary key watchers set by user code.
};
+struct partial_S {
+ int pt_refcount; ///< Reference count.
+ char_u *pt_name; ///< Function name.
+ bool pt_auto; ///< when true the partial was created for using
+ ///< dict.member in handle_subscript().
+ int pt_argc; ///< Number of arguments.
+ typval_T *pt_argv; ///< Arguments in allocated array.
+ dict_T *pt_dict; ///< Dict for "self".
+};
+
// structure used for explicit stack while garbage collecting hash tables
typedef struct ht_stack_S {
hashtab_T *ht;
@@ -155,7 +178,21 @@ typedef struct list_stack_S {
/// Convert a hashitem key pointer to a dictitem pointer
#define HIKEY2DI(p) ((dictitem_T *)(p - offsetof(dictitem_T, di_key)))
+/// Convert a hashitem value pointer to a dictitem pointer
+#define HIVAL2DI(p) \
+ ((dictitem_T *)(((char *)p) - offsetof(dictitem_T, di_tv)))
+
/// Convert a hashitem pointer to a dictitem pointer
#define HI2DI(hi) HIKEY2DI((hi)->hi_key)
+/// Type of assert_* check being performed
+typedef enum
+{
+ ASSERT_EQUAL,
+ ASSERT_NOTEQUAL,
+ ASSERT_MATCH,
+ ASSERT_NOTMATCH,
+ ASSERT_OTHER,
+} assert_type_T;
+
#endif // NVIM_EVAL_DEFS_H
diff --git a/src/nvim/event/defs.h b/src/nvim/event/defs.h
index b802866a3d..e5335d9f25 100644
--- a/src/nvim/event/defs.h
+++ b/src/nvim/event/defs.h
@@ -14,19 +14,19 @@ typedef struct message {
} Event;
typedef void(*event_scheduler)(Event event, void *data);
-#define VA_EVENT_INIT(event, p, h, a) \
- do { \
- assert(a <= EVENT_HANDLER_MAX_ARGC); \
- (event)->priority = p; \
- (event)->handler = h; \
- if (a) { \
- va_list args; \
- va_start(args, a); \
- for (int i = 0; i < a; i++) { \
- (event)->argv[i] = va_arg(args, void *); \
- } \
- va_end(args); \
- } \
+#define VA_EVENT_INIT(event, p, h, a) \
+ do { \
+ assert(a <= EVENT_HANDLER_MAX_ARGC); \
+ (event)->priority = p; \
+ (event)->handler = h; \
+ if (a) { \
+ va_list args; \
+ va_start(args, a); \
+ for (int i = 0; i < a; i++) { \
+ (event)->argv[i] = va_arg(args, void *); \
+ } \
+ va_end(args); \
+ } \
} while (0)
static inline Event event_create(int priority, argv_callback cb, int argc, ...)
diff --git a/src/nvim/event/libuv_process.c b/src/nvim/event/libuv_process.c
index 9ef3468284..907187aa17 100644
--- a/src/nvim/event/libuv_process.c
+++ b/src/nvim/event/libuv_process.c
@@ -19,13 +19,12 @@ bool libuv_process_spawn(LibuvProcess *uvproc)
Process *proc = (Process *)uvproc;
uvproc->uvopts.file = proc->argv[0];
uvproc->uvopts.args = proc->argv;
- uvproc->uvopts.flags = UV_PROCESS_WINDOWS_HIDE
- | UV_PROCESS_WINDOWS_VERBATIM_ARGUMENTS;
+ uvproc->uvopts.flags = UV_PROCESS_WINDOWS_HIDE;
if (proc->detach) {
uvproc->uvopts.flags |= UV_PROCESS_DETACHED;
}
uvproc->uvopts.exit_cb = exit_cb;
- uvproc->uvopts.cwd = NULL;
+ uvproc->uvopts.cwd = proc->cwd;
uvproc->uvopts.env = NULL;
uvproc->uvopts.stdio = uvproc->uvstdio;
uvproc->uvopts.stdio_count = 3;
diff --git a/src/nvim/event/loop.c b/src/nvim/event/loop.c
index 6f3e6b9253..0e1775d01b 100644
--- a/src/nvim/event/loop.c
+++ b/src/nvim/event/loop.c
@@ -18,9 +18,9 @@ void loop_init(Loop *loop, void *data)
loop->uv.data = loop;
loop->children = kl_init(WatcherPtr);
loop->children_stop_requests = 0;
- loop->events = queue_new_parent(loop_on_put, loop);
- loop->fast_events = queue_new_child(loop->events);
- loop->thread_events = queue_new_parent(NULL, NULL);
+ loop->events = multiqueue_new_parent(loop_on_put, loop);
+ loop->fast_events = multiqueue_new_child(loop->events);
+ loop->thread_events = multiqueue_new_parent(NULL, NULL);
uv_mutex_init(&loop->mutex);
uv_async_init(&loop->uv, &loop->async, async_cb);
uv_signal_init(&loop->uv, &loop->children_watcher);
@@ -53,19 +53,19 @@ void loop_poll_events(Loop *loop, int ms)
}
loop->recursive--; // Can re-enter uv_run now
- queue_process_events(loop->fast_events);
+ multiqueue_process_events(loop->fast_events);
}
// Schedule an event from another thread
void loop_schedule(Loop *loop, Event event)
{
uv_mutex_lock(&loop->mutex);
- queue_put_event(loop->thread_events, event);
+ multiqueue_put_event(loop->thread_events, event);
uv_async_send(&loop->async);
uv_mutex_unlock(&loop->mutex);
}
-void loop_on_put(Queue *queue, void *data)
+void loop_on_put(MultiQueue *queue, void *data)
{
Loop *loop = data;
// Sometimes libuv will run pending callbacks(timer for example) before
@@ -76,7 +76,7 @@ void loop_on_put(Queue *queue, void *data)
uv_stop(&loop->uv);
}
-void loop_close(Loop *loop)
+void loop_close(Loop *loop, bool wait)
{
uv_mutex_destroy(&loop->mutex);
uv_close((uv_handle_t *)&loop->children_watcher, NULL);
@@ -84,21 +84,37 @@ void loop_close(Loop *loop)
uv_close((uv_handle_t *)&loop->poll_timer, NULL);
uv_close((uv_handle_t *)&loop->async, NULL);
do {
- uv_run(&loop->uv, UV_RUN_DEFAULT);
- } while (uv_loop_close(&loop->uv));
- queue_free(loop->fast_events);
- queue_free(loop->thread_events);
- queue_free(loop->events);
+ uv_run(&loop->uv, wait ? UV_RUN_DEFAULT : UV_RUN_NOWAIT);
+ } while (uv_loop_close(&loop->uv) && wait);
+ multiqueue_free(loop->fast_events);
+ multiqueue_free(loop->thread_events);
+ multiqueue_free(loop->events);
kl_destroy(WatcherPtr, loop->children);
}
+void loop_purge(Loop *loop)
+{
+ uv_mutex_lock(&loop->mutex);
+ multiqueue_purge_events(loop->thread_events);
+ multiqueue_purge_events(loop->fast_events);
+ uv_mutex_unlock(&loop->mutex);
+}
+
+size_t loop_size(Loop *loop)
+{
+ uv_mutex_lock(&loop->mutex);
+ size_t rv = multiqueue_size(loop->thread_events);
+ uv_mutex_unlock(&loop->mutex);
+ return rv;
+}
+
static void async_cb(uv_async_t *handle)
{
Loop *l = handle->loop->data;
uv_mutex_lock(&l->mutex);
- while (!queue_empty(l->thread_events)) {
- Event ev = queue_get(l->thread_events);
- queue_put_event(l->fast_events, ev);
+ while (!multiqueue_empty(l->thread_events)) {
+ Event ev = multiqueue_get(l->thread_events);
+ multiqueue_put_event(l->fast_events, ev);
}
uv_mutex_unlock(&l->mutex);
}
diff --git a/src/nvim/event/loop.h b/src/nvim/event/loop.h
index 0c1fcb5ed9..e7d7bdd483 100644
--- a/src/nvim/event/loop.h
+++ b/src/nvim/event/loop.h
@@ -7,7 +7,7 @@
#include "nvim/lib/klist.h"
#include "nvim/os/time.h"
-#include "nvim/event/queue.h"
+#include "nvim/event/multiqueue.h"
typedef void * WatcherPtr;
@@ -16,7 +16,7 @@ KLIST_INIT(WatcherPtr, WatcherPtr, _noop)
typedef struct loop {
uv_loop_t uv;
- Queue *events, *fast_events, *thread_events;
+ MultiQueue *events, *fast_events, *thread_events;
klist_t(WatcherPtr) *children;
uv_signal_t children_watcher;
uv_timer_t children_kill_timer, poll_timer;
@@ -26,43 +26,43 @@ typedef struct loop {
int recursive;
} Loop;
-#define CREATE_EVENT(queue, handler, argc, ...) \
- do { \
- if (queue) { \
- queue_put((queue), (handler), argc, __VA_ARGS__); \
- } else { \
- void *argv[argc] = {__VA_ARGS__}; \
- (handler)(argv); \
- } \
+#define CREATE_EVENT(multiqueue, handler, argc, ...) \
+ do { \
+ if (multiqueue) { \
+ multiqueue_put((multiqueue), (handler), argc, __VA_ARGS__); \
+ } else { \
+ void *argv[argc] = { __VA_ARGS__ }; \
+ (handler)(argv); \
+ } \
} while (0)
// Poll for events until a condition or timeout
-#define LOOP_PROCESS_EVENTS_UNTIL(loop, queue, timeout, condition) \
- do { \
- int remaining = timeout; \
- uint64_t before = (remaining > 0) ? os_hrtime() : 0; \
- while (!(condition)) { \
- LOOP_PROCESS_EVENTS(loop, queue, remaining); \
- if (remaining == 0) { \
- break; \
- } else if (remaining > 0) { \
- uint64_t now = os_hrtime(); \
- remaining -= (int) ((now - before) / 1000000); \
- before = now; \
- if (remaining <= 0) { \
- break; \
- } \
- } \
- } \
+#define LOOP_PROCESS_EVENTS_UNTIL(loop, multiqueue, timeout, condition) \
+ do { \
+ int remaining = timeout; \
+ uint64_t before = (remaining > 0) ? os_hrtime() : 0; \
+ while (!(condition)) { \
+ LOOP_PROCESS_EVENTS(loop, multiqueue, remaining); \
+ if (remaining == 0) { \
+ break; \
+ } else if (remaining > 0) { \
+ uint64_t now = os_hrtime(); \
+ remaining -= (int) ((now - before) / 1000000); \
+ before = now; \
+ if (remaining <= 0) { \
+ break; \
+ } \
+ } \
+ } \
} while (0)
-#define LOOP_PROCESS_EVENTS(loop, queue, timeout) \
- do { \
- if (queue && !queue_empty(queue)) { \
- queue_process_events(queue); \
- } else { \
- loop_poll_events(loop, timeout); \
- } \
+#define LOOP_PROCESS_EVENTS(loop, multiqueue, timeout) \
+ do { \
+ if (multiqueue && !multiqueue_empty(multiqueue)) { \
+ multiqueue_process_events(multiqueue); \
+ } else { \
+ loop_poll_events(loop, timeout); \
+ } \
} while (0)
diff --git a/src/nvim/event/multiqueue.c b/src/nvim/event/multiqueue.c
new file mode 100644
index 0000000000..79b4dd9458
--- /dev/null
+++ b/src/nvim/event/multiqueue.c
@@ -0,0 +1,230 @@
+// Multi-level queue for selective async event processing.
+// Not threadsafe; access must be synchronized externally.
+//
+// Multiqueue supports a parent-child relationship with these properties:
+// - pushing a node to a child queue will push a corresponding link node to the
+// parent queue
+// - removing a link node from a parent queue will remove the next node
+// in the linked child queue
+// - removing a node from a child queue will remove the corresponding link node
+// in the parent queue
+//
+// These properties allow Nvim to organize and process events from different
+// sources with a certain degree of control. How the multiqueue is used:
+//
+// +----------------+
+// | Main loop |
+// +----------------+
+//
+// +----------------+
+// +-------------->| Event loop |<------------+
+// | +--+-------------+ |
+// | ^ ^ |
+// | | | |
+// +-----------+ +-----------+ +---------+ +---------+
+// | Channel 1 | | Channel 2 | | Job 1 | | Job 2 |
+// +-----------+ +-----------+ +---------+ +---------+
+//
+//
+// The lower boxes represent event emitters, each with its own private queue
+// having the event loop queue as the parent.
+//
+// When idle, the main loop spins the event loop which queues events from many
+// sources (channels, jobs, user...). Each event emitter pushes events to its
+// private queue which is propagated to the event loop queue. When the main loop
+// consumes an event, the corresponding event is removed from the emitter's
+// queue.
+//
+// The main reason for this queue hierarchy is to allow focusing on a single
+// event emitter while blocking the main loop. For example, if the `jobwait`
+// VimL function is called on job1, the main loop will temporarily stop polling
+// the event loop queue and poll job1 queue instead. Same with channels, when
+// calling `rpcrequest` we want to temporarily stop processing events from
+// other sources and focus on a specific channel.
+
+#include <assert.h>
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+
+
+#include <uv.h>
+
+#include "nvim/event/multiqueue.h"
+#include "nvim/memory.h"
+#include "nvim/os/time.h"
+
+typedef struct multiqueue_item MultiQueueItem;
+struct multiqueue_item {
+ union {
+ MultiQueue *queue;
+ struct {
+ Event event;
+ MultiQueueItem *parent_item;
+ } item;
+ } data;
+ bool link; // true: current item is just a link to a node in a child queue
+ QUEUE node;
+};
+
+struct multiqueue {
+ MultiQueue *parent;
+ QUEUE headtail; // circularly-linked
+ put_callback put_cb;
+ void *data;
+ size_t size;
+};
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "event/multiqueue.c.generated.h"
+#endif
+
+static Event NILEVENT = { .handler = NULL, .argv = {NULL} };
+
+MultiQueue *multiqueue_new_parent(put_callback put_cb, void *data)
+{
+ return multiqueue_new(NULL, put_cb, data);
+}
+
+MultiQueue *multiqueue_new_child(MultiQueue *parent)
+ FUNC_ATTR_NONNULL_ALL
+{
+ assert(!parent->parent); // parent cannot have a parent, more like a "root"
+ parent->size++;
+ return multiqueue_new(parent, NULL, NULL);
+}
+
+static MultiQueue *multiqueue_new(MultiQueue *parent, put_callback put_cb,
+ void *data)
+{
+ MultiQueue *rv = xmalloc(sizeof(MultiQueue));
+ QUEUE_INIT(&rv->headtail);
+ rv->size = 0;
+ rv->parent = parent;
+ rv->put_cb = put_cb;
+ rv->data = data;
+ return rv;
+}
+
+void multiqueue_free(MultiQueue *this)
+{
+ assert(this);
+ while (!QUEUE_EMPTY(&this->headtail)) {
+ QUEUE *q = QUEUE_HEAD(&this->headtail);
+ MultiQueueItem *item = multiqueue_node_data(q);
+ if (this->parent) {
+ QUEUE_REMOVE(&item->data.item.parent_item->node);
+ xfree(item->data.item.parent_item);
+ }
+ QUEUE_REMOVE(q);
+ xfree(item);
+ }
+
+ xfree(this);
+}
+
+Event multiqueue_get(MultiQueue *this)
+{
+ return multiqueue_empty(this) ? NILEVENT : multiqueue_remove(this);
+}
+
+void multiqueue_put_event(MultiQueue *this, Event event)
+{
+ assert(this);
+ multiqueue_push(this, event);
+ if (this->parent && this->parent->put_cb) {
+ this->parent->put_cb(this->parent, this->parent->data);
+ }
+}
+
+void multiqueue_process_events(MultiQueue *this)
+{
+ assert(this);
+ while (!multiqueue_empty(this)) {
+ Event event = multiqueue_get(this);
+ if (event.handler) {
+ event.handler(event.argv);
+ }
+ }
+}
+
+/// Removes all events without processing them.
+void multiqueue_purge_events(MultiQueue *this)
+{
+ assert(this);
+ while (!multiqueue_empty(this)) {
+ (void)multiqueue_remove(this);
+ }
+}
+
+bool multiqueue_empty(MultiQueue *this)
+{
+ assert(this);
+ return QUEUE_EMPTY(&this->headtail);
+}
+
+void multiqueue_replace_parent(MultiQueue *this, MultiQueue *new_parent)
+{
+ assert(multiqueue_empty(this));
+ this->parent = new_parent;
+}
+
+/// Gets the count of all events currently in the queue.
+size_t multiqueue_size(MultiQueue *this)
+{
+ return this->size;
+}
+
+static Event multiqueue_remove(MultiQueue *this)
+{
+ assert(!multiqueue_empty(this));
+ QUEUE *h = QUEUE_HEAD(&this->headtail);
+ QUEUE_REMOVE(h);
+ MultiQueueItem *item = multiqueue_node_data(h);
+ Event rv;
+
+ if (item->link) {
+ assert(!this->parent);
+ // remove the next node in the linked queue
+ MultiQueue *linked = item->data.queue;
+ assert(!multiqueue_empty(linked));
+ MultiQueueItem *child =
+ multiqueue_node_data(QUEUE_HEAD(&linked->headtail));
+ QUEUE_REMOVE(&child->node);
+ rv = child->data.item.event;
+ xfree(child);
+ } else {
+ if (this->parent) {
+ // remove the corresponding link node in the parent queue
+ QUEUE_REMOVE(&item->data.item.parent_item->node);
+ xfree(item->data.item.parent_item);
+ }
+ rv = item->data.item.event;
+ }
+
+ this->size--;
+ xfree(item);
+ return rv;
+}
+
+static void multiqueue_push(MultiQueue *this, Event event)
+{
+ MultiQueueItem *item = xmalloc(sizeof(MultiQueueItem));
+ item->link = false;
+ item->data.item.event = event;
+ QUEUE_INSERT_TAIL(&this->headtail, &item->node);
+ if (this->parent) {
+ // push link node to the parent queue
+ item->data.item.parent_item = xmalloc(sizeof(MultiQueueItem));
+ item->data.item.parent_item->link = true;
+ item->data.item.parent_item->data.queue = this;
+ QUEUE_INSERT_TAIL(&this->parent->headtail,
+ &item->data.item.parent_item->node);
+ }
+ this->size++;
+}
+
+static MultiQueueItem *multiqueue_node_data(QUEUE *q)
+{
+ return QUEUE_DATA(q, MultiQueueItem, node);
+}
diff --git a/src/nvim/event/multiqueue.h b/src/nvim/event/multiqueue.h
new file mode 100644
index 0000000000..def6b95a10
--- /dev/null
+++ b/src/nvim/event/multiqueue.h
@@ -0,0 +1,19 @@
+#ifndef NVIM_EVENT_MULTIQUEUE_H
+#define NVIM_EVENT_MULTIQUEUE_H
+
+#include <uv.h>
+
+#include "nvim/event/defs.h"
+#include "nvim/lib/queue.h"
+
+typedef struct multiqueue MultiQueue;
+typedef void (*put_callback)(MultiQueue *multiq, void *data);
+
+#define multiqueue_put(q, h, ...) \
+ multiqueue_put_event(q, event_create(1, h, __VA_ARGS__));
+
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "event/multiqueue.h.generated.h"
+#endif
+#endif // NVIM_EVENT_MULTIQUEUE_H
diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c
index 9bb62891c7..dc7886469b 100644
--- a/src/nvim/event/process.c
+++ b/src/nvim/event/process.c
@@ -9,7 +9,7 @@
#include "nvim/event/wstream.h"
#include "nvim/event/process.h"
#include "nvim/event/libuv_process.h"
-#include "nvim/event/pty_process.h"
+#include "nvim/os/pty_process.h"
#include "nvim/globals.h"
#include "nvim/log.h"
@@ -17,16 +17,15 @@
# include "event/process.c.generated.h"
#endif
-// {SIGNAL}_TIMEOUT is the time (in nanoseconds) that a process has to cleanly
-// exit before we send SIGNAL to it
+// Time (ns) for a process to exit cleanly before we send TERM/KILL.
#define TERM_TIMEOUT 1000000000
#define KILL_TIMEOUT (TERM_TIMEOUT * 2)
-#define CLOSE_PROC_STREAM(proc, stream) \
- do { \
- if (proc->stream && !proc->stream->closed) { \
- stream_close(proc->stream, NULL); \
- } \
+#define CLOSE_PROC_STREAM(proc, stream) \
+ do { \
+ if (proc->stream && !proc->stream->closed) { \
+ stream_close(proc->stream, NULL, NULL); \
+ } \
} while (0)
static bool process_is_tearing_down = false;
@@ -78,10 +77,8 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
return false;
}
- void *data = proc->data;
-
if (proc->in) {
- stream_init(NULL, proc->in, -1, (uv_stream_t *)&proc->in->uv.pipe, data);
+ stream_init(NULL, proc->in, -1, (uv_stream_t *)&proc->in->uv.pipe);
proc->in->events = proc->events;
proc->in->internal_data = proc;
proc->in->internal_close_cb = on_process_stream_close;
@@ -89,7 +86,7 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
}
if (proc->out) {
- stream_init(NULL, proc->out, -1, (uv_stream_t *)&proc->out->uv.pipe, data);
+ stream_init(NULL, proc->out, -1, (uv_stream_t *)&proc->out->uv.pipe);
proc->out->events = proc->events;
proc->out->internal_data = proc;
proc->out->internal_close_cb = on_process_stream_close;
@@ -97,7 +94,7 @@ bool process_spawn(Process *proc) FUNC_ATTR_NONNULL_ALL
}
if (proc->err) {
- stream_init(NULL, proc->err, -1, (uv_stream_t *)&proc->err->uv.pipe, data);
+ stream_init(NULL, proc->err, -1, (uv_stream_t *)&proc->err->uv.pipe);
proc->err->events = proc->events;
proc->err->internal_data = proc;
proc->err->internal_close_cb = on_process_stream_close;
@@ -116,23 +113,20 @@ void process_teardown(Loop *loop) FUNC_ATTR_NONNULL_ALL
process_is_tearing_down = true;
kl_iter(WatcherPtr, loop->children, current) {
Process *proc = (*current)->data;
- if (proc->detach) {
+ if (proc->detach || proc->type == kProcessTypePty) {
// Close handles to process without killing it.
CREATE_EVENT(loop->events, process_close_handles, 1, proc);
} else {
- if (proc->type == kProcessTypeUv) {
- uv_kill(proc->pid, SIGTERM);
- proc->term_sent = true;
- process_stop(proc);
- } else { // kProcessTypePty
- process_close_streams(proc);
- pty_process_close_master((PtyProcess *)proc);
- }
+ uv_kill(proc->pid, SIGTERM);
+ proc->term_sent = true;
+ process_stop(proc);
}
}
- // Wait until all children exit
- LOOP_PROCESS_EVENTS_UNTIL(loop, loop->events, -1, kl_empty(loop->children));
+ // Wait until all children exit and all close events are processed.
+ LOOP_PROCESS_EVENTS_UNTIL(
+ loop, loop->events, -1,
+ kl_empty(loop->children) && multiqueue_empty(loop->events));
pty_process_teardown(loop);
}
@@ -169,14 +163,16 @@ void process_close_err(Process *proc) FUNC_ATTR_NONNULL_ALL
/// indistinguishable from the process returning -1 by itself. Which
/// is possible on some OS. Returns -2 if an user has interruped the
/// wait.
-int process_wait(Process *proc, int ms, Queue *events) FUNC_ATTR_NONNULL_ARG(1)
+int process_wait(Process *proc, int ms, MultiQueue *events)
+ FUNC_ATTR_NONNULL_ARG(1)
{
// The default status is -1, which represents a timeout
int status = -1;
bool interrupted = false;
if (!proc->refcount) {
+ status = proc->status;
LOOP_PROCESS_EVENTS(proc->loop, proc->events, 0);
- return proc->status;
+ return status;
}
if (!events) {
@@ -214,7 +210,7 @@ int process_wait(Process *proc, int ms, Queue *events) FUNC_ATTR_NONNULL_ARG(1)
decref(proc);
if (events) {
// the decref call created an exit event, process it now
- queue_process_events(events);
+ multiqueue_process_events(events);
}
} else {
proc->refcount--;
@@ -315,8 +311,10 @@ static void decref(Process *proc)
static void process_close(Process *proc)
FUNC_ATTR_NONNULL_ARG(1)
{
- if (process_is_tearing_down && proc->detach && proc->closed) {
- // If a detached process dies while tearing down it might get closed twice.
+ if (process_is_tearing_down && (proc->detach || proc->type == kProcessTypePty)
+ && proc->closed) {
+ // If a detached/pty process dies while tearing down it might get closed
+ // twice.
return;
}
assert(!proc->closed);
@@ -333,9 +331,61 @@ static void process_close(Process *proc)
}
}
+/// Flush output stream.
+///
+/// @param proc Process, for which an output stream should be flushed.
+/// @param stream Stream to flush.
+static void flush_stream(Process *proc, Stream *stream)
+ FUNC_ATTR_NONNULL_ARG(1)
+{
+ if (!stream || stream->closed) {
+ return;
+ }
+
+ // Maximal remaining data size of terminated process is system
+ // buffer size.
+ // Also helps with a child process that keeps the output streams open. If it
+ // keeps sending data, we only accept as much data as the system buffer size.
+ // Otherwise this would block cleanup/teardown.
+ int system_buffer_size = 0;
+ int err = uv_recv_buffer_size((uv_handle_t *)&stream->uv.pipe,
+ &system_buffer_size);
+ if (err) {
+ system_buffer_size = (int)rbuffer_capacity(stream->buffer);
+ }
+
+ size_t max_bytes = stream->num_bytes + (size_t)system_buffer_size;
+
+ // Read remaining data.
+ while (!stream->closed && stream->num_bytes < max_bytes) {
+ // Remember number of bytes before polling
+ size_t num_bytes = stream->num_bytes;
+
+ // Poll for data and process the generated events.
+ loop_poll_events(proc->loop, 0);
+ if (proc->events) {
+ multiqueue_process_events(proc->events);
+ }
+
+ // Stream can be closed if it is empty.
+ if (num_bytes == stream->num_bytes) {
+ if (stream->read_cb) {
+ // Stream callback could miss EOF handling if a child keeps the stream
+ // open.
+ stream->read_cb(stream, stream->buffer, 0, stream->cb_data, true);
+ }
+ break;
+ }
+ }
+}
+
static void process_close_handles(void **argv)
{
Process *proc = argv[0];
+
+ flush_stream(proc, proc->out);
+ flush_stream(proc, proc->err);
+
process_close_streams(proc);
process_close(proc);
}
@@ -350,11 +400,12 @@ static void on_process_exit(Process *proc)
uv_timer_stop(&loop->children_kill_timer);
}
- // Process handles are closed in the next event loop tick. This is done to
- // give libuv more time to read data from the OS after the process exits(If
- // process_close_streams is called with data still in the OS buffer, we lose
- // it)
- CREATE_EVENT(proc->events, process_close_handles, 1, proc);
+ // Process has terminated, but there could still be data to be read from the
+ // OS. We are still in the libuv loop, so we cannot call code that polls for
+ // more data directly. Instead delay the reading after the libuv loop by
+ // queueing process_close_handles() as an event.
+ MultiQueue *queue = proc->events ? proc->events : loop->events;
+ CREATE_EVENT(queue, process_close_handles, 1, proc);
}
static void on_process_stream_close(Stream *stream, void *data)
diff --git a/src/nvim/event/process.h b/src/nvim/event/process.h
index e23c8ea60f..5cbf7f9ce7 100644
--- a/src/nvim/event/process.h
+++ b/src/nvim/event/process.h
@@ -21,12 +21,13 @@ struct process {
int pid, status, refcount;
// set to the hrtime of when process_stop was called for the process.
uint64_t stopped_time;
+ char *cwd;
char **argv;
Stream *in, *out, *err;
process_exit_cb cb;
internal_process_cb internal_exit_cb, internal_close_cb;
bool closed, term_sent, detach;
- Queue *events;
+ MultiQueue *events;
};
static inline Process process_init(Loop *loop, ProcessType type, void *data)
@@ -40,6 +41,7 @@ static inline Process process_init(Loop *loop, ProcessType type, void *data)
.status = 0,
.refcount = 0,
.stopped_time = 0,
+ .cwd = NULL,
.argv = NULL,
.in = NULL,
.out = NULL,
diff --git a/src/nvim/event/queue.c b/src/nvim/event/queue.c
deleted file mode 100644
index c5ef22d426..0000000000
--- a/src/nvim/event/queue.c
+++ /dev/null
@@ -1,208 +0,0 @@
-// Queue for selective async event processing. Instances of this queue support a
-// parent/child relationship with the following properties:
-//
-// - pushing a node to a child queue will push a corresponding link node to the
-// parent queue
-// - removing a link node from a parent queue will remove the next node
-// in the linked child queue
-// - removing a node from a child queue will remove the corresponding link node
-// in the parent queue
-//
-// These properties allow neovim to organize and process events from different
-// sources with a certain degree of control. Here's how the queue is used:
-//
-// +----------------+
-// | Main loop |
-// +----------------+
-// ^
-// |
-// +----------------+
-// +-------------->| Event loop |<------------+
-// | +--+-------------+ |
-// | ^ ^ |
-// | | | |
-// +-----------+ +-----------+ +---------+ +---------+
-// | Channel 1 | | Channel 2 | | Job 1 | | Job 2 |
-// +-----------+ +-----------+ +---------+ +---------+
-//
-//
-// In the above diagram, the lower boxes represents event emitters, each with
-// it's own private queue that have the event loop queue as the parent.
-//
-// When idle, the main loop spins the event loop which queues events from many
-// sources(channels, jobs, user...). Each event emitter pushes events to its own
-// private queue which is propagated to the event loop queue. When the main loop
-// consumes an event, the corresponding event is removed from the emitter's
-// queue.
-//
-// The main reason for this queue hierarchy is to allow focusing on a single
-// event emitter while blocking the main loop. For example, if the `jobwait`
-// vimscript function is called on job1, the main loop will temporarily stop
-// polling the event loop queue and poll job1 queue instead. Same with channels,
-// when calling `rpcrequest`, we want to temporarily stop processing events from
-// other sources and focus on a specific channel.
-
-#include <assert.h>
-#include <stdarg.h>
-#include <stdbool.h>
-#include <stdint.h>
-
-
-#include <uv.h>
-
-#include "nvim/event/queue.h"
-#include "nvim/memory.h"
-#include "nvim/os/time.h"
-
-typedef struct queue_item QueueItem;
-struct queue_item {
- union {
- Queue *queue;
- struct {
- Event event;
- QueueItem *parent;
- } item;
- } data;
- bool link; // this is just a link to a node in a child queue
- QUEUE node;
-};
-
-struct queue {
- Queue *parent;
- QUEUE headtail;
- put_callback put_cb;
- void *data;
-};
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "event/queue.c.generated.h"
-#endif
-
-static Event NILEVENT = {.handler = NULL, .argv = {NULL}};
-
-Queue *queue_new_parent(put_callback put_cb, void *data)
-{
- return queue_new(NULL, put_cb, data);
-}
-
-Queue *queue_new_child(Queue *parent)
- FUNC_ATTR_NONNULL_ALL
-{
- assert(!parent->parent);
- return queue_new(parent, NULL, NULL);
-}
-
-static Queue *queue_new(Queue *parent, put_callback put_cb, void *data)
-{
- Queue *rv = xmalloc(sizeof(Queue));
- QUEUE_INIT(&rv->headtail);
- rv->parent = parent;
- rv->put_cb = put_cb;
- rv->data = data;
- return rv;
-}
-
-void queue_free(Queue *queue)
-{
- assert(queue);
- while (!QUEUE_EMPTY(&queue->headtail)) {
- QUEUE *q = QUEUE_HEAD(&queue->headtail);
- QueueItem *item = queue_node_data(q);
- if (queue->parent) {
- QUEUE_REMOVE(&item->data.item.parent->node);
- xfree(item->data.item.parent);
- }
- QUEUE_REMOVE(q);
- xfree(item);
- }
-
- xfree(queue);
-}
-
-Event queue_get(Queue *queue)
-{
- return queue_empty(queue) ? NILEVENT : queue_remove(queue);
-}
-
-void queue_put_event(Queue *queue, Event event)
-{
- assert(queue);
- queue_push(queue, event);
- if (queue->parent && queue->parent->put_cb) {
- queue->parent->put_cb(queue->parent, queue->parent->data);
- }
-}
-
-void queue_process_events(Queue *queue)
-{
- assert(queue);
- while (!queue_empty(queue)) {
- Event event = queue_get(queue);
- if (event.handler) {
- event.handler(event.argv);
- }
- }
-}
-
-bool queue_empty(Queue *queue)
-{
- assert(queue);
- return QUEUE_EMPTY(&queue->headtail);
-}
-
-void queue_replace_parent(Queue *queue, Queue *new_parent)
-{
- assert(queue_empty(queue));
- queue->parent = new_parent;
-}
-
-static Event queue_remove(Queue *queue)
-{
- assert(!queue_empty(queue));
- QUEUE *h = QUEUE_HEAD(&queue->headtail);
- QUEUE_REMOVE(h);
- QueueItem *item = queue_node_data(h);
- Event rv;
-
- if (item->link) {
- assert(!queue->parent);
- // remove the next node in the linked queue
- Queue *linked = item->data.queue;
- assert(!queue_empty(linked));
- QueueItem *child =
- queue_node_data(QUEUE_HEAD(&linked->headtail));
- QUEUE_REMOVE(&child->node);
- rv = child->data.item.event;
- xfree(child);
- } else {
- if (queue->parent) {
- // remove the corresponding link node in the parent queue
- QUEUE_REMOVE(&item->data.item.parent->node);
- xfree(item->data.item.parent);
- }
- rv = item->data.item.event;
- }
-
- xfree(item);
- return rv;
-}
-
-static void queue_push(Queue *queue, Event event)
-{
- QueueItem *item = xmalloc(sizeof(QueueItem));
- item->link = false;
- item->data.item.event = event;
- QUEUE_INSERT_TAIL(&queue->headtail, &item->node);
- if (queue->parent) {
- // push link node to the parent queue
- item->data.item.parent = xmalloc(sizeof(QueueItem));
- item->data.item.parent->link = true;
- item->data.item.parent->data.queue = queue;
- QUEUE_INSERT_TAIL(&queue->parent->headtail, &item->data.item.parent->node);
- }
-}
-
-static QueueItem *queue_node_data(QUEUE *q)
-{
- return QUEUE_DATA(q, QueueItem, node);
-}
diff --git a/src/nvim/event/queue.h b/src/nvim/event/queue.h
deleted file mode 100644
index 85fc59f8b2..0000000000
--- a/src/nvim/event/queue.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef NVIM_EVENT_QUEUE_H
-#define NVIM_EVENT_QUEUE_H
-
-#include <uv.h>
-
-#include "nvim/event/defs.h"
-#include "nvim/lib/queue.h"
-
-typedef struct queue Queue;
-typedef void (*put_callback)(Queue *queue, void *data);
-
-#define queue_put(q, h, ...) \
- queue_put_event(q, event_create(1, h, __VA_ARGS__));
-
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "event/queue.h.generated.h"
-#endif
-#endif // NVIM_EVENT_QUEUE_H
diff --git a/src/nvim/event/rstream.c b/src/nvim/event/rstream.c
index 9f3fbc25ff..92efc9fa2e 100644
--- a/src/nvim/event/rstream.c
+++ b/src/nvim/event/rstream.c
@@ -17,21 +17,19 @@
# include "event/rstream.c.generated.h"
#endif
-void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize,
- void *data)
+void rstream_init_fd(Loop *loop, Stream *stream, int fd, size_t bufsize)
FUNC_ATTR_NONNULL_ARG(1)
FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(loop, stream, fd, NULL, data);
+ stream_init(loop, stream, fd, NULL);
rstream_init(stream, bufsize);
}
-void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize,
- void *data)
+void rstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t bufsize)
FUNC_ATTR_NONNULL_ARG(1)
FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(NULL, stream, -1, uvstream, data);
+ stream_init(NULL, stream, -1, uvstream);
rstream_init(stream, bufsize);
}
@@ -48,10 +46,11 @@ void rstream_init(Stream *stream, size_t bufsize)
/// Starts watching for events from a `Stream` instance.
///
/// @param stream The `Stream` instance
-void rstream_start(Stream *stream, stream_read_cb cb)
+void rstream_start(Stream *stream, stream_read_cb cb, void *data)
FUNC_ATTR_NONNULL_ARG(1)
{
stream->read_cb = cb;
+ stream->cb_data = data;
if (stream->uvstream) {
uv_read_start(stream->uvstream, alloc_cb, read_cb);
} else {
@@ -81,7 +80,7 @@ static void on_rbuffer_nonfull(RBuffer *buf, void *data)
{
Stream *stream = data;
assert(stream->read_cb);
- rstream_start(stream, stream->read_cb);
+ rstream_start(stream, stream->read_cb, stream->cb_data);
}
// Callbacks used by libuv
@@ -100,6 +99,10 @@ static void read_cb(uv_stream_t *uvstream, ssize_t cnt, const uv_buf_t *buf)
{
Stream *stream = uvstream->data;
+ if (cnt > 0) {
+ stream->num_bytes += (size_t)cnt;
+ }
+
if (cnt <= 0) {
if (cnt != UV_ENOBUFS
// cnt == 0 means libuv asked for a buffer and decided it wasn't needed:
@@ -109,8 +112,8 @@ static void read_cb(uv_stream_t *uvstream, ssize_t cnt, const uv_buf_t *buf)
// to `alloc_cb` will return the same unused pointer(`rbuffer_produced`
// won't be called)
&& cnt != 0) {
- DLOG("Closing Stream(%p) because of %s(%zd)", stream,
- uv_strerror((int)cnt), cnt);
+ DLOG("Closing Stream (%p): %s (%s)", stream,
+ uv_err_name((int)cnt), os_strerror((int)cnt));
// Read error or EOF, either way stop the stream and invoke the callback
// with eof == true
uv_read_stop(uvstream);
@@ -175,7 +178,7 @@ static void read_event(void **argv)
if (stream->read_cb) {
size_t count = (uintptr_t)argv[1];
bool eof = (uintptr_t)argv[2];
- stream->read_cb(stream, stream->buffer, count, stream->data, eof);
+ stream->read_cb(stream, stream->buffer, count, stream->cb_data, eof);
}
stream->pending_reqs--;
if (stream->closed && !stream->pending_reqs) {
@@ -185,10 +188,6 @@ static void read_event(void **argv)
static void invoke_read_cb(Stream *stream, size_t count, bool eof)
{
- if (stream->closed) {
- return;
- }
-
// Don't let the stream be closed before the event is processed.
stream->pending_reqs++;
diff --git a/src/nvim/event/signal.h b/src/nvim/event/signal.h
index e32608acc0..7fe352edef 100644
--- a/src/nvim/event/signal.h
+++ b/src/nvim/event/signal.h
@@ -14,7 +14,7 @@ struct signal_watcher {
void *data;
signal_cb cb;
signal_close_cb close_cb;
- Queue *events;
+ MultiQueue *events;
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/src/nvim/event/socket.c b/src/nvim/event/socket.c
index 93cc592683..8f9327f3d4 100644
--- a/src/nvim/event/socket.c
+++ b/src/nvim/event/socket.c
@@ -103,7 +103,7 @@ int socket_watcher_start(SocketWatcher *watcher, int backlog, socket_cb cb)
// Libuv converts ENOENT to EACCES for Windows compatibility, but if
// the parent directory does not exist, ENOENT would be more accurate.
*path_tail((char_u *)watcher->addr) = NUL;
- if (!os_file_exists((char_u *)watcher->addr)) {
+ if (!os_path_exists((char_u *)watcher->addr)) {
result = -ENOENT;
}
}
@@ -113,7 +113,7 @@ int socket_watcher_start(SocketWatcher *watcher, int backlog, socket_cb cb)
return 0;
}
-int socket_watcher_accept(SocketWatcher *watcher, Stream *stream, void *data)
+int socket_watcher_accept(SocketWatcher *watcher, Stream *stream)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
uv_stream_t *client;
@@ -133,7 +133,7 @@ int socket_watcher_accept(SocketWatcher *watcher, Stream *stream, void *data)
return result;
}
- stream_init(NULL, stream, -1, client, data);
+ stream_init(NULL, stream, -1, client);
return 0;
}
diff --git a/src/nvim/event/socket.h b/src/nvim/event/socket.h
index ad59fdbe3a..eb0823c76d 100644
--- a/src/nvim/event/socket.h
+++ b/src/nvim/event/socket.h
@@ -30,7 +30,7 @@ struct socket_watcher {
void *data;
socket_cb cb;
socket_close_cb close_cb;
- Queue *events;
+ MultiQueue *events;
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/src/nvim/event/stream.c b/src/nvim/event/stream.c
index 71582ab357..26083c20f4 100644
--- a/src/nvim/event/stream.c
+++ b/src/nvim/event/stream.c
@@ -30,8 +30,7 @@ int stream_set_blocking(int fd, bool blocking)
return retval;
}
-void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
- void *data)
+void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream)
FUNC_ATTR_NONNULL_ARG(2)
{
stream->uvstream = uvstream;
@@ -58,7 +57,6 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
stream->uvstream->data = stream;
}
- stream->data = data;
stream->internal_data = NULL;
stream->fpos = 0;
stream->curmem = 0;
@@ -71,14 +69,16 @@ void stream_init(Loop *loop, Stream *stream, int fd, uv_stream_t *uvstream,
stream->closed = false;
stream->buffer = NULL;
stream->events = NULL;
+ stream->num_bytes = 0;
}
-void stream_close(Stream *stream, stream_close_cb on_stream_close)
+void stream_close(Stream *stream, stream_close_cb on_stream_close, void *data)
FUNC_ATTR_NONNULL_ARG(1)
{
assert(!stream->closed);
stream->closed = true;
stream->close_cb = on_stream_close;
+ stream->close_cb_data = data;
if (!stream->pending_reqs) {
stream_close_handle(stream);
@@ -102,7 +102,7 @@ static void close_cb(uv_handle_t *handle)
rbuffer_free(stream->buffer);
}
if (stream->close_cb) {
- stream->close_cb(stream, stream->data);
+ stream->close_cb(stream, stream->close_cb_data);
}
if (stream->internal_close_cb) {
stream->internal_close_cb(stream, stream->internal_data);
diff --git a/src/nvim/event/stream.h b/src/nvim/event/stream.h
index c6baac0db7..d27497e4a4 100644
--- a/src/nvim/event/stream.h
+++ b/src/nvim/event/stream.h
@@ -44,14 +44,16 @@ struct stream {
uv_file fd;
stream_read_cb read_cb;
stream_write_cb write_cb;
+ void *cb_data;
stream_close_cb close_cb, internal_close_cb;
+ void *close_cb_data, *internal_data;
size_t fpos;
size_t curmem;
size_t maxmem;
size_t pending_reqs;
- void *data, *internal_data;
+ size_t num_bytes;
bool closed;
- Queue *events;
+ MultiQueue *events;
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/src/nvim/event/time.c b/src/nvim/event/time.c
index 7bf333bcea..77260546db 100644
--- a/src/nvim/event/time.c
+++ b/src/nvim/event/time.c
@@ -17,6 +17,7 @@ void time_watcher_init(Loop *loop, TimeWatcher *watcher, void *data)
watcher->uv.data = watcher;
watcher->data = data;
watcher->events = loop->fast_events;
+ watcher->blockable = false;
}
void time_watcher_start(TimeWatcher *watcher, time_cb cb, uint64_t timeout,
@@ -50,6 +51,10 @@ static void time_watcher_cb(uv_timer_t *handle)
FUNC_ATTR_NONNULL_ALL
{
TimeWatcher *watcher = handle->data;
+ if (watcher->blockable && !multiqueue_empty(watcher->events)) {
+ // the timer blocked and there already is an unprocessed event waiting
+ return;
+ }
CREATE_EVENT(watcher->events, time_event, 1, watcher);
}
diff --git a/src/nvim/event/time.h b/src/nvim/event/time.h
index 7882b2b627..a6de89ad6e 100644
--- a/src/nvim/event/time.h
+++ b/src/nvim/event/time.h
@@ -12,7 +12,8 @@ struct time_watcher {
uv_timer_t uv;
void *data;
time_cb cb, close_cb;
- Queue *events;
+ MultiQueue *events;
+ bool blockable;
};
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/src/nvim/event/wstream.c b/src/nvim/event/wstream.c
index 8028e35e6b..fc7aad8eb9 100644
--- a/src/nvim/event/wstream.c
+++ b/src/nvim/event/wstream.c
@@ -22,19 +22,17 @@ typedef struct {
# include "event/wstream.c.generated.h"
#endif
-void wstream_init_fd(Loop *loop, Stream *stream, int fd, size_t maxmem,
- void *data)
+void wstream_init_fd(Loop *loop, Stream *stream, int fd, size_t maxmem)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(loop, stream, fd, NULL, data);
+ stream_init(loop, stream, fd, NULL);
wstream_init(stream, maxmem);
}
-void wstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t maxmem,
- void *data)
+void wstream_init_stream(Stream *stream, uv_stream_t *uvstream, size_t maxmem)
FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_ARG(2)
{
- stream_init(NULL, stream, -1, uvstream, data);
+ stream_init(NULL, stream, -1, uvstream);
wstream_init(stream, maxmem);
}
@@ -54,10 +52,11 @@ void wstream_init(Stream *stream, size_t maxmem)
///
/// @param stream The `Stream` instance
/// @param cb The callback
-void wstream_set_write_cb(Stream *stream, stream_write_cb cb)
- FUNC_ATTR_NONNULL_ALL
+void wstream_set_write_cb(Stream *stream, stream_write_cb cb, void *data)
+ FUNC_ATTR_NONNULL_ARG(1, 2)
{
stream->write_cb = cb;
+ stream->cb_data = data;
}
/// Queues data for writing to the backing file descriptor of a `Stream`
@@ -138,7 +137,7 @@ static void write_cb(uv_write_t *req, int status)
wstream_release_wbuffer(data->buffer);
if (data->stream->write_cb) {
- data->stream->write_cb(data->stream, data->stream->data, status);
+ data->stream->write_cb(data->stream, data->stream->cb_data, status);
}
data->stream->pending_reqs--;
diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c
index 86f1a16216..e6e85a3f6c 100644
--- a/src/nvim/ex_cmds.c
+++ b/src/nvim/ex_cmds.c
@@ -8,7 +8,11 @@
#include <string.h>
#include <stdlib.h>
#include <inttypes.h>
+#include <math.h>
+#include "nvim/api/private/defs.h"
+#include "nvim/api/buffer.h"
+#include "nvim/log.h"
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/ex_cmds.h"
@@ -64,6 +68,33 @@
*/
typedef struct sign sign_T;
+/// Case matching style to use for :substitute
+typedef enum {
+ kSubHonorOptions = 0, ///< Honor the user's 'ignorecase'/'smartcase' options
+ kSubIgnoreCase, ///< Ignore case of the search
+ kSubMatchCase, ///< Match case of the search
+} SubIgnoreType;
+
+/// Flags kept between calls to :substitute.
+typedef struct {
+ bool do_all; ///< do multiple substitutions per line
+ bool do_ask; ///< ask for confirmation
+ bool do_count; ///< count only
+ bool do_error; ///< if false, ignore errors
+ bool do_print; ///< print last line with subs
+ bool do_list; ///< list last line with subs
+ bool do_number; ///< list last line with line nr
+ SubIgnoreType do_ic; ///< ignore case flag
+} subflags_T;
+
+/// Lines matched during :substitute.
+typedef struct {
+ linenr_T lnum;
+ long nmatch;
+ char_u *line;
+ kvec_t(colnr_T) cols; ///< columns of in-line matches
+} MatchedLine;
+typedef kvec_t(MatchedLine) MatchedLineVec;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ex_cmds.c.generated.h"
@@ -326,12 +357,12 @@ static int sort_compare(const void *s1, const void *s2)
// We need to copy one line into "sortbuf1", because there is no
// guarantee that the first pointer becomes invalid when obtaining the
// second one.
- STRNCPY(sortbuf1, ml_get(l1.lnum) + l1.st_u.line.start_col_nr,
- l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr + 1);
- sortbuf1[l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr] = 0;
- STRNCPY(sortbuf2, ml_get(l2.lnum) + l2.st_u.line.start_col_nr,
- l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr + 1);
- sortbuf2[l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr] = 0;
+ memcpy(sortbuf1, ml_get(l1.lnum) + l1.st_u.line.start_col_nr,
+ l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr + 1);
+ sortbuf1[l1.st_u.line.end_col_nr - l1.st_u.line.start_col_nr] = NUL;
+ memcpy(sortbuf2, ml_get(l2.lnum) + l2.st_u.line.start_col_nr,
+ l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr + 1);
+ sortbuf2[l2.st_u.line.end_col_nr - l2.st_u.line.start_col_nr] = NUL;
result = sort_ic ? STRICMP(sortbuf1, sortbuf2)
: STRCMP(sortbuf1, sortbuf2);
@@ -1136,15 +1167,11 @@ static void do_filter(
}
read_linecount = curbuf->b_ml.ml_line_count;
- /*
- * When call_shell() fails wait_return() is called to give the user a
- * chance to read the error messages. Otherwise errors are ignored, so you
- * can see the error messages from the command that appear on stdout; use
- * 'u' to fix the text
- * Switch to cooked mode when not redirecting stdin, avoids that something
- * like ":r !cat" hangs.
- * Pass on the kShellDoOut flag when the output is being redirected.
- */
+ // When call_shell() fails wait_return() is called to give the user a chance
+ // to read the error messages. Otherwise errors are ignored, so you can see
+ // the error messages from the command that appear on stdout; use 'u' to fix
+ // the text.
+ // Pass on the kShellDoOut flag when the output is being redirected.
if (call_shell(
cmd_buf,
kShellOptFilter | shell_flags,
@@ -1166,8 +1193,8 @@ static void do_filter(
if (do_out) {
if (otmp != NULL) {
- if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM,
- eap, READ_FILTER) == FAIL) {
+ if (readfile(otmp, NULL, line2, (linenr_T)0, (linenr_T)MAXLNUM, eap,
+ READ_FILTER) != OK) {
if (!aborting()) {
msg_putchar('\n');
EMSG2(_(e_notread), otmp);
@@ -1377,36 +1404,34 @@ char_u *make_filter_cmd(char_u *cmd, char_u *itmp, char_u *otmp)
: "(%s)";
vim_snprintf(buf, len, fmt, (char *)cmd);
} else {
- strncpy(buf, (char *) cmd, len);
+ xstrlcpy(buf, (char *)cmd, len);
}
if (itmp != NULL) {
- strncat(buf, " < ", len);
- strncat(buf, (char *) itmp, len);
+ xstrlcat(buf, " < ", len - 1);
+ xstrlcat(buf, (const char *)itmp, len - 1);
}
#else
// For shells that don't understand braces around commands, at least allow
// the use of commands in a pipe.
- strncpy(buf, cmd, len);
+ xstrlcpy(buf, cmd, len);
if (itmp != NULL) {
- char_u *p;
-
// If there is a pipe, we have to put the '<' in front of it.
// Don't do this when 'shellquote' is not empty, otherwise the
// redirection would be inside the quotes.
if (*p_shq == NUL) {
- p = strchr(buf, '|');
+ char *const p = strchr(buf, '|');
if (p != NULL) {
*p = NUL;
}
}
- strncat(buf, " < ", len);
- strncat(buf, (char *) itmp, len);
+ xstrlcat(buf, " < ", len);
+ xstrlcat(buf, (const char *)itmp, len);
if (*p_shq == NUL) {
- p = strchr(cmd, '|');
+ const char *const p = strchr((const char *)cmd, '|');
if (p != NULL) {
- strncat(buf, " ", len); // Insert a space before the '|' for DOS
- strncat(buf, p, len);
+ xstrlcat(buf, " ", len - 1); // Insert a space before the '|' for DOS
+ xstrlcat(buf, p, len - 1);
}
}
}
@@ -1510,8 +1535,9 @@ int rename_buffer(char_u *new_fname)
curbuf->b_flags |= BF_NOTEDITED;
if (xfname != NULL && *xfname != NUL) {
buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
- if (buf != NULL && !cmdmod.keepalt)
+ if (buf != NULL && !cmdmod.keepalt) {
curwin->w_alt_fnum = buf->b_fnum;
+ }
}
xfree(fname);
xfree(sfname);
@@ -1583,6 +1609,7 @@ int do_write(exarg_T *eap)
int retval = FAIL;
char_u *free_fname = NULL;
buf_T *alt_buf = NULL;
+ int name_was_missing;
if (not_writing()) /* check 'write' option */
return FAIL;
@@ -1693,11 +1720,11 @@ int do_write(exarg_T *eap)
goto theend;
}
- /* If 'filetype' was empty try detecting it now. */
+ // If 'filetype' was empty try detecting it now.
if (*curbuf->b_p_ft == NUL) {
- if (au_has_group((char_u *)"filetypedetect"))
- (void)do_doautocmd((char_u *)"filetypedetect BufRead",
- TRUE);
+ if (au_has_group((char_u *)"filetypedetect")) {
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", true, NULL);
+ }
do_modelines(0);
}
@@ -1706,6 +1733,7 @@ int do_write(exarg_T *eap)
fname = curbuf->b_sfname;
}
+ name_was_missing = curbuf->b_ffname == NULL;
retval = buf_write(curbuf, ffname, fname, eap->line1, eap->line2,
eap, eap->append, eap->forceit, TRUE, FALSE);
@@ -1715,7 +1743,11 @@ int do_write(exarg_T *eap)
curbuf->b_p_ro = FALSE;
redraw_tabline = TRUE;
}
- /* Change directories when the 'acd' option is set. */
+ }
+
+ // Change directories when the 'acd' option is set and the file name
+ // got changed or set.
+ if (eap->cmdidx == CMD_saveas || name_was_missing) {
do_autochdir();
}
}
@@ -1745,14 +1777,14 @@ check_overwrite (
* write to other file or b_flags set or not writing the whole file:
* overwriting only allowed with '!'
*/
- if ( (other
- || (buf->b_flags & BF_NOTEDITED)
- || ((buf->b_flags & BF_NEW)
- && vim_strchr(p_cpo, CPO_OVERNEW) == NULL)
- || (buf->b_flags & BF_READERR))
- && !p_wa
- && !bt_nofile(buf)
- && os_file_exists(ffname)) {
+ if ((other
+ || (buf->b_flags & BF_NOTEDITED)
+ || ((buf->b_flags & BF_NEW)
+ && vim_strchr(p_cpo, CPO_OVERNEW) == NULL)
+ || (buf->b_flags & BF_READERR))
+ && !p_wa
+ && !bt_nofile(buf)
+ && os_path_exists(ffname)) {
if (!eap->forceit && !eap->append) {
#ifdef UNIX
// It is possible to open a directory on Unix.
@@ -1795,7 +1827,7 @@ check_overwrite (
}
swapname = makeswapname(fname, ffname, curbuf, dir);
xfree(dir);
- if (os_file_exists(swapname)) {
+ if (os_path_exists(swapname)) {
if (p_confirm || cmdmod.confirm) {
char_u buff[DIALOG_MSG_SIZE];
@@ -1909,7 +1941,7 @@ static int check_readonly(int *forceit, buf_T *buf)
/* Handle a file being readonly when the 'readonly' option is set or when
* the file exists and permissions are read-only. */
if (!*forceit && (buf->b_p_ro
- || (os_file_exists(buf->b_ffname)
+ || (os_path_exists(buf->b_ffname)
&& !os_file_is_writable((char *)buf->b_ffname)))) {
if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL) {
char_u buff[DIALOG_MSG_SIZE];
@@ -2005,37 +2037,34 @@ theend:
return retval;
}
-/*
- * start editing a new file
- *
- * fnum: file number; if zero use ffname/sfname
- * ffname: the file name
- * - full path if sfname used,
- * - any file name if sfname is NULL
- * - empty string to re-edit with the same file name (but may be
- * in a different directory)
- * - NULL to start an empty buffer
- * sfname: the short file name (or NULL)
- * eap: contains the command to be executed after loading the file and
- * forced 'ff' and 'fenc'
- * newlnum: if > 0: put cursor on this line number (if possible)
- * if ECMD_LASTL: use last position in loaded file
- * if ECMD_LAST: use last position in all files
- * if ECMD_ONE: use first line
- * flags:
- * ECMD_HIDE: if TRUE don't free the current buffer
- * ECMD_SET_HELP: set b_help flag of (new) buffer before opening file
- * ECMD_OLDBUF: use existing buffer if it exists
- * ECMD_FORCEIT: ! used for Ex command
- * ECMD_ADDBUF: don't edit, just add to buffer list
- * oldwin: Should be "curwin" when editing a new buffer in the current
- * window, NULL when splitting the window first. When not NULL info
- * of the previous buffer for "oldwin" is stored.
- *
- * return FAIL for failure, OK otherwise
- */
-int
-do_ecmd (
+/// start editing a new file
+///
+/// @param fnum file number; if zero use ffname/sfname
+/// @param ffname the file name
+/// - full path if sfname used,
+/// - any file name if sfname is NULL
+/// - empty string to re-edit with the same file name (but may
+/// be in a different directory)
+/// - NULL to start an empty buffer
+/// @param sfname the short file name (or NULL)
+/// @param eap contains the command to be executed after loading the file
+/// and forced 'ff' and 'fenc'
+/// @param newlnum if > 0: put cursor on this line number (if possible)
+/// ECMD_LASTL: use last position in loaded file
+/// ECMD_LAST: use last position in all files
+/// ECMD_ONE: use first line
+/// @param flags ECMD_HIDE: if TRUE don't free the current buffer
+/// ECMD_SET_HELP: set b_help flag of (new) buffer before
+/// opening file
+/// ECMD_OLDBUF: use existing buffer if it exists
+/// ECMD_FORCEIT: ! used for Ex command
+/// ECMD_ADDBUF: don't edit, just add to buffer list
+/// @param oldwin Should be "curwin" when editing a new buffer in the current
+/// window, NULL when splitting the window first. When not NULL
+/// info of the previous buffer for "oldwin" is stored.
+///
+/// @return FAIL for failure, OK otherwise
+int do_ecmd(
int fnum,
char_u *ffname,
char_u *sfname,
@@ -2064,6 +2093,7 @@ do_ecmd (
char_u *command = NULL;
int did_get_winopts = FALSE;
int readfile_flags = 0;
+ bool did_inc_redrawing_disabled = false;
if (eap != NULL)
command = eap->do_ecmd_cmd;
@@ -2101,6 +2131,14 @@ do_ecmd (
}
}
+ // Re-editing a terminal buffer: skip most buffer re-initialization.
+ if (!other_file && curbuf->terminal) {
+ check_arg_idx(curwin); // Needed when called from do_argfile().
+ maketitle(); // Title may show the arg index, e.g. "(2 of 5)".
+ retval = OK;
+ goto theend;
+ }
+
/*
* if the file was changed we may not be allowed to abandon it
* - if we are going to re-edit the same file
@@ -2151,9 +2189,9 @@ do_ecmd (
buflist_altfpos(oldwin);
}
- if (fnum)
+ if (fnum) {
buf = buflist_findnr(fnum);
- else {
+ } else {
if (flags & ECMD_ADDBUF) {
linenr_T tlnum = 1L;
@@ -2166,7 +2204,7 @@ do_ecmd (
goto theend;
}
buf = buflist_new(ffname, sfname, 0L,
- BLN_CURBUF | ((flags & ECMD_SET_HELP) ? 0 : BLN_LISTED));
+ BLN_CURBUF | (flags & ECMD_SET_HELP ? 0 : BLN_LISTED));
// Autocmds may change curwin and curbuf.
if (oldwin != NULL) {
oldwin = curwin;
@@ -2227,28 +2265,28 @@ do_ecmd (
xfree(new_name);
goto theend;
}
- if (buf == curbuf) /* already in new buffer */
- auto_buf = TRUE;
- else {
- if (curbuf == old_curbuf)
+ if (buf == curbuf) { // already in new buffer
+ auto_buf = true;
+ } else {
+ win_T *the_curwin = curwin;
+
+ // Set the w_closing flag to avoid that autocommands close the window.
+ the_curwin->w_closing = true;
+ if (curbuf == old_curbuf) {
buf_copy_options(buf, BCO_ENTER);
+ }
- /* close the link to the current buffer */
- u_sync(FALSE);
+ // Close the link to the current buffer. This will set
+ // curwin->w_buffer to NULL.
+ u_sync(false);
close_buffer(oldwin, curbuf,
- (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD, FALSE);
-
- /* Autocommands may open a new window and leave oldwin open
- * which leads to crashes since the above call sets
- * oldwin->w_buffer to NULL. */
- if (curwin != oldwin && oldwin != aucmd_win && win_valid(oldwin)) {
- assert(oldwin);
- if (oldwin->w_buffer == NULL) {
- win_close(oldwin, FALSE);
- }
- }
+ (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD,
+ false);
+
+ the_curwin->w_closing = false;
- if (aborting()) { /* autocmds may abort script processing */
+ // autocmds may abort script processing
+ if (aborting() && curwin->w_buffer != NULL) {
xfree(new_name);
goto theend;
}
@@ -2300,6 +2338,11 @@ do_ecmd (
oldbuf = (flags & ECMD_OLDBUF);
}
+ // Don't redraw until the cursor is in the right line, otherwise
+ // autocommands may cause ml_get errors.
+ RedrawingDisabled++;
+ did_inc_redrawing_disabled = true;
+
buf = curbuf;
if ((flags & ECMD_SET_HELP) || keep_help_flag) {
prepare_help_buffer();
@@ -2342,10 +2385,12 @@ do_ecmd (
if (p_ur < 0 || curbuf->b_ml.ml_line_count <= p_ur) {
/* Save all the text, so that the reload can be undone.
* Sync first so that this is a separate undo-able action. */
- u_sync(FALSE);
- if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, TRUE)
- == FAIL)
+ u_sync(false);
+ if (u_savecommon(0, curbuf->b_ml.ml_line_count + 1, 0, true)
+ == FAIL) {
+ xfree(new_name);
goto theend;
+ }
u_unchanged(curbuf);
buf_freeall(curbuf, BFA_KEEP_UNDO);
@@ -2376,8 +2421,6 @@ do_ecmd (
/*
* If we get here we are sure to start editing
*/
- /* don't redraw until the cursor is in the right line */
- ++RedrawingDisabled;
/* Assume success now */
retval = OK;
@@ -2529,7 +2572,8 @@ do_ecmd (
if (curbuf->b_kmap_state & KEYMAP_INIT)
(void)keymap_init();
- --RedrawingDisabled;
+ RedrawingDisabled--;
+ did_inc_redrawing_disabled = false;
if (!skip_redraw) {
n = p_so;
if (topline == 0 && command == NULL)
@@ -2548,8 +2592,12 @@ do_ecmd (
theend:
- if (did_set_swapcommand)
+ if (did_inc_redrawing_disabled) {
+ RedrawingDisabled--;
+ }
+ if (did_set_swapcommand) {
set_vim_var_string(VV_SWAPCOMMAND, NULL, -1);
+ }
xfree(free_fname);
return retval;
}
@@ -2588,7 +2636,7 @@ void ex_append(exarg_T *eap)
if (eap->cmdidx != CMD_append)
--lnum;
- /* when the buffer is empty append to line 0 and delete the dummy line */
+ // when the buffer is empty need to delete the dummy line
if (empty && lnum == 1)
lnum = 0;
@@ -2660,7 +2708,7 @@ void ex_append(exarg_T *eap)
did_undo = TRUE;
ml_append(lnum, theline, (colnr_T)0, FALSE);
- appended_lines_mark(lnum, 1L);
+ appended_lines_mark(lnum + (empty ? 1 : 0), 1L);
xfree(theline);
++lnum;
@@ -2901,52 +2949,204 @@ void sub_set_replacement(SubReplacementString sub)
old_sub = sub;
}
-/* do_sub()
- *
- * Perform a substitution from line eap->line1 to line eap->line2 using the
- * command pointed to by eap->arg which should be of the form:
- *
- * /pattern/substitution/{flags}
- *
- * The usual escapes are supported as described in the regexp docs.
- */
-void do_sub(exarg_T *eap)
+/// Recognize ":%s/\n//" and turn it into a join command, which is much
+/// more efficient.
+///
+/// @param[in] eap Ex arguments
+/// @param[in] pat Search pattern
+/// @param[in] sub Replacement string
+/// @param[in] cmd Command from :s_flags
+/// @param[in] save Save pattern to options, history
+///
+/// @returns true if :substitute can be replaced with a join command
+static bool sub_joining_lines(exarg_T *eap, char_u *pat, char_u *sub,
+ char_u *cmd, bool save)
+ FUNC_ATTR_NONNULL_ARG(1, 3, 4)
+{
+ // TODO(vim): find a generic solution to make line-joining operations more
+ // efficient, avoid allocating a string that grows in size.
+ if (pat != NULL
+ && strcmp((const char *)pat, "\\n") == 0
+ && *sub == NUL
+ && (*cmd == NUL || (cmd[1] == NUL
+ && (*cmd == 'g'
+ || *cmd == 'l'
+ || *cmd == 'p'
+ || *cmd == '#')))) {
+ curwin->w_cursor.lnum = eap->line1;
+ if (*cmd == 'l') {
+ eap->flags = EXFLAG_LIST;
+ } else if (*cmd == '#') {
+ eap->flags = EXFLAG_NR;
+ } else if (*cmd == 'p') {
+ eap->flags = EXFLAG_PRINT;
+ }
+
+ // The number of lines joined is the number of lines in the range
+ linenr_T joined_lines_count = eap->line2 - eap->line1 + 1
+ // plus one extra line if not at the end of file.
+ + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
+ if (joined_lines_count > 1) {
+ do_join(joined_lines_count, FALSE, TRUE, FALSE, true);
+ sub_nsubs = joined_lines_count - 1;
+ sub_nlines = 1;
+ do_sub_msg(false);
+ ex_may_print(eap);
+ }
+
+ if (save) {
+ if (!cmdmod.keeppatterns) {
+ save_re_pat(RE_SUBST, pat, p_magic);
+ }
+ add_to_history(HIST_SEARCH, pat, true, NUL);
+ }
+
+ return true;
+ }
+
+ return false;
+}
+
+/// Allocate memory to store the replacement text for :substitute.
+///
+/// Slightly more memory that is strictly necessary is allocated to reduce the
+/// frequency of memory (re)allocation.
+///
+/// @param[in,out] new_start pointer to the memory for the replacement text
+/// @param[in] needed_len amount of memory needed
+///
+/// @returns pointer to the end of the allocated memory
+static char_u *sub_grow_buf(char_u **new_start, int needed_len)
+ FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_NONNULL_RET
+{
+ int new_start_len = 0;
+ char_u *new_end;
+ if (*new_start == NULL) {
+ // Get some space for a temporary buffer to do the
+ // substitution into (and some extra space to avoid
+ // too many calls to xmalloc()/free()).
+ new_start_len = needed_len + 50;
+ *new_start = xmalloc(new_start_len);
+ **new_start = NUL;
+ new_end = *new_start;
+ } else {
+ // Check if the temporary buffer is long enough to do the
+ // substitution into. If not, make it larger (with a bit
+ // extra to avoid too many calls to xmalloc()/free()).
+ size_t len = STRLEN(*new_start);
+ needed_len += len;
+ if (needed_len > new_start_len) {
+ new_start_len = needed_len + 50;
+ *new_start = xrealloc(*new_start, new_start_len);
+ }
+ new_end = *new_start + len;
+ }
+
+ return new_end;
+}
+
+/// Parse cmd string for :substitute's {flags} and update subflags accordingly
+///
+/// @param[in] cmd command string
+/// @param[in,out] subflags current flags defined for the :substitute command
+/// @param[in,out] which_pat pattern type from which to get default search
+///
+/// @returns pointer to the end of the flags, which may be the end of the string
+static char_u *sub_parse_flags(char_u *cmd, subflags_T *subflags,
+ int *which_pat)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
+{
+ // Find trailing options. When '&' is used, keep old options.
+ if (*cmd == '&') {
+ cmd++;
+ } else {
+ subflags->do_all = p_gd;
+ subflags->do_ask = false;
+ subflags->do_error = true;
+ subflags->do_print = false;
+ subflags->do_count = false;
+ subflags->do_number = false;
+ subflags->do_ic = kSubHonorOptions;
+ }
+ while (*cmd) {
+ // Note that 'g' and 'c' are always inverted.
+ // 'r' is never inverted.
+ if (*cmd == 'g') {
+ subflags->do_all = !subflags->do_all;
+ } else if (*cmd == 'c') {
+ subflags->do_ask = !subflags->do_ask;
+ } else if (*cmd == 'n') {
+ subflags->do_count = true;
+ } else if (*cmd == 'e') {
+ subflags->do_error = !subflags->do_error;
+ } else if (*cmd == 'r') { // use last used regexp
+ *which_pat = RE_LAST;
+ } else if (*cmd == 'p') {
+ subflags->do_print = true;
+ } else if (*cmd == '#') {
+ subflags->do_print = true;
+ subflags->do_number = true;
+ } else if (*cmd == 'l') {
+ subflags->do_print = true;
+ subflags->do_list = true;
+ } else if (*cmd == 'i') { // ignore case
+ subflags->do_ic = kSubIgnoreCase;
+ } else if (*cmd == 'I') { // don't ignore case
+ subflags->do_ic = kSubMatchCase;
+ } else {
+ break;
+ }
+ cmd++;
+ }
+ if (subflags->do_count) {
+ subflags->do_ask = false;
+ }
+
+ return cmd;
+}
+
+/// Perform a substitution from line eap->line1 to line eap->line2 using the
+/// command pointed to by eap->arg which should be of the form:
+///
+/// /pattern/substitution/{flags}
+///
+/// The usual escapes are supported as described in the regexp docs.
+///
+/// @return buffer used for 'inccommand' preview
+static buf_T *do_sub(exarg_T *eap, proftime_T timeout)
{
- linenr_T lnum;
long i = 0;
regmmatch_T regmatch;
- static int do_all = FALSE; /* do multiple substitutions per line */
- static int do_ask = FALSE; /* ask for confirmation */
- static bool do_count = false; /* count only */
- static int do_error = TRUE; /* if false, ignore errors */
- static int do_print = FALSE; /* print last line with subs. */
- static int do_list = FALSE; /* list last line with subs. */
- static int do_number = FALSE; /* list last line with line nr*/
- static int do_ic = 0; /* ignore case flag */
- int save_do_all; // remember user specified 'g' flag
- int save_do_ask; // remember user specified 'c' flag
- char_u *pat = NULL, *sub = NULL; /* init for GCC */
+ static subflags_T subflags = {
+ .do_all = false,
+ .do_ask = false,
+ .do_count = false,
+ .do_error = true,
+ .do_print = false,
+ .do_list = false,
+ .do_number = false,
+ .do_ic = kSubHonorOptions
+ };
+ char_u *pat = NULL, *sub = NULL; // init for GCC
int delimiter;
+ bool has_second_delim = false;
int sublen;
- int got_quit = FALSE;
- int got_match = FALSE;
- int temp;
+ int got_quit = false;
+ int got_match = false;
int which_pat;
- char_u *cmd;
- int save_State;
- linenr_T first_line = 0; /* first changed line */
- linenr_T last_line= 0; /* below last changed line AFTER the
- * change */
+ char_u *cmd = eap->arg;
+ linenr_T first_line = 0; // first changed line
+ linenr_T last_line= 0; // below last changed line AFTER the change
linenr_T old_line_count = curbuf->b_ml.ml_line_count;
- linenr_T line2;
- long nmatch; /* number of lines in match */
- char_u *sub_firstline; /* allocated copy of first sub line */
- int endcolumn = FALSE; /* cursor in last column when done */
+ char_u *sub_firstline; // allocated copy of first sub line
+ bool endcolumn = false; // cursor in last column when done
+ MatchedLineVec matched_lines = KV_INITIAL_VALUE;
pos_T old_cursor = curwin->w_cursor;
int start_nsubs;
int save_ma = 0;
+ int save_b_changed = curbuf->b_changed;
+ bool preview = (State & CMDPREVIEW);
- cmd = eap->arg;
if (!global_busy) {
sub_nsubs = 0;
sub_nlines = 0;
@@ -2964,7 +3164,7 @@ void do_sub(exarg_T *eap)
/* don't accept alphanumeric for separator */
if (isalpha(*cmd)) {
EMSG(_("E146: Regular expressions can't be delimited by letters"));
- return;
+ return NULL;
}
/*
* undocumented vi feature:
@@ -2975,21 +3175,26 @@ void do_sub(exarg_T *eap)
++cmd;
if (vim_strchr((char_u *)"/?&", *cmd) == NULL) {
EMSG(_(e_backslash));
- return;
+ return NULL;
}
- if (*cmd != '&')
- which_pat = RE_SEARCH; /* use last '/' pattern */
- pat = (char_u *)""; /* empty search pattern */
- delimiter = *cmd++; /* remember delimiter character */
- } else { /* find the end of the regexp */
- if (p_altkeymap && curwin->w_p_rl)
+ if (*cmd != '&') {
+ which_pat = RE_SEARCH; // use last '/' pattern
+ }
+ pat = (char_u *)""; // empty search pattern
+ delimiter = *cmd++; // remember delimiter character
+ has_second_delim = true;
+ } else { // find the end of the regexp
+ if (p_altkeymap && curwin->w_p_rl) {
lrF_sub(cmd);
- which_pat = RE_LAST; /* use last used regexp */
- delimiter = *cmd++; /* remember delimiter character */
- pat = cmd; /* remember start of search pat */
+ }
+ which_pat = RE_LAST; // use last used regexp
+ delimiter = *cmd++; // remember delimiter character
+ pat = cmd; // remember start of search pat
cmd = skip_regexp(cmd, delimiter, p_magic, &eap->arg);
- if (cmd[0] == delimiter) /* end delimiter found */
- *cmd++ = NUL; /* replace it with a NUL */
+ if (cmd[0] == delimiter) { // end delimiter found
+ *cmd++ = NUL; // replace it with a NUL
+ has_second_delim = true;
+ }
}
/*
@@ -3008,7 +3213,7 @@ void do_sub(exarg_T *eap)
mb_ptr_adv(cmd);
}
- if (!eap->skip) {
+ if (!eap->skip && !preview) {
sub_set_replacement((SubReplacementString) {
.sub = xstrdup((char *) sub),
.timestamp = os_time(),
@@ -3018,7 +3223,7 @@ void do_sub(exarg_T *eap)
} else if (!eap->skip) { /* use previous pattern and substitution */
if (old_sub.sub == NULL) { /* there is no previous command */
EMSG(_(e_nopresub));
- return;
+ return NULL;
}
pat = NULL; /* search_regcomp() will use previous pattern */
sub = (char_u *) old_sub.sub;
@@ -3028,106 +3233,22 @@ void do_sub(exarg_T *eap)
endcolumn = (curwin->w_curswant == MAXCOL);
}
- // Recognize ":%s/\n//" and turn it into a join command, which is much
- // more efficient.
- // TODO: find a generic solution to make line-joining operations more
- // efficient, avoid allocating a string that grows in size.
- if (pat != NULL
- && strcmp((const char *)pat, "\\n") == 0
- && *sub == NUL
- && (*cmd == NUL || (cmd[1] == NUL
- && (*cmd == 'g'
- || *cmd == 'l'
- || *cmd == 'p'
- || *cmd == '#')))) {
- curwin->w_cursor.lnum = eap->line1;
- if (*cmd == 'l') {
- eap->flags = EXFLAG_LIST;
- } else if (*cmd == '#') {
- eap->flags = EXFLAG_NR;
- } else if (*cmd == 'p') {
- eap->flags = EXFLAG_PRINT;
- }
-
- // The number of lines joined is the number of lines in the range
- linenr_T joined_lines_count = eap->line2 - eap->line1 + 1
- // plus one extra line if not at the end of file.
- + (eap->line2 < curbuf->b_ml.ml_line_count ? 1 : 0);
- if (joined_lines_count > 1) {
- do_join(joined_lines_count, FALSE, TRUE, FALSE, true);
- sub_nsubs = joined_lines_count - 1;
- sub_nlines = 1;
- do_sub_msg(false);
- ex_may_print(eap);
- }
-
- if (!cmdmod.keeppatterns) {
- save_re_pat(RE_SUBST, pat, p_magic);
- }
- add_to_history(HIST_SEARCH, pat, TRUE, NUL);
-
- return;
+ if (sub_joining_lines(eap, pat, sub, cmd, !preview)) {
+ return NULL;
}
- /*
- * Find trailing options. When '&' is used, keep old options.
- */
- if (*cmd == '&') {
- ++cmd;
- } else {
- // default is global on
- do_all = p_gd ? TRUE : FALSE;
-
- do_ask = FALSE;
- do_error = TRUE;
- do_print = FALSE;
- do_count = false;
- do_number = FALSE;
- do_ic = 0;
- }
- while (*cmd) {
- // Note that 'g' and 'c' are always inverted.
- // 'r' is never inverted.
- if (*cmd == 'g')
- do_all = !do_all;
- else if (*cmd == 'c')
- do_ask = !do_ask;
- else if (*cmd == 'n')
- do_count = true;
- else if (*cmd == 'e')
- do_error = !do_error;
- else if (*cmd == 'r') /* use last used regexp */
- which_pat = RE_LAST;
- else if (*cmd == 'p')
- do_print = TRUE;
- else if (*cmd == '#') {
- do_print = TRUE;
- do_number = TRUE;
- } else if (*cmd == 'l') {
- do_print = TRUE;
- do_list = TRUE;
- } else if (*cmd == 'i') /* ignore case */
- do_ic = 'i';
- else if (*cmd == 'I') /* don't ignore case */
- do_ic = 'I';
- else
- break;
- ++cmd;
- }
- if (do_count) {
- do_ask = FALSE;
- }
+ cmd = sub_parse_flags(cmd, &subflags, &which_pat);
- save_do_all = do_all;
- save_do_ask = do_ask;
+ bool save_do_all = subflags.do_all; // remember user specified 'g' flag
+ bool save_do_ask = subflags.do_ask; // remember user specified 'c' flag
// check for a trailing count
cmd = skipwhite(cmd);
if (ascii_isdigit(*cmd)) {
i = getdigits_long(&cmd);
- if (i <= 0 && !eap->skip && do_error) {
+ if (i <= 0 && !eap->skip && subflags.do_error) {
EMSG(_(e_zerocount));
- return;
+ return NULL;
}
eap->line1 = eap->line2;
eap->line2 += i - 1;
@@ -3143,31 +3264,34 @@ void do_sub(exarg_T *eap)
eap->nextcmd = check_nextcmd(cmd);
if (eap->nextcmd == NULL) {
EMSG(_(e_trailing));
- return;
+ return NULL;
}
}
- if (eap->skip) /* not executing commands, only parsing */
- return;
+ if (eap->skip) { // not executing commands, only parsing
+ return NULL;
+ }
- if (!do_count && !MODIFIABLE(curbuf)) {
- /* Substitution is not allowed in non-'modifiable' buffer */
+ if (!subflags.do_count && !MODIFIABLE(curbuf)) {
+ // Substitution is not allowed in non-'modifiable' buffer
EMSG(_(e_modifiable));
- return;
+ return NULL;
}
- if (search_regcomp(pat, RE_SUBST, which_pat, SEARCH_HIS,
- &regmatch) == FAIL) {
- if (do_error)
+ if (search_regcomp(pat, RE_SUBST, which_pat, (preview ? 0 : SEARCH_HIS),
+ &regmatch) == FAIL) {
+ if (subflags.do_error) {
EMSG(_(e_invcmd));
- return;
+ }
+ return NULL;
}
- /* the 'i' or 'I' flag overrules 'ignorecase' and 'smartcase' */
- if (do_ic == 'i')
- regmatch.rmm_ic = TRUE;
- else if (do_ic == 'I')
- regmatch.rmm_ic = FALSE;
+ // the 'i' or 'I' flag overrules 'ignorecase' and 'smartcase'
+ if (subflags.do_ic == kSubIgnoreCase) {
+ regmatch.rmm_ic = true;
+ } else if (subflags.do_ic == kSubMatchCase) {
+ regmatch.rmm_ic = false;
+ }
sub_firstline = NULL;
@@ -3179,29 +3303,25 @@ void do_sub(exarg_T *eap)
if (!(sub[0] == '\\' && sub[1] == '='))
sub = regtilde(sub, p_magic);
- /*
- * Check for a match on each line.
- */
- line2 = eap->line2;
- for (lnum = eap->line1; lnum <= line2 && !(got_quit
- || aborting()
- ); ++lnum) {
- nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
- (colnr_T)0, NULL);
+ // Check for a match on each line.
+ linenr_T line2 = eap->line2;
+ for (linenr_T lnum = eap->line1;
+ lnum <= line2 && !(got_quit || aborting());
+ lnum++) {
+ long nmatch = vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+ (colnr_T)0, NULL);
if (nmatch) {
colnr_T copycol;
colnr_T matchcol;
colnr_T prev_matchcol = MAXCOL;
char_u *new_end, *new_start = NULL;
- unsigned new_start_len = 0;
char_u *p1;
int did_sub = FALSE;
int lastone;
- int len, copy_len, needed_len;
- long nmatch_tl = 0; /* nr of lines matched below lnum */
- int do_again; /* do it again after joining lines */
- int skip_match = FALSE;
- linenr_T sub_firstlnum; /* nr of first sub line */
+ long nmatch_tl = 0; // nr of lines matched below lnum
+ int do_again; // do it again after joining lines
+ int skip_match = false;
+ linenr_T sub_firstlnum; // nr of first sub line
/*
* The new text is build up step by step, to avoid too much
@@ -3241,8 +3361,7 @@ void do_sub(exarg_T *eap)
* accordingly.
*
* The new text is built up in new_start[]. It has some extra
- * room to avoid using xmalloc()/free() too often. new_start_len is
- * the length of the allocated memory at new_start.
+ * room to avoid using xmalloc()/free() too often.
*
* Make a copy of the old line, so it won't be taken away when
* updating the screen or handling a multi-line match. The "old_"
@@ -3251,6 +3370,8 @@ void do_sub(exarg_T *eap)
sub_firstlnum = lnum;
copycol = 0;
matchcol = 0;
+ // the current match
+ MatchedLine matched_line = { 0, 0, NULL, KV_INITIAL_VALUE };
/* At first match, remember current cursor position. */
if (!got_match) {
@@ -3261,9 +3382,9 @@ void do_sub(exarg_T *eap)
/*
* Loop until nothing more to replace in this line.
* 1. Handle match with empty string.
- * 2. If do_ask is set, ask for confirmation.
+ * 2. If subflags.do_ask is set, ask for confirmation.
* 3. substitute the string.
- * 4. if do_all is set, find next match
+ * 4. if subflags.do_all is set, find next match
* 5. break if there isn't another match in this line
*/
for (;; ) {
@@ -3287,6 +3408,12 @@ void do_sub(exarg_T *eap)
curwin->w_cursor.lnum = lnum;
do_again = FALSE;
+ if (preview) {
+ // Increment the in-line match count and store the column.
+ matched_line.nmatch++;
+ kv_push(matched_line.cols, regmatch.startpos[0].col);
+ }
+
/*
* 1. Match empty string does not count, except for first
* match. This reproduces the strange vi behaviour.
@@ -3314,15 +3441,13 @@ void do_sub(exarg_T *eap)
matchcol = regmatch.endpos[0].col;
prev_matchcol = matchcol;
- /*
- * 2. If do_count is set only increase the counter.
- * If do_ask is set, ask for confirmation.
- */
- if (do_count) {
- /* For a multi-line match, put matchcol at the NUL at
- * the end of the line and set nmatch to one, so that
- * we continue looking for a match on the next line.
- * Avoids that ":s/\nB\@=//gc" get stuck. */
+ // 2. If subflags.do_count is set only increase the counter.
+ // If do_ask is set, ask for confirmation.
+ if (subflags.do_count) {
+ // For a multi-line match, put matchcol at the NUL at
+ // the end of the line and set nmatch to one, so that
+ // we continue looking for a match on the next line.
+ // Avoids that ":s/\nB\@=//gc" get stuck.
if (nmatch > 1) {
matchcol = (colnr_T)STRLEN(sub_firstline);
nmatch = 1;
@@ -3336,12 +3461,12 @@ void do_sub(exarg_T *eap)
goto skip;
}
- if (do_ask) {
+ if (subflags.do_ask && !preview) {
int typed = 0;
/* change State to CONFIRM, so that the mouse works
* properly */
- save_State = State;
+ int save_State = State;
State = CONFIRM;
setmouse(); /* disable mouse in xterm */
curwin->w_cursor.col = regmatch.startpos[0].col;
@@ -3354,17 +3479,17 @@ void do_sub(exarg_T *eap)
/*
* Loop until 'y', 'n', 'q', CTRL-E or CTRL-Y typed.
*/
- while (do_ask) {
+ while (subflags.do_ask) {
if (exmode_active) {
char_u *resp;
colnr_T sc, ec;
- print_line_no_prefix(lnum, do_number, do_list);
+ print_line_no_prefix(lnum, subflags.do_number, subflags.do_list);
getvcol(curwin, &curwin->w_cursor, &sc, NULL, NULL);
curwin->w_cursor.col = regmatch.endpos[0].col - 1;
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &ec);
- if (do_number || curwin->w_p_nu) {
+ if (subflags.do_number || curwin->w_p_nu) {
int numw = number_width(curwin) + 1;
sc += numw;
ec += numw;
@@ -3388,7 +3513,7 @@ void do_sub(exarg_T *eap)
curwin->w_p_fen = FALSE;
/* Invert the matched string.
* Remove the inversion afterwards. */
- temp = RedrawingDisabled;
+ int temp = RedrawingDisabled;
RedrawingDisabled = 0;
if (new_start != NULL) {
@@ -3460,7 +3585,7 @@ void do_sub(exarg_T *eap)
|| typed == intr_char
#endif
) {
- got_quit = TRUE;
+ got_quit = true;
break;
}
if (typed == 'n')
@@ -3468,13 +3593,13 @@ void do_sub(exarg_T *eap)
if (typed == 'y')
break;
if (typed == 'l') {
- /* last: replace and then stop */
- do_all = FALSE;
+ // last: replace and then stop
+ subflags.do_all = false;
line2 = lnum;
break;
}
if (typed == 'a') {
- do_ask = FALSE;
+ subflags.do_ask = false;
break;
}
if (typed == Ctrl_E)
@@ -3507,156 +3632,137 @@ void do_sub(exarg_T *eap)
* use "\=col("."). */
curwin->w_cursor.col = regmatch.startpos[0].col;
- /*
- * 3. substitute the string.
- */
- if (do_count) {
- /* prevent accidentally changing the buffer by a function */
- save_ma = curbuf->b_p_ma;
- curbuf->b_p_ma = FALSE;
- sandbox++;
- }
- /* get length of substitution part */
- sublen = vim_regsub_multi(&regmatch,
- sub_firstlnum - regmatch.startpos[0].lnum,
- sub, sub_firstline, FALSE, p_magic, TRUE);
- if (do_count) {
- curbuf->b_p_ma = save_ma;
- sandbox--;
- goto skip;
- }
+ // 3. Substitute the string. During 'inccommand' preview only do this if
+ // there is a replace pattern.
+ if (!preview || has_second_delim) {
+ if (subflags.do_count) {
+ // prevent accidentally changing the buffer by a function
+ save_ma = curbuf->b_p_ma;
+ curbuf->b_p_ma = false;
+ sandbox++;
+ }
+ // Save flags for recursion. They can change for e.g.
+ // :s/^/\=execute("s#^##gn")
+ subflags_T subflags_save = subflags;
+ // get length of substitution part
+ sublen = vim_regsub_multi(&regmatch,
+ sub_firstlnum - regmatch.startpos[0].lnum,
+ sub, sub_firstline, false, p_magic, true);
+ // Don't keep flags set by a recursive call
+ subflags = subflags_save;
+ if (subflags.do_count) {
+ curbuf->b_p_ma = save_ma;
+ if (sandbox > 0) {
+ sandbox--;
+ }
+ goto skip;
+ }
- /* When the match included the "$" of the last line it may
- * go beyond the last line of the buffer. */
- if (nmatch > curbuf->b_ml.ml_line_count - sub_firstlnum + 1) {
- nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1;
- skip_match = TRUE;
- }
+ // When the match included the "$" of the last line it may
+ // go beyond the last line of the buffer.
+ if (nmatch > curbuf->b_ml.ml_line_count - sub_firstlnum + 1) {
+ nmatch = curbuf->b_ml.ml_line_count - sub_firstlnum + 1;
+ skip_match = true;
+ }
- /* Need room for:
- * - result so far in new_start (not for first sub in line)
- * - original text up to match
- * - length of substituted part
- * - original text after match
- */
- if (nmatch == 1)
- p1 = sub_firstline;
- else {
- p1 = ml_get(sub_firstlnum + nmatch - 1);
- nmatch_tl += nmatch - 1;
- }
- copy_len = regmatch.startpos[0].col - copycol;
- needed_len = copy_len + ((unsigned)STRLEN(p1)
- - regmatch.endpos[0].col) + sublen + 1;
- if (new_start == NULL) {
- /*
- * Get some space for a temporary buffer to do the
- * substitution into (and some extra space to avoid
- * too many calls to xmalloc()/free()).
- */
- new_start_len = needed_len + 50;
- new_start = xmalloc(new_start_len);
- *new_start = NUL;
- new_end = new_start;
- } else {
- /*
- * Check if the temporary buffer is long enough to do the
- * substitution into. If not, make it larger (with a bit
- * extra to avoid too many calls to xmalloc()/free()).
- */
- len = (unsigned)STRLEN(new_start);
- needed_len += len;
- if (needed_len > (int)new_start_len) {
- new_start_len = needed_len + 50;
- new_start = xrealloc(new_start, new_start_len);
+ // Need room for:
+ // - result so far in new_start (not for first sub in line)
+ // - original text up to match
+ // - length of substituted part
+ // - original text after match
+ if (nmatch == 1) {
+ p1 = sub_firstline;
+ } else {
+ p1 = ml_get(sub_firstlnum + nmatch - 1);
+ nmatch_tl += nmatch - 1;
}
- new_end = new_start + len;
- }
+ size_t copy_len = regmatch.startpos[0].col - copycol;
+ new_end = sub_grow_buf(&new_start,
+ (STRLEN(p1) - regmatch.endpos[0].col)
+ + copy_len + sublen + 1);
+
+ // copy the text up to the part that matched
+ memmove(new_end, sub_firstline + copycol, (size_t)copy_len);
+ new_end += copy_len;
+
+ (void)vim_regsub_multi(&regmatch,
+ sub_firstlnum - regmatch.startpos[0].lnum,
+ sub, new_end, true, p_magic, true);
+ sub_nsubs++;
+ did_sub = true;
- /*
- * copy the text up to the part that matched
- */
- memmove(new_end, sub_firstline + copycol, (size_t)copy_len);
- new_end += copy_len;
-
- (void)vim_regsub_multi(&regmatch,
- sub_firstlnum - regmatch.startpos[0].lnum,
- sub, new_end, TRUE, p_magic, TRUE);
- sub_nsubs++;
- did_sub = TRUE;
-
- /* Move the cursor to the start of the line, to avoid that it
- * is beyond the end of the line after the substitution. */
- curwin->w_cursor.col = 0;
-
- /* For a multi-line match, make a copy of the last matched
- * line and continue in that one. */
- if (nmatch > 1) {
- sub_firstlnum += nmatch - 1;
- xfree(sub_firstline);
- sub_firstline = vim_strsave(ml_get(sub_firstlnum));
- /* When going beyond the last line, stop substituting. */
- if (sub_firstlnum <= line2)
- do_again = TRUE;
- else
- do_all = FALSE;
- }
+ // Move the cursor to the start of the line, to avoid that it
+ // is beyond the end of the line after the substitution.
+ curwin->w_cursor.col = 0;
- /* Remember next character to be copied. */
- copycol = regmatch.endpos[0].col;
+ // For a multi-line match, make a copy of the last matched
+ // line and continue in that one.
+ if (nmatch > 1) {
+ sub_firstlnum += nmatch - 1;
+ xfree(sub_firstline);
+ sub_firstline = vim_strsave(ml_get(sub_firstlnum));
+ // When going beyond the last line, stop substituting.
+ if (sub_firstlnum <= line2) {
+ do_again = true;
+ } else {
+ subflags.do_all = false;
+ }
+ }
- if (skip_match) {
- /* Already hit end of the buffer, sub_firstlnum is one
- * less than what it ought to be. */
- xfree(sub_firstline);
- sub_firstline = vim_strsave((char_u *)"");
- copycol = 0;
- }
+ // Remember next character to be copied.
+ copycol = regmatch.endpos[0].col;
- /*
- * Now the trick is to replace CTRL-M chars with a real line
- * break. This would make it impossible to insert a CTRL-M in
- * the text. The line break can be avoided by preceding the
- * CTRL-M with a backslash. To be able to insert a backslash,
- * they must be doubled in the string and are halved here.
- * That is Vi compatible.
- */
- for (p1 = new_end; *p1; ++p1) {
- if (p1[0] == '\\' && p1[1] != NUL) /* remove backslash */
- STRMOVE(p1, p1 + 1);
- else if (*p1 == CAR) {
- if (u_inssub(lnum) == OK) { /* prepare for undo */
- *p1 = NUL; /* truncate up to the CR */
- ml_append(lnum - 1, new_start,
- (colnr_T)(p1 - new_start + 1), FALSE);
- mark_adjust(lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
- if (do_ask)
- appended_lines(lnum - 1, 1L);
- else {
- if (first_line == 0)
- first_line = lnum;
- last_line = lnum + 1;
+ if (skip_match) {
+ // Already hit end of the buffer, sub_firstlnum is one
+ // less than what it ought to be.
+ xfree(sub_firstline);
+ sub_firstline = vim_strsave((char_u *)"");
+ copycol = 0;
+ }
+
+ // Now the trick is to replace CTRL-M chars with a real line
+ // break. This would make it impossible to insert a CTRL-M in
+ // the text. The line break can be avoided by preceding the
+ // CTRL-M with a backslash. To be able to insert a backslash,
+ // they must be doubled in the string and are halved here.
+ // That is Vi compatible.
+ for (p1 = new_end; *p1; p1++) {
+ if (p1[0] == '\\' && p1[1] != NUL) { // remove backslash
+ STRMOVE(p1, p1 + 1);
+ } else if (*p1 == CAR) {
+ if (u_inssub(lnum) == OK) { // prepare for undo
+ *p1 = NUL; // truncate up to the CR
+ ml_append(lnum - 1, new_start,
+ (colnr_T)(p1 - new_start + 1), false);
+ mark_adjust(lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
+ if (subflags.do_ask) {
+ appended_lines(lnum - 1, 1L);
+ } else {
+ if (first_line == 0) {
+ first_line = lnum;
+ }
+ last_line = lnum + 1;
+ }
+ // All line numbers increase.
+ sub_firstlnum++;
+ lnum++;
+ line2++;
+ // move the cursor to the new line, like Vi
+ curwin->w_cursor.lnum++;
+ // copy the rest
+ STRMOVE(new_start, p1 + 1);
+ p1 = new_start - 1;
}
- /* All line numbers increase. */
- ++sub_firstlnum;
- ++lnum;
- ++line2;
- /* move the cursor to the new line, like Vi */
- ++curwin->w_cursor.lnum;
- /* copy the rest */
- STRMOVE(new_start, p1 + 1);
- p1 = new_start - 1;
+ } else if (has_mbyte) {
+ p1 += (*mb_ptr2len)(p1) - 1;
}
- } else if (has_mbyte)
- p1 += (*mb_ptr2len)(p1) - 1;
+ }
}
- /*
- * 4. If do_all is set, find next match.
- * Prevent endless loop with patterns that match empty
- * strings, e.g. :s/$/pat/g or :s/[a-z]* /(&)/g.
- * But ":s/\n/#/" is OK.
- */
+ // 4. If subflags.do_all is set, find next match.
+ // Prevent endless loop with patterns that match empty
+ // strings, e.g. :s/$/pat/g or :s/[a-z]* /(&)/g.
+ // But ":s/\n/#/" is OK.
skip:
/* We already know that we did the last subst when we are at
* the end of the line, except that a pattern like
@@ -3667,7 +3773,7 @@ skip:
|| got_int
|| got_quit
|| lnum > line2
- || !(do_all || do_again)
+ || !(subflags.do_all || do_again)
|| (sub_firstline[matchcol] == NUL && nmatch <= 1
&& !re_multiline(regmatch.regprog)));
nmatch = -1;
@@ -3717,21 +3823,23 @@ skip:
for (i = 0; i < nmatch_tl; ++i)
ml_delete(lnum, (int)FALSE);
mark_adjust(lnum, lnum + nmatch_tl - 1,
- (long)MAXLNUM, -nmatch_tl);
- if (do_ask)
+ (long)MAXLNUM, -nmatch_tl);
+ if (subflags.do_ask) {
deleted_lines(lnum, nmatch_tl);
- --lnum;
- line2 -= nmatch_tl; /* nr of lines decreases */
+ }
+ lnum--;
+ line2 -= nmatch_tl; // nr of lines decreases
nmatch_tl = 0;
}
/* When asking, undo is saved each time, must also set
* changed flag each time. */
- if (do_ask)
+ if (subflags.do_ask) {
changed_bytes(lnum, 0);
- else {
- if (first_line == 0)
+ } else {
+ if (first_line == 0) {
first_line = lnum;
+ }
last_line = lnum + 1;
}
@@ -3769,9 +3877,19 @@ skip:
xfree(new_start); /* for when substitute was cancelled */
xfree(sub_firstline); /* free the copy of the original line */
sub_firstline = NULL;
+
+ if (preview) {
+ matched_line.lnum = lnum;
+ matched_line.line = vim_strsave(ml_get(lnum));
+ kv_push(matched_lines, matched_line);
+ }
}
line_breakcheck();
+
+ if (profile_passed_limit(timeout)) {
+ got_quit = true;
+ }
}
if (first_line != 0) {
@@ -3784,9 +3902,10 @@ skip:
xfree(sub_firstline); /* may have to free allocated copy of the line */
- /* ":s/pat//n" doesn't move the cursor */
- if (do_count)
+ // ":s/pat//n" doesn't move the cursor
+ if (subflags.do_count) {
curwin->w_cursor = old_cursor;
+ }
if (sub_nsubs > start_nsubs) {
/* Set the '[ and '] marks. */
@@ -3795,28 +3914,37 @@ skip:
curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
if (!global_busy) {
- if (!do_ask) { /* when interactive leave cursor on the match */
- if (endcolumn)
+ // when interactive leave cursor on the match
+ if (!subflags.do_ask) {
+ if (endcolumn) {
coladvance((colnr_T)MAXCOL);
- else
+ } else {
beginline(BL_WHITE | BL_FIX);
+ }
}
- if (!do_sub_msg(do_count) && do_ask)
+ if (!preview && !do_sub_msg(subflags.do_count) && subflags.do_ask) {
MSG("");
- } else
- global_need_beginline = TRUE;
- if (do_print)
- print_line(curwin->w_cursor.lnum, do_number, do_list);
+ }
+ } else {
+ global_need_beginline = true;
+ }
+ if (subflags.do_print) {
+ print_line(curwin->w_cursor.lnum, subflags.do_number, subflags.do_list);
+ }
} else if (!global_busy) {
- if (got_int) /* interrupted */
+ if (got_int) {
+ // interrupted
EMSG(_(e_interr));
- else if (got_match) /* did find something but nothing substituted */
+ } else if (got_match) {
+ // did find something but nothing substituted
MSG("");
- else if (do_error) /* nothing found */
+ } else if (subflags.do_error) {
+ // nothing found
EMSG2(_(e_patnotf2), get_search_pat());
+ }
}
- if (do_ask && hasAnyFolding(curwin)) {
+ if (subflags.do_ask && hasAnyFolding(curwin)) {
// Cursor position may require updating
changed_window_setting();
}
@@ -3824,9 +3952,30 @@ skip:
vim_regfree(regmatch.regprog);
// Restore the flag values, they can be used for ":&&".
- do_all = save_do_all;
- do_ask = save_do_ask;
-}
+ subflags.do_all = save_do_all;
+ subflags.do_ask = save_do_ask;
+
+ // Show 'inccommand' preview if there are matched lines.
+ buf_T *preview_buf = NULL;
+ if (preview && !aborting()) {
+ if (got_quit) { // Substitution is too slow, disable 'inccommand'.
+ set_string_option_direct((char_u *)"icm", -1, (char_u *)"", OPT_FREE,
+ SID_NONE);
+ } else if (*p_icm != NUL && matched_lines.size != 0 && pat != NULL) {
+ curbuf->b_changed = save_b_changed; // preserve 'modified' during preview
+ preview_buf = show_sub(eap, old_cursor, pat, sub, &matched_lines);
+ }
+ }
+
+ for (MatchedLine m; kv_size(matched_lines);) {
+ m = kv_pop(matched_lines);
+ xfree(m.line);
+ kv_destroy(m.cols);
+ }
+ kv_destroy(matched_lines);
+
+ return preview_buf;
+} // NOLINT(readability/fn_size)
/*
* Give message for number of substitutions.
@@ -3982,69 +4131,72 @@ void ex_global(exarg_T *eap)
smsg(_("Pattern not found: %s"), pat);
}
} else {
- start_global_changes();
global_exe(cmd);
- end_global_changes();
}
ml_clearmarked(); /* clear rest of the marks */
vim_regfree(regmatch.regprog);
}
-/*
- * Execute "cmd" on lines marked with ml_setmarked().
- */
+/// Execute `cmd` on lines marked with ml_setmarked().
void global_exe(char_u *cmd)
{
- linenr_T old_lcount; /* b_ml.ml_line_count before the command */
- buf_T *old_buf = curbuf; /* remember what buffer we started in */
- linenr_T lnum; /* line number according to old situation */
-
- /*
- * Set current position only once for a global command.
- * If global_busy is set, setpcmark() will not do anything.
- * If there is an error, global_busy will be incremented.
- */
+ linenr_T old_lcount; // b_ml.ml_line_count before the command
+ buf_T *old_buf = curbuf; // remember what buffer we started in
+ linenr_T lnum; // line number according to old situation
+ int save_mapped_ctrl_c = mapped_ctrl_c;
+
+ // Set current position only once for a global command.
+ // If global_busy is set, setpcmark() will not do anything.
+ // If there is an error, global_busy will be incremented.
setpcmark();
- /* When the command writes a message, don't overwrite the command. */
- msg_didout = TRUE;
+ // When the command writes a message, don't overwrite the command.
+ msg_didout = true;
+ // Disable CTRL-C mapping, let it interrupt (potentially long output).
+ mapped_ctrl_c = 0;
sub_nsubs = 0;
sub_nlines = 0;
- global_need_beginline = FALSE;
+ global_need_beginline = false;
global_busy = 1;
old_lcount = curbuf->b_ml.ml_line_count;
+
while (!got_int && (lnum = ml_firstmarked()) != 0 && global_busy == 1) {
curwin->w_cursor.lnum = lnum;
curwin->w_cursor.col = 0;
- if (*cmd == NUL || *cmd == '\n')
+ if (*cmd == NUL || *cmd == '\n') {
do_cmdline((char_u *)"p", NULL, NULL, DOCMD_NOWAIT);
- else
+ } else {
do_cmdline(cmd, NULL, NULL, DOCMD_NOWAIT);
+ }
os_breakcheck();
}
+ mapped_ctrl_c = save_mapped_ctrl_c;
global_busy = 0;
- if (global_need_beginline)
+ if (global_need_beginline) {
beginline(BL_WHITE | BL_FIX);
- else
- check_cursor(); /* cursor may be beyond the end of the line */
+ } else {
+ check_cursor(); // cursor may be beyond the end of the line
+ }
- /* the cursor may not have moved in the text but a change in a previous
- * line may move it on the screen */
+ // the cursor may not have moved in the text but a change in a previous
+ // line may move it on the screen
changed_line_abv_curs();
- /* If it looks like no message was written, allow overwriting the
- * command with the report for number of changes. */
- if (msg_col == 0 && msg_scrolled == 0)
- msg_didout = FALSE;
+ // If it looks like no message was written, allow overwriting the
+ // command with the report for number of changes.
+ if (msg_col == 0 && msg_scrolled == 0) {
+ msg_didout = false;
+ }
- /* If substitutes done, report number of substitutes, otherwise report
- * number of extra or deleted lines.
- * Don't report extra or deleted lines in the edge case where the buffer
- * we are in after execution is different from the buffer we started in. */
- if (!do_sub_msg(false) && curbuf == old_buf)
+ // If substitutes done, report number of substitutes, otherwise report
+ // number of extra or deleted lines.
+ // Don't report extra or deleted lines in the edge case where the buffer
+ // we are in after execution is different from the buffer we started in.
+ if (!do_sub_msg(false) && curbuf == old_buf) {
msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
}
#if defined(EXITFREE)
@@ -4494,12 +4646,15 @@ int find_help_tags(char_u *arg, int *num_matches, char_u ***matches, int keep_la
break;
}
- /*
- * If tag starts with ', toss everything after a second '. Fixes
- * CTRL-] on 'option'. (would include the trailing '.').
- */
- if (*s == '\'' && s > arg && *arg == '\'')
+ // If tag starts with ', toss everything after a second '. Fixes
+ // CTRL-] on 'option'. (would include the trailing '.').
+ if (*s == '\'' && s > arg && *arg == '\'') {
+ break;
+ }
+ // Also '{' and '}'. Fixes CTRL-] on '{address}'.
+ if (*s == '}' && s > arg && *arg == '{') {
break;
+ }
}
*d = NUL;
@@ -4657,9 +4812,13 @@ void fix_help_buffer(void)
vimconv_T vc;
char_u *cp;
- /* Find all "doc/ *.txt" files in this directory. */
- add_pathsep((char *)NameBuff);
- STRCAT(NameBuff, "doc/*.??[tx]");
+ // Find all "doc/ *.txt" files in this directory.
+ if (!add_pathsep((char *)NameBuff)
+ || STRLCAT(NameBuff, "doc/*.??[tx]",
+ sizeof(NameBuff)) >= MAXPATHL) {
+ EMSG(_(e_fnametoolong));
+ continue;
+ }
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
@@ -4796,122 +4955,15 @@ void ex_viusage(exarg_T *eap)
}
-/*
- * ":helptags"
- */
-void ex_helptags(exarg_T *eap)
-{
- garray_T ga;
- int len;
- char_u lang[2];
- expand_T xpc;
- char_u *dirname;
- char_u ext[5];
- char_u fname[8];
- int filecount;
- char_u **files;
- int add_help_tags = FALSE;
-
- /* Check for ":helptags ++t {dir}". */
- if (STRNCMP(eap->arg, "++t", 3) == 0 && ascii_iswhite(eap->arg[3])) {
- add_help_tags = TRUE;
- eap->arg = skipwhite(eap->arg + 3);
- }
-
- ExpandInit(&xpc);
- xpc.xp_context = EXPAND_DIRECTORIES;
- dirname = ExpandOne(&xpc, eap->arg, NULL,
- WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
- if (dirname == NULL || !os_isdir(dirname)) {
- EMSG2(_("E150: Not a directory: %s"), eap->arg);
- xfree(dirname);
- return;
- }
-
- /* Get a list of all files in the help directory and in subdirectories. */
- STRCPY(NameBuff, dirname);
- add_pathsep((char *)NameBuff);
- STRCAT(NameBuff, "**");
-
- // Note: We cannot just do `&NameBuff` because it is a statically sized array
- // so `NameBuff == &NameBuff` according to C semantics.
- char_u *buff_list[1] = {NameBuff};
- if (gen_expand_wildcards(1, buff_list, &filecount, &files,
- EW_FILE|EW_SILENT) == FAIL
- || filecount == 0) {
- EMSG2("E151: No match: %s", NameBuff);
- xfree(dirname);
- return;
- }
-
- /* Go over all files in the directory to find out what languages are
- * present. */
- ga_init(&ga, 1, 10);
- for (int i = 0; i < filecount; ++i) {
- len = (int)STRLEN(files[i]);
- if (len <= 4) {
- continue;
- }
- if (STRICMP(files[i] + len - 4, ".txt") == 0) {
- /* ".txt" -> language "en" */
- lang[0] = 'e';
- lang[1] = 'n';
- } else if (files[i][len - 4] == '.'
- && ASCII_ISALPHA(files[i][len - 3])
- && ASCII_ISALPHA(files[i][len - 2])
- && TOLOWER_ASC(files[i][len - 1]) == 'x') {
- /* ".abx" -> language "ab" */
- lang[0] = TOLOWER_ASC(files[i][len - 3]);
- lang[1] = TOLOWER_ASC(files[i][len - 2]);
- } else
- continue;
-
- int j;
- /* Did we find this language already? */
- for (j = 0; j < ga.ga_len; j += 2)
- if (STRNCMP(lang, ((char_u *)ga.ga_data) + j, 2) == 0)
- break;
- if (j == ga.ga_len) {
- /* New language, add it. */
- ga_grow(&ga, 2);
- ((char_u *)ga.ga_data)[ga.ga_len++] = lang[0];
- ((char_u *)ga.ga_data)[ga.ga_len++] = lang[1];
- }
- }
-
- /*
- * Loop over the found languages to generate a tags file for each one.
- */
- for (int j = 0; j < ga.ga_len; j += 2) {
- STRCPY(fname, "tags-xx");
- fname[5] = ((char_u *)ga.ga_data)[j];
- fname[6] = ((char_u *)ga.ga_data)[j + 1];
- if (fname[5] == 'e' && fname[6] == 'n') {
- /* English is an exception: use ".txt" and "tags". */
- fname[4] = NUL;
- STRCPY(ext, ".txt");
- } else {
- /* Language "ab" uses ".abx" and "tags-ab". */
- STRCPY(ext, ".xxx");
- ext[1] = fname[5];
- ext[2] = fname[6];
- }
- helptags_one(dirname, ext, fname, add_help_tags);
- }
-
- ga_clear(&ga);
- FreeWild(filecount, files);
-
- xfree(dirname);
-}
-
-static void
-helptags_one (
- char_u *dir, /* doc directory */
- char_u *ext, /* suffix, ".txt", ".itx", ".frx", etc. */
- char_u *tagfname, /* "tags" for English, "tags-fr" for French. */
- int add_help_tags /* add "help-tags" tag */
-)
+/// Generate tags in one help directory
+///
+/// @param dir Path to the doc directory
+/// @param ext Suffix of the help files (".txt", ".itx", ".frx", etc.)
+/// @param tagname Name of the tags file ("tags" for English, "tags-fr" for
+/// French)
+/// @param add_help_tags Whether to add the "help-tags" tag
+static void helptags_one(char_u *dir, char_u *ext, char_u *tagfname,
+ bool add_help_tags)
{
FILE *fd_tags;
FILE *fd;
@@ -4928,10 +4980,13 @@ helptags_one (
int mix = FALSE; /* detected mixed encodings */
// Find all *.txt files.
- size_t dirlen = STRLEN(dir);
- STRCPY(NameBuff, dir);
- STRCAT(NameBuff, "/**/*");
- STRCAT(NameBuff, ext);
+ size_t dirlen = STRLCPY(NameBuff, dir, sizeof(NameBuff));
+ if (dirlen >= MAXPATHL
+ || STRLCAT(NameBuff, "/**/*", sizeof(NameBuff)) >= MAXPATHL // NOLINT
+ || STRLCAT(NameBuff, ext, sizeof(NameBuff)) >= MAXPATHL) {
+ EMSG(_(e_fnametoolong));
+ return;
+ }
// Note: We cannot just do `&NameBuff` because it is a statically sized array
// so `NameBuff == &NameBuff` according to C semantics.
@@ -4944,13 +4999,16 @@ helptags_one (
return;
}
- /*
- * Open the tags file for writing.
- * Do this before scanning through all the files.
- */
- STRCPY(NameBuff, dir);
- add_pathsep((char *)NameBuff);
- STRNCAT(NameBuff, tagfname, sizeof(NameBuff) - dirlen - 2);
+ //
+ // Open the tags file for writing.
+ // Do this before scanning through all the files.
+ //
+ memcpy(NameBuff, dir, dirlen + 1);
+ if (!add_pathsep((char *)NameBuff)
+ || STRLCAT(NameBuff, tagfname, sizeof(NameBuff)) >= MAXPATHL) {
+ EMSG(_(e_fnametoolong));
+ return;
+ }
fd_tags = mch_fopen((char *)NameBuff, "w");
if (fd_tags == NULL) {
EMSG2(_("E152: Cannot open %s for writing"), NameBuff);
@@ -5111,6 +5169,136 @@ helptags_one (
fclose(fd_tags); /* there is no check for an error... */
}
+/// Generate tags in one help directory, taking care of translations.
+static void do_helptags(char_u *dirname, bool add_help_tags)
+{
+ int len;
+ garray_T ga;
+ char_u lang[2];
+ char_u ext[5];
+ char_u fname[8];
+ int filecount;
+ char_u **files;
+
+ // Get a list of all files in the help directory and in subdirectories.
+ STRLCPY(NameBuff, dirname, sizeof(NameBuff));
+ if (!add_pathsep((char *)NameBuff)
+ || STRLCAT(NameBuff, "**", sizeof(NameBuff)) >= MAXPATHL) {
+ EMSG(_(e_fnametoolong));
+ xfree(dirname);
+ return;
+ }
+
+ // Note: We cannot just do `&NameBuff` because it is a statically sized array
+ // so `NameBuff == &NameBuff` according to C semantics.
+ char_u *buff_list[1] = {NameBuff};
+ if (gen_expand_wildcards(1, buff_list, &filecount, &files,
+ EW_FILE|EW_SILENT) == FAIL
+ || filecount == 0) {
+ EMSG2("E151: No match: %s", NameBuff);
+ xfree(dirname);
+ return;
+ }
+
+ /* Go over all files in the directory to find out what languages are
+ * present. */
+ int j;
+ ga_init(&ga, 1, 10);
+ for (int i = 0; i < filecount; i++) {
+ len = (int)STRLEN(files[i]);
+ if (len <= 4) {
+ continue;
+ }
+ if (STRICMP(files[i] + len - 4, ".txt") == 0) {
+ /* ".txt" -> language "en" */
+ lang[0] = 'e';
+ lang[1] = 'n';
+ } else if (files[i][len - 4] == '.'
+ && ASCII_ISALPHA(files[i][len - 3])
+ && ASCII_ISALPHA(files[i][len - 2])
+ && TOLOWER_ASC(files[i][len - 1]) == 'x') {
+ /* ".abx" -> language "ab" */
+ lang[0] = TOLOWER_ASC(files[i][len - 3]);
+ lang[1] = TOLOWER_ASC(files[i][len - 2]);
+ } else
+ continue;
+
+ // Did we find this language already?
+ for (j = 0; j < ga.ga_len; j += 2) {
+ if (STRNCMP(lang, ((char_u *)ga.ga_data) + j, 2) == 0) {
+ break;
+ }
+ }
+ if (j == ga.ga_len) {
+ // New language, add it.
+ ga_grow(&ga, 2);
+ ((char_u *)ga.ga_data)[ga.ga_len++] = lang[0];
+ ((char_u *)ga.ga_data)[ga.ga_len++] = lang[1];
+ }
+ }
+
+ /*
+ * Loop over the found languages to generate a tags file for each one.
+ */
+ for (j = 0; j < ga.ga_len; j += 2) {
+ STRCPY(fname, "tags-xx");
+ fname[5] = ((char_u *)ga.ga_data)[j];
+ fname[6] = ((char_u *)ga.ga_data)[j + 1];
+ if (fname[5] == 'e' && fname[6] == 'n') {
+ /* English is an exception: use ".txt" and "tags". */
+ fname[4] = NUL;
+ STRCPY(ext, ".txt");
+ } else {
+ /* Language "ab" uses ".abx" and "tags-ab". */
+ STRCPY(ext, ".xxx");
+ ext[1] = fname[5];
+ ext[2] = fname[6];
+ }
+ helptags_one(dirname, ext, fname, add_help_tags);
+ }
+
+ ga_clear(&ga);
+ FreeWild(filecount, files);
+}
+
+ static void
+helptags_cb(char_u *fname, void *cookie)
+{
+ do_helptags(fname, *(bool *)cookie);
+}
+
+/*
+ * ":helptags"
+ */
+void ex_helptags(exarg_T *eap)
+{
+ expand_T xpc;
+ char_u *dirname;
+ bool add_help_tags = false;
+
+ /* Check for ":helptags ++t {dir}". */
+ if (STRNCMP(eap->arg, "++t", 3) == 0 && ascii_iswhite(eap->arg[3])) {
+ add_help_tags = true;
+ eap->arg = skipwhite(eap->arg + 3);
+ }
+
+ if (STRCMP(eap->arg, "ALL") == 0) {
+ do_in_path(p_rtp, (char_u *)"doc", DIP_ALL + DIP_DIR,
+ helptags_cb, &add_help_tags);
+ } else {
+ ExpandInit(&xpc);
+ xpc.xp_context = EXPAND_DIRECTORIES;
+ dirname = ExpandOne(&xpc, eap->arg, NULL,
+ WILD_LIST_NOTFOUND|WILD_SILENT, WILD_EXPAND_FREE);
+ if (dirname == NULL || !os_isdir(dirname)) {
+ EMSG2(_("E150: Not a directory: %s"), eap->arg);
+ } else {
+ do_helptags(dirname, add_help_tags);
+ }
+ xfree(dirname);
+ }
+}
+
struct sign
{
sign_T *sn_next; /* next sign in list */
@@ -5182,385 +5370,330 @@ static int sign_cmd_idx(
*/
void ex_sign(exarg_T *eap)
{
- char_u *arg = eap->arg;
- char_u *p;
- int idx;
- sign_T *sp;
- sign_T *sp_prev;
-
- /* Parse the subcommand. */
- p = skiptowhite(arg);
- idx = sign_cmd_idx(arg, p);
- if (idx == SIGNCMD_LAST)
- {
- EMSG2(_("E160: Unknown sign command: %s"), arg);
- return;
+ char_u *arg = eap->arg;
+ char_u *p;
+ int idx;
+ sign_T *sp;
+ sign_T *sp_prev;
+
+ // Parse the subcommand.
+ p = skiptowhite(arg);
+ idx = sign_cmd_idx(arg, p);
+ if (idx == SIGNCMD_LAST) {
+ EMSG2(_("E160: Unknown sign command: %s"), arg);
+ return;
+ }
+ arg = skipwhite(p);
+
+ if (idx <= SIGNCMD_LIST) {
+ // Define, undefine or list signs.
+ if (idx == SIGNCMD_LIST && *arg == NUL) {
+ // ":sign list": list all defined signs
+ for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next) {
+ sign_list_defined(sp);
+ }
+ } else if (*arg == NUL) {
+ EMSG(_("E156: Missing sign name"));
+ } else {
+ // Isolate the sign name. If it's a number skip leading zeroes,
+ // so that "099" and "99" are the same sign. But keep "0".
+ p = skiptowhite(arg);
+ if (*p != NUL) {
+ *p++ = NUL;
+ }
+ while (arg[0] == '0' && arg[1] != NUL) {
+ arg++;
+ }
+
+ sp_prev = NULL;
+ for (sp = first_sign; sp != NULL; sp = sp->sn_next) {
+ if (STRCMP(sp->sn_name, arg) == 0) {
+ break;
+ }
+ sp_prev = sp;
+ }
+ if (idx == SIGNCMD_DEFINE) {
+ // ":sign define {name} ...": define a sign
+ if (sp == NULL) {
+ sign_T *lp;
+ int start = next_sign_typenr;
+
+ // Allocate a new sign.
+ sp = xcalloc(1, sizeof(sign_T));
+
+ // Check that next_sign_typenr is not already being used.
+ // This only happens after wrapping around. Hopefully
+ // another one got deleted and we can use its number.
+ for (lp = first_sign; lp != NULL; ) {
+ if (lp->sn_typenr == next_sign_typenr) {
+ next_sign_typenr++;
+ if (next_sign_typenr == MAX_TYPENR) {
+ next_sign_typenr = 1;
+ }
+ if (next_sign_typenr == start) {
+ xfree(sp);
+ EMSG(_("E612: Too many signs defined"));
+ return;
+ }
+ lp = first_sign; // start all over
+ continue;
+ }
+ lp = lp->sn_next;
+ }
+
+ sp->sn_typenr = next_sign_typenr;
+ if (++next_sign_typenr == MAX_TYPENR) {
+ next_sign_typenr = 1; // wrap around
+ }
+
+ sp->sn_name = vim_strsave(arg);
+
+ // add the new sign to the list of signs
+ if (sp_prev == NULL) {
+ first_sign = sp;
+ } else {
+ sp_prev->sn_next = sp;
+ }
+ }
+
+ // set values for a defined sign.
+ for (;;) {
+ arg = skipwhite(p);
+ if (*arg == NUL) {
+ break;
+ }
+ p = skiptowhite_esc(arg);
+ if (STRNCMP(arg, "icon=", 5) == 0) {
+ arg += 5;
+ xfree(sp->sn_icon);
+ sp->sn_icon = vim_strnsave(arg, (int)(p - arg));
+ backslash_halve(sp->sn_icon);
+ } else if (STRNCMP(arg, "text=", 5) == 0) {
+ char_u *s;
+ int cells;
+ int len;
+
+ arg += 5;
+
+ // Count cells and check for non-printable chars
+ cells = 0;
+ for (s = arg; s < p; s += (*mb_ptr2len)(s)) {
+ if (!vim_isprintc((*mb_ptr2char)(s))) {
+ break;
+ }
+ cells += (*mb_ptr2cells)(s);
+ }
+ // Currently must be one or two display cells
+ if (s != p || cells < 1 || cells > 2) {
+ *p = NUL;
+ EMSG2(_("E239: Invalid sign text: %s"), arg);
+ return;
+ }
+
+ xfree(sp->sn_text);
+ // Allocate one byte more if we need to pad up
+ // with a space.
+ len = (int)(p - arg + ((cells == 1) ? 1 : 0));
+ sp->sn_text = vim_strnsave(arg, len);
+
+ if (cells == 1) {
+ STRCPY(sp->sn_text + len - 1, " ");
+ }
+ } else if (STRNCMP(arg, "linehl=", 7) == 0) {
+ arg += 7;
+ sp->sn_line_hl = syn_check_group(arg, (int)(p - arg));
+ } else if (STRNCMP(arg, "texthl=", 7) == 0) {
+ arg += 7;
+ sp->sn_text_hl = syn_check_group(arg, (int)(p - arg));
+ } else {
+ EMSG2(_(e_invarg2), arg);
+ return;
+ }
+ }
+ } else if (sp == NULL) {
+ EMSG2(_("E155: Unknown sign: %s"), arg);
+ } else if (idx == SIGNCMD_LIST) {
+ // ":sign list {name}"
+ sign_list_defined(sp);
+ } else {
+ // ":sign undefine {name}"
+ sign_undefine(sp, sp_prev);
+ }
+ }
+ } else {
+ int id = -1;
+ linenr_T lnum = -1;
+ char_u *sign_name = NULL;
+ char_u *arg1;
+
+ if (*arg == NUL) {
+ if (idx == SIGNCMD_PLACE) {
+ // ":sign place": list placed signs in all buffers
+ sign_list_placed(NULL);
+ } else if (idx == SIGNCMD_UNPLACE) {
+ // ":sign unplace": remove placed sign at cursor
+ id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum);
+ if (id > 0) {
+ buf_delsign(curwin->w_buffer, id);
+ update_debug_sign(curwin->w_buffer, curwin->w_cursor.lnum);
+ } else {
+ EMSG(_("E159: Missing sign number"));
+ }
+ } else {
+ EMSG(_(e_argreq));
+ }
+ return;
}
- arg = skipwhite(p);
- if (idx <= SIGNCMD_LIST)
- {
- /*
- * Define, undefine or list signs.
- */
- if (idx == SIGNCMD_LIST && *arg == NUL)
- {
- /* ":sign list": list all defined signs */
- for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
- sign_list_defined(sp);
- }
- else if (*arg == NUL)
- EMSG(_("E156: Missing sign name"));
- else
- {
- /* Isolate the sign name. If it's a number skip leading zeroes,
- * so that "099" and "99" are the same sign. But keep "0". */
- p = skiptowhite(arg);
- if (*p != NUL)
- *p++ = NUL;
- while (arg[0] == '0' && arg[1] != NUL)
- ++arg;
-
- sp_prev = NULL;
- for (sp = first_sign; sp != NULL; sp = sp->sn_next)
- {
- if (STRCMP(sp->sn_name, arg) == 0)
- break;
- sp_prev = sp;
- }
- if (idx == SIGNCMD_DEFINE)
- {
- /* ":sign define {name} ...": define a sign */
- if (sp == NULL)
- {
- sign_T *lp;
- int start = next_sign_typenr;
-
- /* Allocate a new sign. */
- sp = xcalloc(1, sizeof(sign_T));
-
- /* Check that next_sign_typenr is not already being used.
- * This only happens after wrapping around. Hopefully
- * another one got deleted and we can use its number. */
- for (lp = first_sign; lp != NULL; )
- {
- if (lp->sn_typenr == next_sign_typenr)
- {
- ++next_sign_typenr;
- if (next_sign_typenr == MAX_TYPENR)
- next_sign_typenr = 1;
- if (next_sign_typenr == start)
- {
- xfree(sp);
- EMSG(_("E612: Too many signs defined"));
- return;
- }
- lp = first_sign; /* start all over */
- continue;
- }
- lp = lp->sn_next;
- }
-
- sp->sn_typenr = next_sign_typenr;
- if (++next_sign_typenr == MAX_TYPENR)
- next_sign_typenr = 1; /* wrap around */
-
- sp->sn_name = vim_strsave(arg);
-
- /* add the new sign to the list of signs */
- if (sp_prev == NULL)
- first_sign = sp;
- else
- sp_prev->sn_next = sp;
- }
-
- /* set values for a defined sign. */
- for (;;)
- {
- arg = skipwhite(p);
- if (*arg == NUL)
- break;
- p = skiptowhite_esc(arg);
- if (STRNCMP(arg, "icon=", 5) == 0)
- {
- arg += 5;
- xfree(sp->sn_icon);
- sp->sn_icon = vim_strnsave(arg, (int)(p - arg));
- backslash_halve(sp->sn_icon);
- }
- else if (STRNCMP(arg, "text=", 5) == 0)
- {
- char_u *s;
- int cells;
- int len;
-
- arg += 5;
-
- /* Count cells and check for non-printable chars */
- if (has_mbyte)
- {
- cells = 0;
- for (s = arg; s < p; s += (*mb_ptr2len)(s))
- {
- if (!vim_isprintc((*mb_ptr2char)(s)))
- break;
- cells += (*mb_ptr2cells)(s);
- }
- }
- else
-
- {
- for (s = arg; s < p; ++s)
- if (!vim_isprintc(*s))
- break;
- cells = (int)(s - arg);
- }
- /* Currently must be one or two display cells */
- if (s != p || cells < 1 || cells > 2)
- {
- *p = NUL;
- EMSG2(_("E239: Invalid sign text: %s"), arg);
- return;
- }
-
- xfree(sp->sn_text);
- /* Allocate one byte more if we need to pad up
- * with a space. */
- len = (int)(p - arg + ((cells == 1) ? 1 : 0));
- sp->sn_text = vim_strnsave(arg, len);
-
- if (cells == 1)
- STRCPY(sp->sn_text + len - 1, " ");
- }
- else if (STRNCMP(arg, "linehl=", 7) == 0)
- {
- arg += 7;
- sp->sn_line_hl = syn_check_group(arg, (int)(p - arg));
- }
- else if (STRNCMP(arg, "texthl=", 7) == 0)
- {
- arg += 7;
- sp->sn_text_hl = syn_check_group(arg, (int)(p - arg));
- }
- else
- {
- EMSG2(_(e_invarg2), arg);
- return;
- }
- }
- }
- else if (sp == NULL)
- EMSG2(_("E155: Unknown sign: %s"), arg);
- else if (idx == SIGNCMD_LIST)
- /* ":sign list {name}" */
- sign_list_defined(sp);
- else
- /* ":sign undefine {name}" */
- sign_undefine(sp, sp_prev);
- }
+ if (idx == SIGNCMD_UNPLACE && arg[0] == '*' && arg[1] == NUL) {
+ // ":sign unplace *": remove all placed signs
+ buf_delete_all_signs();
+ return;
}
- else
- {
- int id = -1;
- linenr_T lnum = -1;
- char_u *sign_name = NULL;
- char_u *arg1;
-
- if (*arg == NUL)
- {
- if (idx == SIGNCMD_PLACE)
- {
- /* ":sign place": list placed signs in all buffers */
- sign_list_placed(NULL);
- }
- else if (idx == SIGNCMD_UNPLACE)
- {
- /* ":sign unplace": remove placed sign at cursor */
- id = buf_findsign_id(curwin->w_buffer, curwin->w_cursor.lnum);
- if (id > 0)
- {
- buf_delsign(curwin->w_buffer, id);
- update_debug_sign(curwin->w_buffer, curwin->w_cursor.lnum);
- }
- else
- EMSG(_("E159: Missing sign number"));
- }
- else
- EMSG(_(e_argreq));
- return;
- }
-
- if (idx == SIGNCMD_UNPLACE && arg[0] == '*' && arg[1] == NUL)
- {
- /* ":sign unplace *": remove all placed signs */
- buf_delete_all_signs();
- return;
- }
-
- /* first arg could be placed sign id */
- arg1 = arg;
- if (ascii_isdigit(*arg))
- {
- id = getdigits_int(&arg);
- if (!ascii_iswhite(*arg) && *arg != NUL)
- {
- id = -1;
- arg = arg1;
- }
- else
- {
- arg = skipwhite(arg);
- if (idx == SIGNCMD_UNPLACE && *arg == NUL)
- {
- // ":sign unplace {id}": remove placed sign by number
- FOR_ALL_BUFFERS(buf) {
- if ((lnum = buf_delsign(buf, id)) != 0) {
- update_debug_sign(buf, lnum);
- }
- }
- return;
- }
- }
- }
-
- /*
- * Check for line={lnum} name={name} and file={fname} or buffer={nr}.
- * Leave "arg" pointing to {fname}.
- */
-
- buf_T *buf = NULL;
- for (;;)
- {
- if (STRNCMP(arg, "line=", 5) == 0)
- {
- arg += 5;
- lnum = atoi((char *)arg);
- arg = skiptowhite(arg);
- }
- else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
- {
- if (id != -1)
- {
- EMSG(_(e_invarg));
- return;
- }
- id = -2;
- arg = skiptowhite(arg + 1);
- }
- else if (STRNCMP(arg, "name=", 5) == 0)
- {
- arg += 5;
- sign_name = arg;
- arg = skiptowhite(arg);
- if (*arg != NUL)
- *arg++ = NUL;
- while (sign_name[0] == '0' && sign_name[1] != NUL)
- ++sign_name;
- }
- else if (STRNCMP(arg, "file=", 5) == 0)
- {
- arg += 5;
- buf = buflist_findname(arg);
- break;
- }
- else if (STRNCMP(arg, "buffer=", 7) == 0)
- {
- arg += 7;
- buf = buflist_findnr(getdigits_int(&arg));
- if (*skipwhite(arg) != NUL)
- EMSG(_(e_trailing));
- break;
- }
- else
- {
- EMSG(_(e_invarg));
- return;
- }
- arg = skipwhite(arg);
- }
-
- if (buf == NULL)
- {
- EMSG2(_("E158: Invalid buffer name: %s"), arg);
- }
- else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
- {
- if (lnum >= 0 || sign_name != NULL)
- EMSG(_(e_invarg));
- else
- /* ":sign place file={fname}": list placed signs in one file */
- sign_list_placed(buf);
- }
- else if (idx == SIGNCMD_JUMP)
- {
- /* ":sign jump {id} file={fname}" */
- if (lnum >= 0 || sign_name != NULL)
- EMSG(_(e_invarg));
- else if ((lnum = buf_findsign(buf, id)) > 0)
- { /* goto a sign ... */
- if (buf_jump_open_win(buf) != NULL)
- { /* ... in a current window */
- curwin->w_cursor.lnum = lnum;
- check_cursor_lnum();
- beginline(BL_WHITE);
- }
- else
- { // ... not currently in a window
- char *cmd = xmalloc(STRLEN(buf->b_fname) + 25);
- sprintf(cmd, "e +%" PRId64 " %s",
- (int64_t)lnum, buf->b_fname);
- do_cmdline_cmd(cmd);
- xfree(cmd);
- }
-
- foldOpenCursor();
- }
- else
- EMSGN(_("E157: Invalid sign ID: %" PRId64), id);
- }
- else if (idx == SIGNCMD_UNPLACE)
- {
- if (lnum >= 0 || sign_name != NULL)
- EMSG(_(e_invarg));
- else if (id == -2)
- {
- /* ":sign unplace * file={fname}" */
- redraw_buf_later(buf, NOT_VALID);
- buf_delete_signs(buf);
- }
- else
- {
- /* ":sign unplace {id} file={fname}" */
- lnum = buf_delsign(buf, id);
- update_debug_sign(buf, lnum);
- }
- }
- /* idx == SIGNCMD_PLACE */
- else if (sign_name != NULL)
- {
- for (sp = first_sign; sp != NULL; sp = sp->sn_next)
- if (STRCMP(sp->sn_name, sign_name) == 0)
- break;
- if (sp == NULL)
- {
- EMSG2(_("E155: Unknown sign: %s"), sign_name);
- return;
- }
- if (lnum > 0)
- /* ":sign place {id} line={lnum} name={name} file={fname}":
- * place a sign */
- buf_addsign(buf, id, lnum, sp->sn_typenr);
- else
- /* ":sign place {id} file={fname}": change sign type */
- lnum = buf_change_sign_type(buf, id, sp->sn_typenr);
- if (lnum > 0)
- update_debug_sign(buf, lnum);
- else
- EMSG2(_("E885: Not possible to change sign %s"), sign_name);
- }
- else
- EMSG(_(e_invarg));
+
+ // first arg could be placed sign id
+ arg1 = arg;
+ if (ascii_isdigit(*arg)) {
+ id = getdigits_int(&arg);
+ if (!ascii_iswhite(*arg) && *arg != NUL) {
+ id = -1;
+ arg = arg1;
+ } else {
+ arg = skipwhite(arg);
+ if (idx == SIGNCMD_UNPLACE && *arg == NUL) {
+ // ":sign unplace {id}": remove placed sign by number
+ FOR_ALL_BUFFERS(buf) {
+ if ((lnum = buf_delsign(buf, id)) != 0) {
+ update_debug_sign(buf, lnum);
+ }
+ }
+ return;
+ }
+ }
+ }
+
+ // Check for line={lnum} name={name} and file={fname} or buffer={nr}.
+ // Leave "arg" pointing to {fname}.
+
+ buf_T *buf = NULL;
+ for (;;) {
+ if (STRNCMP(arg, "line=", 5) == 0) {
+ arg += 5;
+ lnum = atoi((char *)arg);
+ arg = skiptowhite(arg);
+ } else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE) {
+ if (id != -1) {
+ EMSG(_(e_invarg));
+ return;
+ }
+ id = -2;
+ arg = skiptowhite(arg + 1);
+ } else if (STRNCMP(arg, "name=", 5) == 0) {
+ arg += 5;
+ sign_name = arg;
+ arg = skiptowhite(arg);
+ if (*arg != NUL) {
+ *arg++ = NUL;
+ }
+ while (sign_name[0] == '0' && sign_name[1] != NUL) {
+ sign_name++;
+ }
+ } else if (STRNCMP(arg, "file=", 5) == 0) {
+ arg += 5;
+ buf = buflist_findname(arg);
+ break;
+ } else if (STRNCMP(arg, "buffer=", 7) == 0) {
+ arg += 7;
+ buf = buflist_findnr(getdigits_int(&arg));
+ if (*skipwhite(arg) != NUL) {
+ EMSG(_(e_trailing));
+ }
+ break;
+ } else {
+ EMSG(_(e_invarg));
+ return;
+ }
+ arg = skipwhite(arg);
+ }
+
+ if (buf == NULL) {
+ EMSG2(_("E158: Invalid buffer name: %s"), arg);
+ } else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2)) {
+ if (lnum >= 0 || sign_name != NULL) {
+ EMSG(_(e_invarg));
+ } else {
+ // ":sign place file={fname}": list placed signs in one file
+ sign_list_placed(buf);
+ }
+ } else if (idx == SIGNCMD_JUMP) {
+ // ":sign jump {id} file={fname}"
+ if (lnum >= 0 || sign_name != NULL) {
+ EMSG(_(e_invarg));
+ } else if ((lnum = buf_findsign(buf, id)) > 0) {
+ // goto a sign ...
+ if (buf_jump_open_win(buf) != NULL) {
+ // ... in a current window
+ curwin->w_cursor.lnum = lnum;
+ check_cursor_lnum();
+ beginline(BL_WHITE);
+ } else {
+ // ... not currently in a window
+ if (buf->b_fname == NULL) {
+ EMSG(_("E934: Cannot jump to a buffer that does not have a name"));
+ return;
+ }
+ size_t cmdlen = STRLEN(buf->b_fname) + 24;
+ char *cmd = xmallocz(cmdlen);
+ snprintf(cmd, cmdlen, "e +%" PRId64 " %s",
+ (int64_t)lnum, buf->b_fname);
+ do_cmdline_cmd(cmd);
+ xfree(cmd);
+ }
+
+ foldOpenCursor();
+ } else {
+ EMSGN(_("E157: Invalid sign ID: %" PRId64), id);
+ }
+ } else if (idx == SIGNCMD_UNPLACE) {
+ if (lnum >= 0 || sign_name != NULL) {
+ EMSG(_(e_invarg));
+ } else if (id == -2) {
+ // ":sign unplace * file={fname}"
+ redraw_buf_later(buf, NOT_VALID);
+ buf_delete_signs(buf);
+ } else {
+ // ":sign unplace {id} file={fname}"
+ lnum = buf_delsign(buf, id);
+ update_debug_sign(buf, lnum);
+ }
+ } else if (sign_name != NULL) {
+ // idx == SIGNCMD_PLACE
+ for (sp = first_sign; sp != NULL; sp = sp->sn_next) {
+ if (STRCMP(sp->sn_name, sign_name) == 0) {
+ break;
+ }
+ }
+ if (sp == NULL) {
+ EMSG2(_("E155: Unknown sign: %s"), sign_name);
+ return;
+ }
+ if (lnum > 0) {
+ // ":sign place {id} line={lnum} name={name} file={fname}":
+ // place a sign
+ buf_addsign(buf, id, lnum, sp->sn_typenr);
+ } else {
+ // ":sign place {id} file={fname}": change sign type
+ lnum = buf_change_sign_type(buf, id, sp->sn_typenr);
+ }
+ if (lnum > 0) {
+ update_debug_sign(buf, lnum);
+ } else {
+ EMSG2(_("E885: Not possible to change sign %s"), sign_name);
+ }
+ } else {
+ EMSG(_(e_invarg));
}
+ }
}
/*
@@ -5683,50 +5816,39 @@ static enum
EXP_SIGN_NAMES /* expand with name of placed signs */
} expand_what;
-/*
- * Function given to ExpandGeneric() to obtain the sign command
- * expansion.
- */
+/// Function given to ExpandGeneric() to obtain the sign command
+/// expansion.
char_u * get_sign_name(expand_T *xp, int idx)
{
- sign_T *sp;
- int current_idx;
-
- switch (expand_what)
- {
+ switch (expand_what)
+ {
case EXP_SUBCMD:
- return (char_u *)cmds[idx];
- case EXP_DEFINE:
- {
- char *define_arg[] =
- {
- "icon=", "linehl=", "text=", "texthl=", NULL
- };
- return (char_u *)define_arg[idx];
- }
- case EXP_PLACE:
- {
- char *place_arg[] =
- {
- "line=", "name=", "file=", "buffer=", NULL
- };
- return (char_u *)place_arg[idx];
- }
- case EXP_UNPLACE:
- {
- char *unplace_arg[] = { "file=", "buffer=", NULL };
- return (char_u *)unplace_arg[idx];
- }
- case EXP_SIGN_NAMES:
- /* Complete with name of signs already defined */
- current_idx = 0;
- for (sp = first_sign; sp != NULL; sp = sp->sn_next)
- if (current_idx++ == idx)
- return sp->sn_name;
- return NULL;
+ return (char_u *)cmds[idx];
+ case EXP_DEFINE: {
+ char *define_arg[] = { "icon=", "linehl=", "text=", "texthl=", NULL };
+ return (char_u *)define_arg[idx];
+ }
+ case EXP_PLACE: {
+ char *place_arg[] = { "line=", "name=", "file=", "buffer=", NULL };
+ return (char_u *)place_arg[idx];
+ }
+ case EXP_UNPLACE: {
+ char *unplace_arg[] = { "file=", "buffer=", NULL };
+ return (char_u *)unplace_arg[idx];
+ }
+ case EXP_SIGN_NAMES: {
+ // Complete with name of signs already defined
+ int current_idx = 0;
+ for (sign_T *sp = first_sign; sp != NULL; sp = sp->sn_next) {
+ if (current_idx++ == idx) {
+ return sp->sn_name;
+ }
+ }
+ }
+ return NULL;
default:
- return NULL;
- }
+ return NULL;
+ }
}
/*
@@ -5846,3 +5968,169 @@ void set_context_in_sign_cmd(expand_T *xp, char_u *arg)
}
}
}
+
+/// Shows the effects of the :substitute command being typed ('inccommand').
+/// If inccommand=split, shows a preview window and later restores the layout.
+static buf_T *show_sub(exarg_T *eap, pos_T old_cusr, char_u *pat, char_u *sub,
+ MatchedLineVec *matched_lines)
+ FUNC_ATTR_NONNULL_ALL
+{
+ static handle_T bufnr = 0; // special buffer, re-used on each visit
+
+ win_T *save_curwin = curwin;
+ cmdmod_T save_cmdmod = cmdmod;
+ char_u *save_shm_p = vim_strsave(p_shm);
+ size_t sub_size = mb_string2cells(sub);
+ size_t pat_size = mb_string2cells(pat);
+
+ // We keep a special-purpose buffer around, but don't assume it exists.
+ buf_T *preview_buf = bufnr ? buflist_findnr(bufnr) : 0;
+ cmdmod.tab = 0; // disable :tab modifier
+ cmdmod.noswapfile = true; // disable swap for preview buffer
+ // disable file info message
+ set_string_option_direct((char_u *)"shm", -1, (char_u *)"F", OPT_FREE,
+ SID_NONE);
+
+ bool outside_curline = (eap->line1 != old_cusr.lnum
+ || eap->line2 != old_cusr.lnum);
+ bool split = outside_curline && (*p_icm != 'n') && (sub_size || pat_size);
+ if (preview_buf == curbuf) { // Preview buffer cannot preview itself!
+ split = false;
+ preview_buf = NULL;
+ }
+
+ // Place cursor on nearest matching line, to undo do_sub() cursor placement.
+ for (size_t i = 0; i < matched_lines->size; i++) {
+ MatchedLine curmatch = matched_lines->items[i];
+ if (curmatch.lnum >= old_cusr.lnum) {
+ curwin->w_cursor.lnum = curmatch.lnum;
+ curwin->w_cursor.col = curmatch.cols.items[0];
+ break;
+ } // Else: All matches are above, do_sub() already placed cursor.
+ }
+
+ if (split && win_split((int)p_cwh, WSP_BOT) != FAIL) {
+ buf_open_scratch(preview_buf ? bufnr : 0, "[Preview]");
+ buf_clear();
+ preview_buf = curbuf;
+ bufnr = preview_buf->handle;
+ curbuf->b_p_bl = false;
+ curbuf->b_p_ma = true;
+ curbuf->b_p_ul = -1;
+ curbuf->b_p_tw = 0; // Reset 'textwidth' (was set by ftplugin)
+ curwin->w_p_cul = false;
+ curwin->w_p_cuc = false;
+ curwin->w_p_spell = false;
+ curwin->w_p_fen = false;
+
+ // Width of the "| lnum|..." column which displays the line numbers.
+ linenr_T highest_num_line = kv_last(*matched_lines).lnum;
+ int col_width = log10(highest_num_line) + 1 + 3;
+
+ char *str = NULL;
+ size_t old_line_size = 0;
+ size_t line_size;
+ int src_id_highlight = 0;
+ int hl_id = syn_check_group((char_u *)"Substitute", 13);
+
+ // Dump the lines into the preview buffer.
+ for (size_t line = 0; line < matched_lines->size; line++) {
+ MatchedLine mat = matched_lines->items[line];
+ line_size = mb_string2cells(mat.line) + col_width + 1;
+
+ // Reallocate if str not long enough
+ if (line_size > old_line_size) {
+ str = xrealloc(str, line_size * sizeof(char));
+ old_line_size = line_size;
+ }
+
+ // Put "|lnum| line" into `str` and append it to the preview buffer.
+ snprintf(str, line_size, "|%*ld| %s", col_width - 3, mat.lnum, mat.line);
+ ml_append(line, (char_u *)str, (colnr_T)line_size, false);
+
+ // highlight the replaced part
+ if (sub_size > 0) {
+ for (size_t i = 0; i < mat.cols.size; i++) {
+ colnr_T col_start = mat.cols.items[i] + col_width
+ + i * (sub_size - pat_size) + 1;
+ colnr_T col_end = col_start - 1 + sub_size;
+ src_id_highlight = bufhl_add_hl(curbuf, src_id_highlight, hl_id,
+ line + 1, col_start, col_end);
+ }
+ }
+ }
+ xfree(str);
+ }
+
+ redraw_later(SOME_VALID);
+ win_enter(save_curwin, false); // Return to original window
+ update_topline();
+
+ // Update screen now. Must do this _before_ close_windows().
+ int save_rd = RedrawingDisabled;
+ RedrawingDisabled = 0;
+ update_screen(SOME_VALID);
+ RedrawingDisabled = save_rd;
+
+ set_string_option_direct((char_u *)"shm", -1, save_shm_p, OPT_FREE, SID_NONE);
+ xfree(save_shm_p);
+
+ cmdmod = save_cmdmod;
+
+ return preview_buf;
+}
+
+/// :substitute command
+///
+/// If 'inccommand' is empty: calls do_sub().
+/// If 'inccommand' is set: shows a "live" preview then removes the changes.
+/// from undo history.
+void ex_substitute(exarg_T *eap)
+{
+ bool preview = (State & CMDPREVIEW);
+ if (*p_icm == NUL || !preview) { // 'inccommand' is disabled
+ (void)do_sub(eap, profile_zero());
+ return;
+ }
+
+ block_autocmds(); // Disable events during command preview.
+
+ char_u *save_eap = eap->arg;
+ garray_T save_view;
+ win_size_save(&save_view); // Save current window sizes.
+ save_search_patterns();
+ int save_changedtick = curbuf->b_changedtick;
+ time_t save_b_u_time_cur = curbuf->b_u_time_cur;
+ u_header_T *save_b_u_newhead = curbuf->b_u_newhead;
+ long save_b_p_ul = curbuf->b_p_ul;
+ int save_w_p_cul = curwin->w_p_cul;
+ int save_w_p_cuc = curwin->w_p_cuc;
+
+ curbuf->b_p_ul = LONG_MAX; // make sure we can undo all changes
+ curwin->w_p_cul = false; // Disable 'cursorline'
+ curwin->w_p_cuc = false; // Disable 'cursorcolumn'
+
+ buf_T *preview_buf = do_sub(eap, profile_setlimit(p_rdt));
+
+ if (save_changedtick != curbuf->b_changedtick) {
+ // Undo invisibly. This also moves the cursor!
+ if (!u_undo_and_forget(1)) { abort(); }
+ // Restore newhead. It is meaningless when curhead is valid, but we must
+ // restore it so that undotree() is identical before/after the preview.
+ curbuf->b_u_newhead = save_b_u_newhead;
+ curbuf->b_u_time_cur = save_b_u_time_cur;
+ curbuf->b_changedtick = save_changedtick;
+ }
+ if (buf_valid(preview_buf)) {
+ // XXX: Must do this *after* u_undo_and_forget(), why?
+ close_windows(preview_buf, false);
+ }
+ curbuf->b_p_ul = save_b_p_ul;
+ curwin->w_p_cul = save_w_p_cul; // Restore 'cursorline'
+ curwin->w_p_cuc = save_w_p_cuc; // Restore 'cursorcolumn'
+ eap->arg = save_eap;
+ restore_search_patterns();
+ win_size_restore(&save_view);
+ ga_clear(&save_view);
+ unblock_autocmds();
+}
diff --git a/src/nvim/ex_cmds.h b/src/nvim/ex_cmds.h
index 721145efd8..243b11255e 100644
--- a/src/nvim/ex_cmds.h
+++ b/src/nvim/ex_cmds.h
@@ -5,14 +5,16 @@
#include "nvim/os/time.h"
#include "nvim/eval_defs.h"
+#include "nvim/pos.h"
+
+// flags for do_ecmd()
+#define ECMD_HIDE 0x01 // don't free the current buffer
+#define ECMD_SET_HELP 0x02 // set b_help flag of (new) buffer before
+ // opening file
+#define ECMD_OLDBUF 0x04 // use existing buffer if it exists
+#define ECMD_FORCEIT 0x08 // ! used in Ex command
+#define ECMD_ADDBUF 0x10 // don't edit, just add to buffer list
-/* flags for do_ecmd() */
-#define ECMD_HIDE 0x01 /* don't free the current buffer */
-#define ECMD_SET_HELP 0x02 /* set b_help flag of (new) buffer before
- opening file */
-#define ECMD_OLDBUF 0x04 /* use existing buffer if it exists */
-#define ECMD_FORCEIT 0x08 /* ! used in Ex command */
-#define ECMD_ADDBUF 0x10 /* don't edit, just add to buffer list */
/* for lnum argument in do_ecmd() */
#define ECMD_LASTL (linenr_T)0 /* use last position in loaded file */
diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua
index 04fd88cc8d..5f81306fc1 100644
--- a/src/nvim/ex_cmds.lua
+++ b/src/nvim/ex_cmds.lua
@@ -35,6 +35,7 @@ local ADDR_LOADED_BUFFERS = 3
local ADDR_BUFFERS = 4
local ADDR_TABS = 5
local ADDR_QUICKFIX = 6
+local ADDR_OTHER = 99
-- The following table is described in ex_cmds_defs.h file.
return {
@@ -88,7 +89,7 @@ return {
},
{
command='argadd',
- flags=bit.bor(BANG, NEEDARG, RANGE, NOTADR, ZEROR, FILES, TRLBAR),
+ flags=bit.bor(BANG, RANGE, NOTADR, ZEROR, FILES, TRLBAR),
addr_type=ADDR_ARGUMENTS,
func='ex_argadd',
},
@@ -357,6 +358,12 @@ return {
func='ex_cbuffer',
},
{
+ command='cbottom',
+ flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
+ func='ex_cbottom',
+ },
+ {
command='cc',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
addr_type=ADDR_LINES,
@@ -455,6 +462,12 @@ return {
func='ex_checktime',
},
{
+ command='chistory',
+ flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
+ func='qf_history',
+ },
+ {
command='clist',
flags=bit.bor(BANG, EXTRA, TRLBAR, CMDWIN),
addr_type=ADDR_LINES,
@@ -473,6 +486,12 @@ return {
func='ex_close',
},
{
+ command='clearjumps',
+ flags=bit.bor(TRLBAR, CMDWIN),
+ addr_type=ADDR_LINES,
+ func='ex_clearjumps',
+ },
+ {
command='cmap',
flags=bit.bor(EXTRA, TRLBAR, NOTRLCOM, USECTRLV, CMDWIN),
addr_type=ADDR_LINES,
@@ -1271,6 +1290,12 @@ return {
func='ex_cbuffer',
},
{
+ command='lbottom',
+ flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
+ func='ex_cbottom',
+ },
+ {
command='lcd',
flags=bit.bor(BANG, FILE1, TRLBAR, CMDWIN),
addr_type=ADDR_LINES,
@@ -1381,6 +1406,12 @@ return {
func='ex_helpgrep',
},
{
+ command='lhistory',
+ flags=bit.bor(TRLBAR),
+ addr_type=ADDR_LINES,
+ func='qf_history',
+ },
+ {
command='ll',
flags=bit.bor(RANGE, NOTADR, COUNT, TRLBAR, BANG),
addr_type=ADDR_LINES,
@@ -1604,8 +1635,8 @@ return {
},
{
command='messages',
- flags=bit.bor(TRLBAR, CMDWIN),
- addr_type=ADDR_LINES,
+ flags=bit.bor(EXTRA, TRLBAR, RANGE, CMDWIN),
+ addr_type=ADDR_OTHER,
func='ex_messages',
},
{
@@ -1849,6 +1880,18 @@ return {
func='ex_print',
},
{
+ command='packadd',
+ flags=bit.bor(BANG, FILE1, NEEDARG, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
+ func='ex_packadd',
+ },
+ {
+ command='packloadall',
+ flags=bit.bor(BANG, TRLBAR, SBOXOK, CMDWIN),
+ addr_type=ADDR_LINES,
+ func='ex_packloadall',
+ },
+ {
command='pclose',
flags=bit.bor(BANG, TRLBAR),
addr_type=ADDR_LINES,
@@ -2158,19 +2201,19 @@ return {
command='ruby',
flags=bit.bor(RANGE, EXTRA, NEEDARG, CMDWIN),
addr_type=ADDR_LINES,
- func='ex_script_ni',
+ func='ex_ruby',
},
{
command='rubydo',
flags=bit.bor(RANGE, DFLALL, EXTRA, NEEDARG, CMDWIN),
addr_type=ADDR_LINES,
- func='ex_ni',
+ func='ex_rubydo',
},
{
command='rubyfile',
flags=bit.bor(RANGE, FILE1, NEEDARG, CMDWIN),
addr_type=ADDR_LINES,
- func='ex_ni',
+ func='ex_rubyfile',
},
{
command='rviminfo',
@@ -2182,7 +2225,7 @@ return {
command='substitute',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN),
addr_type=ADDR_LINES,
- func='do_sub',
+ func='ex_substitute',
},
{
command='sNext',
@@ -3169,7 +3212,7 @@ return {
enum='CMD_and',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
addr_type=ADDR_LINES,
- func='do_sub',
+ func='ex_substitute',
},
{
command='<',
@@ -3210,6 +3253,6 @@ return {
enum='CMD_tilde',
flags=bit.bor(RANGE, WHOLEFOLD, EXTRA, CMDWIN, MODIFY),
addr_type=ADDR_LINES,
- func='do_sub',
+ func='ex_substitute',
},
}
diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c
index 5fe6209a0a..3b92b3734a 100644
--- a/src/nvim/ex_cmds2.c
+++ b/src/nvim/ex_cmds2.c
@@ -1,6 +1,6 @@
-/*
- * ex_cmds2.c: some more functions for command line commands
- */
+/// @file ex_cmds2.c
+///
+/// Some more functions for command line commands
#include <assert.h>
#include <inttypes.h>
@@ -27,7 +27,6 @@
#include "nvim/mbyte.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
#include "nvim/move.h"
@@ -50,15 +49,15 @@
#include "nvim/api/private/defs.h"
-/* Growarray to store info about already sourced scripts.
- * Also store the dev/ino, so that we don't have to stat() each
- * script when going through the list. */
+/// Growarray to store info about already sourced scripts.
+/// Also store the dev/ino, so that we don't have to stat() each
+/// script when going through the list.
typedef struct scriptitem_S {
char_u *sn_name;
bool file_id_valid;
FileID file_id;
bool sn_prof_on; ///< true when script is/was profiled
- int sn_pr_force; ///< forceit: profile functions in this script
+ bool sn_pr_force; ///< forceit: profile functions in this script
proftime_T sn_pr_child; ///< time set when going into first child
int sn_pr_nest; ///< nesting for sn_pr_child
// profiling the script as a whole
@@ -76,29 +75,27 @@ typedef struct scriptitem_S {
int sn_prl_execed; ///< line being timed was executed
} scriptitem_T;
-static garray_T script_items = {0, 0, sizeof(scriptitem_T), 4, NULL};
+static garray_T script_items = { 0, 0, sizeof(scriptitem_T), 4, NULL };
#define SCRIPT_ITEM(id) (((scriptitem_T *)script_items.ga_data)[(id) - 1])
-/* Struct used in sn_prl_ga for every line of a script. */
+// Struct used in sn_prl_ga for every line of a script.
typedef struct sn_prl_S {
int snp_count; ///< nr of times line was executed
proftime_T sn_prl_total; ///< time spent in a line + children
proftime_T sn_prl_self; ///< time spent in a line itself
} sn_prl_T;
-/*
- * Structure used to store info for each sourced file.
- * It is shared between do_source() and getsourceline().
- * This is required, because it needs to be handed to do_cmdline() and
- * sourcing can be done recursively.
- */
+/// Structure used to store info for each sourced file.
+/// It is shared between do_source() and getsourceline().
+/// This is required, because it needs to be handed to do_cmdline() and
+/// sourcing can be done recursively.
struct source_cookie {
FILE *fp; ///< opened file for sourcing
char_u *nextline; ///< if not NULL: line that was read ahead
int finished; ///< ":finish" used
#if defined(USE_CRNL)
int fileformat; ///< EOL_UNKNOWN, EOL_UNIX or EOL_DOS
- int error; ///< TRUE if LF found after CR-LF
+ bool error; ///< true if LF found after CR-LF
#endif
linenr_T breakpoint; ///< next line with breakpoint or zero
char_u *fname; ///< name of sourced file
@@ -113,13 +110,11 @@ struct source_cookie {
# include "ex_cmds2.c.generated.h"
#endif
-static int debug_greedy = FALSE; /* batch mode debugging: don't save
- and restore typeahead. */
+/// batch mode debugging: don't save and restore typeahead.
+static bool debug_greedy = false;
-/*
- * do_debug(): Debug mode.
- * Repeatedly get Ex commands, until told to continue normal execution.
- */
+/// Debug mode. Repeatedly get Ex commands, until told to continue normal
+/// execution.
void do_debug(char_u *cmd)
{
int save_msg_scroll = msg_scroll;
@@ -130,7 +125,7 @@ void do_debug(char_u *cmd)
int save_emsg_silent = emsg_silent;
int save_redir_off = redir_off;
tasave_T typeaheadbuf;
- int typeahead_saved = FALSE;
+ bool typeahead_saved = false;
int save_ignore_script = 0;
int save_ex_normal_busy;
int n;
@@ -150,43 +145,44 @@ void do_debug(char_u *cmd)
#define CMD_DOWN 10
- ++RedrawingDisabled; /* don't redisplay the window */
- ++no_wait_return; /* don't wait for return */
- did_emsg = FALSE; /* don't use error from debugged stuff */
- cmd_silent = FALSE; /* display commands */
- msg_silent = FALSE; /* display messages */
- emsg_silent = FALSE; /* display error messages */
- redir_off = TRUE; /* don't redirect debug commands */
+ RedrawingDisabled++; // don't redisplay the window
+ no_wait_return++; // don't wait for return
+ did_emsg = false; // don't use error from debugged stuff
+ cmd_silent = false; // display commands
+ msg_silent = false; // display messages
+ emsg_silent = false; // display error messages
+ redir_off = true; // don't redirect debug commands
State = NORMAL;
- if (!debug_did_msg)
+ if (!debug_did_msg) {
MSG(_("Entering Debug mode. Type \"cont\" to continue."));
- if (sourcing_name != NULL)
+ }
+ if (sourcing_name != NULL) {
msg(sourcing_name);
- if (sourcing_lnum != 0)
+ }
+ if (sourcing_lnum != 0) {
smsg(_("line %" PRId64 ": %s"), (int64_t)sourcing_lnum, cmd);
- else
+ } else {
smsg(_("cmd: %s"), cmd);
+ }
- /*
- * Repeat getting a command and executing it.
- */
+ // Repeat getting a command and executing it.
for (;; ) {
- msg_scroll = TRUE;
- need_wait_return = FALSE;
- /* Save the current typeahead buffer and replace it with an empty one.
- * This makes sure we get input from the user here and don't interfere
- * with the commands being executed. Reset "ex_normal_busy" to avoid
- * the side effects of using ":normal". Save the stuff buffer and make
- * it empty. Set ignore_script to avoid reading from script input. */
+ msg_scroll = true;
+ need_wait_return = false;
+ // Save the current typeahead buffer and replace it with an empty one.
+ // This makes sure we get input from the user here and don't interfere
+ // with the commands being executed. Reset "ex_normal_busy" to avoid
+ // the side effects of using ":normal". Save the stuff buffer and make
+ // it empty. Set ignore_script to avoid reading from script input.
save_ex_normal_busy = ex_normal_busy;
ex_normal_busy = 0;
if (!debug_greedy) {
save_typeahead(&typeaheadbuf);
- typeahead_saved = TRUE;
+ typeahead_saved = true;
save_ignore_script = ignore_script;
- ignore_script = TRUE;
+ ignore_script = true;
}
xfree(cmdline);
@@ -201,9 +197,9 @@ void do_debug(char_u *cmd)
cmdline_row = msg_row;
msg_starthere();
if (cmdline != NULL) {
- /* If this is a debug command, set "last_cmd".
- * If not, reset "last_cmd".
- * For a blank line use previous command. */
+ // If this is a debug command, set "last_cmd".
+ // If not, reset "last_cmd".
+ // For a blank line use previous command.
p = skipwhite(cmdline);
if (*p != NUL) {
switch (*p) {
@@ -255,11 +251,11 @@ void do_debug(char_u *cmd)
default: last_cmd = 0;
}
if (last_cmd != 0) {
- /* Check that the tail matches. */
- ++p;
+ // Check that the tail matches.
+ p++;
while (*p != NUL && *p == *tail) {
- ++p;
- ++tail;
+ p++;
+ tail++;
}
if (ASCII_ISALPHA(*p) && last_cmd != CMD_FRAME) {
last_cmd = 0;
@@ -268,8 +264,7 @@ void do_debug(char_u *cmd)
}
if (last_cmd != 0) {
- /* Execute debug command: decided where to break next and
- * return. */
+ // Execute debug command: decided where to break next and return.
switch (last_cmd) {
case CMD_CONT:
debug_break_level = -1;
@@ -284,13 +279,13 @@ void do_debug(char_u *cmd)
debug_break_level = ex_nesting_level - 1;
break;
case CMD_QUIT:
- got_int = TRUE;
+ got_int = true;
debug_break_level = -1;
break;
case CMD_INTERRUPT:
- got_int = TRUE;
+ got_int = true;
debug_break_level = 9999;
- /* Do not repeat ">interrupt" cmd, continue stepping. */
+ // Do not repeat ">interrupt" cmd, continue stepping.
last_cmd = CMD_STEP;
break;
case CMD_BACKTRACE:
@@ -318,21 +313,21 @@ void do_debug(char_u *cmd)
break;
}
- /* don't debug this command */
+ // don't debug this command
n = debug_break_level;
debug_break_level = -1;
(void)do_cmdline(cmdline, getexline, NULL,
- DOCMD_VERBOSE|DOCMD_EXCRESET);
+ DOCMD_VERBOSE|DOCMD_EXCRESET);
debug_break_level = n;
}
lines_left = (int)(Rows - 1);
}
xfree(cmdline);
- --RedrawingDisabled;
- --no_wait_return;
+ RedrawingDisabled--;
+ no_wait_return--;
redraw_all_later(NOT_VALID);
- need_wait_return = FALSE;
+ need_wait_return = false;
msg_scroll = save_msg_scroll;
lines_left = (int)(Rows - 1);
State = save_State;
@@ -342,9 +337,8 @@ void do_debug(char_u *cmd)
emsg_silent = save_emsg_silent;
redir_off = save_redir_off;
- /* Only print the message again when typing a command before coming back
- * here. */
- debug_did_msg = TRUE;
+ // Only print the message again when typing a command before coming back here.
+ debug_did_msg = true;
}
static int get_maxbacktrace_level(void)
@@ -419,9 +413,8 @@ static void do_showbacktrace(char_u *cmd)
}
}
-/*
- * ":debug".
- */
+
+/// ":debug".
void ex_debug(exarg_T *eap)
{
int debug_break_level_save = debug_break_level;
@@ -434,88 +427,81 @@ void ex_debug(exarg_T *eap)
static char_u *debug_breakpoint_name = NULL;
static linenr_T debug_breakpoint_lnum;
-/*
- * When debugging or a breakpoint is set on a skipped command, no debug prompt
- * is shown by do_one_cmd(). This situation is indicated by debug_skipped, and
- * debug_skipped_name is then set to the source name in the breakpoint case. If
- * a skipped command decides itself that a debug prompt should be displayed, it
- * can do so by calling dbg_check_skipped().
- */
+/// When debugging or a breakpoint is set on a skipped command, no debug prompt
+/// is shown by do_one_cmd(). This situation is indicated by debug_skipped, and
+/// debug_skipped_name is then set to the source name in the breakpoint case. If
+/// a skipped command decides itself that a debug prompt should be displayed, it
+/// can do so by calling dbg_check_skipped().
static int debug_skipped;
static char_u *debug_skipped_name;
-/*
- * Go to debug mode when a breakpoint was encountered or "ex_nesting_level" is
- * at or below the break level. But only when the line is actually
- * executed. Return TRUE and set breakpoint_name for skipped commands that
- * decide to execute something themselves.
- * Called from do_one_cmd() before executing a command.
- */
+/// Go to debug mode when a breakpoint was encountered or "ex_nesting_level" is
+/// at or below the break level. But only when the line is actually
+/// executed. Return true and set breakpoint_name for skipped commands that
+/// decide to execute something themselves.
+/// Called from do_one_cmd() before executing a command.
void dbg_check_breakpoint(exarg_T *eap)
{
char_u *p;
- debug_skipped = FALSE;
+ debug_skipped = false;
if (debug_breakpoint_name != NULL) {
if (!eap->skip) {
- /* replace K_SNR with "<SNR>" */
+ // replace K_SNR with "<SNR>"
if (debug_breakpoint_name[0] == K_SPECIAL
&& debug_breakpoint_name[1] == KS_EXTRA
- && debug_breakpoint_name[2] == (int)KE_SNR)
+ && debug_breakpoint_name[2] == (int)KE_SNR) {
p = (char_u *)"<SNR>";
- else
+ } else {
p = (char_u *)"";
+ }
smsg(_("Breakpoint in \"%s%s\" line %" PRId64),
- p,
- debug_breakpoint_name + (*p == NUL ? 0 : 3),
- (int64_t)debug_breakpoint_lnum);
+ p,
+ debug_breakpoint_name + (*p == NUL ? 0 : 3),
+ (int64_t)debug_breakpoint_lnum);
debug_breakpoint_name = NULL;
do_debug(eap->cmd);
} else {
- debug_skipped = TRUE;
+ debug_skipped = true;
debug_skipped_name = debug_breakpoint_name;
debug_breakpoint_name = NULL;
}
} else if (ex_nesting_level <= debug_break_level) {
- if (!eap->skip)
+ if (!eap->skip) {
do_debug(eap->cmd);
- else {
- debug_skipped = TRUE;
+ } else {
+ debug_skipped = true;
debug_skipped_name = NULL;
}
}
}
-/*
- * Go to debug mode if skipped by dbg_check_breakpoint() because eap->skip was
- * set. Return TRUE when the debug mode is entered this time.
- */
-int dbg_check_skipped(exarg_T *eap)
+/// Go to debug mode if skipped by dbg_check_breakpoint() because eap->skip was
+/// set.
+///
+/// @return true when the debug mode is entered this time.
+bool dbg_check_skipped(exarg_T *eap)
{
int prev_got_int;
if (debug_skipped) {
- /*
- * Save the value of got_int and reset it. We don't want a previous
- * interruption cause flushing the input buffer.
- */
+ // Save the value of got_int and reset it. We don't want a previous
+ // interruption cause flushing the input buffer.
prev_got_int = got_int;
- got_int = FALSE;
+ got_int = false;
debug_breakpoint_name = debug_skipped_name;
- /* eap->skip is TRUE */
- eap->skip = FALSE;
+ // eap->skip is true
+ eap->skip = false;
dbg_check_breakpoint(eap);
- eap->skip = TRUE;
+ eap->skip = true;
got_int |= prev_got_int;
- return TRUE;
+ return true;
}
- return FALSE;
+ return false;
}
-/*
- * The list of breakpoints: dbg_breakp.
- * This is a grow-array of structs.
- */
+/// The list of breakpoints: dbg_breakp.
+/// This is a grow-array of structs.
struct debuggy {
int dbg_nr; ///< breakpoint number
int dbg_type; ///< DBG_FUNC or DBG_FILE
@@ -525,33 +511,30 @@ struct debuggy {
int dbg_forceit; ///< ! used
};
-static garray_T dbg_breakp = {0, 0, sizeof(struct debuggy), 4, NULL};
+static garray_T dbg_breakp = { 0, 0, sizeof(struct debuggy), 4, NULL };
#define BREAKP(idx) (((struct debuggy *)dbg_breakp.ga_data)[idx])
#define DEBUGGY(gap, idx) (((struct debuggy *)gap->ga_data)[idx])
-static int last_breakp = 0; /* nr of last defined breakpoint */
+static int last_breakp = 0; // nr of last defined breakpoint
-/* Profiling uses file and func names similar to breakpoints. */
-static garray_T prof_ga = {0, 0, sizeof(struct debuggy), 4, NULL};
+// Profiling uses file and func names similar to breakpoints.
+static garray_T prof_ga = { 0, 0, sizeof(struct debuggy), 4, NULL };
#define DBG_FUNC 1
#define DBG_FILE 2
-/*
- * Parse the arguments of ":profile", ":breakadd" or ":breakdel" and put them
- * in the entry just after the last one in dbg_breakp. Note that "dbg_name"
- * is allocated.
- * Returns FAIL for failure.
- */
-static int
-dbg_parsearg (
- char_u *arg,
- garray_T *gap /* either &dbg_breakp or &prof_ga */
-)
+/// Parse the arguments of ":profile", ":breakadd" or ":breakdel" and put them
+/// in the entry just after the last one in dbg_breakp. Note that "dbg_name"
+/// is allocated.
+/// Returns FAIL for failure.
+///
+/// @param arg
+/// @param gap either &dbg_breakp or &prof_ga
+static int dbg_parsearg(char_u *arg, garray_T *gap)
{
char_u *p = arg;
char_u *q;
struct debuggy *bp;
- int here = FALSE;
+ bool here = false;
ga_grow(gap, 1);
@@ -568,7 +551,7 @@ dbg_parsearg (
return FAIL;
}
bp->dbg_type = DBG_FILE;
- here = TRUE;
+ here = true;
} else {
EMSG2(_(e_invarg2), p);
return FAIL;
@@ -585,7 +568,7 @@ dbg_parsearg (
bp->dbg_lnum = 0;
}
- /* Find the function or file name. Don't accept a function name with (). */
+ // Find the function or file name. Don't accept a function name with ().
if ((!here && *p == NUL)
|| (here && *p != NUL)
|| (bp->dbg_type == DBG_FUNC && strstr((char *)p, "()") != NULL)) {
@@ -593,36 +576,38 @@ dbg_parsearg (
return FAIL;
}
- if (bp->dbg_type == DBG_FUNC)
+ if (bp->dbg_type == DBG_FUNC) {
bp->dbg_name = vim_strsave(p);
- else if (here)
+ } else if (here) {
bp->dbg_name = vim_strsave(curbuf->b_ffname);
- else {
- /* Expand the file name in the same way as do_source(). This means
- * doing it twice, so that $DIR/file gets expanded when $DIR is
- * "~/dir". */
+ } else {
+ // Expand the file name in the same way as do_source(). This means
+ // doing it twice, so that $DIR/file gets expanded when $DIR is
+ // "~/dir".
q = expand_env_save(p);
- if (q == NULL)
+ if (q == NULL) {
return FAIL;
+ }
p = expand_env_save(q);
xfree(q);
- if (p == NULL)
+ if (p == NULL) {
return FAIL;
+ }
if (*p != '*') {
bp->dbg_name = (char_u *)fix_fname((char *)p);
xfree(p);
- } else
+ } else {
bp->dbg_name = p;
+ }
}
- if (bp->dbg_name == NULL)
+ if (bp->dbg_name == NULL) {
return FAIL;
+ }
return OK;
}
-/*
- * ":breakadd".
- */
+/// ":breakadd".
void ex_breakadd(exarg_T *eap)
{
struct debuggy *bp;
@@ -630,52 +615,51 @@ void ex_breakadd(exarg_T *eap)
garray_T *gap;
gap = &dbg_breakp;
- if (eap->cmdidx == CMD_profile)
+ if (eap->cmdidx == CMD_profile) {
gap = &prof_ga;
+ }
if (dbg_parsearg(eap->arg, gap) == OK) {
bp = &DEBUGGY(gap, gap->ga_len);
bp->dbg_forceit = eap->forceit;
- pat = file_pat_to_reg_pat(bp->dbg_name, NULL, NULL, FALSE);
+ pat = file_pat_to_reg_pat(bp->dbg_name, NULL, NULL, false);
if (pat != NULL) {
bp->dbg_prog = vim_regcomp(pat, RE_MAGIC + RE_STRING);
xfree(pat);
}
- if (pat == NULL || bp->dbg_prog == NULL)
+ if (pat == NULL || bp->dbg_prog == NULL) {
xfree(bp->dbg_name);
- else {
- if (bp->dbg_lnum == 0) /* default line number is 1 */
+ } else {
+ if (bp->dbg_lnum == 0) { // default line number is 1
bp->dbg_lnum = 1;
+ }
if (eap->cmdidx != CMD_profile) {
DEBUGGY(gap, gap->ga_len).dbg_nr = ++last_breakp;
- ++debug_tick;
+ debug_tick++;
}
- ++gap->ga_len;
+ gap->ga_len++;
}
}
}
-/*
- * ":debuggreedy".
- */
+/// ":debuggreedy".
void ex_debuggreedy(exarg_T *eap)
{
- if (eap->addr_count == 0 || eap->line2 != 0)
- debug_greedy = TRUE;
- else
- debug_greedy = FALSE;
+ if (eap->addr_count == 0 || eap->line2 != 0) {
+ debug_greedy = true;
+ } else {
+ debug_greedy = false;
+ }
}
-/*
- * ":breakdel" and ":profdel".
- */
+/// ":breakdel" and ":profdel".
void ex_breakdel(exarg_T *eap)
{
struct debuggy *bp, *bpi;
int nr;
int todel = -1;
- int del_all = FALSE;
+ bool del_all = false;
linenr_T best_lnum = 0;
garray_T *gap;
@@ -687,7 +671,7 @@ void ex_breakdel(exarg_T *eap)
if (ascii_isdigit(*eap->arg)) {
// ":breakdel {nr}"
nr = atoi((char *)eap->arg);
- for (int i = 0; i < gap->ga_len; ++i) {
+ for (int i = 0; i < gap->ga_len; i++) {
if (DEBUGGY(gap, i).dbg_nr == nr) {
todel = i;
break;
@@ -695,13 +679,14 @@ void ex_breakdel(exarg_T *eap)
}
} else if (*eap->arg == '*') {
todel = 0;
- del_all = TRUE;
+ del_all = true;
} else {
- /* ":breakdel {func|file} [lnum] {name}" */
- if (dbg_parsearg(eap->arg, gap) == FAIL)
+ // ":breakdel {func|file} [lnum] {name}"
+ if (dbg_parsearg(eap->arg, gap) == FAIL) {
return;
+ }
bp = &DEBUGGY(gap, gap->ga_len);
- for (int i = 0; i < gap->ga_len; ++i) {
+ for (int i = 0; i < gap->ga_len; i++) {
bpi = &DEBUGGY(gap, i);
if (bp->dbg_type == bpi->dbg_type
&& STRCMP(bp->dbg_name, bpi->dbg_name) == 0
@@ -716,90 +701,85 @@ void ex_breakdel(exarg_T *eap)
xfree(bp->dbg_name);
}
- if (todel < 0)
+ if (todel < 0) {
EMSG2(_("E161: Breakpoint not found: %s"), eap->arg);
- else {
+ } else {
while (!GA_EMPTY(gap)) {
xfree(DEBUGGY(gap, todel).dbg_name);
vim_regfree(DEBUGGY(gap, todel).dbg_prog);
- --gap->ga_len;
- if (todel < gap->ga_len)
+ gap->ga_len--;
+ if (todel < gap->ga_len) {
memmove(&DEBUGGY(gap, todel), &DEBUGGY(gap, todel + 1),
(size_t)(gap->ga_len - todel) * sizeof(struct debuggy));
+ }
if (eap->cmdidx == CMD_breakdel) {
- ++debug_tick;
+ debug_tick++;
}
if (!del_all) {
break;
}
}
- /* If all breakpoints were removed clear the array. */
- if (GA_EMPTY(gap))
+ // If all breakpoints were removed clear the array.
+ if (GA_EMPTY(gap)) {
ga_clear(gap);
+ }
}
}
-/*
- * ":breaklist".
- */
+/// ":breaklist".
void ex_breaklist(exarg_T *eap)
{
struct debuggy *bp;
- if (GA_EMPTY(&dbg_breakp))
+ if (GA_EMPTY(&dbg_breakp)) {
MSG(_("No breakpoints defined"));
- else
- for (int i = 0; i < dbg_breakp.ga_len; ++i) {
+ } else {
+ for (int i = 0; i < dbg_breakp.ga_len; i++) {
bp = &BREAKP(i);
- if (bp->dbg_type == DBG_FILE)
- home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
+ if (bp->dbg_type == DBG_FILE) {
+ home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, true);
+ }
smsg(_("%3d %s %s line %" PRId64),
- bp->dbg_nr,
- bp->dbg_type == DBG_FUNC ? "func" : "file",
- bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
- (int64_t)bp->dbg_lnum);
- }
-}
-
-/*
- * Find a breakpoint for a function or sourced file.
- * Returns line number at which to break; zero when no matching breakpoint.
- */
-linenr_T
-dbg_find_breakpoint (
- int file, /* TRUE for a file, FALSE for a function */
- char_u *fname, /* file or function name */
- linenr_T after /* after this line number */
+ bp->dbg_nr,
+ bp->dbg_type == DBG_FUNC ? "func" : "file",
+ bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
+ (int64_t)bp->dbg_lnum);
+ }
+ }
+}
+
+/// Find a breakpoint for a function or sourced file.
+/// Returns line number at which to break; zero when no matching breakpoint.
+linenr_T
+dbg_find_breakpoint(
+ bool file, // true for a file, false for a function
+ char_u *fname, // file or function name
+ linenr_T after // after this line number
)
{
return debuggy_find(file, fname, after, &dbg_breakp, NULL);
}
-/*
- * Return TRUE if profiling is on for a function or sourced file.
- */
-int
-has_profiling (
- int file, /* TRUE for a file, FALSE for a function */
- char_u *fname, /* file or function name */
- int *fp /* return: forceit */
-)
+/// @param file true for a file, false for a function
+/// @param fname file or function name
+/// @param fp[out] forceit
+///
+/// @returns true if profiling is on for a function or sourced file.
+bool has_profiling(bool file, char_u *fname, bool *fp)
{
return debuggy_find(file, fname, (linenr_T)0, &prof_ga, fp)
!= (linenr_T)0;
}
-/*
- * Common code for dbg_find_breakpoint() and has_profiling().
- */
-static linenr_T
-debuggy_find (
- int file, /* TRUE for a file, FALSE for a function */
- char_u *fname, /* file or function name */
- linenr_T after, /* after this line number */
- garray_T *gap, /* either &dbg_breakp or &prof_ga */
- int *fp /* if not NULL: return forceit */
+/// Common code for dbg_find_breakpoint() and has_profiling().
+static linenr_T
+debuggy_find(
+ bool file, // true for a file, false for a function
+ char_u *fname, // file or function name
+ linenr_T after, // after this line number
+ garray_T *gap, // either &dbg_breakp or &prof_ga
+ bool *fp // if not NULL: return forceit
)
{
struct debuggy *bp;
@@ -807,59 +787,57 @@ debuggy_find (
char_u *name = fname;
int prev_got_int;
- /* Return quickly when there are no breakpoints. */
- if (GA_EMPTY(gap))
+ // Return quickly when there are no breakpoints.
+ if (GA_EMPTY(gap)) {
return (linenr_T)0;
+ }
- /* Replace K_SNR in function name with "<SNR>". */
+ // Replace K_SNR in function name with "<SNR>".
if (!file && fname[0] == K_SPECIAL) {
name = xmalloc(STRLEN(fname) + 3);
STRCPY(name, "<SNR>");
STRCPY(name + 5, fname + 3);
}
- for (int i = 0; i < gap->ga_len; ++i) {
- /* Skip entries that are not useful or are for a line that is beyond
- * an already found breakpoint. */
+ for (int i = 0; i < gap->ga_len; i++) {
+ // Skip entries that are not useful or are for a line that is beyond
+ // an already found breakpoint.
bp = &DEBUGGY(gap, i);
- if (((bp->dbg_type == DBG_FILE) == file
- && (gap == &prof_ga
- || (bp->dbg_lnum > after
- && (lnum == 0 || bp->dbg_lnum < lnum))))) {
+ if ((bp->dbg_type == DBG_FILE) == file
+ && (gap == &prof_ga
+ || (bp->dbg_lnum > after && (lnum == 0 || bp->dbg_lnum < lnum)))) {
// Save the value of got_int and reset it. We don't want a
// previous interruption cancel matching, only hitting CTRL-C
// while matching should abort it.
prev_got_int = got_int;
- got_int = FALSE;
+ got_int = false;
if (vim_regexec_prog(&bp->dbg_prog, false, name, (colnr_T)0)) {
lnum = bp->dbg_lnum;
- if (fp != NULL)
+ if (fp != NULL) {
*fp = bp->dbg_forceit;
+ }
}
got_int |= prev_got_int;
}
}
- if (name != fname)
+ if (name != fname) {
xfree(name);
+ }
return lnum;
}
-/*
- * Called when a breakpoint was encountered.
- */
+/// Called when a breakpoint was encountered.
void dbg_breakpoint(char_u *name, linenr_T lnum)
{
- /* We need to check if this line is actually executed in do_one_cmd() */
+ // We need to check if this line is actually executed in do_one_cmd()
debug_breakpoint_name = name;
debug_breakpoint_lnum = lnum;
}
static char_u *profile_fname = NULL;
-/*
- * ":profile cmd args"
- */
+/// ":profile cmd args"
void ex_profile(exarg_T *eap)
{
static proftime_T pause_time;
@@ -885,8 +863,9 @@ void ex_profile(exarg_T *eap)
set_vim_var_nr(VV_PROFILING, 0L);
profile_reset();
} else if (STRCMP(eap->arg, "pause") == 0) {
- if (do_profiling == PROF_YES)
+ if (do_profiling == PROF_YES) {
pause_time = profile_start();
+ }
do_profiling = PROF_PAUSED;
} else if (STRCMP(eap->arg, "continue") == 0) {
if (do_profiling == PROF_PAUSED) {
@@ -897,7 +876,7 @@ void ex_profile(exarg_T *eap)
} else if (STRCMP(eap->arg, "dump") == 0) {
profile_dump();
} else {
- /* The rest is similar to ":breakadd". */
+ // The rest is similar to ":breakadd".
ex_breakadd(eap);
}
}
@@ -917,6 +896,21 @@ void ex_pydo(exarg_T *eap)
script_host_do_range("python", eap);
}
+void ex_ruby(exarg_T *eap)
+{
+ script_host_execute("ruby", eap);
+}
+
+void ex_rubyfile(exarg_T *eap)
+{
+ script_host_execute_file("ruby", eap);
+}
+
+void ex_rubydo(exarg_T *eap)
+{
+ script_host_do_range("ruby", eap);
+}
+
void ex_python3(exarg_T *eap)
{
script_host_execute("python3", eap);
@@ -932,7 +926,7 @@ void ex_pydo3(exarg_T *eap)
script_host_do_range("python3", eap);
}
-/* Command line expansion for :profile. */
+// Command line expansion for :profile.
static enum {
PEXP_SUBCMD, ///< expand :profile sub-commands
PEXP_FUNC ///< expand :profile func {funcname}
@@ -949,36 +943,33 @@ static char *pexpand_cmds[] = {
NULL
};
-/*
- * Function given to ExpandGeneric() to obtain the profile command
- * specific expansion.
- */
+/// Function given to ExpandGeneric() to obtain the profile command
+/// specific expansion.
char_u *get_profile_name(expand_T *xp, int idx)
{
switch (pexpand_what) {
case PEXP_SUBCMD:
return (char_u *)pexpand_cmds[idx];
- /* case PEXP_FUNC: TODO */
+ // case PEXP_FUNC: TODO
default:
return NULL;
}
}
-/*
- * Handle command line completion for :profile command.
- */
+/// Handle command line completion for :profile command.
void set_context_in_profile_cmd(expand_T *xp, char_u *arg)
{
char_u *end_subcmd;
- /* Default: expand subcommands. */
+ // Default: expand subcommands.
xp->xp_context = EXPAND_PROFILE;
pexpand_what = PEXP_SUBCMD;
xp->xp_pattern = arg;
end_subcmd = skiptowhite(arg);
- if (*end_subcmd == NUL)
+ if (*end_subcmd == NUL) {
return;
+ }
if (end_subcmd - arg == 5 && STRNCMP(arg, "start", 5) == 0) {
xp->xp_context = EXPAND_FILES;
@@ -986,22 +977,20 @@ void set_context_in_profile_cmd(expand_T *xp, char_u *arg)
return;
}
- /* TODO: expand function names after "func" */
+ // TODO(tarruda): expand function names after "func"
xp->xp_context = EXPAND_NOTHING;
}
-/*
- * Dump the profiling info.
- */
+/// Dump the profiling info.
void profile_dump(void)
{
FILE *fd;
if (profile_fname != NULL) {
fd = mch_fopen((char *)profile_fname, "w");
- if (fd == NULL)
+ if (fd == NULL) {
EMSG2(_(e_notopen), profile_fname);
- else {
+ } else {
script_dump_profile(fd);
func_dump_profile(fd);
fclose(fd);
@@ -1017,7 +1006,7 @@ static void profile_reset(void)
scriptitem_T *si = &SCRIPT_ITEM(id);
if (si->sn_prof_on) {
si->sn_prof_on = false;
- si->sn_pr_force = 0;
+ si->sn_pr_force = false;
si->sn_pr_child = profile_zero();
si->sn_pr_nest = 0;
si->sn_pr_count = 0;
@@ -1077,26 +1066,23 @@ static void profile_init(scriptitem_T *si)
si->sn_pr_nest = 0;
}
-/*
- * save time when starting to invoke another script or function.
- */
+/// save time when starting to invoke another script or function.
void script_prof_save(
- proftime_T *tm /* place to store wait time */
- )
+ proftime_T *tm // place to store wait time
+)
{
scriptitem_T *si;
if (current_SID > 0 && current_SID <= script_items.ga_len) {
si = &SCRIPT_ITEM(current_SID);
- if (si->sn_prof_on && si->sn_pr_nest++ == 0)
+ if (si->sn_prof_on && si->sn_pr_nest++ == 0) {
si->sn_pr_child = profile_start();
+ }
}
*tm = profile_get_wait();
}
-/*
- * Count time spent in children after invoking another script or function.
- */
+/// Count time spent in children after invoking another script or function.
void script_prof_restore(proftime_T *tm)
{
scriptitem_T *si;
@@ -1115,62 +1101,60 @@ void script_prof_restore(proftime_T *tm)
static proftime_T inchar_time;
-/*
- * Called when starting to wait for the user to type a character.
- */
+/// Called when starting to wait for the user to type a character.
void prof_inchar_enter(void)
{
inchar_time = profile_start();
}
-/*
- * Called when finished waiting for the user to type a character.
- */
+/// Called when finished waiting for the user to type a character.
void prof_inchar_exit(void)
{
inchar_time = profile_end(inchar_time);
profile_set_wait(profile_add(profile_get_wait(), inchar_time));
}
-/*
- * Dump the profiling results for all scripts in file "fd".
- */
+/// Dump the profiling results for all scripts in file "fd".
static void script_dump_profile(FILE *fd)
{
scriptitem_T *si;
FILE *sfd;
sn_prl_T *pp;
- for (int id = 1; id <= script_items.ga_len; ++id) {
+ for (int id = 1; id <= script_items.ga_len; id++) {
si = &SCRIPT_ITEM(id);
if (si->sn_prof_on) {
fprintf(fd, "SCRIPT %s\n", si->sn_name);
- if (si->sn_pr_count == 1)
+ if (si->sn_pr_count == 1) {
fprintf(fd, "Sourced 1 time\n");
- else
+ } else {
fprintf(fd, "Sourced %d times\n", si->sn_pr_count);
+ }
fprintf(fd, "Total time: %s\n", profile_msg(si->sn_pr_total));
fprintf(fd, " Self time: %s\n", profile_msg(si->sn_pr_self));
fprintf(fd, "\n");
fprintf(fd, "count total (s) self (s)\n");
sfd = mch_fopen((char *)si->sn_name, "r");
- if (sfd == NULL)
+ if (sfd == NULL) {
fprintf(fd, "Cannot open file!\n");
- else {
- for (int i = 0; i < si->sn_prl_ga.ga_len; ++i) {
- if (vim_fgets(IObuff, IOSIZE, sfd))
+ } else {
+ for (int i = 0; i < si->sn_prl_ga.ga_len; i++) {
+ if (vim_fgets(IObuff, IOSIZE, sfd)) {
break;
+ }
pp = &PRL_ITEM(si, i);
if (pp->snp_count > 0) {
fprintf(fd, "%5d ", pp->snp_count);
- if (profile_equal(pp->sn_prl_total, pp->sn_prl_self))
+ if (profile_equal(pp->sn_prl_total, pp->sn_prl_self)) {
fprintf(fd, " ");
- else
+ } else {
fprintf(fd, "%s ", profile_msg(pp->sn_prl_total));
+ }
fprintf(fd, "%s ", profile_msg(pp->sn_prl_self));
- } else
+ } else {
fprintf(fd, " ");
+ }
fprintf(fd, "%s", IObuff);
}
fclose(sfd);
@@ -1180,44 +1164,41 @@ static void script_dump_profile(FILE *fd)
}
}
-/*
- * Return TRUE when a function defined in the current script should be
- * profiled.
- */
-int prof_def_func(void)
+/// Return true when a function defined in the current script should be
+/// profiled.
+bool prof_def_func(void)
{
- if (current_SID > 0)
+ if (current_SID > 0) {
return SCRIPT_ITEM(current_SID).sn_pr_force;
- return FALSE;
+ }
+ return false;
}
-/*
- * If 'autowrite' option set, try to write the file.
- * Careful: autocommands may make "buf" invalid!
- *
- * return FAIL for failure, OK otherwise
- */
+/// If 'autowrite' option set, try to write the file.
+/// Careful: autocommands may make "buf" invalid!
+///
+/// @return FAIL for failure, OK otherwise
int autowrite(buf_T *buf, int forceit)
{
int r;
if (!(p_aw || p_awa) || !p_write
- /* never autowrite a "nofile" or "nowrite" buffer */
+ // never autowrite a "nofile" or "nowrite" buffer
|| bt_dontwrite(buf)
- || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL)
+ || (!forceit && buf->b_p_ro) || buf->b_ffname == NULL) {
return FAIL;
+ }
r = buf_write_all(buf, forceit);
- /* Writing may succeed but the buffer still changed, e.g., when there is a
- * conversion error. We do want to return FAIL then. */
- if (buf_valid(buf) && bufIsChanged(buf))
+ // Writing may succeed but the buffer still changed, e.g., when there is a
+ // conversion error. We do want to return FAIL then.
+ if (buf_valid(buf) && bufIsChanged(buf)) {
r = FAIL;
+ }
return r;
}
-/*
- * flush all buffers, except the ones that are readonly
- */
+/// flush all buffers, except the ones that are readonly
void autowrite_all(void)
{
if (!(p_aw || p_awa) || !p_write) {
@@ -1226,123 +1207,125 @@ void autowrite_all(void)
FOR_ALL_BUFFERS(buf) {
if (bufIsChanged(buf) && !buf->b_p_ro) {
- (void)buf_write_all(buf, FALSE);
- /* an autocommand may have deleted the buffer */
- if (!buf_valid(buf))
+ (void)buf_write_all(buf, false);
+ // an autocommand may have deleted the buffer
+ if (!buf_valid(buf)) {
buf = firstbuf;
+ }
}
}
}
-/*
- * Return TRUE if buffer was changed and cannot be abandoned.
- * For flags use the CCGD_ values.
- */
-int check_changed(buf_T *buf, int flags)
+/// Return true if buffer was changed and cannot be abandoned.
+/// For flags use the CCGD_ values.
+bool check_changed(buf_T *buf, int flags)
{
int forceit = (flags & CCGD_FORCEIT);
- if ( !forceit
- && bufIsChanged(buf)
- && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1)
- && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL)) {
+ if (!forceit
+ && bufIsChanged(buf)
+ && ((flags & CCGD_MULTWIN) || buf->b_nwindows <= 1)
+ && (!(flags & CCGD_AW) || autowrite(buf, forceit) == FAIL)) {
if ((p_confirm || cmdmod.confirm) && p_write) {
int count = 0;
- if (flags & CCGD_ALLBUF)
+ if (flags & CCGD_ALLBUF) {
FOR_ALL_BUFFERS(buf2) {
if (bufIsChanged(buf2) && (buf2->b_ffname != NULL)) {
- ++count;
+ count++;
}
}
- if (!buf_valid(buf))
- /* Autocommand deleted buffer, oops! It's not changed now. */
- return FALSE;
+ }
+ if (!buf_valid(buf)) {
+ // Autocommand deleted buffer, oops! It's not changed now.
+ return false;
+ }
dialog_changed(buf, count > 1);
- if (!buf_valid(buf))
- /* Autocommand deleted buffer, oops! It's not changed now. */
- return FALSE;
+ if (!buf_valid(buf)) {
+ // Autocommand deleted buffer, oops! It's not changed now.
+ return false;
+ }
return bufIsChanged(buf);
}
- if (flags & CCGD_EXCMD)
+ if (flags & CCGD_EXCMD) {
EMSG(_(e_nowrtmsg));
- else
+ } else {
EMSG(_(e_nowrtmsg_nobang));
- return TRUE;
+ }
+ return true;
}
- return FALSE;
+ return false;
}
-/*
- * Ask the user what to do when abandoning a changed buffer.
- * Must check 'write' option first!
- */
-void
-dialog_changed (
- buf_T *buf,
- int checkall /* may abandon all changed buffers */
-)
+/// Ask the user what to do when abandoning a changed buffer.
+/// Must check 'write' option first!
+///
+/// @param buf
+/// @param checkall may abandon all changed buffers
+void dialog_changed(buf_T *buf, int checkall)
{
char_u buff[DIALOG_MSG_SIZE];
int ret;
exarg_T ea;
dialog_msg(buff, _("Save changes to \"%s\"?"),
- (buf->b_fname != NULL) ?
- buf->b_fname : (char_u *)_("Untitled"));
- if (checkall)
+ (buf->b_fname != NULL) ?
+ buf->b_fname : (char_u *)_("Untitled"));
+ if (checkall) {
ret = vim_dialog_yesnoallcancel(VIM_QUESTION, NULL, buff, 1);
- else
+ } else {
ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+ }
- /* Init ea pseudo-structure, this is needed for the check_overwrite()
- * function. */
- ea.append = ea.forceit = FALSE;
+ // Init ea pseudo-structure, this is needed for the check_overwrite()
+ // function.
+ ea.append = ea.forceit = false;
if (ret == VIM_YES) {
- if (buf->b_fname != NULL && check_overwrite(&ea, buf,
- buf->b_fname, buf->b_ffname, FALSE) == OK)
- /* didn't hit Cancel */
- (void)buf_write_all(buf, FALSE);
+ if (buf->b_fname != NULL
+ && check_overwrite(&ea,
+ buf,
+ buf->b_fname,
+ buf->b_ffname,
+ false) == OK) {
+ // didn't hit Cancel
+ (void)buf_write_all(buf, false);
+ }
} else if (ret == VIM_NO) {
- unchanged(buf, TRUE);
+ unchanged(buf, true);
} else if (ret == VIM_ALL) {
- /*
- * Write all modified files that can be written.
- * Skip readonly buffers, these need to be confirmed
- * individually.
- */
+ // Write all modified files that can be written.
+ // Skip readonly buffers, these need to be confirmed
+ // individually.
FOR_ALL_BUFFERS(buf2) {
if (bufIsChanged(buf2)
- && (buf2->b_ffname != NULL
- )
+ && (buf2->b_ffname != NULL)
&& !buf2->b_p_ro) {
- if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
- buf2->b_fname, buf2->b_ffname, FALSE) == OK)
- /* didn't hit Cancel */
- (void)buf_write_all(buf2, FALSE);
- /* an autocommand may have deleted the buffer */
- if (!buf_valid(buf2))
+ if (buf2->b_fname != NULL
+ && check_overwrite(&ea, buf2, buf2->b_fname,
+ buf2->b_ffname, false) == OK) {
+ // didn't hit Cancel
+ (void)buf_write_all(buf2, false);
+ }
+ // an autocommand may have deleted the buffer
+ if (!buf_valid(buf2)) {
buf2 = firstbuf;
+ }
}
}
} else if (ret == VIM_DISCARDALL) {
- /*
- * mark all buffers as unchanged
- */
+ // mark all buffers as unchanged
FOR_ALL_BUFFERS(buf2) {
- unchanged(buf2, TRUE);
+ unchanged(buf2, true);
}
}
}
-/*
- * Return TRUE if the buffer "buf" can be abandoned, either by making it
- * hidden, autowriting it or unloading it.
- */
-int can_abandon(buf_T *buf, int forceit)
+/// Return true if the buffer "buf" can be abandoned, either by making it
+/// hidden, autowriting it or unloading it.
+bool can_abandon(buf_T *buf, int forceit)
{
return P_HID(buf)
|| !bufIsChanged(buf)
@@ -1352,16 +1335,16 @@ int can_abandon(buf_T *buf, int forceit)
}
-/*
- * Add a buffer number to "bufnrs", unless it's already there.
- */
+/// Add a buffer number to "bufnrs", unless it's already there.
static void add_bufnum(int *bufnrs, int *bufnump, int nr)
{
int i;
- for (i = 0; i < *bufnump; ++i)
- if (bufnrs[i] == nr)
+ for (i = 0; i < *bufnump; i++) {
+ if (bufnrs[i] == nr) {
return;
+ }
+ }
bufnrs[*bufnump] = nr;
*bufnump = *bufnump + 1;
}
@@ -1375,7 +1358,7 @@ static void add_bufnum(int *bufnrs, int *bufnump, int nr)
/// @param[in] unload specifies whether to unload, instead of hide, the buffer.
///
/// @returns true if any buffer is changed and cannot be abandoned
-int check_changed_any(bool hidden, bool unload)
+bool check_changed_any(bool hidden, bool unload)
{
bool ret = false;
int save;
@@ -1385,7 +1368,7 @@ int check_changed_any(bool hidden, bool unload)
int *bufnrs;
FOR_ALL_BUFFERS(buf) {
- ++bufcount;
+ bufcount++;
}
if (bufcount == 0) {
@@ -1394,16 +1377,16 @@ int check_changed_any(bool hidden, bool unload)
bufnrs = xmalloc(sizeof(*bufnrs) * bufcount);
- /* curbuf */
+ // curbuf
bufnrs[bufnum++] = curbuf->b_fnum;
- /* buf in curtab */
+ // buf in curtab
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
if (wp->w_buffer != curbuf) {
add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
}
}
- /* buf in other tab */
+ // buf in other tab
FOR_ALL_TABS(tp) {
if (tp != curtab) {
FOR_ALL_WINDOWS_IN_TAB(wp, tp) {
@@ -1412,59 +1395,60 @@ int check_changed_any(bool hidden, bool unload)
}
}
- /* any other buf */
+ // any other buf
FOR_ALL_BUFFERS(buf) {
add_bufnum(bufnrs, &bufnum, buf->b_fnum);
}
buf_T *buf = NULL;
- for (i = 0; i < bufnum; ++i) {
+ for (i = 0; i < bufnum; i++) {
buf = buflist_findnr(bufnrs[i]);
- if (buf == NULL)
+ if (buf == NULL) {
continue;
+ }
if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf)) {
- /* Try auto-writing the buffer. If this fails but the buffer no
- * longer exists it's not changed, that's OK. */
+ // Try auto-writing the buffer. If this fails but the buffer no
+ // longer exists it's not changed, that's OK.
if (check_changed(buf, (p_awa ? CCGD_AW : 0)
- | CCGD_MULTWIN
- | CCGD_ALLBUF) && buf_valid(buf))
- break; /* didn't save - still changes */
+ | CCGD_MULTWIN
+ | CCGD_ALLBUF) && buf_valid(buf)) {
+ break; // didn't save - still changes
+ }
}
}
- if (i >= bufnum)
+ if (i >= bufnum) {
goto theend;
+ }
- ret = TRUE;
- exiting = FALSE;
- /*
- * When ":confirm" used, don't give an error message.
- */
+ ret = true;
+ exiting = false;
+ // When ":confirm" used, don't give an error message.
if (!(p_confirm || cmdmod.confirm)) {
- /* There must be a wait_return for this message, do_buffer()
- * may cause a redraw. But wait_return() is a no-op when vgetc()
- * is busy (Quit used from window menu), then make sure we don't
- * cause a scroll up. */
+ // There must be a wait_return for this message, do_buffer()
+ // may cause a redraw. But wait_return() is a no-op when vgetc()
+ // is busy (Quit used from window menu), then make sure we don't
+ // cause a scroll up.
if (vgetc_busy > 0) {
msg_row = cmdline_row;
msg_col = 0;
- msg_didout = FALSE;
+ msg_didout = false;
}
if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
- buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) {
+ buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname)) {
save = no_wait_return;
- no_wait_return = FALSE;
- wait_return(FALSE);
+ no_wait_return = false;
+ wait_return(false);
no_wait_return = save;
}
}
- /* Try to find a window that contains the buffer. */
+ // Try to find a window that contains the buffer.
if (buf != curbuf) {
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp->w_buffer == buf) {
goto_tabpage_win(tp, wp);
- /* Paranoia: did autocms wipe out the buffer with changes? */
+ // Paranoia: did autocmds wipe out the buffer with changes?
if (!buf_valid(buf)) {
goto theend;
}
@@ -1484,10 +1468,8 @@ theend:
return ret;
}
-/*
- * return FAIL if there is no file name, OK if there is one
- * give error message for FAIL
- */
+/// Return FAIL if there is no file name, OK if there is one.
+/// Give error message for FAIL.
int check_fname(void)
{
if (curbuf->b_ffname == NULL) {
@@ -1497,19 +1479,17 @@ int check_fname(void)
return OK;
}
-/*
- * flush the contents of a buffer, unless it has no file name
- *
- * return FAIL for failure, OK otherwise
- */
+/// Flush the contents of a buffer, unless it has no file name.
+///
+/// @return FAIL for failure, OK otherwise
int buf_write_all(buf_T *buf, int forceit)
{
int retval;
buf_T *old_curbuf = curbuf;
retval = (buf_write(buf, buf->b_ffname, buf->b_fname,
- (linenr_T)1, buf->b_ml.ml_line_count, NULL,
- FALSE, forceit, TRUE, FALSE));
+ (linenr_T)1, buf->b_ml.ml_line_count, NULL,
+ false, forceit, true, false));
if (curbuf != old_curbuf) {
msg_source(hl_attr(HLF_W));
MSG(_("Warning: Entered other buffer unexpectedly (check autocommands)"));
@@ -1517,37 +1497,35 @@ int buf_write_all(buf_T *buf, int forceit)
return retval;
}
-/*
- * Code to handle the argument list.
- */
+/// Code to handle the argument list.
#define AL_SET 1
#define AL_ADD 2
#define AL_DEL 3
-/*
- * Isolate one argument, taking backticks.
- * Changes the argument in-place, puts a NUL after it. Backticks remain.
- * Return a pointer to the start of the next argument.
- */
+/// Isolate one argument, taking backticks.
+/// Changes the argument in-place, puts a NUL after it. Backticks remain.
+/// Return a pointer to the start of the next argument.
static char_u *do_one_arg(char_u *str)
{
char_u *p;
- int inbacktick;
+ bool inbacktick;
- inbacktick = FALSE;
- for (p = str; *str; ++str) {
- /* When the backslash is used for escaping the special meaning of a
- * character we need to keep it until wildcard expansion. */
+ inbacktick = false;
+ for (p = str; *str; str++) {
+ // When the backslash is used for escaping the special meaning of a
+ // character we need to keep it until wildcard expansion.
if (rem_backslash(str)) {
*p++ = *str++;
*p++ = *str;
} else {
- /* An item ends at a space not in backticks */
- if (!inbacktick && ascii_isspace(*str))
+ // An item ends at a space not in backticks
+ if (!inbacktick && ascii_isspace(*str)) {
break;
- if (*str == '`')
- inbacktick ^= TRUE;
+ }
+ if (*str == '`') {
+ inbacktick ^= true;
+ }
*p++ = *str;
}
}
@@ -1557,26 +1535,23 @@ static char_u *do_one_arg(char_u *str)
return str;
}
-/*
- * Separate the arguments in "str" and return a list of pointers in the
- * growarray "gap".
- */
+/// Separate the arguments in "str" and return a list of pointers in the
+/// growarray "gap".
void get_arglist(garray_T *gap, char_u *str)
{
ga_init(gap, (int)sizeof(char_u *), 20);
while (*str != NUL) {
GA_APPEND(char_u *, gap, str);
- /* Isolate one argument, change it in-place, put a NUL after it. */
+ // Isolate one argument, change it in-place, put a NUL after it.
str = do_one_arg(str);
}
}
-/*
- * Parse a list of arguments (file names), expand them and return in
- * "fnames[fcountp]". When "wig" is true, removes files matching 'wildignore'.
- * Return FAIL or OK.
- */
+/// Parse a list of arguments (file names), expand them and return in
+/// "fnames[fcountp]". When "wig" is true, removes files matching 'wildignore'.
+///
+/// @return FAIL or OK.
int get_arglist_exp(char_u *str, int *fcountp, char_u ***fnamesp, bool wig)
{
garray_T ga;
@@ -1584,31 +1559,29 @@ int get_arglist_exp(char_u *str, int *fcountp, char_u ***fnamesp, bool wig)
get_arglist(&ga, str);
- if (wig)
+ if (wig) {
i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
- fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
- else
+ fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+ } else {
i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
- fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+ fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
+ }
ga_clear(&ga);
return i;
}
-/*
- * "what" == AL_SET: Redefine the argument list to 'str'.
- * "what" == AL_ADD: add files in 'str' to the argument list after "after".
- * "what" == AL_DEL: remove files in 'str' from the argument list.
- *
- * Return FAIL for failure, OK otherwise.
- */
-static int
-do_arglist (
- char_u *str,
- int what,
- int after /* 0 means before first one */
-)
+/// @param str
+/// @param what
+/// AL_SET: Redefine the argument list to 'str'.
+/// AL_ADD: add files in 'str' to the argument list after "after".
+/// AL_DEL: remove files in 'str' from the argument list.
+/// @param after
+/// 0 means before first one
+///
+/// @return FAIL for failure, OK otherwise.
+static int do_arglist(char_u *str, int what, int after)
{
garray_T new_ga;
int exp_count;
@@ -1616,54 +1589,63 @@ do_arglist (
char_u *p;
int match;
- /*
- * Collect all file name arguments in "new_ga".
- */
+ // Set default argument for ":argadd" command.
+ if (what == AL_ADD && *str == NUL) {
+ if (curbuf->b_ffname == NULL) {
+ return FAIL;
+ }
+ str = curbuf->b_fname;
+ }
+
+ // Collect all file name arguments in "new_ga".
get_arglist(&new_ga, str);
if (what == AL_DEL) {
regmatch_T regmatch;
- int didone;
-
- /*
- * Delete the items: use each item as a regexp and find a match in the
- * argument list.
- */
- regmatch.rm_ic = p_fic; /* ignore case when 'fileignorecase' is set */
- for (int i = 0; i < new_ga.ga_len && !got_int; ++i) {
+ bool didone;
+
+ // Delete the items: use each item as a regexp and find a match in the
+ // argument list.
+ regmatch.rm_ic = p_fic; // ignore case when 'fileignorecase' is set
+ for (int i = 0; i < new_ga.ga_len && !got_int; i++) {
p = ((char_u **)new_ga.ga_data)[i];
- p = file_pat_to_reg_pat(p, NULL, NULL, FALSE);
- if (p == NULL)
+ p = file_pat_to_reg_pat(p, NULL, NULL, false);
+ if (p == NULL) {
break;
+ }
regmatch.regprog = vim_regcomp(p, p_magic ? RE_MAGIC : 0);
if (regmatch.regprog == NULL) {
xfree(p);
break;
}
- didone = FALSE;
- for (match = 0; match < ARGCOUNT; ++match)
+ didone = false;
+ for (match = 0; match < ARGCOUNT; match++) {
if (vim_regexec(&regmatch, alist_name(&ARGLIST[match]),
- (colnr_T)0)) {
- didone = TRUE;
+ (colnr_T)0)) {
+ didone = true;
xfree(ARGLIST[match].ae_fname);
memmove(ARGLIST + match, ARGLIST + match + 1,
(size_t)(ARGCOUNT - match - 1) * sizeof(aentry_T));
- --ALIST(curwin)->al_ga.ga_len;
- if (curwin->w_arg_idx > match)
- --curwin->w_arg_idx;
- --match;
+ ALIST(curwin)->al_ga.ga_len--;
+ if (curwin->w_arg_idx > match) {
+ curwin->w_arg_idx--;
+ }
+ match--;
}
+ }
vim_regfree(regmatch.regprog);
xfree(p);
- if (!didone)
+ if (!didone) {
EMSG2(_(e_nomatch2), ((char_u **)new_ga.ga_data)[i]);
+ }
}
ga_clear(&new_ga);
} else {
int i = expand_wildcards(new_ga.ga_len, (char_u **)new_ga.ga_data,
- &exp_count, &exp_files, EW_DIR|EW_FILE|EW_ADDSLASH|EW_NOTFOUND);
+ &exp_count, &exp_files,
+ EW_DIR|EW_FILE|EW_ADDSLASH|EW_NOTFOUND);
ga_clear(&new_ga);
if (i == FAIL || exp_count == 0) {
EMSG(_(e_nomatch));
@@ -1673,8 +1655,9 @@ do_arglist (
if (what == AL_ADD) {
(void)alist_add_list(exp_count, exp_files, after);
xfree(exp_files);
- } else /* what == AL_SET */
- alist_set(ALIST(curwin), exp_count, exp_files, FALSE, NULL, 0);
+ } else { // what == AL_SET
+ alist_set(ALIST(curwin), exp_count, exp_files, false, NULL, 0);
+ }
}
alist_check_arg_idx();
@@ -1682,9 +1665,7 @@ do_arglist (
return OK;
}
-/*
- * Check the validity of the arg_idx for each other window.
- */
+/// Check the validity of the arg_idx for each other window.
static void alist_check_arg_idx(void)
{
FOR_ALL_TAB_WINDOWS(tp, win) {
@@ -1694,136 +1675,123 @@ static void alist_check_arg_idx(void)
}
}
-/*
- * Return TRUE if window "win" is editing the file at the current argument
- * index.
- */
-static int editing_arg_idx(win_T *win)
+/// Return true if window "win" is editing the file at the current argument
+/// index.
+static bool editing_arg_idx(win_T *win)
{
return !(win->w_arg_idx >= WARGCOUNT(win)
|| (win->w_buffer->b_fnum
!= WARGLIST(win)[win->w_arg_idx].ae_fnum
&& (win->w_buffer->b_ffname == NULL
|| !(path_full_compare(
- alist_name(&WARGLIST(win)[win->w_arg_idx]),
- win->w_buffer->b_ffname, TRUE) & kEqualFiles))));
+ alist_name(&WARGLIST(win)[win->w_arg_idx]),
+ win->w_buffer->b_ffname, true) & kEqualFiles))));
}
-/*
- * Check if window "win" is editing the w_arg_idx file in its argument list.
- */
+/// Check if window "win" is editing the w_arg_idx file in its argument list.
void check_arg_idx(win_T *win)
{
if (WARGCOUNT(win) > 1 && !editing_arg_idx(win)) {
- /* We are not editing the current entry in the argument list.
- * Set "arg_had_last" if we are editing the last one. */
- win->w_arg_idx_invalid = TRUE;
+ // We are not editing the current entry in the argument list.
+ // Set "arg_had_last" if we are editing the last one.
+ win->w_arg_idx_invalid = true;
if (win->w_arg_idx != WARGCOUNT(win) - 1
- && arg_had_last == FALSE
+ && arg_had_last == false
&& ALIST(win) == &global_alist
&& GARGCOUNT > 0
&& win->w_arg_idx < GARGCOUNT
&& (win->w_buffer->b_fnum == GARGLIST[GARGCOUNT - 1].ae_fnum
|| (win->w_buffer->b_ffname != NULL
&& (path_full_compare(alist_name(&GARGLIST[GARGCOUNT - 1]),
- win->w_buffer->b_ffname, TRUE) & kEqualFiles))))
- arg_had_last = TRUE;
+ win->w_buffer->b_ffname, true)
+ & kEqualFiles)))) {
+ arg_had_last = true;
+ }
} else {
- /* We are editing the current entry in the argument list.
- * Set "arg_had_last" if it's also the last one */
- win->w_arg_idx_invalid = FALSE;
+ // We are editing the current entry in the argument list.
+ // Set "arg_had_last" if it's also the last one
+ win->w_arg_idx_invalid = false;
if (win->w_arg_idx == WARGCOUNT(win) - 1
- && win->w_alist == &global_alist
- )
- arg_had_last = TRUE;
+ && win->w_alist == &global_alist) {
+ arg_had_last = true;
+ }
}
}
-/*
- * ":args", ":argslocal" and ":argsglobal".
- */
+/// ":args", ":argslocal" and ":argsglobal".
void ex_args(exarg_T *eap)
{
if (eap->cmdidx != CMD_args) {
alist_unlink(ALIST(curwin));
- if (eap->cmdidx == CMD_argglobal)
+ if (eap->cmdidx == CMD_argglobal) {
ALIST(curwin) = &global_alist;
- else /* eap->cmdidx == CMD_arglocal */
+ } else { // eap->cmdidx == CMD_arglocal
alist_new();
+ }
}
if (!ends_excmd(*eap->arg)) {
- /*
- * ":args file ..": define new argument list, handle like ":next"
- * Also for ":argslocal file .." and ":argsglobal file ..".
- */
+ // ":args file ..": define new argument list, handle like ":next"
+ // Also for ":argslocal file .." and ":argsglobal file ..".
ex_next(eap);
- } else if (eap->cmdidx == CMD_args) {
- /*
- * ":args": list arguments.
- */
+ } else if (eap->cmdidx == CMD_args) {
+ // ":args": list arguments.
if (ARGCOUNT > 0) {
- /* Overwrite the command, for a short list there is no scrolling
- * required and no wait_return(). */
- gotocmdline(TRUE);
- for (int i = 0; i < ARGCOUNT; ++i) {
- if (i == curwin->w_arg_idx)
+ // Overwrite the command, for a short list there is no scrolling
+ // required and no wait_return().
+ gotocmdline(true);
+ for (int i = 0; i < ARGCOUNT; i++) {
+ if (i == curwin->w_arg_idx) {
msg_putchar('[');
+ }
msg_outtrans(alist_name(&ARGLIST[i]));
- if (i == curwin->w_arg_idx)
+ if (i == curwin->w_arg_idx) {
msg_putchar(']');
+ }
msg_putchar(' ');
}
}
} else if (eap->cmdidx == CMD_arglocal) {
garray_T *gap = &curwin->w_alist->al_ga;
- /*
- * ":argslocal": make a local copy of the global argument list.
- */
+ // ":argslocal": make a local copy of the global argument list.
ga_grow(gap, GARGCOUNT);
- for (int i = 0; i < GARGCOUNT; ++i)
+ for (int i = 0; i < GARGCOUNT; i++) {
if (GARGLIST[i].ae_fname != NULL) {
AARGLIST(curwin->w_alist)[gap->ga_len].ae_fname =
vim_strsave(GARGLIST[i].ae_fname);
AARGLIST(curwin->w_alist)[gap->ga_len].ae_fnum =
GARGLIST[i].ae_fnum;
- ++gap->ga_len;
+ gap->ga_len++;
}
+ }
}
}
-/*
- * ":previous", ":sprevious", ":Next" and ":sNext".
- */
+/// ":previous", ":sprevious", ":Next" and ":sNext".
void ex_previous(exarg_T *eap)
{
- /* If past the last one already, go to the last one. */
- if (curwin->w_arg_idx - (int)eap->line2 >= ARGCOUNT)
+ // If past the last one already, go to the last one.
+ if (curwin->w_arg_idx - (int)eap->line2 >= ARGCOUNT) {
do_argfile(eap, ARGCOUNT - 1);
- else
+ } else {
do_argfile(eap, curwin->w_arg_idx - (int)eap->line2);
+ }
}
-/*
- * ":rewind", ":first", ":sfirst" and ":srewind".
- */
+/// ":rewind", ":first", ":sfirst" and ":srewind".
void ex_rewind(exarg_T *eap)
{
do_argfile(eap, 0);
}
-/*
- * ":last" and ":slast".
- */
+/// ":last" and ":slast".
void ex_last(exarg_T *eap)
{
do_argfile(eap, ARGCOUNT - 1);
}
-/*
- * ":argument" and ":sargument".
- */
+/// ":argument" and ":sargument".
void ex_argument(exarg_T *eap)
{
int i;
@@ -1836,9 +1804,7 @@ void ex_argument(exarg_T *eap)
do_argfile(eap, i);
}
-/*
- * Edit file "argn" of the argument lists.
- */
+/// Edit file "argn" of the argument lists.
void do_argfile(exarg_T *eap, int argn)
{
int other;
@@ -1846,26 +1812,26 @@ void do_argfile(exarg_T *eap, int argn)
int old_arg_idx = curwin->w_arg_idx;
if (argn < 0 || argn >= ARGCOUNT) {
- if (ARGCOUNT <= 1)
+ if (ARGCOUNT <= 1) {
EMSG(_("E163: There is only one file to edit"));
- else if (argn < 0)
+ } else if (argn < 0) {
EMSG(_("E164: Cannot go before first file"));
- else
+ } else {
EMSG(_("E165: Cannot go beyond last file"));
+ }
} else {
setpcmark();
- /* split window or create new tab page first */
+ // split window or create new tab page first
if (*eap->cmd == 's' || cmdmod.tab != 0) {
- if (win_split(0, 0) == FAIL)
+ if (win_split(0, 0) == FAIL) {
return;
+ }
RESET_BINDING(curwin);
} else {
- /*
- * if 'hidden' set, only check for changed file when re-editing
- * the same buffer
- */
- other = TRUE;
+ // if 'hidden' set, only check for changed file when re-editing
+ // the same buffer
+ other = true;
if (P_HID(curbuf)) {
p = (char_u *)fix_fname((char *)alist_name(&ARGLIST[argn]));
other = otherfile(p);
@@ -1873,101 +1839,97 @@ void do_argfile(exarg_T *eap, int argn)
}
if ((!P_HID(curbuf) || !other)
&& check_changed(curbuf, CCGD_AW
- | (other ? 0 : CCGD_MULTWIN)
- | (eap->forceit ? CCGD_FORCEIT : 0)
- | CCGD_EXCMD))
+ | (other ? 0 : CCGD_MULTWIN)
+ | (eap->forceit ? CCGD_FORCEIT : 0)
+ | CCGD_EXCMD)) {
return;
+ }
}
curwin->w_arg_idx = argn;
if (argn == ARGCOUNT - 1
- && curwin->w_alist == &global_alist
- )
- arg_had_last = TRUE;
+ && curwin->w_alist == &global_alist) {
+ arg_had_last = true;
+ }
- /* Edit the file; always use the last known line number.
- * When it fails (e.g. Abort for already edited file) restore the
- * argument index. */
+ // Edit the file; always use the last known line number.
+ // When it fails (e.g. Abort for already edited file) restore the
+ // argument index.
if (do_ecmd(0, alist_name(&ARGLIST[curwin->w_arg_idx]), NULL,
- eap, ECMD_LAST,
- (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0)
- + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL)
+ eap, ECMD_LAST,
+ (P_HID(curwin->w_buffer) ? ECMD_HIDE : 0)
+ + (eap->forceit ? ECMD_FORCEIT : 0), curwin) == FAIL) {
curwin->w_arg_idx = old_arg_idx;
- /* like Vi: set the mark where the cursor is in the file. */
- else if (eap->cmdidx != CMD_argdo)
+ } else if (eap->cmdidx != CMD_argdo) {
+ // like Vi: set the mark where the cursor is in the file.
setmark('\'');
+ }
}
}
-/*
- * ":next", and commands that behave like it.
- */
+/// ":next", and commands that behave like it.
void ex_next(exarg_T *eap)
{
int i;
- /*
- * check for changed buffer now, if this fails the argument list is not
- * redefined.
- */
- if ( P_HID(curbuf)
- || eap->cmdidx == CMD_snext
- || !check_changed(curbuf, CCGD_AW
- | (eap->forceit ? CCGD_FORCEIT : 0)
- | CCGD_EXCMD)) {
- if (*eap->arg != NUL) { /* redefine file list */
- if (do_arglist(eap->arg, AL_SET, 0) == FAIL)
+ // check for changed buffer now, if this fails the argument list is not
+ // redefined.
+ if (P_HID(curbuf)
+ || eap->cmdidx == CMD_snext
+ || !check_changed(curbuf, CCGD_AW
+ | (eap->forceit ? CCGD_FORCEIT : 0)
+ | CCGD_EXCMD)) {
+ if (*eap->arg != NUL) { // redefine file list
+ if (do_arglist(eap->arg, AL_SET, 0) == FAIL) {
return;
+ }
i = 0;
- } else
+ } else {
i = curwin->w_arg_idx + (int)eap->line2;
+ }
do_argfile(eap, i);
}
}
-/*
- * ":argedit"
- */
+/// ":argedit"
void ex_argedit(exarg_T *eap)
{
int fnum;
int i;
char_u *s;
- /* Add the argument to the buffer list and get the buffer number. */
+ // Add the argument to the buffer list and get the buffer number.
fnum = buflist_add(eap->arg, BLN_LISTED);
- /* Check if this argument is already in the argument list. */
- for (i = 0; i < ARGCOUNT; ++i)
- if (ARGLIST[i].ae_fnum == fnum)
+ // Check if this argument is already in the argument list.
+ for (i = 0; i < ARGCOUNT; i++) {
+ if (ARGLIST[i].ae_fnum == fnum) {
break;
+ }
+ }
if (i == ARGCOUNT) {
- /* Can't find it, add it to the argument list. */
+ // Can't find it, add it to the argument list.
s = vim_strsave(eap->arg);
- i = alist_add_list(1, &s,
- eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
+ int after = eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1;
+ i = alist_add_list(1, &s, after);
curwin->w_arg_idx = i;
}
alist_check_arg_idx();
- /* Edit the argument. */
+ // Edit the argument.
do_argfile(eap, i);
}
-/*
- * ":argadd"
- */
+/// ":argadd"
void ex_argadd(exarg_T *eap)
{
do_arglist(eap->arg, AL_ADD,
- eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
+ eap->addr_count > 0 ? (int)eap->line2 : curwin->w_arg_idx + 1);
maketitle();
}
-/*
- * ":argdelete"
- */
+/// ":argdelete"
void ex_argdelete(exarg_T *eap)
{
if (eap->addr_count > 0) {
@@ -1979,7 +1941,7 @@ void ex_argdelete(exarg_T *eap)
if (*eap->arg != NUL || n <= 0) {
EMSG(_(e_invarg));
} else {
- for (linenr_T i = eap->line1; i <= eap->line2; ++i) {
+ for (linenr_T i = eap->line1; i <= eap->line2; i++) {
xfree(ARGLIST[i - 1].ae_fname);
}
memmove(ARGLIST + eap->line1 - 1, ARGLIST + eap->line2,
@@ -1990,17 +1952,21 @@ void ex_argdelete(exarg_T *eap)
} else if (curwin->w_arg_idx > eap->line1) {
curwin->w_arg_idx = (int)eap->line1;
}
+ if (ARGCOUNT == 0) {
+ curwin->w_arg_idx = 0;
+ } else if (curwin->w_arg_idx >= ARGCOUNT) {
+ curwin->w_arg_idx = ARGCOUNT - 1;
+ }
}
- } else if (*eap->arg == NUL)
+ } else if (*eap->arg == NUL) {
EMSG(_(e_argreq));
- else
+ } else {
do_arglist(eap->arg, AL_DEL, 0);
+ }
maketitle();
}
-/*
- * ":argdo", ":windo", ":bufdo", ":tabdo", ":cdo", ":ldo", ":cfdo" and ":lfdo"
- */
+/// ":argdo", ":windo", ":bufdo", ":tabdo", ":cdo", ":ldo", ":cfdo" and ":lfdo"
void ex_listdo(exarg_T *eap)
{
int i;
@@ -2010,47 +1976,46 @@ void ex_listdo(exarg_T *eap)
char_u *save_ei = NULL;
char_u *p_shm_save;
- if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo)
- /* Don't do syntax HL autocommands. Skipping the syntax file is a
- * great speed improvement. */
+ if (eap->cmdidx != CMD_windo && eap->cmdidx != CMD_tabdo) {
+ // Don't do syntax HL autocommands. Skipping the syntax file is a
+ // great speed improvement.
save_ei = au_event_disable(",Syntax");
-
- start_global_changes();
+ }
if (eap->cmdidx == CMD_windo
|| eap->cmdidx == CMD_tabdo
|| P_HID(curbuf)
|| !check_changed(curbuf, CCGD_AW
- | (eap->forceit ? CCGD_FORCEIT : 0)
- | CCGD_EXCMD)) {
+ | (eap->forceit ? CCGD_FORCEIT : 0)
+ | CCGD_EXCMD)) {
i = 0;
- /* start at the eap->line1 argument/window/buffer */
+ // start at the eap->line1 argument/window/buffer
wp = firstwin;
tp = first_tabpage;
switch (eap->cmdidx) {
- case CMD_windo:
- for (; wp != NULL && i + 1 < eap->line1; wp = wp->w_next) {
- i++;
- }
- break;
- case CMD_tabdo:
- for (; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next) {
- i++;
- }
- break;
- case CMD_argdo:
- i = (int)eap->line1 - 1;
- break;
- default:
- break;
+ case CMD_windo:
+ for (; wp != NULL && i + 1 < eap->line1; wp = wp->w_next) {
+ i++;
+ }
+ break;
+ case CMD_tabdo:
+ for (; tp != NULL && i + 1 < eap->line1; tp = tp->tp_next) {
+ i++;
+ }
+ break;
+ case CMD_argdo:
+ i = (int)eap->line1 - 1;
+ break;
+ default:
+ break;
}
buf_T *buf = curbuf;
size_t qf_size = 0;
- /* set pcmark now */
+ // set pcmark now
if (eap->cmdidx == CMD_bufdo) {
- /* Advance to the first listed buffer after "eap->line1". */
+ // Advance to the first listed buffer after "eap->line1".
for (buf = firstbuf;
buf != NULL && (buf->b_fnum < eap->line1 || !buf->b_p_bl);
buf = buf->b_next) {
@@ -2082,64 +2047,71 @@ void ex_listdo(exarg_T *eap)
} else {
setpcmark();
}
- listcmd_busy = TRUE; /* avoids setting pcmark below */
+ listcmd_busy = true; // avoids setting pcmark below
while (!got_int && buf != NULL) {
if (eap->cmdidx == CMD_argdo) {
- /* go to argument "i" */
- if (i == ARGCOUNT)
+ // go to argument "i"
+ if (i == ARGCOUNT) {
break;
- /* Don't call do_argfile() when already there, it will try
- * reloading the file. */
+ }
+ // Don't call do_argfile() when already there, it will try
+ // reloading the file.
if (curwin->w_arg_idx != i || !editing_arg_idx(curwin)) {
- /* Clear 'shm' to avoid that the file message overwrites
- * any output from the command. */
+ // Clear 'shm' to avoid that the file message overwrites
+ // any output from the command.
p_shm_save = vim_strsave(p_shm);
set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
do_argfile(eap, i);
set_option_value((char_u *)"shm", 0L, p_shm_save, 0);
xfree(p_shm_save);
}
- if (curwin->w_arg_idx != i)
+ if (curwin->w_arg_idx != i) {
break;
+ }
} else if (eap->cmdidx == CMD_windo) {
- /* go to window "wp" */
- if (!win_valid(wp))
+ // go to window "wp"
+ if (!win_valid(wp)) {
break;
+ }
assert(wp);
win_goto(wp);
- if (curwin != wp)
- break; /* something must be wrong */
+ if (curwin != wp) {
+ break; // something must be wrong
+ }
wp = curwin->w_next;
} else if (eap->cmdidx == CMD_tabdo) {
- /* go to window "tp" */
- if (!valid_tabpage(tp))
+ // go to window "tp"
+ if (!valid_tabpage(tp)) {
break;
+ }
assert(tp);
- goto_tabpage_tp(tp, TRUE, TRUE);
+ goto_tabpage_tp(tp, true, true);
tp = tp->tp_next;
} else if (eap->cmdidx == CMD_bufdo) {
- /* Remember the number of the next listed buffer, in case
- * ":bwipe" is used or autocommands do something strange. */
+ // Remember the number of the next listed buffer, in case
+ // ":bwipe" is used or autocommands do something strange.
next_fnum = -1;
- for (buf_T *buf = curbuf->b_next; buf != NULL; buf = buf->b_next)
+ for (buf_T *buf = curbuf->b_next; buf != NULL; buf = buf->b_next) {
if (buf->b_p_bl) {
next_fnum = buf->b_fnum;
break;
}
+ }
}
- ++i;
- /* execute the command */
+ i++;
+ // execute the command
do_cmdline(eap->arg, eap->getline, eap->cookie,
- DOCMD_VERBOSE + DOCMD_NOWAIT);
+ DOCMD_VERBOSE + DOCMD_NOWAIT);
if (eap->cmdidx == CMD_bufdo) {
- /* Done? */
- if (next_fnum < 0 || next_fnum > eap->line2)
+ // Done?
+ if (next_fnum < 0 || next_fnum > eap->line2) {
break;
+ }
- /* Check if the buffer still exists. */
+ // Check if the buffer still exists.
bool buf_still_exists = false;
FOR_ALL_BUFFERS(bp) {
if (bp->b_fnum == next_fnum) {
@@ -2151,8 +2123,8 @@ void ex_listdo(exarg_T *eap)
break;
}
- /* Go to the next buffer. Clear 'shm' to avoid that the file
- * message overwrites any output from the command. */
+ // Go to the next buffer. Clear 'shm' to avoid that the file
+ // message overwrites any output from the command.
p_shm_save = vim_strsave(p_shm);
set_option_value((char_u *)"shm", 0L, (char_u *)"", 0);
goto_buffer(eap, DOBUF_FIRST, FORWARD, next_fnum);
@@ -2178,15 +2150,16 @@ void ex_listdo(exarg_T *eap)
// If jumping to the next quickfix entry fails, quit here.
if (qf_get_cur_idx(eap) == qf_idx) {
- break;
+ break;
}
}
if (eap->cmdidx == CMD_windo) {
- validate_cursor(); /* cursor may have moved */
- /* required when 'scrollbind' has been set */
- if (curwin->w_p_scb)
- do_check_scrollbind(TRUE);
+ validate_cursor(); // cursor may have moved
+ // required when 'scrollbind' has been set
+ if (curwin->w_p_scb) {
+ do_check_scrollbind(true);
+ }
}
if (eap->cmdidx == CMD_windo || eap->cmdidx == CMD_tabdo) {
if (i + 1 > eap->line2) {
@@ -2197,54 +2170,52 @@ void ex_listdo(exarg_T *eap)
break;
}
}
- listcmd_busy = FALSE;
+ listcmd_busy = false;
}
if (save_ei != NULL) {
au_event_restore(save_ei);
apply_autocmds(EVENT_SYNTAX, curbuf->b_p_syn,
- curbuf->b_fname, TRUE, curbuf);
- }
- end_global_changes();
-}
-
-/*
- * Add files[count] to the arglist of the current window after arg "after".
- * The file names in files[count] must have been allocated and are taken over.
- * Files[] itself is not taken over.
- * Returns index of first added argument.
- */
-static int
-alist_add_list (
- int count,
- char_u **files,
- int after /* where to add: 0 = before first one */
-)
+ curbuf->b_fname, true, curbuf);
+ }
+}
+
+/// Add files[count] to the arglist of the current window after arg "after".
+/// The file names in files[count] must have been allocated and are taken over.
+/// Files[] itself is not taken over.
+///
+/// @param after: where to add: 0 = before first one
+///
+/// @return index of first added argument
+static int alist_add_list(int count, char_u **files, int after)
{
+ int old_argcount = ARGCOUNT;
ga_grow(&ALIST(curwin)->al_ga, count);
{
- if (after < 0)
+ if (after < 0) {
after = 0;
- if (after > ARGCOUNT)
+ }
+ if (after > ARGCOUNT) {
after = ARGCOUNT;
- if (after < ARGCOUNT)
+ }
+ if (after < ARGCOUNT) {
memmove(&(ARGLIST[after + count]), &(ARGLIST[after]),
(size_t)(ARGCOUNT - after) * sizeof(aentry_T));
- for (int i = 0; i < count; ++i) {
+ }
+ for (int i = 0; i < count; i++) {
ARGLIST[after + i].ae_fname = files[i];
ARGLIST[after + i].ae_fnum = buflist_add(files[i], BLN_LISTED);
}
ALIST(curwin)->al_ga.ga_len += count;
- if (curwin->w_arg_idx >= after)
- ++curwin->w_arg_idx;
+ if (old_argcount > 0 && curwin->w_arg_idx >= after) {
+ curwin->w_arg_idx += count;
+ }
return after;
}
}
-/*
- * ":compiler[!] {name}"
- */
+/// ":compiler[!] {name}"
void ex_compiler(exarg_T *eap)
{
char_u *buf;
@@ -2252,134 +2223,148 @@ void ex_compiler(exarg_T *eap)
char_u *p;
if (*eap->arg == NUL) {
- /* List all compiler scripts. */
- do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.vim')");
- /* ) keep the indenter happy... */
+ // List all compiler scripts.
+ do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.vim')"); // NOLINT
} else {
- buf = xmalloc(STRLEN(eap->arg) + 14);
+ size_t bufsize = STRLEN(eap->arg) + 14;
+ buf = xmalloc(bufsize);
if (eap->forceit) {
- /* ":compiler! {name}" sets global options */
+ // ":compiler! {name}" sets global options
do_cmdline_cmd("command -nargs=* CompilerSet set <args>");
} else {
- /* ":compiler! {name}" sets local options.
- * To remain backwards compatible "current_compiler" is always
- * used. A user's compiler plugin may set it, the distributed
- * plugin will then skip the settings. Afterwards set
- * "b:current_compiler" and restore "current_compiler".
- * Explicitly prepend "g:" to make it work in a function. */
+ // ":compiler! {name}" sets local options.
+ // To remain backwards compatible "current_compiler" is always
+ // used. A user's compiler plugin may set it, the distributed
+ // plugin will then skip the settings. Afterwards set
+ // "b:current_compiler" and restore "current_compiler".
+ // Explicitly prepend "g:" to make it work in a function.
old_cur_comp = get_var_value((char_u *)"g:current_compiler");
- if (old_cur_comp != NULL)
+ if (old_cur_comp != NULL) {
old_cur_comp = vim_strsave(old_cur_comp);
+ }
do_cmdline_cmd("command -nargs=* CompilerSet setlocal <args>");
}
- do_unlet((char_u *)"g:current_compiler", TRUE);
- do_unlet((char_u *)"b:current_compiler", TRUE);
+ do_unlet((char_u *)"g:current_compiler", true);
+ do_unlet((char_u *)"b:current_compiler", true);
- sprintf((char *)buf, "compiler/%s.vim", eap->arg);
- if (source_runtime(buf, TRUE) == FAIL)
+ snprintf((char *)buf, bufsize, "compiler/%s.vim", eap->arg);
+ if (source_runtime(buf, DIP_ALL) == FAIL) {
EMSG2(_("E666: compiler not supported: %s"), eap->arg);
+ }
xfree(buf);
do_cmdline_cmd(":delcommand CompilerSet");
- /* Set "b:current_compiler" from "current_compiler". */
+ // Set "b:current_compiler" from "current_compiler".
p = get_var_value((char_u *)"g:current_compiler");
- if (p != NULL)
+ if (p != NULL) {
set_internal_string_var((char_u *)"b:current_compiler", p);
+ }
- /* Restore "current_compiler" for ":compiler {name}". */
+ // Restore "current_compiler" for ":compiler {name}".
if (!eap->forceit) {
if (old_cur_comp != NULL) {
set_internal_string_var((char_u *)"g:current_compiler",
- old_cur_comp);
+ old_cur_comp);
xfree(old_cur_comp);
- } else
- do_unlet((char_u *)"g:current_compiler", TRUE);
+ } else {
+ do_unlet((char_u *)"g:current_compiler", true);
+ }
}
}
}
-/*
- * ":runtime {name}"
- */
+/// ":runtime [what] {name}"
void ex_runtime(exarg_T *eap)
{
- source_runtime(eap->arg, eap->forceit);
+ char_u *arg = eap->arg;
+ char_u *p = skiptowhite(arg);
+ ptrdiff_t len = p - arg;
+ int flags = eap->forceit ? DIP_ALL : 0;
+
+ if (STRNCMP(arg, "START", len) == 0) {
+ flags += DIP_START + DIP_NORTP;
+ arg = skipwhite(arg + len);
+ } else if (STRNCMP(arg, "OPT", len) == 0) {
+ flags += DIP_OPT + DIP_NORTP;
+ arg = skipwhite(arg + len);
+ } else if (STRNCMP(arg, "PACK", len) == 0) {
+ flags += DIP_START + DIP_OPT + DIP_NORTP;
+ arg = skipwhite(arg + len);
+ } else if (STRNCMP(arg, "ALL", len) == 0) {
+ flags += DIP_START + DIP_OPT;
+ arg = skipwhite(arg + len);
+ }
+
+ source_runtime(arg, flags);
}
static void source_callback(char_u *fname, void *cookie)
{
- (void)do_source(fname, FALSE, DOSO_NONE);
+ (void)do_source(fname, false, DOSO_NONE);
}
-/*
- * Source the file "name" from all directories in 'runtimepath'.
- * "name" can contain wildcards.
- * When "all" is TRUE, source all files, otherwise only the first one.
- * return FAIL when no file could be sourced, OK otherwise.
- */
-int source_runtime(char_u *name, int all)
+/// Source the file "name" from all directories in 'runtimepath'.
+/// "name" can contain wildcards.
+/// When "flags" has DIP_ALL: source all files, otherwise only the first one.
+///
+/// return FAIL when no file could be sourced, OK otherwise.
+int source_runtime(char_u *name, int flags)
{
- return do_in_runtimepath(name, all, source_callback, NULL);
+ return do_in_runtimepath(name, flags, source_callback, NULL);
}
-/*
- * Find "name" in 'runtimepath'. When found, invoke the callback function for
- * it: callback(fname, "cookie")
- * When "all" is TRUE repeat for all matches, otherwise only the first one is
- * used.
- * Returns OK when at least one match found, FAIL otherwise.
- *
- * If "name" is NULL calls callback for each entry in runtimepath. Cookie is
- * passed by reference in this case, setting it to NULL indicates that callback
- * has done its job.
- */
-int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
- void *cookie)
+/// Find the file "name" in all directories in "path" and invoke
+/// "callback(fname, cookie)".
+/// "name" can contain wildcards.
+/// When "flags" has DIP_ALL: source all files, otherwise only the first one.
+/// When "flags" has DIP_DIR: find directories instead of files.
+/// When "flags" has DIP_ERR: give an error message if there is no match.
+///
+/// return FAIL when no file could be sourced, OK otherwise.
+int do_in_path(char_u *path, char_u *name, int flags,
+ DoInRuntimepathCB callback, void *cookie)
{
- char_u *rtp;
- char_u *np;
- char_u *buf;
- char_u *rtp_copy;
char_u *tail;
int num_files;
char_u **files;
int i;
- int did_one = FALSE;
+ bool did_one = false;
- /* Make a copy of 'runtimepath'. Invoking the callback may change the
- * value. */
- rtp_copy = vim_strsave(p_rtp);
- buf = xmallocz(MAXPATHL);
+ // Make a copy of 'runtimepath'. Invoking the callback may change the
+ // value.
+ char_u *rtp_copy = vim_strsave(path);
+ char_u *buf = xmallocz(MAXPATHL);
{
if (p_verbose > 1 && name != NULL) {
verbose_enter();
smsg(_("Searching for \"%s\" in \"%s\""),
- (char *)name, (char *)p_rtp);
+ (char *)name, (char *)path);
verbose_leave();
}
- /* Loop over all entries in 'runtimepath'. */
- rtp = rtp_copy;
- while (*rtp != NUL && (all || !did_one)) {
- /* Copy the path from 'runtimepath' to buf[]. */
+ // Loop over all entries in 'runtimepath'.
+ char_u *rtp = rtp_copy;
+ while (*rtp != NUL && ((flags & DIP_ALL) || !did_one)) {
+ // Copy the path from 'runtimepath' to buf[].
copy_option_part(&rtp, buf, MAXPATHL, ",");
if (name == NULL) {
- (*callback)(buf, (void *) &cookie);
- if (!did_one)
+ (*callback)(buf, (void *)&cookie);
+ if (!did_one) {
did_one = (cookie == NULL);
+ }
} else if (STRLEN(buf) + STRLEN(name) + 2 < MAXPATHL) {
add_pathsep((char *)buf);
tail = buf + STRLEN(buf);
- /* Loop over all patterns in "name" */
- np = name;
- while (*np != NUL && (all || !did_one)) {
- /* Append the pattern from "name" to buf[]. */
+ // Loop over all patterns in "name"
+ char_u *np = name;
+ while (*np != NUL && ((flags & DIP_ALL) || !did_one)) {
+ // Append the pattern from "name" to buf[].
assert(MAXPATHL >= (tail - buf));
copy_option_part(&np, tail, (size_t)(MAXPATHL - (tail - buf)),
- "\t ");
+ "\t ");
if (p_verbose > 2) {
verbose_enter();
@@ -2387,14 +2372,16 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
verbose_leave();
}
- /* Expand wildcards, invoke the callback for each match. */
+ // Expand wildcards, invoke the callback for each match.
if (gen_expand_wildcards(1, &buf, &num_files, &files,
- EW_FILE) == OK) {
- for (i = 0; i < num_files; ++i) {
+ (flags & DIP_DIR) ? EW_DIR
+ : EW_FILE) == OK) {
+ for (i = 0; i < num_files; i++) {
(*callback)(files[i], cookie);
- did_one = TRUE;
- if (!all)
+ did_one = true;
+ if (!(flags & DIP_ALL)) {
break;
+ }
}
FreeWild(num_files, files);
}
@@ -2404,27 +2391,235 @@ int do_in_runtimepath(char_u *name, int all, DoInRuntimepathCB callback,
}
xfree(buf);
xfree(rtp_copy);
- if (p_verbose > 0 && !did_one && name != NULL) {
- verbose_enter();
- smsg(_("not found in 'runtimepath': \"%s\""), name);
- verbose_leave();
+ if (!did_one && name != NULL) {
+ char *basepath = path == p_rtp ? "runtimepath" : "packpath";
+
+ if (flags & DIP_ERR) {
+ EMSG3(_(e_dirnotf), basepath, name);
+ } else if (p_verbose > 0) {
+ verbose_enter();
+ smsg(_("not found in '%s': \"%s\""), basepath, name);
+ verbose_leave();
+ }
}
return did_one ? OK : FAIL;
}
-/*
- * ":options"
- */
+/// Find "name" in 'runtimepath'. When found, invoke the callback function for
+/// it: callback(fname, "cookie")
+/// When "flags" has DIP_ALL repeat for all matches, otherwise only the first
+/// one is used.
+/// Returns OK when at least one match found, FAIL otherwise.
+/// If "name" is NULL calls callback for each entry in runtimepath. Cookie is
+/// passed by reference in this case, setting it to NULL indicates that callback
+/// has done its job.
+int do_in_runtimepath(char_u *name, int flags, DoInRuntimepathCB callback,
+ void *cookie)
+{
+ int done = FAIL;
+
+ if ((flags & DIP_NORTP) == 0) {
+ done = do_in_path(p_rtp, name, flags, callback, cookie);
+ }
+
+ if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_START)) {
+ char *start_dir = "pack/*/start/*/%s"; // NOLINT
+ size_t len = STRLEN(start_dir) + STRLEN(name);
+ char_u *s = xmallocz(len);
+
+ vim_snprintf((char *)s, len, start_dir, name);
+ done = do_in_path(p_pp, s, flags, callback, cookie);
+
+ xfree(s);
+ }
+
+ if ((done == FAIL || (flags & DIP_ALL)) && (flags & DIP_OPT)) {
+ char *opt_dir = "pack/*/opt/*/%s"; // NOLINT
+ size_t len = STRLEN(opt_dir) + STRLEN(name);
+ char_u *s = xmallocz(len);
+
+ vim_snprintf((char *)s, len, opt_dir, name);
+ done = do_in_path(p_pp, s, flags, callback, cookie);
+
+ xfree(s);
+ }
+
+ return done;
+}
+
+// Expand wildcards in "pat" and invoke do_source() for each match.
+static void source_all_matches(char_u *pat)
+{
+ int num_files;
+ char_u **files;
+
+ if (gen_expand_wildcards(1, &pat, &num_files, &files, EW_FILE) == OK) {
+ for (int i = 0; i < num_files; i++) {
+ (void)do_source(files[i], false, DOSO_NONE);
+ }
+ FreeWild(num_files, files);
+ }
+}
+
+// used for "cookie" of add_pack_plugin()
+static int APP_ADD_DIR;
+static int APP_LOAD;
+static int APP_BOTH;
+
+static void add_pack_plugin(char_u *fname, void *cookie)
+{
+ char_u *p4, *p3, *p2, *p1, *p;
+ char_u *new_rtp;
+ char_u *ffname = (char_u *)fix_fname((char *)fname);
+
+ if (ffname == NULL) {
+ return;
+ }
+
+ if (cookie != &APP_LOAD && strstr((char *)p_rtp, (char *)ffname) == NULL) {
+ // directory is not yet in 'runtimepath', add it
+ p4 = p3 = p2 = p1 = get_past_head(ffname);
+ for (p = p1; *p; mb_ptr_adv(p)) {
+ if (vim_ispathsep_nocolon(*p)) {
+ p4 = p3; p3 = p2; p2 = p1; p1 = p;
+ }
+ }
+
+ // now we have:
+ // rtp/pack/name/start/name
+ // p4 p3 p2 p1
+ //
+ // find the part up to "pack" in 'runtimepath'
+ char_u c = *p4;
+ *p4 = NUL;
+
+ // Find "ffname" in "p_rtp", ignoring '/' vs '\' differences
+ size_t fname_len = STRLEN(ffname);
+ char_u *insp = p_rtp;
+ for (;;) {
+ if (vim_fnamencmp(insp, ffname, fname_len) == 0) {
+ break;
+ }
+ insp = vim_strchr(insp, ',');
+ if (insp == NULL) {
+ break;
+ }
+ insp++;
+ }
+
+ if (insp == NULL) {
+ // not found, append at the end
+ insp = p_rtp + STRLEN(p_rtp);
+ } else {
+ // append after the matching directory.
+ insp += STRLEN(ffname);
+ while (*insp != NUL && *insp != ',') {
+ insp++;
+ }
+ }
+ *p4 = c;
+
+ // check if rtp/pack/name/start/name/after exists
+ char *afterdir = concat_fnames((char *)ffname, "after", true);
+ size_t afterlen = 0;
+ if (os_isdir((char_u *)afterdir)) {
+ afterlen = STRLEN(afterdir) + 1; // add one for comma
+ }
+
+ size_t oldlen = STRLEN(p_rtp);
+ size_t addlen = STRLEN(ffname) + 1; // add one for comma
+ new_rtp = try_malloc(oldlen + addlen + afterlen + 1); // add one for NUL
+ if (new_rtp == NULL) {
+ goto theend;
+ }
+ uintptr_t keep = (uintptr_t)(insp - p_rtp);
+ memmove(new_rtp, p_rtp, keep);
+ new_rtp[keep] = ',';
+ memmove(new_rtp + keep + 1, ffname, addlen);
+ if (p_rtp[keep] != NUL) {
+ memmove(new_rtp + keep + addlen, p_rtp + keep,
+ oldlen - keep + 1);
+ }
+ if (afterlen > 0) {
+ STRCAT(new_rtp, ",");
+ STRCAT(new_rtp, afterdir);
+ }
+ set_option_value((char_u *)"rtp", 0L, new_rtp, 0);
+ xfree(new_rtp);
+ xfree(afterdir);
+ }
+
+ if (cookie != &APP_ADD_DIR) {
+ static const char *plugpat = "%s/plugin/**/*.vim"; // NOLINT
+ static const char *ftpat = "%s/ftdetect/*.vim"; // NOLINT
+
+ size_t len = STRLEN(ffname) + STRLEN(ftpat);
+ char_u *pat = try_malloc(len + 1);
+ if (pat == NULL) {
+ goto theend;
+ }
+ vim_snprintf((char *)pat, len, plugpat, ffname);
+ source_all_matches(pat);
+
+ char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes");
+
+ // If runtime/filetype.vim wasn't loaded yet, the scripts will be
+ // found when it loads.
+ if (eval_to_number(cmd) > 0) {
+ do_cmdline_cmd("augroup filetypedetect");
+ vim_snprintf((char *)pat, len, ftpat, ffname);
+ source_all_matches(pat);
+ do_cmdline_cmd("augroup END");
+ }
+ xfree(cmd);
+ xfree(pat);
+ }
+
+theend:
+ xfree(ffname);
+}
+
+static bool did_source_packages = false;
+
+// ":packloadall"
+// Find plugins in the package directories and source them.
+void ex_packloadall(exarg_T *eap)
+{
+ if (!did_source_packages || (eap != NULL && eap->forceit)) {
+ did_source_packages = true;
+
+ // First do a round to add all directories to 'runtimepath', then load
+ // the plugins. This allows for plugins to use an autoload directory
+ // of another plugin.
+ do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
+ add_pack_plugin, &APP_ADD_DIR);
+ do_in_path(p_pp, (char_u *)"pack/*/start/*", DIP_ALL + DIP_DIR, // NOLINT
+ add_pack_plugin, &APP_LOAD);
+ }
+}
+
+/// ":packadd[!] {name}"
+void ex_packadd(exarg_T *eap)
+{
+ static const char *plugpat = "pack/*/opt/%s"; // NOLINT
+
+ size_t len = STRLEN(plugpat) + STRLEN(eap->arg);
+ char *pat = (char *)xmallocz(len);
+ vim_snprintf(pat, len, plugpat, eap->arg);
+ do_in_path(p_pp, (char_u *)pat, DIP_ALL + DIP_DIR + DIP_ERR, add_pack_plugin,
+ eap->forceit ? &APP_ADD_DIR : &APP_BOTH);
+ xfree(pat);
+}
+
+/// ":options"
void ex_options(exarg_T *eap)
{
cmd_source((char_u *)SYS_OPTWIN_FILE, NULL);
}
-/*
- * ":source {fname}"
- */
+/// ":source {fname}"
void ex_source(exarg_T *eap)
{
cmd_source(eap->arg, eap);
@@ -2432,96 +2627,82 @@ void ex_source(exarg_T *eap)
static void cmd_source(char_u *fname, exarg_T *eap)
{
- if (*fname == NUL)
+ if (*fname == NUL) {
EMSG(_(e_argreq));
-
- else if (eap != NULL && eap->forceit)
- /* ":source!": read Normal mode commands
- * Need to execute the commands directly. This is required at least
- * for:
- * - ":g" command busy
- * - after ":argdo", ":windo" or ":bufdo"
- * - another command follows
- * - inside a loop
- */
+ } else if (eap != NULL && eap->forceit) {
+ // ":source!": read Normal mode commands
+ // Need to execute the commands directly. This is required at least
+ // for:
+ // - ":g" command busy
+ // - after ":argdo", ":windo" or ":bufdo"
+ // - another command follows
+ // - inside a loop
openscript(fname, global_busy || listcmd_busy || eap->nextcmd != NULL
- || eap->cstack->cs_idx >= 0
- );
+ || eap->cstack->cs_idx >= 0);
- /* ":source" read ex commands */
- else if (do_source(fname, FALSE, DOSO_NONE) == FAIL)
+ // ":source" read ex commands
+ } else if (do_source(fname, false, DOSO_NONE) == FAIL) {
EMSG2(_(e_notopen), fname);
+ }
}
-/*
- * ":source" and associated commands.
- */
-
-/*
- * Return the address holding the next breakpoint line for a source cookie.
- */
+/// ":source" and associated commands.
+///
+/// @return address holding the next breakpoint line for a source cookie
linenr_T *source_breakpoint(void *cookie)
{
return &((struct source_cookie *)cookie)->breakpoint;
}
-/*
- * Return the address holding the debug tick for a source cookie.
- */
+/// Return the address holding the debug tick for a source cookie.
int *source_dbg_tick(void *cookie)
{
return &((struct source_cookie *)cookie)->dbg_tick;
}
-/*
- * Return the nesting level for a source cookie.
- */
+/// Return the nesting level for a source cookie.
int source_level(void *cookie)
{
return ((struct source_cookie *)cookie)->level;
}
-
-#if (defined(WIN32) && defined(FEAT_CSCOPE)) || defined(HAVE_FD_CLOEXEC)
-# define USE_FOPEN_NOINH
-/*
- * Special function to open a file without handle inheritance.
- * When possible the handle is closed on exec().
- */
+/// Special function to open a file without handle inheritance.
+/// If possible the handle is closed on exec().
static FILE *fopen_noinh_readbin(char *filename)
{
+#ifdef WIN32
+ int fd_tmp = os_open(filename, O_RDONLY | O_BINARY | O_NOINHERIT, 0);
+#else
int fd_tmp = os_open(filename, O_RDONLY, 0);
+#endif
- if (fd_tmp < 0)
+ if (fd_tmp < 0) {
return NULL;
+ }
-# ifdef HAVE_FD_CLOEXEC
+#ifdef HAVE_FD_CLOEXEC
{
int fdflags = fcntl(fd_tmp, F_GETFD);
if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) {
(void)fcntl(fd_tmp, F_SETFD, fdflags | FD_CLOEXEC);
}
}
-# endif
+#endif
return fdopen(fd_tmp, READBIN);
}
-#endif
-/*
- * do_source: Read the file "fname" and execute its lines as EX commands.
- *
- * This function may be called recursively!
- *
- * return FAIL if file could not be opened, OK otherwise
- */
-int
-do_source (
- char_u *fname,
- int check_other, /* check for .vimrc and _vimrc */
- int is_vimrc /* DOSO_ value */
-)
+/// Read the file "fname" and execute its lines as EX commands.
+///
+/// This function may be called recursively!
+///
+/// @param fname
+/// @param check_other check for .vimrc and _vimrc
+/// @param is_vimrc DOSO_ value
+///
+/// @return FAIL if file could not be opened, OK otherwise
+int do_source(char_u *fname, int check_other, int is_vimrc)
{
struct source_cookie cookie;
char_u *save_sourcing_name;
@@ -2538,125 +2719,113 @@ do_source (
proftime_T wait_start;
p = expand_env_save(fname);
- if (p == NULL)
+ if (p == NULL) {
return retval;
+ }
fname_exp = (char_u *)fix_fname((char *)p);
xfree(p);
- if (fname_exp == NULL)
+ if (fname_exp == NULL) {
return retval;
+ }
if (os_isdir(fname_exp)) {
smsg(_("Cannot source a directory: \"%s\""), fname);
goto theend;
}
- /* Apply SourceCmd autocommands, they should get the file and source it. */
+ // Apply SourceCmd autocommands, they should get the file and source it.
if (has_autocmd(EVENT_SOURCECMD, fname_exp, NULL)
&& apply_autocmds(EVENT_SOURCECMD, fname_exp, fname_exp,
- FALSE, curbuf)) {
+ false, curbuf)) {
retval = aborting() ? FAIL : OK;
goto theend;
}
- /* Apply SourcePre autocommands, they may get the file. */
- apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, FALSE, curbuf);
+ // Apply SourcePre autocommands, they may get the file.
+ apply_autocmds(EVENT_SOURCEPRE, fname_exp, fname_exp, false, curbuf);
-#ifdef USE_FOPEN_NOINH
cookie.fp = fopen_noinh_readbin((char *)fname_exp);
-#else
- cookie.fp = mch_fopen((char *)fname_exp, READBIN);
-#endif
if (cookie.fp == NULL && check_other) {
- /*
- * Try again, replacing file name ".vimrc" by "_vimrc" or vice versa,
- * and ".exrc" by "_exrc" or vice versa.
- */
+ // Try again, replacing file name ".vimrc" by "_vimrc" or vice versa,
+ // and ".exrc" by "_exrc" or vice versa.
p = path_tail(fname_exp);
if ((*p == '.' || *p == '_')
&& (STRICMP(p + 1, "nvimrc") == 0 || STRICMP(p + 1, "exrc") == 0)) {
- if (*p == '_')
- *p = '.';
- else
- *p = '_';
-#ifdef USE_FOPEN_NOINH
+ *p = (*p == '_') ? '.' : '_';
cookie.fp = fopen_noinh_readbin((char *)fname_exp);
-#else
- cookie.fp = mch_fopen((char *)fname_exp, READBIN);
-#endif
}
}
if (cookie.fp == NULL) {
if (p_verbose > 0) {
verbose_enter();
- if (sourcing_name == NULL)
+ if (sourcing_name == NULL) {
smsg(_("could not source \"%s\""), fname);
- else
+ } else {
smsg(_("line %" PRId64 ": could not source \"%s\""),
- (int64_t)sourcing_lnum, fname);
+ (int64_t)sourcing_lnum, fname);
+ }
verbose_leave();
}
goto theend;
}
- /*
- * The file exists.
- * - In verbose mode, give a message.
- * - For a vimrc file, may want to call vimrc_found().
- */
+ // The file exists.
+ // - In verbose mode, give a message.
+ // - For a vimrc file, may want to call vimrc_found().
if (p_verbose > 1) {
verbose_enter();
- if (sourcing_name == NULL)
+ if (sourcing_name == NULL) {
smsg(_("sourcing \"%s\""), fname);
- else
+ } else {
smsg(_("line %" PRId64 ": sourcing \"%s\""),
- (int64_t)sourcing_lnum, fname);
+ (int64_t)sourcing_lnum, fname);
+ }
verbose_leave();
}
- if (is_vimrc == DOSO_VIMRC)
+ if (is_vimrc == DOSO_VIMRC) {
vimrc_found(fname_exp, (char_u *)"MYVIMRC");
- else if (is_vimrc == DOSO_GVIMRC)
+ } else if (is_vimrc == DOSO_GVIMRC) {
vimrc_found(fname_exp, (char_u *)"MYGVIMRC");
+ }
#ifdef USE_CRNL
- /* If no automatic file format: Set default to CR-NL. */
- if (*p_ffs == NUL)
+ // If no automatic file format: Set default to CR-NL.
+ if (*p_ffs == NUL) {
cookie.fileformat = EOL_DOS;
- else
+ } else {
cookie.fileformat = EOL_UNKNOWN;
- cookie.error = FALSE;
+ }
+ cookie.error = false;
#endif
cookie.nextline = NULL;
- cookie.finished = FALSE;
+ cookie.finished = false;
- /*
- * Check if this script has a breakpoint.
- */
- cookie.breakpoint = dbg_find_breakpoint(TRUE, fname_exp, (linenr_T)0);
+ // Check if this script has a breakpoint.
+ cookie.breakpoint = dbg_find_breakpoint(true, fname_exp, (linenr_T)0);
cookie.fname = fname_exp;
cookie.dbg_tick = debug_tick;
cookie.level = ex_nesting_level;
- /*
- * Keep the sourcing name/lnum, for recursive calls.
- */
+ // Keep the sourcing name/lnum, for recursive calls.
save_sourcing_name = sourcing_name;
sourcing_name = fname_exp;
save_sourcing_lnum = sourcing_lnum;
sourcing_lnum = 0;
- cookie.conv.vc_type = CONV_NONE; /* no conversion */
+ cookie.conv.vc_type = CONV_NONE; // no conversion
- /* Read the first line so we can check for a UTF-8 BOM. */
+ // Read the first line so we can check for a UTF-8 BOM.
firstline = getsourceline(0, (void *)&cookie, 0);
if (firstline != NULL && STRLEN(firstline) >= 3 && firstline[0] == 0xef
&& firstline[1] == 0xbb && firstline[2] == 0xbf) {
- /* Found BOM; setup conversion, skip over BOM and recode the line. */
+ // Found BOM; setup conversion, skip over BOM and recode the line.
convert_setup(&cookie.conv, (char_u *)"utf-8", p_enc);
p = string_convert(&cookie.conv, firstline + 3, NULL);
- if (p == NULL)
+ if (p == NULL) {
p = vim_strsave(firstline + 3);
+ }
xfree(firstline);
firstline = p;
}
@@ -2671,22 +2840,21 @@ do_source (
}
const int l_do_profiling = do_profiling;
- if (l_do_profiling == PROF_YES)
- prof_child_enter(&wait_start); /* entering a child now */
+ if (l_do_profiling == PROF_YES) {
+ prof_child_enter(&wait_start); // entering a child now
+ }
- /* Don't use local function variables, if called from a function.
- * Also starts profiling timer for nested script. */
+ // Don't use local function variables, if called from a function.
+ // Also starts profiling timer for nested script.
save_funccalp = save_funccal();
- /*
- * Check if this script was sourced before to finds its SID.
- * If it's new, generate a new SID.
- */
+ // Check if this script was sourced before to finds its SID.
+ // If it's new, generate a new SID.
save_current_SID = current_SID;
FileID file_id;
bool file_id_ok = os_fileid((char *)fname_exp, &file_id);
assert(script_items.ga_len >= 0);
- for (current_SID = script_items.ga_len; current_SID > 0; --current_SID) {
+ for (current_SID = script_items.ga_len; current_SID > 0; current_SID--) {
si = &SCRIPT_ITEM(current_SID);
// Compare dev/ino when possible, it catches symbolic links.
// Also compare file names, the inode may change when the file was edited.
@@ -2701,7 +2869,7 @@ do_source (
current_SID = ++last_current_SID;
ga_grow(&script_items, (int)(current_SID - script_items.ga_len));
while (script_items.ga_len < current_SID) {
- ++script_items.ga_len;
+ script_items.ga_len++;
SCRIPT_ITEM(script_items.ga_len).sn_name = NULL;
SCRIPT_ITEM(script_items.ga_len).sn_prof_on = false;
}
@@ -2715,53 +2883,53 @@ do_source (
si->file_id_valid = false;
}
- /* Allocate the local script variables to use for this script. */
+ // Allocate the local script variables to use for this script.
new_script_vars(current_SID);
}
if (l_do_profiling == PROF_YES) {
- int forceit;
+ bool forceit;
- /* Check if we do profiling for this script. */
+ // Check if we do profiling for this script.
if (!si->sn_prof_on && has_profiling(true, si->sn_name, &forceit)) {
profile_init(si);
si->sn_pr_force = forceit;
}
if (si->sn_prof_on) {
- ++si->sn_pr_count;
+ si->sn_pr_count++;
si->sn_pr_start = profile_start();
si->sn_pr_children = profile_zero();
}
}
- /*
- * Call do_cmdline, which will call getsourceline() to get the lines.
- */
+ // Call do_cmdline, which will call getsourceline() to get the lines.
do_cmdline(firstline, getsourceline, (void *)&cookie,
- DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
+ DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT);
retval = OK;
if (l_do_profiling == PROF_YES) {
- /* Get "si" again, "script_items" may have been reallocated. */
+ // Get "si" again, "script_items" may have been reallocated.
si = &SCRIPT_ITEM(current_SID);
if (si->sn_prof_on) {
si->sn_pr_start = profile_end(si->sn_pr_start);
si->sn_pr_start = profile_sub_wait(wait_start, si->sn_pr_start);
si->sn_pr_total = profile_add(si->sn_pr_total, si->sn_pr_start);
si->sn_pr_self = profile_self(si->sn_pr_self, si->sn_pr_start,
- si->sn_pr_children);
+ si->sn_pr_children);
}
}
- if (got_int)
+ if (got_int) {
EMSG(_(e_interr));
+ }
sourcing_name = save_sourcing_name;
sourcing_lnum = save_sourcing_lnum;
if (p_verbose > 1) {
verbose_enter();
smsg(_("finished sourcing %s"), fname);
- if (sourcing_name != NULL)
+ if (sourcing_name != NULL) {
smsg(_("continuing in %s"), sourcing_name);
+ }
verbose_leave();
}
@@ -2771,18 +2939,18 @@ do_source (
time_pop(rel_time);
}
- /*
- * After a "finish" in debug mode, need to break at first command of next
- * sourced file.
- */
+ // After a "finish" in debug mode, need to break at first command of next
+ // sourced file.
if (save_debug_break_level > ex_nesting_level
- && debug_break_level == ex_nesting_level)
- ++debug_break_level;
+ && debug_break_level == ex_nesting_level) {
+ debug_break_level++;
+ }
current_SID = save_current_SID;
restore_funccal(save_funccalp);
- if (l_do_profiling == PROF_YES)
- prof_child_exit(&wait_start); /* leaving a child now */
+ if (l_do_profiling == PROF_YES) {
+ prof_child_exit(&wait_start); // leaving a child now
+ }
fclose(cookie.fp);
xfree(cookie.nextline);
xfree(firstline);
@@ -2794,26 +2962,23 @@ theend:
}
-/*
- * ":scriptnames"
- */
+/// ":scriptnames"
void ex_scriptnames(exarg_T *eap)
{
- for (int i = 1; i <= script_items.ga_len && !got_int; ++i)
+ for (int i = 1; i <= script_items.ga_len && !got_int; i++) {
if (SCRIPT_ITEM(i).sn_name != NULL) {
home_replace(NULL, SCRIPT_ITEM(i).sn_name,
- NameBuff, MAXPATHL, TRUE);
+ NameBuff, MAXPATHL, true);
smsg("%3d: %s", i, NameBuff);
}
+ }
}
# if defined(BACKSLASH_IN_FILENAME)
-/*
- * Fix slashes in the list of script names for 'shellslash'.
- */
+/// Fix slashes in the list of script names for 'shellslash'.
void scriptnames_slash_adjust(void)
{
- for (int i = 1; i <= script_items.ga_len; ++i) {
+ for (int i = 1; i <= script_items.ga_len; i++) {
if (SCRIPT_ITEM(i).sn_name != NULL) {
slash_adjust(SCRIPT_ITEM(i).sn_name);
}
@@ -2822,21 +2987,24 @@ void scriptnames_slash_adjust(void)
# endif
-/*
- * Get a pointer to a script name. Used for ":verbose set".
- */
+/// Get a pointer to a script name. Used for ":verbose set".
char_u *get_scriptname(scid_T id)
{
- if (id == SID_MODELINE)
+ if (id == SID_MODELINE) {
return (char_u *)_("modeline");
- if (id == SID_CMDARG)
+ }
+ if (id == SID_CMDARG) {
return (char_u *)_("--cmd argument");
- if (id == SID_CARG)
+ }
+ if (id == SID_CARG) {
return (char_u *)_("-c argument");
- if (id == SID_ENV)
+ }
+ if (id == SID_ENV) {
return (char_u *)_("environment variable");
- if (id == SID_ERROR)
+ }
+ if (id == SID_ERROR) {
return (char_u *)_("error handler");
+ }
return SCRIPT_ITEM(id).sn_name;
}
@@ -2849,51 +3017,49 @@ void free_scriptnames(void)
# endif
-/*
- * Get one full line from a sourced file.
- * Called by do_cmdline() when it's called from do_source().
- *
- * Return a pointer to the line in allocated memory.
- * Return NULL for end-of-file or some error.
- */
+/// Get one full line from a sourced file.
+/// Called by do_cmdline() when it's called from do_source().
+///
+/// @return pointer to the line in allocated memory, or NULL for end-of-file or
+/// some error.
char_u *getsourceline(int c, void *cookie, int indent)
{
struct source_cookie *sp = (struct source_cookie *)cookie;
- char_u *line;
- char_u *p;
+ char_u *line;
+ char_u *p;
- /* If breakpoints have been added/deleted need to check for it. */
+ // If breakpoints have been added/deleted need to check for it.
if (sp->dbg_tick < debug_tick) {
- sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum);
+ sp->breakpoint = dbg_find_breakpoint(true, sp->fname, sourcing_lnum);
sp->dbg_tick = debug_tick;
}
- if (do_profiling == PROF_YES)
+ if (do_profiling == PROF_YES) {
script_line_end();
- /*
- * Get current line. If there is a read-ahead line, use it, otherwise get
- * one now.
- */
- if (sp->finished)
+ }
+ // Get current line. If there is a read-ahead line, use it, otherwise get
+ // one now.
+ if (sp->finished) {
line = NULL;
- else if (sp->nextline == NULL)
+ } else if (sp->nextline == NULL) {
line = get_one_sourceline(sp);
- else {
+ } else {
line = sp->nextline;
sp->nextline = NULL;
- ++sourcing_lnum;
+ sourcing_lnum++;
}
- if (line != NULL && do_profiling == PROF_YES)
+ if (line != NULL && do_profiling == PROF_YES) {
script_line_start();
+ }
- /* Only concatenate lines starting with a \ when 'cpoptions' doesn't
- * contain the 'C' flag. */
+ // Only concatenate lines starting with a \ when 'cpoptions' doesn't
+ // contain the 'C' flag.
if (line != NULL && (vim_strchr(p_cpo, CPO_CONCAT) == NULL)) {
- /* compensate for the one line read-ahead */
- --sourcing_lnum;
+ // compensate for the one line read-ahead
+ sourcing_lnum--;
- /* Get the next line and concatenate it when it starts with a
- * backslash. We always need to read the next line, keep it in
- * sp->nextline. */
+ // Get the next line and concatenate it when it starts with a
+ // backslash. We always need to read the next line, keep it in
+ // sp->nextline.
sp->nextline = get_one_sourceline(sp);
if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\') {
garray_T ga;
@@ -2904,13 +3070,15 @@ char_u *getsourceline(int c, void *cookie, int indent)
for (;; ) {
xfree(sp->nextline);
sp->nextline = get_one_sourceline(sp);
- if (sp->nextline == NULL)
+ if (sp->nextline == NULL) {
break;
+ }
p = skipwhite(sp->nextline);
- if (*p != '\\')
+ if (*p != '\\') {
break;
- /* Adjust the growsize to the current length to speed up
- * concatenating many lines. */
+ }
+ // Adjust the growsize to the current length to speed up
+ // concatenating many lines.
if (ga.ga_len > 400) {
ga_set_growsize(&ga, (ga.ga_len > 8000) ? 8000 : ga.ga_len);
}
@@ -2925,7 +3093,7 @@ char_u *getsourceline(int c, void *cookie, int indent)
if (line != NULL && sp->conv.vc_type != CONV_NONE) {
char_u *s;
- /* Convert the encoding of the script line. */
+ // Convert the encoding of the script line.
s = string_convert(&sp->conv, line, NULL);
if (s != NULL) {
xfree(line);
@@ -2933,11 +3101,11 @@ char_u *getsourceline(int c, void *cookie, int indent)
}
}
- /* Did we encounter a breakpoint? */
+ // Did we encounter a breakpoint?
if (sp->breakpoint != 0 && sp->breakpoint <= sourcing_lnum) {
dbg_breakpoint(sp->fname, sourcing_lnum);
- /* Find next breakpoint. */
- sp->breakpoint = dbg_find_breakpoint(TRUE, sp->fname, sourcing_lnum);
+ // Find next breakpoint.
+ sp->breakpoint = dbg_find_breakpoint(true, sp->fname, sourcing_lnum);
sp->dbg_tick = debug_tick;
}
@@ -2951,175 +3119,170 @@ static char_u *get_one_sourceline(struct source_cookie *sp)
int c;
char_u *buf;
#ifdef USE_CRNL
- int has_cr; /* CR-LF found */
+ int has_cr; // CR-LF found
#endif
- int have_read = FALSE;
+ bool have_read = false;
- /* use a growarray to store the sourced line */
+ // use a growarray to store the sourced line
ga_init(&ga, 1, 250);
- /*
- * Loop until there is a finished line (or end-of-file).
- */
+ // Loop until there is a finished line (or end-of-file).
sourcing_lnum++;
for (;; ) {
- /* make room to read at least 120 (more) characters */
+ // make room to read at least 120 (more) characters
ga_grow(&ga, 120);
buf = (char_u *)ga.ga_data;
if (fgets((char *)buf + ga.ga_len, ga.ga_maxlen - ga.ga_len,
- sp->fp) == NULL)
+ sp->fp) == NULL) {
break;
+ }
len = ga.ga_len + (int)STRLEN(buf + ga.ga_len);
#ifdef USE_CRNL
- /* Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the
- * CTRL-Z by its own, or after a NL. */
- if ( (len == 1 || (len >= 2 && buf[len - 2] == '\n'))
- && sp->fileformat == EOL_DOS
- && buf[len - 1] == Ctrl_Z) {
+ // Ignore a trailing CTRL-Z, when in Dos mode. Only recognize the
+ // CTRL-Z by its own, or after a NL.
+ if ((len == 1 || (len >= 2 && buf[len - 2] == '\n'))
+ && sp->fileformat == EOL_DOS
+ && buf[len - 1] == Ctrl_Z) {
buf[len - 1] = NUL;
break;
}
#endif
- have_read = TRUE;
+ have_read = true;
ga.ga_len = len;
- /* If the line was longer than the buffer, read more. */
- if (ga.ga_maxlen - ga.ga_len == 1 && buf[len - 1] != '\n')
+ // If the line was longer than the buffer, read more.
+ if (ga.ga_maxlen - ga.ga_len == 1 && buf[len - 1] != '\n') {
continue;
+ }
- if (len >= 1 && buf[len - 1] == '\n') { /* remove trailing NL */
+ if (len >= 1 && buf[len - 1] == '\n') { // remove trailing NL
#ifdef USE_CRNL
has_cr = (len >= 2 && buf[len - 2] == '\r');
if (sp->fileformat == EOL_UNKNOWN) {
- if (has_cr)
+ if (has_cr) {
sp->fileformat = EOL_DOS;
- else
+ } else {
sp->fileformat = EOL_UNIX;
+ }
}
if (sp->fileformat == EOL_DOS) {
- if (has_cr) { /* replace trailing CR */
+ if (has_cr) { // replace trailing CR
buf[len - 2] = '\n';
- --len;
- --ga.ga_len;
- } else { /* lines like ":map xx yy^M" will have failed */
+ len--;
+ ga.ga_len--;
+ } else { // lines like ":map xx yy^M" will have failed
if (!sp->error) {
msg_source(hl_attr(HLF_W));
EMSG(_("W15: Warning: Wrong line separator, ^M may be missing"));
}
- sp->error = TRUE;
+ sp->error = true;
sp->fileformat = EOL_UNIX;
}
}
#endif
- /* The '\n' is escaped if there is an odd number of ^V's just
- * before it, first set "c" just before the 'V's and then check
- * len&c parities (is faster than ((len-c)%2 == 0)) -- Acevedo */
- for (c = len - 2; c >= 0 && buf[c] == Ctrl_V; c--)
- ;
- if ((len & 1) != (c & 1)) { /* escaped NL, read more */
+ // The '\n' is escaped if there is an odd number of ^V's just
+ // before it, first set "c" just before the 'V's and then check
+ // len&c parities (is faster than ((len-c)%2 == 0)) -- Acevedo
+ for (c = len - 2; c >= 0 && buf[c] == Ctrl_V; c--) {}
+ if ((len & 1) != (c & 1)) { // escaped NL, read more
sourcing_lnum++;
continue;
}
- buf[len - 1] = NUL; /* remove the NL */
+ buf[len - 1] = NUL; // remove the NL
}
- /*
- * Check for ^C here now and then, so recursive :so can be broken.
- */
+ // Check for ^C here now and then, so recursive :so can be broken.
line_breakcheck();
break;
}
- if (have_read)
+ if (have_read) {
return (char_u *)ga.ga_data;
+ }
xfree(ga.ga_data);
return NULL;
}
-/*
- * Called when starting to read a script line.
- * "sourcing_lnum" must be correct!
- * When skipping lines it may not actually be executed, but we won't find out
- * until later and we need to store the time now.
- */
+/// Called when starting to read a script line.
+/// "sourcing_lnum" must be correct!
+/// When skipping lines it may not actually be executed, but we won't find out
+/// until later and we need to store the time now.
void script_line_start(void)
{
scriptitem_T *si;
sn_prl_T *pp;
- if (current_SID <= 0 || current_SID > script_items.ga_len)
+ if (current_SID <= 0 || current_SID > script_items.ga_len) {
return;
+ }
si = &SCRIPT_ITEM(current_SID);
if (si->sn_prof_on && sourcing_lnum >= 1) {
- /* Grow the array before starting the timer, so that the time spent
- * here isn't counted. */
+ // Grow the array before starting the timer, so that the time spent
+ // here isn't counted.
ga_grow(&si->sn_prl_ga, (int)(sourcing_lnum - si->sn_prl_ga.ga_len));
si->sn_prl_idx = sourcing_lnum - 1;
while (si->sn_prl_ga.ga_len <= si->sn_prl_idx
&& si->sn_prl_ga.ga_len < si->sn_prl_ga.ga_maxlen) {
- /* Zero counters for a line that was not used before. */
+ // Zero counters for a line that was not used before.
pp = &PRL_ITEM(si, si->sn_prl_ga.ga_len);
pp->snp_count = 0;
pp->sn_prl_total = profile_zero();
pp->sn_prl_self = profile_zero();
- ++si->sn_prl_ga.ga_len;
+ si->sn_prl_ga.ga_len++;
}
- si->sn_prl_execed = FALSE;
+ si->sn_prl_execed = false;
si->sn_prl_start = profile_start();
si->sn_prl_children = profile_zero();
si->sn_prl_wait = profile_get_wait();
}
}
-/*
- * Called when actually executing a function line.
- */
+/// Called when actually executing a function line.
void script_line_exec(void)
{
scriptitem_T *si;
- if (current_SID <= 0 || current_SID > script_items.ga_len)
+ if (current_SID <= 0 || current_SID > script_items.ga_len) {
return;
+ }
si = &SCRIPT_ITEM(current_SID);
- if (si->sn_prof_on && si->sn_prl_idx >= 0)
- si->sn_prl_execed = TRUE;
+ if (si->sn_prof_on && si->sn_prl_idx >= 0) {
+ si->sn_prl_execed = true;
+ }
}
-/*
- * Called when done with a function line.
- */
+/// Called when done with a function line.
void script_line_end(void)
{
scriptitem_T *si;
sn_prl_T *pp;
- if (current_SID <= 0 || current_SID > script_items.ga_len)
+ if (current_SID <= 0 || current_SID > script_items.ga_len) {
return;
+ }
si = &SCRIPT_ITEM(current_SID);
if (si->sn_prof_on && si->sn_prl_idx >= 0
&& si->sn_prl_idx < si->sn_prl_ga.ga_len) {
if (si->sn_prl_execed) {
pp = &PRL_ITEM(si, si->sn_prl_idx);
- ++pp->snp_count;
+ pp->snp_count++;
si->sn_prl_start = profile_end(si->sn_prl_start);
si->sn_prl_start = profile_sub_wait(si->sn_prl_wait, si->sn_prl_start);
pp->sn_prl_total = profile_add(pp->sn_prl_total, si->sn_prl_start);
pp->sn_prl_self = profile_self(pp->sn_prl_self, si->sn_prl_start,
- si->sn_prl_children);
+ si->sn_prl_children);
}
si->sn_prl_idx = -1;
}
}
-/*
- * ":scriptencoding": Set encoding conversion for a sourced script.
- * Without the multi-byte feature it's simply ignored.
- */
+/// ":scriptencoding": Set encoding conversion for a sourced script.
+/// Without the multi-byte feature it's simply ignored.
void ex_scriptencoding(exarg_T *eap)
{
struct source_cookie *sp;
@@ -3132,84 +3295,80 @@ void ex_scriptencoding(exarg_T *eap)
if (*eap->arg != NUL) {
name = enc_canonize(eap->arg);
- } else
+ } else {
name = eap->arg;
+ }
- /* Setup for conversion from the specified encoding to 'encoding'. */
+ // Setup for conversion from the specified encoding to 'encoding'.
sp = (struct source_cookie *)getline_cookie(eap->getline, eap->cookie);
convert_setup(&sp->conv, name, p_enc);
- if (name != eap->arg)
+ if (name != eap->arg) {
xfree(name);
+ }
}
-/*
- * ":finish": Mark a sourced file as finished.
- */
+/// ":finish": Mark a sourced file as finished.
void ex_finish(exarg_T *eap)
{
- if (getline_equal(eap->getline, eap->cookie, getsourceline))
- do_finish(eap, FALSE);
- else
+ if (getline_equal(eap->getline, eap->cookie, getsourceline)) {
+ do_finish(eap, false);
+ } else {
EMSG(_("E168: :finish used outside of a sourced file"));
+ }
}
-/*
- * Mark a sourced file as finished. Possibly makes the ":finish" pending.
- * Also called for a pending finish at the ":endtry" or after returning from
- * an extra do_cmdline(). "reanimate" is used in the latter case.
- */
+/// Mark a sourced file as finished. Possibly makes the ":finish" pending.
+/// Also called for a pending finish at the ":endtry" or after returning from
+/// an extra do_cmdline(). "reanimate" is used in the latter case.
void do_finish(exarg_T *eap, int reanimate)
{
int idx;
- if (reanimate)
+ if (reanimate) {
((struct source_cookie *)getline_cookie(eap->getline,
- eap->cookie))->finished = FALSE;
-
- /*
- * Cleanup (and inactivate) conditionals, but stop when a try conditional
- * not in its finally clause (which then is to be executed next) is found.
- * In this case, make the ":finish" pending for execution at the ":endtry".
- * Otherwise, finish normally.
- */
- idx = cleanup_conditionals(eap->cstack, 0, TRUE);
+ eap->cookie))->finished = false;
+ }
+
+ // Cleanup (and inactivate) conditionals, but stop when a try conditional
+ // not in its finally clause (which then is to be executed next) is found.
+ // In this case, make the ":finish" pending for execution at the ":endtry".
+ // Otherwise, finish normally.
+ idx = cleanup_conditionals(eap->cstack, 0, true);
if (idx >= 0) {
eap->cstack->cs_pending[idx] = CSTP_FINISH;
report_make_pending(CSTP_FINISH, NULL);
- } else
+ } else {
((struct source_cookie *)getline_cookie(eap->getline,
- eap->cookie))->finished = TRUE;
+ eap->cookie))->finished = true;
+ }
}
-/*
- * Return TRUE when a sourced file had the ":finish" command: Don't give error
- * message for missing ":endif".
- * Return FALSE when not sourcing a file.
- */
-int source_finished(LineGetter fgetline, void *cookie)
+/// Return true when a sourced file had the ":finish" command: Don't give error
+/// message for missing ":endif".
+/// Return false when not sourcing a file.
+bool source_finished(LineGetter fgetline, void *cookie)
{
return getline_equal(fgetline, cookie, getsourceline)
&& ((struct source_cookie *)getline_cookie(
- fgetline, cookie))->finished;
+ fgetline, cookie))->finished;
}
-/*
- * ":checktime [buffer]"
- */
+/// ":checktime [buffer]"
void ex_checktime(exarg_T *eap)
{
buf_T *buf;
int save_no_check_timestamps = no_check_timestamps;
no_check_timestamps = 0;
- if (eap->addr_count == 0) /* default is all buffers */
- check_timestamps(FALSE);
- else {
+ if (eap->addr_count == 0) { // default is all buffers
+ check_timestamps(false);
+ } else {
buf = buflist_findnr((int)eap->line2);
- if (buf != NULL) /* cannot happen? */
- (void)buf_check_timestamp(buf, FALSE);
+ if (buf != NULL) { // cannot happen?
+ (void)buf_check_timestamp(buf, false);
+ }
}
no_check_timestamps = save_no_check_timestamps;
}
@@ -3228,10 +3387,8 @@ static char *get_locale_val(int what)
-/*
- * Obtain the current messages language. Used to set the default for
- * 'helplang'. May return NULL or an empty string.
- */
+/// Obtain the current messages language. Used to set the default for
+/// 'helplang'. May return NULL or an empty string.
char *get_mess_lang(void)
{
char *p;
@@ -3240,10 +3397,10 @@ char *get_mess_lang(void)
# if defined(LC_MESSAGES)
p = get_locale_val(LC_MESSAGES);
# else
- /* This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
- * may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
- * and LC_MONETARY may be set differently for a Japanese working in the
- * US. */
+ // This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
+ // may be set to the LCID number. LC_COLLATE is the best guess, LC_TIME
+ // and LC_MONETARY may be set differently for a Japanese working in the
+ // US.
p = get_locale_val(LC_COLLATE);
# endif
# else
@@ -3258,11 +3415,9 @@ char *get_mess_lang(void)
return p;
}
-/* Complicated #if; matches with where get_mess_env() is used below. */
+// Complicated #if; matches with where get_mess_env() is used below.
#ifdef HAVE_WORKING_LIBINTL
-/*
- * Get the language used for messages from the environment.
- */
+/// Get the language used for messages from the environment.
static char_u *get_mess_env(void)
{
char_u *p;
@@ -3273,7 +3428,7 @@ static char_u *get_mess_env(void)
if (p == NULL) {
p = (char_u *)os_getenv("LANG");
if (p != NULL && ascii_isdigit(*p)) {
- p = NULL; /* ignore something like "1043" */
+ p = NULL; // ignore something like "1043"
}
# ifdef HAVE_GET_LOCALE_VAL
if (p == NULL) {
@@ -3288,10 +3443,8 @@ static char_u *get_mess_env(void)
#endif
-/*
- * Set the "v:lang" variable according to the current locale setting.
- * Also do "v:lc_time"and "v:ctype".
- */
+/// Set the "v:lang" variable according to the current locale setting.
+/// Also do "v:lc_time"and "v:ctype".
void set_lang_var(void)
{
const char *loc;
@@ -3304,10 +3457,10 @@ void set_lang_var(void)
# endif
set_vim_var_string(VV_CTYPE, loc, -1);
- /* When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
- * back to LC_CTYPE if it's empty. */
+ // When LC_MESSAGES isn't defined use the value from $LC_MESSAGES, fall
+ // back to LC_CTYPE if it's empty.
# ifdef HAVE_WORKING_LIBINTL
- loc = (char *) get_mess_env();
+ loc = (char *)get_mess_env();
# elif defined(LC_MESSAGES)
loc = get_locale_val(LC_MESSAGES);
# else
@@ -3323,9 +3476,11 @@ void set_lang_var(void)
}
#ifdef HAVE_WORKING_LIBINTL
-/*
- * ":language": Set the language (locale).
- */
+///
+/// ":language": Set the language (locale).
+///
+/// @param eap
+///
void ex_language(exarg_T *eap)
{
char *loc;
@@ -3341,9 +3496,9 @@ void ex_language(exarg_T *eap)
name = eap->arg;
- /* Check for "messages {name}", "ctype {name}" or "time {name}" argument.
- * Allow abbreviation, but require at least 3 characters to avoid
- * confusion with a two letter language name "me" or "ct". */
+ // Check for "messages {name}", "ctype {name}" or "time {name}" argument.
+ // Allow abbreviation, but require at least 3 characters to avoid
+ // confusion with a two letter language name "me" or "ct".
p = skiptowhite(eap->arg);
if ((*p == NUL || ascii_iswhite(*p)) && p - eap->arg >= 3) {
if (STRNICMP(eap->arg, "messages", p - eap->arg) == 0) {
@@ -3363,47 +3518,52 @@ void ex_language(exarg_T *eap)
if (*name == NUL) {
#ifdef HAVE_WORKING_LIBINTL
- if (what == VIM_LC_MESSAGES)
+ if (what == VIM_LC_MESSAGES) {
p = get_mess_env();
- else
+ } else {
+#endif
+ p = (char_u *)setlocale(what, NULL);
+#ifdef HAVE_WORKING_LIBINTL
+ }
#endif
- p = (char_u *)setlocale(what, NULL);
- if (p == NULL || *p == NUL)
+ if (p == NULL || *p == NUL) {
p = (char_u *)"Unknown";
+ }
smsg(_("Current %slanguage: \"%s\""), whatstr, p);
} else {
#ifndef LC_MESSAGES
- if (what == VIM_LC_MESSAGES)
+ if (what == VIM_LC_MESSAGES) {
loc = "";
- else
+ } else {
#endif
- {
loc = setlocale(what, (char *)name);
#ifdef LC_NUMERIC
- /* Make sure strtod() uses a decimal point, not a comma. */
+ // Make sure strtod() uses a decimal point, not a comma.
setlocale(LC_NUMERIC, "C");
#endif
+#ifndef LC_MESSAGES
}
- if (loc == NULL)
+#endif
+ if (loc == NULL) {
EMSG2(_("E197: Cannot set language to \"%s\""), name);
- else {
+ } else {
#ifdef HAVE_NL_MSG_CAT_CNTR
- /* Need to do this for GNU gettext, otherwise cached translations
- * will be used again. */
+ // Need to do this for GNU gettext, otherwise cached translations
+ // will be used again.
extern int _nl_msg_cat_cntr;
- ++_nl_msg_cat_cntr;
+ _nl_msg_cat_cntr++;
#endif
- /* Reset $LC_ALL, otherwise it would overrule everything. */
+ // Reset $LC_ALL, otherwise it would overrule everything.
vim_setenv("LC_ALL", "");
if (what != LC_TIME) {
- /* Tell gettext() what to translate to. It apparently doesn't
- * use the currently effective locale. */
+ // Tell gettext() what to translate to. It apparently doesn't
+ // use the currently effective locale.
if (what == LC_ALL) {
vim_setenv("LANG", (char *)name);
- /* Clear $LANGUAGE because GNU gettext uses it. */
+ // Clear $LANGUAGE because GNU gettext uses it.
vim_setenv("LANGUAGE", "");
}
if (what != LC_CTYPE) {
@@ -3412,7 +3572,7 @@ void ex_language(exarg_T *eap)
}
}
- /* Set v:lang, v:lc_time and v:ctype to the final result. */
+ // Set v:lang, v:lc_time and v:ctype to the final result.
set_lang_var();
maketitle();
}
@@ -3420,43 +3580,43 @@ void ex_language(exarg_T *eap)
}
-static char_u **locales = NULL; /* Array of all available locales */
-static int did_init_locales = FALSE;
+static char_u **locales = NULL; // Array of all available locales
+static bool did_init_locales = false;
-/*
- * Lazy initialization of all available locales.
- */
+/// Lazy initialization of all available locales.
static void init_locales(void)
{
if (!did_init_locales) {
- did_init_locales = TRUE;
+ did_init_locales = true;
locales = find_locales();
}
}
-/* Return an array of strings for all available locales + NULL for the
- * last element. Return NULL in case of error. */
+// Return an array of strings for all available locales + NULL for the
+/// last element. Return NULL in case of error.
static char_u **find_locales(void)
{
garray_T locales_ga;
char_u *loc;
+ char *saveptr = NULL;
- /* Find all available locales by running command "locale -a". If this
- * doesn't work we won't have completion. */
+ // Find all available locales by running command "locale -a". If this
+ // doesn't work we won't have completion.
char_u *locale_a = get_cmd_output((char_u *)"locale -a", NULL,
kShellOptSilent, NULL);
- if (locale_a == NULL)
+ if (locale_a == NULL) {
return NULL;
+ }
ga_init(&locales_ga, sizeof(char_u *), 20);
- /* Transform locale_a string where each locale is separated by "\n"
- * into an array of locale strings. */
- loc = (char_u *)strtok((char *)locale_a, "\n");
+ // Transform locale_a string where each locale is separated by "\n"
+ // into an array of locale strings.
+ loc = (char_u *)os_strtok((char *)locale_a, "\n", &saveptr);
while (loc != NULL) {
loc = vim_strsave(loc);
GA_APPEND(char_u *, &locales_ga, loc);
- loc = (char_u *)strtok(NULL, "\n");
+ loc = (char_u *)os_strtok(NULL, "\n", &saveptr);
}
xfree(locale_a);
// Guarantee that .ga_data is NULL terminated
@@ -3470,8 +3630,9 @@ void free_locales(void)
{
int i;
if (locales != NULL) {
- for (i = 0; locales[i] != NULL; i++)
+ for (i = 0; locales[i] != NULL; i++) {
xfree(locales[i]);
+ }
xfree(locales);
locales = NULL;
}
@@ -3479,33 +3640,34 @@ void free_locales(void)
# endif
-/*
- * Function given to ExpandGeneric() to obtain the possible arguments of the
- * ":language" command.
- */
+/// Function given to ExpandGeneric() to obtain the possible arguments of the
+/// ":language" command.
char_u *get_lang_arg(expand_T *xp, int idx)
{
- if (idx == 0)
+ if (idx == 0) {
return (char_u *)"messages";
- if (idx == 1)
+ }
+ if (idx == 1) {
return (char_u *)"ctype";
- if (idx == 2)
+ }
+ if (idx == 2) {
return (char_u *)"time";
+ }
init_locales();
- if (locales == NULL)
+ if (locales == NULL) {
return NULL;
+ }
return locales[idx - 3];
}
-/*
- * Function given to ExpandGeneric() to obtain the available locales.
- */
+/// Function given to ExpandGeneric() to obtain the available locales.
char_u *get_locales(expand_T *xp, int idx)
{
init_locales();
- if (locales == NULL)
+ if (locales == NULL) {
return NULL;
+ }
return locales[idx];
}
@@ -3552,79 +3714,65 @@ static void script_host_do_range(char *name, exarg_T *eap)
(void)eval_call_provider(name, "do_range", args);
}
-/*
- * ":drop"
- * Opens the first argument in a window. When there are two or more arguments
- * the argument list is redefined.
- */
+/// ":drop"
+/// Opens the first argument in a window. When there are two or more arguments
+/// the argument list is redefined.
void ex_drop(exarg_T *eap)
{
- int split = FALSE;
- buf_T *buf;
-
- /*
- * Check if the first argument is already being edited in a window. If
- * so, jump to that window.
- * We would actually need to check all arguments, but that's complicated
- * and mostly only one file is dropped.
- * This also ignores wildcards, since it is very unlikely the user is
- * editing a file name with a wildcard character.
- */
- do_arglist(eap->arg, AL_SET, 0);
-
- /*
- * Expanding wildcards may result in an empty argument list. E.g. when
- * editing "foo.pyc" and ".pyc" is in 'wildignore'. Assume that we
- * already did an error message for this.
- */
- if (ARGCOUNT == 0)
- return;
-
- if (cmdmod.tab)
- {
- /* ":tab drop file ...": open a tab for each argument that isn't
- * edited in a window yet. It's like ":tab all" but without closing
- * windows or tabs. */
- ex_all(eap);
- }
- else
- {
- /* ":drop file ...": Edit the first argument. Jump to an existing
- * window if possible, edit in current window if the current buffer
- * can be abandoned, otherwise open a new window. */
- buf = buflist_findnr(ARGLIST[0].ae_fnum);
-
- FOR_ALL_TAB_WINDOWS(tp, wp)
- {
- if (wp->w_buffer == buf)
- {
- goto_tabpage_win(tp, wp);
- curwin->w_arg_idx = 0;
- return;
- }
- }
-
- /*
- * Check whether the current buffer is changed. If so, we will need
- * to split the current window or data could be lost.
- * Skip the check if the 'hidden' option is set, as in this case the
- * buffer won't be lost.
- */
- if (!P_HID(curbuf))
- {
- ++emsg_off;
- split = check_changed(curbuf, CCGD_AW | CCGD_EXCMD);
- --emsg_off;
- }
-
- /* Fake a ":sfirst" or ":first" command edit the first argument. */
- if (split)
- {
- eap->cmdidx = CMD_sfirst;
- eap->cmd[0] = 's';
- }
- else
- eap->cmdidx = CMD_first;
- ex_rewind(eap);
+ bool split = false;
+ buf_T *buf;
+
+ // Check if the first argument is already being edited in a window. If
+ // so, jump to that window.
+ // We would actually need to check all arguments, but that's complicated
+ // and mostly only one file is dropped.
+ // This also ignores wildcards, since it is very unlikely the user is
+ // editing a file name with a wildcard character.
+ do_arglist(eap->arg, AL_SET, 0);
+
+ // Expanding wildcards may result in an empty argument list. E.g. when
+ // editing "foo.pyc" and ".pyc" is in 'wildignore'. Assume that we
+ // already did an error message for this.
+ if (ARGCOUNT == 0) {
+ return;
+ }
+
+ if (cmdmod.tab) {
+ // ":tab drop file ...": open a tab for each argument that isn't
+ // edited in a window yet. It's like ":tab all" but without closing
+ // windows or tabs.
+ ex_all(eap);
+ } else {
+ // ":drop file ...": Edit the first argument. Jump to an existing
+ // window if possible, edit in current window if the current buffer
+ // can be abandoned, otherwise open a new window.
+ buf = buflist_findnr(ARGLIST[0].ae_fnum);
+
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp->w_buffer == buf) {
+ goto_tabpage_win(tp, wp);
+ curwin->w_arg_idx = 0;
+ return;
+ }
}
+
+ // Check whether the current buffer is changed. If so, we will need
+ // to split the current window or data could be lost.
+ // Skip the check if the 'hidden' option is set, as in this case the
+ // buffer won't be lost.
+ if (!P_HID(curbuf)) {
+ emsg_off++;
+ split = check_changed(curbuf, CCGD_AW | CCGD_EXCMD);
+ emsg_off--;
+ }
+
+ // Fake a ":sfirst" or ":first" command edit the first argument.
+ if (split) {
+ eap->cmdidx = CMD_sfirst;
+ eap->cmd[0] = 's';
+ } else {
+ eap->cmdidx = CMD_first;
+ }
+ ex_rewind(eap);
+ }
}
diff --git a/src/nvim/ex_cmds_defs.h b/src/nvim/ex_cmds_defs.h
index f46d1e6d47..c6389a0c8b 100644
--- a/src/nvim/ex_cmds_defs.h
+++ b/src/nvim/ex_cmds_defs.h
@@ -73,6 +73,7 @@
#define ADDR_BUFFERS 4
#define ADDR_TABS 5
#define ADDR_QUICKFIX 6
+#define ADDR_OTHER 99
typedef struct exarg exarg_T;
@@ -126,57 +127,53 @@ struct exarg {
struct condstack *cstack; ///< condition stack for ":if" etc.
};
-#define FORCE_BIN 1 /* ":edit ++bin file" */
-#define FORCE_NOBIN 2 /* ":edit ++nobin file" */
-
-/* Values for "flags" */
-#define EXFLAG_LIST 0x01 /* 'l': list */
-#define EXFLAG_NR 0x02 /* '#': number */
-#define EXFLAG_PRINT 0x04 /* 'p': print */
-
-/*
- * used for completion on the command line
- */
-typedef struct expand {
- int xp_context; /* type of expansion */
- char_u *xp_pattern; /* start of item to expand */
- int xp_pattern_len; /* bytes in xp_pattern before cursor */
- char_u *xp_arg; /* completion function */
- int xp_scriptID; /* SID for completion function */
- int xp_backslash; /* one of the XP_BS_ values */
+#define FORCE_BIN 1 // ":edit ++bin file"
+#define FORCE_NOBIN 2 // ":edit ++nobin file"
+
+// Values for "flags"
+#define EXFLAG_LIST 0x01 // 'l': list
+#define EXFLAG_NR 0x02 // '#': number
+#define EXFLAG_PRINT 0x04 // 'p': print
+
+// used for completion on the command line
+struct expand {
+ int xp_context; // type of expansion
+ char_u *xp_pattern; // start of item to expand
+ int xp_pattern_len; // bytes in xp_pattern before cursor
+ char_u *xp_arg; // completion function
+ int xp_scriptID; // SID for completion function
+ int xp_backslash; // one of the XP_BS_ values
#ifndef BACKSLASH_IN_FILENAME
- int xp_shell; /* TRUE for a shell command, more
- characters need to be escaped */
+ int xp_shell; // TRUE for a shell command, more
+ // characters need to be escaped
#endif
- int xp_numfiles; /* number of files found by
- file name completion */
- char_u **xp_files; /* list of files */
- char_u *xp_line; /* text being completed */
- int xp_col; /* cursor position in line */
-} expand_T;
-
-/* values for xp_backslash */
-#define XP_BS_NONE 0 /* nothing special for backslashes */
-#define XP_BS_ONE 1 /* uses one backslash before a space */
-#define XP_BS_THREE 2 /* uses three backslashes before a space */
+ int xp_numfiles; // number of files found by file name completion
+ char_u **xp_files; // list of files
+ char_u *xp_line; // text being completed
+ int xp_col; // cursor position in line
+};
-/*
- * Command modifiers ":vertical", ":browse", ":confirm" and ":hide" set a flag.
- * This needs to be saved for recursive commands, put them in a structure for
- * easy manipulation.
- */
+// values for xp_backslash
+#define XP_BS_NONE 0 // nothing special for backslashes
+#define XP_BS_ONE 1 // uses one backslash before a space
+#define XP_BS_THREE 2 // uses three backslashes before a space
+
+/// Command modifiers ":vertical", ":browse", ":confirm", ":hide", etc. set a
+/// flag. This needs to be saved for recursive commands, put them in a
+/// structure for easy manipulation.
typedef struct {
- int hide; /* TRUE when ":hide" was used */
- int split; /* flags for win_split() */
- int tab; /* > 0 when ":tab" was used */
- int confirm; /* TRUE to invoke yes/no dialog */
- int keepalt; /* TRUE when ":keepalt" was used */
- int keepmarks; /* TRUE when ":keepmarks" was used */
- int keepjumps; /* TRUE when ":keepjumps" was used */
- int lockmarks; /* TRUE when ":lockmarks" was used */
- int keeppatterns; /* TRUE when ":keeppatterns" was used */
- bool noswapfile; /* true when ":noswapfile" was used */
- char_u *save_ei; /* saved value of 'eventignore' */
+ int split; ///< flags for win_split()
+ int tab; ///< > 0 when ":tab" was used
+ bool browse; ///< true to invoke file dialog
+ bool confirm; ///< true to invoke yes/no dialog
+ bool hide; ///< true when ":hide" was used
+ bool keepalt; ///< true when ":keepalt" was used
+ bool keepjumps; ///< true when ":keepjumps" was used
+ bool keepmarks; ///< true when ":keepmarks" was used
+ bool keeppatterns; ///< true when ":keeppatterns" was used
+ bool lockmarks; ///< true when ":lockmarks" was used
+ bool noswapfile; ///< true when ":noswapfile" was used
+ char_u *save_ei; ///< saved value of 'eventignore'
} cmdmod_T;
#endif // NVIM_EX_CMDS_DEFS_H
diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c
index 870284a0f7..4070e9fe5b 100644
--- a/src/nvim/ex_docmd.c
+++ b/src/nvim/ex_docmd.c
@@ -36,7 +36,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
@@ -272,7 +271,7 @@ do_exmode (
int do_cmdline_cmd(char *cmd)
{
return do_cmdline((char_u *)cmd, NULL, NULL,
- DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_KEYTYPED);
+ DOCMD_NOWAIT|DOCMD_KEYTYPED);
}
/*
@@ -345,7 +344,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
msg_list = saved_msg_list;
return FAIL;
}
- ++call_depth;
+ call_depth++;
+ start_batch_changes();
cstack.cs_idx = -1;
cstack.cs_looplevel = 0;
@@ -597,11 +597,11 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
* do_one_cmd() will return NULL if there is no trailing '|'.
* "cmdline_copy" can change, e.g. for '%' and '#' expansion.
*/
- ++recursive;
- next_cmdline = do_one_cmd(&cmdline_copy, flags & DOCMD_VERBOSE,
- &cstack,
- cmd_getline, cmd_cookie);
- --recursive;
+ recursive++;
+ next_cmdline = do_one_cmd(&cmdline_copy, flags,
+ &cstack,
+ cmd_getline, cmd_cookie);
+ recursive--;
if (cmd_cookie == (void *)&cmd_loop_cookie)
/* Use "current_line" from "cmd_loop_cookie", it may have been
@@ -952,7 +952,8 @@ int do_cmdline(char_u *cmdline, LineGetter fgetline,
did_endif = FALSE; /* in case do_cmdline used recursively */
- --call_depth;
+ call_depth--;
+ end_batch_changes();
return retval;
}
@@ -1224,7 +1225,7 @@ static void get_wincmd_addr_type(char_u *arg, exarg_T *eap)
* This function may be called recursively!
*/
static char_u * do_one_cmd(char_u **cmdlinep,
- int sourcing,
+ int flags,
struct condstack *cstack,
LineGetter fgetline,
void *cookie /* argument for fgetline() */
@@ -1247,7 +1248,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
memset(&ea, 0, sizeof(ea));
ea.line1 = 1;
ea.line2 = 1;
- ++ex_nesting_level;
+ ex_nesting_level++;
/* When the last file has not been edited :q has to be typed twice. */
if (quitmore
@@ -1301,8 +1302,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
* 2. Handle command modifiers.
*/
p = ea.cmd;
- if (ascii_isdigit(*ea.cmd))
- p = skipwhite(skipdigits(ea.cmd));
+ p = skip_range(ea.cmd, NULL);
switch (*p) {
/* When adding an entry, also modify cmd_exists(). */
case 'a': if (!checkforcmd(&ea.cmd, "aboveleft", 3))
@@ -1313,8 +1313,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
case 'b': if (checkforcmd(&ea.cmd, "belowright", 3)) {
cmdmod.split |= WSP_BELOW;
continue;
- }
+ }
if (checkforcmd(&ea.cmd, "browse", 3)) {
+ cmdmod.browse = true;
continue;
}
if (!checkforcmd(&ea.cmd, "botright", 2))
@@ -1324,24 +1325,24 @@ static char_u * do_one_cmd(char_u **cmdlinep,
case 'c': if (!checkforcmd(&ea.cmd, "confirm", 4))
break;
- cmdmod.confirm = TRUE;
+ cmdmod.confirm = true;
continue;
case 'k': if (checkforcmd(&ea.cmd, "keepmarks", 3)) {
- cmdmod.keepmarks = TRUE;
+ cmdmod.keepmarks = true;
continue;
}
if (checkforcmd(&ea.cmd, "keepalt", 5)) {
- cmdmod.keepalt = TRUE;
+ cmdmod.keepalt = true;
continue;
}
if (checkforcmd(&ea.cmd, "keeppatterns", 5)) {
- cmdmod.keeppatterns = TRUE;
+ cmdmod.keeppatterns = true;
continue;
}
if (!checkforcmd(&ea.cmd, "keepjumps", 5))
break;
- cmdmod.keepjumps = TRUE;
+ cmdmod.keepjumps = true;
continue;
/* ":hide" and ":hide | cmd" are not modifiers */
@@ -1349,11 +1350,11 @@ static char_u * do_one_cmd(char_u **cmdlinep,
|| *p == NUL || ends_excmd(*p))
break;
ea.cmd = p;
- cmdmod.hide = TRUE;
+ cmdmod.hide = true;
continue;
case 'l': if (checkforcmd(&ea.cmd, "lockmarks", 3)) {
- cmdmod.lockmarks = TRUE;
+ cmdmod.lockmarks = true;
continue;
}
@@ -1373,7 +1374,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
}
continue;
}
- if (!checkforcmd(&ea.cmd, "noswapfile", 6)) {
+ if (!checkforcmd(&ea.cmd, "noswapfile", 3)) {
break;
}
cmdmod.noswapfile = true;
@@ -1404,12 +1405,18 @@ static char_u * do_one_cmd(char_u **cmdlinep,
continue;
case 't': if (checkforcmd(&p, "tab", 3)) {
- if (ascii_isdigit(*ea.cmd))
- cmdmod.tab = atoi((char *)ea.cmd) + 1;
- else
- cmdmod.tab = tabpage_index(curtab) + 1;
- ea.cmd = p;
- continue;
+ long tabnr = get_address(&ea, &ea.cmd, ADDR_TABS, ea.skip, false);
+ if (tabnr == MAXLNUM) {
+ cmdmod.tab = tabpage_index(curtab) + 1;
+ } else {
+ if (tabnr < 0 || tabnr > LAST_TAB_NR) {
+ errormsg = (char_u *)_(e_invrange);
+ goto doend;
+ }
+ cmdmod.tab = tabnr + 1;
+ }
+ ea.cmd = p;
+ continue;
}
if (!checkforcmd(&ea.cmd, "topleft", 2))
break;
@@ -1535,9 +1542,11 @@ static char_u * do_one_cmd(char_u **cmdlinep,
break;
}
ea.cmd = skipwhite(ea.cmd);
- lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip, ea.addr_count == 0);
- if (ea.cmd == NULL) /* error detected */
+ lnum = get_address(&ea, &ea.cmd, ea.addr_type, ea.skip,
+ ea.addr_count == 0);
+ if (ea.cmd == NULL) { // error detected
goto doend;
+ }
if (lnum == MAXLNUM) {
if (*ea.cmd == '%') { /* '%' - all lines */
++ea.cmd;
@@ -1702,7 +1711,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
xfree(p);
// If the autocommands did something and didn't cause an error, try
// finding the command again.
- p = (ret && !aborting()) ? find_command(&ea, NULL) : NULL;
+ p = (ret && !aborting()) ? find_command(&ea, NULL) : ea.cmd;
}
if (p == NULL) {
@@ -1718,8 +1727,9 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (ea.cmdidx == CMD_SIZE) {
if (!ea.skip) {
STRCPY(IObuff, _("E492: Not an editor command"));
- if (!sourcing)
+ if (!(flags & DOCMD_VERBOSE)) {
append_command(*cmdlinep);
+ }
errormsg = IObuff;
did_emsg_syntax = TRUE;
}
@@ -1763,11 +1773,8 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (text_locked() && !(ea.argt & CMDWIN)
&& !IS_USER_CMDIDX(ea.cmdidx)) {
- /* Command not allowed when editing the command line. */
- if (cmdwin_type != 0)
- errormsg = (char_u *)_(e_cmdwin);
- else
- errormsg = (char_u *)_(e_secure);
+ // Command not allowed when editing the command line.
+ errormsg = get_text_locked_msg();
goto doend;
}
/* Disallow editing another buffer when "curbuf_lock" is set.
@@ -1804,7 +1811,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
*/
if (!global_busy && ea.line1 > ea.line2) {
if (msg_silent == 0) {
- if (sourcing || exmode_active) {
+ if ((flags & DOCMD_VERBOSE) || exmode_active) {
errormsg = (char_u *)_("E493: Backwards range given");
goto doend;
}
@@ -2216,7 +2223,7 @@ doend:
curwin->w_cursor.lnum = 1;
if (errormsg != NULL && *errormsg != NUL && !did_emsg) {
- if (sourcing) {
+ if (flags & DOCMD_VERBOSE) {
if (errormsg != IObuff) {
STRCPY(IObuff, errormsg);
errormsg = IObuff;
@@ -3315,6 +3322,11 @@ set_one_cmd_context (
xp->xp_pattern = arg;
break;
+ case CMD_packadd:
+ xp->xp_context = EXPAND_PACKADD;
+ xp->xp_pattern = arg;
+ break;
+
#ifdef HAVE_WORKING_LIBINTL
case CMD_language:
p = skiptowhite(arg);
@@ -3842,7 +3854,7 @@ static char_u *replace_makeprg(exarg_T *eap, char_u *p, char_u **cmdlinep)
ptr = new_cmdline;
while ((pos = (char_u *)strstr((char *)program, "$*")) != NULL) {
i = (int)(pos - program);
- STRNCPY(ptr, program, i);
+ memcpy(ptr, program, i);
STRCPY(ptr += i, p);
ptr += len;
program = pos + 2;
@@ -4355,12 +4367,15 @@ static void ex_autocmd(exarg_T *eap)
*/
static void ex_doautocmd(exarg_T *eap)
{
- char_u *arg = eap->arg;
+ char_u *arg = eap->arg;
int call_do_modelines = check_nomodeline(&arg);
+ bool did_aucmd;
- (void)do_doautocmd(arg, TRUE);
- if (call_do_modelines) /* Only when there is no <nomodeline>. */
+ (void)do_doautocmd(arg, true, &did_aucmd);
+ // Only when there is no <nomodeline>.
+ if (call_do_modelines && did_aucmd) {
do_modelines(0);
+ }
}
/*
@@ -4640,14 +4655,14 @@ static struct {
char *name;
} addr_type_complete[] =
{
- {ADDR_ARGUMENTS, "arguments"},
- {ADDR_LINES, "lines"},
- {ADDR_LOADED_BUFFERS, "loaded_buffers"},
- {ADDR_TABS, "tabs"},
- {ADDR_BUFFERS, "buffers"},
- {ADDR_WINDOWS, "windows"},
- {ADDR_QUICKFIX, "quickfix"},
- {-1, NULL}
+ { ADDR_ARGUMENTS, "arguments" },
+ { ADDR_LINES, "lines" },
+ { ADDR_LOADED_BUFFERS, "loaded_buffers" },
+ { ADDR_TABS, "tabs" },
+ { ADDR_BUFFERS, "buffers" },
+ { ADDR_WINDOWS, "windows" },
+ { ADDR_QUICKFIX, "quickfix" },
+ { -1, NULL }
};
/*
@@ -4659,41 +4674,42 @@ static struct {
char *name;
} command_complete[] =
{
- {EXPAND_AUGROUP, "augroup"},
- {EXPAND_BEHAVE, "behave"},
- {EXPAND_BUFFERS, "buffer"},
- {EXPAND_COLORS, "color"},
- {EXPAND_COMMANDS, "command"},
- {EXPAND_COMPILER, "compiler"},
- {EXPAND_CSCOPE, "cscope"},
- {EXPAND_USER_DEFINED, "custom"},
- {EXPAND_USER_LIST, "customlist"},
- {EXPAND_DIRECTORIES, "dir"},
- {EXPAND_ENV_VARS, "environment"},
- {EXPAND_EVENTS, "event"},
- {EXPAND_EXPRESSION, "expression"},
- {EXPAND_FILES, "file"},
- {EXPAND_FILES_IN_PATH, "file_in_path"},
- {EXPAND_FILETYPE, "filetype"},
- {EXPAND_FUNCTIONS, "function"},
- {EXPAND_HELP, "help"},
- {EXPAND_HIGHLIGHT, "highlight"},
- {EXPAND_HISTORY, "history"},
+ { EXPAND_AUGROUP, "augroup" },
+ { EXPAND_BEHAVE, "behave" },
+ { EXPAND_BUFFERS, "buffer" },
+ { EXPAND_COLORS, "color" },
+ { EXPAND_COMMANDS, "command" },
+ { EXPAND_COMPILER, "compiler" },
+ { EXPAND_CSCOPE, "cscope" },
+ { EXPAND_USER_DEFINED, "custom" },
+ { EXPAND_USER_LIST, "customlist" },
+ { EXPAND_DIRECTORIES, "dir" },
+ { EXPAND_ENV_VARS, "environment" },
+ { EXPAND_EVENTS, "event" },
+ { EXPAND_EXPRESSION, "expression" },
+ { EXPAND_FILES, "file" },
+ { EXPAND_FILES_IN_PATH, "file_in_path" },
+ { EXPAND_FILETYPE, "filetype" },
+ { EXPAND_FUNCTIONS, "function" },
+ { EXPAND_HELP, "help" },
+ { EXPAND_HIGHLIGHT, "highlight" },
+ { EXPAND_HISTORY, "history" },
#ifdef HAVE_WORKING_LIBINTL
- {EXPAND_LOCALES, "locale"},
+ { EXPAND_LOCALES, "locale" },
#endif
- {EXPAND_MAPPINGS, "mapping"},
- {EXPAND_MENUS, "menu"},
- {EXPAND_OWNSYNTAX, "syntax"},
- {EXPAND_SYNTIME, "syntime"},
- {EXPAND_SETTINGS, "option"},
- {EXPAND_SHELLCMD, "shellcmd"},
- {EXPAND_SIGN, "sign"},
- {EXPAND_TAGS, "tag"},
- {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
- {EXPAND_USER, "user"},
- {EXPAND_USER_VARS, "var"},
- {0, NULL}
+ { EXPAND_MAPPINGS, "mapping" },
+ { EXPAND_MENUS, "menu" },
+ { EXPAND_OWNSYNTAX, "syntax" },
+ { EXPAND_SYNTIME, "syntime" },
+ { EXPAND_SETTINGS, "option" },
+ { EXPAND_PACKADD, "packadd" },
+ { EXPAND_SHELLCMD, "shellcmd" },
+ { EXPAND_SIGN, "sign" },
+ { EXPAND_TAGS, "tag" },
+ { EXPAND_TAGS_LISTFILES, "tag_listfiles" },
+ { EXPAND_USER, "user" },
+ { EXPAND_USER_VARS, "var" },
+ { 0, NULL }
};
static void uc_list(char_u *name, size_t name_len)
@@ -5146,6 +5162,24 @@ static char_u *uc_split_args(char_u *arg, size_t *lenp)
return buf;
}
+static size_t add_cmd_modifier(char_u *buf, char *mod_str, bool *multi_mods)
+{
+ size_t result = STRLEN(mod_str);
+ if (*multi_mods) {
+ result++;
+ }
+
+ if (buf != NULL) {
+ if (*multi_mods) {
+ STRCAT(buf, " ");
+ }
+ STRCAT(buf, mod_str);
+ }
+
+ *multi_mods = true;
+ return result;
+}
+
/*
* Check for a <> code in a user command.
* "code" points to the '<'. "len" the length of the <> (inclusive).
@@ -5170,8 +5204,8 @@ uc_check_code (
char_u *p = code + 1;
size_t l = len - 2;
int quote = 0;
- enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_REGISTER,
- ct_LT, ct_NONE } type = ct_NONE;
+ enum { ct_ARGS, ct_BANG, ct_COUNT, ct_LINE1, ct_LINE2, ct_MODS,
+ ct_REGISTER, ct_LT, ct_NONE } type = ct_NONE;
if ((vim_strchr((char_u *)"qQfF", *p) != NULL) && p[1] == '-') {
quote = (*p == 'q' || *p == 'Q') ? 1 : 2;
@@ -5179,23 +5213,26 @@ uc_check_code (
l -= 2;
}
- ++l;
- if (l <= 1)
+ l++;
+ if (l <= 1) {
type = ct_NONE;
- else if (STRNICMP(p, "args>", l) == 0)
+ } else if (STRNICMP(p, "args>", l) == 0) {
type = ct_ARGS;
- else if (STRNICMP(p, "bang>", l) == 0)
+ } else if (STRNICMP(p, "bang>", l) == 0) {
type = ct_BANG;
- else if (STRNICMP(p, "count>", l) == 0)
+ } else if (STRNICMP(p, "count>", l) == 0) {
type = ct_COUNT;
- else if (STRNICMP(p, "line1>", l) == 0)
+ } else if (STRNICMP(p, "line1>", l) == 0) {
type = ct_LINE1;
- else if (STRNICMP(p, "line2>", l) == 0)
+ } else if (STRNICMP(p, "line2>", l) == 0) {
type = ct_LINE2;
- else if (STRNICMP(p, "lt>", l) == 0)
+ } else if (STRNICMP(p, "lt>", l) == 0) {
type = ct_LT;
- else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0)
+ } else if (STRNICMP(p, "reg>", l) == 0 || STRNICMP(p, "register>", l) == 0) {
type = ct_REGISTER;
+ } else if (STRNICMP(p, "mods>", l) == 0) {
+ type = ct_MODS;
+ }
switch (type) {
case ct_ARGS:
@@ -5303,6 +5340,87 @@ uc_check_code (
break;
}
+ case ct_MODS:
+ {
+ result = quote ? 2 : 0;
+ if (buf != NULL) {
+ if (quote) {
+ *buf++ = '"';
+ }
+ *buf = '\0';
+ }
+
+ bool multi_mods = false;
+
+ // :aboveleft and :leftabove
+ if (cmdmod.split & WSP_ABOVE) {
+ result += add_cmd_modifier(buf, "aboveleft", &multi_mods);
+ }
+ // :belowright and :rightbelow
+ if (cmdmod.split & WSP_BELOW) {
+ result += add_cmd_modifier(buf, "belowright", &multi_mods);
+ }
+ // :botright
+ if (cmdmod.split & WSP_BOT) {
+ result += add_cmd_modifier(buf, "botright", &multi_mods);
+ }
+
+ typedef struct {
+ bool *set;
+ char *name;
+ } mod_entry_T;
+ static mod_entry_T mod_entries[] = {
+ { &cmdmod.browse, "browse" },
+ { &cmdmod.confirm, "confirm" },
+ { &cmdmod.hide, "hide" },
+ { &cmdmod.keepalt, "keepalt" },
+ { &cmdmod.keepjumps, "keepjumps" },
+ { &cmdmod.keepmarks, "keepmarks" },
+ { &cmdmod.keeppatterns, "keeppatterns" },
+ { &cmdmod.lockmarks, "lockmarks" },
+ { &cmdmod.noswapfile, "noswapfile" }
+ };
+ // the modifiers that are simple flags
+ for (size_t i = 0; i < ARRAY_SIZE(mod_entries); i++) {
+ if (*mod_entries[i].set) {
+ result += add_cmd_modifier(buf, mod_entries[i].name, &multi_mods);
+ }
+ }
+
+ // TODO(vim): How to support :noautocmd?
+ // TODO(vim): How to support :sandbox?
+
+ // :silent
+ if (msg_silent > 0) {
+ result += add_cmd_modifier(buf, emsg_silent > 0 ? "silent!" : "silent",
+ &multi_mods);
+ }
+ // :tab
+ if (cmdmod.tab > 0) {
+ result += add_cmd_modifier(buf, "tab", &multi_mods);
+ }
+ // :topleft
+ if (cmdmod.split & WSP_TOP) {
+ result += add_cmd_modifier(buf, "topleft", &multi_mods);
+ }
+
+ // TODO(vim): How to support :unsilent?
+
+ // :verbose
+ if (p_verbose > 0) {
+ result += add_cmd_modifier(buf, "verbose", &multi_mods);
+ }
+ // :vertical
+ if (cmdmod.split & WSP_VERT) {
+ result += add_cmd_modifier(buf, "vertical", &multi_mods);
+ }
+ if (quote && buf != NULL) {
+ buf += result - 2;
+ *buf = '"';
+ }
+ break;
+ }
+
case ct_REGISTER:
result = eap->regname ? 1 : 0;
if (quote)
@@ -5590,6 +5708,17 @@ int parse_compl_arg(char_u *value, int vallen, int *complp,
return OK;
}
+int cmdcomplete_str_to_type(char_u *complete_str)
+{
+ for (int i = 0; command_complete[i].expand != 0; i++) {
+ if (STRCMP(complete_str, command_complete[i].name) == 0) {
+ return command_complete[i].expand;
+ }
+ }
+
+ return EXPAND_NOTHING;
+}
+
static void ex_colorscheme(exarg_T *eap)
{
if (*eap->arg == NUL) {
@@ -6601,11 +6730,6 @@ do_exedit (
old_curwin == NULL ? curwin : NULL);
} else if ((eap->cmdidx != CMD_split && eap->cmdidx != CMD_vsplit)
|| *eap->arg != NUL) {
- // ":edit <blank>" is a no-op in terminal buffers. #2822
- if (curbuf->terminal != NULL && eap->cmdidx == CMD_edit && *eap->arg == NUL) {
- return;
- }
-
/* Can't edit another file when "curbuf_lock" is set. Only ":edit"
* can bring us here, others are stopped earlier. */
if (*eap->arg != NUL && curbuf_locked())
@@ -6786,9 +6910,10 @@ static void ex_read(exarg_T *eap)
eap->line2, (linenr_T)0, (linenr_T)MAXLNUM, eap, 0);
}
- if (i == FAIL) {
- if (!aborting())
+ if (i != OK) {
+ if (!aborting()) {
EMSG2(_(e_notopen), eap->arg);
+ }
} else {
if (empty && exmode_active) {
/* Delete the empty line that remains. Historically ex does
@@ -6865,13 +6990,14 @@ void post_chdir(CdScope scope)
curwin->w_localdir = vim_strsave(NameBuff);
}
break;
+ case kCdScopeInvalid:
+ // We should never get here
+ assert(false);
}
shorten_fnames(TRUE);
}
-
-
/// `:cd`, `:tcd`, `:lcd`, `:chdir`, `:tchdir` and `:lchdir`.
void ex_cd(exarg_T *eap)
{
@@ -6913,30 +7039,31 @@ void ex_cd(exarg_T *eap)
new_dir = NameBuff;
}
#endif
- if (vim_chdir(new_dir)) {
- EMSG(_(e_failed));
- } else {
- CdScope scope = kCdScopeGlobal; // Depends on command invoked
+ CdScope scope = kCdScopeGlobal; // Depends on command invoked
- switch (eap->cmdidx) {
- case CMD_tcd:
- case CMD_tchdir:
- scope = kCdScopeTab;
- break;
- case CMD_lcd:
- case CMD_lchdir:
- scope = kCdScopeWindow;
- break;
- default:
- break;
- }
+ switch (eap->cmdidx) {
+ case CMD_tcd:
+ case CMD_tchdir:
+ scope = kCdScopeTab;
+ break;
+ case CMD_lcd:
+ case CMD_lchdir:
+ scope = kCdScopeWindow;
+ break;
+ default:
+ break;
+ }
+ if (vim_chdir(new_dir, scope)) {
+ EMSG(_(e_failed));
+ } else {
post_chdir(scope);
-
- /* Echo the new current directory if the command was typed. */
- if (KeyTyped || p_verbose >= 5)
+ // Echo the new current directory if the command was typed.
+ if (KeyTyped || p_verbose >= 5) {
ex_pwd(eap);
+ }
}
+
xfree(tofree);
}
}
@@ -6989,10 +7116,10 @@ static void ex_sleep(exarg_T *eap)
*/
void do_sleep(long msec)
{
- long done;
ui_flush(); // flush before waiting
- for (done = 0; !got_int && done < msec; done += 1000L) {
- os_delay(msec - done > 1000L ? 1000L : msec - done, true);
+ for (long left = msec; !got_int && left > 0; left -= 1000L) {
+ int next = left > 1000l ? 1000 : (int)left;
+ LOOP_PROCESS_EVENTS_UNTIL(&main_loop, main_loop.events, (int)next, got_int);
os_breakcheck();
}
}
@@ -7122,8 +7249,8 @@ static void ex_put(exarg_T *eap)
eap->forceit = TRUE;
}
curwin->w_cursor.lnum = eap->line2;
- do_put(eap->regname, NULL, eap->forceit ? BACKWARD : FORWARD, 1L,
- PUT_LINE|PUT_CURSLINE);
+ do_put(eap->regname, NULL, eap->forceit ? BACKWARD : FORWARD, 1,
+ PUT_LINE|PUT_CURSLINE);
}
/*
@@ -7132,7 +7259,7 @@ static void ex_put(exarg_T *eap)
static void ex_copymove(exarg_T *eap)
{
long n = get_address(eap, &eap->arg, eap->addr_type, false, false);
- if (eap->arg == NULL) { /* error detected */
+ if (eap->arg == NULL) { // error detected
eap->nextcmd = NULL;
return;
}
@@ -7168,15 +7295,13 @@ void ex_may_print(exarg_T *eap)
}
}
-/*
- * ":smagic" and ":snomagic".
- */
+/// ":smagic" and ":snomagic".
static void ex_submagic(exarg_T *eap)
{
int magic_save = p_magic;
p_magic = (eap->cmdidx == CMD_smagic);
- do_sub(eap);
+ ex_substitute(eap);
p_magic = magic_save;
}
@@ -7351,10 +7476,11 @@ static void ex_redir(exarg_T *eap)
/* Can use both "@a" and "@a>". */
if (*arg == '>')
arg++;
- /* Make register empty when not using @A-@Z and the
- * command is valid. */
- if (*arg == NUL && !isupper(redir_reg))
- write_reg_contents(redir_reg, (char_u *)"", -1, FALSE);
+ // Make register empty when not using @A-@Z and the
+ // command is valid.
+ if (*arg == NUL && !isupper(redir_reg)) {
+ write_reg_contents(redir_reg, (char_u *)"", 0, false);
+ }
}
}
if (*arg != NUL) {
@@ -7645,7 +7771,7 @@ open_exfile (
return NULL;
}
#endif
- if (!forceit && *mode != 'a' && os_file_exists(fname)) {
+ if (!forceit && *mode != 'a' && os_path_exists(fname)) {
EMSG2(_("E189: \"%s\" exists (add ! to override)"), fname);
return NULL;
}
@@ -7792,9 +7918,8 @@ static void ex_normal(exarg_T *eap)
if (force_restart_edit) {
force_restart_edit = false;
} else {
- // some function called was aware of ex_normal and decided to override the
- // value of restart_edit anyway. So far only used in terminal mode(see
- // terminal_enter() in edit.c)
+ // Some function (terminal_enter()) was aware of ex_normal and decided to
+ // override the value of restart_edit anyway.
restart_edit = save_restart_edit;
}
p_im = save_insertmode;
@@ -7846,7 +7971,8 @@ static void ex_startinsert(exarg_T *eap)
static void ex_stopinsert(exarg_T *eap)
{
restart_edit = 0;
- stop_insert_mode = TRUE;
+ stop_insert_mode = true;
+ clearmode();
}
/*
@@ -7855,19 +7981,26 @@ static void ex_stopinsert(exarg_T *eap)
*/
void exec_normal_cmd(char_u *cmd, int remap, bool silent)
{
+ // Stuff the argument into the typeahead buffer.
+ ins_typebuf(cmd, remap, 0, true, silent);
+ exec_normal(false);
+}
+
+/// Execute normal_cmd() until there is no typeahead left.
+///
+/// @param was_typed whether or not something was typed
+void exec_normal(bool was_typed)
+{
oparg_T oa;
- /*
- * Stuff the argument into the typeahead buffer.
- * Execute normal_cmd() until there is no typeahead left.
- */
clear_oparg(&oa);
- finish_op = FALSE;
- ins_typebuf(cmd, remap, 0, TRUE, silent);
- while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0))
+ finish_op = false;
+ while ((!stuff_empty()
+ || ((was_typed || !typebuf_typed())
+ && typebuf.tb_len > 0))
&& !got_int) {
update_topline_cursor();
- normal_cmd(&oa, TRUE); /* execute a Normal mode cmd */
+ normal_cmd(&oa, true); // execute a Normal mode cmd
}
}
@@ -8622,17 +8755,18 @@ makeopens (
if (put_line(fd, "wincmd t") == FAIL)
return FAIL;
- /*
- * If more than one window, see if sizes can be restored.
- * First set 'winheight' and 'winwidth' to 1 to avoid the windows being
- * resized when moving between windows.
- * Do this before restoring the view, so that the topline and the
- * cursor can be set. This is done again below.
- */
- if (put_line(fd, "set winheight=1 winwidth=1") == FAIL)
+ // If more than one window, see if sizes can be restored.
+ // First set 'winheight' and 'winwidth' to 1 to avoid the windows being
+ // resized when moving between windows.
+ // Do this before restoring the view, so that the topline and the
+ // cursor can be set. This is done again below.
+ if (put_line(fd, "set winminheight=1 winminwidth=1 winheight=1 winwidth=1")
+ == FAIL) {
return FAIL;
- if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL)
+ }
+ if (nr > 1 && ses_winsizes(fd, restore_size, tab_firstwin) == FAIL) {
return FAIL;
+ }
/*
* Restore the view of the window (options, file, cursor, etc.).
@@ -8696,11 +8830,18 @@ makeopens (
if (put_line(fd, "unlet! s:wipebuf") == FAIL)
return FAIL;
- /* Re-apply 'winheight', 'winwidth' and 'shortmess'. */
- if (fprintf(fd, "set winheight=%" PRId64 " winwidth=%" PRId64 " shortmess=%s",
- (int64_t)p_wh, (int64_t)p_wiw, p_shm) < 0
- || put_eol(fd) == FAIL)
+ // Re-apply options.
+ if (fprintf(fd, "set winheight=%" PRId64 " winwidth=%" PRId64
+ " winminheight=%" PRId64 " winminwidth=%" PRId64
+ " shortmess=%s",
+ (int64_t)p_wh,
+ (int64_t)p_wiw,
+ (int64_t)p_wmh,
+ (int64_t)p_wmw,
+ p_shm) < 0
+ || put_eol(fd) == FAIL) {
return FAIL;
+ }
/*
* Lastly, execute the x.vim file if it exists.
@@ -9318,33 +9459,33 @@ static void ex_filetype(exarg_T *eap)
}
if (STRCMP(arg, "on") == 0 || STRCMP(arg, "detect") == 0) {
if (*arg == 'o' || !filetype_detect) {
- source_runtime((char_u *)FILETYPE_FILE, true);
+ source_runtime((char_u *)FILETYPE_FILE, DIP_ALL);
filetype_detect = kTrue;
if (plugin) {
- source_runtime((char_u *)FTPLUGIN_FILE, true);
+ source_runtime((char_u *)FTPLUGIN_FILE, DIP_ALL);
filetype_plugin = kTrue;
}
if (indent) {
- source_runtime((char_u *)INDENT_FILE, true);
+ source_runtime((char_u *)INDENT_FILE, DIP_ALL);
filetype_indent = kTrue;
}
}
if (*arg == 'd') {
- (void)do_doautocmd((char_u *)"filetypedetect BufRead", TRUE);
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", true, NULL);
do_modelines(0);
}
} else if (STRCMP(arg, "off") == 0) {
if (plugin || indent) {
if (plugin) {
- source_runtime((char_u *)FTPLUGOF_FILE, true);
+ source_runtime((char_u *)FTPLUGOF_FILE, DIP_ALL);
filetype_plugin = kFalse;
}
if (indent) {
- source_runtime((char_u *)INDOFF_FILE, true);
+ source_runtime((char_u *)INDOFF_FILE, DIP_ALL);
filetype_indent = kFalse;
}
} else {
- source_runtime((char_u *)FTOFF_FILE, true);
+ source_runtime((char_u *)FTOFF_FILE, DIP_ALL);
filetype_detect = kFalse;
}
} else
@@ -9481,20 +9622,15 @@ static void ex_foldopen(exarg_T *eap)
static void ex_folddo(exarg_T *eap)
{
- linenr_T lnum;
-
- start_global_changes();
-
- /* First set the marks for all lines closed/open. */
- for (lnum = eap->line1; lnum <= eap->line2; ++lnum)
- if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed))
+ // First set the marks for all lines closed/open.
+ for (linenr_T lnum = eap->line1; lnum <= eap->line2; ++lnum) {
+ if (hasFolding(lnum, NULL, NULL) == (eap->cmdidx == CMD_folddoclosed)) {
ml_setmarked(lnum);
+ }
+ }
- /* Execute the command on the marked lines. */
- global_exe(eap->arg);
- ml_clearmarked(); /* clear rest of the marks */
-
- end_global_changes();
+ global_exe(eap->arg); // Execute the command on the marked lines.
+ ml_clearmarked(); // clear rest of the marks
}
static void ex_terminal(exarg_T *eap)
@@ -9520,3 +9656,38 @@ static void ex_terminal(exarg_T *eap)
xfree(name);
}
}
+
+/// Checks if `cmd` is "previewable" (i.e. supported by 'inccommand').
+///
+/// @param[in] cmd Commandline to check. May start with a range.
+///
+/// @return true if `cmd` is previewable
+bool cmd_can_preview(char_u *cmd)
+{
+ if (cmd == NULL) {
+ return false;
+ }
+
+ exarg_T ea;
+ // parse the command line
+ ea.cmd = skip_range(cmd, NULL);
+ if (*ea.cmd == '*') {
+ ea.cmd = skipwhite(ea.cmd + 1);
+ }
+ char_u *end = find_command(&ea, NULL);
+
+ switch (ea.cmdidx) {
+ case CMD_substitute:
+ case CMD_smagic:
+ case CMD_snomagic:
+ // Only preview once the pattern delimiter has been typed
+ if (*end && !ASCII_ISALNUM(*end)) {
+ return true;
+ }
+ break;
+ default:
+ break;
+ }
+
+ return false;
+}
diff --git a/src/nvim/ex_docmd.h b/src/nvim/ex_docmd.h
index dbfc64e2f1..4def4cbbae 100644
--- a/src/nvim/ex_docmd.h
+++ b/src/nvim/ex_docmd.h
@@ -3,13 +3,13 @@
#include "nvim/ex_cmds_defs.h"
-/* flags for do_cmdline() */
-#define DOCMD_VERBOSE 0x01 /* included command in error message */
-#define DOCMD_NOWAIT 0x02 /* don't call wait_return() and friends */
-#define DOCMD_REPEAT 0x04 /* repeat exec. until getline() returns NULL */
-#define DOCMD_KEYTYPED 0x08 /* don't reset KeyTyped */
-#define DOCMD_EXCRESET 0x10 /* reset exception environment (for debugging)*/
-#define DOCMD_KEEPLINE 0x20 /* keep typed line for repeating with "." */
+// flags for do_cmdline()
+#define DOCMD_VERBOSE 0x01 // included command in error message
+#define DOCMD_NOWAIT 0x02 // don't call wait_return() and friends
+#define DOCMD_REPEAT 0x04 // repeat exec. until getline() returns NULL
+#define DOCMD_KEYTYPED 0x08 // don't reset KeyTyped
+#define DOCMD_EXCRESET 0x10 // reset exception environment (for debugging
+#define DOCMD_KEEPLINE 0x20 // keep typed line for repeating with "."
/* defines for eval_vars() */
#define VALID_PATH 1
@@ -19,20 +19,6 @@
#define EXMODE_NORMAL 1
#define EXMODE_VIM 2
-/// The scope of a working-directory command like `:cd`.
-///
-/// Scopes are enumerated from lowest to highest. When adding a scope make sure
-/// to update all functions using scopes as well, such as the implementation of
-/// `getcwd()`. When using scopes as limits (e.g. in loops) don't use the scopes
-/// directly, use `MIN_CD_SCOPE` and `MAX_CD_SCOPE` instead.
-typedef enum {
- kCdScopeWindow, ///< Affects one window.
- kCdScopeTab, ///< Affects one tab page.
- kCdScopeGlobal, ///< Affects the entire instance of Neovim.
-} CdScope;
-#define MIN_CD_SCOPE kCdScopeWindow
-#define MAX_CD_SCOPE kCdScopeGlobal
-
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ex_docmd.h.generated.h"
#endif
diff --git a/src/nvim/ex_eval.c b/src/nvim/ex_eval.c
index 82d4c2b2d5..f518fa0d66 100644
--- a/src/nvim/ex_eval.c
+++ b/src/nvim/ex_eval.c
@@ -15,7 +15,6 @@
#include "nvim/ex_cmds2.h"
#include "nvim/ex_docmd.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/regexp.h"
#include "nvim/strings.h"
diff --git a/src/nvim/ex_eval.h b/src/nvim/ex_eval.h
index 30871c7711..f61e01d25b 100644
--- a/src/nvim/ex_eval.h
+++ b/src/nvim/ex_eval.h
@@ -23,19 +23,19 @@ struct eslist_elem {
#define CSTACK_LEN 50
struct condstack {
- short cs_flags[CSTACK_LEN]; /* CSF_ flags */
- char cs_pending[CSTACK_LEN]; /* CSTP_: what's pending in ":finally"*/
+ int cs_flags[CSTACK_LEN]; // CSF_ flags
+ char cs_pending[CSTACK_LEN]; // CSTP_: what's pending in ":finally"
union {
- void *csp_rv[CSTACK_LEN]; /* return typeval for pending return */
- void *csp_ex[CSTACK_LEN]; /* exception for pending throw */
+ void *csp_rv[CSTACK_LEN]; // return typeval for pending return
+ void *csp_ex[CSTACK_LEN]; // exception for pending throw
} cs_pend;
- void *cs_forinfo[CSTACK_LEN]; /* info used by ":for" */
- int cs_line[CSTACK_LEN]; /* line nr of ":while"/":for" line */
- int cs_idx; /* current entry, or -1 if none */
- int cs_looplevel; /* nr of nested ":while"s and ":for"s */
- int cs_trylevel; /* nr of nested ":try"s */
- eslist_T *cs_emsg_silent_list; /* saved values of "emsg_silent" */
- char cs_lflags; /* loop flags: CSL_ flags */
+ void *cs_forinfo[CSTACK_LEN]; // info used by ":for"
+ int cs_line[CSTACK_LEN]; // line nr of ":while"/":for" line
+ int cs_idx; // current entry, or -1 if none
+ int cs_looplevel; // nr of nested ":while"s and ":for"s
+ int cs_trylevel; // nr of nested ":try"s
+ eslist_T *cs_emsg_silent_list; // saved values of "emsg_silent"
+ int cs_lflags; // loop flags: CSL_ flags
};
# define cs_rettv cs_pend.csp_rv
# define cs_exception cs_pend.csp_ex
diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c
index a4e5a4dcd7..dba7a73814 100644
--- a/src/nvim/ex_getln.c
+++ b/src/nvim/ex_getln.c
@@ -34,7 +34,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/cursor_shape.h"
#include "nvim/keymap.h"
@@ -96,19 +95,20 @@ typedef struct command_line_state {
char_u *lookfor; // string to match
int hiscnt; // current history line in use
int histype; // history type to be used
- pos_T old_cursor;
- colnr_T old_curswant;
- colnr_T old_leftcol;
- linenr_T old_topline;
- int old_topfill;
- linenr_T old_botline;
+ pos_T old_cursor;
+ colnr_T old_curswant;
+ colnr_T old_leftcol;
+ linenr_T old_topline;
+ int old_topfill;
+ linenr_T old_botline;
int did_incsearch;
int incsearch_postponed;
int did_wild_list; // did wild_list() recently
int wim_index; // index in wim_flags[]
int res;
- int save_msg_scroll;
- int save_State; // remember State when called
+ int save_msg_scroll;
+ int save_State; // remember State when called
+ char_u *save_p_icm;
int some_key_typed; // one of the keys was typed
// mouse drag and release events are ignored, unless they are
// preceded with a mouse down event
@@ -160,6 +160,7 @@ static uint8_t *command_line_enter(int firstc, long count, int indent)
s->indent = indent;
s->save_msg_scroll = msg_scroll;
s->save_State = State;
+ s->save_p_icm = vim_strsave(p_icm);
s->ignore_drag_release = true;
if (s->firstc == -1) {
@@ -324,9 +325,12 @@ static uint8_t *command_line_enter(int firstc, long count, int indent)
need_wait_return = false;
}
+ set_string_option_direct((char_u *)"icm", -1, s->save_p_icm, OPT_FREE,
+ SID_NONE);
State = s->save_State;
setmouse();
ui_cursor_shape(); // may show different cursor shape
+ xfree(s->save_p_icm);
{
char_u *p = ccline.cmdbuff;
@@ -358,7 +362,8 @@ static int command_line_execute(VimState *state, int key)
s->c = key;
if (s->c == K_EVENT) {
- queue_process_events(loop.events);
+ multiqueue_process_events(main_loop.events);
+ redrawcmdline();
return 1;
}
@@ -981,7 +986,6 @@ static int command_line_handle_key(CommandLineState *s)
status_redraw_curbuf();
return command_line_not_changed(s);
- // case '@': only in very old vi
case Ctrl_U:
// delete all characters left of the cursor
s->j = ccline.cmdpos;
@@ -996,7 +1000,6 @@ static int command_line_handle_key(CommandLineState *s)
redrawcmd();
return command_line_changed(s);
-
case ESC: // get here if p_wc != ESC or when ESC typed twice
case Ctrl_C:
// In exmode it doesn't make sense to return. Except when
@@ -1489,11 +1492,11 @@ static int command_line_handle_key(CommandLineState *s)
static int command_line_not_changed(CommandLineState *s)
{
- // This part implements incremental searches for "/" and "?" Jump to
- // cmdline_not_changed when a character has been read but the command line
- // did not change. Then we only search and redraw if something changed in
- // the past. Jump to cmdline_changed when the command line did change.
- // (Sorry for the goto's, I know it is ugly).
+ // Incremental searches for "/" and "?":
+ // Enter command_line_not_changed() when a character has been read but the
+ // command line did not change. Then we only search and redraw if something
+ // changed in the past.
+ // Enter command_line_changed() when the command line did change.
if (!s->incsearch_postponed) {
return 1;
}
@@ -1591,6 +1594,36 @@ static int command_line_changed(CommandLineState *s)
msg_starthere();
redrawcmdline();
s->did_incsearch = true;
+ } else if (s->firstc == ':'
+ && current_SID == 0 // only if interactive
+ && *p_icm != NUL // 'inccommand' is set
+ && curbuf->b_p_ma // buffer is modifiable
+ && cmdline_star == 0 // not typing a password
+ && cmd_can_preview(ccline.cmdbuff)
+ && !vpeekc_any()) {
+ // Show 'inccommand' preview. It works like this:
+ // 1. Do the command.
+ // 2. Command implementation detects CMDPREVIEW state, then:
+ // - Update the screen while the effects are in place.
+ // - Immediately undo the effects.
+ State |= CMDPREVIEW;
+ emsg_silent++; // Block error reporting as the command may be incomplete
+ do_cmdline(ccline.cmdbuff, NULL, NULL, DOCMD_KEEPLINE|DOCMD_NOWAIT);
+ emsg_silent--; // Unblock error reporting
+
+ // Restore the window "view".
+ curwin->w_cursor = s->old_cursor;
+ curwin->w_curswant = s->old_curswant;
+ curwin->w_leftcol = s->old_leftcol;
+ curwin->w_topline = s->old_topline;
+ curwin->w_topfill = s->old_topfill;
+ curwin->w_botline = s->old_botline;
+ update_topline();
+
+ redrawcmdline();
+ } else if (State & CMDPREVIEW) {
+ State = (State & ~CMDPREVIEW);
+ update_screen(SOME_VALID); // Clear 'inccommand' preview.
}
if (cmdmsg_rl || (p_arshape && !p_tbidi && enc_utf8)) {
@@ -1688,10 +1721,15 @@ int text_locked(void) {
*/
void text_locked_msg(void)
{
- if (cmdwin_type != 0)
- EMSG(_(e_cmdwin));
- else
- EMSG(_(e_secure));
+ EMSG(_(get_text_locked_msg()));
+}
+
+char_u * get_text_locked_msg(void) {
+ if (cmdwin_type != 0) {
+ return e_cmdwin;
+ } else {
+ return e_secure;
+ }
}
/*
@@ -2548,10 +2586,9 @@ static void cmdline_del(int from)
ccline.cmdpos = from;
}
-/*
- * this function is called when the screen size changes and with incremental
- * search
- */
+// This function is called when the screen size changes and with incremental
+// search and in other situations where the command line may have been
+// overwritten.
void redrawcmdline(void)
{
if (cmd_silent)
@@ -3439,6 +3476,7 @@ addstar (
|| context == EXPAND_COMPILER
|| context == EXPAND_OWNSYNTAX
|| context == EXPAND_FILETYPE
+ || context == EXPAND_PACKADD
|| (context == EXPAND_TAGS && fname[0] == '/'))
retval = vim_strnsave(fname, len);
else {
@@ -3577,15 +3615,16 @@ static void set_expand_context(expand_T *xp)
xp->xp_context = EXPAND_NOTHING;
return;
}
- set_cmd_context(xp, ccline.cmdbuff, ccline.cmdlen, ccline.cmdpos);
+ set_cmd_context(xp, ccline.cmdbuff, ccline.cmdlen, ccline.cmdpos, true);
}
void
set_cmd_context (
expand_T *xp,
- char_u *str, /* start of command line */
- int len, /* length of command line (excl. NUL) */
- int col /* position of cursor */
+ char_u *str, // start of command line
+ int len, // length of command line (excl. NUL)
+ int col, // position of cursor
+ int use_ccline // use ccline for info
)
{
int old_char = NUL;
@@ -3600,10 +3639,10 @@ set_cmd_context (
str[col] = NUL;
nextcomm = str;
- if (ccline.cmdfirstc == '=') {
- /* pass CMD_SIZE because there is no real command */
+ if (use_ccline && ccline.cmdfirstc == '=') {
+ // pass CMD_SIZE because there is no real command
set_context_for_expression(xp, str, CMD_SIZE);
- } else if (ccline.input_fn) {
+ } else if (use_ccline && ccline.input_fn) {
xp->xp_context = ccline.xp_context;
xp->xp_pattern = ccline.cmdbuff;
xp->xp_arg = ccline.xp_arg;
@@ -3668,27 +3707,54 @@ expand_cmdline (
return EXPAND_OK;
}
-/*
- * Cleanup matches for help tags: remove "@en" if "en" is the only language.
- */
-
+// Cleanup matches for help tags:
+// Remove "@ab" if the top of 'helplang' is "ab" and the language of the first
+// tag matches it. Otherwise remove "@en" if "en" is the only language.
static void cleanup_help_tags(int num_file, char_u **file)
{
- int i, j;
- int len;
+ char_u buf[4];
+ char_u *p = buf;
- for (i = 0; i < num_file; ++i) {
- len = (int)STRLEN(file[i]) - 3;
- if (len > 0 && STRCMP(file[i] + len, "@en") == 0) {
- /* Sorting on priority means the same item in another language may
- * be anywhere. Search all items for a match up to the "@en". */
- for (j = 0; j < num_file; ++j)
+ if (p_hlg[0] != NUL && (p_hlg[0] != 'e' || p_hlg[1] != 'n')) {
+ *p++ = '@';
+ *p++ = p_hlg[0];
+ *p++ = p_hlg[1];
+ }
+ *p = NUL;
+
+ for (int i = 0; i < num_file; i++) {
+ int len = (int)STRLEN(file[i]) - 3;
+ if (len <= 0) {
+ continue;
+ }
+ if (STRCMP(file[i] + len, "@en") == 0) {
+ // Sorting on priority means the same item in another language may
+ // be anywhere. Search all items for a match up to the "@en".
+ int j;
+ for (j = 0; j < num_file; j++) {
if (j != i
&& (int)STRLEN(file[j]) == len + 3
- && STRNCMP(file[i], file[j], len + 1) == 0)
+ && STRNCMP(file[i], file[j], len + 1) == 0) {
break;
- if (j == num_file)
+ }
+ }
+ if (j == num_file) {
+ // item only exists with @en, remove it
file[i][len] = NUL;
+ }
+ }
+ }
+
+ if (*buf != NUL) {
+ for (int i = 0; i < num_file; i++) {
+ int len = (int)STRLEN(file[i]) - 3;
+ if (len <= 0) {
+ continue;
+ }
+ if (STRCMP(file[i] + len, buf) == 0) {
+ // remove the default language
+ file[i][len] = NUL;
+ }
}
}
}
@@ -3793,23 +3859,27 @@ ExpandFromContext (
|| xp->xp_context == EXPAND_TAGS_LISTFILES)
return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
if (xp->xp_context == EXPAND_COLORS) {
- char *directories[] = {"colors", NULL};
- return ExpandRTDir(pat, num_file, file, directories);
+ char *directories[] = { "colors", NULL };
+ return ExpandRTDir(pat, DIP_START + DIP_OPT, num_file, file, directories);
}
if (xp->xp_context == EXPAND_COMPILER) {
- char *directories[] = {"compiler", NULL};
- return ExpandRTDir(pat, num_file, file, directories);
+ char *directories[] = { "compiler", NULL };
+ return ExpandRTDir(pat, 0, num_file, file, directories);
}
if (xp->xp_context == EXPAND_OWNSYNTAX) {
- char *directories[] = {"syntax", NULL};
- return ExpandRTDir(pat, num_file, file, directories);
+ char *directories[] = { "syntax", NULL };
+ return ExpandRTDir(pat, 0, num_file, file, directories);
}
if (xp->xp_context == EXPAND_FILETYPE) {
- char *directories[] = {"syntax", "indent", "ftplugin", NULL};
- return ExpandRTDir(pat, num_file, file, directories);
+ char *directories[] = { "syntax", "indent", "ftplugin", NULL };
+ return ExpandRTDir(pat, 0, num_file, file, directories);
}
- if (xp->xp_context == EXPAND_USER_LIST)
+ if (xp->xp_context == EXPAND_USER_LIST) {
return ExpandUserList(xp, num_file, file);
+ }
+ if (xp->xp_context == EXPAND_PACKADD) {
+ return ExpandPackAddDir(pat, num_file, file);
+ }
regmatch.regprog = vim_regcomp(pat, p_magic ? RE_MAGIC : 0);
if (regmatch.regprog == NULL)
@@ -4189,12 +4259,16 @@ static int ExpandUserList(expand_T *xp, int *num_file, char_u ***file)
return OK;
}
-/*
- * Expand color scheme, compiler or filetype names:
- * 'runtimepath'/{dirnames}/{pat}.vim
- * "dirnames" is an array with one or more directory names.
- */
-static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirnames[])
+/// Expand color scheme, compiler or filetype names.
+/// Search from 'runtimepath':
+/// 'runtimepath'/{dirnames}/{pat}.vim
+/// When "flags" has DIP_START: search also from 'start' of 'packpath':
+/// 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim
+/// When "flags" has DIP_OPT: search also from 'opt' of 'packpath':
+/// 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim
+/// "dirnames" is an array with one or more directory names.
+static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file,
+ char *dirnames[])
{
*num_file = 0;
*file = NULL;
@@ -4211,6 +4285,26 @@ static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname
xfree(s);
}
+ if (flags & DIP_START) {
+ for (int i = 0; dirnames[i] != NULL; i++) {
+ size_t size = STRLEN(dirnames[i]) + pat_len + 22;
+ char_u *s = xmalloc(size);
+ snprintf((char *)s, size, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
+ globpath(p_pp, s, &ga, 0);
+ xfree(s);
+ }
+ }
+
+ if (flags & DIP_OPT) {
+ for (int i = 0; dirnames[i] != NULL; i++) {
+ size_t size = STRLEN(dirnames[i]) + pat_len + 20;
+ char_u *s = xmalloc(size);
+ snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT
+ globpath(p_pp, s, &ga, 0);
+ xfree(s);
+ }
+ }
+
for (int i = 0; i < ga.ga_len; i++) {
char_u *match = ((char_u **)ga.ga_data)[i];
char_u *s = match;
@@ -4240,6 +4334,43 @@ static int ExpandRTDir(char_u *pat, int *num_file, char_u ***file, char *dirname
return OK;
}
+/// Expand loadplugin names:
+/// 'packpath'/pack/ * /opt/{pat}
+static int ExpandPackAddDir(char_u *pat, int *num_file, char_u ***file)
+{
+ garray_T ga;
+
+ *num_file = 0;
+ *file = NULL;
+ size_t pat_len = STRLEN(pat);
+ ga_init(&ga, (int)sizeof(char *), 10);
+
+ size_t buflen = pat_len + 26;
+ char_u *s = xmalloc(buflen);
+ snprintf((char *)s, buflen, "pack/*/opt/%s*", pat); // NOLINT
+ globpath(p_pp, s, &ga, 0);
+ xfree(s);
+
+ for (int i = 0; i < ga.ga_len; i++) {
+ char_u *match = ((char_u **)ga.ga_data)[i];
+ s = path_tail(match);
+ char_u *e = s + STRLEN(s);
+ memmove(match, s, e - s + 1);
+ }
+
+ if (GA_EMPTY(&ga)) {
+ return FAIL;
+ }
+
+ // Sort and remove duplicates which can happen when specifying multiple
+ // directories in dirnames.
+ ga_remove_duplicate_strings(&ga);
+
+ *file = ga.ga_data;
+ *num_file = ga.ga_len;
+ return OK;
+}
+
/// Expand `file` for all comma-separated directories in `path`.
/// Adds matches to `ga`.
@@ -4304,6 +4435,7 @@ static HistoryType hist_char2type(const int c)
case '>': {
return HIST_DEBUG;
}
+ case NUL:
case '/':
case '?': {
return HIST_SEARCH;
@@ -5039,16 +5171,14 @@ static int ex_window(void)
}
cmdwin_type = get_cmdline_type();
- /* Create the command-line buffer empty. */
- (void)do_ecmd(0, NULL, NULL, NULL, ECMD_ONE, ECMD_HIDE, NULL);
- (void)setfname(curbuf, (char_u *)"[Command Line]", NULL, TRUE);
- set_option_value((char_u *)"bt", 0L, (char_u *)"nofile", OPT_LOCAL);
- set_option_value((char_u *)"swf", 0L, NULL, OPT_LOCAL);
- curbuf->b_p_ma = TRUE;
- curwin->w_p_fen = FALSE;
+ // Create empty command-line buffer.
+ buf_open_scratch(0, "[Command Line]");
+ // Command-line buffer has bufhidden=wipe, unlike a true "scratch" buffer.
+ set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
curwin->w_p_rl = cmdmsg_rl;
- cmdmsg_rl = FALSE;
- RESET_BINDING(curwin);
+ cmdmsg_rl = false;
+ curbuf->b_p_ma = true;
+ curwin->w_p_fen = false;
/* Do execute autocommands for setting the filetype (load syntax). */
unblock_autocmds();
diff --git a/src/nvim/farsi.c b/src/nvim/farsi.c
index 61e17128ea..eb22ad1428 100644
--- a/src/nvim/farsi.c
+++ b/src/nvim/farsi.c
@@ -15,7 +15,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
#include "nvim/vim.h"
diff --git a/src/nvim/file_search.c b/src/nvim/file_search.c
index beefc4238e..d733ba311a 100644
--- a/src/nvim/file_search.c
+++ b/src/nvim/file_search.c
@@ -1,48 +1,44 @@
-/* TODO: make some #ifdef for this */
-/*--------[ file searching ]-------------------------------------------------*/
-/*
- * File searching functions for 'path', 'tags' and 'cdpath' options.
- * External visible functions:
- * vim_findfile_init() creates/initialises the search context
- * vim_findfile_free_visited() free list of visited files/dirs of search
- * context
- * vim_findfile() find a file in the search context
- * vim_findfile_cleanup() cleanup/free search context created by
- * vim_findfile_init()
- *
- * All static functions and variables start with 'ff_'
- *
- * In general it works like this:
- * First you create yourself a search context by calling vim_findfile_init().
- * It is possible to give a search context from a previous call to
- * vim_findfile_init(), so it can be reused. After this you call vim_findfile()
- * until you are satisfied with the result or it returns NULL. On every call it
- * returns the next file which matches the conditions given to
- * vim_findfile_init(). If it doesn't find a next file it returns NULL.
- *
- * It is possible to call vim_findfile_init() again to reinitialise your search
- * with some new parameters. Don't forget to pass your old search context to
- * it, so it can reuse it and especially reuse the list of already visited
- * directories. If you want to delete the list of already visited directories
- * simply call vim_findfile_free_visited().
- *
- * When you are done call vim_findfile_cleanup() to free the search context.
- *
- * The function vim_findfile_init() has a long comment, which describes the
- * needed parameters.
- *
- *
- *
- * ATTENTION:
- * ==========
- * Also we use an allocated search context here, this functions are NOT
- * thread-safe!!!!!
- *
- * To minimize parameter passing (or because I'm to lazy), only the
- * external visible functions get a search context as a parameter. This is
- * then assigned to a static global, which is used throughout the local
- * functions.
- */
+// File searching functions for 'path', 'tags' and 'cdpath' options.
+//
+// External visible functions:
+// vim_findfile_init() creates/initialises the search context
+// vim_findfile_free_visited() free list of visited files/dirs of search
+// context
+// vim_findfile() find a file in the search context
+// vim_findfile_cleanup() cleanup/free search context created by
+// vim_findfile_init()
+//
+// All static functions and variables start with 'ff_'
+//
+// In general it works like this:
+// First you create yourself a search context by calling vim_findfile_init().
+// It is possible to give a search context from a previous call to
+// vim_findfile_init(), so it can be reused. After this you call vim_findfile()
+// until you are satisfied with the result or it returns NULL. On every call it
+// returns the next file which matches the conditions given to
+// vim_findfile_init(). If it doesn't find a next file it returns NULL.
+//
+// It is possible to call vim_findfile_init() again to reinitialise your search
+// with some new parameters. Don't forget to pass your old search context to
+// it, so it can reuse it and especially reuse the list of already visited
+// directories. If you want to delete the list of already visited directories
+// simply call vim_findfile_free_visited().
+//
+// When you are done call vim_findfile_cleanup() to free the search context.
+//
+// The function vim_findfile_init() has a long comment, which describes the
+// needed parameters.
+//
+//
+//
+// ATTENTION:
+// ==========
+// We use an allocated search context, these functions are NOT thread-safe!!!!!
+//
+// To minimize parameter passing (or because I'm too lazy), only the
+// external visible functions get a search context as a parameter. This is
+// then assigned to a static global, which is used throughout the local
+// functions.
#include <assert.h>
#include <string.h>
@@ -52,6 +48,7 @@
#include <limits.h>
#include "nvim/vim.h"
+#include "nvim/eval.h"
#include "nvim/ascii.h"
#include "nvim/file_search.h"
#include "nvim/charset.h"
@@ -59,7 +56,7 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
+#include "nvim/option.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
#include "nvim/strings.h"
@@ -196,7 +193,6 @@ typedef struct ff_search_ctx_T {
static char_u e_pathtoolong[] = N_("E854: path too long for completion");
-
/*
* Initialization routine for vim_findfile().
*
@@ -791,7 +787,7 @@ char_u *vim_findfile(void *search_ctx_arg)
for (;; ) {
/* if file exists and we didn't already find it */
if ((path_with_url((char *)file_path)
- || (os_file_exists(file_path)
+ || (os_path_exists(file_path)
&& (search_ctx->ffsc_find_what
== FINDFILE_BOTH
|| ((search_ctx->ffsc_find_what
@@ -1153,7 +1149,7 @@ static ff_stack_T *ff_create_stack_element(char_u *fix_part, char_u *wc_part, in
new->ffs_filearray_cur = 0;
new->ffs_stage = 0;
new->ffs_level = level;
- new->ffs_star_star_empty = star_star_empty;;
+ new->ffs_star_star_empty = star_star_empty;
/* the following saves NULL pointer checks in vim_findfile */
if (fix_part == NULL)
@@ -1374,11 +1370,16 @@ find_file_in_path_option (
char_u *buf = NULL;
int rel_to_curdir;
+ if (rel_fname != NULL && path_with_url((const char *)rel_fname)) {
+ // Do not attempt to search "relative" to a URL. #6009
+ rel_fname = NULL;
+ }
+
if (first == TRUE) {
/* copy file name into NameBuff, expanding environment variables */
save_char = ptr[len];
ptr[len] = NUL;
- expand_env(ptr, NameBuff, MAXPATHL);
+ expand_env_esc(ptr, NameBuff, MAXPATHL, false, true, NULL);
ptr[len] = save_char;
xfree(ff_file_to_find);
@@ -1442,12 +1443,12 @@ find_file_in_path_option (
buf = suffixes;
for (;; ) {
if (
- (os_file_exists(NameBuff)
- && (find_what == FINDFILE_BOTH
- || ((find_what == FINDFILE_DIR)
- == os_isdir(NameBuff))))) {
- file_name = vim_strsave(NameBuff);
- goto theend;
+ (os_path_exists(NameBuff)
+ && (find_what == FINDFILE_BOTH
+ || ((find_what == FINDFILE_DIR)
+ == os_isdir(NameBuff))))) {
+ file_name = vim_strsave(NameBuff);
+ goto theend;
}
if (*buf == NUL)
break;
@@ -1526,3 +1527,79 @@ theend:
return file_name;
}
+static void do_autocmd_dirchanged(char_u *new_dir, CdScope scope)
+{
+ static bool recursive = false;
+
+ if (recursive || !has_event(EVENT_DIRCHANGED)) {
+ // No autocommand was defined or we changed
+ // the directory from this autocommand.
+ return;
+ }
+
+ recursive = true;
+
+ dict_T *dict = get_vim_var_dict(VV_EVENT);
+ char buf[8];
+
+ switch (scope) {
+ case kCdScopeGlobal:
+ snprintf(buf, sizeof(buf), "global");
+ break;
+ case kCdScopeTab:
+ snprintf(buf, sizeof(buf), "tab");
+ break;
+ case kCdScopeWindow:
+ snprintf(buf, sizeof(buf), "window");
+ break;
+ case kCdScopeInvalid:
+ // Should never happen.
+ assert(false);
+ }
+
+ dict_add_nr_str(dict, "scope", 0L, (char_u *)buf);
+ dict_add_nr_str(dict, "cwd", 0L, new_dir);
+ dict_set_keys_readonly(dict);
+
+ apply_autocmds(EVENT_DIRCHANGED, (char_u *)buf, new_dir, false, NULL);
+
+ dict_clear(dict);
+
+ recursive = false;
+}
+
+/// Change to a file's directory.
+/// Caller must call shorten_fnames()!
+/// @return OK or FAIL
+int vim_chdirfile(char_u *fname)
+{
+ char_u dir[MAXPATHL];
+
+ STRLCPY(dir, fname, MAXPATHL);
+ *path_tail_with_sep(dir) = NUL;
+ if (os_chdir((char *)dir) != 0) {
+ return FAIL;
+ }
+ do_autocmd_dirchanged(dir, kCdScopeWindow);
+
+ return OK;
+}
+
+/// Change directory to "new_dir". Search 'cdpath' for relative directory names.
+int vim_chdir(char_u *new_dir, CdScope scope)
+{
+ char_u *dir_name = find_directory_in_path(new_dir, STRLEN(new_dir),
+ FNAME_MESS, curbuf->b_ffname);
+ if (dir_name == NULL) {
+ return -1;
+ }
+
+ int r = os_chdir((char *)dir_name);
+ if (r == 0) {
+ do_autocmd_dirchanged(dir_name, scope);
+ }
+
+ xfree(dir_name);
+ return r;
+}
+
diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c
index db1469db97..d433afab3e 100644
--- a/src/nvim/fileio.c
+++ b/src/nvim/fileio.c
@@ -32,7 +32,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -44,6 +43,7 @@
#include "nvim/screen.h"
#include "nvim/search.h"
#include "nvim/sha256.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
#include "nvim/types.h"
@@ -51,6 +51,7 @@
#include "nvim/window.h"
#include "nvim/shada.h"
#include "nvim/os/os.h"
+#include "nvim/os/os_defs.h"
#include "nvim/os/time.h"
#include "nvim/os/input.h"
@@ -187,6 +188,14 @@ struct bw_info {
static char *e_auchangedbuf = N_(
"E812: Autocommands changed buffer or buffer name");
+// Set by the apply_autocmds_group function if the given event is equal to
+// EVENT_FILETYPE. Used by the readfile function in order to determine if
+// EVENT_BUFREADPOST triggered the EVENT_FILETYPE.
+//
+// Relying on this value requires one to reset it prior calling
+// apply_autocmds_group.
+static bool au_did_filetype INIT(= false);
+
void filemess(buf_T *buf, char_u *name, char_u *s, int attr)
{
int msg_scroll_save;
@@ -240,7 +249,7 @@ void filemess(buf_T *buf, char_u *name, char_u *s, int attr)
* READ_DUMMY read into a dummy buffer (to check if file contents changed)
* READ_KEEP_UNDO don't clear undo info or read it from a file
*
- * return FAIL for failure, OK otherwise
+ * return FAIL for failure, NOTDONE for directory (failure), or OK
*/
int
readfile (
@@ -249,7 +258,7 @@ readfile (
linenr_T from,
linenr_T lines_to_skip,
linenr_T lines_to_read,
- exarg_T *eap, /* can be NULL! */
+ exarg_T *eap, // can be NULL!
int flags
)
{
@@ -272,7 +281,7 @@ readfile (
int wasempty; /* buffer was empty before reading */
colnr_T len;
long size = 0;
- char_u *p;
+ char_u *p = NULL;
off_t filesize = 0;
int skip_read = FALSE;
context_sha256_T sha_ctx;
@@ -282,11 +291,9 @@ readfile (
int error = FALSE; /* errors encountered */
int ff_error = EOL_UNKNOWN; /* file format with errors */
long linerest = 0; /* remaining chars in line */
-#ifdef UNIX
int perm = 0;
+#ifdef UNIX
int swap_mode = -1; /* protection bits for swap file */
-#else
- int perm;
#endif
int fileformat = 0; /* end-of-line format */
int keep_fileformat = FALSE;
@@ -331,6 +338,8 @@ readfile (
int using_b_ffname;
int using_b_fname;
+ au_did_filetype = false; // reset before triggering any autocommands
+
curbuf->b_no_eol_lnum = 0; /* in case it was set by the previous read */
/*
@@ -418,32 +427,31 @@ readfile (
}
}
- if (!read_stdin && !read_buffer) {
-#ifdef UNIX
- /*
- * On Unix it is possible to read a directory, so we have to
- * check for it before os_open().
- */
+ if (!read_buffer && !read_stdin) {
perm = os_getperm(fname);
- if (perm >= 0 && !S_ISREG(perm) /* not a regular file ... */
+#ifdef UNIX
+ // On Unix it is possible to read a directory, so we have to
+ // check for it before os_open().
+ if (perm >= 0 && !S_ISREG(perm) // not a regular file ...
# ifdef S_ISFIFO
- && !S_ISFIFO(perm) /* ... or fifo */
+ && !S_ISFIFO(perm) // ... or fifo
# endif
# ifdef S_ISSOCK
- && !S_ISSOCK(perm) /* ... or socket */
+ && !S_ISSOCK(perm) // ... or socket
# endif
# ifdef OPEN_CHR_FILES
&& !(S_ISCHR(perm) && is_dev_fd_file(fname))
- /* ... or a character special file named /dev/fd/<n> */
+ // ... or a character special file named /dev/fd/<n>
# endif
) {
- if (S_ISDIR(perm))
+ if (S_ISDIR(perm)) {
filemess(curbuf, fname, (char_u *)_("is a directory"), 0);
- else
+ } else {
filemess(curbuf, fname, (char_u *)_("is not a file"), 0);
+ }
msg_end();
msg_scroll = msg_save;
- return FAIL;
+ return S_ISDIR(perm) ? NOTDONE : FAIL;
}
#endif
}
@@ -493,44 +501,31 @@ readfile (
curbuf->b_flags &= ~(BF_NEW | BF_NEW_W);
}
- /*
- * Check readonly by trying to open the file for writing.
- * If this fails, we know that the file is readonly.
- */
- file_readonly = FALSE;
+ // Check readonly.
+ file_readonly = false;
if (!read_buffer && !read_stdin) {
- if (!newfile || readonlymode) {
- file_readonly = TRUE;
- } else if ((fd = os_open((char *)fname, O_RDWR, 0)) < 0) {
- // opening in readwrite mode failed => file is readonly
- file_readonly = TRUE;
- }
- if (file_readonly == TRUE) {
- // try to open readonly
- fd = os_open((char *)fname, O_RDONLY, 0);
+ if (!newfile || readonlymode || !(perm & 0222)
+ || !os_file_is_writable((char *)fname)) {
+ file_readonly = true;
}
+ fd = os_open((char *)fname, O_RDONLY, 0);
}
- if (fd < 0) { /* cannot open at all */
+ if (fd < 0) { // cannot open at all
msg_scroll = msg_save;
#ifndef UNIX
- /*
- * On non-unix systems we can't open a directory, check here.
- */
- perm = os_getperm(fname); /* check if the file exists */
+ // On non-unix systems we can't open a directory, check here.
if (os_isdir(fname)) {
filemess(curbuf, sfname, (char_u *)_("is a directory"), 0);
- curbuf->b_p_ro = TRUE; /* must use "w!" now */
- } else
+ curbuf->b_p_ro = true; // must use "w!" now
+ } else {
#endif
if (!newfile) {
return FAIL;
}
- if (perm == UV_ENOENT) {
- /*
- * Set the 'new-file' flag, so that when the file has
- * been created by someone else, a ":w" will complain.
- */
+ if (perm == UV_ENOENT) { // check if the file exists
+ // Set the 'new-file' flag, so that when the file has
+ // been created by someone else, a ":w" will complain.
curbuf->b_flags |= BF_NEW;
/* Create a swap file now, so that other Vims are warned
@@ -581,6 +576,9 @@ readfile (
return FAIL;
}
+#ifndef UNIX
+ }
+#endif
/*
* Only set the 'ro' flag for readonly files the first time they are
@@ -1749,8 +1747,9 @@ failed:
#ifdef HAVE_FD_CLOEXEC
else {
int fdflags = fcntl(fd, F_GETFD);
- if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
- fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
+ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) {
+ (void)fcntl(fd, F_SETFD, fdflags | FD_CLOEXEC);
+ }
}
#endif
xfree(buffer);
@@ -1883,17 +1882,22 @@ failed:
xfree(keep_msg);
keep_msg = NULL;
+ p = NULL;
msg_scrolled_ign = TRUE;
- p = msg_trunc_attr(IObuff, FALSE, 0);
+
+ if (!read_stdin && !read_buffer) {
+ p = msg_trunc_attr(IObuff, FALSE, 0);
+ }
+
if (read_stdin || read_buffer || restart_edit != 0
- || (msg_scrolled != 0 && !need_wait_return))
- /* Need to repeat the message after redrawing when:
- * - When reading from stdin (the screen will be cleared next).
- * - When restart_edit is set (otherwise there will be a delay
- * before redrawing).
- * - When the screen was scrolled but there is no wait-return
- * prompt. */
+ || (msg_scrolled != 0 && !need_wait_return)) {
+ // Need to repeat the message after redrawing when:
+ // - When reading from stdin (the screen will be cleared next).
+ // - When restart_edit is set (otherwise there will be a delay before
+ // redrawing).
+ // - When the screen was scrolled but there is no wait-return prompt.
set_keep_msg(p, 0);
+ }
msg_scrolled_ign = FALSE;
}
@@ -1970,20 +1974,29 @@ failed:
* should not be overwritten: Set msg_scroll, restore its value if no
* output was done.
*/
- msg_scroll = TRUE;
- if (filtering)
+ msg_scroll = true;
+ if (filtering) {
apply_autocmds_exarg(EVENT_FILTERREADPOST, NULL, sfname,
- FALSE, curbuf, eap);
- else if (newfile)
+ false, curbuf, eap);
+ } else if (newfile) {
apply_autocmds_exarg(EVENT_BUFREADPOST, NULL, sfname,
- FALSE, curbuf, eap);
- else
+ false, curbuf, eap);
+ if (!au_did_filetype && *curbuf->b_p_ft != NUL) {
+ // EVENT_FILETYPE was not triggered but the buffer already has a
+ // filetype. Trigger EVENT_FILETYPE using the existing filetype.
+ apply_autocmds(EVENT_FILETYPE, curbuf->b_p_ft, curbuf->b_fname,
+ true, curbuf);
+ }
+ } else {
apply_autocmds_exarg(EVENT_FILEREADPOST, sfname, sfname,
- FALSE, NULL, eap);
- if (msg_scrolled == n)
+ false, NULL, eap);
+ }
+ if (msg_scrolled == n) {
msg_scroll = m;
- if (aborting()) /* autocmds may abort script processing */
+ }
+ if (aborting()) { // autocmds may abort script processing
return FAIL;
+ }
}
if (recoverymode && error)
@@ -2989,14 +3002,15 @@ nobackup:
* delete an existing one, try to use another name.
* Change one character, just before the extension.
*/
- if (!p_bk && os_file_exists(backup)) {
+ if (!p_bk && os_path_exists(backup)) {
p = backup + STRLEN(backup) - 1 - STRLEN(backup_ext);
if (p < backup) /* empty file name ??? */
p = backup;
*p = 'z';
- while (*p > 'a' && os_file_exists(backup))
- --*p;
- /* They all exist??? Must be something wrong! */
+ while (*p > 'a' && os_path_exists(backup)) {
+ (*p)--;
+ }
+ // They all exist??? Must be something wrong!
if (*p == 'a') {
xfree(backup);
backup = NULL;
@@ -3223,12 +3237,12 @@ restore_backup:
* This may not work if the vim_rename() fails.
* In that case we leave the copy around.
*/
- /* If file does not exist, put the copy in its place */
- if (!os_file_exists(fname)) {
+ // If file does not exist, put the copy in its place
+ if (!os_path_exists(fname)) {
vim_rename(backup, fname);
}
- /* if original file does exist throw away the copy */
- if (os_file_exists(fname)) {
+ // if original file does exist throw away the copy
+ if (os_path_exists(fname)) {
os_remove((char *)backup);
}
} else {
@@ -3237,8 +3251,8 @@ restore_backup:
}
}
- /* if original file no longer exists give an extra warning */
- if (!newfile && !os_file_exists(fname)) {
+ // if original file no longer exists give an extra warning
+ if (!newfile && !os_path_exists(fname)) {
end = 0;
}
}
@@ -3596,9 +3610,9 @@ restore_backup:
* If the original file does not exist yet
* the current backup file becomes the original file
*/
- if (org == NULL)
+ if (org == NULL) {
EMSG(_("E205: Patchmode: can't save original file"));
- else if (!os_file_exists((char_u *)org)) {
+ } else if (!os_path_exists((char_u *)org)) {
vim_rename(backup, (char_u *)org);
xfree(backup); /* don't delete the file */
backup = NULL;
@@ -3785,8 +3799,9 @@ static int set_rw_fname(char_u *fname, char_u *sfname)
/* Do filetype detection now if 'filetype' is empty. */
if (*curbuf->b_p_ft == NUL) {
- if (au_has_group((char_u *)"filetypedetect"))
- (void)do_doautocmd((char_u *)"filetypedetect BufRead", FALSE);
+ if (au_has_group((char_u *)"filetypedetect")) {
+ (void)do_doautocmd((char_u *)"filetypedetect BufRead", false, NULL);
+ }
do_modelines(0);
}
@@ -4176,9 +4191,8 @@ static bool need_conversion(const char_u *fenc)
same_encoding = (enc_flags != 0 && fenc_flags == enc_flags);
}
if (same_encoding) {
- /* Specified encoding matches with 'encoding'. This requires
- * conversion when 'encoding' is Unicode but not UTF-8. */
- return enc_unicode != 0;
+ // Specified file encoding matches UTF-8.
+ return false;
}
/* Encodings differ. However, conversion is not needed when 'enc' is any
@@ -4458,11 +4472,95 @@ bool vim_fgets(char_u *buf, int size, FILE *fp) FUNC_ATTR_NONNULL_ALL
return eof == NULL;
}
-/*
- * os_rename() only works if both files are on the same file system, this
- * function will (attempts to?) copy the file across if rename fails -- webb
- * Return -1 for failure, 0 for success.
- */
+/// Read 2 bytes from "fd" and turn them into an int, MSB first.
+int get2c(FILE *fd)
+{
+ int n;
+
+ n = getc(fd);
+ n = (n << 8) + getc(fd);
+ return n;
+}
+
+/// Read 3 bytes from "fd" and turn them into an int, MSB first.
+int get3c(FILE *fd)
+{
+ int n;
+
+ n = getc(fd);
+ n = (n << 8) + getc(fd);
+ n = (n << 8) + getc(fd);
+ return n;
+}
+
+/// Read 4 bytes from "fd" and turn them into an int, MSB first.
+int get4c(FILE *fd)
+{
+ // Use unsigned rather than int otherwise result is undefined
+ // when left-shift sets the MSB.
+ unsigned n;
+
+ n = (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ n = (n << 8) + (unsigned)getc(fd);
+ return (int)n;
+}
+
+/// Read 8 bytes from `fd` and turn them into a time_t, MSB first.
+time_t get8ctime(FILE *fd)
+{
+ time_t n = 0;
+ int i;
+
+ for (i = 0; i < 8; i++) {
+ n = (n << 8) + getc(fd);
+ }
+ return n;
+}
+
+/// Reads a string of length "cnt" from "fd" into allocated memory.
+/// @return pointer to the string or NULL when unable to read that many bytes.
+char *read_string(FILE *fd, size_t cnt)
+{
+ char *str = xmallocz(cnt);
+ for (size_t i = 0; i < cnt; i++) {
+ int c = getc(fd);
+ if (c == EOF) {
+ xfree(str);
+ return NULL;
+ }
+ str[i] = (char)c;
+ }
+ return str;
+}
+
+/// Writes a number to file "fd", most significant bit first, in "len" bytes.
+/// @returns false in case of an error.
+bool put_bytes(FILE *fd, uintmax_t number, size_t len)
+{
+ assert(len > 0);
+ for (size_t i = len - 1; i < len; i--) {
+ if (putc((int)(number >> (i * 8)), fd) == EOF) {
+ return false;
+ }
+ }
+ return true;
+}
+
+/// Writes time_t to file "fd" in 8 bytes.
+/// @returns FAIL when the write failed.
+int put_time(FILE *fd, time_t time_)
+{
+ uint8_t buf[8];
+ time_to_bytes(time_, buf);
+ return fwrite(buf, sizeof(uint8_t), ARRAY_SIZE(buf), fd) == 1 ? OK : FAIL;
+}
+
+/// os_rename() only works if both files are on the same file system, this
+/// function will (attempts to?) copy the file across if rename fails -- webb
+//
+/// @return -1 for failure, 0 for success
int vim_rename(char_u *from, char_u *to)
{
int fd_in;
@@ -4513,9 +4611,11 @@ int vim_rename(char_u *from, char_u *to)
if (STRLEN(from) >= MAXPATHL - 5)
return -1;
STRCPY(tempname, from);
- for (n = 123; n < 99999; ++n) {
- sprintf((char *)path_tail(tempname), "%d", n);
- if (!os_file_exists(tempname)) {
+ for (n = 123; n < 99999; n++) {
+ char * tail = (char *)path_tail(tempname);
+ snprintf(tail, (MAXPATHL + 1) - (tail - (char *)tempname - 1), "%d", n);
+
+ if (!os_path_exists(tempname)) {
if (os_rename(from, tempname) == OK) {
if (os_rename(tempname, to) == OK)
return 0;
@@ -4862,7 +4962,7 @@ buf_check_timestamp (
}
} else if ((buf->b_flags & BF_NEW) && !(buf->b_flags & BF_NEW_W)
- && os_file_exists(buf->b_ffname)) {
+ && os_path_exists(buf->b_ffname)) {
retval = 1;
mesg = _("W13: Warning: File \"%s\" has been created after editing started");
buf->b_flags |= BF_NEW_W;
@@ -4882,8 +4982,8 @@ buf_check_timestamp (
set_vim_var_string(VV_WARNINGMSG, tbuf, -1);
if (can_reload) {
if (*mesg2 != NUL) {
- strncat(tbuf, "\n", tbuf_len);
- strncat(tbuf, mesg2, tbuf_len);
+ xstrlcat(tbuf, "\n", tbuf_len - 1);
+ xstrlcat(tbuf, mesg2, tbuf_len - 1);
}
if (do_dialog(VIM_WARNING, (char_u *) _("Warning"), (char_u *) tbuf,
(char_u *) _("&OK\n&Load File"), 1, NULL, true) == 2) {
@@ -4891,8 +4991,8 @@ buf_check_timestamp (
}
} else if (State > NORMAL_BUSY || (State & CMDLINE) || already_warned) {
if (*mesg2 != NUL) {
- strncat(tbuf, "; ", tbuf_len);
- strncat(tbuf, mesg2, tbuf_len);
+ xstrlcat(tbuf, "; ", tbuf_len - 1);
+ xstrlcat(tbuf, mesg2, tbuf_len - 1);
}
EMSG(tbuf);
retval = 2;
@@ -4988,10 +5088,10 @@ void buf_reload(buf_T *buf, int orig_mode)
* the old contents. Can't use memory only, the file might be
* too big. Use a hidden buffer to move the buffer contents to.
*/
- if (bufempty() || saved == FAIL)
+ if (bufempty() || saved == FAIL) {
savebuf = NULL;
- else {
- /* Allocate a buffer without putting it in the buffer list. */
+ } else {
+ // Allocate a buffer without putting it in the buffer list.
savebuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
if (savebuf != NULL && buf == curbuf) {
/* Open the memline. */
@@ -5010,13 +5110,13 @@ void buf_reload(buf_T *buf, int orig_mode)
}
if (saved == OK) {
- curbuf->b_flags |= BF_CHECK_RO; /* check for RO again */
- keep_filetype = TRUE; /* don't detect 'filetype' */
- if (readfile(buf->b_ffname, buf->b_fname, (linenr_T)0,
- (linenr_T)0,
- (linenr_T)MAXLNUM, &ea, flags) == FAIL) {
- if (!aborting())
+ curbuf->b_flags |= BF_CHECK_RO; // check for RO again
+ keep_filetype = true; // don't detect 'filetype'
+ if (readfile(buf->b_ffname, buf->b_fname, (linenr_T)0, (linenr_T)0,
+ (linenr_T)MAXLNUM, &ea, flags) != OK) {
+ if (!aborting()) {
EMSG2(_("E321: Could not reload \"%s\""), buf->b_fname);
+ }
if (savebuf != NULL && buf_valid(savebuf) && buf == curbuf) {
/* Put the text back from the save buffer. First
* delete any lines that readfile() added. */
@@ -5131,6 +5231,10 @@ static void vim_maketempdir(void)
// Try the entries in `TEMP_DIR_NAMES` to create the temp directory.
char_u template[TEMP_FILE_PATH_MAXLEN];
char_u path[TEMP_FILE_PATH_MAXLEN];
+
+ // Make sure the umask doesn't remove the executable bit.
+ // "repl" has been reported to use "0177".
+ mode_t umask_save = umask(0077);
for (size_t i = 0; i < ARRAY_SIZE(temp_dirs); i++) {
// Expand environment variables, leave room for "/nvimXXXXXX/999999999"
expand_env((char_u *)temp_dirs[i], template, TEMP_FILE_PATH_MAXLEN - 22);
@@ -5154,6 +5258,7 @@ static void vim_maketempdir(void)
os_rmdir((char *)path);
}
}
+ (void)umask(umask_save);
}
/// Delete "name" and everything in it, recursively.
@@ -5273,6 +5378,8 @@ static AutoPatCmd *active_apc_list = NULL; /* stack of active autocommands */
*/
static garray_T augroups = {0, 0, sizeof(char_u *), 10, NULL};
#define AUGROUP_NAME(i) (((char_u **)augroups.ga_data)[i])
+// use get_deleted_augroup() to get this
+static char_u *deleted_augroup = NULL;
/*
* The ID of the current group. Group 0 is the default one.
@@ -5287,6 +5394,14 @@ static event_T last_event;
static int last_group;
static int autocmd_blocked = 0; /* block all autocmds */
+static char_u *get_deleted_augroup(void)
+{
+ if (deleted_augroup == NULL) {
+ deleted_augroup = (char_u *)_("--Deleted--");
+ }
+ return deleted_augroup;
+}
+
/*
* Show the autocommands for one AutoPat.
*/
@@ -5306,10 +5421,11 @@ static void show_autocmd(AutoPat *ap, event_T event)
return;
if (event != last_event || ap->group != last_group) {
if (ap->group != AUGROUP_DEFAULT) {
- if (AUGROUP_NAME(ap->group) == NULL)
- msg_puts_attr((char_u *)_("--Deleted--"), hl_attr(HLF_E));
- else
+ if (AUGROUP_NAME(ap->group) == NULL) {
+ msg_puts_attr(get_deleted_augroup(), hl_attr(HLF_E));
+ } else {
msg_puts_attr(AUGROUP_NAME(ap->group), hl_attr(HLF_T));
+ }
msg_puts((char_u *)" ");
}
msg_puts_attr(event_nr2name(event), hl_attr(HLF_T));
@@ -5475,11 +5591,33 @@ static void au_del_group(char_u *name)
int i;
i = au_find_group(name);
- if (i == AUGROUP_ERROR) /* the group doesn't exist */
+ if (i == AUGROUP_ERROR) { // the group doesn't exist
EMSG2(_("E367: No such group: \"%s\""), name);
- else {
+ } else if (i == current_augroup) {
+ EMSG(_("E936: Cannot delete the current group"));
+ } else {
+ event_T event;
+ AutoPat *ap;
+ int in_use = false;
+
+ for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
+ event = (event_T)((int)event + 1)) {
+ for (ap = first_autopat[(int)event]; ap != NULL; ap = ap->next) {
+ if (ap->group == i && ap->pat != NULL) {
+ give_warning((char_u *)
+ _("W19: Deleting augroup that is still in use"), true);
+ in_use = true;
+ event = NUM_EVENTS;
+ break;
+ }
+ }
+ }
xfree(AUGROUP_NAME(i));
- AUGROUP_NAME(i) = NULL;
+ if (in_use) {
+ AUGROUP_NAME(i) = get_deleted_augroup();
+ } else {
+ AUGROUP_NAME(i) = NULL;
+ }
}
}
@@ -5491,8 +5629,9 @@ static void au_del_group(char_u *name)
static int au_find_group(const char_u *name)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
{
- for (int i = 0; i < augroups.ga_len; ++i) {
- if (AUGROUP_NAME(i) != NULL && STRCMP(AUGROUP_NAME(i), name) == 0) {
+ for (int i = 0; i < augroups.ga_len; i++) {
+ if (AUGROUP_NAME(i) != NULL && AUGROUP_NAME(i) != get_deleted_augroup()
+ && STRCMP(AUGROUP_NAME(i), name) == 0) {
return i;
}
}
@@ -5540,10 +5679,21 @@ void do_augroup(char_u *arg, int del_group)
#if defined(EXITFREE)
void free_all_autocmds(void)
{
+ int i;
+ char_u *s;
+
for (current_augroup = -1; current_augroup < augroups.ga_len;
- ++current_augroup)
- do_autocmd((char_u *)"", TRUE);
- ga_clear_strings(&augroups);
+ current_augroup++) {
+ do_autocmd((char_u *)"", true);
+ }
+
+ for (i = 0; i < augroups.ga_len; i++) {
+ s = ((char_u **)(augroups.ga_data))[i];
+ if (s != get_deleted_augroup()) {
+ xfree(s);
+ }
+ }
+ ga_clear(&augroups);
}
#endif
@@ -5559,13 +5709,14 @@ static event_T event_name2nr(char_u *start, char_u **end)
int i;
int len;
- /* the event name ends with end of line, a blank or a comma */
- for (p = start; *p && !ascii_iswhite(*p) && *p != ','; ++p)
- ;
- for (i = 0; event_names[i].name != NULL; ++i) {
- len = (int) event_names[i].len;
- if (len == p - start && STRNICMP(event_names[i].name, start, len) == 0)
+ // the event name ends with end of line, '|', a blank or a comma */
+ for (p = start; *p && !ascii_iswhite(*p) && *p != ',' && *p != '|'; p++) {
+ }
+ for (i = 0; event_names[i].name != NULL; i++) {
+ len = (int)event_names[i].len;
+ if (len == p - start && STRNICMP(event_names[i].name, start, len) == 0) {
break;
+ }
}
if (*p == ',')
++p;
@@ -5607,7 +5758,7 @@ find_end_event (
}
pat = arg + 1;
} else {
- for (pat = arg; *pat && !ascii_iswhite(*pat); pat = p) {
+ for (pat = arg; *pat && *pat != '|' && !ascii_iswhite(*pat); pat = p) {
if ((int)event_name2nr(pat, &p) >= (int)NUM_EVENTS) {
if (have_group)
EMSG2(_("E216: No such event: %s"), pat);
@@ -5722,8 +5873,9 @@ void au_event_restore(char_u *old_ei)
*
* Mostly a {group} argument can optionally appear before <event>.
*/
-void do_autocmd(char_u *arg, int forceit)
+void do_autocmd(char_u *arg_in, int forceit)
{
+ char_u *arg = arg_in;
char_u *pat;
char_u *envpat = NULL;
char_u *cmd;
@@ -5732,10 +5884,13 @@ void do_autocmd(char_u *arg, int forceit)
int nested = FALSE;
int group;
- /*
- * Check for a legal group name. If not, use AUGROUP_ALL.
- */
- group = au_get_grouparg(&arg);
+ if (*arg == '|') {
+ arg = (char_u *)"";
+ group = AUGROUP_ALL; // no argument, use all groups
+ } else {
+ // Check for a legal group name. If not, use AUGROUP_ALL.
+ group = au_get_grouparg(&arg);
+ }
/*
* Scan over the events.
@@ -5745,50 +5900,54 @@ void do_autocmd(char_u *arg, int forceit)
if (pat == NULL)
return;
- /*
- * Scan over the pattern. Put a NUL at the end.
- */
pat = skipwhite(pat);
- cmd = pat;
- while (*cmd && (!ascii_iswhite(*cmd) || cmd[-1] == '\\'))
- cmd++;
- if (*cmd)
- *cmd++ = NUL;
-
- /* Expand environment variables in the pattern. Set 'shellslash', we want
- * forward slashes here. */
- if (vim_strchr(pat, '$') != NULL || vim_strchr(pat, '~') != NULL) {
+ if (*pat == '|') {
+ pat = (char_u *)"";
+ cmd = (char_u *)"";
+ } else {
+ // Scan over the pattern. Put a NUL at the end.
+ cmd = pat;
+ while (*cmd && (!ascii_iswhite(*cmd) || cmd[-1] == '\\')) {
+ cmd++;
+ }
+ if (*cmd) {
+ *cmd++ = NUL;
+ }
+
+ // Expand environment variables in the pattern. Set 'shellslash', we want
+ // forward slashes here.
+ if (vim_strchr(pat, '$') != NULL || vim_strchr(pat, '~') != NULL) {
#ifdef BACKSLASH_IN_FILENAME
- int p_ssl_save = p_ssl;
+ int p_ssl_save = p_ssl;
- p_ssl = TRUE;
+ p_ssl = true;
#endif
- envpat = expand_env_save(pat);
+ envpat = expand_env_save(pat);
#ifdef BACKSLASH_IN_FILENAME
- p_ssl = p_ssl_save;
+ p_ssl = p_ssl_save;
#endif
- if (envpat != NULL)
- pat = envpat;
- }
+ if (envpat != NULL) {
+ pat = envpat;
+ }
+ }
- /*
- * Check for "nested" flag.
- */
- cmd = skipwhite(cmd);
- if (*cmd != NUL && STRNCMP(cmd, "nested", 6) == 0 && ascii_iswhite(cmd[6])) {
- nested = TRUE;
- cmd = skipwhite(cmd + 6);
- }
+ // Check for "nested" flag.
+ cmd = skipwhite(cmd);
+ if (*cmd != NUL && STRNCMP(cmd, "nested", 6) == 0
+ && ascii_iswhite(cmd[6])) {
+ nested = true;
+ cmd = skipwhite(cmd + 6);
+ }
- /*
- * Find the start of the commands.
- * Expand <sfile> in it.
- */
- if (*cmd != NUL) {
- cmd = expand_sfile(cmd);
- if (cmd == NULL) /* some error */
- return;
- need_free = TRUE;
+ // Find the start of the commands.
+ // Expand <sfile> in it.
+ if (*cmd != NUL) {
+ cmd = expand_sfile(cmd);
+ if (cmd == NULL) { // some error
+ return;
+ }
+ need_free = true;
+ }
}
/*
@@ -5802,16 +5961,17 @@ void do_autocmd(char_u *arg, int forceit)
/*
* Loop over the events.
*/
- last_event = (event_T)-1; /* for listing the event name */
- last_group = AUGROUP_ERROR; /* for listing the group name */
- if (*arg == '*' || *arg == NUL) {
+ last_event = (event_T)-1; // for listing the event name
+ last_group = AUGROUP_ERROR; // for listing the group name
+ if (*arg == '*' || *arg == NUL || *arg == '|') {
for (event = (event_T)0; (int)event < (int)NUM_EVENTS;
- event = (event_T)((int)event + 1))
- if (do_autocmd_event(event, pat,
- nested, cmd, forceit, group) == FAIL)
+ event = (event_T)((int)event + 1)) {
+ if (do_autocmd_event(event, pat, nested, cmd, forceit, group) == FAIL) {
break;
+ }
+ }
} else {
- while (*arg && !ascii_iswhite(*arg)) {
+ while (*arg && *arg != '|' && !ascii_iswhite(*arg)) {
event_T event = event_name2nr(arg, &arg);
assert(event < NUM_EVENTS);
if (do_autocmd_event(event, pat, nested, cmd, forceit, group) == FAIL) {
@@ -5838,7 +5998,8 @@ static int au_get_grouparg(char_u **argp)
char_u *arg = *argp;
int group = AUGROUP_ALL;
- p = skiptowhite(arg);
+ for (p = arg; *p && !ascii_iswhite(*p) && *p != '|'; p++) {
+ }
if (p > arg) {
group_name = vim_strnsave(arg, (int)(p - arg));
group = au_find_group(group_name);
@@ -6068,13 +6229,18 @@ static int do_autocmd_event(event_T event, char_u *pat, int nested, char_u *cmd,
int
do_doautocmd (
char_u *arg,
- int do_msg /* give message for no matching autocmds? */
+ int do_msg, // give message for no matching autocmds?
+ bool *did_something
)
{
char_u *fname;
int nothing_done = TRUE;
int group;
+ if (did_something != NULL) {
+ *did_something = false;
+ }
+
/*
* Check for a legal group name. If not, use AUGROUP_ALL.
*/
@@ -6103,8 +6269,12 @@ do_doautocmd (
fname, NULL, TRUE, group, curbuf, NULL))
nothing_done = FALSE;
- if (nothing_done && do_msg)
+ if (nothing_done && do_msg) {
MSG(_("No matching autocommands"));
+ }
+ if (did_something != NULL) {
+ *did_something = !nothing_done;
+ }
return aborting() ? FAIL : OK;
}
@@ -6133,13 +6303,14 @@ void ex_doautoall(exarg_T *eap)
/* find a window for this buffer and save some values */
aucmd_prepbuf(&aco, buf);
- /* execute the autocommands for this buffer */
- retval = do_doautocmd(arg, FALSE);
+ bool did_aucmd;
+ // execute the autocommands for this buffer
+ retval = do_doautocmd(arg, false, &did_aucmd);
- if (call_do_modelines) {
- /* Execute the modeline settings, but don't set window-local
- * options if we are using the current window for another
- * buffer. */
+ if (call_do_modelines && did_aucmd) {
+ // Execute the modeline settings, but don't set window-local
+ // options if we are using the current window for another
+ // buffer.
do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
}
@@ -6258,27 +6429,24 @@ aucmd_prepbuf (
aco->new_curbuf = curbuf;
}
-/*
- * Cleanup after executing autocommands for a (hidden) buffer.
- * Restore the window as it was (if possible).
- */
-void
-aucmd_restbuf (
- aco_save_T *aco /* structure holding saved values */
-)
+/// Cleanup after executing autocommands for a (hidden) buffer.
+/// Restore the window as it was (if possible).
+///
+/// @param aco structure holding saved values
+void aucmd_restbuf(aco_save_T *aco)
{
int dummy;
if (aco->use_aucmd_win) {
- --curbuf->b_nwindows;
- /* Find "aucmd_win", it can't be closed, but it may be in another tab
- * page. Do not trigger autocommands here. */
+ curbuf->b_nwindows--;
+ // Find "aucmd_win", it can't be closed, but it may be in another tab page.
+ // Do not trigger autocommands here.
block_autocmds();
if (curwin != aucmd_win) {
FOR_ALL_TAB_WINDOWS(tp, wp) {
if (wp == aucmd_win) {
if (tp != curtab) {
- goto_tabpage_tp(tp, TRUE, TRUE);
+ goto_tabpage_tp(tp, true, true);
}
win_goto(aucmd_win);
goto win_found;
@@ -6287,49 +6455,50 @@ aucmd_restbuf (
}
win_found:
- /* Remove the window and frame from the tree of frames. */
+ // Remove the window and frame from the tree of frames.
(void)winframe_remove(curwin, &dummy, NULL);
win_remove(curwin, NULL);
- aucmd_win_used = FALSE;
- last_status(FALSE); /* may need to remove last status line */
- restore_snapshot(SNAP_AUCMD_IDX, FALSE);
- (void)win_comp_pos(); /* recompute window positions */
+ aucmd_win_used = false;
+ last_status(false); // may need to remove last status line
+ restore_snapshot(SNAP_AUCMD_IDX, false);
+ (void)win_comp_pos(); // recompute window positions
unblock_autocmds();
- if (win_valid(aco->save_curwin))
+ if (win_valid(aco->save_curwin)) {
curwin = aco->save_curwin;
- else
- /* Hmm, original window disappeared. Just use the first one. */
+ } else {
+ // Hmm, original window disappeared. Just use the first one.
curwin = firstwin;
- vars_clear(&aucmd_win->w_vars->dv_hashtab); /* free all w: variables */
- hash_init(&aucmd_win->w_vars->dv_hashtab); /* re-use the hashtab */
+ }
+ vars_clear(&aucmd_win->w_vars->dv_hashtab); // free all w: variables
+ hash_init(&aucmd_win->w_vars->dv_hashtab); // re-use the hashtab
curbuf = curwin->w_buffer;
xfree(globaldir);
globaldir = aco->globaldir;
- /* the buffer contents may have changed */
+ // the buffer contents may have changed
check_cursor();
if (curwin->w_topline > curbuf->b_ml.ml_line_count) {
curwin->w_topline = curbuf->b_ml.ml_line_count;
curwin->w_topfill = 0;
}
} else {
- /* restore curwin */
+ // restore curwin
if (win_valid(aco->save_curwin)) {
- /* Restore the buffer which was previously edited by curwin, if
- * it was changed, we are still the same window and the buffer is
- * valid. */
+ // Restore the buffer which was previously edited by curwin, if it was
+ // changed, we are still the same window and the buffer is valid.
if (curwin == aco->new_curwin
&& curbuf != aco->new_curbuf
&& buf_valid(aco->new_curbuf)
&& aco->new_curbuf->b_ml.ml_mfp != NULL) {
- if (curwin->w_s == &curbuf->b_s)
+ if (curwin->w_s == &curbuf->b_s) {
curwin->w_s = &aco->new_curbuf->b_s;
- --curbuf->b_nwindows;
+ }
+ curbuf->b_nwindows--;
curbuf = aco->new_curbuf;
curwin->w_buffer = curbuf;
- ++curbuf->b_nwindows;
+ curbuf->b_nwindows++;
}
curwin = aco->save_curwin;
@@ -6597,8 +6766,9 @@ static bool apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io,
fname = vim_strsave(fname); /* make a copy, so we can change it */
} else {
sfname = vim_strsave(fname);
- // don't try expanding the following events
+ // Don't try expanding the following events.
if (event == EVENT_COLORSCHEME
+ || event == EVENT_DIRCHANGED
|| event == EVENT_FILETYPE
|| event == EVENT_FUNCUNDEFINED
|| event == EVENT_OPTIONSET
@@ -6607,10 +6777,11 @@ static bool apply_autocmds_group(event_T event, char_u *fname, char_u *fname_io,
|| event == EVENT_REMOTEREPLY
|| event == EVENT_SPELLFILEMISSING
|| event == EVENT_SYNTAX
- || event == EVENT_TABCLOSED)
+ || event == EVENT_TABCLOSED) {
fname = vim_strsave(fname);
- else
- fname = (char_u *)FullName_save((char *)fname, FALSE);
+ } else {
+ fname = (char_u *)FullName_save((char *)fname, false);
+ }
}
if (fname == NULL) { /* out of memory */
xfree(sfname);
@@ -6783,6 +6954,10 @@ BYPASS_AU:
if (event == EVENT_BUFWIPEOUT && buf != NULL)
aubuflocal_remove(buf);
+ if (retval == OK && event == EVENT_FILETYPE) {
+ au_did_filetype = true;
+ }
+
return retval;
}
@@ -6982,9 +7157,11 @@ char_u *get_augroup_name(expand_T *xp, int idx)
return (char_u *)"END";
if (idx >= augroups.ga_len) /* end of list */
return NULL;
- if (AUGROUP_NAME(idx) == NULL) /* skip deleted entries */
+ if (AUGROUP_NAME(idx) == NULL || AUGROUP_NAME(idx) == get_deleted_augroup()) {
+ // skip deleted entries
return (char_u *)"";
- return AUGROUP_NAME(idx); /* return a name */
+ }
+ return AUGROUP_NAME(idx); // return a name
}
static int include_groups = FALSE;
@@ -7041,10 +7218,12 @@ set_context_in_autocmd (
*/
char_u *get_event_name(expand_T *xp, int idx)
{
- if (idx < augroups.ga_len) { /* First list group names, if wanted */
- if (!include_groups || AUGROUP_NAME(idx) == NULL)
- return (char_u *)""; /* skip deleted entries */
- return AUGROUP_NAME(idx); /* return a name */
+ if (idx < augroups.ga_len) { // First list group names, if wanted
+ if (!include_groups || AUGROUP_NAME(idx) == NULL
+ || AUGROUP_NAME(idx) == get_deleted_augroup()) {
+ return (char_u *)""; // skip deleted entries
+ }
+ return AUGROUP_NAME(idx); // return a name
}
return (char_u *)event_names[idx - augroups.ga_len].name;
}
diff --git a/src/nvim/fileio.h b/src/nvim/fileio.h
index d93f3f3eb3..ceb101167d 100644
--- a/src/nvim/fileio.h
+++ b/src/nvim/fileio.h
@@ -12,6 +12,8 @@
#define READ_DUMMY 0x10 /* reading into a dummy buffer */
#define READ_KEEP_UNDO 0x20 /* keep undo info*/
+#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))
+
/*
* Struct to save values in before executing autocommands for a buffer that is
* not the current buffer.
diff --git a/src/nvim/fold.c b/src/nvim/fold.c
index ac3cf959c8..d964da371a 100644
--- a/src/nvim/fold.c
+++ b/src/nvim/fold.c
@@ -22,7 +22,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/option.h"
@@ -166,7 +165,7 @@ bool hasFoldingWin(
int use_level = FALSE;
int maybe_small = FALSE;
garray_T *gap;
- int low_level = 0;;
+ int low_level = 0;
checkupdate(win);
/*
@@ -762,16 +761,12 @@ void clearFolding(win_T *win)
*/
void foldUpdate(win_T *wp, linenr_T top, linenr_T bot)
{
- if (compl_busy) {
- return;
- }
-
- fold_T *fp;
- if (wp->w_buffer->terminal) {
+ if (compl_busy || State & INSERT) {
return;
}
// Mark all folds from top to bot as maybe-small.
+ fold_T *fp;
(void)foldFind(&wp->w_folds, top, &fp);
while (fp < (fold_T *)wp->w_folds.ga_data + wp->w_folds.ga_len
&& fp->fd_top < bot) {
@@ -793,6 +788,19 @@ void foldUpdate(win_T *wp, linenr_T top, linenr_T bot)
}
}
+/// Updates folds when leaving insert-mode.
+void foldUpdateAfterInsert(void)
+{
+ if (foldmethodIsManual(curwin) // foldmethod=manual: No need to update.
+ // These foldmethods are too slow, do not auto-update on insert-leave.
+ || foldmethodIsSyntax(curwin) || foldmethodIsExpr(curwin)) {
+ return;
+ }
+
+ foldUpdateAll(curwin);
+ foldOpenCursor();
+}
+
/* foldUpdateAll() {{{2 */
/*
* Update all lines in a window for folding.
@@ -1600,7 +1608,7 @@ static void foldAddMarker(linenr_T lnum, char_u *marker, size_t markerlen)
STRLCPY(newline + line_len, marker, markerlen + 1);
else {
STRCPY(newline + line_len, cms);
- STRNCPY(newline + line_len + (p - cms), marker, markerlen);
+ memcpy(newline + line_len + (p - cms), marker, markerlen);
STRCPY(newline + line_len + (p - cms) + markerlen, p + 2);
}
@@ -1665,7 +1673,8 @@ static void foldDelMarker(linenr_T lnum, char_u *marker, size_t markerlen)
if (u_save(lnum - 1, lnum + 1) == OK) {
/* Make new line: text-before-marker + text-after-marker */
newline = xmalloc(STRLEN(line) - len + 1);
- STRNCPY(newline, line, p - line);
+ assert(p >= line);
+ memcpy(newline, line, (size_t)(p - line));
STRCPY(newline + (p - line), p + len);
ml_replace(lnum, newline, FALSE);
}
diff --git a/src/nvim/func_attr.h b/src/nvim/func_attr.h
index c31d21ec6d..d98fe5b22b 100644
--- a/src/nvim/func_attr.h
+++ b/src/nvim/func_attr.h
@@ -41,168 +41,175 @@
// $ gcc -E -dM - </dev/null
// $ echo | clang -dM -E -
+#ifndef NVIM_FUNC_ATTR_H
+#define NVIM_FUNC_ATTR_H
+#undef NVIM_FUNC_ATTR_H
+
#ifdef FUNC_ATTR_MALLOC
- #undef FUNC_ATTR_MALLOC
+# undef FUNC_ATTR_MALLOC
#endif
#ifdef FUNC_ATTR_ALLOC_SIZE
- #undef FUNC_ATTR_ALLOC_SIZE
+# undef FUNC_ATTR_ALLOC_SIZE
#endif
#ifdef FUNC_ATTR_ALLOC_SIZE_PROD
- #undef FUNC_ATTR_ALLOC_SIZE_PROD
+# undef FUNC_ATTR_ALLOC_SIZE_PROD
#endif
#ifdef FUNC_ATTR_ALLOC_ALIGN
- #undef FUNC_ATTR_ALLOC_ALIGN
+# undef FUNC_ATTR_ALLOC_ALIGN
#endif
#ifdef FUNC_ATTR_PURE
- #undef FUNC_ATTR_PURE
+# undef FUNC_ATTR_PURE
#endif
#ifdef FUNC_ATTR_CONST
- #undef FUNC_ATTR_CONST
+# undef FUNC_ATTR_CONST
#endif
#ifdef FUNC_ATTR_WARN_UNUSED_RESULT
- #undef FUNC_ATTR_WARN_UNUSED_RESULT
+# undef FUNC_ATTR_WARN_UNUSED_RESULT
#endif
#ifdef FUNC_ATTR_ALWAYS_INLINE
- #undef FUNC_ATTR_ALWAYS_INLINE
+# undef FUNC_ATTR_ALWAYS_INLINE
#endif
#ifdef FUNC_ATTR_UNUSED
- #undef FUNC_ATTR_UNUSED
+# undef FUNC_ATTR_UNUSED
#endif
#ifdef FUNC_ATTR_NONNULL_ALL
- #undef FUNC_ATTR_NONNULL_ALL
+# undef FUNC_ATTR_NONNULL_ALL
#endif
#ifdef FUNC_ATTR_NONNULL_ARG
- #undef FUNC_ATTR_NONNULL_ARG
+# undef FUNC_ATTR_NONNULL_ARG
#endif
#ifdef FUNC_ATTR_NONNULL_RET
- #undef FUNC_ATTR_NONNULL_RET
+# undef FUNC_ATTR_NONNULL_RET
#endif
#ifndef DID_REAL_ATTR
- #define DID_REAL_ATTR
- #ifdef __GNUC__
- // place defines for all gnulikes here, for now that's gcc, clang and
- // intel.
-
- // place these after the argument list of the function declaration
- // (not definition), like so:
- // void myfunc(void) REAL_FATTR_ALWAYS_INLINE;
- #define REAL_FATTR_MALLOC __attribute__((malloc))
- #define REAL_FATTR_ALLOC_ALIGN(x) __attribute__((alloc_align(x)))
- #define REAL_FATTR_PURE __attribute__ ((pure))
- #define REAL_FATTR_CONST __attribute__((const))
- #define REAL_FATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
- #define REAL_FATTR_ALWAYS_INLINE __attribute__((always_inline))
- #define REAL_FATTR_UNUSED __attribute__((unused))
- #define REAL_FATTR_NONNULL_ALL __attribute__((nonnull))
- #define REAL_FATTR_NONNULL_ARG(...) __attribute__((nonnull(__VA_ARGS__)))
-
- #ifdef __clang__
- // clang only
- #elif defined(__INTEL_COMPILER)
- // intel only
- #else
- #define GCC_VERSION \
+# define DID_REAL_ATTR
+# ifdef __GNUC__
+// place defines for all gnulikes here, for now that's gcc, clang and
+// intel.
+
+// place these after the argument list of the function declaration
+// (not definition), like so:
+// void myfunc(void) REAL_FATTR_ALWAYS_INLINE;
+# define REAL_FATTR_MALLOC __attribute__((malloc))
+# define REAL_FATTR_ALLOC_ALIGN(x) __attribute__((alloc_align(x)))
+# define REAL_FATTR_PURE __attribute__ ((pure))
+# define REAL_FATTR_CONST __attribute__((const))
+# define REAL_FATTR_WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+# define REAL_FATTR_ALWAYS_INLINE __attribute__((always_inline))
+# define REAL_FATTR_UNUSED __attribute__((unused))
+# define REAL_FATTR_NONNULL_ALL __attribute__((nonnull))
+# define REAL_FATTR_NONNULL_ARG(...) __attribute__((nonnull(__VA_ARGS__)))
+
+# ifdef __clang__
+// clang only
+# elif defined(__INTEL_COMPILER)
+// intel only
+# else
+# define GCC_VERSION \
(__GNUC__ * 10000 + \
- __GNUC_MINOR__ * 100 + \
- __GNUC_PATCHLEVEL__)
- // gcc only
- #define REAL_FATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
- #define REAL_FATTR_ALLOC_SIZE_PROD(x,y) __attribute__((alloc_size(x,y)))
- #if GCC_VERSION >= 40900
- #define REAL_FATTR_NONNULL_RET __attribute__((returns_nonnull))
- #endif
- #endif
- #endif
-
- // define function attributes that haven't been defined for this specific
- // compiler.
-
- #ifndef REAL_FATTR_MALLOC
- #define REAL_FATTR_MALLOC
- #endif
-
- #ifndef REAL_FATTR_ALLOC_SIZE
- #define REAL_FATTR_ALLOC_SIZE(x)
- #endif
-
- #ifndef REAL_FATTR_ALLOC_SIZE_PROD
- #define REAL_FATTR_ALLOC_SIZE_PROD(x,y)
- #endif
-
- #ifndef REAL_FATTR_ALLOC_ALIGN
- #define REAL_FATTR_ALLOC_ALIGN(x)
- #endif
-
- #ifndef REAL_FATTR_PURE
- #define REAL_FATTR_PURE
- #endif
-
- #ifndef REAL_FATTR_CONST
- #define REAL_FATTR_CONST
- #endif
-
- #ifndef REAL_FATTR_WARN_UNUSED_RESULT
- #define REAL_FATTR_WARN_UNUSED_RESULT
- #endif
-
- #ifndef REAL_FATTR_ALWAYS_INLINE
- #define REAL_FATTR_ALWAYS_INLINE
- #endif
-
- #ifndef REAL_FATTR_UNUSED
- #define REAL_FATTR_UNUSED
- #endif
-
- #ifndef REAL_FATTR_NONNULL_ALL
- #define REAL_FATTR_NONNULL_ALL
- #endif
-
- #ifndef REAL_FATTR_NONNULL_ARG
- #define REAL_FATTR_NONNULL_ARG(...)
- #endif
-
- #ifndef REAL_FATTR_NONNULL_RET
- #define REAL_FATTR_NONNULL_RET
- #endif
+ __GNUC_MINOR__ * 100 + \
+ __GNUC_PATCHLEVEL__)
+// gcc only
+# define REAL_FATTR_ALLOC_SIZE(x) __attribute__((alloc_size(x)))
+# define REAL_FATTR_ALLOC_SIZE_PROD(x, y) __attribute__((alloc_size(x, y)))
+# if GCC_VERSION >= 40900
+# define REAL_FATTR_NONNULL_RET __attribute__((returns_nonnull))
+# endif
+# endif
+# endif
+
+// define function attributes that haven't been defined for this specific
+// compiler.
+
+# ifndef REAL_FATTR_MALLOC
+# define REAL_FATTR_MALLOC
+# endif
+
+# ifndef REAL_FATTR_ALLOC_SIZE
+# define REAL_FATTR_ALLOC_SIZE(x)
+# endif
+
+# ifndef REAL_FATTR_ALLOC_SIZE_PROD
+# define REAL_FATTR_ALLOC_SIZE_PROD(x, y)
+# endif
+
+# ifndef REAL_FATTR_ALLOC_ALIGN
+# define REAL_FATTR_ALLOC_ALIGN(x)
+# endif
+
+# ifndef REAL_FATTR_PURE
+# define REAL_FATTR_PURE
+# endif
+
+# ifndef REAL_FATTR_CONST
+# define REAL_FATTR_CONST
+# endif
+
+# ifndef REAL_FATTR_WARN_UNUSED_RESULT
+# define REAL_FATTR_WARN_UNUSED_RESULT
+# endif
+
+# ifndef REAL_FATTR_ALWAYS_INLINE
+# define REAL_FATTR_ALWAYS_INLINE
+# endif
+
+# ifndef REAL_FATTR_UNUSED
+# define REAL_FATTR_UNUSED
+# endif
+
+# ifndef REAL_FATTR_NONNULL_ALL
+# define REAL_FATTR_NONNULL_ALL
+# endif
+
+# ifndef REAL_FATTR_NONNULL_ARG
+# define REAL_FATTR_NONNULL_ARG(...)
+# endif
+
+# ifndef REAL_FATTR_NONNULL_RET
+# define REAL_FATTR_NONNULL_RET
+# endif
#endif
#ifdef DEFINE_FUNC_ATTRIBUTES
- #define FUNC_ATTR_ASYNC
- #define FUNC_ATTR_MALLOC REAL_FATTR_MALLOC
- #define FUNC_ATTR_ALLOC_SIZE(x) REAL_FATTR_ALLOC_SIZE(x)
- #define FUNC_ATTR_ALLOC_SIZE_PROD(x,y) REAL_FATTR_ALLOC_SIZE_PROD(x,y)
- #define FUNC_ATTR_ALLOC_ALIGN(x) REAL_FATTR_ALLOC_ALIGN(x)
- #define FUNC_ATTR_PURE REAL_FATTR_PURE
- #define FUNC_ATTR_CONST REAL_FATTR_CONST
- #define FUNC_ATTR_WARN_UNUSED_RESULT REAL_FATTR_WARN_UNUSED_RESULT
- #define FUNC_ATTR_ALWAYS_INLINE REAL_FATTR_ALWAYS_INLINE
- #define FUNC_ATTR_UNUSED REAL_FATTR_UNUSED
- #define FUNC_ATTR_NONNULL_ALL REAL_FATTR_NONNULL_ALL
- #define FUNC_ATTR_NONNULL_ARG(...) REAL_FATTR_NONNULL_ARG(__VA_ARGS__)
- #define FUNC_ATTR_NONNULL_RET REAL_FATTR_NONNULL_RET
+# define FUNC_API_ASYNC
+# define FUNC_API_NOEXPORT
+# define FUNC_API_NOEVAL
+# define FUNC_ATTR_MALLOC REAL_FATTR_MALLOC
+# define FUNC_ATTR_ALLOC_SIZE(x) REAL_FATTR_ALLOC_SIZE(x)
+# define FUNC_ATTR_ALLOC_SIZE_PROD(x, y) REAL_FATTR_ALLOC_SIZE_PROD(x, y)
+# define FUNC_ATTR_ALLOC_ALIGN(x) REAL_FATTR_ALLOC_ALIGN(x)
+# define FUNC_ATTR_PURE REAL_FATTR_PURE
+# define FUNC_ATTR_CONST REAL_FATTR_CONST
+# define FUNC_ATTR_WARN_UNUSED_RESULT REAL_FATTR_WARN_UNUSED_RESULT
+# define FUNC_ATTR_ALWAYS_INLINE REAL_FATTR_ALWAYS_INLINE
+# define FUNC_ATTR_UNUSED REAL_FATTR_UNUSED
+# define FUNC_ATTR_NONNULL_ALL REAL_FATTR_NONNULL_ALL
+# define FUNC_ATTR_NONNULL_ARG(...) REAL_FATTR_NONNULL_ARG(__VA_ARGS__)
+# define FUNC_ATTR_NONNULL_RET REAL_FATTR_NONNULL_RET
#elif !defined(DO_NOT_DEFINE_EMPTY_ATTRIBUTES)
- #define FUNC_ATTR_MALLOC
- #define FUNC_ATTR_ALLOC_SIZE(x)
- #define FUNC_ATTR_ALLOC_SIZE_PROD(x,y)
- #define FUNC_ATTR_ALLOC_ALIGN(x)
- #define FUNC_ATTR_PURE
- #define FUNC_ATTR_CONST
- #define FUNC_ATTR_WARN_UNUSED_RESULT
- #define FUNC_ATTR_ALWAYS_INLINE
- #define FUNC_ATTR_UNUSED
- #define FUNC_ATTR_NONNULL_ALL
- #define FUNC_ATTR_NONNULL_ARG(...)
- #define FUNC_ATTR_NONNULL_RET
+# define FUNC_ATTR_MALLOC
+# define FUNC_ATTR_ALLOC_SIZE(x)
+# define FUNC_ATTR_ALLOC_SIZE_PROD(x, y)
+# define FUNC_ATTR_ALLOC_ALIGN(x)
+# define FUNC_ATTR_PURE
+# define FUNC_ATTR_CONST
+# define FUNC_ATTR_WARN_UNUSED_RESULT
+# define FUNC_ATTR_ALWAYS_INLINE
+# define FUNC_ATTR_UNUSED
+# define FUNC_ATTR_NONNULL_ALL
+# define FUNC_ATTR_NONNULL_ARG(...)
+# define FUNC_ATTR_NONNULL_RET
#endif
+#endif // NVIM_FUNC_ATTR_H
diff --git a/src/nvim/garray.c b/src/nvim/garray.c
index 98cec69b54..9ed3b901ef 100644
--- a/src/nvim/garray.c
+++ b/src/nvim/garray.c
@@ -8,7 +8,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/log.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/path.h"
#include "nvim/garray.h"
diff --git a/src/nvim/garray.h b/src/nvim/garray.h
index 642eaf54f0..5d7806bbfa 100644
--- a/src/nvim/garray.h
+++ b/src/nvim/garray.h
@@ -21,10 +21,10 @@ typedef struct growarray {
#define GA_EMPTY(ga_ptr) ((ga_ptr)->ga_len <= 0)
-#define GA_APPEND(item_type, gap, item) \
- do { \
- ga_grow(gap, 1); \
- ((item_type *)(gap)->ga_data)[(gap)->ga_len++] = (item); \
+#define GA_APPEND(item_type, gap, item) \
+ do { \
+ ga_grow(gap, 1); \
+ ((item_type *)(gap)->ga_data)[(gap)->ga_len++] = (item); \
} while (0)
#define GA_APPEND_VIA_PTR(item_type, gap) \
@@ -49,16 +49,16 @@ static inline void *ga_append_via_ptr(garray_T *gap, size_t item_size)
/// @param gap the garray to be freed
/// @param item_type type of the item in the garray
/// @param free_item_fn free function that takes (*item_type) as parameter
-#define GA_DEEP_CLEAR(gap, item_type, free_item_fn) \
- do { \
- garray_T *_gap = (gap); \
- if (_gap->ga_data != NULL) { \
- for (int i = 0; i < _gap->ga_len; i++) { \
- item_type *_item = &(((item_type *)_gap->ga_data)[i]); \
- free_item_fn(_item); \
- } \
- } \
- ga_clear(_gap); \
+#define GA_DEEP_CLEAR(gap, item_type, free_item_fn) \
+ do { \
+ garray_T *_gap = (gap); \
+ if (_gap->ga_data != NULL) { \
+ for (int i = 0; i < _gap->ga_len; i++) { \
+ item_type *_item = &(((item_type *)_gap->ga_data)[i]); \
+ free_item_fn(_item); \
+ } \
+ } \
+ ga_clear(_gap); \
} while (false)
#define FREE_PTR_PTR(ptr) xfree(*(ptr))
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index dbf0322d78..fccbd69dbf 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -29,7 +29,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/move.h"
@@ -38,6 +37,7 @@
#include "nvim/option.h"
#include "nvim/regexp.h"
#include "nvim/screen.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
#include "nvim/undo.h"
@@ -113,7 +113,7 @@ static mapblock_T *first_abbr = NULL; /* first entry in abbrlist */
static int KeyNoremap = 0; /* remapping flags */
/*
- * variables used by vgetorpeek() and flush_buffers()
+ * Variables used by vgetorpeek() and flush_buffers()
*
* typebuf.tb_buf[] contains all characters that are not consumed yet.
* typebuf.tb_buf[typebuf.tb_off] is the first valid character.
@@ -1583,29 +1583,27 @@ vungetc ( /* unget one character (can only be done once!) */
old_mouse_col = mouse_col;
}
-/*
- * get a character:
- * 1. from the stuffbuffer
- * This is used for abbreviated commands like "D" -> "d$".
- * Also used to redo a command for ".".
- * 2. from the typeahead buffer
- * Stores text obtained previously but not used yet.
- * Also stores the result of mappings.
- * Also used for the ":normal" command.
- * 3. from the user
- * This may do a blocking wait if "advance" is TRUE.
- *
- * if "advance" is TRUE (vgetc()):
- * really get the character.
- * KeyTyped is set to TRUE in the case the user typed the key.
- * KeyStuffed is TRUE if the character comes from the stuff buffer.
- * if "advance" is FALSE (vpeekc()):
- * just look whether there is a character available.
- *
- * When "no_mapping" is zero, checks for mappings in the current mode.
- * Only returns one byte (of a multi-byte character).
- * K_SPECIAL and CSI may be escaped, need to get two more bytes then.
- */
+/// get a character:
+/// 1. from the stuffbuffer
+/// This is used for abbreviated commands like "D" -> "d$".
+/// Also used to redo a command for ".".
+/// 2. from the typeahead buffer
+/// Stores text obtained previously but not used yet.
+/// Also stores the result of mappings.
+/// Also used for the ":normal" command.
+/// 3. from the user
+/// This may do a blocking wait if "advance" is TRUE.
+///
+/// if "advance" is TRUE (vgetc()):
+/// really get the character.
+/// KeyTyped is set to TRUE in the case the user typed the key.
+/// KeyStuffed is TRUE if the character comes from the stuff buffer.
+/// if "advance" is FALSE (vpeekc()):
+/// just look whether there is a character available.
+///
+/// When "no_mapping" is zero, checks for mappings in the current mode.
+/// Only returns one byte (of a multi-byte character).
+/// K_SPECIAL and CSI may be escaped, need to get two more bytes then.
static int vgetorpeek(int advance)
{
int c, c1;
@@ -1754,10 +1752,11 @@ static int vgetorpeek(int advance)
|| ((compl_cont_status & CONT_LOCAL)
&& (c1 == Ctrl_N || c1 == Ctrl_P)))
) {
- if (c1 == K_SPECIAL)
+ if (c1 == K_SPECIAL) {
nolmaplen = 2;
- else {
- LANGMAP_ADJUST(c1, (State & (CMDLINE | INSERT)) == 0);
+ } else {
+ LANGMAP_ADJUST(c1, (State & (CMDLINE | INSERT)) == 0
+ && get_real_state() != SELECTMODE);
nolmaplen = 0;
}
/* First try buffer-local mappings. */
diff --git a/src/nvim/globals.h b/src/nvim/globals.h
index dafb75ca87..baa85c01f8 100644
--- a/src/nvim/globals.h
+++ b/src/nvim/globals.h
@@ -409,12 +409,8 @@ EXTERN struct caller_scope {
} provider_caller_scope;
EXTERN int provider_call_nesting INIT(= 0);
-/* Magic number used for hashitem "hi_key" value indicating a deleted item.
- * Only the address is used. */
-EXTERN char_u hash_removed;
-
-EXTERN int t_colors INIT(= 0); /* int value of T_CCO */
+EXTERN int t_colors INIT(= 256); // int value of T_CCO
/*
* When highlight_match is TRUE, highlight a match, starting at the cursor
@@ -442,59 +438,60 @@ EXTERN int no_check_timestamps INIT(= 0); /* Don't check timestamps */
typedef enum {
HLF_8 = 0 /* Meta & special keys listed with ":map", text that is
displayed different from what it is */
- , HLF_EOB //< after the last line in the buffer
- , HLF_TERM //< terminal cursor focused
- , HLF_TERMNC //< terminal cursor unfocused
- , HLF_AT /* @ characters at end of screen, characters that
- don't really exist in the text */
- , HLF_D /* directories in CTRL-D listing */
- , HLF_E /* error messages */
- , HLF_I /* incremental search */
- , HLF_L /* last search string */
- , HLF_M /* "--More--" message */
- , HLF_CM /* Mode (e.g., "-- INSERT --") */
- , HLF_N /* line number for ":number" and ":#" commands */
- , HLF_CLN /* current line number */
- , HLF_R /* return to continue message and yes/no questions */
- , HLF_S /* status lines */
- , HLF_SNC /* status lines of not-current windows */
- , HLF_C /* column to separate vertically split windows */
- , HLF_T /* Titles for output from ":set all", ":autocmd" etc. */
- , HLF_V /* Visual mode */
- , HLF_VNC /* Visual mode, autoselecting and not clipboard owner */
- , HLF_W /* warning messages */
- , HLF_WM /* Wildmenu highlight */
- , HLF_FL /* Folded line */
- , HLF_FC /* Fold column */
- , HLF_ADD /* Added diff line */
- , HLF_CHD /* Changed diff line */
- , HLF_DED /* Deleted diff line */
- , HLF_TXD /* Text Changed in diff line */
- , HLF_CONCEAL /* Concealed text */
- , HLF_SC /* Sign column */
- , HLF_SPB /* SpellBad */
- , HLF_SPC /* SpellCap */
- , HLF_SPR /* SpellRare */
- , HLF_SPL /* SpellLocal */
- , HLF_PNI /* popup menu normal item */
- , HLF_PSI /* popup menu selected item */
- , HLF_PSB /* popup menu scrollbar */
- , HLF_PST /* popup menu scrollbar thumb */
- , HLF_TP /* tabpage line */
- , HLF_TPS /* tabpage line selected */
- , HLF_TPF /* tabpage line filler */
- , HLF_CUC /* 'cursurcolumn' */
- , HLF_CUL /* 'cursurline' */
- , HLF_MC /* 'colorcolumn' */
- , HLF_COUNT /* MUST be the last one */
+ , HLF_EOB // after the last line in the buffer
+ , HLF_TERM // terminal cursor focused
+ , HLF_TERMNC // terminal cursor unfocused
+ , HLF_AT // @ characters at end of screen, characters that
+ // don't really exist in the text
+ , HLF_D // directories in CTRL-D listing
+ , HLF_E // error messages
+ , HLF_I // incremental search
+ , HLF_L // last search string
+ , HLF_M // "--More--" message
+ , HLF_CM // Mode (e.g., "-- INSERT --")
+ , HLF_N // line number for ":number" and ":#" commands
+ , HLF_CLN // current line number
+ , HLF_R // return to continue message and yes/no questions
+ , HLF_S // status lines
+ , HLF_SNC // status lines of not-current windows
+ , HLF_C // column to separate vertically split windows
+ , HLF_T // Titles for output from ":set all", ":autocmd" etc.
+ , HLF_V // Visual mode
+ , HLF_VNC // Visual mode, autoselecting and not clipboard owner
+ , HLF_W // warning messages
+ , HLF_WM // Wildmenu highlight
+ , HLF_FL // Folded line
+ , HLF_FC // Fold column
+ , HLF_ADD // Added diff line
+ , HLF_CHD // Changed diff line
+ , HLF_DED // Deleted diff line
+ , HLF_TXD // Text Changed in diff line
+ , HLF_CONCEAL // Concealed text
+ , HLF_SC // Sign column
+ , HLF_SPB // SpellBad
+ , HLF_SPC // SpellCap
+ , HLF_SPR // SpellRare
+ , HLF_SPL // SpellLocal
+ , HLF_PNI // popup menu normal item
+ , HLF_PSI // popup menu selected item
+ , HLF_PSB // popup menu scrollbar
+ , HLF_PST // popup menu scrollbar thumb
+ , HLF_TP // tabpage line
+ , HLF_TPS // tabpage line selected
+ , HLF_TPF // tabpage line filler
+ , HLF_CUC // 'cursurcolumn'
+ , HLF_CUL // 'cursurline'
+ , HLF_MC // 'colorcolumn'
+ , HLF_QFL // selected quickfix line
+ , HLF_COUNT // MUST be the last one
} hlf_T;
/* The HL_FLAGS must be in the same order as the HLF_ enums!
* When changing this also adjust the default for 'highlight'. */
-#define HL_FLAGS {'8', '~', 'z', 'Z', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', \
- 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', \
- 'A', 'C', 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', \
- 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+#define HL_FLAGS { '8', '~', 'z', 'Z', '@', 'd', 'e', 'i', 'l', 'm', 'M', 'n', \
+ 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', 'f', 'F', \
+ 'A', 'C', 'D', 'T', '-', '>', 'B', 'P', 'R', 'L', '+', '=', \
+ 'x', 'X', '*', '#', '_', '!', '.', 'o', 'q' }
EXTERN int highlight_attr[HLF_COUNT]; /* Highl. attr for each context. */
EXTERN int highlight_user[9]; /* User[1-9] attributes */
@@ -569,6 +566,7 @@ EXTERN win_T *prevwin INIT(= NULL); /* previous window */
FOR_ALL_TABS(tp) \
FOR_ALL_WINDOWS_IN_TAB(wp, tp)
+# define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
# define FOR_ALL_WINDOWS_IN_TAB(wp, tp) \
for (win_T *wp = ((tp) == curtab) \
? firstwin : (tp)->tp_firstwin; wp != NULL; wp = wp->w_next)
@@ -599,9 +597,9 @@ EXTERN int redraw_tabline INIT(= FALSE); /* need to redraw tabline */
* All buffers are linked in a list. 'firstbuf' points to the first entry,
* 'lastbuf' to the last entry and 'curbuf' to the currently active buffer.
*/
-EXTERN buf_T *firstbuf INIT(= NULL); /* first buffer */
-EXTERN buf_T *lastbuf INIT(= NULL); /* last buffer */
-EXTERN buf_T *curbuf INIT(= NULL); /* currently active buffer */
+EXTERN buf_T *firstbuf INIT(= NULL); // first buffer
+EXTERN buf_T *lastbuf INIT(= NULL); // last buffer
+EXTERN buf_T *curbuf INIT(= NULL); // currently active buffer
// Iterates over all buffers in the buffer list.
# define FOR_ALL_BUFFERS(buf) for (buf_T *buf = firstbuf; buf != NULL; buf = buf->b_next)
@@ -634,10 +632,10 @@ EXTERN int exiting INIT(= FALSE);
/* TRUE when planning to exit Vim. Might
* still keep on running if there is a changed
* buffer. */
-/* volatile because it is used in signal handler deathtrap(). */
-EXTERN volatile int full_screen INIT(= FALSE);
-/* TRUE when doing full-screen output
- * otherwise only writing some messages */
+// volatile because it is used in signal handler deathtrap().
+EXTERN volatile int full_screen INIT(= false);
+// TRUE when doing full-screen output
+// otherwise only writing some messages
EXTERN int restricted INIT(= FALSE);
// TRUE when started in restricted mode (-Z)
@@ -777,44 +775,38 @@ EXTERN int vr_lines_changed INIT(= 0); /* #Lines changed by "gR" so far */
# define DBCS_2BYTE 1 /* 2byte- */
# define DBCS_DEBUG -1
-EXTERN int enc_dbcs INIT(= 0); /* One of DBCS_xxx values if
- DBCS encoding */
-EXTERN int enc_unicode INIT(= 0); /* 2: UCS-2 or UTF-16, 4: UCS-4 */
-EXTERN bool enc_utf8 INIT(= false); /* UTF-8 encoded Unicode */
-EXTERN int enc_latin1like INIT(= TRUE); /* 'encoding' is latin1 comp. */
-EXTERN int has_mbyte INIT(= 0); /* any multi-byte encoding */
+// mbyte flags that used to depend on 'encoding'. These are now deprecated, as
+// 'encoding' is always "utf-8". Code that use them can be refactored to
+// remove dead code.
+#define enc_dbcs false
+#define enc_utf8 true
+#define has_mbyte true
/// Encoding used when 'fencs' is set to "default"
EXTERN char_u *fenc_default INIT(= NULL);
-/*
- * To speed up BYTELEN() we fill a table with the byte lengths whenever
- * enc_utf8 or enc_dbcs changes.
- */
-EXTERN char mb_bytelen_tab[256];
-
-/*
- * Function pointers, used to quickly get to the right function. Each has
- * three possible values: latin_ (8-bit), utfc_ or utf_ (utf-8) and dbcs_
- * (DBCS).
- * The value is set in mb_init();
- */
-/* length of char in bytes, including following composing chars */
-EXTERN int (*mb_ptr2len)(const char_u *p) INIT(= latin_ptr2len);
-/* idem, with limit on string length */
-EXTERN int (*mb_ptr2len_len)(const char_u *p, int size) INIT(= latin_ptr2len_len);
-/* byte length of char */
-EXTERN int (*mb_char2len)(int c) INIT(= latin_char2len);
-/* convert char to bytes, return the length */
-EXTERN int (*mb_char2bytes)(int c, char_u *buf) INIT(= latin_char2bytes);
-EXTERN int (*mb_ptr2cells)(const char_u *p) INIT(= latin_ptr2cells);
-EXTERN int (*mb_ptr2cells_len)(const char_u *p, int size) INIT(
- = latin_ptr2cells_len);
-EXTERN int (*mb_char2cells)(int c) INIT(= latin_char2cells);
-EXTERN int (*mb_off2cells)(unsigned off, unsigned max_off) INIT(
- = latin_off2cells);
-EXTERN int (*mb_ptr2char)(const char_u *p) INIT(= latin_ptr2char);
-EXTERN int (*mb_head_off)(const char_u *base, const char_u *p) INIT(= latin_head_off);
+// To speed up BYTELEN(); keep a lookup table to quickly get the length in
+// bytes of a UTF-8 character from the first byte of a UTF-8 string. Bytes
+// which are illegal when used as the first byte have a 1. The NUL byte has
+// length 1.
+EXTERN char utf8len_tab[256] INIT(= {
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 1, 1,
+});
# if defined(USE_ICONV) && defined(DYNAMIC_ICONV)
/* Pointers to functions and variables to be loaded at runtime */
@@ -836,8 +828,8 @@ EXTERN int* (*iconv_errno)(void);
EXTERN int State INIT(= NORMAL); /* This is the current state of the
* command interpreter. */
-EXTERN int finish_op INIT(= FALSE); /* TRUE while an operator is pending */
-EXTERN long opcount INIT(= 0); /* count for pending operator */
+EXTERN bool finish_op INIT(= false); // true while an operator is pending
+EXTERN long opcount INIT(= 0); // count for pending operator
/*
* ex mode (Q) state
@@ -877,9 +869,10 @@ EXTERN int mapped_ctrl_c INIT(= 0); // Modes where CTRL-C is mapped.
EXTERN cmdmod_T cmdmod; /* Ex command modifiers */
-EXTERN int msg_silent INIT(= 0); /* don't print messages */
-EXTERN int emsg_silent INIT(= 0); /* don't print error messages */
-EXTERN int cmd_silent INIT(= FALSE); /* don't echo the command line */
+EXTERN int msg_silent INIT(= 0); // don't print messages
+EXTERN int emsg_silent INIT(= 0); // don't print error messages
+EXTERN bool emsg_noredir INIT(= false); // don't redirect error messages
+EXTERN int cmd_silent INIT(= false); // don't echo the command line
/* Values for swap_exists_action: what to do when swap file already exists */
#define SEA_NONE 0 /* don't use dialog */
@@ -914,9 +907,6 @@ EXTERN int KeyTyped; // TRUE if user typed current char
EXTERN int KeyStuffed; // TRUE if current char from stuffbuf
EXTERN int maptick INIT(= 0); // tick for each non-mapped char
-EXTERN uint8_t chartab[256]; // table used in charset.c; See
- // init_chartab() for explanation
-
EXTERN int must_redraw INIT(= 0); /* type of redraw necessary */
EXTERN int skip_redraw INIT(= FALSE); /* skip redraw once */
EXTERN int do_redraw INIT(= FALSE); /* extra redraw once */
@@ -929,9 +919,9 @@ EXTERN FILE *scriptin[NSCRIPT]; /* streams to read script from */
EXTERN int curscript INIT(= 0); /* index in scriptin[] */
EXTERN FILE *scriptout INIT(= NULL); /* stream to write script to */
-/* volatile because it is used in signal handler catch_sigint(). */
-EXTERN volatile int got_int INIT(= FALSE); /* set to TRUE when interrupt
- signal occurred */
+// volatile because it is used in a signal handler.
+EXTERN volatile int got_int INIT(= false); // set to true when interrupt
+ // signal occurred
EXTERN int bangredo INIT(= FALSE); /* set to TRUE with ! command */
EXTERN int searchcmdlen; /* length of previous search cmd */
EXTERN int reg_do_extmatch INIT(= 0); /* Used when compiling regexp:
@@ -985,10 +975,11 @@ EXTERN int keep_help_flag INIT(= FALSE); /* doing :ta from help file */
*/
EXTERN char_u *empty_option INIT(= (char_u *)"");
-EXTERN int redir_off INIT(= FALSE); /* no redirection for a moment */
-EXTERN FILE *redir_fd INIT(= NULL); /* message redirection file */
-EXTERN int redir_reg INIT(= 0); /* message redirection register */
-EXTERN int redir_vname INIT(= 0); /* message redirection variable */
+EXTERN int redir_off INIT(= false); // no redirection for a moment
+EXTERN FILE *redir_fd INIT(= NULL); // message redirection file
+EXTERN int redir_reg INIT(= 0); // message redirection register
+EXTERN int redir_vname INIT(= 0); // message redirection variable
+EXTERN garray_T *capture_ga INIT(= NULL); // captured output for execute()
EXTERN char_u langmap_mapchar[256]; /* mapping for language keys */
@@ -1132,7 +1123,6 @@ EXTERN char_u e_invcmd[] INIT(= N_("E476: Invalid command"));
EXTERN char_u e_isadir2[] INIT(= N_("E17: \"%s\" is a directory"));
EXTERN char_u e_invjob[] INIT(= N_("E900: Invalid job id"));
EXTERN char_u e_jobtblfull[] INIT(= N_("E901: Job table is full"));
-EXTERN char_u e_jobexe[] INIT(= N_("E902: \"%s\" is not an executable"));
EXTERN char_u e_jobspawn[] INIT(= N_(
"E903: Process for command \"%s\" could not be spawned"));
EXTERN char_u e_jobnotpty[] INIT(= N_("E904: Job is not connected to a pty"));
@@ -1222,7 +1212,10 @@ EXTERN char_u e_invalpat[] INIT(= N_(
EXTERN char_u e_bufloaded[] INIT(= N_("E139: File is loaded in another buffer"));
EXTERN char_u e_notset[] INIT(= N_("E764: Option '%s' is not set"));
EXTERN char_u e_invalidreg[] INIT(= N_("E850: Invalid register name"));
+EXTERN char_u e_dirnotf[] INIT(= N_(
+ "E919: Directory not found in '%s': \"%s\""));
EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported"));
+EXTERN char_u e_fnametoolong[] INIT(= N_("E856: Filename too long"));
EXTERN char top_bot_msg[] INIT(= N_("search hit TOP, continuing at BOTTOM"));
@@ -1241,9 +1234,13 @@ EXTERN FILE *time_fd INIT(= NULL); /* where to write startup timing */
EXTERN int ignored;
EXTERN char *ignoredp;
+EXTERN bool in_free_unref_items INIT(= false);
+
// If a msgpack-rpc channel should be started over stdin/stdout
EXTERN bool embedded_mode INIT(= false);
-EXTERN Loop loop;
+
+/// next free id for a job or rpc channel
+EXTERN uint64_t next_chan_id INIT(= 1);
/// Used to track the status of external functions.
/// Currently only used for iconv().
@@ -1253,4 +1250,20 @@ typedef enum {
kBroken
} WorkingStatus;
+/// The scope of a working-directory command like `:cd`.
+///
+/// Scopes are enumerated from lowest to highest. When adding a scope make sure
+/// to update all functions using scopes as well, such as the implementation of
+/// `getcwd()`. When using scopes as limits (e.g. in loops) don't use the scopes
+/// directly, use `MIN_CD_SCOPE` and `MAX_CD_SCOPE` instead.
+typedef enum {
+ kCdScopeInvalid = -1,
+ kCdScopeWindow, ///< Affects one window.
+ kCdScopeTab, ///< Affects one tab page.
+ kCdScopeGlobal, ///< Affects the entire instance of Neovim.
+} CdScope;
+
+#define MIN_CD_SCOPE kCdScopeWindow
+#define MAX_CD_SCOPE kCdScopeGlobal
+
#endif /* NVIM_GLOBALS_H */
diff --git a/src/nvim/hardcopy.c b/src/nvim/hardcopy.c
index 916d27a964..c2dc6231f1 100644
--- a/src/nvim/hardcopy.c
+++ b/src/nvim/hardcopy.c
@@ -23,7 +23,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/option.h"
#include "nvim/path.h"
@@ -270,17 +269,25 @@ char_u *parse_printmbfont(void)
* Returns an error message for an illegal option, NULL otherwise.
* Only used for the printer at the moment...
*/
-static char_u *parse_list_options(char_u *option_str, option_table_T *table, int table_size)
+static char_u *parse_list_options(char_u *option_str, option_table_T *table,
+ size_t table_size)
{
+ option_table_T *old_opts;
+ char_u *ret = NULL;
char_u *stringp;
char_u *colonp;
char_u *commap;
char_u *p;
- int idx = 0; /* init for GCC */
+ size_t idx = 0; // init for GCC
int len;
- for (idx = 0; idx < table_size; ++idx)
- table[idx].present = FALSE;
+ // Save the old values, so that they can be restored in case of an error.
+ old_opts = (option_table_T *)xmalloc(sizeof(option_table_T) * table_size);
+
+ for (idx = 0; idx < table_size; idx++) {
+ old_opts[idx] = table[idx];
+ table[idx].present = false;
+ }
/*
* Repeat for all comma separated parts.
@@ -288,8 +295,10 @@ static char_u *parse_list_options(char_u *option_str, option_table_T *table, int
stringp = option_str;
while (*stringp) {
colonp = vim_strchr(stringp, ':');
- if (colonp == NULL)
- return (char_u *)N_("E550: Missing colon");
+ if (colonp == NULL) {
+ ret = (char_u *)N_("E550: Missing colon");
+ break;
+ }
commap = vim_strchr(stringp, ',');
if (commap == NULL)
commap = option_str + STRLEN(option_str);
@@ -300,15 +309,19 @@ static char_u *parse_list_options(char_u *option_str, option_table_T *table, int
if (STRNICMP(stringp, table[idx].name, len) == 0)
break;
- if (idx == table_size)
- return (char_u *)N_("E551: Illegal component");
+ if (idx == table_size) {
+ ret = (char_u *)N_("E551: Illegal component");
+ break;
+ }
p = colonp + 1;
table[idx].present = TRUE;
if (table[idx].hasnum) {
- if (!ascii_isdigit(*p))
- return (char_u *)N_("E552: digit expected");
+ if (!ascii_isdigit(*p)) {
+ ret = (char_u *)N_("E552: digit expected");
+ break;
+ }
table[idx].number = getdigits_int(&p);
}
@@ -321,7 +334,15 @@ static char_u *parse_list_options(char_u *option_str, option_table_T *table, int
++stringp;
}
- return NULL;
+ if (ret != NULL) {
+ // Restore old options in case of error
+ for (idx = 0; idx < table_size; idx++) {
+ table[idx] = old_opts[idx];
+ }
+ }
+
+ xfree(old_opts);
+ return ret;
}
@@ -1523,11 +1544,10 @@ static int prt_find_resource(char *name, struct prt_ps_resource_S *resource)
/* Look for named resource file in runtimepath */
STRCPY(buffer, "print");
add_pathsep((char *)buffer);
- vim_strcat(buffer, (char_u *)name, MAXPATHL);
- vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+ xstrlcat((char *)buffer, name, MAXPATHL);
+ xstrlcat((char *)buffer, ".ps", MAXPATHL);
resource->filename[0] = NUL;
- retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
- resource->filename)
+ retval = (do_in_runtimepath(buffer, 0, prt_resource_name, resource->filename)
&& resource->filename[0] != NUL);
xfree(buffer);
return retval;
@@ -2107,7 +2127,7 @@ int mch_print_init(prt_settings_T *psettings, char_u *jobname, int forceit)
props = enc_canon_props(p_encoding);
if (!(props & ENC_8BIT) && ((*p_pmcs != NUL) || !(props & ENC_UNICODE))) {
p_mbenc_first = NULL;
- int effective_cmap;
+ int effective_cmap = 0;
for (cmap = 0; cmap < (int)ARRAY_SIZE(prt_ps_mbfonts); cmap++)
if (prt_match_encoding((char *)p_encoding, &prt_ps_mbfonts[cmap],
&p_mbenc)) {
diff --git a/src/nvim/hashtab.c b/src/nvim/hashtab.c
index 2da937633e..376f33e23e 100644
--- a/src/nvim/hashtab.c
+++ b/src/nvim/hashtab.c
@@ -28,7 +28,6 @@
#include "nvim/hashtab.h"
#include "nvim/message.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
// Magic value for algorithm that walks through the array.
#define PERTURB_SHIFT 5
@@ -37,6 +36,8 @@
# include "hashtab.c.generated.h"
#endif
+char hash_removed;
+
/// Initialize an empty hash table.
void hash_init(hashtab_T *ht)
{
@@ -369,8 +370,7 @@ hash_T hash_hash(char_u *key)
hash_T hash = *key;
if (hash == 0) {
- // Empty keys are not allowed, but we don't want to crash if we get one.
- return (hash_T) 0;
+ return (hash_T)0;
}
// A simplistic algorithm that appears to do very well.
@@ -382,3 +382,13 @@ hash_T hash_hash(char_u *key)
return hash;
}
+
+/// Function to get HI_KEY_REMOVED value
+///
+/// Used for testing because luajit ffi does not allow getting addresses of
+/// globals.
+const char_u *_hash_key_removed(void)
+ FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ return HI_KEY_REMOVED;
+}
diff --git a/src/nvim/hashtab.h b/src/nvim/hashtab.h
index 7233d8c47c..0da2b13f2e 100644
--- a/src/nvim/hashtab.h
+++ b/src/nvim/hashtab.h
@@ -5,14 +5,19 @@
#include "nvim/types.h"
+/// Magic number used for hashitem "hi_key" value indicating a deleted item
+///
+/// Only the address is used.
+extern char hash_removed;
+
/// Type for hash number (hash calculation result).
typedef size_t hash_T;
/// The address of "hash_removed" is used as a magic number
/// for hi_key to indicate a removed item.
-#define HI_KEY_REMOVED &hash_removed
+#define HI_KEY_REMOVED ((char_u *)&hash_removed)
#define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL \
- || (hi)->hi_key == &hash_removed)
+ || (hi)->hi_key == (char_u *)&hash_removed)
/// A hastable item.
///
diff --git a/src/nvim/iconv.h b/src/nvim/iconv.h
index 4ac0d3fdd4..bf29b15247 100644
--- a/src/nvim/iconv.h
+++ b/src/nvim/iconv.h
@@ -24,10 +24,10 @@
// defined, we provide a type shim (pull in errno.h and define iconv_t).
// This enables us to still load and use iconv dynamically at runtime.
#ifdef USE_ICONV
+# include <errno.h>
# ifdef HAVE_ICONV_H
# include <iconv.h>
# else
-# include <errno.h>
typedef void *iconv_t;
# endif
#endif
diff --git a/src/nvim/if_cscope.c b/src/nvim/if_cscope.c
index 2f9ec0b3ff..0b20647771 100644
--- a/src/nvim/if_cscope.c
+++ b/src/nvim/if_cscope.c
@@ -20,7 +20,6 @@
#include "nvim/eval.h"
#include "nvim/fileio.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/os/time.h"
#include "nvim/path.h"
@@ -52,7 +51,7 @@ static cscmd_T cs_cmds[] =
{ "add", cs_add,
N_("Add a new database"), "add file|dir [pre-path] [flags]", 0 },
{ "find", cs_find,
- N_("Query for a pattern"), "find c|d|e|f|g|i|s|t name", 1 },
+ N_("Query for a pattern"), "find a|c|d|e|f|g|i|s|t name", 1 },
{ "help", cs_help,
N_("Show this message"), "help", 0 },
{ "kill", cs_kill,
@@ -105,13 +104,13 @@ char_u *get_cscope_name(expand_T *xp, int idx)
{
const char *query_type[] =
{
- "c", "d", "e", "f", "g", "i", "s", "t", NULL
+ "a", "c", "d", "e", "f", "g", "i", "s", "t", NULL
};
- /* Complete with query type of ":cscope find {query_type}".
- * {query_type} can be letters (c, d, ... t) or numbers (0, 1,
- * ..., 8) but only complete with letters, since numbers are
- * redundant. */
+ // Complete with query type of ":cscope find {query_type}".
+ // {query_type} can be letters (c, d, ... a) or numbers (0, 1,
+ // ..., 9) but only complete with letters, since numbers are
+ // redundant.
return (char_u *)query_type[idx];
}
case EXP_CSCOPE_KILL:
@@ -480,8 +479,9 @@ staterr:
if (arg2 != NULL) {
ppath = xmalloc(MAXPATHL + 1);
expand_env((char_u *)arg2, (char_u *)ppath, MAXPATHL);
- if (!os_file_exists((char_u *)ppath))
+ if (!os_path_exists((char_u *)ppath)) {
goto staterr;
+ }
}
int i;
@@ -673,6 +673,9 @@ static char *cs_create_cmd(char *csoption, char *pattern)
case '8': case 'i':
search = 8;
break;
+ case '9': case 'a':
+ search = 9;
+ break;
default:
(void)EMSG(_("E561: unknown cscope search type"));
cs_usage_msg(Find);
@@ -969,6 +972,9 @@ static int cs_find_common(char *opt, char *pat, int forceit, int verbose,
case '8':
cmdletter = 'i';
break;
+ case '9':
+ cmdletter = 'a';
+ break;
default:
cmdletter = opt[0];
}
@@ -1125,14 +1131,15 @@ static int cs_help(exarg_T *eap)
cmdp->usage);
if (strcmp(cmdp->name, "find") == 0)
MSG_PUTS(_("\n"
- " c: Find functions calling this function\n"
- " d: Find functions called by this function\n"
- " e: Find this egrep pattern\n"
- " f: Find this file\n"
- " g: Find this definition\n"
- " i: Find files #including this file\n"
- " s: Find this C symbol\n"
- " t: Find this text string\n"));
+ " a: Find assignments to this symbol\n"
+ " c: Find functions calling this function\n"
+ " d: Find functions called by this function\n"
+ " e: Find this egrep pattern\n"
+ " f: Find this file\n"
+ " g: Find this definition\n"
+ " i: Find files #including this file\n"
+ " s: Find this C symbol\n"
+ " t: Find this text string\n"));
cmdp++;
}
@@ -1754,8 +1761,8 @@ static void cs_print_tags_priv(char **matches, char **cntxts,
*/
static int cs_read_prompt(size_t i)
{
- char ch;
- char *buf = NULL; /* buffer for possible error message from cscope */
+ int ch;
+ char *buf = NULL; // buffer for possible error message from cscope
size_t bufpos = 0;
char *cs_emsg = _("E609: Cscope error: %s");
size_t cs_emsg_len = strlen(cs_emsg);
@@ -1767,35 +1774,34 @@ static int cs_read_prompt(size_t i)
size_t maxlen = IOSIZE - cs_emsg_len;
for (;; ) {
- while ((ch = (char)getc(csinfo[i].fr_fp)) != EOF && ch != CSCOPE_PROMPT[0])
- /* if there is room and char is printable */
+ while ((ch = getc(csinfo[i].fr_fp)) != EOF && ch != CSCOPE_PROMPT[0]) {
+ // if there is room and char is printable
if (bufpos < maxlen - 1 && vim_isprintc(ch)) {
// lazy buffer allocation
if (buf == NULL) {
buf = xmalloc(maxlen);
}
- {
- /* append character to the message */
- buf[bufpos++] = ch;
- buf[bufpos] = NUL;
- if (bufpos >= epromptlen
- && strcmp(&buf[bufpos - epromptlen], eprompt) == 0) {
- /* remove eprompt from buf */
- buf[bufpos - epromptlen] = NUL;
-
- /* print message to user */
- (void)EMSG2(cs_emsg, buf);
+ // append character to the message
+ buf[bufpos++] = (char)ch;
+ buf[bufpos] = NUL;
+ if (bufpos >= epromptlen
+ && strcmp(&buf[bufpos - epromptlen], eprompt) == 0) {
+ // remove eprompt from buf
+ buf[bufpos - epromptlen] = NUL;
+
+ // print message to user
+ (void)EMSG2(cs_emsg, buf);
- /* send RETURN to cscope */
- (void)putc('\n', csinfo[i].to_fp);
- (void)fflush(csinfo[i].to_fp);
+ // send RETURN to cscope
+ (void)putc('\n', csinfo[i].to_fp);
+ (void)fflush(csinfo[i].to_fp);
- /* clear buf */
- bufpos = 0;
- buf[bufpos] = NUL;
- }
+ // clear buf
+ bufpos = 0;
+ buf[bufpos] = NUL;
}
}
+ }
for (size_t n = 0; n < strlen(CSCOPE_PROMPT); ++n) {
if (n > 0)
diff --git a/src/nvim/if_cscope_defs.h b/src/nvim/if_cscope_defs.h
index 8cd74c74e6..f9d06eaea3 100644
--- a/src/nvim/if_cscope_defs.h
+++ b/src/nvim/if_cscope_defs.h
@@ -25,18 +25,7 @@
#define CSCOPE_DBFILE "cscope.out"
#define CSCOPE_PROMPT ">> "
-/*
- * s 0name Find this C symbol
- * g 1name Find this definition
- * d 2name Find functions called by this function
- * c 3name Find functions calling this function
- * t 4string find text string (cscope 12.9)
- * t 4name Find assignments to (cscope 13.3)
- * 5pattern change pattern -- NOT USED
- * e 6pattern Find this egrep pattern
- * f 7name Find this file
- * i 8name Find files #including this file
- */
+// See ":help cscope-find" for the possible queries.
typedef struct {
char * name;
diff --git a/src/nvim/indent.c b/src/nvim/indent.c
index f197669a97..7f31bb8c5c 100644
--- a/src/nvim/indent.c
+++ b/src/nvim/indent.c
@@ -10,7 +10,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/option.h"
#include "nvim/regexp.h"
diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c
index efe8e73a3c..7b758b4dac 100644
--- a/src/nvim/indent_c.c
+++ b/src/nvim/indent_c.c
@@ -12,7 +12,6 @@
#include "nvim/indent_c.h"
#include "nvim/memline.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/search.h"
#include "nvim/strings.h"
@@ -174,9 +173,8 @@ static char_u *skip_string(char_u *p)
char_u *delim = p + 2;
char_u *paren = vim_strchr(delim, '(');
- if (paren != NULL)
- {
- long delim_len = paren - delim;
+ if (paren != NULL) {
+ ptrdiff_t delim_len = paren - delim;
for (p += 3; *p; ++p)
if (p[0] == ')' && STRNCMP(p + 1, delim, delim_len) == 0
diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c
index 99e94fc60f..94bbaf4239 100644
--- a/src/nvim/keymap.c
+++ b/src/nvim/keymap.c
@@ -573,8 +573,10 @@ int find_special_key(const char_u **srcp, const size_t src_len, int *const modp,
} else {
l = 1;
}
- if (end - bp > l && bp[l + 1] == '>') {
- bp += l; // anything accepted, like <C-?>
+ if (end - bp > l && bp[l] != '"' && bp[l + 1] == '>') {
+ // Anything accepted, like <C-?>, except <C-">, because the "
+ // ends the string.
+ bp += l;
}
}
}
diff --git a/src/nvim/lib/klist.h b/src/nvim/lib/klist.h
index 1280a927e8..7ee100ab8c 100644
--- a/src/nvim/lib/klist.h
+++ b/src/nvim/lib/klist.h
@@ -33,35 +33,37 @@
#include "nvim/func_attr.h"
-#define KMEMPOOL_INIT(name, kmptype_t, kmpfree_f) \
- typedef struct { \
- size_t cnt, n, max; \
- kmptype_t **buf; \
- } kmp_##name##_t; \
- static inline kmp_##name##_t *kmp_init_##name(void) { \
- return xcalloc(1, sizeof(kmp_##name##_t)); \
- } \
- static inline void kmp_destroy_##name(kmp_##name##_t *mp) \
- REAL_FATTR_UNUSED; \
- static inline void kmp_destroy_##name(kmp_##name##_t *mp) { \
- size_t k; \
- for (k = 0; k < mp->n; ++k) { \
- kmpfree_f(mp->buf[k]); xfree(mp->buf[k]); \
- } \
- xfree(mp->buf); xfree(mp); \
- } \
- static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \
- ++mp->cnt; \
- if (mp->n == 0) return xcalloc(1, sizeof(kmptype_t)); \
- return mp->buf[--mp->n]; \
- } \
+#define KMEMPOOL_INIT(name, kmptype_t, kmpfree_f) \
+ typedef struct { \
+ size_t cnt, n, max; \
+ kmptype_t **buf; \
+ } kmp_##name##_t; \
+ static inline kmp_##name##_t *kmp_init_##name(void) { \
+ return xcalloc(1, sizeof(kmp_##name##_t)); \
+ } \
+ static inline void kmp_destroy_##name(kmp_##name##_t *mp) \
+ REAL_FATTR_UNUSED; \
+ static inline void kmp_destroy_##name(kmp_##name##_t *mp) { \
+ size_t k; \
+ for (k = 0; k < mp->n; k++) { \
+ kmpfree_f(mp->buf[k]); xfree(mp->buf[k]); \
+ } \
+ xfree(mp->buf); xfree(mp); \
+ } \
+ static inline kmptype_t *kmp_alloc_##name(kmp_##name##_t *mp) { \
+ mp->cnt++; \
+ if (mp->n == 0) { \
+ return xcalloc(1, sizeof(kmptype_t)); \
+ } \
+ return mp->buf[--mp->n]; \
+ } \
static inline void kmp_free_##name(kmp_##name##_t *mp, kmptype_t *p) { \
- --mp->cnt; \
- if (mp->n == mp->max) { \
- mp->max = mp->max? mp->max<<1 : 16; \
+ mp->cnt--; \
+ if (mp->n == mp->max) { \
+ mp->max = mp->max ? (mp->max << 1) : 16; \
mp->buf = xrealloc(mp->buf, sizeof(kmptype_t *) * mp->max); \
- } \
- mp->buf[mp->n++] = p; \
+ } \
+ mp->buf[mp->n++] = p; \
}
#define kmempool_t(name) kmp_##name##_t
@@ -70,54 +72,56 @@
#define kmp_alloc(name, mp) kmp_alloc_##name(mp)
#define kmp_free(name, mp, p) kmp_free_##name(mp, p)
-#define KLIST_INIT(name, kltype_t, kmpfree_t) \
- struct __kl1_##name { \
- kltype_t data; \
- struct __kl1_##name *next; \
- }; \
- typedef struct __kl1_##name kl1_##name; \
- KMEMPOOL_INIT(name, kl1_##name, kmpfree_t) \
- typedef struct { \
- kl1_##name *head, *tail; \
- kmp_##name##_t *mp; \
- size_t size; \
- } kl_##name##_t; \
- static inline kl_##name##_t *kl_init_##name(void) { \
- kl_##name##_t *kl = xcalloc(1, sizeof(kl_##name##_t)); \
- kl->mp = kmp_init(name); \
- kl->head = kl->tail = kmp_alloc(name, kl->mp); \
- kl->head->next = 0; \
- return kl; \
- } \
- static inline void kl_destroy_##name(kl_##name##_t *kl) \
- REAL_FATTR_UNUSED; \
- static inline void kl_destroy_##name(kl_##name##_t *kl) { \
- kl1_##name *p; \
- for (p = kl->head; p != kl->tail; p = p->next) \
- kmp_free(name, kl->mp, p); \
- kmp_free(name, kl->mp, p); \
- kmp_destroy(name, kl->mp); \
- xfree(kl); \
- } \
- static inline void kl_push_##name(kl_##name##_t *kl, kltype_t d) { \
- kl1_##name *q, *p = kmp_alloc(name, kl->mp); \
- q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; \
- ++kl->size; \
- q->data = d; \
- } \
- static inline kltype_t kl_shift_at_##name(kl_##name##_t *kl, \
- kl1_##name **n) { \
- assert((*n)->next); \
- kl1_##name *p; \
- --kl->size; \
- p = *n; \
- *n = (*n)->next; \
- if (p == kl->head) kl->head = *n; \
- kltype_t d = p->data; \
- kmp_free(name, kl->mp, p); \
- return d; \
- } \
-
+#define KLIST_INIT(name, kltype_t, kmpfree_t) \
+ struct __kl1_##name { \
+ kltype_t data; \
+ struct __kl1_##name *next; \
+ }; \
+ typedef struct __kl1_##name kl1_##name; \
+ KMEMPOOL_INIT(name, kl1_##name, kmpfree_t) \
+ typedef struct { \
+ kl1_##name *head, *tail; \
+ kmp_##name##_t *mp; \
+ size_t size; \
+ } kl_##name##_t; \
+ static inline kl_##name##_t *kl_init_##name(void) { \
+ kl_##name##_t *kl = xcalloc(1, sizeof(kl_##name##_t)); \
+ kl->mp = kmp_init(name); \
+ kl->head = kl->tail = kmp_alloc(name, kl->mp); \
+ kl->head->next = 0; \
+ return kl; \
+ } \
+ static inline void kl_destroy_##name(kl_##name##_t *kl) \
+ REAL_FATTR_UNUSED; \
+ static inline void kl_destroy_##name(kl_##name##_t *kl) { \
+ kl1_##name *p; \
+ for (p = kl->head; p != kl->tail; p = p->next) { \
+ kmp_free(name, kl->mp, p); \
+ } \
+ kmp_free(name, kl->mp, p); \
+ kmp_destroy(name, kl->mp); \
+ xfree(kl); \
+ } \
+ static inline void kl_push_##name(kl_##name##_t *kl, kltype_t d) { \
+ kl1_##name *q, *p = kmp_alloc(name, kl->mp); \
+ q = kl->tail; p->next = 0; kl->tail->next = p; kl->tail = p; \
+ kl->size++; \
+ q->data = d; \
+ } \
+ static inline kltype_t kl_shift_at_##name(kl_##name##_t *kl, \
+ kl1_##name **n) { \
+ assert((*n)->next); \
+ kl1_##name *p; \
+ kl->size--; \
+ p = *n; \
+ *n = (*n)->next; \
+ if (p == kl->head) { \
+ kl->head = *n; \
+ } \
+ kltype_t d = p->data; \
+ kmp_free(name, kl->mp, p); \
+ return d; \
+ }
#define kliter_t(name) kl1_##name
#define klist_t(name) kl_##name##_t
diff --git a/src/nvim/lib/kvec.h b/src/nvim/lib/kvec.h
index b41ef0cc9f..584282d773 100644
--- a/src/nvim/lib/kvec.h
+++ b/src/nvim/lib/kvec.h
@@ -1,59 +1,61 @@
-/* The MIT License
-
- Copyright (c) 2008, by Attractive Chaos <attractor@live.co.uk>
-
- Permission is hereby granted, free of charge, to any person obtaining
- a copy of this software and associated documentation files (the
- "Software"), to deal in the Software without restriction, including
- without limitation the rights to use, copy, modify, merge, publish,
- distribute, sublicense, and/or sell copies of the Software, and to
- permit persons to whom the Software is furnished to do so, subject to
- the following conditions:
-
- The above copyright notice and this permission notice shall be
- included in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-*/
-
-/*
- An example:
-
-#include "kvec.h"
-int main() {
- kvec_t(int) array;
- kv_init(array);
- kv_push(int, array, 10); // append
- kv_a(int, array, 20) = 5; // dynamic
- kv_A(array, 20) = 4; // static
- kv_destroy(array);
- return 0;
-}
-*/
-
-/*
- 2008-09-22 (0.1.0):
+// The MIT License
+//
+// Copyright (c) 2008, by Attractive Chaos <attractor@live.co.uk>
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+// BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+// SOFTWARE.
+
+// An example:
+//
+// #include "kvec.h"
+// int main() {
+// kvec_t(int) array = KV_INITIAL_VALUE;
+// kv_push(array, 10); // append
+// kv_a(array, 20) = 5; // dynamic
+// kv_A(array, 20) = 4; // static
+// kv_destroy(array);
+// return 0;
+// }
+
+#ifndef NVIM_LIB_KVEC_H
+#define NVIM_LIB_KVEC_H
- * The initial version.
+#include <stdlib.h>
+#include <string.h>
-*/
+#include "nvim/memory.h"
-#ifndef AC_KVEC_H
-#define AC_KVEC_H
+#define kv_roundup32(x) \
+ ((--(x)), \
+ ((x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16), \
+ (++(x)))
-#include <stdlib.h>
-#include "nvim/memory.h"
+#define KV_INITIAL_VALUE { .size = 0, .capacity = 0, .items = NULL }
-#define kv_roundup32(x) (--(x), (x)|=(x)>>1, (x)|=(x)>>2, (x)|=(x)>>4, (x)|=(x)>>8, (x)|=(x)>>16, ++(x))
+#define kvec_t(type) \
+ struct { \
+ size_t size; \
+ size_t capacity; \
+ type *items; \
+ }
-#define kvec_t(type) struct { size_t size, capacity; type *items; }
#define kv_init(v) ((v).size = (v).capacity = 0, (v).items = 0)
#define kv_destroy(v) xfree((v).items)
#define kv_A(v, i) ((v).items[(i)])
@@ -62,31 +64,133 @@ int main() {
#define kv_max(v) ((v).capacity)
#define kv_last(v) kv_A(v, kv_size(v) - 1)
-#define kv_resize(type, v, s) ((v).capacity = (s), (v).items = (type*)xrealloc((v).items, sizeof(type) * (v).capacity))
-
-#define kv_copy(type, v1, v0) do { \
- if ((v1).capacity < (v0).size) kv_resize(type, v1, (v0).size); \
- (v1).size = (v0).size; \
- memcpy((v1).items, (v0).items, sizeof(type) * (v0).size); \
- } while (0) \
-
-#define kv_push(type, v, x) do { \
- if ((v).size == (v).capacity) { \
- (v).capacity = (v).capacity? (v).capacity<<1 : 8; \
- (v).items = (type*)xrealloc((v).items, sizeof(type) * (v).capacity); \
- } \
- (v).items[(v).size++] = (x); \
- } while (0)
-
-#define kv_pushp(type, v) ((((v).size == (v).capacity)? \
- ((v).capacity = ((v).capacity? (v).capacity<<1 : 8), \
- (v).items = (type*)xrealloc((v).items, sizeof(type) * (v).capacity), 0) \
- : 0), ((v).items + ((v).size++)))
-
-#define kv_a(type, v, i) (((v).capacity <= (size_t)(i)? \
- ((v).capacity = (v).size = (i) + 1, kv_roundup32((v).capacity), \
- (v).items = (type*)xrealloc((v).items, sizeof(type) * (v).capacity), 0) \
- : (v).size <= (size_t)(i)? (v).size = (i) + 1 \
- : 0), (v).items[(i)])
-
-#endif
+#define kv_resize(v, s) \
+ ((v).capacity = (s), \
+ (v).items = xrealloc((v).items, sizeof((v).items[0]) * (v).capacity))
+
+#define kv_resize_full(v) \
+ kv_resize(v, (v).capacity ? (v).capacity << 1 : 8)
+
+#define kv_copy(v1, v0) \
+ do { \
+ if ((v1).capacity < (v0).size) { \
+ kv_resize(v1, (v0).size); \
+ } \
+ (v1).size = (v0).size; \
+ memcpy((v1).items, (v0).items, sizeof((v1).items[0]) * (v0).size); \
+ } while (0) \
+
+#define kv_pushp(v) \
+ ((((v).size == (v).capacity) ? (kv_resize_full(v), 0) : 0), \
+ ((v).items + ((v).size++)))
+
+#define kv_push(v, x) \
+ (*kv_pushp(v) = (x))
+
+#define kv_a(v, i) \
+ (((v).capacity <= (size_t) (i) \
+ ? ((v).capacity = (v).size = (i) + 1, \
+ kv_roundup32((v).capacity), \
+ kv_resize((v), (v).capacity), 0) \
+ : ((v).size <= (size_t) (i) \
+ ? (v).size = (i) + 1 \
+ : 0)), \
+ (v).items[(i)])
+
+/// Type of a vector with a few first members allocated on stack
+///
+/// Is compatible with #kv_A, #kv_pop, #kv_size, #kv_max, #kv_last.
+/// Is not compatible with #kv_resize, #kv_resize_full, #kv_copy, #kv_push,
+/// #kv_pushp, #kv_a, #kv_destroy.
+///
+/// @param[in] type Type of vector elements.
+/// @param[in] init_size Number of the elements in the initial array.
+#define kvec_withinit_t(type, INIT_SIZE) \
+ struct { \
+ size_t size; \
+ size_t capacity; \
+ type *items; \
+ type init_array[INIT_SIZE]; \
+ }
+
+/// Initialize vector with preallocated array
+///
+/// @param[out] v Vector to initialize.
+#define kvi_init(v) \
+ ((v).capacity = ARRAY_SIZE((v).init_array), \
+ (v).size = 0, \
+ (v).items = (v).init_array)
+
+/// Move data to a new destination and free source
+static inline void *_memcpy_free(void *const restrict dest,
+ void *const restrict src,
+ const size_t size)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET FUNC_ATTR_ALWAYS_INLINE
+{
+ memcpy(dest, src, size);
+ xfree(src);
+ return dest;
+}
+
+/// Resize vector with preallocated array
+///
+/// @note May not resize to an array smaller then init_array: if requested,
+/// init_array will be used.
+///
+/// @param[out] v Vector to resize.
+/// @param[in] s New size.
+#define kvi_resize(v, s) \
+ ((v).capacity = ((s) > ARRAY_SIZE((v).init_array) \
+ ? (s) \
+ : ARRAY_SIZE((v).init_array)), \
+ (v).items = ((v).capacity == ARRAY_SIZE((v).init_array) \
+ ? ((v).items == (v).init_array \
+ ? (v).items \
+ : _memcpy_free((v).init_array, (v).items, \
+ (v).size * sizeof((v).items[0]))) \
+ : ((v).items == (v).init_array \
+ ? memcpy(xmalloc((v).capacity * sizeof((v).items[0])), \
+ (v).items, \
+ (v).size * sizeof((v).items[0])) \
+ : xrealloc((v).items, \
+ (v).capacity * sizeof((v).items[0])))))
+
+/// Resize vector with preallocated array when it is full
+///
+/// @param[out] v Vector to resize.
+#define kvi_resize_full(v) \
+ /* ARRAY_SIZE((v).init_array) is the minimal capacity of this vector. */ \
+ /* Thus when vector is full capacity may not be zero and it is safe */ \
+ /* not to bother with checking whether (v).capacity is 0. But now */ \
+ /* capacity is not guaranteed to have size that is a power of 2, it is */ \
+ /* hard to fix this here and is not very necessary if users will use */ \
+ /* 2^x initial array size. */ \
+ kvi_resize(v, (v).capacity << 1)
+
+/// Get location where to store new element to a vector with preallocated array
+///
+/// @param[in,out] v Vector to push to.
+///
+/// @return Pointer to the place where new value should be stored.
+#define kvi_pushp(v) \
+ ((((v).size == (v).capacity) ? (kvi_resize_full(v), 0) : 0), \
+ ((v).items + ((v).size++)))
+
+/// Push value to a vector with preallocated array
+///
+/// @param[out] v Vector to push to.
+/// @param[in] x Value to push.
+#define kvi_push(v, x) \
+ (*kvi_pushp(v) = (x))
+
+/// Free array of elements of a vector with preallocated array if needed
+///
+/// @param[out] v Vector to free.
+#define kvi_destroy(v) \
+ do { \
+ if ((v).items != (v).init_array) { \
+ xfree((v).items); \
+ } \
+ } while (0)
+
+#endif // NVIM_LIB_KVEC_H
diff --git a/src/nvim/lib/queue.h b/src/nvim/lib/queue.h
index fe02b454ea..ab9270081e 100644
--- a/src/nvim/lib/queue.h
+++ b/src/nvim/lib/queue.h
@@ -1,92 +1,90 @@
-/* Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
+// Queue implemented by circularly-linked list.
+//
+// Adapted from libuv. Simpler and more efficient than klist.h for implementing
+// queues that support arbitrary insertion/removal.
+//
+// Copyright (c) 2013, Ben Noordhuis <info@bnoordhuis.nl>
+//
+// Permission to use, copy, modify, and/or distribute this software for any
+// purpose with or without fee is hereby granted, provided that the above
+// copyright notice and this permission notice appear in all copies.
+//
+// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-#ifndef QUEUE_H_
-#define QUEUE_H_
+#ifndef NVIM_LIB_QUEUE_H
+#define NVIM_LIB_QUEUE_H
-typedef void *QUEUE[2];
+#include <stddef.h>
-/* Private macros. */
-#define QUEUE_NEXT(q) (*(QUEUE **) &((*(q))[0]))
-#define QUEUE_PREV(q) (*(QUEUE **) &((*(q))[1]))
-#define QUEUE_PREV_NEXT(q) (QUEUE_NEXT(QUEUE_PREV(q)))
-#define QUEUE_NEXT_PREV(q) (QUEUE_PREV(QUEUE_NEXT(q)))
+#include "nvim/func_attr.h"
-/* Public macros. */
-#define QUEUE_DATA(ptr, type, field) \
- ((type *) ((char *) (ptr) - ((char *) &((type *) 0)->field)))
+typedef struct _queue {
+ struct _queue *next;
+ struct _queue *prev;
+} QUEUE;
-#define QUEUE_FOREACH(q, h) \
- for ((q) = QUEUE_NEXT(h); (q) != (h); (q) = QUEUE_NEXT(q))
+// Public macros.
+#define QUEUE_DATA(ptr, type, field) \
+ ((type *)((char *)(ptr) - offsetof(type, field)))
-#define QUEUE_EMPTY(q) \
- ((const QUEUE *) (q) == (const QUEUE *) QUEUE_NEXT(q))
+// Important note: mutating the list while QUEUE_FOREACH is
+// iterating over its elements results in undefined behavior.
+#define QUEUE_FOREACH(q, h) \
+ for ( /* NOLINT(readability/braces) */ \
+ (q) = (h)->next; (q) != (h); (q) = (q)->next)
-#define QUEUE_HEAD(q) \
- (QUEUE_NEXT(q))
+// ffi.cdef is unable to swallow `bool` in place of `int` here.
+static inline int QUEUE_EMPTY(const QUEUE *const q)
+ FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ return q == q->next;
+}
-#define QUEUE_INIT(q) \
- do { \
- QUEUE_NEXT(q) = (q); \
- QUEUE_PREV(q) = (q); \
- } \
- while (0)
+#define QUEUE_HEAD(q) (q)->next
-#define QUEUE_ADD(h, n) \
- do { \
- QUEUE_PREV_NEXT(h) = QUEUE_NEXT(n); \
- QUEUE_NEXT_PREV(n) = QUEUE_PREV(h); \
- QUEUE_PREV(h) = QUEUE_PREV(n); \
- QUEUE_PREV_NEXT(h) = (h); \
- } \
- while (0)
+static inline void QUEUE_INIT(QUEUE *const q) FUNC_ATTR_ALWAYS_INLINE
+{
+ q->next = q;
+ q->prev = q;
+}
-#define QUEUE_SPLIT(h, q, n) \
- do { \
- QUEUE_PREV(n) = QUEUE_PREV(h); \
- QUEUE_PREV_NEXT(n) = (n); \
- QUEUE_NEXT(n) = (q); \
- QUEUE_PREV(h) = QUEUE_PREV(q); \
- QUEUE_PREV_NEXT(h) = (h); \
- QUEUE_PREV(q) = (n); \
- } \
- while (0)
+static inline void QUEUE_ADD(QUEUE *const h, QUEUE *const n)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ h->prev->next = n->next;
+ n->next->prev = h->prev;
+ h->prev = n->prev;
+ h->prev->next = h;
+}
-#define QUEUE_INSERT_HEAD(h, q) \
- do { \
- QUEUE_NEXT(q) = QUEUE_NEXT(h); \
- QUEUE_PREV(q) = (h); \
- QUEUE_NEXT_PREV(q) = (q); \
- QUEUE_NEXT(h) = (q); \
- } \
- while (0)
+static inline void QUEUE_INSERT_HEAD(QUEUE *const h, QUEUE *const q)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ q->next = h->next;
+ q->prev = h;
+ q->next->prev = q;
+ h->next = q;
+}
-#define QUEUE_INSERT_TAIL(h, q) \
- do { \
- QUEUE_NEXT(q) = (h); \
- QUEUE_PREV(q) = QUEUE_PREV(h); \
- QUEUE_PREV_NEXT(q) = (q); \
- QUEUE_PREV(h) = (q); \
- } \
- while (0)
+static inline void QUEUE_INSERT_TAIL(QUEUE *const h, QUEUE *const q)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ q->next = h;
+ q->prev = h->prev;
+ q->prev->next = q;
+ h->prev = q;
+}
-#define QUEUE_REMOVE(q) \
- do { \
- QUEUE_PREV_NEXT(q) = QUEUE_NEXT(q); \
- QUEUE_NEXT_PREV(q) = QUEUE_PREV(q); \
- } \
- while (0)
+static inline void QUEUE_REMOVE(QUEUE *const q) FUNC_ATTR_ALWAYS_INLINE
+{
+ q->prev->next = q->next;
+ q->next->prev = q->prev;
+}
-#endif /* QUEUE_H_ */
+#endif // NVIM_LIB_QUEUE_H
diff --git a/src/nvim/lib/ringbuf.h b/src/nvim/lib/ringbuf.h
index cb71500bb7..12b75ec65a 100644
--- a/src/nvim/lib/ringbuf.h
+++ b/src/nvim/lib/ringbuf.h
@@ -65,12 +65,12 @@
/// @param TypeName Ring buffer type name. Actual type name will be
/// `{TypeName}RingBuffer`.
/// @param RBType Type of the single ring buffer element.
-#define RINGBUF_TYPEDEF(TypeName, RBType) \
-typedef struct { \
- RBType *buf; \
- RBType *next; \
- RBType *first; \
- RBType *buf_end; \
+#define RINGBUF_TYPEDEF(TypeName, RBType) \
+typedef struct { \
+ RBType *buf; \
+ RBType *next; \
+ RBType *first; \
+ RBType *buf_end; \
} TypeName##RingBuffer;
/// Initialize a new ring buffer
@@ -84,198 +84,196 @@ typedef struct { \
/// a macros like `#define RBFREE(item)` (to skip freeing).
///
/// Intended function signature: `void *rbfree(RBType *)`;
-#define RINGBUF_INIT(TypeName, funcprefix, RBType, rbfree) \
- \
- \
-static inline TypeName##RingBuffer funcprefix##_rb_new(const size_t size) \
- REAL_FATTR_WARN_UNUSED_RESULT; \
-static inline TypeName##RingBuffer funcprefix##_rb_new(const size_t size) \
-{ \
- assert(size != 0); \
- RBType *buf = xmalloc(size * sizeof(RBType)); \
- return (TypeName##RingBuffer) { \
- .buf = buf, \
- .next = buf, \
- .first = NULL, \
- .buf_end = buf + size - 1, \
- }; \
-} \
- \
-static inline void funcprefix##_rb_free(TypeName##RingBuffer *const rb) \
- REAL_FATTR_UNUSED; \
-static inline void funcprefix##_rb_free(TypeName##RingBuffer *const rb) \
-{ \
- if (rb == NULL) { \
- return; \
- } \
- RINGBUF_FORALL(rb, RBType, rbitem) { \
- rbfree(rbitem); \
- } \
- xfree(rb->buf); \
-} \
- \
-static inline void funcprefix##_rb_dealloc(TypeName##RingBuffer *const rb) \
- REAL_FATTR_UNUSED; \
-static inline void funcprefix##_rb_dealloc(TypeName##RingBuffer *const rb) \
-{ \
- xfree(rb->buf); \
-} \
- \
-static inline void funcprefix##_rb_push(TypeName##RingBuffer *const rb, \
- RBType item) \
- REAL_FATTR_NONNULL_ARG(1); \
-static inline void funcprefix##_rb_push(TypeName##RingBuffer *const rb, \
- RBType item) \
-{ \
- if (rb->next == rb->first) { \
- rbfree(rb->first); \
- rb->first = _RINGBUF_NEXT(rb, rb->first); \
- } else if (rb->first == NULL) { \
- rb->first = rb->next; \
- } \
- *rb->next = item; \
- rb->next = _RINGBUF_NEXT(rb, rb->next); \
-} \
- \
-static inline ptrdiff_t funcprefix##_rb_find_idx( \
- const TypeName##RingBuffer *const rb, const RBType *const item_p) \
- REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE REAL_FATTR_UNUSED; \
-static inline ptrdiff_t funcprefix##_rb_find_idx( \
- const TypeName##RingBuffer *const rb, const RBType *const item_p) \
-{ \
- assert(rb->buf <= item_p); \
- assert(rb->buf_end >= item_p); \
- if (rb->first == NULL) { \
- return -1; \
- } else if (item_p >= rb->first) { \
- return item_p - rb->first; \
- } else { \
- return item_p - rb->buf + rb->buf_end - rb->first + 1; \
- } \
-} \
- \
-static inline size_t funcprefix##_rb_size( \
- const TypeName##RingBuffer *const rb) \
- REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
-static inline size_t funcprefix##_rb_size( \
- const TypeName##RingBuffer *const rb) \
-{ \
- return (size_t) (rb->buf_end - rb->buf) + 1; \
-} \
- \
-static inline size_t funcprefix##_rb_length( \
- const TypeName##RingBuffer *const rb) \
- REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
-static inline size_t funcprefix##_rb_length( \
- const TypeName##RingBuffer *const rb) \
-{ \
- return _RINGBUF_LENGTH(rb); \
-} \
- \
-static inline RBType *funcprefix##_rb_idx_p( \
- const TypeName##RingBuffer *const rb, const size_t idx) \
- REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
-static inline RBType *funcprefix##_rb_idx_p( \
- const TypeName##RingBuffer *const rb, const size_t idx) \
-{ \
- assert(idx <= funcprefix##_rb_size(rb)); \
- assert(idx <= funcprefix##_rb_length(rb)); \
- if (rb->first + idx > rb->buf_end) { \
- return rb->buf + ((rb->first + idx) - (rb->buf_end + 1)); \
- } else { \
- return rb->first + idx; \
- } \
-} \
- \
+#define RINGBUF_INIT(TypeName, funcprefix, RBType, rbfree) \
+static inline TypeName##RingBuffer funcprefix##_rb_new(const size_t size) \
+ REAL_FATTR_WARN_UNUSED_RESULT; \
+static inline TypeName##RingBuffer funcprefix##_rb_new(const size_t size) \
+{ \
+ assert(size != 0); \
+ RBType *buf = xmalloc(size * sizeof(RBType)); \
+ return (TypeName##RingBuffer) { \
+ .buf = buf, \
+ .next = buf, \
+ .first = NULL, \
+ .buf_end = buf + size - 1, \
+ }; \
+} \
+\
+static inline void funcprefix##_rb_free(TypeName##RingBuffer *const rb) \
+ REAL_FATTR_UNUSED; \
+static inline void funcprefix##_rb_free(TypeName##RingBuffer *const rb) \
+{ \
+ if (rb == NULL) { \
+ return; \
+ } \
+ RINGBUF_FORALL(rb, RBType, rbitem) { \
+ rbfree(rbitem); \
+ } \
+ xfree(rb->buf); \
+} \
+\
+static inline void funcprefix##_rb_dealloc(TypeName##RingBuffer *const rb) \
+ REAL_FATTR_UNUSED; \
+static inline void funcprefix##_rb_dealloc(TypeName##RingBuffer *const rb) \
+{ \
+ xfree(rb->buf); \
+} \
+\
+static inline void funcprefix##_rb_push(TypeName##RingBuffer *const rb, \
+ RBType item) \
+ REAL_FATTR_NONNULL_ARG(1); \
+static inline void funcprefix##_rb_push(TypeName##RingBuffer *const rb, \
+ RBType item) \
+{ \
+ if (rb->next == rb->first) { \
+ rbfree(rb->first); \
+ rb->first = _RINGBUF_NEXT(rb, rb->first); \
+ } else if (rb->first == NULL) { \
+ rb->first = rb->next; \
+ } \
+ *rb->next = item; \
+ rb->next = _RINGBUF_NEXT(rb, rb->next); \
+} \
+\
+static inline ptrdiff_t funcprefix##_rb_find_idx( \
+ const TypeName##RingBuffer *const rb, const RBType *const item_p) \
+ REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE REAL_FATTR_UNUSED; \
+static inline ptrdiff_t funcprefix##_rb_find_idx( \
+ const TypeName##RingBuffer *const rb, const RBType *const item_p) \
+{ \
+ assert(rb->buf <= item_p); \
+ assert(rb->buf_end >= item_p); \
+ if (rb->first == NULL) { \
+ return -1; \
+ } else if (item_p >= rb->first) { \
+ return item_p - rb->first; \
+ } else { \
+ return item_p - rb->buf + rb->buf_end - rb->first + 1; \
+ } \
+} \
+\
+static inline size_t funcprefix##_rb_size( \
+ const TypeName##RingBuffer *const rb) \
+ REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
+static inline size_t funcprefix##_rb_size( \
+ const TypeName##RingBuffer *const rb) \
+{ \
+ return (size_t) (rb->buf_end - rb->buf) + 1; \
+} \
+\
+static inline size_t funcprefix##_rb_length( \
+ const TypeName##RingBuffer *const rb) \
+ REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
+static inline size_t funcprefix##_rb_length( \
+ const TypeName##RingBuffer *const rb) \
+{ \
+ return _RINGBUF_LENGTH(rb); \
+} \
+\
+static inline RBType *funcprefix##_rb_idx_p( \
+ const TypeName##RingBuffer *const rb, const size_t idx) \
+ REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE; \
+static inline RBType *funcprefix##_rb_idx_p( \
+ const TypeName##RingBuffer *const rb, const size_t idx) \
+{ \
+ assert(idx <= funcprefix##_rb_size(rb)); \
+ assert(idx <= funcprefix##_rb_length(rb)); \
+ if (rb->first + idx > rb->buf_end) { \
+ return rb->buf + ((rb->first + idx) - (rb->buf_end + 1)); \
+ } else { \
+ return rb->first + idx; \
+ } \
+} \
+\
static inline RBType funcprefix##_rb_idx(const TypeName##RingBuffer *const rb, \
- const size_t idx) \
- REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE REAL_FATTR_UNUSED; \
+ const size_t idx) \
+ REAL_FATTR_NONNULL_ALL REAL_FATTR_PURE REAL_FATTR_UNUSED; \
static inline RBType funcprefix##_rb_idx(const TypeName##RingBuffer *const rb, \
- const size_t idx) \
-{ \
- return *funcprefix##_rb_idx_p(rb, idx); \
-} \
- \
-static inline void funcprefix##_rb_insert(TypeName##RingBuffer *const rb, \
- const size_t idx, \
- RBType item) \
- REAL_FATTR_NONNULL_ARG(1) REAL_FATTR_UNUSED; \
-static inline void funcprefix##_rb_insert(TypeName##RingBuffer *const rb, \
- const size_t idx, \
- RBType item) \
-{ \
- assert(idx <= funcprefix##_rb_size(rb)); \
- assert(idx <= funcprefix##_rb_length(rb)); \
- const size_t length = funcprefix##_rb_length(rb); \
- if (idx == length) { \
- funcprefix##_rb_push(rb, item); \
- return; \
- } \
- RBType *const insertpos = funcprefix##_rb_idx_p(rb, idx); \
- if (insertpos == rb->next) { \
- funcprefix##_rb_push(rb, item); \
- return; \
- } \
- if (length == funcprefix##_rb_size(rb)) { \
- rbfree(rb->first); \
- } \
- if (insertpos < rb->next) { \
- memmove(insertpos + 1, insertpos, \
- (size_t) ((uintptr_t) rb->next - (uintptr_t) insertpos)); \
- } else { \
- assert(insertpos > rb->first); \
- assert(rb->next <= rb->first); \
- memmove(rb->buf + 1, rb->buf, \
- (size_t) ((uintptr_t) rb->next - (uintptr_t) rb->buf)); \
- *rb->buf = *rb->buf_end; \
- memmove(insertpos + 1, insertpos, \
+ const size_t idx) \
+{ \
+ return *funcprefix##_rb_idx_p(rb, idx); \
+} \
+\
+static inline void funcprefix##_rb_insert(TypeName##RingBuffer *const rb, \
+ const size_t idx, \
+ RBType item) \
+ REAL_FATTR_NONNULL_ARG(1) REAL_FATTR_UNUSED; \
+static inline void funcprefix##_rb_insert(TypeName##RingBuffer *const rb, \
+ const size_t idx, \
+ RBType item) \
+{ \
+ assert(idx <= funcprefix##_rb_size(rb)); \
+ assert(idx <= funcprefix##_rb_length(rb)); \
+ const size_t length = funcprefix##_rb_length(rb); \
+ if (idx == length) { \
+ funcprefix##_rb_push(rb, item); \
+ return; \
+ } \
+ RBType *const insertpos = funcprefix##_rb_idx_p(rb, idx); \
+ if (insertpos == rb->next) { \
+ funcprefix##_rb_push(rb, item); \
+ return; \
+ } \
+ if (length == funcprefix##_rb_size(rb)) { \
+ rbfree(rb->first); \
+ } \
+ if (insertpos < rb->next) { \
+ memmove(insertpos + 1, insertpos, \
+ (size_t) ((uintptr_t) rb->next - (uintptr_t) insertpos)); \
+ } else { \
+ assert(insertpos > rb->first); \
+ assert(rb->next <= rb->first); \
+ memmove(rb->buf + 1, rb->buf, \
+ (size_t) ((uintptr_t) rb->next - (uintptr_t) rb->buf)); \
+ *rb->buf = *rb->buf_end; \
+ memmove(insertpos + 1, insertpos, \
(size_t) ((uintptr_t) (rb->buf_end + 1) - (uintptr_t) insertpos)); \
- } \
- *insertpos = item; \
- if (length == funcprefix##_rb_size(rb)) { \
- rb->first = _RINGBUF_NEXT(rb, rb->first); \
- } \
- rb->next = _RINGBUF_NEXT(rb, rb->next); \
-} \
- \
-static inline void funcprefix##_rb_remove(TypeName##RingBuffer *const rb, \
- const size_t idx) \
- REAL_FATTR_NONNULL_ARG(1) REAL_FATTR_UNUSED; \
-static inline void funcprefix##_rb_remove(TypeName##RingBuffer *const rb, \
- const size_t idx) \
-{ \
- assert(idx < funcprefix##_rb_size(rb)); \
- assert(idx < funcprefix##_rb_length(rb)); \
- RBType *const rmpos = funcprefix##_rb_idx_p(rb, idx); \
- rbfree(rmpos); \
- if (rmpos == rb->next - 1) { \
- rb->next--; \
- if (rb->first == rb->next) { \
- rb->first = NULL; \
- rb->next = rb->buf; \
- } \
- } else if (rmpos == rb->first) { \
- rb->first = _RINGBUF_NEXT(rb, rb->first); \
- if (rb->first == rb->next) { \
- rb->first = NULL; \
- rb->next = rb->buf; \
- } \
- } else if (rb->first < rb->next || rb->next == rb->buf) { \
- assert(rmpos > rb->first); \
- assert(rmpos <= _RINGBUF_PREV(rb, rb->next)); \
- memmove(rb->first + 1, rb->first, \
- (size_t) ((uintptr_t) rmpos - (uintptr_t) rb->first)); \
- rb->first = _RINGBUF_NEXT(rb, rb->first); \
- } else if (rmpos < rb->next) { \
- memmove(rmpos, rmpos + 1, \
- (size_t) ((uintptr_t) rb->next - (uintptr_t) rmpos)); \
- rb->next = _RINGBUF_PREV(rb, rb->next); \
- } else { \
- assert(rb->first < rb->buf_end); \
- memmove(rb->first + 1, rb->first, \
- (size_t) ((uintptr_t) rmpos - (uintptr_t) rb->first)); \
- rb->first = _RINGBUF_NEXT(rb, rb->first); \
- } \
+ } \
+ *insertpos = item; \
+ if (length == funcprefix##_rb_size(rb)) { \
+ rb->first = _RINGBUF_NEXT(rb, rb->first); \
+ } \
+ rb->next = _RINGBUF_NEXT(rb, rb->next); \
+} \
+\
+static inline void funcprefix##_rb_remove(TypeName##RingBuffer *const rb, \
+ const size_t idx) \
+ REAL_FATTR_NONNULL_ARG(1) REAL_FATTR_UNUSED; \
+static inline void funcprefix##_rb_remove(TypeName##RingBuffer *const rb, \
+ const size_t idx) \
+{ \
+ assert(idx < funcprefix##_rb_size(rb)); \
+ assert(idx < funcprefix##_rb_length(rb)); \
+ RBType *const rmpos = funcprefix##_rb_idx_p(rb, idx); \
+ rbfree(rmpos); \
+ if (rmpos == rb->next - 1) { \
+ rb->next--; \
+ if (rb->first == rb->next) { \
+ rb->first = NULL; \
+ rb->next = rb->buf; \
+ } \
+ } else if (rmpos == rb->first) { \
+ rb->first = _RINGBUF_NEXT(rb, rb->first); \
+ if (rb->first == rb->next) { \
+ rb->first = NULL; \
+ rb->next = rb->buf; \
+ } \
+ } else if (rb->first < rb->next || rb->next == rb->buf) { \
+ assert(rmpos > rb->first); \
+ assert(rmpos <= _RINGBUF_PREV(rb, rb->next)); \
+ memmove(rb->first + 1, rb->first, \
+ (size_t) ((uintptr_t) rmpos - (uintptr_t) rb->first)); \
+ rb->first = _RINGBUF_NEXT(rb, rb->first); \
+ } else if (rmpos < rb->next) { \
+ memmove(rmpos, rmpos + 1, \
+ (size_t) ((uintptr_t) rb->next - (uintptr_t) rmpos)); \
+ rb->next = _RINGBUF_PREV(rb, rb->next); \
+ } else { \
+ assert(rb->first < rb->buf_end); \
+ memmove(rb->first + 1, rb->first, \
+ (size_t) ((uintptr_t) rmpos - (uintptr_t) rb->first)); \
+ rb->first = _RINGBUF_NEXT(rb, rb->first); \
+ } \
}
#endif // NVIM_LIB_RINGBUF_H
diff --git a/src/nvim/log.c b/src/nvim/log.c
index 773d497881..bbb4dfb944 100644
--- a/src/nvim/log.c
+++ b/src/nvim/log.c
@@ -10,7 +10,14 @@
#include "nvim/os/os.h"
#include "nvim/os/time.h"
-#define USR_LOG_FILE "$HOME" _PATHSEPSTR ".nvimlog"
+/// First location of the log file used by log_path_init()
+#define USR_LOG_FILE "$NVIM_LOG_FILE"
+
+/// Fall back location of the log file used by log_path_init()
+#define USR_LOG_FILE_2 "$HOME" _PATHSEPSTR ".nvimlog"
+
+/// Cached location of the log file set by log_path_init()
+static char expanded_log_file_path[MAXPATHL + 1] = { 0 };
static uv_mutex_t mutex;
@@ -18,6 +25,35 @@ static uv_mutex_t mutex;
# include "log.c.generated.h"
#endif
+/// Initialize path to log file
+///
+/// Tries to use #USR_LOG_FILE, then falls back #USR_LOG_FILE_2. Path to log
+/// file is cached, so only the first call has effect, unless first call was not
+/// successful. To make initialization not succeed either a bug in expand_env()
+/// is needed or both `$NVIM_LOG_FILE` and `$HOME` environment variables
+/// undefined.
+///
+/// @return true if path was initialized, false otherwise.
+static bool log_path_init(void)
+{
+ if (expanded_log_file_path[0]) {
+ return true;
+ }
+ expand_env((char_u *)USR_LOG_FILE, (char_u *)expanded_log_file_path,
+ sizeof(expanded_log_file_path) - 1);
+ // if the log file path expansion failed then fall back to stderr
+ if (strcmp(USR_LOG_FILE, expanded_log_file_path) == 0) {
+ memset(expanded_log_file_path, 0, sizeof(expanded_log_file_path));
+ expand_env((char_u *)USR_LOG_FILE_2, (char_u *)expanded_log_file_path,
+ sizeof(expanded_log_file_path) - 1);
+ if (strcmp(USR_LOG_FILE_2, expanded_log_file_path) == 0) {
+ memset(expanded_log_file_path, 0, sizeof(expanded_log_file_path));
+ return false;
+ }
+ }
+ return true;
+}
+
void log_init(void)
{
uv_mutex_init(&mutex);
@@ -73,30 +109,17 @@ FILE *open_log_file(void)
return stderr;
}
- // expand USR_LOG_FILE and open the file
- FILE *log_file;
+ // expand USR_LOG_FILE if needed and open the file
+ FILE *log_file = NULL;
opening_log_file = true;
- {
- static char expanded_log_file_path[MAXPATHL + 1];
-
- expand_env((char_u *)USR_LOG_FILE, (char_u *)expanded_log_file_path,
- MAXPATHL);
- // if the log file path expansion failed then fall back to stderr
- if (strcmp(USR_LOG_FILE, expanded_log_file_path) == 0) {
- goto open_log_file_error;
- }
-
+ if (log_path_init()) {
log_file = fopen(expanded_log_file_path, "a");
- if (log_file == NULL) {
- goto open_log_file_error;
- }
}
opening_log_file = false;
- return log_file;
-
-open_log_file_error:
- opening_log_file = false;
+ if (log_file != NULL) {
+ return log_file;
+ }
do_log_to_file(stderr, ERROR_LOG_LEVEL, __func__, __LINE__, true,
"Couldn't open USR_LOG_FILE, logging to stderr! This may be "
@@ -123,10 +146,10 @@ static bool v_do_log_to_file(FILE *log_file, int log_level,
const char* fmt, va_list args)
{
static const char *log_levels[] = {
- [DEBUG_LOG_LEVEL] = "debug",
- [INFO_LOG_LEVEL] = "info",
- [WARNING_LOG_LEVEL] = "warning",
- [ERROR_LOG_LEVEL] = "error"
+ [DEBUG_LOG_LEVEL] = "DEBUG",
+ [INFO_LOG_LEVEL] = "INFO ",
+ [WARNING_LOG_LEVEL] = "WARN ",
+ [ERROR_LOG_LEVEL] = "ERROR"
};
assert(log_level >= DEBUG_LOG_LEVEL && log_level <= ERROR_LOG_LEVEL);
@@ -143,8 +166,8 @@ static bool v_do_log_to_file(FILE *log_file, int log_level,
// print the log message prefixed by the current timestamp and pid
int64_t pid = os_get_pid();
- if (fprintf(log_file, "%s [%s @ %s:%d] %" PRId64 " - ", date_time,
- log_levels[log_level], func_name, line_num, pid) < 0) {
+ if (fprintf(log_file, "%s %s %" PRId64 "/%s:%d: ", date_time,
+ log_levels[log_level], pid, func_name, line_num) < 0) {
return false;
}
if (vfprintf(log_file, fmt, args) < 0) {
diff --git a/src/nvim/macros.h b/src/nvim/macros.h
index 5f69fa2f6a..df2b431e92 100644
--- a/src/nvim/macros.h
+++ b/src/nvim/macros.h
@@ -73,11 +73,6 @@
/* Returns empty string if it is NULL. */
#define EMPTY_IF_NULL(x) ((x) ? (x) : (char_u *)"")
-/* macro version of chartab().
- * Only works with values 0-255!
- * Doesn't work for UTF-8 mode with chars >= 0x80. */
-#define CHARSIZE(c) (chartab[c] & CT_CELL_MASK)
-
/*
* Adjust chars in a language according to 'langmap' option.
* NOTE that there is no noticeable overhead if 'langmap' is not set.
@@ -127,32 +122,29 @@
/* Whether to draw the vertical bar on the right side of the cell. */
# define CURSOR_BAR_RIGHT (curwin->w_p_rl && (!(State & CMDLINE) || cmdmsg_rl))
-/*
- * mb_ptr_adv(): advance a pointer to the next character, taking care of
- * multi-byte characters if needed.
- * mb_ptr_back(): backup a pointer to the previous character, taking care of
- * multi-byte characters if needed.
- * MB_COPY_CHAR(f, t): copy one char from "f" to "t" and advance the pointers.
- * PTR2CHAR(): get character from pointer.
- */
-/* Get the length of the character p points to */
-# define MB_PTR2LEN(p) (has_mbyte ? (*mb_ptr2len)(p) : 1)
-/* Advance multi-byte pointer, skip over composing chars. */
-# define mb_ptr_adv(p) (p += has_mbyte ? (*mb_ptr2len)((char_u *)p) : 1)
-/* Advance multi-byte pointer, do not skip over composing chars. */
-# define mb_cptr_adv(p) (p += \
- enc_utf8 ? utf_ptr2len(p) : has_mbyte ? (*mb_ptr2len)(p) : 1)
-/* Backup multi-byte pointer. Only use with "p" > "s" ! */
-# define mb_ptr_back(s, p) (p -= has_mbyte ? ((*mb_head_off)((char_u *)s, (char_u *)p - 1) + 1) : 1)
-/* get length of multi-byte char, not including composing chars */
-# define mb_cptr2len(p) (enc_utf8 ? utf_ptr2len(p) : (*mb_ptr2len)(p))
-
-# define MB_COPY_CHAR(f, t) \
- if (has_mbyte) mb_copy_char((const char_u **)(&f), &t); \
- else *t++ = *f++
-# define MB_CHARLEN(p) (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
-# define MB_CHAR2LEN(c) (has_mbyte ? mb_char2len(c) : 1)
-# define PTR2CHAR(p) (has_mbyte ? mb_ptr2char(p) : (int)*(p))
+// mb_ptr_adv(): advance a pointer to the next character, taking care of
+// multi-byte characters if needed.
+// mb_ptr_back(): backup a pointer to the previous character, taking care of
+// multi-byte characters if needed.
+// MB_COPY_CHAR(f, t): copy one char from "f" to "t" and advance the pointers.
+// PTR2CHAR(): get character from pointer.
+
+// Get the length of the character p points to
+# define MB_PTR2LEN(p) mb_ptr2len(p)
+// Advance multi-byte pointer, skip over composing chars.
+# define mb_ptr_adv(p) (p += mb_ptr2len((char_u *)p))
+// Advance multi-byte pointer, do not skip over composing chars.
+# define mb_cptr_adv(p) (p += utf_ptr2len(p))
+// Backup multi-byte pointer. Only use with "p" > "s" !
+# define mb_ptr_back(s, p) (p -= mb_head_off((char_u *)s, (char_u *)p - 1) + 1)
+// get length of multi-byte char, not including composing chars
+# define mb_cptr2len(p) utf_ptr2len(p)
+
+# define MB_COPY_CHAR(f, t) mb_copy_char((const char_u **)(&f), &t);
+
+# define MB_CHARLEN(p) mb_charlen(p)
+# define MB_CHAR2LEN(c) mb_char2len(c)
+# define PTR2CHAR(p) mb_ptr2char(p)
# define RESET_BINDING(wp) (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
@@ -166,4 +158,7 @@
#define RGB(r, g, b) ((r << 16) | (g << 8) | b)
+#define STR_(x) #x
+#define STR(x) STR_(x)
+
#endif // NVIM_MACROS_H
diff --git a/src/nvim/main.c b/src/nvim/main.c
index 71a972e8f6..c7a60d07c1 100644
--- a/src/nvim/main.c
+++ b/src/nvim/main.c
@@ -30,7 +30,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/log.h"
#include "nvim/memory.h"
@@ -58,13 +57,13 @@
#include "nvim/event/loop.h"
#include "nvim/os/signal.h"
#include "nvim/event/process.h"
-#include "nvim/msgpack_rpc/defs.h"
#include "nvim/msgpack_rpc/helpers.h"
#include "nvim/msgpack_rpc/server.h"
#include "nvim/msgpack_rpc/channel.h"
#include "nvim/api/private/defs.h"
#include "nvim/api/private/helpers.h"
#include "nvim/api/private/handle.h"
+#include "nvim/api/private/dispatch.h"
/* Maximum number of commands from + or -c arguments. */
#define MAX_ARG_CMDS 10
@@ -120,6 +119,8 @@ typedef struct {
# include "main.c.generated.h"
#endif
+Loop main_loop;
+
static char *argv0;
// Error messages
@@ -133,7 +134,7 @@ static const char *err_extra_cmd =
void event_init(void)
{
- loop_init(&loop, NULL);
+ loop_init(&main_loop, NULL);
// early msgpack-rpc initialization
msgpack_rpc_init_method_table();
msgpack_rpc_helpers_init();
@@ -151,19 +152,20 @@ void event_init(void)
void event_teardown(void)
{
- if (!loop.events) {
+ if (!main_loop.events) {
return;
}
- queue_process_events(loop.events);
+ multiqueue_process_events(main_loop.events);
input_stop();
channel_teardown();
- process_teardown(&loop);
+ process_teardown(&main_loop);
+ timer_teardown();
server_teardown();
signal_teardown();
terminal_teardown();
- loop_close(&loop);
+ loop_close(&main_loop, true);
}
/// Performs early initialization.
@@ -175,7 +177,6 @@ void early_init(void)
fs_init();
handle_init();
- (void)mb_init(); // init mb_bytelen_tab[] to ones
eval_init(); // init global variables
// Init the table of Normal mode commands.
@@ -248,8 +249,9 @@ int main(int argc, char **argv)
*/
command_line_scan(&params);
- if (GARGCOUNT > 0)
- fname = get_fname(&params);
+ if (GARGCOUNT > 0) {
+ fname = get_fname(&params, cwd);
+ }
TIME_MSG("expanding arguments");
@@ -267,13 +269,7 @@ int main(int argc, char **argv)
setbuf(stdout, NULL);
- /* This message comes before term inits, but after setting "silent_mode"
- * when the input is not a tty. */
- if (GARGCOUNT > 1 && !silent_mode)
- printf(_("%d files to edit\n"), GARGCOUNT);
-
full_screen = true;
- t_colors = 256;
check_tty(&params);
/*
@@ -318,14 +314,18 @@ int main(int argc, char **argv)
// open terminals when opening files that start with term://
#define PROTO "term://"
+ do_cmdline_cmd("augroup nvim_terminal");
+ do_cmdline_cmd("autocmd!");
do_cmdline_cmd("autocmd BufReadCmd " PROTO "* nested "
- ":call termopen( "
+ ":if !exists('b:term_title')|call termopen( "
// Capture the command string
"matchstr(expand(\"<amatch>\"), "
"'\\c\\m" PROTO "\\%(.\\{-}//\\%(\\d\\+:\\)\\?\\)\\?\\zs.*'), "
// capture the working directory
"{'cwd': get(matchlist(expand(\"<amatch>\"), "
- "'\\c\\m" PROTO "\\(.\\{-}\\)//'), 1, '')})");
+ "'\\c\\m" PROTO "\\(.\\{-}\\)//'), 1, '')})"
+ "|endif");
+ do_cmdline_cmd("augroup END");
#undef PROTO
/* Execute --cmd arguments. */
@@ -504,11 +504,15 @@ int main(int argc, char **argv)
no_wait_return = FALSE;
starting = 0;
+ // 'autochdir' has been postponed.
+ do_autochdir();
+
/* start in insert mode */
if (p_im)
need_start_insertmode = TRUE;
- apply_autocmds(EVENT_VIMENTER, NULL, NULL, FALSE, curbuf);
+ set_vim_var_nr(VV_VIM_DID_ENTER, 1L);
+ apply_autocmds(EVENT_VIMENTER, NULL, NULL, false, curbuf);
TIME_MSG("VimEnter autocommands");
/* When a startup script or session file setup for diff'ing and
@@ -530,7 +534,7 @@ int main(int argc, char **argv)
}
TIME_MSG("before starting main loop");
- ILOG("Starting Neovim main loop.");
+ ILOG("starting main loop");
/*
* Call the main command loop. This never returns.
@@ -553,6 +557,8 @@ void getout(int exitval)
if (exmode_active)
exitval += ex_exitval;
+ set_vim_var_nr(VV_EXITING, exitval);
+
/* Position the cursor on the last screen line, below all the text */
ui_cursor_goto((int)Rows - 1, 0);
@@ -665,8 +671,8 @@ static void init_locale(void)
{
char_u *p;
- /* expand_env() doesn't work yet, because chartab[] is not initialized
- * yet, call vim_getenv() directly */
+ // expand_env() doesn't work yet, because g_chartab[] is not
+ // initialized yet, call vim_getenv() directly
p = (char_u *)vim_getenv("VIMRUNTIME");
if (p != NULL && *p != NUL) {
vim_snprintf((char *)NameBuff, MAXPATHL, "%s/lang", p);
@@ -1191,7 +1197,7 @@ static void check_and_set_isatty(mparm_T *paramp)
/*
* Get filename from command line, given that there is one.
*/
-static char_u *get_fname(mparm_T *parmp)
+static char_u *get_fname(mparm_T *parmp, char_u *cwd)
{
#if !defined(UNIX)
/*
@@ -1236,8 +1242,11 @@ static void set_window_layout(mparm_T *paramp)
static void load_plugins(void)
{
if (p_lpl) {
- source_runtime((char_u *)"plugin/**/*.vim", TRUE);
+ source_runtime((char_u *)"plugin/**/*.vim", DIP_ALL); // NOLINT
TIME_MSG("loading plugins");
+
+ ex_packloadall(NULL);
+ TIME_MSG("loading packages");
}
}
@@ -1665,8 +1674,6 @@ static bool do_user_initialization(void)
}
/// Source startup scripts
-///
-/// @param[in]
static void source_startup_scripts(const mparm_T *const parmp)
FUNC_ATTR_NONNULL_ALL
{
@@ -1756,7 +1763,7 @@ static int process_env(char *env, bool is_viminit)
do_cmdline_cmd((char *)initstr);
sourcing_name = save_sourcing_name;
sourcing_lnum = save_sourcing_lnum;
- current_SID = save_sid;;
+ current_SID = save_sid;
return OK;
}
return FAIL;
diff --git a/src/nvim/main.h b/src/nvim/main.h
index 084e247b7e..86d25fe657 100644
--- a/src/nvim/main.h
+++ b/src/nvim/main.h
@@ -2,6 +2,9 @@
#define NVIM_MAIN_H
#include "nvim/normal.h"
+#include "nvim/event/loop.h"
+
+extern Loop main_loop;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "main.h.generated.h"
diff --git a/src/nvim/map.c b/src/nvim/map.c
index d4262ae9a8..73af487f90 100644
--- a/src/nvim/map.c
+++ b/src/nvim/map.c
@@ -6,7 +6,7 @@
#include "nvim/map_defs.h"
#include "nvim/vim.h"
#include "nvim/memory.h"
-#include "nvim/msgpack_rpc/defs.h"
+#include "nvim/api/private/dispatch.h"
#include "nvim/lib/khash.h"
@@ -20,6 +20,8 @@
#define int_eq kh_int_hash_equal
#define linenr_T_hash kh_int_hash_func
#define linenr_T_eq kh_int_hash_equal
+#define handle_T_hash kh_int_hash_func
+#define handle_T_eq kh_int_hash_equal
#if defined(ARCH_64)
@@ -34,88 +36,88 @@
#define INITIALIZER_DECLARE(T, U, ...) const U INITIALIZER(T, U) = __VA_ARGS__
#define DEFAULT_INITIALIZER {0}
-#define MAP_IMPL(T, U, ...) \
- INITIALIZER_DECLARE(T, U, __VA_ARGS__); \
- __KHASH_IMPL(T##_##U##_map,, T, U, 1, T##_hash, T##_eq) \
- \
- Map(T, U) *map_##T##_##U##_new() \
- { \
- Map(T, U) *rv = xmalloc(sizeof(Map(T, U))); \
- rv->table = kh_init(T##_##U##_map); \
- return rv; \
- } \
- \
- void map_##T##_##U##_free(Map(T, U) *map) \
- { \
- kh_destroy(T##_##U##_map, map->table); \
- xfree(map); \
- } \
- \
- U map_##T##_##U##_get(Map(T, U) *map, T key) \
- { \
- khiter_t k; \
- \
+#define MAP_IMPL(T, U, ...) \
+ INITIALIZER_DECLARE(T, U, __VA_ARGS__); \
+ __KHASH_IMPL(T##_##U##_map,, T, U, 1, T##_hash, T##_eq) \
+ \
+ Map(T, U) *map_##T##_##U##_new() \
+ { \
+ Map(T, U) *rv = xmalloc(sizeof(Map(T, U))); \
+ rv->table = kh_init(T##_##U##_map); \
+ return rv; \
+ } \
+ \
+ void map_##T##_##U##_free(Map(T, U) *map) \
+ { \
+ kh_destroy(T##_##U##_map, map->table); \
+ xfree(map); \
+ } \
+ \
+ U map_##T##_##U##_get(Map(T, U) *map, T key) \
+ { \
+ khiter_t k; \
+ \
if ((k = kh_get(T##_##U##_map, map->table, key)) == kh_end(map->table)) { \
- return INITIALIZER(T, U); \
- } \
- \
- return kh_val(map->table, k); \
- } \
- \
- bool map_##T##_##U##_has(Map(T, U) *map, T key) \
- { \
- return kh_get(T##_##U##_map, map->table, key) != kh_end(map->table); \
- } \
- \
- U map_##T##_##U##_put(Map(T, U) *map, T key, U value) \
- { \
- int ret; \
- U rv = INITIALIZER(T, U); \
- khiter_t k = kh_put(T##_##U##_map, map->table, key, &ret); \
- \
- if (!ret) { \
- rv = kh_val(map->table, k); \
- } \
- \
- kh_val(map->table, k) = value; \
- return rv; \
- } \
- \
- U *map_##T##_##U##_ref(Map(T, U) *map, T key, bool put) \
- { \
- int ret; \
- khiter_t k; \
- if (put) { \
- k = kh_put(T##_##U##_map, map->table, key, &ret); \
- if (ret) { \
- kh_val(map->table, k) = INITIALIZER(T, U); \
- } \
- } else { \
- k = kh_get(T##_##U##_map, map->table, key); \
- if (k == kh_end(map->table)) { \
- return NULL; \
- } \
- } \
- \
- return &kh_val(map->table, k); \
- } \
- \
- U map_##T##_##U##_del(Map(T, U) *map, T key) \
- { \
- U rv = INITIALIZER(T, U); \
- khiter_t k; \
- \
+ return INITIALIZER(T, U); \
+ } \
+ \
+ return kh_val(map->table, k); \
+ } \
+ \
+ bool map_##T##_##U##_has(Map(T, U) *map, T key) \
+ { \
+ return kh_get(T##_##U##_map, map->table, key) != kh_end(map->table); \
+ } \
+ \
+ U map_##T##_##U##_put(Map(T, U) *map, T key, U value) \
+ { \
+ int ret; \
+ U rv = INITIALIZER(T, U); \
+ khiter_t k = kh_put(T##_##U##_map, map->table, key, &ret); \
+ \
+ if (!ret) { \
+ rv = kh_val(map->table, k); \
+ } \
+ \
+ kh_val(map->table, k) = value; \
+ return rv; \
+ } \
+ \
+ U *map_##T##_##U##_ref(Map(T, U) *map, T key, bool put) \
+ { \
+ int ret; \
+ khiter_t k; \
+ if (put) { \
+ k = kh_put(T##_##U##_map, map->table, key, &ret); \
+ if (ret) { \
+ kh_val(map->table, k) = INITIALIZER(T, U); \
+ } \
+ } else { \
+ k = kh_get(T##_##U##_map, map->table, key); \
+ if (k == kh_end(map->table)) { \
+ return NULL; \
+ } \
+ } \
+ \
+ return &kh_val(map->table, k); \
+ } \
+ \
+ U map_##T##_##U##_del(Map(T, U) *map, T key) \
+ { \
+ U rv = INITIALIZER(T, U); \
+ khiter_t k; \
+ \
if ((k = kh_get(T##_##U##_map, map->table, key)) != kh_end(map->table)) { \
- rv = kh_val(map->table, k); \
- kh_del(T##_##U##_map, map->table, k); \
- } \
- \
- return rv; \
- } \
- \
- void map_##T##_##U##_clear(Map(T, U) *map) \
- { \
- kh_clear(T##_##U##_map, map->table); \
+ rv = kh_val(map->table, k); \
+ kh_del(T##_##U##_map, map->table, k); \
+ } \
+ \
+ return rv; \
+ } \
+ \
+ void map_##T##_##U##_clear(Map(T, U) *map) \
+ { \
+ kh_clear(T##_##U##_map, map->table); \
}
static inline khint_t String_hash(String s)
@@ -129,7 +131,10 @@ static inline khint_t String_hash(String s)
static inline bool String_eq(String a, String b)
{
- return strncmp(a.data, b.data, MIN(a.size, b.size)) == 0;
+ if (a.size != b.size) {
+ return false;
+ }
+ return memcmp(a.data, b.data, a.size) == 0;
}
@@ -138,7 +143,8 @@ MAP_IMPL(cstr_t, uint64_t, DEFAULT_INITIALIZER)
MAP_IMPL(cstr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(ptr_t, ptr_t, DEFAULT_INITIALIZER)
MAP_IMPL(uint64_t, ptr_t, DEFAULT_INITIALIZER)
-#define MSGPACK_HANDLER_INITIALIZER {.fn = NULL, .async = false}
+MAP_IMPL(handle_T, ptr_t, DEFAULT_INITIALIZER)
+#define MSGPACK_HANDLER_INITIALIZER { .fn = NULL, .async = false }
MAP_IMPL(String, MsgpackRpcRequestHandler, MSGPACK_HANDLER_INITIALIZER)
#define KVEC_INITIALIZER { .size = 0, .capacity = 0, .items = NULL }
MAP_IMPL(linenr_T, bufhl_vec_T, KVEC_INITIALIZER)
diff --git a/src/nvim/map.h b/src/nvim/map.h
index e90cc360ce..ba3e84cb31 100644
--- a/src/nvim/map.h
+++ b/src/nvim/map.h
@@ -5,23 +5,23 @@
#include "nvim/map_defs.h"
#include "nvim/api/private/defs.h"
-#include "nvim/msgpack_rpc/defs.h"
+#include "nvim/api/private/dispatch.h"
#include "nvim/bufhl_defs.h"
-#define MAP_DECLS(T, U) \
- KHASH_DECLARE(T##_##U##_map, T, U) \
- \
- typedef struct { \
- khash_t(T##_##U##_map) *table; \
- } Map(T, U); \
- \
- Map(T, U) *map_##T##_##U##_new(void); \
- void map_##T##_##U##_free(Map(T, U) *map); \
- U map_##T##_##U##_get(Map(T, U) *map, T key); \
- bool map_##T##_##U##_has(Map(T, U) *map, T key); \
- U map_##T##_##U##_put(Map(T, U) *map, T key, U value); \
- U *map_##T##_##U##_ref(Map(T, U) *map, T key, bool put); \
- U map_##T##_##U##_del(Map(T, U) *map, T key); \
+#define MAP_DECLS(T, U) \
+ KHASH_DECLARE(T##_##U##_map, T, U) \
+ \
+ typedef struct { \
+ khash_t(T##_##U##_map) *table; \
+ } Map(T, U); \
+ \
+ Map(T, U) *map_##T##_##U##_new(void); \
+ void map_##T##_##U##_free(Map(T, U) *map); \
+ U map_##T##_##U##_get(Map(T, U) *map, T key); \
+ bool map_##T##_##U##_has(Map(T, U) *map, T key); \
+ U map_##T##_##U##_put(Map(T, U) *map, T key, U value); \
+ U *map_##T##_##U##_ref(Map(T, U) *map, T key, bool put); \
+ U map_##T##_##U##_del(Map(T, U) *map, T key); \
void map_##T##_##U##_clear(Map(T, U) *map);
MAP_DECLS(int, int)
@@ -29,6 +29,7 @@ MAP_DECLS(cstr_t, uint64_t)
MAP_DECLS(cstr_t, ptr_t)
MAP_DECLS(ptr_t, ptr_t)
MAP_DECLS(uint64_t, ptr_t)
+MAP_DECLS(handle_T, ptr_t)
MAP_DECLS(String, MsgpackRpcRequestHandler)
MAP_DECLS(linenr_T, bufhl_vec_T)
diff --git a/src/nvim/mark.c b/src/nvim/mark.c
index fe802e48ba..4e05845eb5 100644
--- a/src/nvim/mark.c
+++ b/src/nvim/mark.c
@@ -21,7 +21,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/normal.h"
#include "nvim/option.h"
#include "nvim/path.h"
@@ -131,17 +130,23 @@ int setmark_pos(int c, pos_T *pos, int fnum)
return OK;
}
- if (c > 'z') /* some islower() and isupper() cannot handle
- characters above 127 */
+ buf_T *buf = buflist_findnr(fnum);
+ // Can't set a mark in a non-existant buffer.
+ if (buf == NULL) {
return FAIL;
- if (islower(c)) {
+ }
+
+ if (ASCII_ISLOWER(c)) {
i = c - 'a';
- RESET_FMARK(curbuf->b_namedm + i, *pos, curbuf->b_fnum);
+ RESET_FMARK(buf->b_namedm + i, *pos, fnum);
return OK;
}
- if (isupper(c)) {
- assert(c >= 'A' && c <= 'Z');
- i = c - 'A';
+ if (ASCII_ISUPPER(c) || ascii_isdigit(c)) {
+ if (ascii_isdigit(c)) {
+ i = c - '0' + NMARKS;
+ } else {
+ i = c - 'A';
+ }
RESET_XFMARK(namedfm + i, *pos, fnum, NULL);
return OK;
}
@@ -474,7 +479,7 @@ static void fname2fnum(xfmark_T *fm)
os_dirname(IObuff, IOSIZE);
p = path_shorten_fname(NameBuff, IObuff);
- /* buflist_new() will call fmarks_check_names() */
+ // buflist_new() will call fmarks_check_names()
(void)buflist_new(NameBuff, p, (linenr_T)1, 0);
}
}
@@ -799,6 +804,13 @@ void ex_jumps(exarg_T *eap)
MSG_PUTS("\n>");
}
+void ex_clearjumps(exarg_T *eap)
+{
+ free_jumplist(curwin);
+ curwin->w_jumplistlen = 0;
+ curwin->w_jumplistidx = 0;
+}
+
/*
* print the changelist
*/
diff --git a/src/nvim/mbyte.c b/src/nvim/mbyte.c
index 3495203c43..c855d68605 100644
--- a/src/nvim/mbyte.c
+++ b/src/nvim/mbyte.c
@@ -1,68 +1,27 @@
-/*
- * mbyte.c: Code specifically for handling multi-byte characters.
- * Multibyte extensions partly by Sung-Hoon Baek
- *
- * The encoding used in the core is set with 'encoding'. When 'encoding' is
- * changed, the following four variables are set (for speed).
- * Currently these types of character encodings are supported:
- *
- * "enc_dbcs" When non-zero it tells the type of double byte character
- * encoding (Chinese, Korean, Japanese, etc.).
- * The cell width on the display is equal to the number of
- * bytes. (exception: DBCS_JPNU with first byte 0x8e)
- * Recognizing the first or second byte is difficult, it
- * requires checking a byte sequence from the start.
- * "enc_utf8" When TRUE use Unicode characters in UTF-8 encoding.
- * The cell width on the display needs to be determined from
- * the character value.
- * Recognizing bytes is easy: 0xxx.xxxx is a single-byte
- * char, 10xx.xxxx is a trailing byte, 11xx.xxxx is a leading
- * byte of a multi-byte character.
- * To make things complicated, up to six composing characters
- * are allowed. These are drawn on top of the first char.
- * For most editing the sequence of bytes with composing
- * characters included is considered to be one character.
- * "enc_unicode" When 2 use 16-bit Unicode characters (or UTF-16).
- * When 4 use 32-but Unicode characters.
- * Internally characters are stored in UTF-8 encoding to
- * avoid NUL bytes. Conversion happens when doing I/O.
- * "enc_utf8" will also be TRUE.
- *
- * "has_mbyte" is set when "enc_dbcs" or "enc_utf8" is non-zero.
- *
- * If none of these is TRUE, 8-bit bytes are used for a character. The
- * encoding isn't currently specified (TODO).
- *
- * 'encoding' specifies the encoding used in the core. This is in registers,
- * text manipulation, buffers, etc. Conversion has to be done when characters
- * in another encoding are received or send:
- *
- * clipboard
- * ^
- * | (2)
- * V
- * +---------------+
- * (1) | | (3)
- * keyboard ----->| core |-----> display
- * | |
- * +---------------+
- * ^
- * | (4)
- * V
- * file
- *
- * (1) Typed characters arrive in the current locale.
- * (2) Text will be made available with the encoding specified with
- * 'encoding'. If this is not sufficient, system-specific conversion
- * might be required.
- * (3) For the GUI the correct font must be selected, no conversion done.
- * (4) The encoding of the file is specified with 'fileencoding'. Conversion
- * is to be done when it's different from 'encoding'.
- *
- * The ShaDa file is a special case: Only text is converted, not file names.
- * Vim scripts may contain an ":encoding" command. This has an effect for
- * some commands, like ":menutrans"
- */
+/// mbyte.c: Code specifically for handling multi-byte characters.
+/// Multibyte extensions partly by Sung-Hoon Baek
+///
+/// The encoding used in nvim is always UTF-8. "enc_utf8" and "has_mbyte" is
+/// thus always true. "enc_dbcs" is always zero. The 'encoding' option is
+/// read-only and always reads "utf-8".
+///
+/// The cell width on the display needs to be determined from the character
+/// value. Recognizing UTF-8 bytes is easy: 0xxx.xxxx is a single-byte char,
+/// 10xx.xxxx is a trailing byte, 11xx.xxxx is a leading byte of a multi-byte
+/// character. To make things complicated, up to six composing characters
+/// are allowed. These are drawn on top of the first char. For most editing
+/// the sequence of bytes with composing characters included is considered to
+/// be one character.
+///
+/// UTF-8 is used everywhere in the core. This is in registers, text
+/// manipulation, buffers, etc. Nvim core communicates with external plugins
+/// and GUIs in this encoding.
+///
+/// The encoding of a file is specified with 'fileencoding'. Conversion
+/// is to be done when it's different from "utf-8".
+///
+/// Vim scripts may contain an ":scriptencoding" command. This has an effect
+/// for some commands, like ":menutrans".
#include <inttypes.h>
#include <stdbool.h>
@@ -84,7 +43,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/option.h"
#include "nvim/screen.h"
@@ -111,24 +69,6 @@ struct interval {
#endif
/*
- * Lookup table to quickly get the length in bytes of a UTF-8 character from
- * the first byte of a UTF-8 string.
- * Bytes which are illegal when used as the first byte have a 1.
- * The NUL byte has length 1.
- */
-static char utf8len_tab[256] =
-{
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
- 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
- 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,6,6,1,1,
-};
-
-/*
* Like utf8len_tab above, but using a zero for illegal lead bytes.
*/
static uint8_t utf8len_tab_zero[256] =
@@ -386,207 +326,6 @@ int enc_canon_props(const char_u *name)
}
/*
- * Set up for using multi-byte characters.
- * Called in three cases:
- * - by main() to initialize (p_enc == NULL)
- * - by set_init_1() after 'encoding' was set to its default.
- * - by do_set() when 'encoding' has been set.
- * p_enc must have been passed through enc_canonize() already.
- * Sets the "enc_unicode", "enc_utf8", "enc_dbcs" and "has_mbyte" flags.
- * Fills mb_bytelen_tab[] and returns NULL when there are no problems.
- * When there is something wrong: Returns an error message and doesn't change
- * anything.
- */
-char_u * mb_init(void)
-{
- int i;
- int idx;
- int n;
- int enc_dbcs_new = 0;
-#if defined(USE_ICONV) && !defined(WIN3264) && !defined(WIN32UNIX) \
- && !defined(MACOS)
-# define LEN_FROM_CONV
- vimconv_T vimconv;
- char_u *p;
-#endif
-
- if (p_enc == NULL) {
- /* Just starting up: set the whole table to one's. */
- for (i = 0; i < 256; ++i)
- mb_bytelen_tab[i] = 1;
- return NULL;
- } else if (STRNCMP(p_enc, "8bit-", 5) == 0
- || STRNCMP(p_enc, "iso-8859-", 9) == 0) {
- /* Accept any "8bit-" or "iso-8859-" name. */
- enc_unicode = 0;
- enc_utf8 = false;
- } else if (STRNCMP(p_enc, "2byte-", 6) == 0) {
- /* Unix: accept any "2byte-" name, assume current locale. */
- enc_dbcs_new = DBCS_2BYTE;
- } else if ((idx = enc_canon_search(p_enc)) >= 0) {
- i = enc_canon_table[idx].prop;
- if (i & ENC_UNICODE) {
- /* Unicode */
- enc_utf8 = true;
- if (i & (ENC_2BYTE | ENC_2WORD))
- enc_unicode = 2;
- else if (i & ENC_4BYTE)
- enc_unicode = 4;
- else
- enc_unicode = 0;
- } else if (i & ENC_DBCS) {
- /* 2byte, handle below */
- enc_dbcs_new = enc_canon_table[idx].codepage;
- } else {
- /* Must be 8-bit. */
- enc_unicode = 0;
- enc_utf8 = false;
- }
- } else /* Don't know what encoding this is, reject it. */
- return e_invarg;
-
- if (enc_dbcs_new != 0) {
- enc_unicode = 0;
- enc_utf8 = false;
- }
- enc_dbcs = enc_dbcs_new;
- has_mbyte = (enc_dbcs != 0 || enc_utf8);
-
-
- /* Detect an encoding that uses latin1 characters. */
- enc_latin1like = (enc_utf8 || STRCMP(p_enc, "latin1") == 0
- || STRCMP(p_enc, "iso-8859-15") == 0);
-
- /*
- * Set the function pointers.
- */
- if (enc_utf8) {
- mb_ptr2len = utfc_ptr2len;
- mb_ptr2len_len = utfc_ptr2len_len;
- mb_char2len = utf_char2len;
- mb_char2bytes = utf_char2bytes;
- mb_ptr2cells = utf_ptr2cells;
- mb_ptr2cells_len = utf_ptr2cells_len;
- mb_char2cells = utf_char2cells;
- mb_off2cells = utf_off2cells;
- mb_ptr2char = utf_ptr2char;
- mb_head_off = utf_head_off;
- } else if (enc_dbcs != 0) {
- mb_ptr2len = dbcs_ptr2len;
- mb_ptr2len_len = dbcs_ptr2len_len;
- mb_char2len = dbcs_char2len;
- mb_char2bytes = dbcs_char2bytes;
- mb_ptr2cells = dbcs_ptr2cells;
- mb_ptr2cells_len = dbcs_ptr2cells_len;
- mb_char2cells = dbcs_char2cells;
- mb_off2cells = dbcs_off2cells;
- mb_ptr2char = dbcs_ptr2char;
- mb_head_off = dbcs_head_off;
- } else {
- mb_ptr2len = latin_ptr2len;
- mb_ptr2len_len = latin_ptr2len_len;
- mb_char2len = latin_char2len;
- mb_char2bytes = latin_char2bytes;
- mb_ptr2cells = latin_ptr2cells;
- mb_ptr2cells_len = latin_ptr2cells_len;
- mb_char2cells = latin_char2cells;
- mb_off2cells = latin_off2cells;
- mb_ptr2char = latin_ptr2char;
- mb_head_off = latin_head_off;
- }
-
- /*
- * Fill the mb_bytelen_tab[] for MB_BYTE2LEN().
- */
-#ifdef LEN_FROM_CONV
- /* When 'encoding' is different from the current locale mblen() won't
- * work. Use conversion to "utf-8" instead. */
- vimconv.vc_type = CONV_NONE;
- if (enc_dbcs) {
- p = enc_locale();
- if (p == NULL || STRCMP(p, p_enc) != 0) {
- convert_setup(&vimconv, p_enc, (char_u *)"utf-8");
- vimconv.vc_fail = true;
- }
- xfree(p);
- }
-#endif
-
- for (i = 0; i < 256; ++i) {
- /* Our own function to reliably check the length of UTF-8 characters,
- * independent of mblen(). */
- if (enc_utf8)
- n = utf8len_tab[i];
- else if (enc_dbcs == 0)
- n = 1;
- else {
- char buf[MB_MAXBYTES + 1];
- if (i == NUL) /* just in case mblen() can't handle "" */
- n = 1;
- else {
- buf[0] = i;
- buf[1] = 0;
-#ifdef LEN_FROM_CONV
- if (vimconv.vc_type != CONV_NONE) {
- /*
- * string_convert() should fail when converting the first
- * byte of a double-byte character.
- */
- p = string_convert(&vimconv, (char_u *)buf, NULL);
- if (p != NULL) {
- xfree(p);
- n = 1;
- } else
- n = 2;
- } else
-#endif
- {
- /*
- * mblen() should return -1 for invalid (means the leading
- * multibyte) character. However there are some platforms
- * where mblen() returns 0 for invalid character.
- * Therefore, following condition includes 0.
- */
- ignored = mblen(NULL, 0); /* First reset the state. */
- if (mblen(buf, (size_t)1) <= 0)
- n = 2;
- else
- n = 1;
- }
- }
- }
- mb_bytelen_tab[i] = n;
- }
-
-#ifdef LEN_FROM_CONV
- convert_setup(&vimconv, NULL, NULL);
-#endif
-
- /* The cell width depends on the type of multi-byte characters. */
- (void)init_chartab();
-
- /* When enc_utf8 is set or reset, (de)allocate ScreenLinesUC[] */
- screenalloc(false);
-
-#ifdef HAVE_WORKING_LIBINTL
- /* GNU gettext 0.10.37 supports this feature: set the codeset used for
- * translated messages independently from the current locale. */
- (void)bind_textdomain_codeset(PROJECT_NAME,
- enc_utf8 ? "utf-8" : (char *)p_enc);
-#endif
-
-
- /* Fire an autocommand to let people do custom font setup. This must be
- * after Vim has been setup for the new encoding. */
- apply_autocmds(EVENT_ENCODINGCHANGED, NULL, (char_u *)"", FALSE, curbuf);
-
- /* Need to reload spell dictionaries */
- spell_reload();
-
- return NULL;
-}
-
-/*
* Return the size of the BOM for the current buffer:
* 0 - no BOM
* 2 - UCS-2 or UTF-16 BOM
@@ -598,20 +337,15 @@ int bomb_size(void)
int n = 0;
if (curbuf->b_p_bomb && !curbuf->b_p_bin) {
- if (*curbuf->b_p_fenc == NUL) {
- if (enc_utf8) {
- if (enc_unicode != 0)
- n = enc_unicode;
- else
- n = 3;
- }
- } else if (STRCMP(curbuf->b_p_fenc, "utf-8") == 0)
+ if (*curbuf->b_p_fenc == NUL
+ || STRCMP(curbuf->b_p_fenc, "utf-8") == 0) {
n = 3;
- else if (STRNCMP(curbuf->b_p_fenc, "ucs-2", 5) == 0
- || STRNCMP(curbuf->b_p_fenc, "utf-16", 6) == 0)
+ } else if (STRNCMP(curbuf->b_p_fenc, "ucs-2", 5) == 0
+ || STRNCMP(curbuf->b_p_fenc, "utf-16", 6) == 0) {
n = 2;
- else if (STRNCMP(curbuf->b_p_fenc, "ucs-4", 5) == 0)
+ } else if (STRNCMP(curbuf->b_p_fenc, "ucs-4", 5) == 0) {
n = 4;
+ }
}
return n;
}
@@ -805,99 +539,6 @@ int dbcs_class(unsigned lead, unsigned trail)
}
/*
- * mb_char2len() function pointer.
- * Return length in bytes of character "c".
- * Returns 1 for a single-byte character.
- */
-int latin_char2len(int c)
-{
- return 1;
-}
-
-static int dbcs_char2len(int c)
-{
- if (c >= 0x100)
- return 2;
- return 1;
-}
-
-/*
- * mb_char2bytes() function pointer.
- * Convert a character to its bytes.
- * Returns the length in bytes.
- */
-int latin_char2bytes(int c, char_u *buf)
-{
- buf[0] = c;
- return 1;
-}
-
-static int dbcs_char2bytes(int c, char_u *buf)
-{
- if (c >= 0x100) {
- buf[0] = (unsigned)c >> 8;
- buf[1] = c;
- /* Never use a NUL byte, it causes lots of trouble. It's an invalid
- * character anyway. */
- if (buf[1] == NUL)
- buf[1] = '\n';
- return 2;
- }
- buf[0] = c;
- return 1;
-}
-
-/*
- * mb_ptr2len() function pointer.
- * Get byte length of character at "*p" but stop at a NUL.
- * For UTF-8 this includes following composing characters.
- * Returns 0 when *p is NUL.
- */
-int latin_ptr2len(const char_u *p)
-{
- return MB_BYTE2LEN(*p);
-}
-
-static int dbcs_ptr2len(const char_u *p)
-{
- int len;
-
- /* Check if second byte is not missing. */
- len = MB_BYTE2LEN(*p);
- if (len == 2 && p[1] == NUL)
- len = 1;
- return len;
-}
-
-/*
- * mb_ptr2len_len() function pointer.
- * Like mb_ptr2len(), but limit to read "size" bytes.
- * Returns 0 for an empty string.
- * Returns 1 for an illegal char or an incomplete byte sequence.
- */
-int latin_ptr2len_len(const char_u *p, int size)
-{
- if (size < 1 || *p == NUL)
- return 0;
- return 1;
-}
-
-static int dbcs_ptr2len_len(const char_u *p, int size)
-{
- int len;
-
- if (size < 1 || *p == NUL)
- return 0;
- if (size == 1)
- return 1;
- /* Check that second byte is not missing. */
- len = MB_BYTE2LEN(*p);
- if (len == 2 && p[1] == NUL)
- len = 1;
- return len;
-}
-
-/*
* Return true if "c" is in "table".
*/
static bool intable(const struct interval *table, size_t n_items, int c)
@@ -950,6 +591,9 @@ int utf_char2cells(int c)
if (intable(doublewidth, ARRAY_SIZE(doublewidth), c))
return 2;
#endif
+ if (p_emoji && intable(emoji_width, ARRAY_SIZE(emoji_width), c)) {
+ return 2;
+ }
}
/* Characters below 0x100 are influenced by 'isprint' option */
else if (c >= 0x80 && !vim_isprintc(c))
@@ -961,16 +605,8 @@ int utf_char2cells(int c)
return 1;
}
-/*
- * mb_ptr2cells() function pointer.
- * Return the number of display cells character at "*p" occupies.
- * This doesn't take care of unprintable characters, use ptr2cells() for that.
- */
-int latin_ptr2cells(const char_u *p)
-{
- return 1;
-}
-
+/// Return the number of display cells character at "*p" occupies.
+/// This doesn't take care of unprintable characters, use ptr2cells() for that.
int utf_ptr2cells(const char_u *p)
{
int c;
@@ -989,26 +625,9 @@ int utf_ptr2cells(const char_u *p)
return 1;
}
-int dbcs_ptr2cells(const char_u *p)
-{
- /* Number of cells is equal to number of bytes, except for euc-jp when
- * the first byte is 0x8e. */
- if (enc_dbcs == DBCS_JPNU && *p == 0x8e)
- return 1;
- return MB_BYTE2LEN(*p);
-}
-
-/*
- * mb_ptr2cells_len() function pointer.
- * Like mb_ptr2cells(), but limit string length to "size".
- * For an empty string or truncated character returns 1.
- */
-int latin_ptr2cells_len(const char_u *p, int size)
-{
- return 1;
-}
-
-static int utf_ptr2cells_len(const char_u *p, int size)
+/// Like utf_ptr2cells(), but limit string length to "size".
+/// For an empty string or truncated character returns 1.
+int utf_ptr2cells_len(const char_u *p, int size)
{
int c;
@@ -1028,35 +647,6 @@ static int utf_ptr2cells_len(const char_u *p, int size)
return 1;
}
-static int dbcs_ptr2cells_len(const char_u *p, int size)
-{
- /* Number of cells is equal to number of bytes, except for euc-jp when
- * the first byte is 0x8e. */
- if (size <= 1 || (enc_dbcs == DBCS_JPNU && *p == 0x8e))
- return 1;
- return MB_BYTE2LEN(*p);
-}
-
-/*
- * mb_char2cells() function pointer.
- * Return the number of display cells character "c" occupies.
- * Only takes care of multi-byte chars, not "^C" and such.
- */
-int latin_char2cells(int c)
-{
- return 1;
-}
-
-static int dbcs_char2cells(int c)
-{
- /* Number of cells is equal to number of bytes, except for euc-jp when
- * the first byte is 0x8e. */
- if (enc_dbcs == DBCS_JPNU && ((unsigned)c >> 8) == 0x8e)
- return 1;
- /* use the first byte */
- return MB_BYTE2LEN((unsigned)c >> 8);
-}
-
/// Calculate the number of cells occupied by string `str`.
///
/// @param str The source string, may not be NULL, must be a NUL-terminated
@@ -1073,51 +663,14 @@ size_t mb_string2cells(const char_u *str)
return clen;
}
-/*
- * mb_off2cells() function pointer.
- * Return number of display cells for char at ScreenLines[off].
- * We make sure that the offset used is less than "max_off".
- */
-int latin_off2cells(unsigned off, unsigned max_off)
-{
- return 1;
-}
-
-int dbcs_off2cells(unsigned off, unsigned max_off)
-{
- /* never check beyond end of the line */
- if (off >= max_off)
- return 1;
-
- /* Number of cells is equal to number of bytes, except for euc-jp when
- * the first byte is 0x8e. */
- if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e)
- return 1;
- return MB_BYTE2LEN(ScreenLines[off]);
-}
-
+/// Return number of display cells for char at ScreenLines[off].
+/// We make sure that the offset used is less than "max_off".
int utf_off2cells(unsigned off, unsigned max_off)
{
return (off + 1 < max_off && ScreenLines[off + 1] == 0) ? 2 : 1;
}
/*
- * mb_ptr2char() function pointer.
- * Convert a byte sequence into a character.
- */
-int latin_ptr2char(const char_u *p)
-{
- return *p;
-}
-
-static int dbcs_ptr2char(const char_u *p)
-{
- if (MB_BYTE2LEN(*p) > 1 && p[1] != NUL)
- return (p[0] << 8) + p[1];
- return *p;
-}
-
-/*
* Convert a UTF-8 byte sequence to a wide character.
* If the sequence is illegal or truncated by a NUL the first byte is
* returned.
@@ -1304,7 +857,7 @@ int utfc_ptr2char(const char_u *p, int *pcc)
*/
int utfc_ptr2char_len(const char_u *p, int *pcc, int maxlen)
{
-#define IS_COMPOSING(s1, s2, s3) \
+#define IS_COMPOSING(s1, s2, s3) \
(i == 0 ? UTF_COMPOSINGLIKE((s1), (s2)) : utf_iscomposing((s3)))
assert(maxlen > 0);
@@ -1713,16 +1266,20 @@ int utf_class(int c)
return (int)classes[mid].class;
}
+ // emoji
+ if (intable(emoji_all, ARRAY_SIZE(emoji_all), c)) {
+ return 3;
+ }
+
/* most other characters are "word" characters */
return 2;
}
-/*
- * Code for Unicode case-dependent operations. Based on notes in
- * http://www.unicode.org/Public/UNIDATA/CaseFolding.txt
- * This code uses simple case folding, not full case folding.
- * Last updated for Unicode 5.2.
- */
+bool utf_ambiguous_width(int c)
+{
+ return c >= 0x80 && (intable(ambiguous, ARRAY_SIZE(ambiguous), c)
+ || intable(emoji_all, ARRAY_SIZE(emoji_all), c));
+}
/*
* Generic conversion function for case operations.
@@ -1758,6 +1315,10 @@ static int utf_convert(int a, const convertStruct *const table, size_t n_items)
*/
int utf_fold(int a)
{
+ if (a < 0x80) {
+ // be fast for ASCII
+ return a >= 0x41 && a <= 0x5a ? a + 32 : a;
+ }
return utf_convert(a, foldCase, ARRAY_SIZE(foldCase));
}
@@ -1885,6 +1446,92 @@ static int utf_strnicmp(char_u *s1, char_u *s2, size_t n1, size_t n2)
return n1 == 0 ? -1 : 1;
}
+#ifdef WIN32
+#ifndef CP_UTF8
+# define CP_UTF8 65001 /* magic number from winnls.h */
+#endif
+
+int utf8_to_utf16(const char *str, WCHAR **strw)
+ FUNC_ATTR_NONNULL_ALL
+{
+ ssize_t wchar_len = 0;
+
+ // Compute the length needed to store the converted widechar string.
+ wchar_len = MultiByteToWideChar(CP_UTF8,
+ 0, // dwFlags: must be 0 for utf8
+ str, // lpMultiByteStr: string to convert
+ -1, // -1 => process up to NUL
+ NULL, // lpWideCharStr: converted string
+ 0); // 0 => return length, don't convert
+ if (wchar_len == 0) {
+ return GetLastError();
+ }
+
+ ssize_t buf_sz = wchar_len * sizeof(WCHAR);
+
+ if (buf_sz == 0) {
+ *strw = NULL;
+ return 0;
+ }
+
+ char *buf = xmalloc(buf_sz);
+ char *pos = buf;
+
+ int r = MultiByteToWideChar(CP_UTF8,
+ 0,
+ str,
+ -1,
+ (WCHAR *)pos,
+ wchar_len);
+ assert(r == wchar_len);
+ if (r != wchar_len) {
+ EMSG2("MultiByteToWideChar failed: %d", r);
+ }
+ *strw = (WCHAR *)pos;
+
+ return 0;
+}
+
+int utf16_to_utf8(const WCHAR *strw, char **str)
+ FUNC_ATTR_NONNULL_ALL
+{
+ // Compute the space required to store the string as UTF-8.
+ ssize_t utf8_len = WideCharToMultiByte(CP_UTF8,
+ 0,
+ strw,
+ -1,
+ NULL,
+ 0,
+ NULL,
+ NULL);
+ if (utf8_len == 0) {
+ return GetLastError();
+ }
+
+ ssize_t buf_sz = utf8_len * sizeof(char);
+ char *buf = xmalloc(buf_sz);
+ char *pos = buf;
+
+ // Convert string to UTF-8.
+ int r = WideCharToMultiByte(CP_UTF8,
+ 0,
+ strw,
+ -1,
+ (LPSTR *)pos,
+ utf8_len,
+ NULL,
+ NULL);
+ assert(r == utf8_len);
+ if (r != utf8_len) {
+ EMSG2("WideCharToMultiByte failed: %d", r);
+ }
+ *str = pos;
+
+ return 0;
+}
+
+#endif
+
/*
* Version of strnicmp() that handles multi-byte characters.
* Needed for Big5, Shift-JIS and UTF-8 encoding. Other DBCS encodings can
@@ -1979,68 +1626,9 @@ void show_utf8(void)
msg(IObuff);
}
-/*
- * mb_head_off() function pointer.
- * Return offset from "p" to the first byte of the character it points into.
- * If "p" points to the NUL at the end of the string return 0.
- * Returns 0 when already at the first byte of a character.
- */
-int latin_head_off(const char_u *base, const char_u *p)
-{
- return 0;
-}
-
-int dbcs_head_off(const char_u *base, const char_u *p)
-{
- /* It can't be a trailing byte when not using DBCS, at the start of the
- * string or the previous byte can't start a double-byte. */
- if (p <= base || MB_BYTE2LEN(p[-1]) == 1 || *p == NUL) {
- return 0;
- }
-
- /* This is slow: need to start at the base and go forward until the
- * byte we are looking for. Return 1 when we went past it, 0 otherwise. */
- const char_u *q = base;
- while (q < p) {
- q += dbcs_ptr2len(q);
- }
-
- return (q == p) ? 0 : 1;
-}
-
-/*
- * Special version of dbcs_head_off() that works for ScreenLines[], where
- * single-width DBCS_JPNU characters are stored separately.
- */
-int dbcs_screen_head_off(const char_u *base, const char_u *p)
-{
- /* It can't be a trailing byte when not using DBCS, at the start of the
- * string or the previous byte can't start a double-byte.
- * For euc-jp an 0x8e byte in the previous cell always means we have a
- * lead byte in the current cell. */
- if (p <= base
- || (enc_dbcs == DBCS_JPNU && p[-1] == 0x8e)
- || MB_BYTE2LEN(p[-1]) == 1
- || *p == NUL)
- return 0;
-
- /* This is slow: need to start at the base and go forward until the
- * byte we are looking for. Return 1 when we went past it, 0 otherwise.
- * For DBCS_JPNU look out for 0x8e, which means the second byte is not
- * stored as the next byte. */
- const char_u *q = base;
- while (q < p) {
- if (enc_dbcs == DBCS_JPNU && *q == 0x8e) {
- ++q;
- }
- else {
- q += dbcs_ptr2len(q);
- }
- }
-
- return (q == p) ? 0 : 1;
-}
-
+/// Return offset from "p" to the first byte of the character it points into.
+/// If "p" points to the NUL at the end of the string return 0.
+/// Returns 0 when already at the first byte of a character.
int utf_head_off(const char_u *base, const char_u *p)
{
int c;
@@ -2146,26 +1734,20 @@ int mb_tail_off(char_u *base, char_u *p)
if (*p == NUL)
return 0;
- if (enc_utf8) {
- /* Find the last character that is 10xx.xxxx */
- for (i = 0; (p[i + 1] & 0xc0) == 0x80; ++i)
- ;
- /* Check for illegal sequence. */
- for (j = 0; p - j > base; ++j)
- if ((p[-j] & 0xc0) != 0x80)
- break;
- if (utf8len_tab[p[-j]] != i + j + 1)
- return 0;
- return i;
+ // Find the last character that is 10xx.xxxx
+ for (i = 0; (p[i + 1] & 0xc0) == 0x80; i++) {}
+
+ // Check for illegal sequence.
+ for (j = 0; p - j > base; j++) {
+ if ((p[-j] & 0xc0) != 0x80) {
+ break;
+ }
}
- /* It can't be the first byte if a double-byte when not using DBCS, at the
- * end of the string or the byte can't start a double-byte. */
- if (enc_dbcs == 0 || p[1] == NUL || MB_BYTE2LEN(*p) == 1)
+ if (utf8len_tab[p[-j]] != i + j + 1) {
return 0;
-
- /* Return 1 when on the lead byte, 0 when on the tail byte. */
- return 1 - dbcs_head_off(base, p);
+ }
+ return i;
}
/*
@@ -2380,13 +1962,10 @@ int mb_fix_col(int col, int row)
{
col = check_col(col);
row = check_row(row);
- if (has_mbyte && ScreenLines != NULL && col > 0
- && ((enc_dbcs
- && ScreenLines[LineOffset[row] + col] != NUL
- && dbcs_screen_head_off(ScreenLines + LineOffset[row],
- ScreenLines + LineOffset[row] + col))
- || (enc_utf8 && ScreenLines[LineOffset[row] + col] == 0)))
+ if (ScreenLines != NULL && col > 0
+ && ScreenLines[LineOffset[row] + col] == 0) {
return col - 1;
+ }
return col;
}
@@ -2536,13 +2115,14 @@ char_u * enc_locale(void)
} else
s = p + 1;
}
- for (i = 0; s[i] != NUL && i < (int)sizeof(buf) - 1; ++i) {
- if (s[i] == '_' || s[i] == '-')
+ for (i = 0; i < (int)sizeof(buf) - 1 && s[i] != NUL; i++) {
+ if (s[i] == '_' || s[i] == '-') {
buf[i] = '-';
- else if (isalnum((int)s[i]))
+ } else if (isalnum((int)s[i])) {
buf[i] = TOLOWER_ASC(s[i]);
- else
+ } else {
break;
+ }
}
buf[i] = NUL;
diff --git a/src/nvim/mbyte.h b/src/nvim/mbyte.h
index 0cfe2c4bab..2c92a0fbb2 100644
--- a/src/nvim/mbyte.h
+++ b/src/nvim/mbyte.h
@@ -9,8 +9,8 @@
* MB_BYTE2LEN_CHECK() can be used to count a special key as one byte.
* Don't call MB_BYTE2LEN(b) with b < 0 or b > 255!
*/
-#define MB_BYTE2LEN(b) mb_bytelen_tab[b]
-#define MB_BYTE2LEN_CHECK(b) (((b) < 0 || (b) > 255) ? 1 : mb_bytelen_tab[b])
+#define MB_BYTE2LEN(b) utf8len_tab[b]
+#define MB_BYTE2LEN_CHECK(b) (((b) < 0 || (b) > 255) ? 1 : utf8len_tab[b])
/* properties used in enc_canon_table[] (first three mutually exclusive) */
#define ENC_8BIT 0x01
@@ -28,6 +28,18 @@
#define ENC_LATIN9 0x400 /* Latin9 */
#define ENC_MACROMAN 0x800 /* Mac Roman (not Macro Man! :-) */
+// TODO(bfredl): eventually we should keep only one of the namings
+#define mb_ptr2len utfc_ptr2len
+#define mb_ptr2len_len utfc_ptr2len_len
+#define mb_char2len utf_char2len
+#define mb_char2bytes utf_char2bytes
+#define mb_ptr2cells utf_ptr2cells
+#define mb_ptr2cells_len utf_ptr2cells_len
+#define mb_char2cells utf_char2cells
+#define mb_off2cells utf_off2cells
+#define mb_ptr2char utf_ptr2char
+#define mb_head_off utf_head_off
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "mbyte.h.generated.h"
#endif
diff --git a/src/nvim/memfile.c b/src/nvim/memfile.c
index 6599db787f..43412e3916 100644
--- a/src/nvim/memfile.c
+++ b/src/nvim/memfile.c
@@ -48,7 +48,6 @@
#include "nvim/fileio.h"
#include "nvim/memline.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
@@ -913,7 +912,7 @@ static bool mf_do_open(memfile_T *mfp, char_u *fname, int flags)
#ifdef HAVE_FD_CLOEXEC
int fdflags = fcntl(mfp->mf_fd, F_GETFD);
if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) {
- fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
+ (void)fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
}
#endif
#ifdef HAVE_SELINUX
diff --git a/src/nvim/memline.c b/src/nvim/memline.c
index 4e35dd481f..b8891f6560 100644
--- a/src/nvim/memline.c
+++ b/src/nvim/memline.c
@@ -55,7 +55,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/os_unix.h"
#include "nvim/path.h"
@@ -443,8 +442,9 @@ void ml_setname(buf_T *buf)
#ifdef HAVE_FD_CLOEXEC
{
int fdflags = fcntl(mfp->mf_fd, F_GETFD);
- if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0)
- fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
+ if (fdflags >= 0 && (fdflags & FD_CLOEXEC) == 0) {
+ (void)fcntl(mfp->mf_fd, F_SETFD, fdflags | FD_CLOEXEC);
+ }
}
#endif
}
@@ -1063,11 +1063,12 @@ void ml_recover(void)
if (!cannot_open) {
line_count = pp->pb_pointer[idx].pe_line_count;
if (readfile(curbuf->b_ffname, NULL, lnum,
- pp->pb_pointer[idx].pe_old_lnum - 1,
- line_count, NULL, 0) == FAIL)
- cannot_open = TRUE;
- else
+ pp->pb_pointer[idx].pe_old_lnum - 1, line_count,
+ NULL, 0) != OK) {
+ cannot_open = true;
+ } else {
lnum += line_count;
+ }
}
if (cannot_open) {
++error;
@@ -1358,7 +1359,7 @@ recover_names (
if (*dirp == NUL && file_count + num_files == 0 && fname != NULL) {
char_u *swapname = (char_u *)modname((char *)fname_res, ".swp", TRUE);
if (swapname != NULL) {
- if (os_file_exists(swapname)) {
+ if (os_path_exists(swapname)) {
files = xmalloc(sizeof(char_u *));
files[0] = swapname;
swapname = NULL;
@@ -2340,14 +2341,13 @@ int ml_replace(linenr_T lnum, char_u *line, int copy)
return OK;
}
-/*
- * Delete line 'lnum' in the current buffer.
- *
- * Check: The caller of this function should probably also call
- * deleted_lines() after this.
- *
- * return FAIL for failure, OK otherwise
- */
+/// Delete line `lnum` in the current buffer.
+///
+/// @note The caller of this function should probably also call
+/// deleted_lines() after this.
+///
+/// @param message Show "--No lines in buffer--" message.
+/// @return FAIL for failure, OK otherwise
int ml_delete(linenr_T lnum, int message)
{
ml_flush_line(curbuf);
@@ -3164,9 +3164,10 @@ attention_message (
}
/* Some of these messages are long to allow translation to
* other languages. */
- MSG_PUTS(_(
- "\n(1) Another program may be editing the same file. If this is the case,\n be careful not to end up with two different instances of the same\n file when making changes."));
- MSG_PUTS(_(" Quit, or continue with caution.\n"));
+ MSG_PUTS(_("\n(1) Another program may be editing the same file. If this is"
+ " the case,\n be careful not to end up with two different"
+ " instances of the same\n file when making changes."
+ " Quit, or continue with caution.\n"));
MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
MSG_PUTS(_(" If this is the case, use \":recover\" or \"vim -r "));
msg_outtrans(buf->b_fname);
@@ -3425,11 +3426,11 @@ static char *findswapname(buf_T *buf, char **dirp, char *old_fname,
break;
}
- /* If the file was deleted this fname can be used. */
- if (!os_file_exists((char_u *) fname))
+ // If the file was deleted this fname can be used.
+ if (!os_path_exists((char_u *)fname)) {
break;
- } else
- {
+ }
+ } else {
MSG_PUTS("\n");
if (msg_silent == 0)
/* call wait_return() later */
@@ -3962,20 +3963,19 @@ long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp)
return size;
}
-/*
- * Goto byte in buffer with offset 'cnt'.
- */
+/// Goto byte in buffer with offset 'cnt'.
void goto_byte(long cnt)
{
long boff = cnt;
linenr_T lnum;
- ml_flush_line(curbuf); /* cached line may be dirty */
+ ml_flush_line(curbuf); // cached line may be dirty
setpcmark();
- if (boff)
- --boff;
+ if (boff) {
+ boff--;
+ }
lnum = ml_find_line_or_offset(curbuf, (linenr_T)0, &boff);
- if (lnum < 1) { /* past the end */
+ if (lnum < 1) { // past the end
curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
curwin->w_curswant = MAXCOL;
coladvance((colnr_T)MAXCOL);
@@ -3987,7 +3987,84 @@ void goto_byte(long cnt)
}
check_cursor();
- /* Make sure the cursor is on the first byte of a multi-byte char. */
- if (has_mbyte)
+ // Make sure the cursor is on the first byte of a multi-byte char.
+ if (has_mbyte) {
mb_adjust_cursor();
+ }
+}
+
+/// Increment the line pointer "lp" crossing line boundaries as necessary.
+/// Return 1 when going to the next line.
+/// Return 2 when moving forward onto a NUL at the end of the line).
+/// Return -1 when at the end of file.
+/// Return 0 otherwise.
+int inc(pos_T *lp)
+{
+ char_u *p = ml_get_pos(lp);
+
+ if (*p != NUL) { // still within line, move to next char (may be NUL)
+ if (has_mbyte) {
+ int l = (*mb_ptr2len)(p);
+
+ lp->col += l;
+ return (p[l] != NUL) ? 0 : 2;
+ }
+ lp->col++;
+ lp->coladd = 0;
+ return (p[1] != NUL) ? 0 : 2;
+ }
+ if (lp->lnum != curbuf->b_ml.ml_line_count) { // there is a next line
+ lp->col = 0;
+ lp->lnum++;
+ lp->coladd = 0;
+ return 1;
+ }
+ return -1;
+}
+
+/// Same as inc(), but skip NUL at the end of non-empty lines.
+int incl(pos_T *lp)
+{
+ int r;
+
+ if ((r = inc(lp)) >= 1 && lp->col) {
+ r = inc(lp);
+ }
+ return r;
+}
+
+int dec(pos_T *lp)
+{
+ char_u *p;
+
+ lp->coladd = 0;
+ if (lp->col > 0) { // still within line
+ lp->col--;
+ if (has_mbyte) {
+ p = ml_get(lp->lnum);
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ }
+ return 0;
+ }
+ if (lp->lnum > 1) { // there is a prior line
+ lp->lnum--;
+ p = ml_get(lp->lnum);
+ lp->col = (colnr_T)STRLEN(p);
+ if (has_mbyte) {
+ lp->col -= (*mb_head_off)(p, p + lp->col);
+ }
+ return 1;
+ }
+ return -1; // at start of file
+}
+
+/// Same as dec(), but skip NUL at the end of non-empty lines.
+int decl(pos_T *lp)
+{
+ int r;
+
+ if ((r = dec(lp)) == 1 && lp->col) {
+ r = dec(lp);
+ }
+ return r;
}
diff --git a/src/nvim/memory.c b/src/nvim/memory.c
index 8db47b79c1..25fa2f150e 100644
--- a/src/nvim/memory.c
+++ b/src/nvim/memory.c
@@ -17,16 +17,41 @@
// Force je_ prefix on jemalloc functions.
# define JEMALLOC_NO_DEMANGLE
# include <jemalloc/jemalloc.h>
-# define malloc(size) je_malloc(size)
-# define calloc(count, size) je_calloc(count, size)
-# define realloc(ptr, size) je_realloc(ptr, size)
-# define free(ptr) je_free(ptr)
+#endif
+
+#ifdef UNIT_TESTING
+# define malloc(size) mem_malloc(size)
+# define calloc(count, size) mem_calloc(count, size)
+# define realloc(ptr, size) mem_realloc(ptr, size)
+# define free(ptr) mem_free(ptr)
+# ifdef HAVE_JEMALLOC
+MemMalloc mem_malloc = &je_malloc;
+MemFree mem_free = &je_free;
+MemCalloc mem_calloc = &je_calloc;
+MemRealloc mem_realloc = &je_realloc;
+# else
+MemMalloc mem_malloc = &malloc;
+MemFree mem_free = &free;
+MemCalloc mem_calloc = &calloc;
+MemRealloc mem_realloc = &realloc;
+# endif
+#else
+# ifdef HAVE_JEMALLOC
+# define malloc(size) je_malloc(size)
+# define calloc(count, size) je_calloc(count, size)
+# define realloc(ptr, size) je_realloc(ptr, size)
+# define free(ptr) je_free(ptr)
+# endif
#endif
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "memory.c.generated.h"
#endif
+#ifdef EXITFREE
+bool entered_free_all_mem = false;
+#endif
+
/// Try to free memory. Used when trying to recover from out of memory errors.
/// @see {xmalloc}
void try_to_free_memory(void)
@@ -283,18 +308,16 @@ size_t memcnt(const void *data, char c, size_t len)
return cnt;
}
-/// The xstpcpy() function shall copy the string pointed to by src (including
-/// the terminating NUL character) into the array pointed to by dst.
+/// Copies the string pointed to by src (including the terminating NUL
+/// character) into the array pointed to by dst.
///
-/// The xstpcpy() function shall return a pointer to the terminating NUL
-/// character copied into the dst buffer. This is the only difference with
-/// strcpy(), which returns dst.
+/// @returns pointer to the terminating NUL char copied into the dst buffer.
+/// This is the only difference with strcpy(), which returns dst.
///
-/// WARNING: If copying takes place between objects that overlap, the behavior is
-/// undefined.
+/// WARNING: If copying takes place between objects that overlap, the behavior
+/// is undefined.
///
-/// This is the Neovim version of stpcpy(3) as defined in POSIX 2008. We
-/// don't require that supported platforms implement POSIX 2008, so we
+/// Nvim version of POSIX 2008 stpcpy(3). We do not require POSIX 2008, so
/// implement our own version.
///
/// @param dst
@@ -306,16 +329,15 @@ char *xstpcpy(char *restrict dst, const char *restrict src)
return (char *)memcpy(dst, src, len + 1) + len;
}
-/// The xstpncpy() function shall copy not more than n bytes (bytes that follow
-/// a NUL character are not copied) from the array pointed to by src to the
-/// array pointed to by dst.
+/// Copies not more than n bytes (bytes that follow a NUL character are not
+/// copied) from the array pointed to by src to the array pointed to by dst.
///
-/// If a NUL character is written to the destination, the xstpncpy() function
-/// shall return the address of the first such NUL character. Otherwise, it
-/// shall return &dst[maxlen].
+/// If a NUL character is written to the destination, xstpncpy() returns the
+/// address of the first such NUL character. Otherwise, it shall return
+/// &dst[maxlen].
///
-/// WARNING: If copying takes place between objects that overlap, the behavior is
-/// undefined.
+/// WARNING: If copying takes place between objects that overlap, the behavior
+/// is undefined.
///
/// WARNING: xstpncpy will ALWAYS write maxlen bytes. If src is shorter than
/// maxlen, zeroes will be written to the remaining bytes.
@@ -342,29 +364,58 @@ char *xstpncpy(char *restrict dst, const char *restrict src, size_t maxlen)
}
}
-/// xstrlcpy - Copy a %NUL terminated string into a sized buffer
+/// xstrlcpy - Copy a NUL-terminated string into a sized buffer
///
-/// Compatible with *BSD strlcpy: the result is always a valid
-/// NUL-terminated string that fits in the buffer (unless,
-/// of course, the buffer size is zero). It does not pad
-/// out the result like strncpy() does.
+/// Compatible with *BSD strlcpy: the result is always a valid NUL-terminated
+/// string that fits in the buffer (unless, of course, the buffer size is
+/// zero). It does not pad out the result like strncpy() does.
///
-/// @param dst Where to copy the string to
-/// @param src Where to copy the string from
-/// @param size Size of destination buffer
-/// @return Length of the source string (i.e.: strlen(src))
-size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t size)
+/// @param dst Buffer to store the result
+/// @param src String to be copied
+/// @param dsize Size of `dst`
+/// @return strlen(src). If retval >= dstsize, truncation occurs.
+size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t dsize)
FUNC_ATTR_NONNULL_ALL
{
- size_t ret = strlen(src);
+ size_t slen = strlen(src);
- if (size) {
- size_t len = (ret >= size) ? size - 1 : ret;
- memcpy(dst, src, len);
- dst[len] = '\0';
- }
+ if (dsize) {
+ size_t len = MIN(slen, dsize - 1);
+ memcpy(dst, src, len);
+ dst[len] = '\0';
+ }
- return ret;
+ return slen; // Does not include NUL.
+}
+
+/// Appends `src` to string `dst` of size `dsize` (unlike strncat, dsize is the
+/// full size of `dst`, not space left). At most dsize-1 characters
+/// will be copied. Always NUL terminates. `src` and `dst` may overlap.
+///
+/// @see vim_strcat from Vim.
+/// @see strlcat from OpenBSD.
+///
+/// @param dst Buffer to be appended-to. Must have a NUL byte.
+/// @param src String to put at the end of `dst`
+/// @param dsize Size of `dst` including NUL byte. Must be greater than 0.
+/// @return strlen(src) + strlen(initial dst)
+/// If retval >= dsize, truncation occurs.
+size_t xstrlcat(char *const dst, const char *const src, const size_t dsize)
+ FUNC_ATTR_NONNULL_ALL
+{
+ assert(dsize > 0);
+ const size_t dlen = strlen(dst);
+ assert(dlen < dsize);
+ const size_t slen = strlen(src);
+
+ if (slen > dsize - dlen - 1) {
+ memmove(dst + dlen, src, dsize - dlen - 1);
+ dst[dsize - 1] = '\0';
+ } else {
+ memmove(dst + dlen, src, slen + 1);
+ }
+
+ return slen + dlen; // Does not include NUL.
}
/// strdup() wrapper
@@ -374,6 +425,7 @@ size_t xstrlcpy(char *restrict dst, const char *restrict src, size_t size)
/// @return pointer to a copy of the string
char *xstrdup(const char *str)
FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET
+ FUNC_ATTR_NONNULL_ALL
{
return xmemdupz(str, strlen(str));
}
@@ -404,6 +456,7 @@ void *xmemrchr(const void *src, uint8_t c, size_t len)
/// @return pointer to a copy of the string
char *xstrndup(const char *str, size_t len)
FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET
+ FUNC_ATTR_NONNULL_ALL
{
char *p = memchr(str, '\0', len);
return xmemdupz(str, p ? (size_t)(p - str) : len);
@@ -440,6 +493,16 @@ void do_outofmem_msg(size_t size)
}
}
+/// Writes time_t to "buf[8]".
+void time_to_bytes(time_t time_, uint8_t buf[8])
+{
+ // time_t can be up to 8 bytes in size, more than uintmax_t in 32 bits
+ // systems, thus we can't use put_bytes() here.
+ for (size_t i = 7, bufi = 0; bufi < 8; i--, bufi++) {
+ buf[bufi] = (uint8_t)((uint64_t)time_ >> (i * 8));
+ }
+}
+
#if defined(EXITFREE)
#include "nvim/file_search.h"
@@ -481,13 +544,13 @@ void do_outofmem_msg(size_t size)
void free_all_mem(void)
{
buf_T *buf, *nextbuf;
- static bool entered = false;
- /* When we cause a crash here it is caught and Vim tries to exit cleanly.
- * Don't try freeing everything again. */
- if (entered)
+ // When we cause a crash here it is caught and Vim tries to exit cleanly.
+ // Don't try freeing everything again.
+ if (entered_free_all_mem) {
return;
- entered = true;
+ }
+ entered_free_all_mem = true;
// Don't want to trigger autocommands from here on.
block_autocmds();
diff --git a/src/nvim/memory.h b/src/nvim/memory.h
index 7b477da2f5..250ac3e08f 100644
--- a/src/nvim/memory.h
+++ b/src/nvim/memory.h
@@ -1,8 +1,41 @@
#ifndef NVIM_MEMORY_H
#define NVIM_MEMORY_H
+#include <stdbool.h> // for bool
#include <stdint.h> // for uint8_t
#include <stddef.h> // for size_t
+#include <time.h> // for time_t
+
+/// `malloc()` function signature
+typedef void *(*MemMalloc)(size_t);
+
+/// `free()` function signature
+typedef void (*MemFree)(void *);
+
+/// `calloc()` function signature
+typedef void *(*MemCalloc)(size_t, size_t);
+
+/// `realloc()` function signature
+typedef void *(*MemRealloc)(void *, size_t);
+
+#ifdef UNIT_TESTING
+/// When unit testing: pointer to the `malloc()` function, may be altered
+extern MemMalloc mem_malloc;
+
+/// When unit testing: pointer to the `free()` function, may be altered
+extern MemFree mem_free;
+
+/// When unit testing: pointer to the `calloc()` function, may be altered
+extern MemCalloc mem_calloc;
+
+/// When unit testing: pointer to the `realloc()` function, may be altered
+extern MemRealloc mem_realloc;
+#endif
+
+#ifdef EXITFREE
+/// Indicates that free_all_mem function was or is running
+extern bool entered_free_all_mem;
+#endif
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "memory.h.generated.h"
diff --git a/src/nvim/menu.c b/src/nvim/menu.c
index 3c2394d579..7c0eee64dd 100644
--- a/src/nvim/menu.c
+++ b/src/nvim/menu.c
@@ -18,9 +18,9 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/ui.h"
diff --git a/src/nvim/message.c b/src/nvim/message.c
index 47f246fc76..6104adf2c7 100644
--- a/src/nvim/message.c
+++ b/src/nvim/message.c
@@ -19,10 +19,10 @@
#include "nvim/fileio.h"
#include "nvim/func_attr.h"
#include "nvim/getchar.h"
+#include "nvim/main.h"
#include "nvim/mbyte.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/ops.h"
@@ -297,8 +297,22 @@ void trunc_string(char_u *s, char_u *buf, int room, int buflen)
len += n;
}
- /* Set the middle and copy the last part. */
- if (e + 3 < buflen) {
+ if (i <= e + 3) {
+ // text fits without truncating
+ if (s != buf) {
+ len = STRLEN(s);
+ if (len >= buflen) {
+ len = buflen - 1;
+ }
+ len = len - e + 1;
+ if (len < 1) {
+ buf[e - 1] = NUL;
+ } else {
+ memmove(buf + e, s + e, len);
+ }
+ }
+ } else if (e + 3 < buflen) {
+ // set the middle and copy the last part
memmove(buf + e, "...", (size_t)3);
len = (int)STRLEN(s + i) + 1;
if (len >= buflen - e - 3)
@@ -306,7 +320,8 @@ void trunc_string(char_u *s, char_u *buf, int room, int buflen)
memmove(buf + e + 3, s + i, len);
buf[e + 3 + len - 1] = NUL;
} else {
- buf[e - 1] = NUL; /* make sure it is truncated */
+ // can't fit in the "...", just truncate it
+ buf[e - 1] = NUL;
}
}
@@ -366,20 +381,17 @@ static int other_sourcing_name(void)
return FALSE;
}
-/*
- * Get the message about the source, as used for an error message.
- * Returns an allocated string with room for one more character.
- * Returns NULL when no message is to be given.
- */
+/// Get the message about the source, as used for an error message.
+/// Returns an allocated string with room for one more character.
+/// Returns NULL when no message is to be given.
static char_u *get_emsg_source(void)
{
- char_u *Buf, *p;
-
if (sourcing_name != NULL && other_sourcing_name()) {
- p = (char_u *)_("Error detected while processing %s:");
- Buf = xmalloc(STRLEN(sourcing_name) + STRLEN(p));
- sprintf((char *)Buf, (char *)p, sourcing_name);
- return Buf;
+ char_u *p = (char_u *)_("Error detected while processing %s:");
+ size_t len = STRLEN(sourcing_name) + STRLEN(p) + 1;
+ char_u *buf = xmalloc(len);
+ snprintf((char *)buf, len, (char *)p, sourcing_name);
+ return buf;
}
return NULL;
}
@@ -493,10 +505,11 @@ int emsg(char_u *s)
* when the message should be ignored completely (used for the
* interrupt message).
*/
- if (cause_errthrow(s, severe, &ignore) == TRUE) {
- if (!ignore)
- did_emsg = TRUE;
- return TRUE;
+ if (cause_errthrow(s, severe, &ignore) == true) {
+ if (!ignore) {
+ did_emsg = true;
+ }
+ return true;
}
// set "v:errmsg", also when using ":silent! cmd"
@@ -507,45 +520,49 @@ int emsg(char_u *s)
* But do write it to the redirection file.
*/
if (emsg_silent != 0) {
- msg_start();
- p = get_emsg_source();
- if (p != NULL) {
- STRCAT(p, "\n");
- redir_write(p, -1);
- xfree(p);
- }
- p = get_emsg_lnum();
- if (p != NULL) {
- STRCAT(p, "\n");
- redir_write(p, -1);
- xfree(p);
+ if (!emsg_noredir) {
+ msg_start();
+ p = get_emsg_source();
+ if (p != NULL) {
+ STRCAT(p, "\n");
+ redir_write(p, STRLEN(p));
+ xfree(p);
+ }
+ p = get_emsg_lnum();
+ if (p != NULL) {
+ STRCAT(p, "\n");
+ redir_write(p, STRLEN(p));
+ xfree(p);
+ }
+ redir_write(s, STRLEN(s));
}
- redir_write(s, -1);
- return TRUE;
+ return true;
}
- /* Reset msg_silent, an error causes messages to be switched back on. */
+ // Reset msg_silent, an error causes messages to be switched back on.
msg_silent = 0;
cmd_silent = FALSE;
- if (global_busy) /* break :global command */
- ++global_busy;
+ if (global_busy) { // break :global command
+ global_busy++;
+ }
- if (p_eb)
- beep_flush(); /* also includes flush_buffers() */
- else
- flush_buffers(FALSE); /* flush internal buffers */
- did_emsg = TRUE; /* flag for DoOneCmd() */
+ if (p_eb) {
+ beep_flush(); // also includes flush_buffers()
+ } else {
+ flush_buffers(false); // flush internal buffers
+ }
+ did_emsg = true; // flag for DoOneCmd()
}
- emsg_on_display = TRUE; /* remember there is an error message */
- ++msg_scroll; /* don't overwrite a previous message */
- attr = hl_attr(HLF_E); /* set highlight mode for error messages */
- if (msg_scrolled != 0)
- need_wait_return = TRUE; /* needed in case emsg() is called after
- * wait_return has reset need_wait_return
- * and a redraw is expected because
- * msg_scrolled is non-zero */
+ emsg_on_display = true; // remember there is an error message
+ msg_scroll++; // don't overwrite a previous message
+ attr = hl_attr(HLF_E); // set highlight mode for error messages
+ if (msg_scrolled != 0) {
+ need_wait_return = true; // needed in case emsg() is called after
+ } // wait_return has reset need_wait_return
+ // and a redraw is expected because
+ // msg_scrolled is non-zero
/*
* Display name and line number for the source of the error.
@@ -579,6 +596,24 @@ bool emsgf(const char *const fmt, ...)
return emsg(IObuff);
}
+static void msg_emsgf_event(void **argv)
+{
+ char *s = argv[0];
+ (void)emsg((char_u *)s);
+ xfree(s);
+}
+
+void msg_schedule_emsgf(const char *const fmt, ...)
+{
+ va_list ap;
+ va_start(ap, fmt);
+ vim_vsnprintf((char *)IObuff, IOSIZE, fmt, ap, NULL);
+ va_end(ap);
+
+ char *s = xstrdup((char *)IObuff);
+ loop_schedule(&main_loop, event_create(1, msg_emsgf_event, 1, s));
+}
+
/*
* Like msg(), but truncate to a single line if p_shm contains 't', or when
* "force" is TRUE. This truncates in another way as for normal messages.
@@ -699,21 +734,47 @@ int delete_first_msg(void)
void ex_messages(exarg_T *eap)
{
struct msg_hist *p;
- const char *s;
+ int c = 0;
- msg_hist_off = TRUE;
+ if (STRCMP(eap->arg, "clear") == 0) {
+ int keep = eap->addr_count == 0 ? 0 : eap->line2;
- s = os_getenv("LANG");
- if (s)
- msg_attr((char_u *)
- _("Messages maintainer: Bram Moolenaar <Bram@vim.org>"),
- hl_attr(HLF_T));
+ while (msg_hist_len > keep) {
+ (void)delete_first_msg();
+ }
+ return;
+ }
+
+ if (*eap->arg != NUL) {
+ EMSG(_(e_invarg));
+ return;
+ }
+
+ msg_hist_off = true;
+
+ p = first_msg_hist;
+
+ if (eap->addr_count != 0) {
+ // Count total messages
+ for (; p != NULL && !got_int; p = p->next) {
+ c++;
+ }
+
+ c -= eap->line2;
+
+ // Skip without number of messages specified
+ for (p = first_msg_hist; p != NULL && !got_int && c > 0; p = p->next, c--) {
+ }
+ }
- for (p = first_msg_hist; p != NULL && !got_int; p = p->next)
- if (p->msg != NULL)
+ // Display what was not skipped.
+ for (; p != NULL && !got_int; p = p->next) {
+ if (p->msg != NULL) {
msg_attr(p->msg, p->attr);
+ }
+ }
- msg_hist_off = FALSE;
+ msg_hist_off = false;
}
/*
@@ -785,11 +846,13 @@ void wait_return(int redraw)
State = HITRETURN;
setmouse();
- /* Avoid the sequence that the user types ":" at the hit-return prompt
- * to start an Ex command, but the file-changed dialog gets in the
- * way. */
- if (need_check_timestamps)
- check_timestamps(FALSE);
+ cmdline_row = msg_row;
+ // Avoid the sequence that the user types ":" at the hit-return prompt
+ // to start an Ex command, but the file-changed dialog gets in the
+ // way.
+ if (need_check_timestamps) {
+ check_timestamps(false);
+ }
hit_return_msg();
@@ -1970,6 +2033,7 @@ static void msg_puts_printf(char *str, int maxlen)
*/
static int do_more_prompt(int typed_char)
{
+ static bool entered = false;
int used_typed_char = typed_char;
int oldState = State;
int c;
@@ -1979,6 +2043,14 @@ static int do_more_prompt(int typed_char)
msgchunk_T *mp;
int i;
+ // We get called recursively when a timer callback outputs a message. In
+ // that case don't show another prompt. Also when at the hit-Enter prompt
+ // and nothing was typed.
+ if (entered || (State == HITRETURN && typed_char == 0)) {
+ return false;
+ }
+ entered = true;
+
if (typed_char == 'G') {
/* "g<": Find first line on the last page. */
mp_last = msg_sb_start(last_msgchunk);
@@ -2153,9 +2225,11 @@ static int do_more_prompt(int typed_char)
if (quit_more) {
msg_row = Rows - 1;
msg_col = 0;
- } else if (cmdmsg_rl)
+ } else if (cmdmsg_rl) {
msg_col = Columns - 1;
+ }
+ entered = false;
return retval;
}
@@ -2377,6 +2451,10 @@ static void redir_write(char_u *str, int maxlen)
char_u *s = str;
static int cur_col = 0;
+ if (maxlen == 0) {
+ return;
+ }
+
/* Don't do anything for displaying prompts and the like. */
if (redir_off)
return;
@@ -2389,26 +2467,37 @@ static void redir_write(char_u *str, int maxlen)
/* If the string doesn't start with CR or NL, go to msg_col */
if (*s != '\n' && *s != '\r') {
while (cur_col < msg_col) {
- if (redir_reg)
- write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
- else if (redir_vname)
+ if (capture_ga) {
+ ga_concat_len(capture_ga, " ", 1);
+ }
+ if (redir_reg) {
+ write_reg_contents(redir_reg, (char_u *)" ", 1, true);
+ } else if (redir_vname) {
var_redir_str((char_u *)" ", -1);
- else if (redir_fd != NULL)
+ } else if (redir_fd != NULL) {
fputs(" ", redir_fd);
- if (verbose_fd != NULL)
+ }
+ if (verbose_fd != NULL) {
fputs(" ", verbose_fd);
- ++cur_col;
+ }
+ cur_col++;
}
}
- if (redir_reg)
- write_reg_contents(redir_reg, s, maxlen, TRUE);
- if (redir_vname)
+ size_t len = maxlen == -1 ? STRLEN(s) : (size_t)maxlen;
+ if (capture_ga) {
+ ga_concat_len(capture_ga, (const char *)str, len);
+ }
+ if (redir_reg) {
+ write_reg_contents(redir_reg, s, len, true);
+ }
+ if (redir_vname) {
var_redir_str(s, maxlen);
+ }
/* Write and adjust the current column. */
while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen)) {
- if (!redir_reg && !redir_vname)
+ if (!redir_reg && !redir_vname && !capture_ga)
if (redir_fd != NULL)
putc(*s, redir_fd);
if (verbose_fd != NULL)
@@ -2430,8 +2519,7 @@ static void redir_write(char_u *str, int maxlen)
int redirecting(void)
{
return redir_fd != NULL || *p_vfile != NUL
- || redir_reg || redir_vname
- ;
+ || redir_reg || redir_vname || capture_ga != NULL;
}
/*
diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c
index 48791384a6..ba26381e23 100644
--- a/src/nvim/misc1.c
+++ b/src/nvim/misc1.c
@@ -31,7 +31,6 @@
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
@@ -41,6 +40,7 @@
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/tag.h"
#include "nvim/ui.h"
@@ -178,12 +178,11 @@ open_line (
if (curbuf->b_p_ai
|| do_si
) {
- /*
- * count white space on current line
- */
- newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, FALSE);
- if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
- newindent = second_line_indent; /* for ^^D command in insert mode */
+ // count white space on current line
+ newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts, false);
+ if (newindent == 0 && !(flags & OPENLINE_COM_LIST)) {
+ newindent = second_line_indent; // for ^^D command in insert mode
+ }
/*
* Do smart indenting.
@@ -567,7 +566,7 @@ open_line (
int i;
int l;
- for (i = 0; p[i] != NUL && i < lead_len; i += l) {
+ for (i = 0; i < lead_len && p[i] != NUL; i += l) {
l = (*mb_ptr2len)(p + i);
if (vim_strnsize(p, i + l) > repl_size)
break;
@@ -612,7 +611,7 @@ open_line (
if (curbuf->b_p_ai
|| do_si
)
- newindent = get_indent_str(leader, (int)curbuf->b_p_ts, FALSE);
+ newindent = get_indent_str(leader, (int)curbuf->b_p_ts, false);
/* Add the indent offset */
if (newindent + off < 0) {
@@ -743,10 +742,14 @@ open_line (
if (ml_append(curwin->w_cursor.lnum, p_extra, (colnr_T)0, FALSE)
== FAIL)
goto theend;
- /* Postpone calling changed_lines(), because it would mess up folding
- * with markers. */
- mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
- did_append = TRUE;
+ // Postpone calling changed_lines(), because it would mess up folding
+ // with markers.
+ // Skip mark_adjust when adding a line after the last one, there can't
+ // be marks there.
+ if (curwin->w_cursor.lnum + 1 < curbuf->b_ml.ml_line_count) {
+ mark_adjust(curwin->w_cursor.lnum + 1, (linenr_T)MAXLNUM, 1L, 0L);
+ }
+ did_append = true;
} else {
/*
* In VREPLACE mode we are starting to replace the next line.
@@ -1743,18 +1746,6 @@ int gchar_pos(pos_T *pos)
}
/*
- * Skip to next part of an option argument: Skip space and comma.
- */
-char_u *skip_to_option_part(char_u *p)
-{
- if (*p == ',')
- ++p;
- while (*p == ' ')
- ++p;
- return p;
-}
-
-/*
* Call this function when something in the current buffer is changed.
*
* Most often called through changed_bytes() and changed_lines(), which also
@@ -1872,7 +1863,11 @@ void appended_lines(linenr_T lnum, long count)
*/
void appended_lines_mark(linenr_T lnum, long count)
{
- mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
+ // Skip mark_adjust when adding a line after the last one, there can't
+ // be marks there.
+ if (lnum + count < curbuf->b_ml.ml_line_count) {
+ mark_adjust(lnum + 1, (linenr_T)MAXLNUM, count, 0L);
+ }
changed_lines(lnum + 1, 0, lnum + 1, count);
}
@@ -2512,8 +2507,9 @@ void msgmore(long n)
vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
_("%" PRId64 " fewer lines"), (int64_t)pn);
}
- if (got_int)
- vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ if (got_int) {
+ xstrlcat((char *)msg_buf, _(" (Interrupted)"), MSG_BUF_LEN);
+ }
if (msg(msg_buf)) {
set_keep_msg(msg_buf, 0);
keep_msg_more = TRUE;
@@ -2684,6 +2680,42 @@ void fast_breakcheck(void)
}
}
+// Call shell. Calls os_call_shell, with 'shellxquote' added.
+int call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)
+{
+ int retval;
+ proftime_T wait_time;
+
+ if (p_verbose > 3) {
+ verbose_enter();
+ smsg(_("Calling shell to execute: \"%s\""),
+ cmd == NULL ? p_sh : cmd);
+ ui_putc('\n');
+ verbose_leave();
+ }
+
+ if (do_profiling == PROF_YES) {
+ prof_child_enter(&wait_time);
+ }
+
+ if (*p_sh == NUL) {
+ EMSG(_(e_shellempty));
+ retval = -1;
+ } else {
+ // The external command may update a tags file, clear cached tags.
+ tag_freematch();
+
+ retval = os_call_shell(cmd, opts, extra_shell_arg);
+ }
+
+ set_vim_var_nr(VV_SHELL_ERROR, (varnumber_T)retval);
+ if (do_profiling == PROF_YES) {
+ prof_child_exit(&wait_time);
+ }
+
+ return retval;
+}
+
/// Get the stdout of an external command.
/// If "ret_len" is NULL replace NUL characters with NL. When "ret_len" is not
/// NULL store the length there.
diff --git a/src/nvim/misc2.c b/src/nvim/misc2.c
deleted file mode 100644
index 368f83cfb5..0000000000
--- a/src/nvim/misc2.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/*
- * misc2.c: Various functions.
- */
-#include <assert.h>
-#include <inttypes.h>
-#include <string.h>
-
-#include "nvim/vim.h"
-#include "nvim/ascii.h"
-#include "nvim/misc2.h"
-#include "nvim/file_search.h"
-#include "nvim/buffer.h"
-#include "nvim/charset.h"
-#include "nvim/cursor.h"
-#include "nvim/diff.h"
-#include "nvim/edit.h"
-#include "nvim/eval.h"
-#include "nvim/ex_cmds.h"
-#include "nvim/ex_docmd.h"
-#include "nvim/ex_getln.h"
-#include "nvim/fileio.h"
-#include "nvim/fold.h"
-#include "nvim/getchar.h"
-#include "nvim/macros.h"
-#include "nvim/mark.h"
-#include "nvim/mbyte.h"
-#include "nvim/memfile.h"
-#include "nvim/memline.h"
-#include "nvim/memory.h"
-#include "nvim/message.h"
-#include "nvim/misc1.h"
-#include "nvim/move.h"
-#include "nvim/option.h"
-#include "nvim/ops.h"
-#include "nvim/os_unix.h"
-#include "nvim/path.h"
-#include "nvim/quickfix.h"
-#include "nvim/regexp.h"
-#include "nvim/screen.h"
-#include "nvim/search.h"
-#include "nvim/spell.h"
-#include "nvim/strings.h"
-#include "nvim/syntax.h"
-#include "nvim/tag.h"
-#include "nvim/ui.h"
-#include "nvim/window.h"
-#include "nvim/os/os.h"
-#include "nvim/os/shell.h"
-
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "misc2.c.generated.h"
-#endif
-/*
- * Return TRUE if in the current mode we need to use virtual.
- */
-int virtual_active(void)
-{
- /* While an operator is being executed we return "virtual_op", because
- * VIsual_active has already been reset, thus we can't check for "block"
- * being used. */
- if (virtual_op != MAYBE)
- return virtual_op;
- return ve_flags == VE_ALL
- || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
- || ((ve_flags & VE_INSERT) && (State & INSERT));
-}
-
-/*
- * Increment the line pointer "lp" crossing line boundaries as necessary.
- * Return 1 when going to the next line.
- * Return 2 when moving forward onto a NUL at the end of the line).
- * Return -1 when at the end of file.
- * Return 0 otherwise.
- */
-int inc(pos_T *lp)
-{
- char_u *p = ml_get_pos(lp);
-
- if (*p != NUL) { /* still within line, move to next char (may be NUL) */
- if (has_mbyte) {
- int l = (*mb_ptr2len)(p);
-
- lp->col += l;
- return (p[l] != NUL) ? 0 : 2;
- }
- lp->col++;
- lp->coladd = 0;
- return (p[1] != NUL) ? 0 : 2;
- }
- if (lp->lnum != curbuf->b_ml.ml_line_count) { /* there is a next line */
- lp->col = 0;
- lp->lnum++;
- lp->coladd = 0;
- return 1;
- }
- return -1;
-}
-
-/*
- * incl(lp): same as inc(), but skip the NUL at the end of non-empty lines
- */
-int incl(pos_T *lp)
-{
- int r;
-
- if ((r = inc(lp)) >= 1 && lp->col)
- r = inc(lp);
- return r;
-}
-
-int dec(pos_T *lp)
-{
- char_u *p;
-
- lp->coladd = 0;
- if (lp->col > 0) { /* still within line */
- lp->col--;
- if (has_mbyte) {
- p = ml_get(lp->lnum);
- lp->col -= (*mb_head_off)(p, p + lp->col);
- }
- return 0;
- }
- if (lp->lnum > 1) { /* there is a prior line */
- lp->lnum--;
- p = ml_get(lp->lnum);
- lp->col = (colnr_T)STRLEN(p);
- if (has_mbyte)
- lp->col -= (*mb_head_off)(p, p + lp->col);
- return 1;
- }
- return -1; /* at start of file */
-}
-
-/*
- * decl(lp): same as dec(), but skip the NUL at the end of non-empty lines
- */
-int decl(pos_T *lp)
-{
- int r;
-
- if ((r = dec(lp)) == 1 && lp->col)
- r = dec(lp);
- return r;
-}
-
-/*
- * Return TRUE when 'shell' has "csh" in the tail.
- */
-int csh_like_shell(void)
-{
- return strstr((char *)path_tail(p_sh), "csh") != NULL;
-}
-
-/*
- * Isolate one part of a string option where parts are separated with
- * "sep_chars".
- * The part is copied into "buf[maxlen]".
- * "*option" is advanced to the next part.
- * The length is returned.
- */
-size_t copy_option_part(char_u **option, char_u *buf, size_t maxlen, char *sep_chars)
-{
- size_t len = 0;
- char_u *p = *option;
-
- /* skip '.' at start of option part, for 'suffixes' */
- if (*p == '.')
- buf[len++] = *p++;
- while (*p != NUL && vim_strchr((char_u *)sep_chars, *p) == NULL) {
- /*
- * Skip backslash before a separator character and space.
- */
- if (p[0] == '\\' && vim_strchr((char_u *)sep_chars, p[1]) != NULL)
- ++p;
- if (len < maxlen - 1)
- buf[len++] = *p;
- ++p;
- }
- buf[len] = NUL;
-
- if (*p != NUL && *p != ',') /* skip non-standard separator */
- ++p;
- p = skip_to_option_part(p); /* p points to next file name */
-
- *option = p;
- return len;
-}
-
-/*
- * Return the current end-of-line type: EOL_DOS, EOL_UNIX or EOL_MAC.
- */
-int get_fileformat(buf_T *buf)
-{
- int c = *buf->b_p_ff;
-
- if (buf->b_p_bin || c == 'u')
- return EOL_UNIX;
- if (c == 'm')
- return EOL_MAC;
- return EOL_DOS;
-}
-
-/*
- * Like get_fileformat(), but override 'fileformat' with "p" for "++opt=val"
- * argument.
- */
-int
-get_fileformat_force (
- buf_T *buf,
- exarg_T *eap /* can be NULL! */
-)
-{
- int c;
-
- if (eap != NULL && eap->force_ff != 0)
- c = eap->cmd[eap->force_ff];
- else {
- if ((eap != NULL && eap->force_bin != 0)
- ? (eap->force_bin == FORCE_BIN) : buf->b_p_bin)
- return EOL_UNIX;
- c = *buf->b_p_ff;
- }
- if (c == 'u')
- return EOL_UNIX;
- if (c == 'm')
- return EOL_MAC;
- return EOL_DOS;
-}
-
-/// Set the current end-of-line type to EOL_UNIX, EOL_MAC, or EOL_DOS.
-///
-/// Sets 'fileformat'.
-///
-/// @param eol_style End-of-line style.
-/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
-void set_fileformat(int eol_style, int opt_flags)
-{
- char *p = NULL;
-
- switch (eol_style) {
- case EOL_UNIX:
- p = FF_UNIX;
- break;
- case EOL_MAC:
- p = FF_MAC;
- break;
- case EOL_DOS:
- p = FF_DOS;
- break;
- }
-
- // p is NULL if "eol_style" is EOL_UNKNOWN.
- if (p != NULL) {
- set_string_option_direct((char_u *)"ff",
- -1,
- (char_u *)p,
- OPT_FREE | opt_flags,
- 0);
- }
-
- // This may cause the buffer to become (un)modified.
- check_status(curbuf);
- redraw_tabline = TRUE;
- need_maketitle = TRUE; // Set window title later.
-}
-
-/*
- * Return the default fileformat from 'fileformats'.
- */
-int default_fileformat(void)
-{
- switch (*p_ffs) {
- case 'm': return EOL_MAC;
- case 'd': return EOL_DOS;
- }
- return EOL_UNIX;
-}
-
-// Call shell. Calls os_call_shell, with 'shellxquote' added.
-int call_shell(char_u *cmd, ShellOpts opts, char_u *extra_shell_arg)
-{
- char_u *ncmd;
- int retval;
- proftime_T wait_time;
-
- if (p_verbose > 3) {
- verbose_enter();
- smsg(_("Calling shell to execute: \"%s\""),
- cmd == NULL ? p_sh : cmd);
- ui_putc('\n');
- verbose_leave();
- }
-
- if (do_profiling == PROF_YES)
- prof_child_enter(&wait_time);
-
- if (*p_sh == NUL) {
- EMSG(_(e_shellempty));
- retval = -1;
- } else {
- /* The external command may update a tags file, clear cached tags. */
- tag_freematch();
-
- if (cmd == NULL || *p_sxq == NUL)
- retval = os_call_shell(cmd, opts, extra_shell_arg);
- else {
- char_u *ecmd = cmd;
-
- if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0) {
- ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
- }
- ncmd = xmalloc(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1);
- STRCPY(ncmd, p_sxq);
- STRCAT(ncmd, ecmd);
- /* When 'shellxquote' is ( append ).
- * When 'shellxquote' is "( append )". */
- STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
- : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
- : p_sxq);
- retval = os_call_shell(ncmd, opts, extra_shell_arg);
- xfree(ncmd);
-
- if (ecmd != cmd)
- xfree(ecmd);
- }
- }
-
- set_vim_var_nr(VV_SHELL_ERROR, (varnumber_T) retval);
- if (do_profiling == PROF_YES) {
- prof_child_exit(&wait_time);
- }
-
- return retval;
-}
-
-/*
- * VISUAL, SELECTMODE and OP_PENDING State are never set, they are equal to
- * NORMAL State with a condition. This function returns the real State.
- */
-int get_real_state(void)
-{
- if (State & NORMAL) {
- if (VIsual_active) {
- if (VIsual_select)
- return SELECTMODE;
- return VISUAL;
- } else if (finish_op)
- return OP_PENDING;
- }
- return State;
-}
-
-/*
- * Change to a file's directory.
- * Caller must call shorten_fnames()!
- * Return OK or FAIL.
- */
-int vim_chdirfile(char_u *fname)
-{
- char_u dir[MAXPATHL];
-
- STRLCPY(dir, fname, MAXPATHL);
- *path_tail_with_sep(dir) = NUL;
- return os_chdir((char *)dir) == 0 ? OK : FAIL;
-}
-
-/*
- * Change directory to "new_dir". Search 'cdpath' for relative directory names.
- */
-int vim_chdir(char_u *new_dir)
-{
- char_u *dir_name;
- int r;
-
- dir_name = find_directory_in_path(new_dir, STRLEN(new_dir),
- FNAME_MESS, curbuf->b_ffname);
- if (dir_name == NULL)
- return -1;
- r = os_chdir((char *)dir_name);
- xfree(dir_name);
- return r;
-}
-
-/*
- * Read 2 bytes from "fd" and turn them into an int, MSB first.
- */
-int get2c(FILE *fd)
-{
- int n;
-
- n = getc(fd);
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/*
- * Read 3 bytes from "fd" and turn them into an int, MSB first.
- */
-int get3c(FILE *fd)
-{
- int n;
-
- n = getc(fd);
- n = (n << 8) + getc(fd);
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/*
- * Read 4 bytes from "fd" and turn them into an int, MSB first.
- */
-int get4c(FILE *fd)
-{
- /* Use unsigned rather than int otherwise result is undefined
- * when left-shift sets the MSB. */
- unsigned n;
-
- n = (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- n = (n << 8) + (unsigned)getc(fd);
- return (int)n;
-}
-
-/*
- * Read 8 bytes from "fd" and turn them into a time_t, MSB first.
- */
-time_t get8ctime(FILE *fd)
-{
- time_t n = 0;
- int i;
-
- for (i = 0; i < 8; ++i)
- n = (n << 8) + getc(fd);
- return n;
-}
-
-/// Reads a string of length "cnt" from "fd" into allocated memory.
-/// @return pointer to the string or NULL when unable to read that many bytes.
-char *read_string(FILE *fd, size_t cnt)
-{
- uint8_t *str = xmallocz(cnt);
- for (size_t i = 0; i < cnt; i++) {
- int c = getc(fd);
- if (c == EOF) {
- xfree(str);
- return NULL;
- }
- str[i] = (uint8_t)c;
- }
- return (char *)str;
-}
-
-/// Writes a number to file "fd", most significant bit first, in "len" bytes.
-/// @returns false in case of an error.
-bool put_bytes(FILE *fd, uintmax_t number, size_t len)
-{
- assert(len > 0);
- for (size_t i = len - 1; i < len; i--) {
- if (putc((int)(number >> (i * 8)), fd) == EOF) {
- return false;
- }
- }
- return true;
-}
-
-/// Writes time_t to file "fd" in 8 bytes.
-/// @returns FAIL when the write failed.
-int put_time(FILE *fd, time_t time_)
-{
- uint8_t buf[8];
- time_to_bytes(time_, buf);
- return fwrite(buf, sizeof(uint8_t), ARRAY_SIZE(buf), fd) == 1 ? OK : FAIL;
-}
-
-/// Writes time_t to "buf[8]".
-void time_to_bytes(time_t time_, uint8_t buf[8])
-{
- // time_t can be up to 8 bytes in size, more than uintmax_t in 32 bits
- // systems, thus we can't use put_bytes() here.
- for (size_t i = 7, bufi = 0; bufi < 8; i--, bufi++) {
- buf[bufi] = (uint8_t)((uint64_t)time_ >> (i * 8));
- }
-}
diff --git a/src/nvim/misc2.h b/src/nvim/misc2.h
deleted file mode 100644
index 28b5b775d2..0000000000
--- a/src/nvim/misc2.h
+++ /dev/null
@@ -1,12 +0,0 @@
-#ifndef NVIM_MISC2_H
-#define NVIM_MISC2_H
-
-#include "nvim/os/shell.h"
-
-#define READ_STRING(x, y) (char_u *)read_string((x), (size_t)(y))
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "misc2.h.generated.h"
-#endif
-
-#endif // NVIM_MISC2_H
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index 2f499e477c..2ebe199f47 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -4,8 +4,10 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/window.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/screen.h"
+#include "nvim/syntax.h"
#include "nvim/ui.h"
#include "nvim/os_unix.h"
#include "nvim/fold.h"
@@ -303,6 +305,10 @@ retnomove:
mouse_past_bottom = true;
}
+ if (!(flags & MOUSE_RELEASED) && which_button == MOUSE_LEFT) {
+ col = mouse_adjust_click(curwin, row, col);
+ }
+
// Start Visual mode before coladvance(), for when 'sel' != "old"
if ((flags & MOUSE_MAY_VIS) && !VIsual_active) {
check_visual_highlight();
@@ -597,3 +603,74 @@ bool mouse_scroll_horiz(int dir)
return leftcol_changed();
}
+
+// Adjust the clicked column position if there are concealed characters
+// before the current column. But only when it's absolutely necessary.
+static int mouse_adjust_click(win_T *wp, int row, int col)
+{
+ if (!(wp->w_p_cole > 0 && curbuf->b_p_smc > 0
+ && wp->w_leftcol < curbuf->b_p_smc && conceal_cursor_line(wp))) {
+ return col;
+ }
+
+ int end = (colnr_T)STRLEN(ml_get(wp->w_cursor.lnum));
+ int vend = getviscol2(end, 0);
+
+ if (col >= vend) {
+ return col;
+ }
+
+ int i = wp->w_leftcol;
+
+ if (row > 0) {
+ i += row * (wp->w_width - win_col_off(wp) - win_col_off2(wp)
+ - wp->w_leftcol) + wp->w_skipcol;
+ }
+
+ int start_col = i;
+ int matchid;
+ int last_matchid;
+ int bcol = end - (vend - col);
+
+ while (i < bcol) {
+ matchid = syn_get_concealed_id(wp, wp->w_cursor.lnum, i);
+
+ if (matchid != 0) {
+ if (wp->w_p_cole == 3) {
+ bcol++;
+ } else {
+ if (row > 0 && i == start_col) {
+ // Check if the current concealed character is actually part of
+ // the previous wrapped row's conceal group.
+ last_matchid = syn_get_concealed_id(wp, wp->w_cursor.lnum,
+ i - 1);
+ if (last_matchid == matchid) {
+ bcol++;
+ }
+ } else if (wp->w_p_cole == 1
+ || (wp->w_p_cole == 2
+ && (lcs_conceal != NUL
+ || syn_get_sub_char() != NUL))) {
+ // At least one placeholder character will be displayed.
+ bcol--;
+ }
+
+ last_matchid = matchid;
+
+ // Adjust for concealed text that spans more than one character.
+ do {
+ i++;
+ bcol++;
+ matchid = syn_get_concealed_id(wp, wp->w_cursor.lnum, i);
+ } while (last_matchid == matchid);
+
+ continue;
+ }
+ }
+
+ i++;
+ }
+
+ return getviscol2(bcol, 0);
+}
+
diff --git a/src/nvim/move.c b/src/nvim/move.c
index b129c5cb7a..bb6c032db1 100644
--- a/src/nvim/move.c
+++ b/src/nvim/move.c
@@ -24,7 +24,7 @@
#include "nvim/mbyte.h"
#include "nvim/memline.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
+#include "nvim/option.h"
#include "nvim/popupmnu.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
@@ -670,8 +670,7 @@ int win_col_off(win_T *wp)
return ((wp->w_p_nu || wp->w_p_rnu) ? number_width(wp) + 1 : 0)
+ (cmdwin_type == 0 || wp != curwin ? 0 : 1)
+ (int)wp->w_p_fdc
- + (wp->w_buffer->b_signlist != NULL ? 2 : 0)
- ;
+ + (signcolumn_on(wp) ? 2 : 0);
}
int curwin_col_off(void)
diff --git a/src/nvim/msgpack_rpc/channel.c b/src/nvim/msgpack_rpc/channel.c
index 34ff7c6374..98636263b9 100644
--- a/src/nvim/msgpack_rpc/channel.c
+++ b/src/nvim/msgpack_rpc/channel.c
@@ -7,8 +7,8 @@
#include "nvim/api/private/helpers.h"
#include "nvim/api/vim.h"
+#include "nvim/api/ui.h"
#include "nvim/msgpack_rpc/channel.h"
-#include "nvim/msgpack_rpc/remote_ui.h"
#include "nvim/event/loop.h"
#include "nvim/event/libuv_process.h"
#include "nvim/event/rstream.h"
@@ -16,8 +16,10 @@
#include "nvim/event/socket.h"
#include "nvim/msgpack_rpc/helpers.h"
#include "nvim/vim.h"
+#include "nvim/main.h"
#include "nvim/ascii.h"
#include "nvim/memory.h"
+#include "nvim/eval.h"
#include "nvim/os_unix.h"
#include "nvim/message.h"
#include "nvim/map.h"
@@ -54,12 +56,7 @@ typedef struct {
msgpack_unpacker *unpacker;
union {
Stream stream;
- struct {
- LibuvProcess uvproc;
- Stream in;
- Stream out;
- Stream err;
- } process;
+ Process *proc;
struct {
Stream in;
Stream out;
@@ -68,7 +65,7 @@ typedef struct {
uint64_t next_request_id;
kvec_t(ChannelCallFrame *) call_stack;
kvec_t(WBuffer *) delayed_notifications;
- Queue *events;
+ MultiQueue *events;
} Channel;
typedef struct {
@@ -78,7 +75,6 @@ typedef struct {
uint64_t request_id;
} RequestEvent;
-static uint64_t next_id = 1;
static PMap(uint64_t) *channels = NULL;
static PMap(cstr_t) *event_strings = NULL;
static msgpack_sbuffer out_buffer;
@@ -111,33 +107,20 @@ void channel_teardown(void)
}
/// Creates an API channel by starting a process and connecting to its
-/// stdin/stdout. stderr is forwarded to the editor error stream.
+/// stdin/stdout. stderr is handled by the job infrastructure.
///
/// @param argv The argument vector for the process. [consumed]
/// @return The channel id (> 0), on success.
/// 0, on error.
-uint64_t channel_from_process(char **argv)
-{
- Channel *channel = register_channel(kChannelTypeProc);
- channel->data.process.uvproc = libuv_process_init(&loop, channel);
- Process *proc = &channel->data.process.uvproc.process;
- proc->argv = argv;
- proc->in = &channel->data.process.in;
- proc->out = &channel->data.process.out;
- proc->err = &channel->data.process.err;
- proc->cb = process_exit;
- if (!process_spawn(proc)) {
- loop_poll_events(&loop, 0);
- decref(channel);
- return 0;
- }
-
+uint64_t channel_from_process(Process *proc, uint64_t id)
+{
+ Channel *channel = register_channel(kChannelTypeProc, id, proc->events);
incref(channel); // process channels are only closed by the exit_cb
+ channel->data.proc = proc;
+
wstream_init(proc->in, 0);
rstream_init(proc->out, 0);
- rstream_start(proc->out, parse_msgpack);
- rstream_init(proc->err, 0);
- rstream_start(proc->err, forward_stderr);
+ rstream_start(proc->out, parse_msgpack, channel);
return channel->id;
}
@@ -147,14 +130,14 @@ uint64_t channel_from_process(char **argv)
/// @param watcher The SocketWatcher ready to accept the connection
void channel_from_connection(SocketWatcher *watcher)
{
- Channel *channel = register_channel(kChannelTypeSocket);
- socket_watcher_accept(watcher, &channel->data.stream, channel);
+ Channel *channel = register_channel(kChannelTypeSocket, 0, NULL);
+ socket_watcher_accept(watcher, &channel->data.stream);
incref(channel); // close channel only after the stream is closed
channel->data.stream.internal_close_cb = close_cb;
channel->data.stream.internal_data = channel;
wstream_init(&channel->data.stream, 0);
rstream_init(&channel->data.stream, CHANNEL_BUFFER_SIZE);
- rstream_start(&channel->data.stream, parse_msgpack);
+ rstream_start(&channel->data.stream, parse_msgpack, channel);
}
/// Sends event/arguments to channel
@@ -179,7 +162,7 @@ bool channel_send_event(uint64_t id, char *name, Array args)
// Pending request, queue the notification for later sending.
String method = cstr_as_string(name);
WBuffer *buffer = serialize_request(id, 0, method, args, &out_buffer, 1);
- kv_push(WBuffer *, channel->delayed_notifications, buffer);
+ kv_push(channel->delayed_notifications, buffer);
} else {
send_event(channel, name, args);
}
@@ -217,10 +200,10 @@ Object channel_send_call(uint64_t id,
send_request(channel, request_id, method_name, args);
// Push the frame
- ChannelCallFrame frame = {request_id, false, false, NIL};
- kv_push(ChannelCallFrame *, channel->call_stack, &frame);
+ ChannelCallFrame frame = { request_id, false, false, NIL };
+ kv_push(channel->call_stack, &frame);
channel->pending_requests++;
- LOOP_PROCESS_EVENTS_UNTIL(&loop, channel->events, -1, frame.returned);
+ LOOP_PROCESS_EVENTS_UNTIL(&main_loop, channel->events, -1, frame.returned);
(void)kv_pop(channel->call_stack);
channel->pending_requests--;
@@ -313,30 +296,21 @@ bool channel_close(uint64_t id)
/// Neovim
void channel_from_stdio(void)
{
- Channel *channel = register_channel(kChannelTypeStdio);
+ Channel *channel = register_channel(kChannelTypeStdio, 0, NULL);
incref(channel); // stdio channels are only closed on exit
// read stream
- rstream_init_fd(&loop, &channel->data.std.in, 0, CHANNEL_BUFFER_SIZE,
- channel);
- rstream_start(&channel->data.std.in, parse_msgpack);
+ rstream_init_fd(&main_loop, &channel->data.std.in, 0, CHANNEL_BUFFER_SIZE);
+ rstream_start(&channel->data.std.in, parse_msgpack, channel);
// write stream
- wstream_init_fd(&loop, &channel->data.std.out, 1, 0, NULL);
+ wstream_init_fd(&main_loop, &channel->data.std.out, 1, 0);
}
-static void forward_stderr(Stream *stream, RBuffer *rbuf, size_t count,
- void *data, bool eof)
+void channel_process_exit(uint64_t id, int status)
{
- while (rbuffer_size(rbuf)) {
- char buf[256];
- size_t read = rbuffer_read(rbuf, buf, sizeof(buf) - 1);
- buf[read] = NUL;
- ELOG("Channel %" PRIu64 " stderr: %s", ((Channel *)data)->id, buf);
- }
-}
+ Channel *channel = pmap_get(uint64_t)(channels, id);
-static void process_exit(Process *proc, int status, void *data)
-{
- decref(data);
+ channel->closed = true;
+ decref(channel);
}
static void parse_msgpack(Stream *stream, RBuffer *rbuf, size_t c, void *data,
@@ -466,7 +440,7 @@ static void handle_request(Channel *channel, msgpack_object *request)
if (handler.async) {
on_request_event((void **)&event_data);
} else {
- queue_put(channel->events, on_request_event, 1, event_data);
+ multiqueue_put(channel->events, on_request_event, 1, event_data);
}
}
@@ -478,7 +452,7 @@ static void on_request_event(void **argv)
Array args = e->args;
uint64_t request_id = e->request_id;
Error error = ERROR_INIT;
- Object result = handler.fn(channel->id, request_id, args, &error);
+ Object result = handler.fn(channel->id, args, &error);
if (request_id != NO_RESPONSE) {
// send the response
msgpack_packer response;
@@ -491,8 +465,7 @@ static void on_request_event(void **argv)
} else {
api_free_object(result);
}
- // All arguments were freed already, but we still need to free the array
- xfree(args.items);
+ api_free_array(args);
decref(channel);
xfree(e);
}
@@ -511,7 +484,7 @@ static bool channel_write(Channel *channel, WBuffer *buffer)
success = wstream_write(&channel->data.stream, buffer);
break;
case kChannelTypeProc:
- success = wstream_write(&channel->data.process.in, buffer);
+ success = wstream_write(channel->data.proc->in, buffer);
break;
case kChannelTypeStdio:
success = wstream_write(&channel->data.std.out, buffer);
@@ -574,13 +547,12 @@ static void send_event(Channel *channel,
static void broadcast_event(char *name, Array args)
{
- kvec_t(Channel *) subscribed;
- kv_init(subscribed);
+ kvec_t(Channel *) subscribed = KV_INITIAL_VALUE;
Channel *channel;
map_foreach_value(channels, channel, {
if (pmap_has(cstr_t)(channel->subscribed_events, name)) {
- kv_push(Channel *, subscribed, channel);
+ kv_push(subscribed, channel);
}
});
@@ -600,7 +572,7 @@ static void broadcast_event(char *name, Array args)
for (size_t i = 0; i < kv_size(subscribed); i++) {
Channel *channel = kv_A(subscribed, i);
if (channel->pending_requests) {
- kv_push(WBuffer *, channel->delayed_notifications, buffer);
+ kv_push(channel->delayed_notifications, buffer);
} else {
channel_write(channel, buffer);
}
@@ -637,17 +609,18 @@ static void close_channel(Channel *channel)
switch (channel->type) {
case kChannelTypeSocket:
- stream_close(&channel->data.stream, NULL);
+ stream_close(&channel->data.stream, NULL, NULL);
break;
case kChannelTypeProc:
- if (!channel->data.process.uvproc.process.closed) {
- process_stop(&channel->data.process.uvproc.process);
- }
+ // Only close the rpc channel part,
+ // there could be an error message on the stderr stream
+ process_close_in(channel->data.proc);
+ process_close_out(channel->data.proc);
break;
case kChannelTypeStdio:
- stream_close(&channel->data.std.in, NULL);
- stream_close(&channel->data.std.out, NULL);
- queue_put(loop.fast_events, exit_event, 1, channel);
+ stream_close(&channel->data.std.in, NULL, NULL);
+ stream_close(&channel->data.std.out, NULL, NULL);
+ multiqueue_put(main_loop.fast_events, exit_event, 1, channel);
return;
default:
abort();
@@ -680,7 +653,9 @@ static void free_channel(Channel *channel)
pmap_free(cstr_t)(channel->subscribed_events);
kv_destroy(channel->call_stack);
kv_destroy(channel->delayed_notifications);
- queue_free(channel->events);
+ if (channel->type != kChannelTypeProc) {
+ multiqueue_free(channel->events);
+ }
xfree(channel);
}
@@ -689,15 +664,16 @@ static void close_cb(Stream *stream, void *data)
decref(data);
}
-static Channel *register_channel(ChannelType type)
+static Channel *register_channel(ChannelType type, uint64_t id,
+ MultiQueue *events)
{
Channel *rv = xmalloc(sizeof(Channel));
- rv->events = queue_new_child(loop.events);
+ rv->events = events ? events : multiqueue_new_child(main_loop.events);
rv->type = type;
rv->refcount = 1;
rv->closed = false;
rv->unpacker = msgpack_unpacker_new(MSGPACK_UNPACKER_INIT_BUFFER_SIZE);
- rv->id = next_id++;
+ rv->id = id > 0 ? id : next_chan_id++;
rv->pending_requests = 0;
rv->subscribed_events = pmap_new(cstr_t)();
rv->next_request_id = 1;
@@ -816,20 +792,55 @@ static void decref(Channel *channel)
#define REQ "[request] "
#define RES "[response] "
#define NOT "[notification] "
+#define ERR "[error] "
+
+// Cannot define array with negative offsets, so this one is needed to be added
+// to MSGPACK_UNPACK_\* values.
+#define MUR_OFF 2
+
+static const char *const msgpack_error_messages[] = {
+ [MSGPACK_UNPACK_EXTRA_BYTES + MUR_OFF] = "extra bytes found",
+ [MSGPACK_UNPACK_CONTINUE + MUR_OFF] = "incomplete string",
+ [MSGPACK_UNPACK_PARSE_ERROR + MUR_OFF] = "parse error",
+ [MSGPACK_UNPACK_NOMEM_ERROR + MUR_OFF] = "not enough memory",
+};
static void log_server_msg(uint64_t channel_id,
msgpack_sbuffer *packed)
{
msgpack_unpacked unpacked;
msgpack_unpacked_init(&unpacked);
- msgpack_unpack_next(&unpacked, packed->data, packed->size, NULL);
- uint64_t type = unpacked.data.via.array.ptr[0].via.u64;
DLOGN("[msgpack-rpc] nvim -> client(%" PRIu64 ") ", channel_id);
- log_lock();
- FILE *f = open_log_file();
- fprintf(f, type ? (type == 1 ? RES : NOT) : REQ);
- log_msg_close(f, unpacked.data);
- msgpack_unpacked_destroy(&unpacked);
+ const msgpack_unpack_return result =
+ msgpack_unpack_next(&unpacked, packed->data, packed->size, NULL);
+ switch (result) {
+ case MSGPACK_UNPACK_SUCCESS: {
+ uint64_t type = unpacked.data.via.array.ptr[0].via.u64;
+ log_lock();
+ FILE *f = open_log_file();
+ fprintf(f, type ? (type == 1 ? RES : NOT) : REQ);
+ log_msg_close(f, unpacked.data);
+ msgpack_unpacked_destroy(&unpacked);
+ break;
+ }
+ case MSGPACK_UNPACK_EXTRA_BYTES:
+ case MSGPACK_UNPACK_CONTINUE:
+ case MSGPACK_UNPACK_PARSE_ERROR:
+ case MSGPACK_UNPACK_NOMEM_ERROR: {
+ log_lock();
+ FILE *f = open_log_file();
+ fprintf(f, ERR);
+ log_msg_close(f, (msgpack_object) {
+ .type = MSGPACK_OBJECT_STR,
+ .via.str = {
+ .ptr = (char *)msgpack_error_messages[result + MUR_OFF],
+ .size = (uint32_t)strlen(
+ msgpack_error_messages[result + MUR_OFF]),
+ },
+ });
+ break;
+ }
+ }
}
static void log_client_msg(uint64_t channel_id,
diff --git a/src/nvim/msgpack_rpc/channel.h b/src/nvim/msgpack_rpc/channel.h
index 104547a7b8..0d92976d02 100644
--- a/src/nvim/msgpack_rpc/channel.h
+++ b/src/nvim/msgpack_rpc/channel.h
@@ -6,6 +6,7 @@
#include "nvim/api/private/defs.h"
#include "nvim/event/socket.h"
+#include "nvim/event/process.h"
#include "nvim/vim.h"
#define METHOD_MAXLEN 512
diff --git a/src/nvim/msgpack_rpc/defs.h b/src/nvim/msgpack_rpc/defs.h
deleted file mode 100644
index 5611636d4f..0000000000
--- a/src/nvim/msgpack_rpc/defs.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef NVIM_MSGPACK_RPC_DEFS_H
-#define NVIM_MSGPACK_RPC_DEFS_H
-
-
-/// The rpc_method_handlers table, used in msgpack_rpc_dispatch(), stores
-/// functions of this type.
-typedef struct {
- Object (*fn)(uint64_t channel_id,
- uint64_t request_id,
- Array args,
- Error *error);
- bool async; // function is always safe to run immediately instead of being
- // put in a request queue for handling when nvim waits for input.
-} MsgpackRpcRequestHandler;
-
-/// Initializes the msgpack-rpc method table
-void msgpack_rpc_init_method_table(void);
-
-// Add a handler to the method table
-void msgpack_rpc_add_method_handler(String method,
- MsgpackRpcRequestHandler handler);
-
-void msgpack_rpc_init_function_metadata(Dictionary *metadata);
-
-MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name,
- size_t name_len)
- FUNC_ATTR_NONNULL_ARG(1);
-#endif // NVIM_MSGPACK_RPC_DEFS_H
diff --git a/src/nvim/msgpack_rpc/helpers.c b/src/nvim/msgpack_rpc/helpers.c
index 0049ae6b95..5137b375f0 100644
--- a/src/nvim/msgpack_rpc/helpers.c
+++ b/src/nvim/msgpack_rpc/helpers.c
@@ -4,12 +4,14 @@
#include <msgpack.h>
+#include "nvim/api/private/dispatch.h"
#include "nvim/api/private/helpers.h"
#include "nvim/msgpack_rpc/helpers.h"
-#include "nvim/msgpack_rpc/defs.h"
+#include "nvim/lib/kvec.h"
#include "nvim/vim.h"
#include "nvim/log.h"
#include "nvim/memory.h"
+#include "nvim/assert.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "msgpack_rpc/helpers.c.generated.h"
@@ -18,39 +20,40 @@
static msgpack_zone zone;
static msgpack_sbuffer sbuffer;
-#define HANDLE_TYPE_CONVERSION_IMPL(t, lt) \
- bool msgpack_rpc_to_##lt(msgpack_object *obj, t *arg) \
- FUNC_ATTR_NONNULL_ALL \
- { \
- if (obj->type != MSGPACK_OBJECT_EXT \
- || obj->via.ext.type != kObjectType##t) { \
- return false; \
- } \
- \
- msgpack_object data; \
- msgpack_unpack_return ret = msgpack_unpack(obj->via.ext.ptr, \
- obj->via.ext.size, \
- NULL, \
- &zone, \
- &data); \
- \
- if (ret != MSGPACK_UNPACK_SUCCESS) { \
- return false; \
- } \
- \
- *arg = data.via.u64; \
- return true; \
- } \
- \
- void msgpack_rpc_from_##lt(t o, msgpack_packer *res) \
- FUNC_ATTR_NONNULL_ARG(2) \
- { \
- msgpack_packer pac; \
- msgpack_packer_init(&pac, &sbuffer, msgpack_sbuffer_write); \
- msgpack_pack_uint64(&pac, o); \
- msgpack_pack_ext(res, sbuffer.size, kObjectType##t); \
- msgpack_pack_ext_body(res, sbuffer.data, sbuffer.size); \
- msgpack_sbuffer_clear(&sbuffer); \
+#define HANDLE_TYPE_CONVERSION_IMPL(t, lt) \
+ bool msgpack_rpc_to_##lt(const msgpack_object *const obj, \
+ Integer *const arg) \
+ FUNC_ATTR_NONNULL_ALL \
+ { \
+ if (obj->type != MSGPACK_OBJECT_EXT \
+ || obj->via.ext.type != kObjectType##t) { \
+ return false; \
+ } \
+ \
+ msgpack_object data; \
+ msgpack_unpack_return ret = msgpack_unpack(obj->via.ext.ptr, \
+ obj->via.ext.size, \
+ NULL, \
+ &zone, \
+ &data); \
+ \
+ if (ret != MSGPACK_UNPACK_SUCCESS) { \
+ return false; \
+ } \
+ \
+ *arg = (handle_T)data.via.i64; \
+ return true; \
+ } \
+ \
+ void msgpack_rpc_from_##lt(Integer o, msgpack_packer *res) \
+ FUNC_ATTR_NONNULL_ARG(2) \
+ { \
+ msgpack_packer pac; \
+ msgpack_packer_init(&pac, &sbuffer, msgpack_sbuffer_write); \
+ msgpack_pack_int64(&pac, (handle_T)o); \
+ msgpack_pack_ext(res, sbuffer.size, kObjectType##t); \
+ msgpack_pack_ext_body(res, sbuffer.data, sbuffer.size); \
+ msgpack_sbuffer_clear(&sbuffer); \
}
void msgpack_rpc_helpers_init(void)
@@ -63,34 +66,182 @@ HANDLE_TYPE_CONVERSION_IMPL(Buffer, buffer)
HANDLE_TYPE_CONVERSION_IMPL(Window, window)
HANDLE_TYPE_CONVERSION_IMPL(Tabpage, tabpage)
-bool msgpack_rpc_to_boolean(msgpack_object *obj, Boolean *arg)
+typedef struct {
+ const msgpack_object *mobj;
+ Object *aobj;
+ bool container;
+ size_t idx;
+} MPToAPIObjectStackItem;
+
+/// Convert type used by msgpack parser to Neovim own API type
+///
+/// @param[in] obj Msgpack value to convert.
+/// @param[out] arg Location where result of conversion will be saved.
+///
+/// @return true in case of success, false otherwise.
+bool msgpack_rpc_to_object(const msgpack_object *const obj, Object *const arg)
FUNC_ATTR_NONNULL_ALL
{
- *arg = obj->via.boolean;
- return obj->type == MSGPACK_OBJECT_BOOLEAN;
-}
-
-bool msgpack_rpc_to_integer(msgpack_object *obj, Integer *arg)
- FUNC_ATTR_NONNULL_ALL
-{
- if (obj->type == MSGPACK_OBJECT_POSITIVE_INTEGER
- && obj->via.u64 <= INT64_MAX) {
- *arg = (int64_t)obj->via.u64;
- return true;
+ bool ret = true;
+ kvec_t(MPToAPIObjectStackItem) stack = KV_INITIAL_VALUE;
+ kv_push(stack, ((MPToAPIObjectStackItem) { obj, arg, false, 0 }));
+ while (ret && kv_size(stack)) {
+ MPToAPIObjectStackItem cur = kv_last(stack);
+ if (!cur.container) {
+ *cur.aobj = NIL;
+ }
+ switch (cur.mobj->type) {
+ case MSGPACK_OBJECT_NIL: {
+ break;
+ }
+ case MSGPACK_OBJECT_BOOLEAN: {
+ *cur.aobj = BOOLEAN_OBJ(cur.mobj->via.boolean);
+ break;
+ }
+ case MSGPACK_OBJECT_NEGATIVE_INTEGER: {
+ STATIC_ASSERT(sizeof(Integer) == sizeof(cur.mobj->via.i64),
+ "Msgpack integer size does not match API integer");
+ *cur.aobj = INTEGER_OBJ(cur.mobj->via.i64);
+ break;
+ }
+ case MSGPACK_OBJECT_POSITIVE_INTEGER: {
+ STATIC_ASSERT(sizeof(Integer) == sizeof(cur.mobj->via.u64),
+ "Msgpack integer size does not match API integer");
+ if (cur.mobj->via.u64 > API_INTEGER_MAX) {
+ ret = false;
+ } else {
+ *cur.aobj = INTEGER_OBJ((Integer)cur.mobj->via.u64);
+ }
+ break;
+ }
+ case MSGPACK_OBJECT_FLOAT: {
+ STATIC_ASSERT(sizeof(Float) == sizeof(cur.mobj->via.f64),
+ "Msgpack floating-point size does not match API integer");
+ *cur.aobj = FLOATING_OBJ(cur.mobj->via.f64);
+ break;
+ }
+#define STR_CASE(type, attr, obj, dest, conv) \
+ case type: { \
+ dest = conv(((String) { \
+ .size = obj->via.attr.size, \
+ .data = (obj->via.attr.ptr == NULL || obj->via.attr.size == 0 \
+ ? xmemdupz("", 0) \
+ : xmemdupz(obj->via.attr.ptr, obj->via.attr.size)), \
+ })); \
+ break; \
+ }
+ STR_CASE(MSGPACK_OBJECT_STR, str, cur.mobj, *cur.aobj, STRING_OBJ)
+ STR_CASE(MSGPACK_OBJECT_BIN, bin, cur.mobj, *cur.aobj, STRING_OBJ)
+ case MSGPACK_OBJECT_ARRAY: {
+ const size_t size = cur.mobj->via.array.size;
+ if (cur.container) {
+ if (cur.idx >= size) {
+ (void)kv_pop(stack);
+ } else {
+ const size_t idx = cur.idx;
+ cur.idx++;
+ kv_last(stack) = cur;
+ kv_push(stack, ((MPToAPIObjectStackItem) {
+ .mobj = &cur.mobj->via.array.ptr[idx],
+ .aobj = &cur.aobj->data.array.items[idx],
+ .container = false,
+ }));
+ }
+ } else {
+ *cur.aobj = ARRAY_OBJ(((Array) {
+ .size = size,
+ .capacity = size,
+ .items = (size > 0
+ ? xcalloc(size, sizeof(*cur.aobj->data.array.items))
+ : NULL),
+ }));
+ cur.container = true;
+ kv_last(stack) = cur;
+ }
+ break;
+ }
+ case MSGPACK_OBJECT_MAP: {
+ const size_t size = cur.mobj->via.map.size;
+ if (cur.container) {
+ if (cur.idx >= size) {
+ (void)kv_pop(stack);
+ } else {
+ const size_t idx = cur.idx;
+ cur.idx++;
+ kv_last(stack) = cur;
+ const msgpack_object *const key = &cur.mobj->via.map.ptr[idx].key;
+ switch (key->type) {
+#define ID(x) x
+ STR_CASE(MSGPACK_OBJECT_STR, str, key,
+ cur.aobj->data.dictionary.items[idx].key, ID)
+ STR_CASE(MSGPACK_OBJECT_BIN, bin, key,
+ cur.aobj->data.dictionary.items[idx].key, ID)
+#undef ID
+ case MSGPACK_OBJECT_NIL:
+ case MSGPACK_OBJECT_BOOLEAN:
+ case MSGPACK_OBJECT_POSITIVE_INTEGER:
+ case MSGPACK_OBJECT_NEGATIVE_INTEGER:
+ case MSGPACK_OBJECT_FLOAT:
+ case MSGPACK_OBJECT_EXT:
+ case MSGPACK_OBJECT_MAP:
+ case MSGPACK_OBJECT_ARRAY: {
+ ret = false;
+ break;
+ }
+ }
+ if (ret) {
+ kv_push(stack, ((MPToAPIObjectStackItem) {
+ .mobj = &cur.mobj->via.map.ptr[idx].val,
+ .aobj = &cur.aobj->data.dictionary.items[idx].value,
+ .container = false,
+ }));
+ }
+ }
+ } else {
+ *cur.aobj = DICTIONARY_OBJ(((Dictionary) {
+ .size = size,
+ .capacity = size,
+ .items = (size > 0
+ ? xcalloc(size, sizeof(*cur.aobj->data.dictionary.items))
+ : NULL),
+ }));
+ cur.container = true;
+ kv_last(stack) = cur;
+ }
+ break;
+ }
+ case MSGPACK_OBJECT_EXT: {
+ switch (cur.mobj->via.ext.type) {
+ case kObjectTypeBuffer: {
+ cur.aobj->type = kObjectTypeBuffer;
+ ret = msgpack_rpc_to_buffer(cur.mobj, &cur.aobj->data.integer);
+ break;
+ }
+ case kObjectTypeWindow: {
+ cur.aobj->type = kObjectTypeWindow;
+ ret = msgpack_rpc_to_window(cur.mobj, &cur.aobj->data.integer);
+ break;
+ }
+ case kObjectTypeTabpage: {
+ cur.aobj->type = kObjectTypeTabpage;
+ ret = msgpack_rpc_to_tabpage(cur.mobj, &cur.aobj->data.integer);
+ break;
+ }
+ }
+ break;
+ }
+#undef STR_CASE
+ }
+ if (!cur.container) {
+ (void)kv_pop(stack);
+ }
}
-
- *arg = obj->via.i64;
- return obj->type == MSGPACK_OBJECT_NEGATIVE_INTEGER;
-}
-
-bool msgpack_rpc_to_float(msgpack_object *obj, Float *arg)
- FUNC_ATTR_NONNULL_ALL
-{
- *arg = obj->via.f64;
- return obj->type == MSGPACK_OBJECT_FLOAT;
+ kv_destroy(stack);
+ return ret;
}
-bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)
+static bool msgpack_rpc_to_string(const msgpack_object *const obj,
+ String *const arg)
FUNC_ATTR_NONNULL_ALL
{
if (obj->type == MSGPACK_OBJECT_BIN || obj->type == MSGPACK_OBJECT_STR) {
@@ -103,58 +254,7 @@ bool msgpack_rpc_to_string(msgpack_object *obj, String *arg)
return false;
}
-bool msgpack_rpc_to_object(msgpack_object *obj, Object *arg)
- FUNC_ATTR_NONNULL_ALL
-{
- switch (obj->type) {
- case MSGPACK_OBJECT_NIL:
- arg->type = kObjectTypeNil;
- return true;
-
- case MSGPACK_OBJECT_BOOLEAN:
- arg->type = kObjectTypeBoolean;
- return msgpack_rpc_to_boolean(obj, &arg->data.boolean);
-
- case MSGPACK_OBJECT_POSITIVE_INTEGER:
- case MSGPACK_OBJECT_NEGATIVE_INTEGER:
- arg->type = kObjectTypeInteger;
- return msgpack_rpc_to_integer(obj, &arg->data.integer);
-
- case MSGPACK_OBJECT_FLOAT:
- arg->type = kObjectTypeFloat;
- return msgpack_rpc_to_float(obj, &arg->data.floating);
-
- case MSGPACK_OBJECT_BIN:
- case MSGPACK_OBJECT_STR:
- arg->type = kObjectTypeString;
- return msgpack_rpc_to_string(obj, &arg->data.string);
-
- case MSGPACK_OBJECT_ARRAY:
- arg->type = kObjectTypeArray;
- return msgpack_rpc_to_array(obj, &arg->data.array);
-
- case MSGPACK_OBJECT_MAP:
- arg->type = kObjectTypeDictionary;
- return msgpack_rpc_to_dictionary(obj, &arg->data.dictionary);
-
- case MSGPACK_OBJECT_EXT:
- switch (obj->via.ext.type) {
- case kObjectTypeBuffer:
- arg->type = kObjectTypeBuffer;
- return msgpack_rpc_to_buffer(obj, &arg->data.buffer);
- case kObjectTypeWindow:
- arg->type = kObjectTypeWindow;
- return msgpack_rpc_to_window(obj, &arg->data.window);
- case kObjectTypeTabpage:
- arg->type = kObjectTypeTabpage;
- return msgpack_rpc_to_tabpage(obj, &arg->data.tabpage);
- }
- default:
- return false;
- }
-}
-
-bool msgpack_rpc_to_array(msgpack_object *obj, Array *arg)
+bool msgpack_rpc_to_array(const msgpack_object *const obj, Array *const arg)
FUNC_ATTR_NONNULL_ALL
{
if (obj->type != MSGPACK_OBJECT_ARRAY) {
@@ -173,7 +273,8 @@ bool msgpack_rpc_to_array(msgpack_object *obj, Array *arg)
return true;
}
-bool msgpack_rpc_to_dictionary(msgpack_object *obj, Dictionary *arg)
+bool msgpack_rpc_to_dictionary(const msgpack_object *const obj,
+ Dictionary *const arg)
FUNC_ATTR_NONNULL_ALL
{
if (obj->type != MSGPACK_OBJECT_MAP) {
@@ -225,53 +326,113 @@ void msgpack_rpc_from_string(String result, msgpack_packer *res)
FUNC_ATTR_NONNULL_ARG(2)
{
msgpack_pack_str(res, result.size);
- msgpack_pack_str_body(res, result.data, result.size);
+ if (result.size > 0) {
+ msgpack_pack_str_body(res, result.data, result.size);
+ }
}
-void msgpack_rpc_from_object(Object result, msgpack_packer *res)
+typedef struct {
+ const Object *aobj;
+ bool container;
+ size_t idx;
+} APIToMPObjectStackItem;
+
+/// Convert type used by Neovim API to msgpack
+///
+/// @param[in] result Object to convert.
+/// @param[out] res Structure that defines where conversion results are saved.
+///
+/// @return true in case of success, false otherwise.
+void msgpack_rpc_from_object(const Object result, msgpack_packer *const res)
FUNC_ATTR_NONNULL_ARG(2)
{
- switch (result.type) {
- case kObjectTypeNil:
- msgpack_pack_nil(res);
- break;
-
- case kObjectTypeBoolean:
- msgpack_rpc_from_boolean(result.data.boolean, res);
- break;
-
- case kObjectTypeInteger:
- msgpack_rpc_from_integer(result.data.integer, res);
- break;
-
- case kObjectTypeFloat:
- msgpack_rpc_from_float(result.data.floating, res);
- break;
-
- case kObjectTypeString:
- msgpack_rpc_from_string(result.data.string, res);
- break;
-
- case kObjectTypeArray:
- msgpack_rpc_from_array(result.data.array, res);
- break;
-
- case kObjectTypeBuffer:
- msgpack_rpc_from_buffer(result.data.buffer, res);
- break;
-
- case kObjectTypeWindow:
- msgpack_rpc_from_window(result.data.window, res);
- break;
-
- case kObjectTypeTabpage:
- msgpack_rpc_from_tabpage(result.data.tabpage, res);
- break;
-
- case kObjectTypeDictionary:
- msgpack_rpc_from_dictionary(result.data.dictionary, res);
- break;
+ kvec_t(APIToMPObjectStackItem) stack = KV_INITIAL_VALUE;
+ kv_push(stack, ((APIToMPObjectStackItem) { &result, false, 0 }));
+ while (kv_size(stack)) {
+ APIToMPObjectStackItem cur = kv_last(stack);
+ switch (cur.aobj->type) {
+ case kObjectTypeNil: {
+ msgpack_pack_nil(res);
+ break;
+ }
+ case kObjectTypeBoolean: {
+ msgpack_rpc_from_boolean(cur.aobj->data.boolean, res);
+ break;
+ }
+ case kObjectTypeInteger: {
+ msgpack_rpc_from_integer(cur.aobj->data.integer, res);
+ break;
+ }
+ case kObjectTypeFloat: {
+ msgpack_rpc_from_float(cur.aobj->data.floating, res);
+ break;
+ }
+ case kObjectTypeString: {
+ msgpack_rpc_from_string(cur.aobj->data.string, res);
+ break;
+ }
+ case kObjectTypeBuffer: {
+ msgpack_rpc_from_buffer(cur.aobj->data.integer, res);
+ break;
+ }
+ case kObjectTypeWindow: {
+ msgpack_rpc_from_window(cur.aobj->data.integer, res);
+ break;
+ }
+ case kObjectTypeTabpage: {
+ msgpack_rpc_from_tabpage(cur.aobj->data.integer, res);
+ break;
+ }
+ case kObjectTypeArray: {
+ const size_t size = cur.aobj->data.array.size;
+ if (cur.container) {
+ if (cur.idx >= size) {
+ (void)kv_pop(stack);
+ } else {
+ const size_t idx = cur.idx;
+ cur.idx++;
+ kv_last(stack) = cur;
+ kv_push(stack, ((APIToMPObjectStackItem) {
+ .aobj = &cur.aobj->data.array.items[idx],
+ .container = false,
+ }));
+ }
+ } else {
+ msgpack_pack_array(res, size);
+ cur.container = true;
+ kv_last(stack) = cur;
+ }
+ break;
+ }
+ case kObjectTypeDictionary: {
+ const size_t size = cur.aobj->data.dictionary.size;
+ if (cur.container) {
+ if (cur.idx >= size) {
+ (void)kv_pop(stack);
+ } else {
+ const size_t idx = cur.idx;
+ cur.idx++;
+ kv_last(stack) = cur;
+ msgpack_rpc_from_string(cur.aobj->data.dictionary.items[idx].key,
+ res);
+ kv_push(stack, ((APIToMPObjectStackItem) {
+ .aobj = &cur.aobj->data.dictionary.items[idx].value,
+ .container = false,
+ }));
+ }
+ } else {
+ msgpack_pack_map(res, size);
+ cur.container = true;
+ kv_last(stack) = cur;
+ }
+ break;
+ }
+ }
+ if (!cur.container) {
+ (void)kv_pop(stack);
+ }
}
+ kv_destroy(stack);
}
void msgpack_rpc_from_array(Array result, msgpack_packer *res)
@@ -297,7 +458,6 @@ void msgpack_rpc_from_dictionary(Dictionary result, msgpack_packer *res)
/// Handler executed when an invalid method name is passed
Object msgpack_rpc_handle_missing_method(uint64_t channel_id,
- uint64_t request_id,
Array args,
Error *error)
{
@@ -308,7 +468,6 @@ Object msgpack_rpc_handle_missing_method(uint64_t channel_id,
/// Handler executed when malformated arguments are passed
Object msgpack_rpc_handle_invalid_arguments(uint64_t channel_id,
- uint64_t request_id,
Array args,
Error *error)
{
diff --git a/src/nvim/msgpack_rpc/remote_ui.h b/src/nvim/msgpack_rpc/remote_ui.h
deleted file mode 100644
index 8af86dc1b8..0000000000
--- a/src/nvim/msgpack_rpc/remote_ui.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef NVIM_MSGPACK_RPC_REMOTE_UI_H
-#define NVIM_MSGPACK_RPC_REMOTE_UI_H
-
-#include "nvim/ui.h"
-
-#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "msgpack_rpc/remote_ui.h.generated.h"
-#endif
-#endif // NVIM_MSGPACK_RPC_REMOTE_UI_H
diff --git a/src/nvim/msgpack_rpc/server.c b/src/nvim/msgpack_rpc/server.c
index 6cc56ba3dd..d7c2926a0f 100644
--- a/src/nvim/msgpack_rpc/server.c
+++ b/src/nvim/msgpack_rpc/server.c
@@ -12,6 +12,7 @@
#include "nvim/eval.h"
#include "nvim/garray.h"
#include "nvim/vim.h"
+#include "nvim/main.h"
#include "nvim/memory.h"
#include "nvim/log.h"
#include "nvim/fileio.h"
@@ -39,6 +40,10 @@ bool server_init(void)
listen_address = server_address_new();
}
+ if (!listen_address) {
+ return false;
+ }
+
bool ok = (server_start(listen_address) == 0);
if (must_free) {
xfree((char *) listen_address);
@@ -108,7 +113,7 @@ int server_start(const char *endpoint)
}
SocketWatcher *watcher = xmalloc(sizeof(SocketWatcher));
- socket_watcher_init(&loop, watcher, endpoint, NULL);
+ socket_watcher_init(&main_loop, watcher, endpoint, NULL);
// Check if a watcher for the endpoint already exists
for (int i = 0; i < watchers.ga_len; i++) {
diff --git a/src/nvim/normal.c b/src/nvim/normal.c
index 382c4943ff..b17b4c584e 100644
--- a/src/nvim/normal.c
+++ b/src/nvim/normal.c
@@ -36,7 +36,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
@@ -460,7 +459,7 @@ void normal_enter(bool cmdwin, bool noexmode)
normal_state_init(&state);
state.cmdwin = cmdwin;
state.noexmode = noexmode;
- state.toplevel = !cmdwin && !noexmode;
+ state.toplevel = (!cmdwin || cmdwin_result == 0) && !noexmode;
state_enter(&state.state);
}
@@ -974,7 +973,7 @@ static int normal_execute(VimState *state, int key)
s->old_col = curwin->w_curswant;
s->c = key;
- LANGMAP_ADJUST(s->c, true);
+ LANGMAP_ADJUST(s->c, get_real_state() != SELECTMODE);
// If a mapping was started in Visual or Select mode, remember the length
// of the mapping. This is used below to not return to Insert mode for as
@@ -1131,6 +1130,7 @@ static int normal_execute(VimState *state, int key)
start_selection();
unshift_special(&s->ca);
s->idx = find_command(s->ca.cmdchar);
+ assert(s->idx >= 0);
} else if ((nv_cmds[s->idx].cmd_flags & NV_SSS)
&& (mod_mask & MOD_MASK_SHIFT)) {
start_selection();
@@ -1361,7 +1361,7 @@ static int normal_check(VimState *state)
// Dict internally somewhere.
// "may_garbage_collect" is reset in vgetc() which is invoked through
// do_exmode() and normal_cmd().
- may_garbage_collect = s->toplevel;
+ may_garbage_collect = !s->cmdwin && !s->noexmode;
// Update w_curswant if w_set_curswant has been set.
// Postponed until here to avoid computing w_virtcol too often.
@@ -1518,10 +1518,7 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)
coladvance(curwin->w_curswant);
}
cap->count0 = redo_VIsual_count;
- if (redo_VIsual_count != 0)
- cap->count1 = redo_VIsual_count;
- else
- cap->count1 = 1;
+ cap->count1 = (cap->count0 == 0 ? 1 : cap->count0);
} else if (VIsual_active) {
if (!gui_yank) {
/* Save the current VIsual area for '< and '> marks, and "gv" */
@@ -1795,10 +1792,11 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank)
if (oap->line_count < 2)
oap->line_count = 2;
if (curwin->w_cursor.lnum + oap->line_count - 1 >
- curbuf->b_ml.ml_line_count)
+ curbuf->b_ml.ml_line_count) {
beep_flush();
- else {
- do_join(oap->line_count, oap->op_type == OP_JOIN, true, true, true);
+ } else {
+ do_join((size_t)oap->line_count, oap->op_type == OP_JOIN,
+ true, true, true);
auto_format(false, true);
}
break;
@@ -2109,6 +2107,20 @@ static void op_function(oparg_T *oap)
}
}
+// Move the current tab to tab in same column as mouse or to end of the
+// tabline if there is no tab there.
+static void move_tab_to_mouse(void)
+{
+ int tabnr = tab_page_click_defs[mouse_col].tabnr;
+ if (tabnr <= 0) {
+ tabpage_move(9999);
+ } else if (tabnr < tabpage_index(curtab)) {
+ tabpage_move(tabnr - 1);
+ } else {
+ tabpage_move(tabnr);
+ }
+}
+
/*
* Do the appropriate action for the current mouse click in the current mode.
* Not used for Command-line mode.
@@ -2345,12 +2357,7 @@ do_mouse (
if (mouse_row == 0 && firstwin->w_winrow > 0) {
if (is_drag) {
if (in_tab_line) {
- if (tab_page_click_defs[mouse_col].type == kStlClickTabClose) {
- tabpage_move(9999);
- } else {
- int tabnr = tab_page_click_defs[mouse_col].tabnr;
- tabpage_move(tabnr < tabpage_index(curtab) ? tabnr - 1 : tabnr);
- }
+ move_tab_to_mouse();
}
return false;
}
@@ -2457,7 +2464,7 @@ do_mouse (
(int) strlen(tab_page_click_defs[mouse_col].func),
&rettv, ARRAY_SIZE(argv), argv,
curwin->w_cursor.lnum, curwin->w_cursor.lnum,
- &doesrange, true, NULL);
+ &doesrange, true, NULL, NULL);
clear_tv(&rettv);
break;
}
@@ -2465,10 +2472,7 @@ do_mouse (
}
return true;
} else if (is_drag && in_tab_line) {
- tabpage_move(tab_page_click_defs[mouse_col].type == kStlClickTabClose
- ? 9999
- : tab_page_click_defs[mouse_col].tabnr - 1);
- in_tab_line = false;
+ move_tab_to_mouse();
return false;
}
@@ -3640,10 +3644,11 @@ nv_gd (
size_t len;
char_u *ptr;
if ((len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0
- || !find_decl(ptr, len, nchar == 'd', thisblock, 0))
+ || !find_decl(ptr, len, nchar == 'd', thisblock, SEARCH_START)) {
clearopbeep(oap);
- else if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP)
+ } else if ((fdo_flags & FDO_SEARCH) && KeyTyped && oap->op_type == OP_NOP) {
foldOpenCursor();
+ }
}
/*
@@ -3659,7 +3664,7 @@ find_decl (
size_t len,
bool locally,
bool thisblock,
- int searchflags /* flags passed to searchit() */
+ int flags_arg // flags passed to searchit()
)
{
char_u *pat;
@@ -3671,6 +3676,7 @@ find_decl (
bool save_p_scs;
bool retval = true;
bool incll;
+ int searchflags = flags_arg;
pat = xmalloc(len + 7);
@@ -3744,10 +3750,12 @@ find_decl (
break;
}
- /* For finding a local variable and the match is before the "{" search
- * to find a later match. For K&R style function declarations this
- * skips the function header without types. */
+ // For finding a local variable and the match is before the "{" search
+ // to find a later match. For K&R style function declarations this
+ // skips the function header without types. Remove SEARCH_START from
+ // flags to avoid getting stuck at one position.
found_pos = curwin->w_cursor;
+ searchflags &= ~SEARCH_START;
}
if (t == false) {
@@ -5918,6 +5926,8 @@ static void nv_replace(cmdarg_T *cap)
curwin->w_set_curswant = true;
set_last_insert(cap->nchar);
}
+
+ foldUpdateAfterInsert();
}
/*
@@ -7666,7 +7676,7 @@ static void nv_join(cmdarg_T *cap)
prep_redo(cap->oap->regname, cap->count0,
NUL, cap->cmdchar, NUL, NUL, cap->nchar);
- do_join(cap->count0, cap->nchar == NUL, true, true, true);
+ do_join((size_t)cap->count0, cap->nchar == NUL, true, true, true);
}
}
@@ -7715,16 +7725,22 @@ static void nv_put(cmdarg_T *cap)
savereg = copy_register(regname);
}
- /* Now delete the selected text. */
- cap->cmdchar = 'd';
- cap->nchar = NUL;
- cap->oap->regname = NUL;
- nv_operator(cap);
- do_pending_operator(cap, 0, false);
- empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
+ // To place the cursor correctly after a blockwise put, and to leave the
+ // text in the correct position when putting over a selection with
+ // 'virtualedit' and past the end of the line, we use the 'c' operator in
+ // do_put(), which requires the visual selection to still be active.
+ if (!VIsual_active || VIsual_mode == 'V' || regname != '.') {
+ // Now delete the selected text.
+ cap->cmdchar = 'd';
+ cap->nchar = NUL;
+ cap->oap->regname = NUL;
+ nv_operator(cap);
+ do_pending_operator(cap, 0, false);
+ empty = (curbuf->b_ml.ml_flags & ML_EMPTY);
- /* delete PUT_LINE_BACKWARD; */
- cap->oap->regname = regname;
+ // delete PUT_LINE_BACKWARD;
+ cap->oap->regname = regname;
+ }
/* When deleted a linewise Visual area, put the register as
* lines to avoid it joined with the next line. When deletion was
@@ -7871,15 +7887,15 @@ static void nv_event(cmdarg_T *cap)
{
// Garbage collection should have been executed before blocking for events in
// the `os_inchar` in `state_enter`, but we also disable it here in case the
- // `os_inchar` branch was not executed(!queue_empty(loop.events), which could
- // have `may_garbage_collect` set to true in `normal_check`).
+ // `os_inchar` branch was not executed (!multiqueue_empty(loop.events), which
+ // could have `may_garbage_collect` set to true in `normal_check`).
//
// That is because here we may run code that calls `os_inchar`
// later(`f_confirm` or `get_keystroke` for example), but in these cases it is
// not safe to perform garbage collection because there could be unreferenced
// lists or dicts being used.
may_garbage_collect = false;
- queue_process_events(loop.events);
+ multiqueue_process_events(main_loop.events);
cap->retval |= CA_COMMAND_BUSY; // don't call edit() now
}
diff --git a/src/nvim/ops.c b/src/nvim/ops.c
index adfd0424f0..9a01891483 100644
--- a/src/nvim/ops.c
+++ b/src/nvim/ops.c
@@ -1,6 +1,6 @@
/*
* ops.c: implementation of various operators: op_shift, op_delete, op_tilde,
- * op_change, op_yank, do_put, do_join
+ * op_change, op_yank, do_put, do_join
*/
#include <assert.h>
@@ -30,13 +30,13 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/normal.h"
#include "nvim/option.h"
#include "nvim/path.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/terminal.h"
#include "nvim/ui.h"
@@ -51,10 +51,10 @@ static yankreg_T *y_previous = NULL; /* ptr to last written yankreg */
static bool clipboard_didwarn_unnamed = false;
-// for behavior between start_global_changes() and end_global_changes())
+// for behavior between start_batch_changes() and end_batch_changes())
static bool clipboard_delay_update = false; // delay clipboard update
-static int global_change_count = 0; // if set, inside global changes
-static bool clipboard_needs_update = false; // the clipboard was updated
+static int batch_change_count = 0; // inside a script
+static bool clipboard_needs_update = false; // clipboard was updated
/*
* structure used by block_prep, op_delete and op_yank for blockwise operators
@@ -257,8 +257,7 @@ void op_shift(oparg_T *oap, int curs_top, int amount)
* shift the current line one shiftwidth left (if left != 0) or right
* leaves cursor on first blank in the line
*/
-void
-shift_line (
+void shift_line(
int left,
int round,
int amount,
@@ -340,10 +339,16 @@ static void shift_block(oparg_T *oap, int amount)
total += bd.pre_whitesp; /* all virtual WS up to & incl a split TAB */
ws_vcol = bd.start_vcol - bd.pre_whitesp;
if (bd.startspaces) {
- if (has_mbyte)
- bd.textstart += (*mb_ptr2len)(bd.textstart);
- else
- ++bd.textstart;
+ if (has_mbyte) {
+ if ((*mb_ptr2len)(bd.textstart) == 1) {
+ bd.textstart++;
+ } else {
+ ws_vcol = 0;
+ bd.startspaces = 0;
+ }
+ } else {
+ bd.textstart++;
+ }
}
for (; ascii_iswhite(*bd.textstart); ) {
// TODO: is passing bd.textstart for start of the line OK?
@@ -369,18 +374,18 @@ static void shift_block(oparg_T *oap, int amount)
memset(newp + bd.textcol + i, ' ', (size_t)j);
/* the end */
memmove(newp + bd.textcol + i + j, bd.textstart, (size_t)len);
- } else { /* left */
- colnr_T destination_col; /* column to which text in block will
- be shifted */
- char_u *verbatim_copy_end; /* end of the part of the line which is
- copied verbatim */
- colnr_T verbatim_copy_width; /* the (displayed) width of this part
- of line */
- unsigned fill; /* nr of spaces that replace a TAB */
- unsigned new_line_len; /* the length of the line after the
- block shift */
- size_t block_space_width;
- size_t shift_amount;
+ } else { // left
+ colnr_T destination_col; // column to which text in block will
+ // be shifted
+ char_u *verbatim_copy_end; // end of the part of the line which is
+ // copied verbatim
+ colnr_T verbatim_copy_width; // the (displayed) width of this part
+ // of line
+ size_t fill; // nr of spaces that replace a TAB
+ size_t new_line_len; // the length of the line after the
+ // block shift
+ colnr_T block_space_width;
+ colnr_T shift_amount;
char_u *non_white = bd.textstart;
colnr_T non_white_col;
@@ -409,11 +414,10 @@ static void shift_block(oparg_T *oap, int amount)
block_space_width = non_white_col - oap->start_vcol;
/* We will shift by "total" or "block_space_width", whichever is less.
*/
- shift_amount = (block_space_width < (size_t)total
- ? block_space_width : (size_t)total);
+ shift_amount = (block_space_width < total ? block_space_width : total);
- /* The column to which we will shift the text. */
- destination_col = (colnr_T)(non_white_col - shift_amount);
+ // The column to which we will shift the text.
+ destination_col = non_white_col - shift_amount;
/* Now let's find out how much of the beginning of the line we can
* reuse without modification. */
@@ -439,20 +443,21 @@ static void shift_block(oparg_T *oap, int amount)
/* If "destination_col" is different from the width of the initial
* part of the line that will be copied, it means we encountered a tab
* character, which we will have to partly replace with spaces. */
- fill = destination_col - verbatim_copy_width;
-
- /* The replacement line will consist of:
- * - the beginning of the original line up to "verbatim_copy_end",
- * - "fill" number of spaces,
- * - the rest of the line, pointed to by non_white. */
- new_line_len = (unsigned)(verbatim_copy_end - oldp)
- + fill
- + (unsigned)STRLEN(non_white) + 1;
-
- newp = (char_u *) xmalloc((size_t)(new_line_len));
- memmove(newp, oldp, (size_t)(verbatim_copy_end - oldp));
- memset(newp + (verbatim_copy_end - oldp), ' ', (size_t)fill);
- STRMOVE(newp + (verbatim_copy_end - oldp) + fill, non_white);
+ assert(destination_col - verbatim_copy_width >= 0);
+ fill = (size_t)(destination_col - verbatim_copy_width);
+
+ assert(verbatim_copy_end - oldp >= 0);
+ size_t verbatim_diff = (size_t)(verbatim_copy_end - oldp);
+ // The replacement line will consist of:
+ // - the beginning of the original line up to "verbatim_copy_end",
+ // - "fill" number of spaces,
+ // - the rest of the line, pointed to by non_white.
+ new_line_len = verbatim_diff + fill + STRLEN(non_white) + 1;
+
+ newp = (char_u *) xmalloc(new_line_len);
+ memmove(newp, oldp, verbatim_diff);
+ memset(newp + verbatim_diff, ' ', fill);
+ STRMOVE(newp + verbatim_diff + fill, non_white);
}
/* replace the line */
ml_replace(curwin->w_cursor.lnum, newp, FALSE);
@@ -469,21 +474,20 @@ static void shift_block(oparg_T *oap, int amount)
static void block_insert(oparg_T *oap, char_u *s, int b_insert, struct block_def *bdp)
{
int p_ts;
- int count = 0; /* extra spaces to replace a cut TAB */
- int spaces = 0; /* non-zero if cutting a TAB */
- colnr_T offset; /* pointer along new line */
- unsigned s_len; /* STRLEN(s) */
- char_u *newp, *oldp; /* new, old lines */
- linenr_T lnum; /* loop var */
+ int count = 0; // extra spaces to replace a cut TAB
+ int spaces = 0; // non-zero if cutting a TAB
+ colnr_T offset; // pointer along new line
+ size_t s_len = STRLEN(s);
+ char_u *newp, *oldp; // new, old lines
+ linenr_T lnum; // loop var
int oldstate = State;
-
- State = INSERT; /* don't want REPLACE for State */
- s_len = (unsigned)STRLEN(s);
+ State = INSERT; // don't want REPLACE for State
for (lnum = oap->start.lnum + 1; lnum <= oap->end.lnum; lnum++) {
- block_prep(oap, bdp, lnum, TRUE);
- if (bdp->is_short && b_insert)
- continue; /* OP_INSERT, line ends before block start */
+ block_prep(oap, bdp, lnum, true);
+ if (bdp->is_short && b_insert) {
+ continue; // OP_INSERT, line ends before block start
+ }
oldp = ml_get(lnum);
@@ -523,25 +527,26 @@ static void block_insert(oparg_T *oap, char_u *s, int b_insert, struct block_def
count -= off;
}
- newp = (char_u *) xmalloc((size_t)(STRLEN(oldp) + s_len + count + 1));
+ assert(count >= 0);
+ newp = (char_u *)xmalloc(STRLEN(oldp) + s_len + (size_t)count + 1);
- /* copy up to shifted part */
- memmove(newp, oldp, (size_t)(offset));
+ // copy up to shifted part
+ memmove(newp, oldp, (size_t)offset);
oldp += offset;
- /* insert pre-padding */
+ // insert pre-padding
memset(newp + offset, ' ', (size_t)spaces);
- /* copy the new text */
- memmove(newp + offset + spaces, s, (size_t)s_len);
- offset += s_len;
+ // copy the new text
+ memmove(newp + offset + spaces, s, s_len);
+ offset += (int)s_len;
if (spaces && !bdp->is_short) {
- /* insert post-padding */
+ // insert post-padding
memset(newp + offset + spaces, ' ', (size_t)(p_ts - spaces));
- /* We're splitting a TAB, don't copy it. */
+ // We're splitting a TAB, don't copy it.
oldp++;
- /* We allowed for that TAB, remember this now */
+ // We allowed for that TAB, remember this now
count++;
}
@@ -804,7 +809,7 @@ yankreg_T *copy_register(int name)
copy->y_array = NULL;
} else {
copy->y_array = xcalloc(copy->y_size, sizeof(char_u *));
- for (linenr_T i = 0; i < copy->y_size; i++) {
+ for (size_t i = 0; i < copy->y_size; i++) {
copy->y_array[i] = vim_strsave(reg->y_array[i]);
}
}
@@ -888,7 +893,7 @@ static void set_yreg_additional_data(yankreg_T *reg, dict_T *additional_data)
/*
* Stuff string "p" into yank register "regname" as a single line (append if
- * uppercase). "p" must have been alloced.
+ * uppercase). "p" must have been alloced.
*
* return FAIL for failure, OK otherwise
*/
@@ -940,10 +945,8 @@ do_execreg (
int silent /* set "silent" flag in typeahead buffer */
)
{
- long i;
- char_u *p;
+ char_u *p;
int retval = OK;
- int remap;
if (regname == '@') { /* repeat previous one */
if (execreg_lastc == NUL) {
@@ -1001,21 +1004,20 @@ do_execreg (
if (reg->y_array == NULL)
return FAIL;
- /* Disallow remaping for ":@r". */
- remap = colon ? REMAP_NONE : REMAP_YES;
+ // Disallow remaping for ":@r".
+ int remap = colon ? REMAP_NONE : REMAP_YES;
/*
* Insert lines into typeahead buffer, from last one to first one.
*/
put_reedit_in_typebuf(silent);
- for (i = reg->y_size - 1; i >= 0; i--) {
- char_u *escaped;
-
+ char_u *escaped;
+ for (size_t i = reg->y_size; i-- > 0;) { // from y_size - 1 to 0 included
// insert NL between lines and after last line if type is kMTLineWise
- if (reg->y_type == kMTLineWise || i < reg->y_size - 1
- || addcr) {
- if (ins_typebuf((char_u *)"\n", remap, 0, TRUE, silent) == FAIL)
+ if (reg->y_type == kMTLineWise || i < reg->y_size - 1 || addcr) {
+ if (ins_typebuf((char_u *)"\n", remap, 0, true, silent) == FAIL) {
return FAIL;
+ }
}
escaped = vim_strsave_escape_csi(reg->y_array[i]);
retval = ins_typebuf(escaped, remap, 0, TRUE, silent);
@@ -1045,7 +1047,7 @@ static void put_reedit_in_typebuf(int silent)
buf[1] = 'R';
buf[2] = NUL;
} else {
- buf[0] = restart_edit == 'I' ? 'i' : restart_edit;
+ buf[0] = (char_u)(restart_edit == 'I' ? 'i' : restart_edit);
buf[1] = NUL;
}
if (ins_typebuf(buf, REMAP_NONE, 0, TRUE, silent) == OK)
@@ -1059,8 +1061,7 @@ static void put_reedit_in_typebuf(int silent)
* When "esc" is TRUE it is to be taken literally: Escape CSI characters and
* no remapping.
*/
-static int
-put_in_typebuf (
+static int put_in_typebuf(
char_u *s,
int esc,
int colon, /* add ':' before the line */
@@ -1098,13 +1099,11 @@ put_in_typebuf (
*
* return FAIL for failure, OK otherwise
*/
-int
-insert_reg (
+int insert_reg(
int regname,
int literally /* insert literally, not as if typed */
)
{
- long i;
int retval = OK;
char_u *arg;
int allocated;
@@ -1132,10 +1131,10 @@ insert_reg (
xfree(arg);
} else { /* name or number register */
yankreg_T *reg = get_yank_register(regname, YREG_PASTE);
- if (reg->y_array == NULL)
+ if (reg->y_array == NULL) {
retval = FAIL;
- else {
- for (i = 0; i < reg->y_size; i++) {
+ } else {
+ for (size_t i = 0; i < reg->y_size; i++) {
stuffescaped(reg->y_array[i], literally);
// Insert a newline between lines and after last line if
// y_type is kMTLineWise.
@@ -1185,8 +1184,7 @@ static void stuffescaped(char_u *arg, int literally)
* If "regname" is a special register, return TRUE and store a pointer to its
* value in "argp".
*/
-int
-get_spec_reg (
+int get_spec_reg(
int regname,
char_u **argp,
int *allocated, /* return: TRUE when value was allocated */
@@ -1273,13 +1271,11 @@ get_spec_reg (
/// @returns FAIL for failure, OK otherwise
bool cmdline_paste_reg(int regname, bool literally, bool remcr)
{
- long i;
-
yankreg_T *reg = get_yank_register(regname, YREG_PASTE);
if (reg->y_array == NULL)
return FAIL;
- for (i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
cmdline_paste_str(reg->y_array[i], literally);
// Insert ^M between lines and after last line if type is kMTLineWise.
@@ -1311,12 +1307,14 @@ int op_delete(oparg_T *oap)
struct block_def bd;
linenr_T old_lcount = curbuf->b_ml.ml_line_count;
- if (curbuf->b_ml.ml_flags & ML_EMPTY) /* nothing to do */
+ if (curbuf->b_ml.ml_flags & ML_EMPTY) { // nothing to do
return OK;
+ }
- /* Nothing to delete, return here. Do prepare undo, for op_change(). */
- if (oap->empty)
+ // Nothing to delete, return here. Do prepare undo, for op_change().
+ if (oap->empty) {
return u_save_cursor();
+ }
if (!MODIFIABLE(curbuf)) {
EMSG(_(e_modifiable));
@@ -1406,7 +1404,7 @@ int op_delete(oparg_T *oap)
if (oap->regname == 0) {
set_clipboard(0, reg);
- yank_do_autocmd(oap, reg);
+ do_autocmd_textyankpost(oap, reg);
}
}
@@ -1431,23 +1429,21 @@ int op_delete(oparg_T *oap)
curwin->w_cursor.coladd = 0;
}
- /* n == number of chars deleted
- * If we delete a TAB, it may be replaced by several characters.
- * Thus the number of characters may increase!
- */
+ // n == number of chars deleted
+ // If we delete a TAB, it may be replaced by several characters.
+ // Thus the number of characters may increase!
n = bd.textlen - bd.startspaces - bd.endspaces;
oldp = ml_get(lnum);
- newp = (char_u *) xmalloc((size_t)(STRLEN(oldp) + 1 - n));
- /* copy up to deleted part */
+ newp = (char_u *)xmalloc(STRLEN(oldp) - (size_t)n + 1);
+ // copy up to deleted part
memmove(newp, oldp, (size_t)bd.textcol);
- /* insert spaces */
- memset(newp + bd.textcol, ' ',
- (size_t)(bd.startspaces + bd.endspaces));
- /* copy the part after the deleted part */
+ // insert spaces
+ memset(newp + bd.textcol, ' ', (size_t)(bd.startspaces + bd.endspaces));
+ // copy the part after the deleted part
oldp += bd.textcol + bd.textlen;
STRMOVE(newp + bd.textcol + bd.startspaces + bd.endspaces, oldp);
- /* replace the line */
- ml_replace(lnum, newp, FALSE);
+ // replace the line
+ ml_replace(lnum, newp, false);
}
check_cursor_col();
@@ -1552,7 +1548,7 @@ int op_delete(oparg_T *oap)
curwin->w_cursor.coladd = 0;
}
- (void)del_bytes((long)n, !virtual_op,
+ (void)del_bytes((colnr_T)n, !virtual_op,
oap->op_type == OP_DELETE && !oap->is_VIsual);
} else {
// delete characters between lines
@@ -1572,7 +1568,7 @@ int op_delete(oparg_T *oap)
// delete from start of line until op_end
n = (oap->end.col + 1 - !oap->inclusive);
curwin->w_cursor.col = 0;
- (void)del_bytes((long)n, !virtual_op,
+ (void)del_bytes((colnr_T)n, !virtual_op,
oap->op_type == OP_DELETE && !oap->is_VIsual);
curwin->w_cursor = curpos; // restore curwin->w_cursor
(void)do_join(2, false, false, false, false);
@@ -1611,7 +1607,8 @@ static void mb_adjust_opend(oparg_T *oap)
*/
static inline void pchar(pos_T lp, int c)
{
- *(ml_get_buf(curbuf, lp.lnum, TRUE) + lp.col) = c;;
+ assert(c <= UCHAR_MAX);
+ *(ml_get_buf(curbuf, lp.lnum, true) + lp.col) = (char_u)c;
}
/*
@@ -1622,7 +1619,7 @@ int op_replace(oparg_T *oap, int c)
int n, numc;
int num_chars;
char_u *newp, *oldp;
- size_t oldlen;
+ colnr_T oldlen;
struct block_def bd;
char_u *after_p = NULL;
int had_ctrl_v_cr = (c == -1 || c == -2);
@@ -1690,42 +1687,56 @@ int op_replace(oparg_T *oap, int c)
/* Compute bytes needed, move character count to num_chars. */
num_chars = numc;
numc *= (*mb_char2len)(c);
- /* oldlen includes textlen, so don't double count */
- n += numc - bd.textlen;
oldp = get_cursor_line_ptr();
- oldlen = STRLEN(oldp);
- newp = (char_u *) xmalloc((size_t)(oldlen + 1 + n));
- memset(newp, NUL, (size_t)(oldlen + 1 + n));
- /* copy up to deleted part */
+ oldlen = (int)STRLEN(oldp);
+
+ size_t newp_size = (size_t)(bd.textcol + bd.startspaces);
+ if (had_ctrl_v_cr || (c != '\r' && c != '\n')) {
+ newp_size += (size_t)numc;
+ if (!bd.is_short) {
+ newp_size += (size_t)(bd.endspaces + oldlen
+ - bd.textcol - bd.textlen);
+ }
+ }
+ newp = xmallocz(newp_size);
+ // copy up to deleted part
memmove(newp, oldp, (size_t)bd.textcol);
oldp += bd.textcol + bd.textlen;
- /* insert pre-spaces */
+ // insert pre-spaces
memset(newp + bd.textcol, ' ', (size_t)bd.startspaces);
- /* insert replacement chars CHECK FOR ALLOCATED SPACE */
- /* -1/-2 is used for entering CR literally. */
+ // insert replacement chars CHECK FOR ALLOCATED SPACE
+ // -1/-2 is used for entering CR literally.
+ size_t after_p_len = 0;
if (had_ctrl_v_cr || (c != '\r' && c != '\n')) {
- if (has_mbyte) {
- n = (int)STRLEN(newp);
- while (--num_chars >= 0)
- n += (*mb_char2bytes)(c, newp + n);
- } else
- memset(newp + STRLEN(newp), c, (size_t)numc);
- if (!bd.is_short) {
- /* insert post-spaces */
- memset(newp + STRLEN(newp), ' ', (size_t)bd.endspaces);
- /* copy the part after the changed part */
- STRMOVE(newp + STRLEN(newp), oldp);
+ // strlen(newp) at this point
+ int newp_len = bd.textcol + bd.startspaces;
+ if (has_mbyte) {
+ while (--num_chars >= 0) {
+ newp_len += (*mb_char2bytes)(c, newp + newp_len);
+ }
+ } else {
+ memset(newp + newp_len, c, (size_t)numc);
+ newp_len += numc;
+ }
+ if (!bd.is_short) {
+ // insert post-spaces
+ memset(newp + newp_len, ' ', (size_t)bd.endspaces);
+ newp_len += bd.endspaces;
+ // copy the part after the changed part
+ memmove(newp + newp_len, oldp,
+ (size_t)(oldlen - bd.textcol - bd.textlen + 1));
}
} else {
- /* Replacing with \r or \n means splitting the line. */
- after_p = (char_u *) xmalloc((size_t)(oldlen + 1 + n - STRLEN(newp)));
- STRMOVE(after_p, oldp);
+ // Replacing with \r or \n means splitting the line.
+ after_p_len = (size_t)(oldlen - bd.textcol - bd.textlen + 1);
+ after_p = (char_u *)xmalloc(after_p_len);
+ memmove(after_p, oldp, after_p_len);
}
/* replace the line */
ml_replace(curwin->w_cursor.lnum, newp, FALSE);
if (after_p != NULL) {
- ml_append(curwin->w_cursor.lnum++, after_p, 0, FALSE);
+ ml_append(curwin->w_cursor.lnum++, after_p, (int)after_p_len, false);
appended_lines_mark(curwin->w_cursor.lnum, 1L);
oap->end.lnum++;
xfree(after_p);
@@ -1925,8 +1936,7 @@ int swapchar(int op_type, pos_T *pos)
if (c >= 0x80 && op_type == OP_ROT13)
return FALSE;
- if (op_type == OP_UPPER && c == 0xdf
- && (enc_latin1like || STRCMP(p_enc, "iso-8859-2") == 0)) {
+ if (op_type == OP_UPPER && c == 0xdf) {
pos_T sp = curwin->w_cursor;
/* Special handling of German sharp s: change to "SS". */
@@ -1992,7 +2002,7 @@ void op_insert(oparg_T *oap, long count1)
// already disabled, but still need it when calling
// coladvance_force().
if (curwin->w_cursor.coladd > 0) {
- int old_ve_flags = ve_flags;
+ unsigned old_ve_flags = ve_flags;
ve_flags = VE_ALL;
if (u_save_cursor() == FAIL)
@@ -2066,8 +2076,8 @@ void op_insert(oparg_T *oap, long count1)
if (oap->op_type == OP_INSERT
&& oap->start.col + oap->start.coladd
!= curbuf->b_op_start_orig.col + curbuf->b_op_start_orig.coladd) {
- size_t t = getviscol2(curbuf->b_op_start_orig.col,
- curbuf->b_op_start_orig.coladd);
+ int t = getviscol2(curbuf->b_op_start_orig.col,
+ curbuf->b_op_start_orig.coladd);
oap->start.col = curbuf->b_op_start_orig.col;
pre_textlen -= t - oap->start_vcol;
oap->start_vcol = t;
@@ -2075,8 +2085,8 @@ void op_insert(oparg_T *oap, long count1)
&& oap->end.col + oap->end.coladd
>= curbuf->b_op_start_orig.col
+ curbuf->b_op_start_orig.coladd) {
- size_t t = getviscol2(curbuf->b_op_start_orig.col,
- curbuf->b_op_start_orig.coladd);
+ int t = getviscol2(curbuf->b_op_start_orig.col,
+ curbuf->b_op_start_orig.coladd);
oap->start.col = curbuf->b_op_start_orig.col;
/* reset pre_textlen to the value of OP_INSERT */
pre_textlen += bd.textlen;
@@ -2109,14 +2119,13 @@ void op_insert(oparg_T *oap, long count1)
firstline = ml_get(oap->start.lnum) + bd.textcol;
if (oap->op_type == OP_APPEND)
firstline += bd.textlen;
- if (pre_textlen >= 0
- && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0) {
- ins_text = vim_strnsave(firstline, (int)ins_len);
- /* block handled here */
- if (u_save(oap->start.lnum,
- (linenr_T)(oap->end.lnum + 1)) == OK)
- block_insert(oap, ins_text, (oap->op_type == OP_INSERT),
- &bd);
+ ins_len = (long)STRLEN(firstline) - pre_textlen;
+ if (pre_textlen >= 0 && ins_len > 0) {
+ ins_text = vim_strnsave(firstline, (size_t)ins_len);
+ // block handled here
+ if (u_save(oap->start.lnum, (linenr_T)(oap->end.lnum + 1)) == OK) {
+ block_insert(oap, ins_text, (oap->op_type == OP_INSERT), &bd);
+ }
curwin->w_cursor.col = oap->start.col;
check_cursor();
@@ -2139,8 +2148,10 @@ int op_change(oparg_T *oap)
long ins_len;
long pre_textlen = 0;
long pre_indent = 0;
- char_u *firstline;
- char_u *ins_text, *newp, *oldp;
+ char_u *newp;
+ char_u *firstline;
+ char_u *ins_text;
+ char_u *oldp;
struct block_def bd;
l = oap->start.col;
@@ -2198,14 +2209,14 @@ int op_change(oparg_T *oap)
long new_indent = (long)(skipwhite(firstline) - firstline);
pre_textlen += new_indent - pre_indent;
- bd.textcol += new_indent - pre_indent;
+ bd.textcol += (colnr_T)(new_indent - pre_indent);
}
ins_len = (long)STRLEN(firstline) - pre_textlen;
if (ins_len > 0) {
/* Subsequent calls to ml_get() flush the firstline data - take a
* copy of the inserted text. */
- ins_text = (char_u *) xmalloc((size_t)(ins_len + 1));
+ ins_text = (char_u *)xmalloc((size_t)(ins_len + 1));
STRLCPY(ins_text, firstline + bd.textcol, ins_len + 1);
for (linenr = oap->start.lnum + 1; linenr <= oap->end.lnum;
linenr++) {
@@ -2218,11 +2229,13 @@ int op_change(oparg_T *oap)
if (bd.is_short) {
vpos.lnum = linenr;
(void)getvpos(&vpos, oap->start_vcol);
- } else
+ } else {
vpos.coladd = 0;
+ }
oldp = ml_get(linenr);
- newp = (char_u *) xmalloc((size_t)(STRLEN(oldp) + vpos.coladd + ins_len + 1));
- /* copy up to block start */
+ newp = xmalloc(STRLEN(oldp) + (size_t)vpos.coladd
+ + (size_t)ins_len + 1);
+ // copy up to block start
memmove(newp, oldp, (size_t)bd.textcol);
offset = bd.textcol;
memset(newp + offset, ' ', (size_t)vpos.coladd);
@@ -2272,9 +2285,7 @@ void free_register(yankreg_T *reg)
{
set_yreg_additional_data(reg, NULL);
if (reg->y_array != NULL) {
- long i;
-
- for (i = reg->y_size - 1; i >= 0; i--) {
+ for (size_t i = reg->y_size; i-- > 0;) { // from y_size - 1 to 0 included
xfree(reg->y_array[i]);
}
xfree(reg->y_array);
@@ -2304,37 +2315,34 @@ bool op_yank(oparg_T *oap, bool message)
yankreg_T *reg = get_yank_register(oap->regname, YREG_YANK);
op_yank_reg(oap, message, reg, is_append_register(oap->regname));
set_clipboard(oap->regname, reg);
- yank_do_autocmd(oap, reg);
+ do_autocmd_textyankpost(oap, reg);
return true;
}
static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append)
{
- long y_idx; /* index in y_array[] */
- yankreg_T *curr; /* copy of current register */
- yankreg_T newreg; /* new yank register when appending */
- char_u **new_ptr;
- linenr_T lnum; /* current line number */
- long j;
+ yankreg_T newreg; // new yank register when appending
+ char_u **new_ptr;
+ linenr_T lnum; // current line number
+ size_t j;
MotionType yank_type = oap->motion_type;
- long yanklines = oap->line_count;
+ size_t yanklines = (size_t)oap->line_count;
linenr_T yankendlnum = oap->end.lnum;
- char_u *p;
- char_u *pnew;
+ char_u *p;
+ char_u *pnew;
struct block_def bd;
- curr = reg;
- /* append to existing contents */
- if (append && reg->y_array != NULL)
+ yankreg_T *curr = reg; // copy of current register
+ // append to existing contents
+ if (append && reg->y_array != NULL) {
reg = &newreg;
- else
- free_register(reg); /* free previously yanked lines */
+ } else {
+ free_register(reg); // free previously yanked lines
+ }
- /*
- * If the cursor was in column 1 before and after the movement, and the
- * operator is not inclusive, the yank is always linewise.
- */
+ // If the cursor was in column 1 before and after the movement, and the
+ // operator is not inclusive, the yank is always linewise.
if (oap->motion_type == kMTCharWise
&& oap->start.col == 0
&& !oap->inclusive
@@ -2353,7 +2361,7 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append)
reg->additional_data = NULL;
reg->timestamp = os_time();
- y_idx = 0;
+ size_t y_idx = 0; // index in y_array[]
lnum = oap->start.lnum;
if (yank_type == kMTBlockWise) {
@@ -2481,7 +2489,7 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append)
yanklines = 0;
}
// Some versions of Vi use ">=" here, some don't...
- if (yanklines > p_report) {
+ if (yanklines > (size_t)p_report) {
// redisplay now, so message is not deleted
update_topline_redraw();
if (yanklines == 1) {
@@ -2512,10 +2520,10 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append)
return;
}
-static void yank_copy_line(yankreg_T *reg, struct block_def *bd, long y_idx)
+static void yank_copy_line(yankreg_T *reg, struct block_def *bd, size_t y_idx)
{
- char_u *pnew = xmallocz(bd->startspaces + bd->endspaces + bd->textlen);
-
+ char_u *pnew = xmallocz((size_t)(bd->startspaces + bd->endspaces
+ + bd->textlen));
reg->y_array[y_idx] = pnew;
memset(pnew, ' ', (size_t)bd->startspaces);
pnew += bd->startspaces;
@@ -2530,7 +2538,7 @@ static void yank_copy_line(yankreg_T *reg, struct block_def *bd, long y_idx)
///
/// @param oap Operator arguments.
/// @param reg The yank register used.
-static void yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
+static void do_autocmd_textyankpost(oparg_T *oap, yankreg_T *reg)
FUNC_ATTR_NONNULL_ALL
{
static bool recursive = false;
@@ -2548,7 +2556,7 @@ static void yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
// the yanked text
list_T *list = list_alloc();
- for (linenr_T i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
list_append_string(list, reg->y_array[i], -1);
}
list->lv_lock = VAR_FIXED;
@@ -2565,7 +2573,7 @@ static void yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
dict_add_nr_str(dict, "regname", 0, (char_u *)buf);
// kind of operation (yank/delete/change)
- buf[0] = get_op_char(oap->op_type);
+ buf[0] = (char)get_op_char(oap->op_type);
buf[1] = NUL;
dict_add_nr_str(dict, "operator", 0, (char_u *)buf);
@@ -2582,23 +2590,24 @@ static void yank_do_autocmd(oparg_T *oap, yankreg_T *reg)
/*
* Put contents of register "regname" into the text.
* Caller must check "regname" to be valid!
- * "flags": PUT_FIXINDENT make indent look nice
- * PUT_CURSEND leave cursor after end of new text
- * PUT_LINE force linewise put (":put")
+ * "flags": PUT_FIXINDENT make indent look nice
+ * PUT_CURSEND leave cursor after end of new text
+ * PUT_LINE force linewise put (":put")
dir: BACKWARD for 'P', FORWARD for 'p' */
void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
{
- char_u *ptr;
- char_u *newp, *oldp;
+ char_u *ptr;
+ char_u *newp;
+ char_u *oldp;
int yanklen;
- int totlen = 0; /* init for gcc */
+ size_t totlen = 0; // init for gcc
linenr_T lnum;
colnr_T col;
- long i; // index in y_array[]
+ size_t i; // index in y_array[]
MotionType y_type;
- long y_size;
- int oldlen;
- long y_width = 0;
+ size_t y_size;
+ size_t oldlen;
+ int y_width = 0;
colnr_T vcol;
int delcount;
int incr = 0;
@@ -2628,12 +2637,79 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
* special characters (newlines, etc.).
*/
if (regname == '.') {
- (void)stuff_inserted((dir == FORWARD ? (count == -1 ? 'o' : 'a') :
- (count == -1 ? 'O' : 'i')), count, FALSE);
- /* Putting the text is done later, so can't really move the cursor to
- * the next character. Use "l" to simulate it. */
- if ((flags & PUT_CURSEND) && gchar_cursor() != NUL)
- stuffcharReadbuff('l');
+ bool non_linewise_vis = (VIsual_active && VIsual_mode != 'V');
+
+ // PUT_LINE has special handling below which means we use 'i' to start.
+ char command_start_char = non_linewise_vis ? 'c' :
+ (flags & PUT_LINE ? 'i' : (dir == FORWARD ? 'a' : 'i'));
+
+ // To avoid 'autoindent' on linewise puts, create a new line with `:put _`.
+ if (flags & PUT_LINE) {
+ do_put('_', NULL, dir, 1, PUT_LINE);
+ }
+
+ // If given a count when putting linewise, we stuff the readbuf with the
+ // dot register 'count' times split by newlines.
+ if (flags & PUT_LINE) {
+ stuffcharReadbuff(command_start_char);
+ for (; count > 0; count--) {
+ (void)stuff_inserted(NUL, 1, count != 1);
+ if (count != 1) {
+ // To avoid 'autoindent' affecting the text, use Ctrl_U to remove any
+ // whitespace. Can't just insert Ctrl_U into readbuf1, this would go
+ // back to the previous line in the case of 'noautoindent' and
+ // 'backspace' includes "eol". So we insert a dummy space for Ctrl_U
+ // to consume.
+ stuffReadbuff((char_u *)"\n ");
+ stuffcharReadbuff(Ctrl_U);
+ }
+ }
+ } else {
+ (void)stuff_inserted(command_start_char, count, false);
+ }
+
+ // Putting the text is done later, so can't move the cursor to the next
+ // character. Simulate it with motion commands after the insert.
+ if (flags & PUT_CURSEND) {
+ if (flags & PUT_LINE) {
+ stuffReadbuff((char_u *)"j0");
+ } else {
+ // Avoid ringing the bell from attempting to move into the space after
+ // the current line. We can stuff the readbuffer with "l" if:
+ // 1) 'virtualedit' is "all" or "onemore"
+ // 2) We are not at the end of the line
+ // 3) We are not (one past the end of the line && on the last line)
+ // This allows a visual put over a selection one past the end of the
+ // line joining the current line with the one below.
+
+ // curwin->w_cursor.col marks the byte position of the cursor in the
+ // currunt line. It increases up to a max of
+ // STRLEN(ml_get(curwin->w_cursor.lnum)). With 'virtualedit' and the
+ // cursor past the end of the line, curwin->w_cursor.coladd is
+ // incremented instead of curwin->w_cursor.col.
+ char_u *cursor_pos = get_cursor_pos_ptr();
+ bool one_past_line = (*cursor_pos == NUL);
+ bool eol = false;
+ if (!one_past_line) {
+ eol = (*(cursor_pos + mb_ptr2len(cursor_pos)) == NUL);
+ }
+
+ bool ve_allows = (ve_flags == VE_ALL || ve_flags == VE_ONEMORE);
+ bool eof = curbuf->b_ml.ml_line_count == curwin->w_cursor.lnum
+ && one_past_line;
+ if (ve_allows || !(eol || eof)) {
+ stuffcharReadbuff('l');
+ }
+ }
+ } else if (flags & PUT_LINE) {
+ stuffReadbuff((char_u *)"g'[");
+ }
+
+ // So the 'u' command restores cursor position after ".p, save the cursor
+ // position now (though not saving any text).
+ if (command_start_char == 'a') {
+ u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
+ }
return;
}
@@ -2705,7 +2781,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
if (curbuf->terminal) {
for (int i = 0; i < count; i++) {
// feed the lines to the terminal
- for (int j = 0; j < y_size; j++) {
+ for (size_t j = 0; j < y_size; j++) {
if (j) {
// terminate the previous line
terminal_send(curbuf->terminal, "\n", 1);
@@ -2736,7 +2812,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
if (dir == FORWARD && *p != NUL) {
mb_ptr_adv(p);
}
- ptr = vim_strnsave(oldp, p - oldp);
+ ptr = vim_strnsave(oldp, (size_t)(p - oldp));
ml_replace(curwin->w_cursor.lnum, ptr, false);
nr_lines++;
dir = FORWARD;
@@ -2761,11 +2837,13 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
}
if (y_type == kMTBlockWise) {
- lnum = curwin->w_cursor.lnum + y_size + 1;
- if (lnum > curbuf->b_ml.ml_line_count)
+ lnum = curwin->w_cursor.lnum + (linenr_T)y_size + 1;
+ if (lnum > curbuf->b_ml.ml_line_count) {
lnum = curbuf->b_ml.ml_line_count + 1;
- if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL)
+ }
+ if (u_save(curwin->w_cursor.lnum - 1, lnum) == FAIL) {
goto end;
+ }
} else if (y_type == kMTLineWise) {
lnum = curwin->w_cursor.lnum;
/* Correct line number for closed fold. Don't move the cursor yet,
@@ -2811,7 +2889,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
* Block mode
*/
if (y_type == kMTBlockWise) {
- char c = gchar_cursor();
+ int c = gchar_cursor();
colnr_T endcol2 = 0;
if (dir == FORWARD && c != NUL) {
@@ -2820,14 +2898,12 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
else
getvcol(curwin, &curwin->w_cursor, NULL, NULL, &col);
- if (has_mbyte)
- /* move to start of next multi-byte character */
- curwin->w_cursor.col += (*mb_ptr2len)(get_cursor_pos_ptr());
- else if (c != TAB || ve_flags != VE_ALL)
- ++curwin->w_cursor.col;
- ++col;
- } else
+ // move to start of next multi-byte character
+ curwin->w_cursor.col += (*mb_ptr2len)(get_cursor_pos_ptr());
+ col++;
+ } else {
getvcol(curwin, &curwin->w_cursor, &col, NULL, &endcol2);
+ }
col += curwin->w_cursor.coladd;
if (ve_flags == VE_ALL
@@ -2864,7 +2940,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
}
/* get the old line and advance to the position to insert at */
oldp = get_cursor_line_ptr();
- oldlen = (int)STRLEN(oldp);
+ oldlen = STRLEN(oldp);
for (ptr = oldp; vcol < col && *ptr; ) {
/* Count a tab for what it's worth (if list mode not on) */
incr = lbr_chartabsize_adv(oldp, &ptr, (colnr_T)vcol);
@@ -2881,8 +2957,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
bd.startspaces = incr - bd.endspaces;
--bd.textcol;
delcount = 1;
- if (has_mbyte)
- bd.textcol -= (*mb_head_off)(oldp, oldp + bd.textcol);
+ bd.textcol -= (*mb_head_off)(oldp, oldp + bd.textcol);
if (oldp[bd.textcol] != TAB) {
/* Only a Tab can be split into spaces. Other
* characters will have to be moved to after the
@@ -2901,10 +2976,11 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
if (spaces < 0)
spaces = 0;
- /* insert the new text */
- totlen = count * (yanklen + spaces) + bd.startspaces + bd.endspaces;
- newp = (char_u *) xmalloc((size_t)(totlen + oldlen + 1));
- /* copy part up to cursor to new line */
+ // insert the new text
+ totlen = (size_t)(count * (yanklen + spaces)
+ + bd.startspaces + bd.endspaces);
+ newp = (char_u *) xmalloc(totlen + oldlen + 1);
+ // copy part up to cursor to new line
ptr = newp;
memmove(ptr, oldp, (size_t)bd.textcol);
ptr += bd.textcol;
@@ -2925,10 +3001,10 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
/* may insert some spaces after the new text */
memset(ptr, ' ', (size_t)bd.endspaces);
ptr += bd.endspaces;
- /* move the text after the cursor to the end of the line. */
+ // move the text after the cursor to the end of the line.
memmove(ptr, oldp + bd.textcol + delcount,
- (size_t)(oldlen - bd.textcol - delcount + 1));
- ml_replace(curwin->w_cursor.lnum, newp, FALSE);
+ (size_t)((int)oldlen - bd.textcol - delcount + 1));
+ ml_replace(curwin->w_cursor.lnum, newp, false);
++curwin->w_cursor.lnum;
if (i == 0)
@@ -2943,7 +3019,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
/* adjust '] mark */
curbuf->b_op_end.lnum = curwin->w_cursor.lnum - 1;
- curbuf->b_op_end.col = bd.textcol + totlen - 1;
+ curbuf->b_op_end.col = bd.textcol + (colnr_T)totlen - 1;
curbuf->b_op_end.coladd = 0;
if (flags & PUT_CURSEND) {
colnr_T len;
@@ -2963,21 +3039,13 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
// if type is kMTCharWise, FORWARD is the same as BACKWARD on the next
// char
if (dir == FORWARD && gchar_cursor() != NUL) {
- if (has_mbyte) {
- int bytelen = (*mb_ptr2len)(get_cursor_pos_ptr());
-
- /* put it on the next of the multi-byte character. */
- col += bytelen;
- if (yanklen) {
- curwin->w_cursor.col += bytelen;
- curbuf->b_op_end.col += bytelen;
- }
- } else {
- ++col;
- if (yanklen) {
- ++curwin->w_cursor.col;
- ++curbuf->b_op_end.col;
- }
+ int bytelen = (*mb_ptr2len)(get_cursor_pos_ptr());
+
+ // put it on the next of the multi-byte character.
+ col += bytelen;
+ if (yanklen) {
+ curwin->w_cursor.col += bytelen;
+ curbuf->b_op_end.col += bytelen;
}
}
curbuf->b_op_start = curwin->w_cursor;
@@ -2994,13 +3062,13 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
*/
if (y_type == kMTCharWise && y_size == 1) {
do {
- totlen = count * yanklen;
+ totlen = (size_t)(count * yanklen);
if (totlen > 0) {
oldp = ml_get(lnum);
newp = (char_u *) xmalloc((size_t)(STRLEN(oldp) + totlen + 1));
memmove(newp, oldp, (size_t)col);
ptr = newp + col;
- for (i = 0; i < count; i++) {
+ for (i = 0; i < (size_t)count; i++) {
memmove(ptr, y_array[0], (size_t)yanklen);
ptr += yanklen;
}
@@ -3015,7 +3083,9 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
}
if (VIsual_active)
lnum++;
- } while (VIsual_active && lnum <= curbuf->b_visual.vi_end.lnum);
+ } while (VIsual_active
+ && (lnum <= curbuf->b_visual.vi_end.lnum
+ || lnum <= curbuf->b_visual.vi_start.lnum));
if (VIsual_active) { /* reset lnum to the last visual line */
lnum--;
@@ -3037,7 +3107,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags)
// Then append y_array[0] to first line.
lnum = new_cursor.lnum;
ptr = ml_get(lnum) + col;
- totlen = (int)STRLEN(y_array[y_size - 1]);
+ totlen = STRLEN(y_array[y_size - 1]);
newp = (char_u *) xmalloc((size_t)(STRLEN(ptr) + totlen + 1));
STRCPY(newp, y_array[y_size - 1]);
STRCAT(newp, ptr);
@@ -3097,8 +3167,13 @@ error:
if (dir == FORWARD)
curbuf->b_op_start.lnum++;
}
- mark_adjust(curbuf->b_op_start.lnum + (y_type == kMTCharWise),
- (linenr_T)MAXLNUM, nr_lines, 0L);
+ // Skip mark_adjust when adding lines after the last one, there
+ // can't be marks there.
+ if (curbuf->b_op_start.lnum + (y_type == kMTCharWise) - 1 + nr_lines
+ < curbuf->b_ml.ml_line_count) {
+ mark_adjust(curbuf->b_op_start.lnum + (y_type == kMTCharWise),
+ (linenr_T)MAXLNUM, nr_lines, 0L);
+ }
// note changed text for displaying and folding
if (y_type == kMTCharWise) {
@@ -3217,22 +3292,19 @@ int get_register_name(int num)
*/
void ex_display(exarg_T *eap)
{
- int i, n;
- long j;
- char_u *p;
- yankreg_T *yb;
+ char_u *p;
+ yankreg_T *yb;
int name;
- int attr;
- char_u *arg = eap->arg;
+ char_u *arg = eap->arg;
int clen;
if (arg != NULL && *arg == NUL)
arg = NULL;
- attr = hl_attr(HLF_8);
+ int attr = hl_attr(HLF_8);
/* Highlight title */
MSG_PUTS_TITLE(_("\n--- Registers ---"));
- for (i = -1; i < NUM_REGISTERS && !got_int; i++) {
+ for (int i = -1; i < NUM_REGISTERS && !got_int; i++) {
name = get_register_name(i);
if (arg != NULL && vim_strchr(arg, name) == NULL) {
@@ -3261,8 +3333,8 @@ void ex_display(exarg_T *eap)
msg_putchar(name);
MSG_PUTS(" ");
- n = (int)Columns - 6;
- for (j = 0; j < yb->y_size && n > 1; ++j) {
+ int n = (int)Columns - 6;
+ for (size_t j = 0; j < yb->y_size && n > 1; j++) {
if (j) {
MSG_PUTS_ATTR("^J", attr);
n -= 2;
@@ -3438,7 +3510,7 @@ static char_u *skip_comment(char_u *line, int process, int include_space, int *i
// to set those marks.
//
// return FAIL for failure, OK otherwise
-int do_join(long count,
+int do_join(size_t count,
int insert_space,
int save_undo,
int use_formatoptions,
@@ -3461,24 +3533,21 @@ int do_join(long count,
&& has_format_option(FO_REMOVE_COMS);
int prev_was_comment;
- assert(count > 1);
- if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
- (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
+ if (save_undo && u_save(curwin->w_cursor.lnum - 1,
+ curwin->w_cursor.lnum + (linenr_T)count) == FAIL) {
return FAIL;
-
- /* Allocate an array to store the number of spaces inserted before each
- * line. We will use it to pre-compute the length of the new line and the
- * proper placement of each original line in the new one. */
+ }
+ // Allocate an array to store the number of spaces inserted before each
+ // line. We will use it to pre-compute the length of the new line and the
+ // proper placement of each original line in the new one.
spaces = xcalloc(count, 1);
if (remove_comments) {
comments = xcalloc(count, sizeof(*comments));
}
- /*
- * Don't move anything, just compute the final line length
- * and setup the array of space strings lengths
- */
- for (t = 0; t < count; ++t) {
+ // Don't move anything, just compute the final line length
+ // and setup the array of space strings lengths
+ for (t = 0; t < (linenr_T)count; t++) {
curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
if (t == 0 && setmark) {
// Set the '[ mark.
@@ -3558,7 +3627,7 @@ int do_join(long count,
* column. This is not Vi compatible, but Vi deletes the marks, thus that
* should not really be a problem.
*/
- for (t = count - 1;; --t) {
+ for (t = (linenr_T)count - 1;; t--) {
cend -= currsize;
memmove(cend, curr, (size_t)currsize);
if (spaces[t] > 0) {
@@ -3595,8 +3664,8 @@ int do_join(long count,
* have moved up (last line deleted), so the current lnum is kept in t.
*/
t = curwin->w_cursor.lnum;
- ++curwin->w_cursor.lnum;
- del_lines(count - 1, FALSE);
+ curwin->w_cursor.lnum++;
+ del_lines((long)count - 1, false);
curwin->w_cursor.lnum = t;
/*
@@ -3778,8 +3847,8 @@ fex_format (
* Set v:lnum to the first line number and v:count to the number of lines.
* Set v:char to the character to be inserted (can be NUL).
*/
- set_vim_var_nr(VV_LNUM, lnum);
- set_vim_var_nr(VV_COUNT, count);
+ set_vim_var_nr(VV_LNUM, (varnumber_T)lnum);
+ set_vim_var_nr(VV_COUNT, (varnumber_T)count);
set_vim_var_char(c);
/*
@@ -4473,7 +4542,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1)
firstdigit = 'a';
}
} else {
- firstdigit -= Prenum1;
+ firstdigit -= (int)Prenum1;
}
} else {
if (26 - CharOrd(firstdigit) - 1 < Prenum1) {
@@ -4483,7 +4552,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1)
firstdigit = 'z';
}
} else {
- firstdigit += Prenum1;
+ firstdigit += (int)Prenum1;
}
}
curwin->w_cursor.col = col;
@@ -4591,12 +4660,12 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1)
// Prepare the leading characters in buf1[].
// When there are many leading zeros it could be very long.
// Allocate a bit too much.
- buf1 = xmalloc(length + NUMBUFLEN);
+ buf1 = xmalloc((size_t)length + NUMBUFLEN);
if (buf1 == NULL) {
goto theend;
}
ptr = buf1;
- if (negative && (!visual || (visual && was_positive))) {
+ if (negative && (!visual || was_positive)) {
*ptr++ = '-';
}
if (pre) {
@@ -4604,7 +4673,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1)
length--;
}
if (pre == 'b' || pre == 'B' || pre == 'x' || pre == 'X') {
- *ptr++ = pre;
+ *ptr++ = (char_u)pre;
length--;
}
@@ -4668,6 +4737,8 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1)
theend:
if (visual) {
curwin->w_cursor = save_cursor;
+ } else if (did_change) {
+ curwin->w_set_curswant = true;
}
return did_change;
@@ -4767,8 +4838,6 @@ static void *get_reg_wrap_one_line(char_u *s, int flags)
/// @returns NULL for error.
void *get_reg_contents(int regname, int flags)
{
- long i;
-
// Don't allow using an expression register inside an expression.
if (regname == '=') {
if (flags & kGRegNoExpr) {
@@ -4804,7 +4873,7 @@ void *get_reg_contents(int regname, int flags)
if (flags & kGRegList) {
list_T *list = list_alloc();
- for (int i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
list_append_string(list, reg->y_array[i], -1);
}
@@ -4815,7 +4884,7 @@ void *get_reg_contents(int regname, int flags)
* Compute length of resulting string.
*/
size_t len = 0;
- for (i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
len += STRLEN(reg->y_array[i]);
/*
* Insert a newline between lines and after last line if
@@ -4832,7 +4901,7 @@ void *get_reg_contents(int regname, int flags)
* Copy the lines of the yank register into the string.
*/
len = 0;
- for (i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
STRCPY(retval + len, reg->y_array[i]);
len += STRLEN(retval + len);
@@ -4888,7 +4957,7 @@ void write_reg_contents(int name, const char_u *str, ssize_t len,
void write_reg_contents_lst(int name, char_u **strings, int maxlen,
bool must_append, MotionType yank_type,
- long block_len)
+ colnr_T block_len)
{
if (name == '/' || name == '=') {
char_u *s = strings[0];
@@ -4913,7 +4982,8 @@ void write_reg_contents_lst(int name, char_u **strings, int maxlen,
return;
}
- str_to_reg(reg, yank_type, (char_u *) strings, -1, block_len, true);
+ str_to_reg(reg, yank_type, (char_u *)strings, STRLEN((char_u *)strings),
+ block_len, true);
finish_write_reg(name, reg, old_y_previous);
}
@@ -4941,7 +5011,7 @@ void write_reg_contents_ex(int name,
ssize_t len,
bool must_append,
MotionType yank_type,
- long block_len)
+ colnr_T block_len)
{
if (len < 0) {
len = (ssize_t) STRLEN(str);
@@ -4991,7 +5061,7 @@ void write_reg_contents_ex(int name,
// Copy the input string into the adjusted memory at the specified
// offset.
expr_line = xrealloc(expr_line, totlen + 1);
- memcpy(expr_line + offset, str, (size_t) len);
+ memcpy(expr_line + offset, str, (size_t)len);
expr_line[totlen] = NUL;
return;
@@ -5005,7 +5075,7 @@ void write_reg_contents_ex(int name,
if (!(reg = init_write_reg(name, &old_y_previous, must_append))) {
return;
}
- str_to_reg(reg, yank_type, str, len, block_len, false);
+ str_to_reg(reg, yank_type, str, (size_t)len, block_len, false);
finish_write_reg(name, reg, old_y_previous);
}
@@ -5061,7 +5131,7 @@ static void str_to_reg(yankreg_T *y_ptr, MotionType yank_type,
(y_ptr->y_size + newlines) * sizeof(char_u *));
y_ptr->y_array = pp;
- linenr_T lnum = y_ptr->y_size; // The current line number.
+ size_t lnum = y_ptr->y_size; // The current line number.
// If called with `blocklen < 0`, we have to update the yank reg's width.
size_t maxlen = 0;
@@ -5080,7 +5150,9 @@ static void str_to_reg(yankreg_T *y_ptr, MotionType yank_type,
for (const char_u *start = str, *end = str + len;
start < end + extraline;
start += line_len + 1, lnum++) {
- line_len = (const char_u *) xmemscan(start, '\n', end - start) - start;
+ assert(end - start >= 0);
+ line_len = (size_t)((char_u *)xmemscan(start, '\n',
+ (size_t)(end - start)) - start);
if (line_len > maxlen) {
maxlen = line_len;
}
@@ -5090,7 +5162,7 @@ static void str_to_reg(yankreg_T *y_ptr, MotionType yank_type,
char_u *s = xmallocz(line_len + extra);
memcpy(s, pp[lnum], extra);
memcpy(s + extra, start, line_len);
- ssize_t s_len = extra + line_len;
+ size_t s_len = extra + line_len;
if (append) {
xfree(pp[lnum]);
@@ -5427,7 +5499,8 @@ static yankreg_T *adjust_clipboard_name(int *name, bool quiet, bool writing)
if (*name == '*' || *name == '+') {
if(!eval_has_provider("clipboard")) {
if (!quiet) {
- EMSG("clipboard: provider is not available");
+ EMSG("clipboard: No provider. Try \":CheckHealth\" or "
+ "\":h clipboard\".");
}
return NULL;
}
@@ -5435,7 +5508,8 @@ static yankreg_T *adjust_clipboard_name(int *name, bool quiet, bool writing)
} else if ((*name == NUL) && (cb_flags & CB_UNNAMEDMASK)) {
if(!eval_has_provider("clipboard")) {
if (!quiet && !clipboard_didwarn_unnamed) {
- msg((char_u*)"clipboard: provider not available, ignoring clipboard=unnamed[plus]");
+ msg((char_u *)"clipboard: No provider. Try \":CheckHealth\" or "
+ "\":h clipboard\".");
clipboard_didwarn_unnamed = true;
}
return NULL;
@@ -5450,7 +5524,7 @@ static yankreg_T *adjust_clipboard_name(int *name, bool quiet, bool writing)
yankreg_T *target;
if (cb_flags & CB_UNNAMEDPLUS) {
- *name = cb_flags & CB_UNNAMED ? '"': '+';
+ *name = (cb_flags & CB_UNNAMED && writing) ? '"': '+';
target = &y_regs[PLUS_REGISTER];
} else {
*name = '*';
@@ -5474,7 +5548,7 @@ static bool get_clipboard(int name, yankreg_T **target, bool quiet)
free_register(reg);
list_T *args = list_alloc();
- char_u regname = name;
+ char_u regname = (char_u)name;
list_append_string(args, &regname, 1);
typval_T result = eval_call_provider("clipboard", "get", args);
@@ -5519,8 +5593,8 @@ static bool get_clipboard(int name, yankreg_T **target, bool quiet)
reg->y_type = kMTUnknown;
}
- reg->y_array = xcalloc(lines->lv_len, sizeof(uint8_t *));
- reg->y_size = lines->lv_len;
+ reg->y_array = xcalloc((size_t)lines->lv_len, sizeof(uint8_t *));
+ reg->y_size = (size_t)lines->lv_len;
reg->additional_data = NULL;
reg->timestamp = 0;
// Timestamp is not saved for clipboard registers because clipboard registers
@@ -5551,14 +5625,15 @@ static bool get_clipboard(int name, yankreg_T **target, bool quiet)
}
if (reg->y_type == kMTBlockWise) {
- int maxlen = 0;
- for (int i = 0; i < reg->y_size; i++) {
- int rowlen = STRLEN(reg->y_array[i]);
+ size_t maxlen = 0;
+ for (size_t i = 0; i < reg->y_size; i++) {
+ size_t rowlen = STRLEN(reg->y_array[i]);
if (rowlen > maxlen) {
maxlen = rowlen;
}
}
- reg->y_width = maxlen-1;
+ assert(maxlen <= INT_MAX);
+ reg->y_width = (int)maxlen - 1;
}
*target = reg;
@@ -5566,7 +5641,7 @@ static bool get_clipboard(int name, yankreg_T **target, bool quiet)
err:
if (reg->y_array) {
- for (int i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
xfree(reg->y_array[i]);
}
xfree(reg->y_array);
@@ -5590,7 +5665,7 @@ static void set_clipboard(int name, yankreg_T *reg)
list_T *lines = list_alloc();
- for (int i = 0; i < reg->y_size; i++) {
+ for (size_t i = 0; i < reg->y_size; i++) {
list_append_string(lines, reg->y_array[i], -1);
}
@@ -5615,26 +5690,26 @@ static void set_clipboard(int name, yankreg_T *reg)
}
list_append_string(args, &regtype, 1);
- char_u regname = name;
+ char_u regname = (char_u)name;
list_append_string(args, &regname, 1);
(void)eval_call_provider("clipboard", "set", args);
}
-/// Avoid clipboard (slow) during batch operations (:global).
-void start_global_changes(void)
+/// Avoid clipboard (slow) during batch operations (i.e., a script).
+void start_batch_changes(void)
{
- if (++global_change_count > 1) {
+ if (++batch_change_count > 1) {
return;
}
clipboard_delay_update = true;
clipboard_needs_update = false;
}
-/// Update the clipboard after :global changes finished.
-void end_global_changes(void)
+/// Update the clipboard after batch changes finished.
+void end_batch_changes(void)
{
- if (--global_change_count > 0) {
+ if (--batch_change_count > 0) {
// recursive
return;
}
@@ -5678,8 +5753,8 @@ const void *op_register_iter(const void *const iter, char *const name,
if (iter_reg - &(y_regs[0]) == NUM_SAVED_REGISTERS || reg_empty(iter_reg)) {
return NULL;
}
- size_t iter_off = iter_reg - &(y_regs[0]);
- *name = (char) get_register_name(iter_off);
+ int iter_off = (int)(iter_reg - &(y_regs[0]));
+ *name = (char)get_register_name(iter_off);
*reg = *iter_reg;
while (++iter_reg - &(y_regs[0]) < NUM_SAVED_REGISTERS) {
if (!reg_empty(iter_reg)) {
diff --git a/src/nvim/ops.h b/src/nvim/ops.h
index 8c8a586957..44df2e9e0c 100644
--- a/src/nvim/ops.h
+++ b/src/nvim/ops.h
@@ -79,7 +79,7 @@ enum GRegFlags {
/// Definition of one register
typedef struct yankreg {
char_u **y_array; ///< Pointer to an array of line pointers.
- linenr_T y_size; ///< Number of lines in y_array.
+ size_t y_size; ///< Number of lines in y_array.
MotionType y_type; ///< Register type
colnr_T y_width; ///< Register width (only valid for y_type == kBlockWise).
Timestamp timestamp; ///< Time when register was last modified.
diff --git a/src/nvim/option.c b/src/nvim/option.c
index 45ebb4fa4c..a4e7da770e 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -213,12 +213,12 @@ typedef struct vimoption {
#define P_VI_DEF 0x400U /* Use Vi default for Vim */
#define P_VIM 0x800U /* Vim option */
-/* when option changed, what to display: */
-#define P_RSTAT 0x1000U /* redraw status lines */
-#define P_RWIN 0x2000U /* redraw current window */
-#define P_RBUF 0x4000U /* redraw current buffer */
-#define P_RALL 0x6000U /* redraw all windows */
-#define P_RCLR 0x7000U /* clear and redraw all */
+// when option changed, what to display:
+#define P_RSTAT 0x1000U ///< redraw status lines
+#define P_RWIN 0x2000U ///< redraw current window and recompute text
+#define P_RBUF 0x4000U ///< redraw current buffer and recompute text
+#define P_RALL 0x6000U ///< redraw all windows
+#define P_RCLR 0x7000U ///< clear and redraw all
#define P_COMMA 0x8000U ///< comma separated list
#define P_ONECOMMA 0x18000U ///< P_COMMA and cannot have two consecutive
@@ -236,6 +236,9 @@ typedef struct vimoption {
#define P_NO_ML 0x2000000U ///< not allowed in modeline
#define P_CURSWANT 0x4000000U ///< update curswant required; not needed
///< when there is a redraw flag
+#define P_NO_DEF_EXP 0x8000000U ///< Do not expand default value.
+
+#define P_RWINONLY 0x10000000U ///< only redraw current window
#define HIGHLIGHT_INIT \
"8:SpecialKey,~:EndOfBuffer,z:TermCursor,Z:TermCursorNC,@:NonText," \
@@ -245,7 +248,7 @@ typedef struct vimoption {
"A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal," \
"B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel," \
"x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill," \
- "!:CursorColumn,.:CursorLine,o:ColorColumn"
+ "!:CursorColumn,.:CursorLine,o:ColorColumn,q:QuickFixLine"
/*
* options[] is initialized here.
@@ -287,6 +290,8 @@ static char *(p_fdm_values[]) = { "manual", "expr", "marker", "indent",
static char *(p_fcl_values[]) = { "all", NULL };
static char *(p_cot_values[]) = { "menu", "menuone", "longest", "preview",
"noinsert", "noselect", NULL };
+static char *(p_icm_values[]) = { "nosplit", "split", NULL };
+static char *(p_scl_values[]) = { "yes", "no", "auto", NULL };
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "option.c.generated.h"
@@ -520,6 +525,8 @@ static void set_runtimepath_default(void)
#undef SITE_SIZE
#undef AFTER_SIZE
set_string_default("runtimepath", rtp, true);
+ // Make a copy of 'rtp' for 'packpath'
+ set_string_default("packpath", rtp, false);
xfree(data_dirs);
xfree(config_dirs);
xfree(data_home);
@@ -676,15 +683,18 @@ void set_init_1(void)
#endif
false);
- char *backupdir = stdpaths_user_data_subpath("backup", 0);
+ char *backupdir = stdpaths_user_data_subpath("backup", 0, true);
const size_t backupdir_len = strlen(backupdir);
backupdir = xrealloc(backupdir, backupdir_len + 3);
memmove(backupdir + 2, backupdir, backupdir_len + 1);
memmove(backupdir, ".,", 2);
- set_string_default("viewdir", stdpaths_user_data_subpath("view", 0), true);
+ set_string_default("viewdir", stdpaths_user_data_subpath("view", 0, true),
+ true);
set_string_default("backupdir", backupdir, true);
- set_string_default("directory", stdpaths_user_data_subpath("swap", 2), true);
- set_string_default("undodir", stdpaths_user_data_subpath("undo", 0), true);
+ set_string_default("directory", stdpaths_user_data_subpath("swap", 2, true),
+ true);
+ set_string_default("undodir", stdpaths_user_data_subpath("undo", 0, true),
+ true);
// Set default for &runtimepath. All necessary expansions are performed in
// this function.
set_runtimepath_default();
@@ -726,6 +736,9 @@ void set_init_1(void)
* default.
*/
for (opt_idx = 0; options[opt_idx].fullname; opt_idx++) {
+ if (options[opt_idx].flags & P_NO_DEF_EXP) {
+ continue;
+ }
char *p;
if ((options[opt_idx].flags & P_GETTEXT)
&& options[opt_idx].var != NULL) {
@@ -771,14 +784,11 @@ void set_init_1(void)
}
fenc_default = p;
- // Initialize multibyte (utf-8) handling
- mb_init();
-
- // Don't change &encoding when resetting to defaults with ":set all&".
- opt_idx = findoption((char_u *)"encoding");
- if (opt_idx >= 0) {
- options[opt_idx].flags |= P_NODEFAULT;
- }
+#ifdef HAVE_WORKING_LIBINTL
+ // GNU gettext 0.10.37 supports this feature: set the codeset used for
+ // translated messages independently from the current locale.
+ (void)bind_textdomain_codeset(PROJECT_NAME, (char *)p_enc);
+#endif
/* Set the default for 'helplang'. */
set_helplang_default(get_mess_lang());
@@ -1023,6 +1033,15 @@ void set_init_3(void)
xfree(p);
}
+ if (bufempty()) {
+ int idx_ffs = findoption((char_u *)"ffs");
+
+ // Apply the first entry of 'fileformats' to the initial buffer.
+ if (idx_ffs >= 0 && (options[idx_ffs].flags & P_WAS_SET)) {
+ set_fileformat(default_fileformat(), OPT_LOCAL);
+ }
+ }
+
set_title_defaults();
}
@@ -1473,16 +1492,19 @@ do_set (
* default value was already expanded, only
* required when an environment variable was set
* later */
- if (newval == NULL)
+ new_value_alloced = true;
+ if (newval == NULL) {
newval = empty_option;
- else {
+ } else if (!(options[opt_idx].flags | P_NO_DEF_EXP)) {
s = option_expand(opt_idx, newval);
- if (s == NULL)
+ if (s == NULL) {
s = newval;
+ }
newval = vim_strsave(s);
+ } else {
+ newval = (char_u *)xstrdup((char *)newval);
}
- new_value_alloced = TRUE;
- } else if (nextchar == '<') { /* set to global val */
+ } else if (nextchar == '<') { // set to global val
newval = vim_strsave(*(char_u **)get_varp_scope(
&(options[opt_idx]), OPT_GLOBAL));
new_value_alloced = TRUE;
@@ -1708,13 +1730,25 @@ do_set (
}
if (flags & P_FLAGLIST) {
- /* Remove flags that appear twice. */
- for (s = newval; *s; ++s)
- if ((!(flags & P_COMMA) || *s != ',')
- && vim_strchr(s + 1, *s) != NULL) {
- STRMOVE(s, s + 1);
- --s;
+ // Remove flags that appear twice.
+ for (s = newval; *s; s++) {
+ // if options have P_FLAGLIST and P_ONECOMMA such as
+ // 'whichwrap'
+ if (flags & P_ONECOMMA) {
+ if (*s != ',' && *(s + 1) == ','
+ && vim_strchr(s + 2, *s) != NULL) {
+ // Remove the duplicated value and the next comma.
+ STRMOVE(s, s + 2);
+ s -= 2;
+ }
+ } else {
+ if ((!(flags & P_COMMA) || *s != ',')
+ && vim_strchr(s + 1, *s) != NULL) {
+ STRMOVE(s, s + 1);
+ s--;
+ }
}
+ }
}
if (save_arg != NULL) /* number for 'whichwrap' */
@@ -2020,13 +2054,15 @@ static char_u *option_expand(int opt_idx, char_u *val)
if (!(options[opt_idx].flags & P_EXPAND) || options[opt_idx].var == NULL)
return NULL;
- /* If val is longer than MAXPATHL no meaningful expansion can be done,
- * expand_env() would truncate the string. */
- if (val != NULL && STRLEN(val) > MAXPATHL)
- return NULL;
-
- if (val == NULL)
+ if (val == NULL) {
val = *(char_u **)options[opt_idx].var;
+ }
+
+ // If val is longer than MAXPATHL no meaningful expansion can be done,
+ // expand_env() would truncate the string.
+ if (val == NULL || STRLEN(val) > MAXPATHL) {
+ return NULL;
+ }
/*
* Expanding this with NameBuff, expand_env() must not be passed IObuff.
@@ -2129,6 +2165,7 @@ void check_buf_options(buf_T *buf)
check_string_option(&buf->b_p_nf);
check_string_option(&buf->b_p_qe);
check_string_option(&buf->b_p_syn);
+ check_string_option(&buf->b_s.b_syn_isk);
check_string_option(&buf->b_s.b_p_spc);
check_string_option(&buf->b_s.b_p_spf);
check_string_option(&buf->b_s.b_p_spl);
@@ -2313,50 +2350,46 @@ set_string_option_global (
}
}
-/*
- * Set a string option to a new value, and handle the effects.
- *
- * Returns NULL on success or error message on error.
- */
-static char_u *
-set_string_option (
- int opt_idx,
- char_u *value,
- int opt_flags /* OPT_LOCAL and/or OPT_GLOBAL */
-)
+/// Set a string option to a new value, handling the effects
+///
+/// @param[in] opt_idx Option to set.
+/// @param[in] value New value.
+/// @param[in] opt_flags Option flags: expected to contain #OPT_LOCAL and/or
+/// #OPT_GLOBAL.
+///
+/// @return NULL on success, error message on error.
+static char *set_string_option(const int opt_idx, const char *const value,
+ const int opt_flags)
+ FUNC_ATTR_NONNULL_ARG(2) FUNC_ATTR_WARN_UNUSED_RESULT
{
- char_u *s;
- char_u **varp;
- char_u *oldval;
- char *saved_oldval = NULL;
- char_u *r = NULL;
-
- if (options[opt_idx].var == NULL) /* don't set hidden option */
+ if (options[opt_idx].var == NULL) { // don't set hidden option
return NULL;
+ }
- s = vim_strsave(value);
- varp = (char_u **)get_varp_scope(&(options[opt_idx]),
- (opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0
- ? (((int)options[opt_idx].indir & PV_BOTH)
- ? OPT_GLOBAL : OPT_LOCAL)
- : opt_flags);
- oldval = *varp;
+ char *const s = xstrdup(value);
+ char **const varp = (char **)get_varp_scope(
+ &(options[opt_idx]),
+ ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0
+ ? (((int)options[opt_idx].indir & PV_BOTH)
+ ? OPT_GLOBAL : OPT_LOCAL)
+ : opt_flags));
+ char *const oldval = *varp;
*varp = s;
- if (!starting) {
- saved_oldval = xstrdup((char *) oldval);
- }
+ char *const saved_oldval = (starting ? NULL : xstrdup(oldval));
- if ((r = did_set_string_option(opt_idx, varp, (int)true, oldval, NULL,
- opt_flags)) == NULL)
- did_set_option(opt_idx, opt_flags, TRUE);
+ char *const r = (char *)did_set_string_option(
+ opt_idx, (char_u **)varp, (int)true, (char_u *)oldval, NULL, opt_flags);
+ if (r == NULL) {
+ did_set_option(opt_idx, opt_flags, true);
+ }
// call autocommand after handling side effects
if (saved_oldval != NULL) {
char buf_type[7];
vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s",
(opt_flags & OPT_LOCAL) ? "local" : "global");
- set_vim_var_string(VV_OPTION_NEW, (char *) (*varp), -1);
+ set_vim_var_string(VV_OPTION_NEW, (char *)(*varp), -1);
set_vim_var_string(VV_OPTION_OLD, saved_oldval, -1);
set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
apply_autocmds(EVENT_OPTIONSET,
@@ -2369,6 +2402,18 @@ set_string_option (
return r;
}
+/// Return true if "val" is a valid 'filetype' name.
+/// Also used for 'syntax' and 'keymap'.
+static bool valid_filetype(char_u *val)
+{
+ for (char_u *s = val; *s != NUL; s++) {
+ if (!ASCII_ISALNUM(*s) && vim_strchr((char_u *)".-_", *s) == NULL) {
+ return false;
+ }
+ }
+ return true;
+}
+
/*
* Handle string options that need some action to perform when changed.
* Returns NULL for success, or an error message for an error.
@@ -2442,16 +2487,13 @@ did_set_string_option (
else if (varp == &curwin->w_p_briopt) {
if (briopt_check(curwin) == FAIL)
errmsg = e_invarg;
- }
- /*
- * 'isident', 'iskeyword', 'isprint or 'isfname' option: refill chartab[]
- * If the new option is invalid, use old value. 'lisp' option: refill
- * chartab[] for '-' char
- */
- else if ( varp == &p_isi
+ } else if (varp == &p_isi
|| varp == &(curbuf->b_p_isk)
|| varp == &p_isp
|| varp == &p_isf) {
+ // 'isident', 'iskeyword', 'isprint or 'isfname' option: refill g_chartab[]
+ // If the new option is invalid, use old value. 'lisp' option: refill
+ // g_chartab[] for '-' char
if (init_chartab() == FAIL) {
did_chartab = TRUE; /* need to restore it below */
errmsg = e_invarg; /* error in value */
@@ -2510,15 +2552,15 @@ did_set_string_option (
else if (varp == &p_sbo) {
if (check_opt_strings(p_sbo, p_scbopt_values, TRUE) != OK)
errmsg = e_invarg;
- }
- /* 'ambiwidth' */
- else if (varp == &p_ambw) {
- if (check_opt_strings(p_ambw, p_ambw_values, FALSE) != OK)
+ } else if (varp == &p_ambw || (int *)varp == &p_emoji) {
+ // 'ambiwidth'
+ if (check_opt_strings(p_ambw, p_ambw_values, false) != OK) {
errmsg = e_invarg;
- else if (set_chars_option(&p_lcs) != NULL)
+ } else if (set_chars_option(&p_lcs) != NULL) {
errmsg = (char_u *)_("E834: Conflicts with value of 'listchars'");
- else if (set_chars_option(&p_fcs) != NULL)
+ } else if (set_chars_option(&p_fcs) != NULL) {
errmsg = (char_u *)_("E835: Conflicts with value of 'fillchars'");
+ }
}
/* 'background' */
else if (varp == &p_bg) {
@@ -2563,19 +2605,17 @@ did_set_string_option (
errmsg = e_invarg;
/* 'encoding' and 'fileencoding' */
} else if (varp == &p_enc || gvarp == &p_fenc) {
- if (varp == &p_enc && did_source_startup_scripts) {
- errmsg = e_afterinit;
- } else if (gvarp == &p_fenc) {
- if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL)
+ if (gvarp == &p_fenc) {
+ if (!MODIFIABLE(curbuf) && opt_flags != OPT_GLOBAL) {
errmsg = e_modifiable;
- else if (vim_strchr(*varp, ',') != NULL)
- /* No comma allowed in 'fileencoding'; catches confusing it
- * with 'fileencodings'. */
+ } else if (vim_strchr(*varp, ',') != NULL) {
+ // No comma allowed in 'fileencoding'; catches confusing it
+ // with 'fileencodings'.
errmsg = e_invarg;
- else {
- /* May show a "+" in the title now. */
+ } else {
+ // May show a "+" in the title now.
redraw_titles();
- /* Add 'fileencoding' to the swap file. */
+ // Add 'fileencoding' to the swap file.
ml_setflags(curbuf);
}
}
@@ -2586,25 +2626,24 @@ did_set_string_option (
xfree(*varp);
*varp = p;
if (varp == &p_enc) {
- errmsg = mb_init();
- redraw_titles();
+ // only encoding=utf-8 allowed
+ if (STRCMP(p_enc, "utf-8") != 0) {
+ errmsg = e_invarg;
+ }
}
}
-
- if (errmsg == NULL) {
- /* When 'keymap' is used and 'encoding' changes, reload the keymap
- * (with another encoding). */
- if (varp == &p_enc && *curbuf->b_p_keymap != NUL)
- (void)keymap_init();
- }
} else if (varp == &p_penc) {
/* Canonize printencoding if VIM standard one */
p = enc_canonize(p_penc);
xfree(p_penc);
p_penc = p;
} else if (varp == &curbuf->b_p_keymap) {
- /* load or unload key mapping tables */
- errmsg = keymap_init();
+ if (!valid_filetype(*varp)) {
+ errmsg = e_invarg;
+ } else {
+ // load or unload key mapping tables
+ errmsg = keymap_init();
+ }
if (errmsg == NULL) {
if (*curbuf->b_p_keymap != NUL) {
@@ -2734,6 +2773,10 @@ did_set_string_option (
? ((shada_idx = findoption((char_u *) "shada")))
: shada_idx)
: opt_idx);
+ // Update free_oldval now that we have the opt_idx for 'shada', otherwise
+ // there would be a disconnect between the check for P_ALLOCED at the start
+ // of the function and the set of P_ALLOCED at the end of the fuction.
+ free_oldval = (options[opt_idx].flags & P_ALLOCED);
for (s = p_shada; *s; ) {
/* Check it's a valid character */
if (vim_strchr((char_u *)"!\"%'/:<@cfhnrs", *s) == NULL) {
@@ -2967,6 +3010,11 @@ did_set_string_option (
} else {
completeopt_was_set();
}
+ } else if (varp == &curwin->w_p_scl) {
+ // 'signcolumn'
+ if (check_opt_strings(*varp, p_scl_values, false) != OK) {
+ errmsg = e_invarg;
+ }
}
/* 'pastetoggle': translate key codes like in a mapping */
else if (varp == &p_pt) {
@@ -3093,9 +3141,21 @@ did_set_string_option (
else if (gvarp == &p_cino) {
/* TODO: recognize errors */
parse_cino(curbuf);
- }
- /* Options that are a list of flags. */
- else {
+ // inccommand
+ } else if (varp == &p_icm) {
+ if (check_opt_strings(p_icm, p_icm_values, false) != OK) {
+ errmsg = e_invarg;
+ }
+ } else if (gvarp == &p_ft) {
+ if (!valid_filetype(*varp)) {
+ errmsg = e_invarg;
+ }
+ } else if (gvarp == &p_syn) {
+ if (!valid_filetype(*varp)) {
+ errmsg = e_invarg;
+ }
+ } else {
+ // Options that are a list of flags.
p = NULL;
if (varp == &p_ww)
p = (char_u *)WW_ALL;
@@ -3190,8 +3250,9 @@ did_set_string_option (
for (p = q; *p != NUL; ++p)
if (vim_strchr((char_u *)"_.,", *p) != NULL)
break;
- vim_snprintf((char *)fname, 200, "spell/%.*s.vim", (int)(p - q), q);
- source_runtime(fname, TRUE);
+ vim_snprintf((char *)fname, sizeof(fname), "spell/%.*s.vim",
+ (int)(p - q), q);
+ source_runtime(fname, DIP_ALL);
}
}
@@ -3402,9 +3463,10 @@ char_u *check_stl_option(char_u *s)
if (!*s)
break;
s++;
- if (*s != '%' && *s != ')')
- ++itemcnt;
- if (*s == '%' || *s == STL_TRUNCMARK || *s == STL_MIDDLEMARK) {
+ if (*s != '%' && *s != ')') {
+ itemcnt++;
+ }
+ if (*s == '%' || *s == STL_TRUNCMARK || *s == STL_SEPARATE) {
s++;
continue;
}
@@ -3648,14 +3710,16 @@ set_bool_option (
/* when 'insertmode' is set from an autocommand need to do work here */
else if ((int *)varp == &p_im) {
if (p_im) {
- if ((State & INSERT) == 0)
- need_start_insertmode = TRUE;
- stop_insert_mode = FALSE;
- } else {
- need_start_insertmode = FALSE;
- stop_insert_mode = TRUE;
- if (restart_edit != 0 && mode_displayed)
- clear_cmdline = TRUE; /* remove "(insert)" */
+ if ((State & INSERT) == 0) {
+ need_start_insertmode = true;
+ }
+ stop_insert_mode = false;
+ } else if (old_value) { // only reset if it was set previously
+ need_start_insertmode = false;
+ stop_insert_mode = true;
+ if (restart_edit != 0 && mode_displayed) {
+ clear_cmdline = true; // remove "(insert)"
+ }
restart_edit = 0;
}
}
@@ -3685,23 +3749,19 @@ set_bool_option (
}
}
}
- }
-
- /*
- * When 'lisp' option changes include/exclude '-' in
- * keyword characters.
- */
- else if (varp == (char_u *)&(curbuf->b_p_lisp)) {
- (void)buf_init_chartab(curbuf, FALSE); /* ignore errors */
- }
- /* when 'title' changed, may need to change the title; same for 'icon' */
- else if ((int *)varp == &p_title) {
- did_set_title(FALSE);
+ } else if (varp == (char_u *)&(curbuf->b_p_lisp)) {
+ // When 'lisp' option changes include/exclude '-' in
+ // keyword characters.
+ (void)buf_init_chartab(curbuf, false); // ignore errors
+ } else if ((int *)varp == &p_title) {
+ // when 'title' changed, may need to change the title; same for 'icon'
+ did_set_title(false);
} else if ((int *)varp == &p_icon) {
- did_set_title(TRUE);
- } else if ((bool *)varp == &curbuf->b_changed) {
- if (!value)
- save_file_ff(curbuf); /* Buffer is unchanged */
+ did_set_title(true);
+ } else if ((int *)varp == &curbuf->b_changed) {
+ if (!value) {
+ save_file_ff(curbuf); // Buffer is unchanged
+ }
redraw_titles();
modified_was_set = value;
}
@@ -3729,11 +3789,12 @@ set_bool_option (
else if ((int *)varp == &curwin->w_p_wrap) {
if (curwin->w_p_wrap)
curwin->w_leftcol = 0;
- } else if ((bool *)varp == &p_ea) {
- if (p_ea && !old_value)
+ } else if ((int *)varp == &p_ea) {
+ if (p_ea && !old_value) {
win_equal(curwin, false, 0);
- } else if ((bool *)varp == &p_acd) {
- /* Change directories when the 'acd' option is set now. */
+ }
+ } else if ((int *)varp == &p_acd) {
+ // Change directories when the 'acd' option is set now.
do_autochdir();
}
/* 'diff' */
@@ -4029,15 +4090,16 @@ set_num_option (
errmsg = e_invarg;
curwin->w_p_fdc = 12;
}
- }
- /* 'shiftwidth' or 'tabstop' */
- else if (pp == &curbuf->b_p_sw || pp == &curbuf->b_p_ts) {
- if (foldmethodIsIndent(curwin))
+ // 'shiftwidth' or 'tabstop'
+ } else if (pp == &curbuf->b_p_sw || pp == (long *)&curbuf->b_p_ts) {
+ if (foldmethodIsIndent(curwin)) {
foldUpdateAll(curwin);
- /* When 'shiftwidth' changes, or it's zero and 'tabstop' changes:
- * parse 'cinoptions'. */
- if (pp == &curbuf->b_p_sw || curbuf->b_p_sw == 0)
+ }
+ // When 'shiftwidth' changes, or it's zero and 'tabstop' changes:
+ // parse 'cinoptions'.
+ if (pp == &curbuf->b_p_sw || curbuf->b_p_sw == 0) {
parse_cino(curbuf);
+ }
}
/* 'maxcombine' */
else if (pp == &p_mco) {
@@ -4297,17 +4359,24 @@ static void check_redraw(uint32_t flags)
bool doclear = (flags & P_RCLR) == P_RCLR;
bool all = ((flags & P_RALL) == P_RALL || doclear);
- if ((flags & P_RSTAT) || all) /* mark all status lines dirty */
+ if ((flags & P_RSTAT) || all) { // mark all status lines dirty
status_redraw_all();
+ }
- if ((flags & P_RBUF) || (flags & P_RWIN) || all)
+ if ((flags & P_RBUF) || (flags & P_RWIN) || all) {
changed_window_setting();
- if (flags & P_RBUF)
+ }
+ if (flags & P_RBUF) {
redraw_curbuf_later(NOT_VALID);
- if (doclear)
+ }
+ if (flags & P_RWINONLY) {
+ redraw_later(NOT_VALID);
+ }
+ if (doclear) {
redraw_all_later(CLEAR);
- else if (all)
+ } else if (all) {
redraw_all_later(NOT_VALID);
+ }
}
/// Find index for named option
@@ -4405,6 +4474,7 @@ bool get_tty_option(char *name, char **value)
if (is_tty_option(name)) {
if (value) {
+ // XXX: All other t_* options were removed in 3baba1e7.
*value = xstrdup("");
}
return true;
@@ -4490,10 +4560,11 @@ get_option_value (
else {
/* Special case: 'modified' is b_changed, but we also want to consider
* it set when 'ff' or 'fenc' changed. */
- if ((bool *)varp == &curbuf->b_changed)
+ if ((int *)varp == &curbuf->b_changed) {
*numval = curbufIsChanged();
- else
+ } else {
*numval = *(int *)varp;
+ }
}
return 1;
}
@@ -4652,26 +4723,28 @@ set_option_value (
EMSG(_(e_sandbox));
return NULL;
}
- if (flags & P_STRING)
- return set_string_option(opt_idx, string, opt_flags);
- else {
+ if (flags & P_STRING) {
+ const char *s = (const char *)string;
+ if (s == NULL) {
+ s = "";
+ }
+ return (char_u *)set_string_option(opt_idx, s, opt_flags);
+ } else {
varp = get_varp_scope(&(options[opt_idx]), opt_flags);
if (varp != NULL) { /* hidden option is not changed */
if (number == 0 && string != NULL) {
int idx;
- /* Either we are given a string or we are setting option
- * to zero. */
- for (idx = 0; string[idx] == '0'; ++idx)
- ;
+ // Either we are given a string or we are setting option
+ // to zero.
+ for (idx = 0; string[idx] == '0'; idx++) {}
if (string[idx] != NUL || idx == 0) {
- /* There's another character after zeros or the string
- * is empty. In both cases, we are trying to set a
- * num option using a string. */
+ // There's another character after zeros or the string
+ // is empty. In both cases, we are trying to set a
+ // num option using a string.
EMSG3(_("E521: Number required: &%s = '%s'"),
- name, string);
- return NULL; /* do nothing as we hit an error */
-
+ name, string);
+ return NULL; // do nothing as we hit an error
}
}
if (flags & P_NUM)
@@ -4724,7 +4797,6 @@ static int find_key_option(const char_u *arg)
return find_key_option_len(arg, STRLEN(arg));
}
-
/*
* if 'all' == 0: show changed options
* if 'all' == 1: show all normal options
@@ -4859,14 +4931,15 @@ showoneopt (
varp = get_varp_scope(p, opt_flags);
- /* for 'modified' we also need to check if 'ff' or 'fenc' changed. */
- if ((p->flags & P_BOOL) && ((bool *)varp == &curbuf->b_changed
- ? !curbufIsChanged() : !*(bool *)varp))
+ // for 'modified' we also need to check if 'ff' or 'fenc' changed.
+ if ((p->flags & P_BOOL) && ((int *)varp == &curbuf->b_changed
+ ? !curbufIsChanged() : !*(int *)varp)) {
MSG_PUTS("no");
- else if ((p->flags & P_BOOL) && *(int *)varp < 0)
+ } else if ((p->flags & P_BOOL) && *(int *)varp < 0) {
MSG_PUTS("--");
- else
+ } else {
MSG_PUTS(" ");
+ }
MSG_PUTS(p->fullname);
if (!(p->flags & P_BOOL)) {
msg_putchar('=');
@@ -5369,6 +5442,7 @@ static char_u *get_varp(vimoption_T *p)
case PV_UDF: return (char_u *)&(curbuf->b_p_udf);
case PV_WM: return (char_u *)&(curbuf->b_p_wm);
case PV_KMAP: return (char_u *)&(curbuf->b_p_keymap);
+ case PV_SCL: return (char_u *)&(curwin->w_p_scl);
default: EMSG(_("E356: get_varp ERROR"));
}
/* always return a valid pointer to avoid a crash! */
@@ -5446,7 +5520,8 @@ void copy_winopt(winopt_T *from, winopt_T *to)
to->wo_fde = vim_strsave(from->wo_fde);
to->wo_fdt = vim_strsave(from->wo_fdt);
to->wo_fmr = vim_strsave(from->wo_fmr);
- check_winopt(to); /* don't want NULL pointers */
+ to->wo_scl = vim_strsave(from->wo_scl);
+ check_winopt(to); // don't want NULL pointers
}
/*
@@ -5469,6 +5544,7 @@ static void check_winopt(winopt_T *wop)
check_string_option(&wop->wo_fde);
check_string_option(&wop->wo_fdt);
check_string_option(&wop->wo_fmr);
+ check_string_option(&wop->wo_scl);
check_string_option(&wop->wo_rlc);
check_string_option(&wop->wo_stl);
check_string_option(&wop->wo_cc);
@@ -5487,6 +5563,7 @@ void clear_winopt(winopt_T *wop)
clear_string_option(&wop->wo_fde);
clear_string_option(&wop->wo_fdt);
clear_string_option(&wop->wo_fmr);
+ clear_string_option(&wop->wo_scl);
clear_string_option(&wop->wo_rlc);
clear_string_option(&wop->wo_stl);
clear_string_option(&wop->wo_cc);
@@ -5606,6 +5683,7 @@ void buf_copy_options(buf_T *buf, int flags)
/* Don't copy 'syntax', it must be set */
buf->b_p_syn = empty_option;
buf->b_p_smc = p_smc;
+ buf->b_s.b_syn_isk = empty_option;
buf->b_s.b_p_spc = vim_strsave(p_spc);
(void)compile_cap_prog(&buf->b_s);
buf->b_s.b_p_spf = vim_strsave(p_spf);
@@ -5655,7 +5733,7 @@ void buf_copy_options(buf_T *buf, int flags)
buf->b_p_isk = save_p_isk;
else {
buf->b_p_isk = vim_strsave(p_isk);
- did_isk = TRUE;
+ did_isk = true;
buf->b_p_ts = p_ts;
buf->b_help = false;
if (buf->b_p_bt[0] == 'h')
@@ -5836,6 +5914,7 @@ set_context_in_set_cmd (
if (p == (char_u *)&p_bdir
|| p == (char_u *)&p_dir
|| p == (char_u *)&p_path
+ || p == (char_u *)&p_pp
|| p == (char_u *)&p_rtp
|| p == (char_u *)&p_cdpath
|| p == (char_u *)&p_vdir
@@ -6569,10 +6648,8 @@ int get_sw_value(buf_T *buf)
return (int)result;
}
-/*
- * Return the effective softtabstop value for the current buffer, using the
- * 'tabstop' value when 'softtabstop' is negative.
- */
+// Return the effective softtabstop value for the current buffer,
+// using the effective shiftwidth value when 'softtabstop' is negative.
int get_sts_value(void)
{
long result = curbuf->b_p_sts < 0 ? get_sw_value(curbuf) : curbuf->b_p_sts;
@@ -6698,3 +6775,184 @@ unsigned int get_bkc_value(buf_T *buf)
{
return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
}
+
+/// Return the current end-of-line type: EOL_DOS, EOL_UNIX or EOL_MAC.
+int get_fileformat(buf_T *buf)
+{
+ int c = *buf->b_p_ff;
+
+ if (buf->b_p_bin || c == 'u') {
+ return EOL_UNIX;
+ }
+ if (c == 'm') {
+ return EOL_MAC;
+ }
+ return EOL_DOS;
+}
+
+/// Like get_fileformat(), but override 'fileformat' with "p" for "++opt=val"
+/// argument.
+///
+/// @param eap can be NULL!
+int get_fileformat_force(buf_T *buf, exarg_T *eap)
+{
+ int c;
+
+ if (eap != NULL && eap->force_ff != 0) {
+ c = eap->cmd[eap->force_ff];
+ } else {
+ if ((eap != NULL && eap->force_bin != 0)
+ ? (eap->force_bin == FORCE_BIN) : buf->b_p_bin) {
+ return EOL_UNIX;
+ }
+ c = *buf->b_p_ff;
+ }
+ if (c == 'u') {
+ return EOL_UNIX;
+ }
+ if (c == 'm') {
+ return EOL_MAC;
+ }
+ return EOL_DOS;
+}
+
+/// Return the default fileformat from 'fileformats'.
+int default_fileformat(void)
+{
+ switch (*p_ffs) {
+ case 'm': return EOL_MAC;
+ case 'd': return EOL_DOS;
+ }
+ return EOL_UNIX;
+}
+
+/// Set the current end-of-line type to EOL_UNIX, EOL_MAC, or EOL_DOS.
+///
+/// Sets 'fileformat'.
+///
+/// @param eol_style End-of-line style.
+/// @param opt_flags OPT_LOCAL and/or OPT_GLOBAL
+void set_fileformat(int eol_style, int opt_flags)
+{
+ char *p = NULL;
+
+ switch (eol_style) {
+ case EOL_UNIX:
+ p = FF_UNIX;
+ break;
+ case EOL_MAC:
+ p = FF_MAC;
+ break;
+ case EOL_DOS:
+ p = FF_DOS;
+ break;
+ }
+
+ // p is NULL if "eol_style" is EOL_UNKNOWN.
+ if (p != NULL) {
+ set_string_option_direct((char_u *)"ff",
+ -1,
+ (char_u *)p,
+ OPT_FREE | opt_flags,
+ 0);
+ }
+
+ // This may cause the buffer to become (un)modified.
+ check_status(curbuf);
+ redraw_tabline = true;
+ need_maketitle = true; // Set window title later.
+}
+
+/// Skip to next part of an option argument: Skip space and comma.
+char_u *skip_to_option_part(char_u *p)
+{
+ if (*p == ',') {
+ p++;
+ }
+ while (*p == ' ') {
+ p++;
+ }
+ return p;
+}
+
+/// Isolate one part of a string option separated by `sep_chars`.
+///
+/// @param[in,out] option advanced to the next part
+/// @param[in,out] buf copy of the isolated part
+/// @param[in] maxlen length of `buf`
+/// @param[in] sep_chars chars that separate the option parts
+///
+/// @return length of `*option`
+size_t copy_option_part(char_u **option, char_u *buf, size_t maxlen,
+ char *sep_chars)
+{
+ size_t len = 0;
+ char_u *p = *option;
+
+ // skip '.' at start of option part, for 'suffixes'
+ if (*p == '.') {
+ buf[len++] = *p++;
+ }
+ while (*p != NUL && vim_strchr((char_u *)sep_chars, *p) == NULL) {
+ // Skip backslash before a separator character and space.
+ if (p[0] == '\\' && vim_strchr((char_u *)sep_chars, p[1]) != NULL) {
+ p++;
+ }
+ if (len < maxlen - 1) {
+ buf[len++] = *p;
+ }
+ p++;
+ }
+ buf[len] = NUL;
+
+ if (*p != NUL && *p != ',') { // skip non-standard separator
+ p++;
+ }
+ p = skip_to_option_part(p); // p points to next file name
+
+ *option = p;
+ return len;
+}
+
+/// Return TRUE when 'shell' has "csh" in the tail.
+int csh_like_shell(void)
+{
+ return strstr((char *)path_tail(p_sh), "csh") != NULL;
+}
+
+/// Return true when window "wp" has a column to draw signs in.
+bool signcolumn_on(win_T *wp)
+{
+ if (*wp->w_p_scl == 'n') {
+ return false;
+ }
+ if (*wp->w_p_scl == 'y') {
+ return true;
+ }
+ return wp->w_buffer->b_signlist != NULL;
+}
+
+/// Get window or buffer local options.
+dict_T * get_winbuf_options(int bufopt)
+{
+ dict_T *d = dict_alloc();
+
+ for (int opt_idx = 0; options[opt_idx].fullname; opt_idx++) {
+ struct vimoption *opt = &options[opt_idx];
+
+ if ((bufopt && (opt->indir & PV_BUF))
+ || (!bufopt && (opt->indir & PV_WIN))) {
+ char_u *varp = get_varp(opt);
+
+ if (varp != NULL) {
+ if (opt->flags & P_STRING) {
+ dict_add_nr_str(d, opt->fullname, 0L, *(char_u **)varp);
+ } else {
+ dict_add_nr_str(d, opt->fullname, *varp, NULL);
+ }
+ }
+ }
+ }
+
+ return d;
+}
diff --git a/src/nvim/option.h b/src/nvim/option.h
index 5c2b2662b5..60f14dea44 100644
--- a/src/nvim/option.h
+++ b/src/nvim/option.h
@@ -1,22 +1,25 @@
#ifndef NVIM_OPTION_H
#define NVIM_OPTION_H
+#include "nvim/ex_cmds_defs.h" // for exarg_T
+
/* flags for buf_copy_options() */
#define BCO_ENTER 1 /* going to enter the buffer */
#define BCO_ALWAYS 2 /* always copy the options */
#define BCO_NOHELP 4 /* don't touch the help related options */
-/*
- * "flags" values for option-setting functions.
- * When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
- * values, get local value.
- */
-#define OPT_FREE 1 /* free old value if it was allocated */
-#define OPT_GLOBAL 2 /* use global value */
-#define OPT_LOCAL 4 /* use local value */
-#define OPT_MODELINE 8 /* option in modeline */
-#define OPT_WINONLY 16 /* only set window-local options */
-#define OPT_NOWIN 32 /* don't set window-local options */
+/// Flags for option-setting functions
+///
+/// When OPT_GLOBAL and OPT_LOCAL are both missing, set both local and global
+/// values, get local value.
+typedef enum {
+ OPT_FREE = 1, ///< Free old value if it was allocated.
+ OPT_GLOBAL = 2, ///< Use global value.
+ OPT_LOCAL = 4, ///< Use local value.
+ OPT_MODELINE = 8, ///< Option in modeline.
+ OPT_WINONLY = 16, ///< Only set window-local options.
+ OPT_NOWIN = 32, ///< Don’t set window-local options.
+} OptionFlags;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "option.h.generated.h"
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index 904e97f8ca..32021da922 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -1,8 +1,6 @@
#ifndef NVIM_OPTION_DEFS_H
#define NVIM_OPTION_DEFS_H
-#include <stdbool.h>
-
#include "nvim/types.h"
#include "nvim/macros.h" // For EXTERN
@@ -258,7 +256,7 @@ enum {
STL_ARGLISTSTAT = 'a', ///< Argument list status as (x of y).
STL_PAGENUM = 'N', ///< Page number (when printing).
STL_VIM_EXPR = '{', ///< Start of expression to substitute.
- STL_MIDDLEMARK = '=', ///< Separation between left and right.
+ STL_SEPARATE = '=', ///< Separation between alignment sections.
STL_TRUNCMARK = '<', ///< Truncation mark if line is too long.
STL_USER_HL = '*', ///< Highlight from (User)1..9 or 0.
STL_HIGHLIGHT = '#', ///< Highlight name.
@@ -274,7 +272,7 @@ enum {
STL_HELPFLAG, STL_HELPFLAG_ALT, STL_FILETYPE, STL_FILETYPE_ALT, \
STL_PREVIEWFLAG, STL_PREVIEWFLAG_ALT, STL_MODIFIED, STL_MODIFIED_ALT, \
STL_QUICKFIX, STL_PERCENTAGE, STL_ALTPERCENT, STL_ARGLISTSTAT, STL_PAGENUM, \
- STL_VIM_EXPR, STL_MIDDLEMARK, STL_TRUNCMARK, STL_USER_HL, STL_HIGHLIGHT, \
+ STL_VIM_EXPR, STL_SEPARATE, STL_TRUNCMARK, STL_USER_HL, STL_HIGHLIGHT, \
STL_TABPAGENR, STL_TABCLOSENR, STL_CLICK_FUNC, \
0, \
})
@@ -296,16 +294,16 @@ enum {
* The following are actual variables for the options
*/
-EXTERN long p_aleph; /* 'aleph' */
-EXTERN bool p_acd; /* 'autochdir' */
-EXTERN char_u *p_ambw; /* 'ambiwidth' */
-EXTERN int p_ar; /* 'autoread' */
-EXTERN int p_aw; /* 'autowrite' */
-EXTERN int p_awa; /* 'autowriteall' */
-EXTERN char_u *p_bs; /* 'backspace' */
-EXTERN char_u *p_bg; /* 'background' */
-EXTERN int p_bk; /* 'backup' */
-EXTERN char_u *p_bkc; /* 'backupcopy' */
+EXTERN long p_aleph; // 'aleph'
+EXTERN int p_acd; // 'autochdir'
+EXTERN char_u *p_ambw; // 'ambiwidth'
+EXTERN int p_ar; // 'autoread'
+EXTERN int p_aw; // 'autowrite'
+EXTERN int p_awa; // 'autowriteall'
+EXTERN char_u *p_bs; // 'backspace'
+EXTERN char_u *p_bg; // 'background'
+EXTERN int p_bk; // 'backup'
+EXTERN char_u *p_bkc; // 'backupcopy'
EXTERN unsigned int bkc_flags; ///< flags from 'backupcopy'
#ifdef IN_OPTION_C
static char *(p_bkc_values[]) =
@@ -370,17 +368,17 @@ static char *(p_cb_values[]) = {"unnamed", "unnamedplus", NULL};
# define CB_UNNAMED 0x001
# define CB_UNNAMEDPLUS 0x002
# define CB_UNNAMEDMASK (CB_UNNAMED | CB_UNNAMEDPLUS)
-EXTERN long p_cwh; /* 'cmdwinheight' */
-EXTERN long p_ch; /* 'cmdheight' */
-EXTERN int p_confirm; /* 'confirm' */
-EXTERN int p_cp; /* 'compatible' */
-EXTERN char_u *p_cot; /* 'completeopt' */
-EXTERN long p_ph; /* 'pumheight' */
-EXTERN char_u *p_cpo; /* 'cpoptions' */
-EXTERN char_u *p_csprg; /* 'cscopeprg' */
-EXTERN int p_csre; /* 'cscoperelative' */
-EXTERN char_u *p_csqf; /* 'cscopequickfix' */
-# define CSQF_CMDS "sgdctefi"
+EXTERN long p_cwh; // 'cmdwinheight'
+EXTERN long p_ch; // 'cmdheight'
+EXTERN int p_confirm; // 'confirm'
+EXTERN int p_cp; // 'compatible'
+EXTERN char_u *p_cot; // 'completeopt'
+EXTERN long p_ph; // 'pumheight'
+EXTERN char_u *p_cpo; // 'cpoptions'
+EXTERN char_u *p_csprg; // 'cscopeprg'
+EXTERN int p_csre; // 'cscoperelative'
+EXTERN char_u *p_csqf; // 'cscopequickfix'
+# define CSQF_CMDS "sgdctefia"
# define CSQF_FLAGS "+-0"
EXTERN int p_cst; /* 'cscopetag' */
EXTERN long p_csto; /* 'cscopetagorder' */
@@ -397,28 +395,30 @@ EXTERN char_u *p_dir; /* 'directory' */
EXTERN char_u *p_dy; /* 'display' */
EXTERN unsigned dy_flags;
#ifdef IN_OPTION_C
-static char *(p_dy_values[]) = {"lastline", "uhex", NULL};
+static char *(p_dy_values[]) = { "lastline", "truncate", "uhex", NULL };
#endif
#define DY_LASTLINE 0x001
-#define DY_UHEX 0x002
-EXTERN int p_ed; /* 'edcompatible' */
-EXTERN char_u *p_ead; /* 'eadirection' */
-EXTERN bool p_ea; /* 'equalalways' */
-EXTERN char_u *p_ep; /* 'equalprg' */
-EXTERN int p_eb; /* 'errorbells' */
-EXTERN char_u *p_ef; /* 'errorfile' */
-EXTERN char_u *p_efm; /* 'errorformat' */
-EXTERN char_u *p_gefm; /* 'grepformat' */
-EXTERN char_u *p_gp; /* 'grepprg' */
-EXTERN char_u *p_ei; /* 'eventignore' */
-EXTERN int p_ek; /* 'esckeys' */
-EXTERN int p_exrc; /* 'exrc' */
-EXTERN char_u *p_fencs; /* 'fileencodings' */
-EXTERN char_u *p_ffs; /* 'fileformats' */
-EXTERN bool p_fic; ///< 'fileignorecase'
-EXTERN char_u *p_fcl; /* 'foldclose' */
-EXTERN long p_fdls; /* 'foldlevelstart' */
-EXTERN char_u *p_fdo; /* 'foldopen' */
+#define DY_TRUNCATE 0x002
+#define DY_UHEX 0x004
+EXTERN int p_ed; // 'edcompatible'
+EXTERN int p_emoji; // 'emoji'
+EXTERN char_u *p_ead; // 'eadirection'
+EXTERN int p_ea; // 'equalalways'
+EXTERN char_u *p_ep; // 'equalprg'
+EXTERN int p_eb; // 'errorbells'
+EXTERN char_u *p_ef; // 'errorfile'
+EXTERN char_u *p_efm; // 'errorformat'
+EXTERN char_u *p_gefm; // 'grepformat'
+EXTERN char_u *p_gp; // 'grepprg'
+EXTERN char_u *p_ei; // 'eventignore'
+EXTERN int p_ek; // 'esckeys'
+EXTERN int p_exrc; // 'exrc'
+EXTERN char_u *p_fencs; // 'fileencodings'
+EXTERN char_u *p_ffs; // 'fileformats'
+EXTERN int p_fic; // 'fileignorecase'
+EXTERN char_u *p_fcl; // 'foldclose'
+EXTERN long p_fdls; // 'foldlevelstart'
+EXTERN char_u *p_fdo; // 'foldopen'
EXTERN unsigned fdo_flags;
# ifdef IN_OPTION_C
static char *(p_fdo_values[]) = {"all", "block", "hor", "mark", "percent",
@@ -456,80 +456,82 @@ EXTERN int p_hid; // 'hidden'
// Use P_HID to check if a buffer is to be hidden when it is no longer
// visible in a window.
# define P_HID(buf) (buf_hide(buf))
-EXTERN char_u *p_hl; /* 'highlight' */
-EXTERN int p_hls; /* 'hlsearch' */
-EXTERN long p_hi; /* 'history' */
-EXTERN int p_hkmap; /* 'hkmap' */
-EXTERN int p_hkmapp; /* 'hkmapp' */
-EXTERN int p_fkmap; /* 'fkmap' */
-EXTERN int p_altkeymap; /* 'altkeymap' */
-EXTERN int p_arshape; /* 'arabicshape' */
-EXTERN int p_icon; /* 'icon' */
-EXTERN char_u *p_iconstring; /* 'iconstring' */
-EXTERN int p_ic; /* 'ignorecase' */
-EXTERN int p_is; /* 'incsearch' */
-EXTERN int p_im; /* 'insertmode' */
-EXTERN char_u *p_isf; /* 'isfname' */
-EXTERN char_u *p_isi; /* 'isident' */
-EXTERN char_u *p_isp; /* 'isprint' */
-EXTERN int p_js; /* 'joinspaces' */
-EXTERN char_u *p_kp; /* 'keywordprg' */
-EXTERN char_u *p_km; /* 'keymodel' */
-EXTERN char_u *p_langmap; /* 'langmap'*/
-EXTERN int p_lnr; /* 'langnoremap'*/
-EXTERN char_u *p_lm; /* 'langmenu' */
-EXTERN char_u *p_lispwords; /* 'lispwords' */
-EXTERN long p_ls; /* 'laststatus' */
-EXTERN long p_stal; /* 'showtabline' */
-EXTERN char_u *p_lcs; /* 'listchars' */
-
-EXTERN int p_lz; /* 'lazyredraw' */
-EXTERN int p_lpl; /* 'loadplugins' */
-EXTERN int p_magic; /* 'magic' */
-EXTERN char_u *p_mef; /* 'makeef' */
-EXTERN char_u *p_mp; /* 'makeprg' */
-EXTERN char_u *p_cc; /* 'colorcolumn' */
-EXTERN int p_cc_cols[256]; /* array for 'colorcolumn' columns */
-EXTERN long p_mat; /* 'matchtime' */
-EXTERN long p_mco; /* 'maxcombine' */
-EXTERN long p_mfd; /* 'maxfuncdepth' */
-EXTERN long p_mmd; /* 'maxmapdepth' */
-EXTERN long p_mm; /* 'maxmem' */
-EXTERN long p_mmp; /* 'maxmempattern' */
-EXTERN long p_mmt; /* 'maxmemtot' */
-EXTERN long p_mis; /* 'menuitems' */
-EXTERN char_u *p_msm; /* 'mkspellmem' */
-EXTERN long p_mls; /* 'modelines' */
-EXTERN char_u *p_mouse; /* 'mouse' */
-EXTERN char_u *p_mousem; /* 'mousemodel' */
-EXTERN long p_mouset; /* 'mousetime' */
-EXTERN int p_more; /* 'more' */
-EXTERN char_u *p_opfunc; /* 'operatorfunc' */
-EXTERN char_u *p_para; /* 'paragraphs' */
-EXTERN int p_paste; /* 'paste' */
-EXTERN char_u *p_pt; /* 'pastetoggle' */
-EXTERN char_u *p_pex; /* 'patchexpr' */
-EXTERN char_u *p_pm; /* 'patchmode' */
-EXTERN char_u *p_path; /* 'path' */
-EXTERN char_u *p_cdpath; /* 'cdpath' */
-EXTERN long p_rdt; /* 'redrawtime' */
-EXTERN int p_remap; /* 'remap' */
-EXTERN long p_re; /* 'regexpengine' */
-EXTERN long p_report; /* 'report' */
-EXTERN long p_pvh; /* 'previewheight' */
-EXTERN int p_ari; /* 'allowrevins' */
-EXTERN int p_ri; /* 'revins' */
-EXTERN int p_ru; /* 'ruler' */
-EXTERN char_u *p_ruf; /* 'rulerformat' */
-EXTERN char_u *p_rtp; /* 'runtimepath' */
-EXTERN long p_sj; /* 'scrolljump' */
-EXTERN long p_so; /* 'scrolloff' */
-EXTERN char_u *p_sbo; /* 'scrollopt' */
-EXTERN char_u *p_sections; /* 'sections' */
-EXTERN int p_secure; /* 'secure' */
-EXTERN char_u *p_sel; /* 'selection' */
-EXTERN char_u *p_slm; /* 'selectmode' */
-EXTERN char_u *p_ssop; /* 'sessionoptions' */
+EXTERN char_u *p_hl; // 'highlight'
+EXTERN int p_hls; // 'hlsearch'
+EXTERN long p_hi; // 'history'
+EXTERN int p_hkmap; // 'hkmap'
+EXTERN int p_hkmapp; // 'hkmapp'
+EXTERN int p_fkmap; // 'fkmap'
+EXTERN int p_altkeymap; // 'altkeymap'
+EXTERN int p_arshape; // 'arabicshape'
+EXTERN int p_icon; // 'icon'
+EXTERN char_u *p_iconstring; // 'iconstring'
+EXTERN int p_ic; // 'ignorecase'
+EXTERN int p_is; // 'incsearch'
+EXTERN char_u *p_icm; // 'inccommand'
+EXTERN int p_im; // 'insertmode'
+EXTERN char_u *p_isf; // 'isfname'
+EXTERN char_u *p_isi; // 'isident'
+EXTERN char_u *p_isp; // 'isprint'
+EXTERN int p_js; // 'joinspaces'
+EXTERN char_u *p_kp; // 'keywordprg'
+EXTERN char_u *p_km; // 'keymodel'
+EXTERN char_u *p_langmap; // 'langmap'*/
+EXTERN int p_lnr; // 'langnoremap'*/
+EXTERN char_u *p_lm; // 'langmenu'
+EXTERN char_u *p_lispwords; // 'lispwords'
+EXTERN long p_ls; // 'laststatus'
+EXTERN long p_stal; // 'showtabline'
+EXTERN char_u *p_lcs; // 'listchars'
+
+EXTERN int p_lz; // 'lazyredraw'
+EXTERN int p_lpl; // 'loadplugins'
+EXTERN int p_magic; // 'magic'
+EXTERN char_u *p_mef; // 'makeef'
+EXTERN char_u *p_mp; // 'makeprg'
+EXTERN char_u *p_cc; // 'colorcolumn'
+EXTERN int p_cc_cols[256]; // array for 'colorcolumn' columns
+EXTERN long p_mat; // 'matchtime'
+EXTERN long p_mco; // 'maxcombine'
+EXTERN long p_mfd; // 'maxfuncdepth'
+EXTERN long p_mmd; // 'maxmapdepth'
+EXTERN long p_mm; // 'maxmem'
+EXTERN long p_mmp; // 'maxmempattern'
+EXTERN long p_mmt; // 'maxmemtot'
+EXTERN long p_mis; // 'menuitems'
+EXTERN char_u *p_msm; // 'mkspellmem'
+EXTERN long p_mls; // 'modelines'
+EXTERN char_u *p_mouse; // 'mouse'
+EXTERN char_u *p_mousem; // 'mousemodel'
+EXTERN long p_mouset; // 'mousetime'
+EXTERN int p_more; // 'more'
+EXTERN char_u *p_opfunc; // 'operatorfunc'
+EXTERN char_u *p_para; // 'paragraphs'
+EXTERN int p_paste; // 'paste'
+EXTERN char_u *p_pt; // 'pastetoggle'
+EXTERN char_u *p_pex; // 'patchexpr'
+EXTERN char_u *p_pm; // 'patchmode'
+EXTERN char_u *p_path; // 'path'
+EXTERN char_u *p_cdpath; // 'cdpath'
+EXTERN long p_rdt; // 'redrawtime'
+EXTERN int p_remap; // 'remap'
+EXTERN long p_re; // 'regexpengine'
+EXTERN long p_report; // 'report'
+EXTERN long p_pvh; // 'previewheight'
+EXTERN int p_ari; // 'allowrevins'
+EXTERN int p_ri; // 'revins'
+EXTERN int p_ru; // 'ruler'
+EXTERN char_u *p_ruf; // 'rulerformat'
+EXTERN char_u *p_pp; // 'packpath'
+EXTERN char_u *p_rtp; // 'runtimepath'
+EXTERN long p_sj; // 'scrolljump'
+EXTERN long p_so; // 'scrolloff'
+EXTERN char_u *p_sbo; // 'scrollopt'
+EXTERN char_u *p_sections; // 'sections'
+EXTERN int p_secure; // 'secure'
+EXTERN char_u *p_sel; // 'selection'
+EXTERN char_u *p_slm; // 'selectmode'
+EXTERN char_u *p_ssop; // 'sessionoptions'
EXTERN unsigned ssop_flags;
# ifdef IN_OPTION_C
/* Also used for 'viewoptions'! */
@@ -619,7 +621,7 @@ EXTERN long p_titlelen; ///< 'titlelen'
EXTERN char_u *p_titleold; ///< 'titleold'
EXTERN char_u *p_titlestring; ///< 'titlestring'
EXTERN char_u *p_tsr; ///< 'thesaurus'
-EXTERN bool p_tgc; ///< 'termguicolors'
+EXTERN int p_tgc; ///< 'termguicolors'
EXTERN int p_ttimeout; ///< 'ttimeout'
EXTERN long p_ttm; ///< 'ttimeoutlen'
EXTERN char_u *p_udir; ///< 'undodir'
@@ -648,26 +650,26 @@ char_u *p_vfile = (char_u *)""; /* used before options are initialized */
#else
extern char_u *p_vfile; /* 'verbosefile' */
#endif
-EXTERN int p_warn; /* 'warn' */
-EXTERN char_u *p_wop; /* 'wildoptions' */
-EXTERN long p_window; /* 'window' */
-EXTERN char_u *p_wak; /* 'winaltkeys' */
-EXTERN char_u *p_wig; /* 'wildignore' */
-EXTERN char_u *p_ww; /* 'whichwrap' */
-EXTERN long p_wc; /* 'wildchar' */
-EXTERN long p_wcm; /* 'wildcharm' */
-EXTERN bool p_wic; ///< 'wildignorecase'
-EXTERN char_u *p_wim; /* 'wildmode' */
-EXTERN int p_wmnu; /* 'wildmenu' */
-EXTERN long p_wh; /* 'winheight' */
-EXTERN long p_wmh; /* 'winminheight' */
-EXTERN long p_wmw; /* 'winminwidth' */
-EXTERN long p_wiw; /* 'winwidth' */
-EXTERN bool p_ws; /* 'wrapscan' */
-EXTERN int p_write; /* 'write' */
-EXTERN int p_wa; /* 'writeany' */
-EXTERN int p_wb; /* 'writebackup' */
-EXTERN long p_wd; /* 'writedelay' */
+EXTERN int p_warn; // 'warn'
+EXTERN char_u *p_wop; // 'wildoptions'
+EXTERN long p_window; // 'window'
+EXTERN char_u *p_wak; // 'winaltkeys'
+EXTERN char_u *p_wig; // 'wildignore'
+EXTERN char_u *p_ww; // 'whichwrap'
+EXTERN long p_wc; // 'wildchar'
+EXTERN long p_wcm; // 'wildcharm'
+EXTERN int p_wic; // 'wildignorecase'
+EXTERN char_u *p_wim; // 'wildmode'
+EXTERN int p_wmnu; // 'wildmenu'
+EXTERN long p_wh; // 'winheight'
+EXTERN long p_wmh; // 'winminheight'
+EXTERN long p_wmw; // 'winminwidth'
+EXTERN long p_wiw; // 'winwidth'
+EXTERN int p_ws; // 'wrapscan'
+EXTERN int p_write; // 'write'
+EXTERN int p_wa; // 'writeany'
+EXTERN int p_wb; // 'writebackup'
+EXTERN long p_wd; // 'writedelay'
EXTERN int p_force_on; ///< options that cannot be turned off.
EXTERN int p_force_off; ///< options that cannot be turned on.
@@ -797,7 +799,8 @@ enum {
, WV_WFH
, WV_WFW
, WV_WRAP
- , WV_COUNT /* must be the last one */
+ , WV_SCL
+ , WV_COUNT // must be the last one
};
/* Value for b_p_ul indicating the global value must be used. */
diff --git a/src/nvim/options.lua b/src/nvim/options.lua
index 218e34f595..fd68d1cde0 100644
--- a/src/nvim/options.lua
+++ b/src/nvim/options.lua
@@ -17,8 +17,8 @@
-- types: bool, number, string
-- lists: (nil), comma, onecomma, flags, flagscomma
-- scopes: global, buffer, window
--- redraw options: statuslines, current_window, current_buffer, all_windows,
--- everything, curswant
+-- redraw options: statuslines, current_window, curent_window_only,
+-- current_buffer, all_windows, everything, curswant
-- default: {vi=…[, vim=…]}
-- defaults: {condition=#if condition, if_true=default, if_false=default}
-- #if condition:
@@ -165,7 +165,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_bdir',
defaults={if_true={vi=''}}
},
@@ -539,7 +539,7 @@ return {
full_name='cursorline', abbreviation='cul',
type='bool', scope={'window'},
vi_def=true,
- redraw={'current_window'},
+ redraw={'current_window_only'},
defaults={if_true={vi=false}}
},
{
@@ -616,7 +616,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_dir',
defaults={if_true={vi=''}}
},
@@ -644,6 +644,14 @@ return {
defaults={if_true={vi=false}}
},
{
+ full_name='emoji', abbreviation='emo',
+ type='bool', scope={'global'},
+ vi_def=true,
+ redraw={'everything'},
+ varname='p_emoji',
+ defaults={if_true={vi=true}}
+ },
+ {
full_name='encoding', abbreviation='enc',
type='string', scope={'global'},
deny_in_modelines=true,
@@ -1180,6 +1188,14 @@ return {
}
},
{
+ full_name='inccommand', abbreviation='icm',
+ type='string', scope={'global'},
+ vi_def=true,
+ redraw={'everything'},
+ varname='p_icm',
+ defaults={if_true={vi=""}}
+ },
+ {
full_name='include', abbreviation='inc',
type='string', scope={'global', 'buffer'},
vi_def=true,
@@ -1556,7 +1572,7 @@ return {
full_name='mouse',
type='string', list='flags', scope={'global'},
varname='p_mouse',
- defaults={if_true={vi="", vim="a"}}
+ defaults={if_true={vi="", vim=""}}
},
{
full_name='mousefocus', abbreviation='mousef',
@@ -1640,6 +1656,16 @@ return {
defaults={if_true={vi=""}}
},
{
+ full_name='packpath', abbreviation='pp',
+ type='string', list='onecomma', scope={'global'},
+ deny_duplicates=true,
+ secure=true,
+ vi_def=true,
+ expand=true,
+ varname='p_pp',
+ defaults={if_true={vi=''}}
+ },
+ {
full_name='paragraphs', abbreviation='para',
type='string', scope={'global'},
vi_def=true,
@@ -1881,7 +1907,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_rtp',
defaults={if_true={vi=''}}
},
@@ -2144,6 +2170,14 @@ return {
defaults={if_true={vi=0}}
},
{
+ full_name='signcolumn', abbreviation='scl',
+ type='string', scope={'window'},
+ vi_def=true,
+ alloced=true,
+ redraw={'current_window'},
+ defaults={if_true={vi="auto"}}
+ },
+ {
full_name='smartcase', abbreviation='scs',
type='bool', scope={'global'},
vi_def=true,
@@ -2497,7 +2531,7 @@ return {
deny_duplicates=true,
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_udir',
defaults={if_true={vi=''}}
},
@@ -2558,7 +2592,7 @@ return {
type='string', scope={'global'},
secure=true,
vi_def=true,
- expand=true,
+ expand='nodefault',
varname='p_vdir',
defaults={if_true={vi=''}}
},
diff --git a/src/nvim/os/env.c b/src/nvim/os/env.c
index edc430410c..747a34d8ce 100644
--- a/src/nvim/os/env.c
+++ b/src/nvim/os/env.c
@@ -12,7 +12,6 @@
#include "nvim/os/os.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/path.h"
#include "nvim/strings.h"
#include "nvim/eval.h"
@@ -113,11 +112,11 @@ int64_t os_get_pid(void)
#endif
}
-/// Get the hostname of the machine running Neovim.
+/// Gets the hostname of the current machine.
///
-/// @param hostname Buffer to store the hostname.
-/// @param len Length of `hostname`.
-void os_get_hostname(char *hostname, size_t len)
+/// @param hostname Buffer to store the hostname.
+/// @param size Size of `hostname`.
+void os_get_hostname(char *hostname, size_t size)
{
#ifdef HAVE_SYS_UTSNAME_H
struct utsname vutsname;
@@ -125,8 +124,7 @@ void os_get_hostname(char *hostname, size_t len)
if (uname(&vutsname) < 0) {
*hostname = '\0';
} else {
- strncpy(hostname, vutsname.nodename, len - 1);
- hostname[len - 1] = '\0';
+ xstrlcpy(hostname, vutsname.nodename, size);
}
#else
// TODO(unknown): Implement this for windows.
@@ -227,25 +225,24 @@ char_u *expand_env_save_opt(char_u *src, bool one)
/// "~/" is also expanded, using $HOME. For Unix "~user/" is expanded.
/// Skips over "\ ", "\~" and "\$" (not for Win32 though).
/// If anything fails no expansion is done and dst equals src.
-/// @param src Input string e.g. "$HOME/vim.hlp"
-/// @param dst Where to put the result
-/// @param dstlen Maximum length of the result
+///
+/// @param src Input string e.g. "$HOME/vim.hlp"
+/// @param dst[out] Where to put the result
+/// @param dstlen Maximum length of the result
void expand_env(char_u *src, char_u *dst, int dstlen)
{
expand_env_esc(src, dst, dstlen, false, false, NULL);
}
/// Expand environment variable with path name and escaping.
-/// "~/" is also expanded, using $HOME. For Unix "~user/" is expanded.
-/// Skips over "\ ", "\~" and "\$" (not for Win32 though).
-/// If anything fails no expansion is done and dst equals src.
-/// prefix recognize the start of a new name, for '~' expansion.
-/// @param srcp Input string e.g. "$HOME/vim.hlp"
-/// @param dst Where to put the result
-/// @param dstlen Maximum length of the result
-/// @param esc Should we escape spaces in expanded variables?
-/// @param one Should we expand more than one '~'?
-/// @param prefix Common prefix for paths, can be NULL
+/// @see expand_env
+///
+/// @param srcp Input string e.g. "$HOME/vim.hlp"
+/// @param dst[out] Where to put the result
+/// @param dstlen Maximum length of the result
+/// @param esc Escape spaces in expanded variables
+/// @param one `srcp` is a single filename
+/// @param prefix Start again after this (can be NULL)
void expand_env_esc(char_u *restrict srcp,
char_u *restrict dst,
int dstlen,
@@ -561,8 +558,8 @@ const void *vim_colon_env_iter_rev(const char *const val,
/// Vim's version of getenv().
/// Special handling of $HOME, $VIM and $VIMRUNTIME, allowing the user to
/// override the vim runtime directory at runtime. Also does ACP to 'enc'
-/// conversion for Win32. Results must be freed by the calling function.
-/// @param name Name of environment variable to expand
+/// conversion for Win32. Result must be freed by the caller.
+/// @param name Environment variable to expand
char *vim_getenv(const char *name)
{
const char *kos_env_path = os_getenv(name);
@@ -599,6 +596,27 @@ char *vim_getenv(const char *name)
if (p_hf != NULL && vim_strchr(p_hf, '$') == NULL) {
vim_path = (char *)p_hf;
}
+
+#ifdef WIN32
+ // Find runtime path relative to the nvim binary i.e. ../share/runtime
+ if (vim_path == NULL) {
+ char exe_name[MAXPATHL];
+ size_t exe_name_len = MAXPATHL;
+ if (os_exepath(exe_name, &exe_name_len) == 0) {
+ char *path_end = (char *)path_tail_with_sep((char_u *)exe_name);
+ *path_end = '\0'; // remove the trailing "nvim.exe"
+ path_end = (char *)path_tail((char_u *)exe_name);
+ *path_end = '\0'; // remove the trailing "bin/"
+ if (append_path(
+ exe_name,
+ "share" _PATHSEPSTR "nvim" _PATHSEPSTR "runtime" _PATHSEPSTR,
+ MAXPATHL) == OK) {
+ vim_path = exe_name;
+ }
+ }
+ }
+#endif
+
if (vim_path != NULL) {
// remove the file name
char *vim_path_end = (char *)path_tail((char_u *)vim_path);
diff --git a/src/nvim/os/fileio.c b/src/nvim/os/fileio.c
new file mode 100644
index 0000000000..cf5bfd60ae
--- /dev/null
+++ b/src/nvim/os/fileio.c
@@ -0,0 +1,318 @@
+/// @file fileio.c
+///
+/// Buffered reading/writing to a file. Unlike fileio.c this is not dealing with
+/// Neovim stuctures for buffer, with autocommands, etc: just fopen/fread/fwrite
+/// replacement.
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdbool.h>
+#include <fcntl.h>
+
+#include "auto/config.h"
+
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
+
+#include <uv.h>
+
+#include "nvim/os/fileio.h"
+#include "nvim/memory.h"
+#include "nvim/os/os.h"
+#include "nvim/globals.h"
+#include "nvim/rbuffer.h"
+#include "nvim/macros.h"
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "os/fileio.c.generated.h"
+#endif
+
+/// Open file
+///
+/// @param[out] ret_fp Address where information needed for reading from or
+/// writing to a file is saved
+/// @param[in] fname File name to open.
+/// @param[in] flags Flags, @see FileOpenFlags. Currently reading from and
+/// writing to the file at once is not supported, so either
+/// FILE_WRITE_ONLY or FILE_READ_ONLY is required.
+/// @param[in] mode Permissions for the newly created file (ignored if flags
+/// does not have FILE_CREATE\*).
+///
+/// @return Error code (@see os_strerror()) or 0.
+int file_open(FileDescriptor *const ret_fp, const char *const fname,
+ const int flags, const int mode)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ int os_open_flags = 0;
+ int fd;
+ TriState wr = kNone;
+#define FLAG(flags, flag, fcntl_flags, wrval, cond) \
+ do { \
+ if (flags & flag) { \
+ os_open_flags |= fcntl_flags; \
+ assert(cond); \
+ if (wrval != kNone) { \
+ wr = wrval; \
+ } \
+ } \
+ } while (0)
+ FLAG(flags, kFileWriteOnly, O_WRONLY, kTrue, true);
+ FLAG(flags, kFileCreateOnly, O_CREAT|O_EXCL|O_WRONLY, kTrue, true);
+ FLAG(flags, kFileCreate, O_CREAT|O_WRONLY, kTrue, !(flags & kFileCreateOnly));
+ FLAG(flags, kFileTruncate, O_TRUNC|O_WRONLY, kTrue,
+ !(flags & kFileCreateOnly));
+ FLAG(flags, kFileReadOnly, O_RDONLY, kFalse, wr != kTrue);
+#ifdef O_NOFOLLOW
+ FLAG(flags, kFileNoSymlink, O_NOFOLLOW, kNone, true);
+#endif
+#undef FLAG
+
+ fd = os_open(fname, os_open_flags, mode);
+
+ if (fd < 0) {
+ return fd;
+ }
+
+ ret_fp->wr = (wr == kTrue);
+ ret_fp->fd = fd;
+ ret_fp->eof = false;
+ ret_fp->rv = rbuffer_new(kRWBufferSize);
+ ret_fp->_error = 0;
+ if (ret_fp->wr) {
+ ret_fp->rv->data = ret_fp;
+ ret_fp->rv->full_cb = (rbuffer_callback)&file_rb_write_full_cb;
+ }
+ return 0;
+}
+
+/// Like file_open(), but allocate and return ret_fp
+///
+/// @param[out] error Error code, @see os_strerror(). Is set to zero on
+/// success.
+/// @param[in] fname File name to open.
+/// @param[in] flags Flags, @see FileOpenFlags.
+/// @param[in] mode Permissions for the newly created file (ignored if flags
+/// does not have FILE_CREATE\*).
+///
+/// @return [allocated] Opened file or NULL in case of error.
+FileDescriptor *file_open_new(int *const error, const char *const fname,
+ const int flags, const int mode)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ FileDescriptor *const fp = xmalloc(sizeof(*fp));
+ if ((*error = file_open(fp, fname, flags, mode)) != 0) {
+ xfree(fp);
+ return NULL;
+ }
+ return fp;
+}
+
+/// Close file and free its buffer
+///
+/// @param[in,out] fp File to close.
+///
+/// @return 0 or error code.
+int file_close(FileDescriptor *const fp) FUNC_ATTR_NONNULL_ALL
+{
+ const int error = file_fsync(fp);
+ const int error2 = os_close(fp->fd);
+ rbuffer_free(fp->rv);
+ if (error2 != 0) {
+ return error2;
+ }
+ return error;
+}
+
+/// Close and free file obtained using file_open_new()
+///
+/// @param[in,out] fp File to close.
+///
+/// @return 0 or error code.
+int file_free(FileDescriptor *const fp) FUNC_ATTR_NONNULL_ALL
+{
+ const int ret = file_close(fp);
+ xfree(fp);
+ return ret;
+}
+
+/// Flush file modifications to disk
+///
+/// @param[in,out] fp File to work with.
+///
+/// @return 0 or error code.
+int file_fsync(FileDescriptor *const fp)
+ FUNC_ATTR_NONNULL_ALL
+{
+ if (!fp->wr) {
+ return 0;
+ }
+ file_rb_write_full_cb(fp->rv, fp);
+ if (fp->_error != 0) {
+ const int error = fp->_error;
+ fp->_error = 0;
+ return error;
+ }
+ return os_fsync(fp->fd);
+}
+
+/// Buffer used for writing
+///
+/// Like IObuff, but allows file_\* callers not to care about spoiling it.
+static char writebuf[kRWBufferSize];
+
+/// Function run when RBuffer is full when writing to a file
+///
+/// Actually does writing to the file, may also be invoked directly.
+///
+/// @param[in,out] rv RBuffer instance used.
+/// @param[in,out] fp File to work with.
+static void file_rb_write_full_cb(RBuffer *const rv, FileDescriptor *const fp)
+ FUNC_ATTR_NONNULL_ALL
+{
+ assert(fp->wr);
+ assert(rv->data == (void *)fp);
+ if (rbuffer_size(rv) == 0) {
+ return;
+ }
+ const size_t read_bytes = rbuffer_read(rv, writebuf, kRWBufferSize);
+ const ptrdiff_t wres = os_write(fp->fd, writebuf, read_bytes);
+ if (wres != (ptrdiff_t)read_bytes) {
+ if (wres >= 0) {
+ fp->_error = UV_EIO;
+ } else {
+ fp->_error = (int)wres;
+ }
+ }
+}
+
+/// Read from file
+///
+/// @param[in,out] fp File to work with.
+/// @param[out] ret_buf Buffer to read to. Must not be NULL.
+/// @param[in] size Number of bytes to read. Buffer must have at least ret_buf
+/// bytes.
+///
+/// @return error_code (< 0) or number of bytes read.
+ptrdiff_t file_read(FileDescriptor *const fp, char *const ret_buf,
+ const size_t size)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ assert(!fp->wr);
+ char *buf = ret_buf;
+ size_t read_remaining = size;
+ RBuffer *const rv = fp->rv;
+ while (read_remaining) {
+ const size_t rv_size = rbuffer_size(rv);
+ if (rv_size > 0) {
+ const size_t rsize = rbuffer_read(rv, buf, MIN(rv_size, read_remaining));
+ buf += rsize;
+ read_remaining -= rsize;
+ }
+ if (fp->eof) {
+ break;
+ }
+ if (read_remaining) {
+ assert(rbuffer_size(rv) == 0);
+ rbuffer_reset(rv);
+#ifdef HAVE_READV
+ // If there is readv() syscall, then take an opportunity to populate
+ // both target buffer and RBuffer at once, …
+ size_t write_count;
+ struct iovec iov[] = {
+ { .iov_base = buf, .iov_len = read_remaining },
+ { .iov_base = rbuffer_write_ptr(rv, &write_count),
+ .iov_len = kRWBufferSize },
+ };
+ assert(write_count == kRWBufferSize);
+ const ptrdiff_t r_ret = os_readv(fp->fd, &fp->eof, iov,
+ ARRAY_SIZE(iov));
+ if (r_ret > 0) {
+ if (r_ret > (ptrdiff_t)read_remaining) {
+ rbuffer_produced(rv, (size_t)(r_ret - (ptrdiff_t)read_remaining));
+ read_remaining = 0;
+ } else {
+ buf += (size_t)r_ret;
+ read_remaining -= (size_t)r_ret;
+ }
+ } else if (r_ret < 0) {
+ return r_ret;
+ }
+#else
+ if (read_remaining >= kRWBufferSize) {
+ // …otherwise leave RBuffer empty and populate only target buffer,
+ // because filtering information through rbuffer will be more syscalls.
+ const ptrdiff_t r_ret = os_read(fp->fd, &fp->eof, buf, read_remaining);
+ if (r_ret >= 0) {
+ read_remaining -= (size_t)r_ret;
+ return (ptrdiff_t)(size - read_remaining);
+ } else if (r_ret < 0) {
+ return r_ret;
+ }
+ } else {
+ size_t write_count;
+ const ptrdiff_t r_ret = os_read(fp->fd, &fp->eof,
+ rbuffer_write_ptr(rv, &write_count),
+ kRWBufferSize);
+ assert(write_count == kRWBufferSize);
+ if (r_ret > 0) {
+ rbuffer_produced(rv, (size_t)r_ret);
+ } else if (r_ret < 0) {
+ return r_ret;
+ }
+ }
+#endif
+ }
+ }
+ return (ptrdiff_t)(size - read_remaining);
+}
+
+/// Write to a file
+///
+/// @param[in] fd File descriptor to write to.
+/// @param[in] buf Data to write. May be NULL if size is zero.
+/// @param[in] size Amount of bytes to write.
+///
+/// @return Number of bytes written or libuv error code (< 0).
+ptrdiff_t file_write(FileDescriptor *const fp, const char *const buf,
+ const size_t size)
+ FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ARG(1)
+{
+ assert(fp->wr);
+ const size_t written = rbuffer_write(fp->rv, buf, size);
+ if (fp->_error != 0) {
+ const int error = fp->_error;
+ fp->_error = 0;
+ return error;
+ } else if (written != size) {
+ return UV_EIO;
+ }
+ return (ptrdiff_t)written;
+}
+
+/// Buffer used for skipping. Its contents is undefined and should never be
+/// used.
+static char skipbuf[kRWBufferSize];
+
+/// Skip some bytes
+///
+/// This is like `fseek(fp, size, SEEK_CUR)`, but actual implementation simply
+/// reads to a buffer and discards the result.
+ptrdiff_t file_skip(FileDescriptor *const fp, const size_t size)
+ FUNC_ATTR_NONNULL_ALL
+{
+ assert(!fp->wr);
+ size_t read_bytes = 0;
+ do {
+ const ptrdiff_t new_read_bytes = file_read(
+ fp, skipbuf, MIN(size - read_bytes, sizeof(skipbuf)));
+ if (new_read_bytes < 0) {
+ return new_read_bytes;
+ } else if (new_read_bytes == 0) {
+ break;
+ }
+ read_bytes += (size_t)new_read_bytes;
+ } while (read_bytes < size && !file_eof(fp));
+
+ return (ptrdiff_t)read_bytes;
+}
diff --git a/src/nvim/os/fileio.h b/src/nvim/os/fileio.h
new file mode 100644
index 0000000000..2cffd5c851
--- /dev/null
+++ b/src/nvim/os/fileio.h
@@ -0,0 +1,72 @@
+#ifndef NVIM_OS_FILEIO_H
+#define NVIM_OS_FILEIO_H
+
+#include <stdbool.h>
+#include <stddef.h>
+
+#include "nvim/func_attr.h"
+#include "nvim/rbuffer.h"
+
+/// Structure used to read from/write to file
+typedef struct {
+ int fd; ///< File descriptor.
+ int _error; ///< Error code for use with RBuffer callbacks or zero.
+ RBuffer *rv; ///< Read or write buffer.
+ bool wr; ///< True if file is in write mode.
+ bool eof; ///< True if end of file was encountered.
+} FileDescriptor;
+
+/// file_open() flags
+typedef enum {
+ kFileReadOnly = 1, ///< Open file read-only. Default.
+ kFileCreate = 2, ///< Create file if it does not exist yet.
+ ///< Implies kFileWriteOnly.
+ kFileWriteOnly = 4, ///< Open file for writing only.
+ ///< Cannot be used with kFileReadOnly.
+ kFileNoSymlink = 8, ///< Do not allow symbolic links.
+ kFileCreateOnly = 16, ///< Only create the file, failing if it already
+ ///< exists. Implies kFileWriteOnly. Cannot be used
+ ///< with kFileCreate.
+ kFileTruncate = 32, ///< Truncate the file if it exists.
+ ///< Implies kFileWriteOnly. Cannot be used with
+ ///< kFileCreateOnly.
+} FileOpenFlags;
+
+static inline bool file_eof(const FileDescriptor *const fp)
+ REAL_FATTR_PURE REAL_FATTR_WARN_UNUSED_RESULT REAL_FATTR_NONNULL_ALL;
+
+/// Check whether end of file was encountered
+///
+/// @param[in] fp File to check.
+///
+/// @return true if it was, false if it was not or read operation was never
+/// performed.
+static inline bool file_eof(const FileDescriptor *const fp)
+{
+ return fp->eof && rbuffer_size(fp->rv) == 0;
+}
+
+static inline int file_fd(const FileDescriptor *const fp)
+ REAL_FATTR_PURE REAL_FATTR_WARN_UNUSED_RESULT REAL_FATTR_NONNULL_ALL;
+
+/// Return the file descriptor associated with the FileDescriptor structure
+///
+/// @param[in] fp File to check.
+///
+/// @return File descriptor.
+static inline int file_fd(const FileDescriptor *const fp)
+{
+ return fp->fd;
+}
+
+enum {
+ /// Read or write buffer size
+ ///
+ /// Currently equal to (IOSIZE - 1), but they do not need to be connected.
+ kRWBufferSize = 1024
+};
+
+#ifdef INCLUDE_GENERATED_DECLARATIONS
+# include "os/fileio.h.generated.h"
+#endif
+#endif // NVIM_OS_FILEIO_H
diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c
index 143a7160b0..30e08ac129 100644
--- a/src/nvim/os/fs.c
+++ b/src/nvim/os/fs.c
@@ -1,23 +1,51 @@
// fs.c -- filesystem access
#include <stdbool.h>
-
+#include <stddef.h>
#include <assert.h>
+#include <limits.h>
#include <fcntl.h>
+#include <errno.h>
+
+#include "auto/config.h"
+
+#ifdef HAVE_SYS_UIO_H
+# include <sys/uio.h>
+#endif
+
+#include <uv.h>
#include "nvim/os/os.h"
#include "nvim/os/os_defs.h"
#include "nvim/ascii.h"
#include "nvim/memory.h"
#include "nvim/message.h"
+#include "nvim/assert.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/path.h"
#include "nvim/strings.h"
+#ifdef WIN32
+#include "nvim/mbyte.h" // for utf8_to_utf16, utf16_to_utf8
+#endif
+
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "os/fs.c.generated.h"
#endif
+#define RUN_UV_FS_FUNC(ret, func, ...) \
+ do { \
+ bool did_try_to_free = false; \
+uv_call_start: {} \
+ uv_fs_t req; \
+ ret = func(&fs_loop, &req, __VA_ARGS__); \
+ uv_fs_req_cleanup(&req); \
+ if (ret == UV_ENOMEM && !did_try_to_free) { \
+ try_to_free_memory(); \
+ did_try_to_free = true; \
+ goto uv_call_start; \
+ } \
+ } while (0)
+
// Many fs functions from libuv return that value on success.
static const int kLibuvSuccess = 0;
static uv_loop_t fs_loop;
@@ -135,8 +163,12 @@ int os_nodetype(const char *name)
// saves us the hassle.
int nodetype = NODE_WRITABLE;
- int fd = os_open(name, O_RDONLY, 0);
- switch(uv_guess_handle(fd)) {
+ int fd = os_open(name, O_RDONLY
+#ifdef O_NONBLOCK
+ | O_NONBLOCK
+#endif
+ , 0);
+ switch (uv_guess_handle(fd)) {
case UV_TTY: // FILE_TYPE_CHAR
nodetype = NODE_WRITABLE;
break;
@@ -160,6 +192,18 @@ int os_nodetype(const char *name)
return nodetype;
}
+/// Gets the absolute path of the currently running executable.
+///
+/// @param[out] buffer Returns the path string.
+/// @param[in] size Size of `buffer`.
+///
+/// @return `0` on success, or libuv error code on failure.
+int os_exepath(char *buffer, size_t *size)
+ FUNC_ATTR_NONNULL_ALL
+{
+ return uv_exepath(buffer, size);
+}
+
/// Checks if the given path represents an executable file.
///
/// @param[in] name Name of the executable.
@@ -325,13 +369,168 @@ static bool is_executable_in_path(const char_u *name, char_u **abspath)
int os_open(const char* path, int flags, int mode)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t open_req;
- int r = uv_fs_open(&fs_loop, &open_req, path, flags, mode, NULL);
- uv_fs_req_cleanup(&open_req);
- // r is the same as open_req.result (except for OOM: then only r is set).
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_open, path, flags, mode, NULL);
return r;
}
+/// Close a file
+///
+/// @return 0 or libuv error code on failure.
+int os_close(const int fd)
+{
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_close, fd, NULL);
+ return r;
+}
+
+/// Read from a file
+///
+/// Handles EINTR and ENOMEM, but not other errors.
+///
+/// @param[in] fd File descriptor to read from.
+/// @param[out] ret_eof Is set to true if EOF was encountered, otherwise set
+/// to false. Initial value is ignored.
+/// @param[out] ret_buf Buffer to write to. May be NULL if size is zero.
+/// @param[in] size Amount of bytes to read.
+///
+/// @return Number of bytes read or libuv error code (< 0).
+ptrdiff_t os_read(const int fd, bool *ret_eof, char *const ret_buf,
+ const size_t size)
+ FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ *ret_eof = false;
+ if (ret_buf == NULL) {
+ assert(size == 0);
+ return 0;
+ }
+ size_t read_bytes = 0;
+ bool did_try_to_free = false;
+ while (read_bytes != size) {
+ const ptrdiff_t cur_read_bytes = read(fd, ret_buf + read_bytes,
+ size - read_bytes);
+ if (cur_read_bytes > 0) {
+ read_bytes += (size_t)cur_read_bytes;
+ assert(read_bytes <= size);
+ }
+ if (cur_read_bytes < 0) {
+ const int error = os_translate_sys_error(errno);
+ errno = 0;
+ if (error == UV_EINTR || error == UV_EAGAIN) {
+ continue;
+ } else if (error == UV_ENOMEM && !did_try_to_free) {
+ try_to_free_memory();
+ did_try_to_free = true;
+ continue;
+ } else {
+ return (ptrdiff_t)error;
+ }
+ }
+ if (cur_read_bytes == 0) {
+ *ret_eof = true;
+ break;
+ }
+ }
+ return (ptrdiff_t)read_bytes;
+}
+
+#ifdef HAVE_READV
+/// Read from a file to multiple buffers at once
+///
+/// Wrapper for readv().
+///
+/// @param[in] fd File descriptor to read from.
+/// @param[out] ret_eof Is set to true if EOF was encountered, otherwise set
+/// to false. Initial value is ignored.
+/// @param[out] iov Description of buffers to write to. Note: this description
+/// may change, it is incorrect to use data it points to after
+/// os_readv().
+/// @param[in] iov_size Number of buffers in iov.
+ptrdiff_t os_readv(int fd, bool *ret_eof, struct iovec *iov, size_t iov_size)
+ FUNC_ATTR_NONNULL_ALL
+{
+ *ret_eof = false;
+ size_t read_bytes = 0;
+ bool did_try_to_free = false;
+ size_t toread = 0;
+ for (size_t i = 0; i < iov_size; i++) {
+ // Overflow, trying to read too much data
+ assert(toread <= SIZE_MAX - iov[i].iov_len);
+ toread += iov[i].iov_len;
+ }
+ while (read_bytes < toread && iov_size && !*ret_eof) {
+ ptrdiff_t cur_read_bytes = readv(fd, iov, (int)iov_size);
+ if (toread && cur_read_bytes == 0) {
+ *ret_eof = true;
+ }
+ if (cur_read_bytes > 0) {
+ read_bytes += (size_t)cur_read_bytes;
+ while (iov_size && cur_read_bytes) {
+ if (cur_read_bytes < (ptrdiff_t)iov->iov_len) {
+ iov->iov_len -= (size_t)cur_read_bytes;
+ iov->iov_base = (char *)iov->iov_base + cur_read_bytes;
+ cur_read_bytes = 0;
+ } else {
+ cur_read_bytes -= (ptrdiff_t)iov->iov_len;
+ iov_size--;
+ iov++;
+ }
+ }
+ } else if (cur_read_bytes < 0) {
+ const int error = os_translate_sys_error(errno);
+ errno = 0;
+ if (error == UV_EINTR || error == UV_EAGAIN) {
+ continue;
+ } else if (error == UV_ENOMEM && !did_try_to_free) {
+ try_to_free_memory();
+ did_try_to_free = true;
+ continue;
+ } else {
+ return (ptrdiff_t)error;
+ }
+ }
+ }
+ return (ptrdiff_t)read_bytes;
+}
+#endif // HAVE_READV
+
+/// Write to a file
+///
+/// @param[in] fd File descriptor to write to.
+/// @param[in] buf Data to write. May be NULL if size is zero.
+/// @param[in] size Amount of bytes to write.
+///
+/// @return Number of bytes written or libuv error code (< 0).
+ptrdiff_t os_write(const int fd, const char *const buf, const size_t size)
+ FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (buf == NULL) {
+ assert(size == 0);
+ return 0;
+ }
+ size_t written_bytes = 0;
+ while (written_bytes != size) {
+ const ptrdiff_t cur_written_bytes = write(fd, buf + written_bytes,
+ size - written_bytes);
+ if (cur_written_bytes > 0) {
+ written_bytes += (size_t)cur_written_bytes;
+ }
+ if (cur_written_bytes < 0) {
+ const int error = os_translate_sys_error(errno);
+ errno = 0;
+ if (error == UV_EINTR || error == UV_EAGAIN) {
+ continue;
+ } else {
+ return error;
+ }
+ }
+ if (cur_written_bytes == 0) {
+ return UV_UNKNOWN;
+ }
+ }
+ return (ptrdiff_t)written_bytes;
+}
+
/// Flushes file modifications to disk.
///
/// @param fd the file descriptor of the file to flush to disk.
@@ -339,9 +538,8 @@ int os_open(const char* path, int flags, int mode)
/// @return `0` on success, a libuv error code on failure.
int os_fsync(int fd)
{
- uv_fs_t fsync_req;
- int r = uv_fs_fsync(&fs_loop, &fsync_req, fd, NULL);
- uv_fs_req_cleanup(&fsync_req);
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_fsync, fd, NULL);
return r;
}
@@ -379,16 +577,9 @@ int32_t os_getperm(const char_u *name)
int os_setperm(const char_u *name, int perm)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t request;
- int result = uv_fs_chmod(&fs_loop, &request,
- (const char*)name, perm, NULL);
- uv_fs_req_cleanup(&request);
-
- if (result == kLibuvSuccess) {
- return OK;
- }
-
- return FAIL;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_chmod, (const char *)name, perm, NULL);
+ return (r == kLibuvSuccess ? OK : FAIL);
}
/// Changes the ownership of the file referred to by the open file descriptor.
@@ -397,24 +588,21 @@ int os_setperm(const char_u *name, int perm)
///
/// @note If the `owner` or `group` is specified as `-1`, then that ID is not
/// changed.
-int os_fchown(int file_descriptor, uv_uid_t owner, uv_gid_t group)
- FUNC_ATTR_NONNULL_ALL
+int os_fchown(int fd, uv_uid_t owner, uv_gid_t group)
{
- uv_fs_t request;
- int result = uv_fs_fchown(&fs_loop, &request, file_descriptor,
- owner, group, NULL);
- uv_fs_req_cleanup(&request);
- return result;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_fchown, fd, owner, group, NULL);
+ return r;
}
-/// Check if a file exists.
+/// Check if a path exists.
///
-/// @return `true` if `name` exists.
-bool os_file_exists(const char_u *name)
+/// @return `true` if `path` exists
+bool os_path_exists(const char_u *path)
FUNC_ATTR_NONNULL_ALL
{
uv_stat_t statbuf;
- return os_stat((char *)name, &statbuf) == kLibuvSuccess;
+ return os_stat((char *)path, &statbuf) == kLibuvSuccess;
}
/// Check if a file is readable.
@@ -423,9 +611,8 @@ bool os_file_exists(const char_u *name)
bool os_file_is_readable(const char *name)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
- uv_fs_t req;
- int r = uv_fs_access(&fs_loop, &req, name, R_OK, NULL);
- uv_fs_req_cleanup(&req);
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_access, name, R_OK, NULL);
return (r == 0);
}
@@ -437,9 +624,8 @@ bool os_file_is_readable(const char *name)
int os_file_is_writable(const char *name)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
- uv_fs_t req;
- int r = uv_fs_access(&fs_loop, &req, name, W_OK, NULL);
- uv_fs_req_cleanup(&req);
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_access, name, W_OK, NULL);
if (r == 0) {
return os_isdir((char_u *)name) ? 2 : 1;
}
@@ -452,16 +638,10 @@ int os_file_is_writable(const char *name)
int os_rename(const char_u *path, const char_u *new_path)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t request;
- int result = uv_fs_rename(&fs_loop, &request,
- (const char *)path, (const char *)new_path, NULL);
- uv_fs_req_cleanup(&request);
-
- if (result == kLibuvSuccess) {
- return OK;
- }
-
- return FAIL;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_rename, (const char *)path, (const char *)new_path,
+ NULL);
+ return (r == kLibuvSuccess ? OK : FAIL);
}
/// Make a directory.
@@ -470,10 +650,9 @@ int os_rename(const char_u *path, const char_u *new_path)
int os_mkdir(const char *path, int32_t mode)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t request;
- int result = uv_fs_mkdir(&fs_loop, &request, path, mode, NULL);
- uv_fs_req_cleanup(&request);
- return result;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_mkdir, path, mode, NULL);
+ return r;
}
/// Make a directory, with higher levels when needed
@@ -555,10 +734,9 @@ int os_mkdtemp(const char *template, char *path)
int os_rmdir(const char *path)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t request;
- int result = uv_fs_rmdir(&fs_loop, &request, path, NULL);
- uv_fs_req_cleanup(&request);
- return result;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_rmdir, path, NULL);
+ return r;
}
/// Opens a directory.
@@ -600,10 +778,9 @@ void os_closedir(Directory *dir)
int os_remove(const char *path)
FUNC_ATTR_NONNULL_ALL
{
- uv_fs_t request;
- int result = uv_fs_unlink(&fs_loop, &request, path, NULL);
- uv_fs_req_cleanup(&request);
- return result;
+ int r;
+ RUN_UV_FS_FUNC(r, uv_fs_unlink, path, NULL);
+ return r;
}
/// Get the file information for a given path
@@ -742,10 +919,222 @@ bool os_fileid_equal(const FileID *file_id_1, const FileID *file_id_2)
/// @param file_info Pointer to a `FileInfo`
/// @return `true` if the `FileID` and the `FileInfo` represent te same file.
bool os_fileid_equal_fileinfo(const FileID *file_id,
- const FileInfo *file_info)
+ const FileInfo *file_info)
FUNC_ATTR_NONNULL_ALL
{
return file_id->inode == file_info->stat.st_ino
&& file_id->device_id == file_info->stat.st_dev;
}
+#ifdef WIN32
+# include <shlobj.h>
+
+/// When "fname" is the name of a shortcut (*.lnk) resolve the file it points
+/// to and return that name in allocated memory.
+/// Otherwise NULL is returned.
+char_u * os_resolve_shortcut(char_u *fname)
+{
+ HRESULT hr;
+ IPersistFile *ppf = NULL;
+ OLECHAR wsz[MAX_PATH];
+ char_u *rfname = NULL;
+ int len;
+ IShellLinkW *pslw = NULL;
+ WIN32_FIND_DATAW ffdw;
+
+ // Check if the file name ends in ".lnk". Avoid calling CoCreateInstance(),
+ // it's quite slow.
+ if (fname == NULL) {
+ return rfname;
+ }
+ len = (int)STRLEN(fname);
+ if (len <= 4 || STRNICMP(fname + len - 4, ".lnk", 4) != 0) {
+ return rfname;
+ }
+
+ CoInitialize(NULL);
+
+ // create a link manager object and request its interface
+ hr = CoCreateInstance(&CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
+ &IID_IShellLinkW, (void **)&pslw);
+ if (hr == S_OK) {
+ WCHAR *p;
+ int conversion_result = utf8_to_utf16((char *)fname, &p);
+ if (conversion_result != 0) {
+ EMSG2("utf8_to_utf16 failed: %s", uv_strerror(conversion_result));
+ }
+
+ if (p != NULL) {
+ // Get a pointer to the IPersistFile interface.
+ hr = pslw->lpVtbl->QueryInterface(
+ pslw, &IID_IPersistFile, (void **)&ppf);
+ if (hr != S_OK) {
+ goto shortcut_errorw;
+ }
+
+ // "load" the name and resolve the link
+ hr = ppf->lpVtbl->Load(ppf, p, STGM_READ);
+ if (hr != S_OK) {
+ goto shortcut_errorw;
+ }
+
+# if 0 // This makes Vim wait a long time if the target does not exist.
+ hr = pslw->lpVtbl->Resolve(pslw, NULL, SLR_NO_UI);
+ if (hr != S_OK) {
+ goto shortcut_errorw;
+ }
+# endif
+
+ // Get the path to the link target.
+ ZeroMemory(wsz, MAX_PATH * sizeof(WCHAR));
+ hr = pslw->lpVtbl->GetPath(pslw, wsz, MAX_PATH, &ffdw, 0);
+ if (hr == S_OK && wsz[0] != NUL) {
+ int conversion_result = utf16_to_utf8(wsz, &rfname);
+ if (conversion_result != 0) {
+ EMSG2("utf16_to_utf8 failed: %s", uv_strerror(conversion_result));
+ }
+ }
+
+shortcut_errorw:
+ xfree(p);
+ goto shortcut_end;
+ }
+ }
+
+shortcut_end:
+ // Release all interface pointers (both belong to the same object)
+ if (ppf != NULL) {
+ ppf->lpVtbl->Release(ppf);
+ }
+ if (pslw != NULL) {
+ pslw->lpVtbl->Release(pslw);
+ }
+
+ CoUninitialize();
+ return rfname;
+}
+
+#endif
+
+int os_translate_sys_error(int sys_errno) {
+#ifdef HAVE_UV_TRANSLATE_SYS_ERROR
+ return uv_translate_sys_error(sys_errno);
+#elif WIN32
+ // TODO(equalsraf): libuv does not yet expose uv_translate_sys_error()
+ // in its public API, include a version here until it can be used.
+ // See https://github.com/libuv/libuv/issues/79
+# ifndef ERROR_SYMLINK_NOT_SUPPORTED
+# define ERROR_SYMLINK_NOT_SUPPORTED 1464
+# endif
+
+ if (sys_errno <= 0) {
+ return sys_errno; // If < 0 then it's already a libuv error
+ }
+
+ switch (sys_errno) {
+ case ERROR_NOACCESS: return UV_EACCES;
+ case WSAEACCES: return UV_EACCES;
+ case ERROR_ADDRESS_ALREADY_ASSOCIATED: return UV_EADDRINUSE;
+ case WSAEADDRINUSE: return UV_EADDRINUSE;
+ case WSAEADDRNOTAVAIL: return UV_EADDRNOTAVAIL;
+ case WSAEAFNOSUPPORT: return UV_EAFNOSUPPORT;
+ case WSAEWOULDBLOCK: return UV_EAGAIN;
+ case WSAEALREADY: return UV_EALREADY;
+ case ERROR_INVALID_FLAGS: return UV_EBADF;
+ case ERROR_INVALID_HANDLE: return UV_EBADF;
+ case ERROR_LOCK_VIOLATION: return UV_EBUSY;
+ case ERROR_PIPE_BUSY: return UV_EBUSY;
+ case ERROR_SHARING_VIOLATION: return UV_EBUSY;
+ case ERROR_OPERATION_ABORTED: return UV_ECANCELED;
+ case WSAEINTR: return UV_ECANCELED;
+ case ERROR_NO_UNICODE_TRANSLATION: return UV_ECHARSET;
+ case ERROR_CONNECTION_ABORTED: return UV_ECONNABORTED;
+ case WSAECONNABORTED: return UV_ECONNABORTED;
+ case ERROR_CONNECTION_REFUSED: return UV_ECONNREFUSED;
+ case WSAECONNREFUSED: return UV_ECONNREFUSED;
+ case ERROR_NETNAME_DELETED: return UV_ECONNRESET;
+ case WSAECONNRESET: return UV_ECONNRESET;
+ case ERROR_ALREADY_EXISTS: return UV_EEXIST;
+ case ERROR_FILE_EXISTS: return UV_EEXIST;
+ case ERROR_BUFFER_OVERFLOW: return UV_EFAULT;
+ case WSAEFAULT: return UV_EFAULT;
+ case ERROR_HOST_UNREACHABLE: return UV_EHOSTUNREACH;
+ case WSAEHOSTUNREACH: return UV_EHOSTUNREACH;
+ case ERROR_INSUFFICIENT_BUFFER: return UV_EINVAL;
+ case ERROR_INVALID_DATA: return UV_EINVAL;
+ case ERROR_INVALID_PARAMETER: return UV_EINVAL;
+ case ERROR_SYMLINK_NOT_SUPPORTED: return UV_EINVAL;
+ case WSAEINVAL: return UV_EINVAL;
+ case WSAEPFNOSUPPORT: return UV_EINVAL;
+ case WSAESOCKTNOSUPPORT: return UV_EINVAL;
+ case ERROR_BEGINNING_OF_MEDIA: return UV_EIO;
+ case ERROR_BUS_RESET: return UV_EIO;
+ case ERROR_CRC: return UV_EIO;
+ case ERROR_DEVICE_DOOR_OPEN: return UV_EIO;
+ case ERROR_DEVICE_REQUIRES_CLEANING: return UV_EIO;
+ case ERROR_DISK_CORRUPT: return UV_EIO;
+ case ERROR_EOM_OVERFLOW: return UV_EIO;
+ case ERROR_FILEMARK_DETECTED: return UV_EIO;
+ case ERROR_GEN_FAILURE: return UV_EIO;
+ case ERROR_INVALID_BLOCK_LENGTH: return UV_EIO;
+ case ERROR_IO_DEVICE: return UV_EIO;
+ case ERROR_NO_DATA_DETECTED: return UV_EIO;
+ case ERROR_NO_SIGNAL_SENT: return UV_EIO;
+ case ERROR_OPEN_FAILED: return UV_EIO;
+ case ERROR_SETMARK_DETECTED: return UV_EIO;
+ case ERROR_SIGNAL_REFUSED: return UV_EIO;
+ case WSAEISCONN: return UV_EISCONN;
+ case ERROR_CANT_RESOLVE_FILENAME: return UV_ELOOP;
+ case ERROR_TOO_MANY_OPEN_FILES: return UV_EMFILE;
+ case WSAEMFILE: return UV_EMFILE;
+ case WSAEMSGSIZE: return UV_EMSGSIZE;
+ case ERROR_FILENAME_EXCED_RANGE: return UV_ENAMETOOLONG;
+ case ERROR_NETWORK_UNREACHABLE: return UV_ENETUNREACH;
+ case WSAENETUNREACH: return UV_ENETUNREACH;
+ case WSAENOBUFS: return UV_ENOBUFS;
+ case ERROR_BAD_PATHNAME: return UV_ENOENT;
+ case ERROR_DIRECTORY: return UV_ENOENT;
+ case ERROR_FILE_NOT_FOUND: return UV_ENOENT;
+ case ERROR_INVALID_NAME: return UV_ENOENT;
+ case ERROR_INVALID_DRIVE: return UV_ENOENT;
+ case ERROR_INVALID_REPARSE_DATA: return UV_ENOENT;
+ case ERROR_MOD_NOT_FOUND: return UV_ENOENT;
+ case ERROR_PATH_NOT_FOUND: return UV_ENOENT;
+ case WSAHOST_NOT_FOUND: return UV_ENOENT;
+ case WSANO_DATA: return UV_ENOENT;
+ case ERROR_NOT_ENOUGH_MEMORY: return UV_ENOMEM;
+ case ERROR_OUTOFMEMORY: return UV_ENOMEM;
+ case ERROR_CANNOT_MAKE: return UV_ENOSPC;
+ case ERROR_DISK_FULL: return UV_ENOSPC;
+ case ERROR_EA_TABLE_FULL: return UV_ENOSPC;
+ case ERROR_END_OF_MEDIA: return UV_ENOSPC;
+ case ERROR_HANDLE_DISK_FULL: return UV_ENOSPC;
+ case ERROR_NOT_CONNECTED: return UV_ENOTCONN;
+ case WSAENOTCONN: return UV_ENOTCONN;
+ case ERROR_DIR_NOT_EMPTY: return UV_ENOTEMPTY;
+ case WSAENOTSOCK: return UV_ENOTSOCK;
+ case ERROR_NOT_SUPPORTED: return UV_ENOTSUP;
+ case ERROR_BROKEN_PIPE: return UV_EOF;
+ case ERROR_ACCESS_DENIED: return UV_EPERM;
+ case ERROR_PRIVILEGE_NOT_HELD: return UV_EPERM;
+ case ERROR_BAD_PIPE: return UV_EPIPE;
+ case ERROR_NO_DATA: return UV_EPIPE;
+ case ERROR_PIPE_NOT_CONNECTED: return UV_EPIPE;
+ case WSAESHUTDOWN: return UV_EPIPE;
+ case WSAEPROTONOSUPPORT: return UV_EPROTONOSUPPORT;
+ case ERROR_WRITE_PROTECT: return UV_EROFS;
+ case ERROR_SEM_TIMEOUT: return UV_ETIMEDOUT;
+ case WSAETIMEDOUT: return UV_ETIMEDOUT;
+ case ERROR_NOT_SAME_DEVICE: return UV_EXDEV;
+ case ERROR_INVALID_FUNCTION: return UV_EISDIR;
+ case ERROR_META_EXPANSION_TOO_LONG: return UV_E2BIG;
+ default: return UV_UNKNOWN;
+ }
+#else
+ const int error = -errno;
+ STATIC_ASSERT(-EINTR == UV_EINTR, "Need to translate error codes");
+ STATIC_ASSERT(-EAGAIN == UV_EAGAIN, "Need to translate error codes");
+ STATIC_ASSERT(-ENOMEM == UV_ENOMEM, "Need to translate error codes");
+ return error;
+#endif
+}
diff --git a/src/nvim/os/input.c b/src/nvim/os/input.c
index 7687b14f02..f264a26939 100644
--- a/src/nvim/os/input.c
+++ b/src/nvim/os/input.c
@@ -19,7 +19,7 @@
#include "nvim/getchar.h"
#include "nvim/main.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
+#include "nvim/state.h"
#define READ_BUFFER_SIZE 0xfff
#define INPUT_BUFFER_SIZE (READ_BUFFER_SIZE * 4)
@@ -39,8 +39,6 @@ static int events_enabled = 0;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "os/input.c.generated.h"
#endif
-// Helper function used to push bytes from the 'event' key sequence partially
-// between calls to os_inchar when maxlen < 3
void input_init(void)
{
@@ -60,8 +58,8 @@ void input_start(int fd)
}
global_fd = fd;
- rstream_init_fd(&loop, &read_stream, fd, READ_BUFFER_SIZE, NULL);
- rstream_start(&read_stream, read_cb);
+ rstream_init_fd(&main_loop, &read_stream, fd, READ_BUFFER_SIZE);
+ rstream_start(&read_stream, read_cb, NULL);
}
void input_stop(void)
@@ -71,7 +69,7 @@ void input_stop(void)
}
rstream_stop(&read_stream);
- stream_close(&read_stream, NULL);
+ stream_close(&read_stream, NULL, NULL);
}
static void cursorhold_event(void **argv)
@@ -87,8 +85,8 @@ static void create_cursorhold_event(void)
// have been called(inbuf_poll would return kInputAvail)
// TODO(tarruda): Cursorhold should be implemented as a timer set during the
// `state_check` callback for the states where it can be triggered.
- assert(!events_enabled || queue_empty(loop.events));
- queue_put(loop.events, cursorhold_event, 0);
+ assert(!events_enabled || multiqueue_empty(main_loop.events));
+ multiqueue_put(main_loop.events, cursorhold_event, 0);
}
// Low level input function
@@ -147,7 +145,7 @@ bool os_char_avail(void)
void os_breakcheck(void)
{
if (!got_int) {
- loop_poll_events(&loop, 0);
+ loop_poll_events(&main_loop, 0);
}
}
@@ -172,12 +170,13 @@ bool os_isatty(int fd)
size_t input_enqueue(String keys)
{
- char *ptr = keys.data, *end = ptr + keys.size;
+ char *ptr = keys.data;
+ char *end = ptr + keys.size;
while (rbuffer_space(input_buffer) >= 6 && ptr < end) {
uint8_t buf[6] = { 0 };
- unsigned int new_size = trans_special((const uint8_t **)&ptr, keys.size,
- buf, true);
+ unsigned int new_size
+ = trans_special((const uint8_t **)&ptr, (size_t)(end - ptr), buf, true);
if (new_size) {
new_size = handle_mouse_event(&ptr, buf, new_size);
@@ -187,8 +186,7 @@ size_t input_enqueue(String keys)
if (*ptr == '<') {
char *old_ptr = ptr;
- // Invalid or incomplete key sequence, skip until the next '>' or until
- // *end
+ // Invalid or incomplete key sequence, skip until the next '>' or *end.
do {
ptr++;
} while (ptr < end && *ptr != '>');
@@ -266,29 +264,32 @@ static unsigned int handle_mouse_event(char **ptr, uint8_t *buf,
}
static int orig_num_clicks = 0;
- static int orig_mouse_code = 0;
- static int orig_mouse_col = 0;
- static int orig_mouse_row = 0;
- static uint64_t orig_mouse_time = 0; // time of previous mouse click
- uint64_t mouse_time = os_hrtime(); // time of current mouse click
-
- // compute the time elapsed since the previous mouse click and
- // convert p_mouse from ms to ns
- uint64_t timediff = mouse_time - orig_mouse_time;
- uint64_t mouset = (uint64_t)p_mouset * 1000000;
- if (mouse_code == orig_mouse_code
- && timediff < mouset
- && orig_num_clicks != 4
- && orig_mouse_col == mouse_col
- && orig_mouse_row == mouse_row) {
- orig_num_clicks++;
- } else {
- orig_num_clicks = 1;
+ if (mouse_code != KE_LEFTRELEASE && mouse_code != KE_RIGHTRELEASE
+ && mouse_code != KE_MIDDLERELEASE) {
+ static int orig_mouse_code = 0;
+ static int orig_mouse_col = 0;
+ static int orig_mouse_row = 0;
+ static uint64_t orig_mouse_time = 0; // time of previous mouse click
+ uint64_t mouse_time = os_hrtime(); // time of current mouse click (ns)
+
+ // compute the time elapsed since the previous mouse click and
+ // convert p_mouse from ms to ns
+ uint64_t timediff = mouse_time - orig_mouse_time;
+ uint64_t mouset = (uint64_t)p_mouset * 1000000;
+ if (mouse_code == orig_mouse_code
+ && timediff < mouset
+ && orig_num_clicks != 4
+ && orig_mouse_col == mouse_col
+ && orig_mouse_row == mouse_row) {
+ orig_num_clicks++;
+ } else {
+ orig_num_clicks = 1;
+ }
+ orig_mouse_code = mouse_code;
+ orig_mouse_col = mouse_col;
+ orig_mouse_row = mouse_row;
+ orig_mouse_time = mouse_time;
}
- orig_mouse_code = mouse_code;
- orig_mouse_col = mouse_col;
- orig_mouse_row = mouse_row;
- orig_mouse_time = mouse_time;
uint8_t modifiers = 0;
if (orig_num_clicks == 2) {
@@ -322,7 +323,7 @@ static bool input_poll(int ms)
prof_inchar_enter();
}
- LOOP_PROCESS_EVENTS_UNTIL(&loop, NULL, ms, input_ready() || input_eof);
+ LOOP_PROCESS_EVENTS_UNTIL(&main_loop, NULL, ms, input_ready() || input_eof);
if (do_profiling == PROF_YES && ms) {
prof_inchar_exit();
@@ -386,6 +387,8 @@ static void process_interrupts(void)
}
}
+// Helper function used to push bytes from the 'event' key sequence partially
+// between calls to os_inchar when maxlen < 3
static int push_event_key(uint8_t *buf, int maxlen)
{
static const uint8_t key[3] = { K_SPECIAL, KS_EXTRA, KE_EVENT };
@@ -419,5 +422,5 @@ static void read_error_exit(void)
static bool pending_events(void)
{
- return events_enabled && !queue_empty(loop.events);
+ return events_enabled && !multiqueue_empty(main_loop.events);
}
diff --git a/src/nvim/os/os_defs.h b/src/nvim/os/os_defs.h
index eee0cdd10b..14c210c69c 100644
--- a/src/nvim/os/os_defs.h
+++ b/src/nvim/os/os_defs.h
@@ -16,7 +16,7 @@
#define BASENAMELEN (NAME_MAX - 5)
// Use the system path length if it makes sense.
-#if defined(PATH_MAX) && (PATH_MAX > 1000)
+#if defined(PATH_MAX) && (PATH_MAX > 1024)
# define MAXPATHL PATH_MAX
#else
# define MAXPATHL 1024
@@ -46,4 +46,10 @@
/// negative libuv error codes are returned by a number of os functions.
#define os_strerror uv_strerror
+#ifdef WIN32
+# define os_strtok strtok_s
+#else
+# define os_strtok strtok_r
+#endif
+
#endif // NVIM_OS_OS_DEFS_H
diff --git a/src/nvim/os/pty_process.h b/src/nvim/os/pty_process.h
new file mode 100644
index 0000000000..94923499ca
--- /dev/null
+++ b/src/nvim/os/pty_process.h
@@ -0,0 +1,9 @@
+#ifndef NVIM_OS_PTY_PROCESS_H
+#define NVIM_OS_PTY_PROCESS_H
+
+#ifdef WIN32
+# include "nvim/os/pty_process_win.h"
+#else
+# include "nvim/os/pty_process_unix.h"
+#endif
+#endif // NVIM_OS_PTY_PROCESS_H
diff --git a/src/nvim/event/pty_process.c b/src/nvim/os/pty_process_unix.c
index 8eef72f12f..b57a69b82b 100644
--- a/src/nvim/event/pty_process.c
+++ b/src/nvim/os/pty_process_unix.c
@@ -3,7 +3,6 @@
#include <stdlib.h>
#include <string.h>
-#include <unistd.h>
#include <termios.h>
#include <sys/types.h>
#include <sys/wait.h>
@@ -26,11 +25,12 @@
#include "nvim/event/rstream.h"
#include "nvim/event/wstream.h"
#include "nvim/event/process.h"
-#include "nvim/event/pty_process.h"
+#include "nvim/os/pty_process_unix.h"
#include "nvim/log.h"
+#include "nvim/os/os.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "event/pty_process.c.generated.h"
+# include "os/pty_process_unix.c.generated.h"
#endif
bool pty_process_spawn(PtyProcess *ptyproc)
@@ -44,7 +44,7 @@ bool pty_process_spawn(PtyProcess *ptyproc)
Process *proc = (Process *)ptyproc;
assert(!proc->err);
uv_signal_start(&proc->loop->children_watcher, chld_handler, SIGCHLD);
- ptyproc->winsize = (struct winsize){ptyproc->height, ptyproc->width, 0, 0};
+ ptyproc->winsize = (struct winsize){ ptyproc->height, ptyproc->width, 0, 0 };
uv_disable_stdio_inheritance();
int master;
int pid = forkpty(&master, NULL, &termios, &ptyproc->winsize);
@@ -86,11 +86,10 @@ error:
return false;
}
-void pty_process_resize(PtyProcess *ptyproc, uint16_t width,
- uint16_t height)
+void pty_process_resize(PtyProcess *ptyproc, uint16_t width, uint16_t height)
FUNC_ATTR_NONNULL_ALL
{
- ptyproc->winsize = (struct winsize){height, width, 0, 0};
+ ptyproc->winsize = (struct winsize){ height, width, 0, 0 };
ioctl(ptyproc->tty_fd, TIOCSWINSZ, &ptyproc->winsize);
}
@@ -132,6 +131,12 @@ static void init_child(PtyProcess *ptyproc) FUNC_ATTR_NONNULL_ALL
signal(SIGTERM, SIG_DFL);
signal(SIGALRM, SIG_DFL);
+ Process *proc = (Process *)ptyproc;
+ if (proc->cwd && os_chdir(proc->cwd) != 0) {
+ fprintf(stderr, "chdir failed: %s\n", strerror(errno));
+ return;
+ }
+
setenv("TERM", ptyproc->term_name ? ptyproc->term_name : "ansi", 1);
execvp(ptyproc->process.argv[0], ptyproc->process.argv);
fprintf(stderr, "execvp failed: %s\n", strerror(errno));
diff --git a/src/nvim/event/pty_process.h b/src/nvim/os/pty_process_unix.h
index 446d7fd3c8..f7c57b3839 100644
--- a/src/nvim/event/pty_process.h
+++ b/src/nvim/os/pty_process_unix.h
@@ -1,5 +1,5 @@
-#ifndef NVIM_EVENT_PTY_PROCESS_H
-#define NVIM_EVENT_PTY_PROCESS_H
+#ifndef NVIM_OS_PTY_PROCESS_UNIX_H
+#define NVIM_OS_PTY_PROCESS_UNIX_H
#include <sys/ioctl.h>
@@ -25,6 +25,7 @@ static inline PtyProcess pty_process_init(Loop *loop, void *data)
}
#ifdef INCLUDE_GENERATED_DECLARATIONS
-# include "event/pty_process.h.generated.h"
+# include "os/pty_process_unix.h.generated.h"
#endif
-#endif // NVIM_EVENT_PTY_PROCESS_H
+
+#endif // NVIM_OS_PTY_PROCESS_UNIX_H
diff --git a/src/nvim/os/pty_process_win.h b/src/nvim/os/pty_process_win.h
new file mode 100644
index 0000000000..20cc589925
--- /dev/null
+++ b/src/nvim/os/pty_process_win.h
@@ -0,0 +1,28 @@
+#ifndef NVIM_OS_PTY_PROCESS_WIN_H
+#define NVIM_OS_PTY_PROCESS_WIN_H
+
+#include "nvim/event/libuv_process.h"
+
+typedef struct pty_process {
+ Process process;
+ char *term_name;
+ uint16_t width, height;
+} PtyProcess;
+
+#define pty_process_spawn(job) libuv_process_spawn((LibuvProcess *)job)
+#define pty_process_close(job) libuv_process_close((LibuvProcess *)job)
+#define pty_process_close_master(job) libuv_process_close((LibuvProcess *)job)
+#define pty_process_resize(job, width, height)
+#define pty_process_teardown(loop)
+
+static inline PtyProcess pty_process_init(Loop *loop, void *data)
+{
+ PtyProcess rv;
+ rv.process = process_init(loop, kProcessTypePty, data);
+ rv.term_name = NULL;
+ rv.width = 80;
+ rv.height = 24;
+ return rv;
+}
+
+#endif // NVIM_OS_PTY_PROCESS_WIN_H
diff --git a/src/nvim/os/shell.c b/src/nvim/os/shell.c
index f5a1637c94..9514936ad0 100644
--- a/src/nvim/os/shell.c
+++ b/src/nvim/os/shell.c
@@ -14,18 +14,20 @@
#include "nvim/os/shell.h"
#include "nvim/os/signal.h"
#include "nvim/types.h"
+#include "nvim/main.h"
#include "nvim/vim.h"
#include "nvim/message.h"
#include "nvim/memory.h"
#include "nvim/ui.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/memline.h"
#include "nvim/option_defs.h"
#include "nvim/charset.h"
#include "nvim/strings.h"
-#define DYNAMIC_BUFFER_INIT {NULL, 0, 0}
+#define DYNAMIC_BUFFER_INIT { NULL, 0, 0 }
+#define NS_1_SECOND 1000000000U // 1 second, in nanoseconds
+#define OUT_DATA_THRESHOLD 1024 * 10U // 10KB, "a few screenfuls" of data.
typedef struct {
char *data;
@@ -53,12 +55,12 @@ char **shell_build_argv(const char *cmd, const char *extra_args)
size_t i = tokenize(p_sh, rv);
if (extra_args) {
- rv[i++] = xstrdup(extra_args); // Push a copy of `extra_args`
+ rv[i++] = xstrdup(extra_args); // Push a copy of `extra_args`
}
if (cmd) {
- i += tokenize(p_shcf, rv + i); // Split 'shellcmdflag'
- rv[i++] = xstrdup(cmd); // Push a copy of the command.
+ i += tokenize(p_shcf, rv + i); // Split 'shellcmdflag'
+ rv[i++] = shell_xescape_xquote(cmd); // Copy (and escape) `cmd`.
}
rv[i] = NULL;
@@ -162,7 +164,7 @@ int os_call_shell(char_u *cmd, ShellOpts opts, char_u *extra_args)
/// @param input The input to the shell (NULL for no input), passed to the
/// stdin of the resulting process.
/// @param len The length of the input buffer (not used if `input` == NULL)
-/// @param[out] output A pointer to to a location where the output will be
+/// @param[out] output Pointer to a location where the output will be
/// allocated and stored. Will point to NULL if the shell
/// command did not output anything. If NULL is passed,
/// the shell output will be ignored.
@@ -187,6 +189,9 @@ static int do_os_system(char **argv,
bool silent,
bool forward_output)
{
+ out_data_decide_throttle(0); // Initialize throttle decider.
+ out_data_ring(NULL, 0); // Initialize output ring-buffer.
+
// the output buffer
DynamicBuffer buf = DYNAMIC_BUFFER_INIT;
stream_read_cb data_cb = system_data_cb;
@@ -205,29 +210,29 @@ static int do_os_system(char **argv,
xstrlcpy(prog, argv[0], MAXPATHL);
Stream in, out, err;
- LibuvProcess uvproc = libuv_process_init(&loop, &buf);
+ LibuvProcess uvproc = libuv_process_init(&main_loop, &buf);
Process *proc = &uvproc.process;
- Queue *events = queue_new_child(loop.events);
+ MultiQueue *events = multiqueue_new_child(main_loop.events);
proc->events = events;
proc->argv = argv;
proc->in = input != NULL ? &in : NULL;
proc->out = &out;
proc->err = &err;
if (!process_spawn(proc)) {
- loop_poll_events(&loop, 0);
- // Failed, probably due to `sh` not being executable
+ loop_poll_events(&main_loop, 0);
+ // Failed, probably due to 'sh' not being executable
if (!silent) {
MSG_PUTS(_("\nCannot execute "));
msg_outtrans((char_u *)prog);
msg_putchar('\n');
}
- queue_free(events);
+ multiqueue_free(events);
return -1;
}
// We want to deal with stream events as fast a possible while queueing
// process events, so reset everything to NULL. It prevents closing the
- // streams while there's still data in the OS buffer(due to the process
+ // streams while there's still data in the OS buffer (due to the process
// exiting before all data is read).
if (input != NULL) {
proc->in->events = NULL;
@@ -235,10 +240,10 @@ static int do_os_system(char **argv,
}
proc->out->events = NULL;
rstream_init(proc->out, 0);
- rstream_start(proc->out, data_cb);
+ rstream_start(proc->out, data_cb, &buf);
proc->err->events = NULL;
rstream_init(proc->err, 0);
- rstream_start(proc->err, data_cb);
+ rstream_start(proc->err, data_cb, &buf);
// write the input, if any
if (input) {
@@ -250,14 +255,18 @@ static int do_os_system(char **argv,
return -1;
}
// close the input stream after everything is written
- wstream_set_write_cb(&in, shell_write_cb);
+ wstream_set_write_cb(&in, shell_write_cb, NULL);
}
- // invoke busy_start here so event_poll_until wont change the busy state for
- // the UI
+ // Invoke busy_start here so LOOP_PROCESS_EVENTS_UNTIL will not change the
+ // busy state.
ui_busy_start();
ui_flush();
int status = process_wait(proc, -1, NULL);
+ if (!got_int && out_data_decide_throttle(0)) {
+ // Last chunk of output was skipped; display it now.
+ out_data_ring(NULL, SIZE_MAX);
+ }
ui_busy_stop();
// prepare the out parameters if requested
@@ -277,8 +286,8 @@ static int do_os_system(char **argv,
}
}
- assert(queue_empty(events));
- queue_free(events);
+ assert(multiqueue_empty(events));
+ multiqueue_free(events);
return status;
}
@@ -309,25 +318,192 @@ static void system_data_cb(Stream *stream, RBuffer *buf, size_t count,
dbuf->len += nread;
}
+/// Tracks output received for the current executing shell command, and displays
+/// a pulsing "..." when output should be skipped. Tracking depends on the
+/// synchronous/blocking nature of ":!".
+//
+/// Purpose:
+/// 1. CTRL-C is more responsive. #1234 #5396
+/// 2. Improves performance of :! (UI, esp. TUI, is the bottleneck).
+/// 3. Avoids OOM during long-running, spammy :!.
+///
+/// Vim does not need this hack because:
+/// 1. :! in terminal-Vim runs in cooked mode, so CTRL-C is caught by the
+/// terminal and raises SIGINT out-of-band.
+/// 2. :! in terminal-Vim uses a tty (Nvim uses pipes), so commands
+/// (e.g. `git grep`) may page themselves.
+///
+/// @param size Length of data, used with internal state to decide whether
+/// output should be skipped. size=0 resets the internal state and
+/// returns the previous decision.
+///
+/// @returns true if output should be skipped and pulse was displayed.
+/// Returns the previous decision if size=0.
+static bool out_data_decide_throttle(size_t size)
+{
+ static uint64_t started = 0; // Start time of the current throttle.
+ static size_t received = 0; // Bytes observed since last throttle.
+ static size_t visit = 0; // "Pulse" count of the current throttle.
+ static char pulse_msg[] = { ' ', ' ', ' ', '\0' };
+
+ if (!size) {
+ bool previous_decision = (visit > 0);
+ started = received = visit = 0;
+ return previous_decision;
+ }
+
+ received += size;
+ if (received < OUT_DATA_THRESHOLD
+ // Display at least the first chunk of output even if it is big.
+ || (!started && received < size + 1000)) {
+ return false;
+ } else if (!visit) {
+ started = os_hrtime();
+ } else if (visit % 20 == 0) {
+ uint64_t since = os_hrtime() - started;
+ if (since > (3 * NS_1_SECOND)) {
+ received = visit = 0;
+ return false;
+ }
+ }
+
+ visit++;
+ // Pulse "..." at the bottom of the screen.
+ size_t tick = (visit % 20 == 0)
+ ? 3 // Force all dots "..." on last visit.
+ : (visit % 4);
+ pulse_msg[0] = (tick == 0) ? ' ' : '.';
+ pulse_msg[1] = (tick == 0 || 1 == tick) ? ' ' : '.';
+ pulse_msg[2] = (tick == 0 || 1 == tick || 2 == tick) ? ' ' : '.';
+ if (visit == 1) {
+ screen_del_lines(0, 0, 1, (int)Rows, NULL);
+ }
+ int lastrow = (int)Rows - 1;
+ screen_puts_len((char_u *)pulse_msg, ARRAY_SIZE(pulse_msg), lastrow, 0, 0);
+ ui_flush();
+ return true;
+}
+
+/// Saves output in a quasi-ringbuffer. Used to ensure the last ~page of
+/// output for a shell-command is always displayed.
+///
+/// Init mode: Resets the internal state.
+/// output = NULL
+/// size = 0
+/// Print mode: Displays the current saved data.
+/// output = NULL
+/// size = SIZE_MAX
+///
+/// @param output Data to save, or NULL to invoke a special mode.
+/// @param size Length of `output`.
+static void out_data_ring(char *output, size_t size)
+{
+#define MAX_CHUNK_SIZE (OUT_DATA_THRESHOLD / 2)
+ static char last_skipped[MAX_CHUNK_SIZE]; // Saved output.
+ static size_t last_skipped_len = 0;
+
+ assert(output != NULL || (size == 0 || size == SIZE_MAX));
+
+ if (output == NULL && size == 0) { // Init mode
+ last_skipped_len = 0;
+ return;
+ }
+
+ if (output == NULL && size == SIZE_MAX) { // Print mode
+ out_data_append_to_screen(last_skipped, last_skipped_len, true);
+ return;
+ }
+
+ // This is basically a ring-buffer...
+ if (size >= MAX_CHUNK_SIZE) { // Save mode
+ size_t start = size - MAX_CHUNK_SIZE;
+ memcpy(last_skipped, output + start, MAX_CHUNK_SIZE);
+ last_skipped_len = MAX_CHUNK_SIZE;
+ } else if (size > 0) {
+ // Length of the old data that can be kept.
+ size_t keep_len = MIN(last_skipped_len, MAX_CHUNK_SIZE - size);
+ size_t keep_start = last_skipped_len - keep_len;
+ // Shift the kept part of the old data to the start.
+ if (keep_start) {
+ memmove(last_skipped, last_skipped + keep_start, keep_len);
+ }
+ // Copy the entire new data to the remaining space.
+ memcpy(last_skipped + keep_len, output, size);
+ last_skipped_len = keep_len + size;
+ }
+}
+
+/// Continue to append data to last screen line.
+///
+/// @param output Data to append to screen lines.
+/// @param remaining Size of data.
+/// @param new_line If true, next data output will be on a new line.
+static void out_data_append_to_screen(char *output, size_t remaining,
+ bool new_line)
+{
+ static colnr_T last_col = 0; // Column of last row to append to.
+
+ size_t off = 0;
+ int last_row = (int)Rows - 1;
+
+ while (off < remaining) {
+ // Found end of line?
+ if (output[off] == NL) {
+ // Can we start a new line or do we need to continue the last one?
+ if (last_col == 0) {
+ screen_del_lines(0, 0, 1, (int)Rows, NULL);
+ }
+ screen_puts_len((char_u *)output, (int)off, last_row, last_col, 0);
+ last_col = 0;
+
+ size_t skip = off + 1;
+ output += skip;
+ remaining -= skip;
+ off = 0;
+ continue;
+ }
+
+ // Translate NUL to SOH
+ if (output[off] == NUL) {
+ output[off] = 1;
+ }
+
+ off++;
+ }
+
+ if (remaining) {
+ if (last_col == 0) {
+ screen_del_lines(0, 0, 1, (int)Rows, NULL);
+ }
+ screen_puts_len((char_u *)output, (int)remaining, last_row, last_col, 0);
+ last_col += (colnr_T)remaining;
+ }
+
+ if (new_line) {
+ last_col = 0;
+ }
+
+ ui_flush();
+}
+
static void out_data_cb(Stream *stream, RBuffer *buf, size_t count, void *data,
bool eof)
{
+ // We always output the whole buffer, so the buffer can never
+ // wrap around.
size_t cnt;
char *ptr = rbuffer_read_ptr(buf, &cnt);
- if (!cnt) {
- return;
+ if (ptr != NULL && cnt > 0
+ && out_data_decide_throttle(cnt)) { // Skip output above a threshold.
+ // Save the skipped output. If it is the final chunk, we display it later.
+ out_data_ring(ptr, cnt);
+ } else {
+ out_data_append_to_screen(ptr, cnt, eof);
}
- size_t written = write_output(ptr, cnt, false, eof);
- // No output written, force emptying the Rbuffer if it is full.
- if (!written && rbuffer_size(buf) == rbuffer_capacity(buf)) {
- screen_del_lines(0, 0, 1, (int)Rows, NULL);
- screen_puts_len((char_u *)ptr, (int)cnt, (int)Rows - 1, 0, 0);
- written = cnt;
- }
- if (written) {
- rbuffer_consumed(buf, written);
+ if (cnt) {
+ rbuffer_consumed(buf, cnt);
}
}
@@ -500,5 +676,51 @@ static size_t write_output(char *output, size_t remaining, bool to_buffer,
static void shell_write_cb(Stream *stream, void *data, int status)
{
- stream_close(stream, NULL);
+ if (status) {
+ // Can happen if system() tries to send input to a shell command that was
+ // backgrounded (:call system("cat - &", "foo")). #3529 #5241
+ msg_schedule_emsgf(_("E5677: Error writing input to shell-command: %s"),
+ uv_err_name(status));
+ }
+ if (stream->closed) { // Process may have exited before this write.
+ ELOG("stream was already closed");
+ return;
+ }
+ stream_close(stream, NULL, NULL);
+}
+
+/// Applies 'shellxescape' (p_sxe) and 'shellxquote' (p_sxq) to a command.
+///
+/// @param cmd Command string
+/// @return Escaped/quoted command string (allocated).
+static char *shell_xescape_xquote(const char *cmd)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_MALLOC FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (*p_sxq == NUL) {
+ return xstrdup(cmd);
+ }
+
+ const char *ecmd = cmd;
+ if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0) {
+ ecmd = (char *)vim_strsave_escaped_ext((char_u *)cmd, p_sxe, '^', false);
+ }
+ size_t ncmd_size = strlen(ecmd) + STRLEN(p_sxq) * 2 + 1;
+ char *ncmd = xmalloc(ncmd_size);
+
+ // When 'shellxquote' is ( append ).
+ // When 'shellxquote' is "( append )".
+ if (STRCMP(p_sxq, "(") == 0) {
+ vim_snprintf(ncmd, ncmd_size, "(%s)", ecmd);
+ } else if (STRCMP(p_sxq, "\"(") == 0) {
+ vim_snprintf(ncmd, ncmd_size, "\"(%s)\"", ecmd);
+ } else {
+ vim_snprintf(ncmd, ncmd_size, "%s%s%s", p_sxq, ecmd, p_sxq);
+ }
+
+ if (ecmd != cmd) {
+ xfree((void *)ecmd);
+ }
+
+ return ncmd;
}
+
diff --git a/src/nvim/os/signal.c b/src/nvim/os/signal.c
index 0ff6016e32..1ac6d3f5e1 100644
--- a/src/nvim/os/signal.c
+++ b/src/nvim/os/signal.c
@@ -2,15 +2,18 @@
#include <stdbool.h>
#include <uv.h>
+#ifndef WIN32
+# include <signal.h> // for sigset_t
+#endif
#include "nvim/ascii.h"
#include "nvim/vim.h"
#include "nvim/globals.h"
#include "nvim/memline.h"
#include "nvim/eval.h"
+#include "nvim/main.h"
#include "nvim/memory.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/event/signal.h"
#include "nvim/os/signal.h"
#include "nvim/event/loop.h"
@@ -28,10 +31,20 @@ static bool rejecting_deadly;
void signal_init(void)
{
- signal_watcher_init(&loop, &spipe, NULL);
- signal_watcher_init(&loop, &shup, NULL);
- signal_watcher_init(&loop, &squit, NULL);
- signal_watcher_init(&loop, &sterm, NULL);
+#ifndef WIN32
+ // Ensure a clean slate by unblocking all signals. For example, if SIGCHLD is
+ // blocked, libuv may hang after spawning a subprocess on Linux. #5230
+ sigset_t mask;
+ sigemptyset(&mask);
+ if (pthread_sigmask(SIG_SETMASK, &mask, NULL) != 0) {
+ ELOG("Could not unblock signals, nvim might behave strangely.");
+ }
+#endif
+
+ signal_watcher_init(&main_loop, &spipe, NULL);
+ signal_watcher_init(&main_loop, &shup, NULL);
+ signal_watcher_init(&main_loop, &squit, NULL);
+ signal_watcher_init(&main_loop, &sterm, NULL);
#ifdef SIGPIPE
signal_watcher_start(&spipe, on_signal, SIGPIPE);
#endif
@@ -41,7 +54,7 @@ void signal_init(void)
#endif
signal_watcher_start(&sterm, on_signal, SIGTERM);
#ifdef SIGPWR
- signal_watcher_init(&loop, &spwr, NULL);
+ signal_watcher_init(&main_loop, &spwr, NULL);
signal_watcher_start(&spwr, on_signal, SIGPWR);
#endif
}
diff --git a/src/nvim/os/stdpaths.c b/src/nvim/os/stdpaths.c
index 81ceb919c4..afb9bdec31 100644
--- a/src/nvim/os/stdpaths.c
+++ b/src/nvim/os/stdpaths.c
@@ -16,20 +16,29 @@ static const char *xdg_env_vars[] = {
[kXDGDataDirs] = "XDG_DATA_DIRS",
};
+#ifdef WIN32
+static const char *const xdg_defaults_env_vars[] = {
+ [kXDGConfigHome] = "LOCALAPPDATA",
+ [kXDGDataHome] = "LOCALAPPDATA",
+ [kXDGCacheHome] = "TEMP",
+ [kXDGRuntimeDir] = NULL,
+ [kXDGConfigDirs] = NULL,
+ [kXDGDataDirs] = NULL,
+};
+#endif
+
/// Defaults for XDGVarType values
///
/// Used in case environment variables contain nothing. Need to be expanded.
static const char *const xdg_defaults[] = {
#ifdef WIN32
- // Windows
- [kXDGConfigHome] = "$LOCALAPPDATA",
- [kXDGDataHome] = "$LOCALAPPDATA",
- [kXDGCacheHome] = "$TEMP",
+ [kXDGConfigHome] = "~\\AppData\\Local",
+ [kXDGDataHome] = "~\\AppData\\Local",
+ [kXDGCacheHome] = "~\\AppData\\Local\\Temp",
[kXDGRuntimeDir] = NULL,
[kXDGConfigDirs] = NULL,
[kXDGDataDirs] = NULL,
#else
- // Linux, BSD, CYGWIN, Apple
[kXDGConfigHome] = "~/.config",
[kXDGDataHome] = "~/.local/share",
[kXDGCacheHome] = "~/.cache",
@@ -50,7 +59,14 @@ char *stdpaths_get_xdg_var(const XDGVarType idx)
const char *const env = xdg_env_vars[idx];
const char *const fallback = xdg_defaults[idx];
- const char *const env_val = os_getenv(env);
+ const char *env_val = os_getenv(env);
+
+#ifdef WIN32
+ if (env_val == NULL) {
+ env_val = os_getenv(xdg_defaults_env_vars[idx]);
+ }
+#endif
+
char *ret = NULL;
if (env_val != NULL) {
ret = xstrdup(env_val);
@@ -100,18 +116,30 @@ char *stdpaths_user_conf_subpath(const char *fname)
///
/// @param[in] fname New component of the path.
/// @param[in] trailing_pathseps Amount of trailing path separators to add.
+/// @param[in] escape_commas If true, all commas will be escaped.
///
-/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`
+/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`.
char *stdpaths_user_data_subpath(const char *fname,
- const size_t trailing_pathseps)
+ const size_t trailing_pathseps,
+ const bool escape_commas)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
char *ret = concat_fnames_realloc(get_xdg_home(kXDGDataHome), fname, true);
- if (trailing_pathseps) {
- const size_t len = strlen(ret);
- ret = xrealloc(ret, len + trailing_pathseps + 1);
- memset(ret + len, PATHSEP, trailing_pathseps);
- ret[len + trailing_pathseps] = NUL;
+ const size_t len = strlen(ret);
+ const size_t numcommas = (escape_commas ? memcnt(ret, ',', len) : 0);
+ if (numcommas || trailing_pathseps) {
+ ret = xrealloc(ret, len + trailing_pathseps + numcommas + 1);
+ for (size_t i = 0 ; i < len + numcommas ; i++) {
+ if (ret[i] == ',') {
+ memmove(ret + i + 1, ret + i, len - i + numcommas);
+ ret[i] = '\\';
+ i++;
+ }
+ }
+ if (trailing_pathseps) {
+ memset(ret + len + numcommas, PATHSEP, trailing_pathseps);
+ }
+ ret[len + trailing_pathseps + numcommas] = NUL;
}
return ret;
}
diff --git a/src/nvim/os/time.c b/src/nvim/os/time.c
index 188f0802c9..8ce2ecf4f4 100644
--- a/src/nvim/os/time.c
+++ b/src/nvim/os/time.c
@@ -7,8 +7,10 @@
#include <uv.h>
#include "nvim/os/time.h"
+#include "nvim/os/input.h"
#include "nvim/event/loop.h"
#include "nvim/vim.h"
+#include "nvim/main.h"
static uv_mutex_t delay_mutex;
static uv_cond_t delay_cond;
@@ -33,38 +35,54 @@ uint64_t os_hrtime(void)
return uv_hrtime();
}
-/// Sleeps for a certain amount of milliseconds
+/// Sleeps for a certain amount of milliseconds.
///
/// @param milliseconds Number of milliseconds to sleep
-/// @param ignoreinput If true, allow a SIGINT to interrupt us
+/// @param ignoreinput If true, only SIGINT (CTRL-C) can interrupt.
void os_delay(uint64_t milliseconds, bool ignoreinput)
{
if (ignoreinput) {
if (milliseconds > INT_MAX) {
milliseconds = INT_MAX;
}
- LOOP_PROCESS_EVENTS_UNTIL(&loop, NULL, (int)milliseconds, got_int);
+ LOOP_PROCESS_EVENTS_UNTIL(&main_loop, NULL, (int)milliseconds, got_int);
} else {
- os_microdelay(milliseconds * 1000);
+ os_microdelay(milliseconds * 1000u, ignoreinput);
}
}
-/// Sleeps for a certain amount of microseconds
+/// Sleeps for a certain amount of microseconds.
///
-/// @param microseconds Number of microseconds to sleep
-void os_microdelay(uint64_t microseconds)
+/// @param ms Number of microseconds to sleep.
+/// @param ignoreinput If true, ignore all input (including SIGINT/CTRL-C).
+/// If false, waiting is aborted on any input.
+void os_microdelay(uint64_t ms, bool ignoreinput)
{
- uint64_t elapsed = 0;
- uint64_t ns = microseconds * 1000; // convert to nanoseconds
+ uint64_t elapsed = 0u;
uint64_t base = uv_hrtime();
+ // Convert microseconds to nanoseconds, or UINT64_MAX on overflow.
+ const uint64_t ns = (ms < UINT64_MAX / 1000u) ? ms * 1000u : UINT64_MAX;
uv_mutex_lock(&delay_mutex);
while (elapsed < ns) {
- if (uv_cond_timedwait(&delay_cond, &delay_mutex, ns - elapsed)
- == UV_ETIMEDOUT)
+ // If ignoring input, we simply wait the full delay.
+ // Else we check for input in ~100ms intervals.
+ const uint64_t ns_delta = ignoreinput
+ ? ns - elapsed
+ : MIN(ns - elapsed, 100000000u); // 100ms
+
+ const int rv = uv_cond_timedwait(&delay_cond, &delay_mutex, ns_delta);
+ if (0 != rv && UV_ETIMEDOUT != rv) {
+ assert(false);
+ break;
+ } // Else: Timeout proceeded normally.
+
+ if (!ignoreinput && os_char_avail()) {
break;
- uint64_t now = uv_hrtime();
+ }
+
+ const uint64_t now = uv_hrtime();
elapsed += now - base;
base = now;
}
diff --git a/src/nvim/os/users.c b/src/nvim/os/users.c
index 8ebb7562ef..1c94ef0067 100644
--- a/src/nvim/os/users.c
+++ b/src/nvim/os/users.c
@@ -6,7 +6,6 @@
#include "nvim/os/os.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
-#include "nvim/misc2.h"
#include "nvim/strings.h"
#ifdef HAVE_PWD_H
# include <pwd.h>
diff --git a/src/nvim/os_unix.c b/src/nvim/os_unix.c
index 2ed0c2c856..08294fa6a0 100644
--- a/src/nvim/os_unix.c
+++ b/src/nvim/os_unix.c
@@ -27,7 +27,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/mouse.h"
#include "nvim/garray.h"
#include "nvim/path.h"
@@ -566,10 +565,11 @@ int mch_expand_wildcards(int num_pat, char_u **pat, int *num_file,
/*
* Move the file names to allocated memory.
*/
- for (j = 0, i = 0; i < *num_file; ++i) {
- /* Require the files to exist. Helps when using /bin/sh */
- if (!(flags & EW_NOTFOUND) && !os_file_exists((*file)[i]))
+ for (j = 0, i = 0; i < *num_file; i++) {
+ // Require the files to exist. Helps when using /bin/sh
+ if (!(flags & EW_NOTFOUND) && !os_path_exists((*file)[i])) {
continue;
+ }
/* check if this entry should be included */
dir = (os_isdir((*file)[i]));
diff --git a/src/nvim/path.c b/src/nvim/path.c
index 41fd69f238..374d72ddd3 100644
--- a/src/nvim/path.c
+++ b/src/nvim/path.c
@@ -18,7 +18,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/option.h"
#include "nvim/os/os.h"
#include "nvim/os/shell.h"
@@ -172,19 +171,23 @@ char_u *path_next_component(char_u *fname)
return fname;
}
-/*
- * Get a pointer to one character past the head of a path name.
- * Unix: after "/"; DOS: after "c:\"; Mac: no head.
- * If there is no head, path is returned.
- */
+/// Get a pointer to one character past the head of a path name.
+/// Unix: after "/"; Win: after "c:\"
+/// If there is no head, path is returned.
char_u *get_past_head(char_u *path)
{
- char_u *retval;
+ char_u *retval = path;
- retval = path;
+#ifdef WIN32
+ // May skip "c:"
+ if (isalpha(path[0]) && path[1] == ':') {
+ retval = path + 2;
+ }
+#endif
- while (vim_ispathsep(*retval))
+ while (vim_ispathsep(*retval)) {
++retval;
+ }
return retval;
}
@@ -388,15 +391,22 @@ char *concat_fnames_realloc(char *fname1, const char *fname2, bool sep)
fname2, len2, sep);
}
-/*
- * Add a path separator to a file name, unless it already ends in a path
- * separator.
- */
-void add_pathsep(char *p)
+/// Adds a path separator to a filename, unless it already ends in one.
+///
+/// @return `true` if the path separator was added or already existed.
+/// `false` if the filename is too long.
+bool add_pathsep(char *p)
FUNC_ATTR_NONNULL_ALL
{
- if (*p != NUL && !after_pathsep(p, p + strlen(p)))
- strcat(p, PATHSEPSTR);
+ const size_t len = strlen(p);
+ if (*p != NUL && !after_pathsep(p, p + len)) {
+ const size_t pathsep_len = sizeof(PATHSEPSTR);
+ if (len > MAXPATHL - pathsep_len) {
+ return false;
+ }
+ memcpy(p + len, PATHSEPSTR, pathsep_len);
+ }
+ return true;
}
/// Get an allocated copy of the full path to a file.
@@ -414,15 +424,11 @@ char *FullName_save(char *fname, bool force)
}
char *buf = xmalloc(MAXPATHL);
- char *new_fname = NULL;
- if (vim_FullName(fname, buf, MAXPATHL, force) != FAIL) {
- new_fname = xstrdup(buf);
- } else {
- new_fname = xstrdup(fname);
+ if (vim_FullName(fname, buf, MAXPATHL, force) == FAIL) {
+ xfree(buf);
+ return xstrdup(fname);
}
- xfree(buf);
-
- return new_fname;
+ return buf;
}
/// Saves the absolute path.
@@ -562,11 +568,12 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,
while (*path_end != NUL) {
/* May ignore a wildcard that has a backslash before it; it will
* be removed by rem_backslash() or file_pat_to_reg_pat() below. */
- if (path_end >= path + wildoff && rem_backslash(path_end))
+ if (path_end >= path + wildoff && rem_backslash(path_end)) {
*p++ = *path_end++;
- else if (*path_end == '/') {
- if (e != NULL)
+ } else if (vim_ispathsep_nocolon(*path_end)) {
+ if (e != NULL) {
break;
+ }
s = p + 1;
} else if (path_end >= path + wildoff
&& (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
@@ -579,7 +586,7 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,
}
if (has_mbyte) {
len = (size_t)(*mb_ptr2len)(path_end);
- STRNCPY(p, path_end, len);
+ memcpy(p, path_end, len);
p += len;
path_end += len;
} else
@@ -684,7 +691,7 @@ static size_t do_path_expand(garray_T *gap, const char_u *path,
}
// add existing file or symbolic link
if ((flags & EW_ALLLINKS) ? os_fileinfo_link((char *)buf, &file_info)
- : os_file_exists(buf)) {
+ : os_path_exists(buf)) {
addfile(gap, buf, flags);
}
}
@@ -899,17 +906,30 @@ static void uniquefy_paths(garray_T *gap, char_u *pattern)
/* Shorten the filename while maintaining its uniqueness */
path_cutoff = get_path_cutoff(path, &path_ga);
- /* we start at the end of the path */
- pathsep_p = path + len - 1;
-
- while (find_previous_pathsep(path, &pathsep_p))
- if (vim_regexec(&regmatch, pathsep_p + 1, (colnr_T)0)
- && is_unique(pathsep_p + 1, gap, i)
- && path_cutoff != NULL && pathsep_p + 1 >= path_cutoff) {
- sort_again = true;
- memmove(path, pathsep_p + 1, STRLEN(pathsep_p));
- break;
+ // Don't assume all files can be reached without path when search
+ // pattern starts with **/, so only remove path_cutoff
+ // when possible.
+ if (pattern[0] == '*' && pattern[1] == '*'
+ && vim_ispathsep_nocolon(pattern[2])
+ && path_cutoff != NULL
+ && vim_regexec(&regmatch, path_cutoff, (colnr_T)0)
+ && is_unique(path_cutoff, gap, i)) {
+ sort_again = true;
+ memmove(path, path_cutoff, STRLEN(path_cutoff) + 1);
+ } else {
+ // Here all files can be reached without path, so get shortest
+ // unique path. We start at the end of the path. */
+ pathsep_p = path + len - 1;
+ while (find_previous_pathsep(path, &pathsep_p)) {
+ if (vim_regexec(&regmatch, pathsep_p + 1, (colnr_T)0)
+ && is_unique(pathsep_p + 1, gap, i)
+ && path_cutoff != NULL && pathsep_p + 1 >= path_cutoff) {
+ sort_again = true;
+ memmove(path, pathsep_p + 1, STRLEN(pathsep_p));
+ break;
+ }
}
+ }
if (path_is_absolute_path(path)) {
/*
@@ -1205,10 +1225,11 @@ int gen_expand_wildcards(int num_pat, char_u **pat, int *num_file,
/* When EW_NOTFOUND is used, always add files and dirs. Makes
* "vim c:/" work. */
- if (flags & EW_NOTFOUND)
+ if (flags & EW_NOTFOUND) {
addfile(&ga, t, flags | EW_DIR | EW_FILE);
- else if (os_file_exists(t))
+ } else if (os_path_exists(t)) {
addfile(&ga, t, flags);
+ }
xfree(t);
}
@@ -1327,7 +1348,7 @@ void addfile(
if (!(flags & EW_NOTFOUND)
&& ((flags & EW_ALLLINKS)
? !os_fileinfo_link((char *)f, &file_info)
- : !os_file_exists(f))) {
+ : !os_path_exists(f))) {
return;
}
@@ -1631,30 +1652,37 @@ bool vim_isAbsName(char_u *name)
/// Save absolute file name to "buf[len]".
///
-/// @param fname is the filename to evaluate
-/// @param[out] buf is the buffer for returning the absolute path for `fname`
-/// @param len is the length of `buf`
-/// @param force is a flag to force expanding even if the path is absolute
+/// @param fname filename to evaluate
+/// @param[out] buf contains `fname` absolute path, or:
+/// - truncated `fname` if longer than `len`
+/// - unmodified `fname` if absolute path fails or is a URL
+/// @param len length of `buf`
+/// @param force flag to force expanding even if the path is absolute
///
/// @return FAIL for failure, OK otherwise
int vim_FullName(const char *fname, char *buf, size_t len, bool force)
FUNC_ATTR_NONNULL_ARG(2)
{
- int retval = OK;
- int url;
-
*buf = NUL;
- if (fname == NULL)
+ if (fname == NULL) {
return FAIL;
+ }
- url = path_with_url(fname);
- if (!url)
- retval = path_get_absolute_path((char_u *)fname, (char_u *)buf, len, force);
- if (url || retval == FAIL) {
- /* something failed; use the file name (truncate when too long) */
+ if (strlen(fname) > (len - 1)) {
+ xstrlcpy(buf, fname, len); // truncate
+ return FAIL;
+ }
+
+ if (path_with_url(fname)) {
xstrlcpy(buf, fname, len);
+ return OK;
}
- return retval;
+
+ int rv = path_get_absolute_path((char_u *)fname, (char_u *)buf, len, force);
+ if (rv == FAIL) {
+ xstrlcpy(buf, fname, len); // something failed; use the filename
+ }
+ return rv;
}
/// Get the full resolved path for `fname`
@@ -2098,7 +2126,6 @@ int path_full_dir_name(char *directory, char *buffer, size_t len)
}
// Append to_append to path with a slash in between.
-// Append to_append to path with a slash in between.
int append_path(char *path, const char *to_append, size_t max_len)
{
size_t current_length = strlen(path);
@@ -2115,7 +2142,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
}
// Glue both paths with a slash.
- if (current_length > 0 && path[current_length-1] != '/') {
+ if (current_length > 0 && !vim_ispathsep_nocolon(path[current_length-1])) {
current_length += 1; // Count the trailing slash.
// +1 for the NUL at the end.
@@ -2123,7 +2150,7 @@ int append_path(char *path, const char *to_append, size_t max_len)
return FAIL;
}
- STRCAT(path, "/");
+ STRCAT(path, PATHSEPSTR);
}
// +1 for the NUL at the end.
@@ -2161,7 +2188,8 @@ static int path_get_absolute_path(const char_u *fname, char_u *buf,
relative_directory[0] = '/';
relative_directory[1] = NUL;
} else {
- STRNCPY(relative_directory, fname, p-fname);
+ assert(p >= fname);
+ memcpy(relative_directory, fname, (size_t)(p - fname));
relative_directory[p-fname] = NUL;
}
end_of_path = (char *) (p + 1);
@@ -2181,9 +2209,16 @@ static int path_get_absolute_path(const char_u *fname, char_u *buf,
/// Check if the given file is absolute.
///
-/// This just checks if the file name starts with '/' or '~'.
/// @return `TRUE` if "fname" is absolute.
int path_is_absolute_path(const char_u *fname)
{
+#ifdef WIN32
+ // A name like "d:/foo" and "//server/share" is absolute
+ return ((isalpha(fname[0]) && fname[1] == ':'
+ && vim_ispathsep_nocolon(fname[2]))
+ || (vim_ispathsep_nocolon(fname[0]) && fname[0] == fname[1]));
+#else
+ // UNIX: This just checks if the file name starts with '/' or '~'.
return *fname == '/' || *fname == '~';
+#endif
}
diff --git a/src/nvim/po/CMakeLists.txt b/src/nvim/po/CMakeLists.txt
index 184c4894b9..d2b62f89a0 100644
--- a/src/nvim/po/CMakeLists.txt
+++ b/src/nvim/po/CMakeLists.txt
@@ -22,16 +22,14 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
ko.UTF-8
nl
no
- pl
+ pl.UTF-8
pt_BR
ru
sk
sv
uk
vi
- zh_CN
zh_CN.UTF-8
- zh_TW
zh_TW.UTF-8)
set(NEOVIM_RELATIVE_SOURCES)
@@ -48,7 +46,7 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
-DXGETTEXT_PRG=${XGETTEXT_PRG}
-DPOT_FILE=${NVIM_POT}
-DSEARCH_DIR=${CMAKE_CURRENT_SOURCE_DIR}
- "'-DSOURCES=${NEOVIM_RELATIVE_SOURCES}'"
+ "\"-DSOURCES=${NEOVIM_RELATIVE_SOURCES}\""
-P ${PROJECT_SOURCE_DIR}/cmake/RunXgettext.cmake
DEPENDS ${NEOVIM_SOURCES})
@@ -143,27 +141,9 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
BuildPoIconv(cs ISO-8859-2 cp1250)
BuildMo(cs.cp1250)
- BuildPoIconv(pl ISO-8859-2 cp1250)
- BuildMo(pl.cp1250)
-
- BuildPoIconv(pl ISO-8859-2 UTF-8)
- BuildMo(pl.UTF-8)
-
BuildPoIconv(sk ISO-8859-2 cp1250)
BuildMo(sk.cp1250)
- BuildPoIconv(ru UTF-8 cp1251)
- BuildMo(ru.cp1251)
-
- BuildPoIconv(uk UTF-8 cp1251)
- BuildMo(uk.cp1251)
-
- BuildPoIconvGeneric(ko ko.UTF-8 ko UTF-8 euc-kr)
- BuildMo(ko)
-
- BuildPoIconvGenericWithCharset(zh_CN.cp936 zh_CN zh_CN.cp936 gb2312 cp936 gbk)
- BuildMo(zh_CN.cp936)
-
add_custom_target(update-po-nb
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/no.po ${CMAKE_CURRENT_SOURCE_DIR}/nb.po
@@ -172,15 +152,6 @@ if(HAVE_WORKING_LIBINTL AND GETTEXT_FOUND AND XGETTEXT_PRG AND ICONV_PRG)
CheckPo(nb)
BuildMo(nb)
- add_executable(sjiscorr sjiscorr.c)
- add_custom_target(update-po-ja.sjis
- COMMAND iconv -f utf-8 -t cp932 ${CMAKE_CURRENT_SOURCE_DIR}/ja.po |
- $<TARGET_FILE:sjiscorr> > ${CMAKE_CURRENT_SOURCE_DIR}/ja.sjis.po
- DEPENDS ja.po sjiscorr)
- list(APPEND UPDATE_PO_TARGETS update-po-ja.sjis)
- CheckPo(ja.sjis)
- BuildMo(ja.sjis)
-
foreach(LANGUAGE ${LANGUAGES})
set(poFile "${CMAKE_CURRENT_SOURCE_DIR}/${LANGUAGE}.po")
diff --git a/src/nvim/po/af.po b/src/nvim/po/af.po
index 6bb93b9e02..eb6be42688 100644
--- a/src/nvim/po/af.po
+++ b/src/nvim/po/af.po
@@ -2722,11 +2722,6 @@ msgstr "E49: Ongeldige rolgrootte"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4305,10 +4300,6 @@ msgstr "reël %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ongeldige registernaam: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Boodskappe onderhouers: Danie Roux en Jean Jordaan <droux@tuks.co.za>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Onderbreek: "
diff --git a/src/nvim/po/ca.po b/src/nvim/po/ca.po
index 79434cfdcd..7d32db9f97 100644
--- a/src/nvim/po/ca.po
+++ b/src/nvim/po/ca.po
@@ -2717,11 +2717,6 @@ msgstr "E49: La distància de desplaçament no és vàlida"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4293,10 +4288,6 @@ msgstr "línia %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: El nom de registre no és vàlid: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Traducció dels missatges: Ernest Adrogué <eadrogue@gmx.net>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrupció: "
diff --git a/src/nvim/po/cs.cp1250.po b/src/nvim/po/cs.cp1250.po
index 1e62034317..112e949815 100644
--- a/src/nvim/po/cs.cp1250.po
+++ b/src/nvim/po/cs.cp1250.po
@@ -2763,11 +2763,6 @@ msgstr "E49: Chybná hodnota volby 'scroll'"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4378,10 +4373,6 @@ msgstr "øádek %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' není pøípustné jméno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Správce zpráv: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Pøerušení: "
diff --git a/src/nvim/po/cs.po b/src/nvim/po/cs.po
index dd7016fedb..3839230df2 100644
--- a/src/nvim/po/cs.po
+++ b/src/nvim/po/cs.po
@@ -2763,11 +2763,6 @@ msgstr "E49: Chybná hodnota volby 'scroll'"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4378,10 +4373,6 @@ msgstr "øádek %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' není pøípustné jméno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Správce zpráv: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Pøeru¹ení: "
diff --git a/src/nvim/po/de.po b/src/nvim/po/de.po
index 4950533a21..f04d3be4b4 100644
--- a/src/nvim/po/de.po
+++ b/src/nvim/po/de.po
@@ -2137,11 +2137,6 @@ msgstr "E900: Ungültige Job-ID"
msgid "E901: Job table is full"
msgstr "E901: Job-Tabelle ist voll"
-#: ../globals.h:1021
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr "E902: \"%s\" ist nicht ausführbar"
-
#: ../globals.h:1023
#, c-format
msgid "E364: Library call failed for \"%s()\""
diff --git a/src/nvim/po/en_GB.po b/src/nvim/po/en_GB.po
index b4b38e11e3..00a05195b4 100644
--- a/src/nvim/po/en_GB.po
+++ b/src/nvim/po/en_GB.po
@@ -2623,11 +2623,6 @@ msgstr ""
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4128,10 +4123,6 @@ msgstr ""
msgid "E354: Invalid register name: '%s'"
msgstr ""
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Messages maintainer: Mike Williams <mrw@eandem.co.uk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ""
diff --git a/src/nvim/po/eo.po b/src/nvim/po/eo.po
index 5b0cb2260b..b7bc6397ef 100644
--- a/src/nvim/po/eo.po
+++ b/src/nvim/po/eo.po
@@ -23,8 +23,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim(Esperanto)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-30 17:54+0200\n"
-"PO-Revision-Date: 2015-07-30 18:00+0200\n"
+"POT-Creation-Date: 2016-07-02 16:21+0200\n"
+"PO-Revision-Date: 2016-07-02 17:05+0200\n"
"Last-Translator: Dominique PELLÉ <dominique.pelle@gmail.com>\n"
"Language-Team: \n"
"Language: eo\n"
@@ -32,98 +32,76 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../api/private/helpers.c:201
#, fuzzy
-msgid "Unable to get option value"
-msgstr "fiaskis akiri valoron de opcio"
+#~ msgid "Unable to get option value"
+#~ msgstr "fiaskis akiri valoron de opcio"
-#: ../api/private/helpers.c:204
#, fuzzy
-msgid "internal error: unknown option type"
-msgstr "interna eraro: neniu vim-a listero"
+#~ msgid "internal error: unknown option type"
+#~ msgstr "interna eraro: neniu vim-a listero"
-#: ../buffer.c:92
msgid "[Location List]"
msgstr "[Listo de lokoj]"
# DP: Ĉu vere indas traduki Quickfix?
-#: ../buffer.c:93
msgid "[Quickfix List]"
msgstr "[Listo de rapidriparoj]"
-#: ../buffer.c:94
msgid "E855: Autocommands caused command to abort"
msgstr "E855: AÅ­tokomandoj haltigis komandon"
-#: ../buffer.c:135
msgid "E82: Cannot allocate any buffer, exiting..."
msgstr "E82: Ne eblas disponigi iun ajn bufron, nun eliras..."
-#: ../buffer.c:138
msgid "E83: Cannot allocate buffer, using other one..."
msgstr "E83: Ne eblas disponigi bufron, nun uzas alian..."
-#: ../buffer.c:763
msgid "E515: No buffers were unloaded"
msgstr "E515: Neniu bufro estis malÅargita"
-#: ../buffer.c:765
msgid "E516: No buffers were deleted"
msgstr "E516: Neniu bufro estis forviÅita"
-#: ../buffer.c:767
msgid "E517: No buffers were wiped out"
msgstr "E517: Neniu bufro estis detruita"
-#: ../buffer.c:772
msgid "1 buffer unloaded"
msgstr "1 bufro malÅargita"
-#: ../buffer.c:774
#, c-format
msgid "%d buffers unloaded"
msgstr "%d bufroj malÅargitaj"
-#: ../buffer.c:777
msgid "1 buffer deleted"
msgstr "1 bufro forviÅita"
-#: ../buffer.c:779
#, c-format
msgid "%d buffers deleted"
msgstr "%d bufroj forviÅitaj"
-#: ../buffer.c:782
msgid "1 buffer wiped out"
msgstr "1 bufro detruita"
-#: ../buffer.c:784
#, c-format
msgid "%d buffers wiped out"
msgstr "%d bufroj detruitaj"
-#: ../buffer.c:806
msgid "E90: Cannot unload last buffer"
msgstr "E90: Ne eblas malÅargi la lastan bufron"
-#: ../buffer.c:874
msgid "E84: No modified buffer found"
msgstr "E84: Neniu modifita bufro trovita"
#. back where we started, didn't find anything.
-#: ../buffer.c:903
msgid "E85: There is no listed buffer"
msgstr "E85: Estas neniu listigita bufro"
-#: ../buffer.c:915
msgid "E87: Cannot go beyond last buffer"
msgstr "E87: Ne eblas iri preter la lastan bufron"
-#: ../buffer.c:917
msgid "E88: Cannot go before first buffer"
msgstr "E88: Ne eblas iri antaÅ­ la unuan bufron"
-#: ../buffer.c:945
#, c-format
msgid ""
"E89: No write since last change for buffer %<PRId64> (add ! to override)"
@@ -132,103 +110,80 @@ msgstr ""
"transpasi)"
#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
msgid "W14: Warning: List of file names overflow"
msgstr "W14: Averto: Listo de dosiernomoj troas"
-#: ../buffer.c:1555 ../quickfix.c:3361
#, c-format
msgid "E92: Buffer %<PRId64> not found"
msgstr "E92: Bufro %<PRId64> ne trovita"
-#: ../buffer.c:1798
#, c-format
msgid "E93: More than one match for %s"
msgstr "E93: Pli ol unu kongruo kun %s"
-#: ../buffer.c:1800
#, c-format
msgid "E94: No matching buffer for %s"
msgstr "E94: Neniu bufro kongruas kun %s"
-#: ../buffer.c:2161
#, c-format
msgid "line %<PRId64>"
msgstr "linio %<PRId64>"
-#: ../buffer.c:2233
msgid "E95: Buffer with this name already exists"
msgstr "E95: Bufro kun tiu nomo jam ekzistas"
-#: ../buffer.c:2498
msgid " [Modified]"
msgstr "[Modifita]"
-#: ../buffer.c:2501
msgid "[Not edited]"
msgstr "[Ne redaktita]"
-#: ../buffer.c:2504
msgid "[New file]"
msgstr "[Nova dosiero]"
-#: ../buffer.c:2505
msgid "[Read errors]"
msgstr "[Eraroj de legado]"
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
msgid "[RO]"
msgstr "[Nurlegebla]"
-#: ../buffer.c:2507 ../fileio.c:1807
msgid "[readonly]"
msgstr "[nurlegebla]"
-#: ../buffer.c:2524
#, c-format
msgid "1 line --%d%%--"
msgstr "1 linio --%d%%--"
-#: ../buffer.c:2526
#, c-format
msgid "%<PRId64> lines --%d%%--"
msgstr "%<PRId64> linioj --%d%%--"
-#: ../buffer.c:2530
#, c-format
msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
msgstr "linio %<PRId64> de %<PRId64> --%d%%-- kol "
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
msgid "[No Name]"
msgstr "[Neniu nomo]"
#. must be a help buffer
-#: ../buffer.c:2667
msgid "help"
msgstr "helpo"
-#: ../buffer.c:3225 ../screen.c:4883
msgid "[Help]"
msgstr "[Helpo]"
-#: ../buffer.c:3254 ../screen.c:4887
msgid "[Preview]"
msgstr "[AntaÅ­vido]"
-#: ../buffer.c:3528
msgid "All"
msgstr "Ĉio"
-#: ../buffer.c:3528
msgid "Bot"
msgstr "Subo"
-#: ../buffer.c:3531
msgid "Top"
msgstr "Supro"
-#: ../buffer.c:4244
msgid ""
"\n"
"# Buffer list:\n"
@@ -236,12 +191,10 @@ msgstr ""
"\n"
"# Listo de bufroj:\n"
-#: ../buffer.c:4289
msgid "[Scratch]"
msgstr "[Malneto]"
# DP: Vidu ":help sign-support" por klarigo pri "Sign"
-#: ../buffer.c:4529
msgid ""
"\n"
"--- Signs ---"
@@ -249,200 +202,153 @@ msgstr ""
"\n"
"--- Emfazaj simbolaĵoj ---"
-#: ../buffer.c:4538
#, c-format
msgid "Signs for %s:"
msgstr "Emfazaj simbolaĵoj de %s:"
-#: ../buffer.c:4543
#, c-format
msgid " line=%<PRId64> id=%d name=%s"
msgstr " linio=%<PRId64> id=%d nomo=%s"
-#: ../cursor_shape.c:68
msgid "E545: Missing colon"
msgstr "E545: Mankas dupunkto"
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
msgid "E546: Illegal mode"
msgstr "E546: ReÄimo nepermesata"
-#: ../cursor_shape.c:134
msgid "E548: digit expected"
msgstr "E548: cifero atendata"
-#: ../cursor_shape.c:138
msgid "E549: Illegal percentage"
msgstr "E549: Nevalida procento"
-#: ../diff.c:146
#, c-format
msgid "E96: Can not diff more than %<PRId64> buffers"
msgstr "E96: Ne eblas dosierdiferenci pli ol %<PRId64> bufrojn"
-#: ../diff.c:753
msgid "E810: Cannot read or write temp files"
msgstr "E810: Ne eblas legi aÅ­ skribi provizorajn dosierojn"
-#: ../diff.c:755
msgid "E97: Cannot create diffs"
msgstr "E97: Ne eblas krei dosierdiferencojn"
-#: ../diff.c:966
msgid "E816: Cannot read patch output"
msgstr "E816: Ne eblas legi eliron de flikilo \"patch\""
-#: ../diff.c:1220
msgid "E98: Cannot read diff output"
msgstr "E98: Ne eblas legi eliron de dosierdiferencilo \"diff\""
-#: ../diff.c:2081
msgid "E99: Current buffer is not in diff mode"
msgstr "E99: Aktuala bufro ne estas en dosierdiferenca reÄimo"
-#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
msgstr "E793: Neniu alia bufro en dosierdiferenca reÄimo estas modifebla"
-#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
msgstr "E100: Neniu alia bufro en dosierdiferenca reÄimo"
-#: ../diff.c:2112
msgid "E101: More than two buffers in diff mode, don't know which one to use"
msgstr "E101: Pli ol du bufroj en dosierdiferenca reÄimo, ne scias kiun uzi"
-#: ../diff.c:2141
#, c-format
msgid "E102: Can't find buffer \"%s\""
msgstr "E102: Ne eblas trovi bufron \"%s\""
-#: ../diff.c:2152
#, c-format
msgid "E103: Buffer \"%s\" is not in diff mode"
msgstr "E103: Bufro \"%s\" ne estas en dosierdiferenca reÄimo"
-#: ../diff.c:2193
msgid "E787: Buffer changed unexpectedly"
msgstr "E787: Bufro ÅanÄiÄis neatendite"
-#: ../digraph.c:1598
msgid "E104: Escape not allowed in digraph"
msgstr "E104: Eskapsigno nepermesebla en duliteraĵo"
-#: ../digraph.c:1760
msgid "E544: Keymap file not found"
msgstr "E544: Dosiero de klavmapo ne troveblas"
-#: ../digraph.c:1785
msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: Uzo de \":loadkeymap\" nur eblas en vim-skripto"
-#: ../digraph.c:1821
msgid "E791: Empty keymap entry"
msgstr "E791: Malplena rikordo en klavmapo"
-#: ../edit.c:82
msgid " Keyword completion (^N^P)"
msgstr " Kompletigo de Ålosilvorto (^N^P)"
#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
msgstr " ReÄimo ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-#: ../edit.c:85
msgid " Whole line completion (^L^N^P)"
msgstr " Kompletigo de tuta linio (^L^N^P)"
-#: ../edit.c:86
msgid " File name completion (^F^N^P)"
msgstr " Kompletigo de dosiernomo (^F^N^P)"
-#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
msgstr " Kompletigo de etikedo (^]^N^P)"
-#: ../edit.c:88
msgid " Path pattern completion (^N^P)"
msgstr " Kompletigo de Åablona dosierindiko (^N^P)"
-#: ../edit.c:89
msgid " Definition completion (^D^N^P)"
msgstr " Kompletigo de difino (^D^N^P)"
-#: ../edit.c:91
msgid " Dictionary completion (^K^N^P)"
msgstr " Kompletigo de vortaro (^K^N^P)"
-#: ../edit.c:92
msgid " Thesaurus completion (^T^N^P)"
msgstr " Kompletigo de tezaÅ­ro (^T^N^P)"
-#: ../edit.c:93
msgid " Command-line completion (^V^N^P)"
msgstr " Kompletigo de komanda linio (^V^N^P)"
-#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
msgstr " Kompletigo difinita de uzanto (^U^N^P)"
# DP: Ĉu eblas trovi pli bonan tradukon?
-#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
msgstr " Kompletigo Omni (^O^N^P)"
-#: ../edit.c:96
msgid " Spelling suggestion (s^N^P)"
msgstr " Sugesto de literumo (s^N^P)"
-#: ../edit.c:97
msgid " Keyword Local completion (^N^P)"
msgstr " Kompletigo loka de Ålosilvorto (^N/^P)"
-#: ../edit.c:100
msgid "Hit end of paragraph"
msgstr "Atingis finon de alineo"
-#: ../edit.c:101
msgid "E839: Completion function changed window"
msgstr "E839: Kompletiga funkcio ÅanÄis la fenestron"
-#: ../edit.c:102
msgid "E840: Completion function deleted text"
msgstr "E840: Kompletiga funkcio forviÅis tekston"
-#: ../edit.c:1847
msgid "'dictionary' option is empty"
msgstr "La opcio 'dictionary' estas malplena"
-#: ../edit.c:1848
msgid "'thesaurus' option is empty"
msgstr "La opcio 'thesaurus' estas malplena"
-#: ../edit.c:2655
#, c-format
msgid "Scanning dictionary: %s"
msgstr "Analizas vortaron: %s"
-#: ../edit.c:3079
msgid " (insert) Scroll (^E/^Y)"
msgstr " (enmeto) Rulumo (^E/^Y)"
-#: ../edit.c:3081
msgid " (replace) Scroll (^E/^Y)"
msgstr " (anstataÅ­igo) Rulumo (^E/^Y)"
-#: ../edit.c:3587
#, c-format
msgid "Scanning: %s"
msgstr "Analizas: %s"
-#: ../edit.c:3614
msgid "Scanning tags."
msgstr "Analizas etikedojn."
-#: ../edit.c:4519
msgid " Adding"
msgstr " Aldonanta"
@@ -450,576 +356,469 @@ msgstr " Aldonanta"
#. * be called before line = ml_get(), or when this address is no
#. * longer needed. -- Acevedo.
#.
-#: ../edit.c:4562
msgid "-- Searching..."
msgstr "-- Serĉanta..."
-#: ../edit.c:4618
msgid "Back at original"
msgstr "Reveninta al originalo"
-#: ../edit.c:4621
msgid "Word from other line"
msgstr "Vorto el alia linio"
-#: ../edit.c:4624
msgid "The only match"
msgstr "La sola kongruo"
-#: ../edit.c:4680
#, c-format
msgid "match %d of %d"
msgstr "kongruo %d de %d"
-#: ../edit.c:4684
#, c-format
msgid "match %d"
msgstr "kongruo %d"
-#: ../eval.c:137
msgid "E18: Unexpected characters in :let"
msgstr "E18: Neatenditaj signoj en \":let\""
-#: ../eval.c:138
#, c-format
msgid "E684: list index out of range: %<PRId64>"
msgstr "E684: indekso de listo ekster limoj: %<PRId64>"
-#: ../eval.c:139
#, c-format
msgid "E121: Undefined variable: %s"
msgstr "E121: Nedifinita variablo: %s"
-#: ../eval.c:140
msgid "E111: Missing ']'"
msgstr "E111: Mankas ']'"
-#: ../eval.c:141
#, c-format
msgid "E686: Argument of %s must be a List"
msgstr "E686: Argumento de %s devas esti Listo"
-#: ../eval.c:143
#, c-format
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: Argumento de %s devas esti Listo aÅ­ Vortaro"
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Ne eblas uzi malplenan Ålosilon de Vortaro"
-
-#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: Listo bezonata"
-#: ../eval.c:146
msgid "E715: Dictionary required"
msgstr "E715: Vortaro bezonata"
-#: ../eval.c:147
+msgid "E928: String required"
+msgstr "E928: Ĉeno bezonata"
+
#, c-format
msgid "E118: Too many arguments for function: %s"
msgstr "E118: Tro da argumentoj por funkcio: %s"
-#: ../eval.c:148
#, c-format
msgid "E716: Key not present in Dictionary: %s"
msgstr "E716: Åœlosilo malekzistas en Vortaro: %s"
-#: ../eval.c:150
#, c-format
msgid "E122: Function %s already exists, add ! to replace it"
msgstr "E122: La funkcio %s jam ekzistas (aldonu ! por anstataÅ­igi Äin)"
-#: ../eval.c:151
msgid "E717: Dictionary entry already exists"
msgstr "E717: Rikordo de vortaro jam ekzistas"
-#: ../eval.c:152
msgid "E718: Funcref required"
msgstr "E718: Funcref bezonata"
-#: ../eval.c:153
msgid "E719: Cannot use [:] with a Dictionary"
msgstr "E719: Uzo de [:] ne eblas kun Vortaro"
-#: ../eval.c:154
#, c-format
msgid "E734: Wrong variable type for %s="
msgstr "E734: Nevalida datumtipo de variablo de %s="
-#: ../eval.c:155
#, c-format
msgid "E130: Unknown function: %s"
msgstr "E130: Nekonata funkcio: %s"
-#: ../eval.c:156
#, c-format
msgid "E461: Illegal variable name: %s"
msgstr "E461: Nevalida nomo de variablo: %s"
-#: ../eval.c:157
msgid "E806: using Float as a String"
msgstr "E806: uzo de Glitpunktnombro kiel Ĉeno"
-#: ../eval.c:1830
msgid "E687: Less targets than List items"
msgstr "E687: Malpli da celoj ol Listeroj"
-#: ../eval.c:1834
msgid "E688: More targets than List items"
msgstr "E688: Pli da celoj ol Listeroj"
-#: ../eval.c:1906
msgid "Double ; in list of variables"
msgstr "Duobla ; en listo de variabloj"
-#: ../eval.c:2078
#, c-format
msgid "E738: Can't list variables for %s"
msgstr "E738: Ne eblas listigi variablojn de %s"
-#: ../eval.c:2391
msgid "E689: Can only index a List or Dictionary"
msgstr "E689: Nur eblas indeksi Liston aÅ­ Vortaron"
-#: ../eval.c:2396
msgid "E708: [:] must come last"
msgstr "E708: [:] devas esti laste"
-#: ../eval.c:2439
msgid "E709: [:] requires a List value"
msgstr "E709: [:] bezonas listan valoron"
-#: ../eval.c:2674
msgid "E710: List value has more items than target"
msgstr "E710: Lista valoro havas pli da eroj ol la celo"
-#: ../eval.c:2678
msgid "E711: List value has not enough items"
msgstr "E711: Lista valoro ne havas sufiĉe da eroj"
-#: ../eval.c:2867
msgid "E690: Missing \"in\" after :for"
msgstr "E690: \"in\" mankas post \":for\""
-#: ../eval.c:3063
#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: Mankas krampoj: %s"
-#: ../eval.c:3263
#, c-format
msgid "E108: No such variable: \"%s\""
msgstr "E108: Ne estas tia variablo: \"%s\""
-#: ../eval.c:3333
msgid "E743: variable nested too deep for (un)lock"
msgstr "E743: variablo ingita tro profunde por malÅlosi"
-#: ../eval.c:3630
msgid "E109: Missing ':' after '?'"
msgstr "E109: Mankas ':' post '?'"
-#: ../eval.c:3893
msgid "E691: Can only compare List with List"
msgstr "E691: Eblas nur kompari Liston kun Listo"
-#: ../eval.c:3895
msgid "E692: Invalid operation for Lists"
msgstr "E692: Nevalida operacio de Listoj"
-#: ../eval.c:3915
msgid "E735: Can only compare Dictionary with Dictionary"
msgstr "E735: Eblas nur kompari Vortaron kun Vortaro"
-#: ../eval.c:3917
msgid "E736: Invalid operation for Dictionary"
msgstr "E736: Nevalida operacio de Vortaro"
-#: ../eval.c:3932
msgid "E693: Can only compare Funcref with Funcref"
msgstr "E693: Eblas nur kompari Funcref kun Funcref"
-#: ../eval.c:3934
msgid "E694: Invalid operation for Funcrefs"
msgstr "E694: Nevalida operacio de Funcref-oj"
-#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
msgstr "E804: Ne eblas uzi '%' kun Glitpunktnombro"
-#: ../eval.c:4478
msgid "E110: Missing ')'"
msgstr "E110: Mankas ')'"
-#: ../eval.c:4609
msgid "E695: Cannot index a Funcref"
msgstr "E695: Ne eblas indeksi Funcref"
-#: ../eval.c:4839
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Ne eblas indeksi specialan variablon"
+
#, c-format
msgid "E112: Option name missing: %s"
msgstr "E112: Mankas nomo de opcio: %s"
-#: ../eval.c:4855
#, c-format
msgid "E113: Unknown option: %s"
msgstr "E113: Nekonata opcio: %s"
-#: ../eval.c:4904
#, c-format
msgid "E114: Missing quote: %s"
msgstr "E114: Mankas citilo: %s"
-#: ../eval.c:5020
#, c-format
msgid "E115: Missing quote: %s"
msgstr "E115: Mankas citilo: %s"
-#: ../eval.c:5084
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr "E696: Mankas komo en Listo: %s"
-#: ../eval.c:5091
#, c-format
msgid "E697: Missing end of List ']': %s"
msgstr "E697: Mankas fino de Listo ']': %s"
-#: ../eval.c:5750
msgid "Not enough memory to set references, garbage collection aborted!"
-msgstr "Ne sufiĉa memory por valorigi referencojn, senrubigado ĉesigita!"
+msgstr "Ne sufiĉa memoro por valorigi referencojn, senrubigado ĉesigita!"
-#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
msgstr "E720: Mankas dupunkto en la vortaro: %s"
-#: ../eval.c:6499
#, c-format
msgid "E721: Duplicate key in Dictionary: \"%s\""
msgstr "E721: Ripetita Ålosilo en la vortaro: \"%s\""
-#: ../eval.c:6517
#, c-format
msgid "E722: Missing comma in Dictionary: %s"
msgstr "E722: Mankas komo en la vortaro: %s"
-#: ../eval.c:6524
#, c-format
msgid "E723: Missing end of Dictionary '}': %s"
msgstr "E723: Mankas fino de vortaro '}': %s"
-#: ../eval.c:6555
msgid "E724: variable nested too deep for displaying"
msgstr "E724: variablo ingita tro profunde por vidigi"
-#: ../eval.c:7188
#, c-format
msgid "E740: Too many arguments for function %s"
msgstr "E740: Tro da argumentoj por funkcio: %s"
-#: ../eval.c:7190
#, c-format
msgid "E116: Invalid arguments for function %s"
msgstr "E116: Nevalidaj argumentoj por funkcio: %s"
-#: ../eval.c:7377
#, c-format
msgid "E117: Unknown function: %s"
msgstr "E117: Nekonata funkcio: %s"
-#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
msgstr "E119: Ne sufiĉe da argumentoj por funkcio: %s"
-#: ../eval.c:7387
#, c-format
msgid "E120: Using <SID> not in a script context: %s"
msgstr "E120: <SID> estas uzata ekster kunteksto de skripto: %s"
-#: ../eval.c:7391
#, c-format
msgid "E725: Calling dict function without Dictionary: %s"
msgstr "E725: Alvoko de funkcio dict sen Vortaro: %s"
-#: ../eval.c:7453
msgid "E808: Number or Float required"
msgstr "E808: Nombro aÅ­ Glitpunktnombro bezonata"
-#: ../eval.c:7503
msgid "add() argument"
msgstr "argumento de add()"
-#: ../eval.c:7907
msgid "E699: Too many arguments"
msgstr "E699: Tro da argumentoj"
-#: ../eval.c:8073
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() uzeblas nur en Enmeta reÄimo"
-#: ../eval.c:8156
msgid "&Ok"
msgstr "&Bone"
-#: ../eval.c:8676
#, c-format
msgid "E737: Key already exists: %s"
msgstr "E737: Åœlosilo jam ekzistas: %s"
-#: ../eval.c:8692
msgid "extend() argument"
msgstr "argumento de extend()"
-#: ../eval.c:8915
msgid "map() argument"
msgstr "argumento de map()"
-#: ../eval.c:8916
msgid "filter() argument"
msgstr "argumento de filter()"
-#: ../eval.c:9229
#, c-format
msgid "+-%s%3ld lines: "
msgstr "+-%s%3ld linioj: "
-#: ../eval.c:9291
#, c-format
msgid "E700: Unknown function: %s"
msgstr "E700: Nekonata funkcio: %s"
-#: ../eval.c:10729
msgid "called inputrestore() more often than inputsave()"
msgstr "alvokis inputrestore() pli ofte ol inputsave()"
-#: ../eval.c:10771
msgid "insert() argument"
msgstr "argumento de insert()"
-#: ../eval.c:10841
msgid "E786: Range not allowed"
msgstr "E786: Amplekso nepermesebla"
-#: ../eval.c:11140
msgid "E701: Invalid type for len()"
msgstr "E701: Nevalida datumtipo de len()"
-#: ../eval.c:11980
msgid "E726: Stride is zero"
msgstr "E726: PaÅo estas nul"
-#: ../eval.c:11982
msgid "E727: Start past end"
msgstr "E727: Komenco preter fino"
-#: ../eval.c:12024 ../eval.c:15297
msgid "<empty>"
msgstr "<malplena>"
-#: ../eval.c:12282
msgid "remove() argument"
msgstr "argumento de remove()"
-#: ../eval.c:12466
msgid "E655: Too many symbolic links (cycle?)"
msgstr "E655: Tro da simbolaj ligiloj (ĉu estas ciklo?)"
-#: ../eval.c:12593
msgid "reverse() argument"
msgstr "argumento de reverse()"
-#: ../eval.c:13721
+#, c-format
+msgid "E927: Invalid action: '%s'"
+msgstr "E927: Nevalida ago: '%s'"
+
msgid "sort() argument"
msgstr "argumento de sort()"
-#: ../eval.c:13721
#, fuzzy
-msgid "uniq() argument"
-msgstr "argumento de add()"
+#~ msgid "uniq() argument"
+#~ msgstr "argumento de add()"
-#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: Ordiga funkcio fiaskis"
-#: ../eval.c:13806
#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Ordiga funkcio fiaskis"
+#~ msgid "E882: Uniq compare function failed"
+#~ msgstr "E702: Ordiga funkcio fiaskis"
-#: ../eval.c:14085
msgid "(Invalid)"
msgstr "(Nevalida)"
-#: ../eval.c:14590
msgid "E677: Error writing temp file"
msgstr "E677: Eraro dum skribo de provizora dosiero"
-#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
msgstr "E805: Uzo de Glitpunktnombro kiel Nombro"
-#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
msgstr "E703: Uzo de Funcref kiel Nombro"
-#: ../eval.c:16170
msgid "E745: Using a List as a Number"
msgstr "E745: Uzo de Listo kiel Nombro"
-#: ../eval.c:16173
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Uzo de Vortaro kiel Nombro"
-#: ../eval.c:16259
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Uzo de Funcref kiel Glitpunktnombro"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: Uzo de Ĉeno kiel Glitpunktnombro"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: Uzo de Listo kiel Glitpunktnombro"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Uzo de Vortaro kiel Glitpunktnombro"
+
msgid "E729: using Funcref as a String"
msgstr "E729: uzo de Funcref kiel Ĉeno"
-#: ../eval.c:16262
msgid "E730: using List as a String"
msgstr "E730: uzo de Listo kiel Ĉeno"
-#: ../eval.c:16265
msgid "E731: using Dictionary as a String"
msgstr "E731: uzo de Vortaro kiel Ĉeno"
-#: ../eval.c:16619
+msgid "E908: using an invalid value as a String"
+msgstr "E908: uzo de nevalida valoro kiel Ĉeno"
+
#, c-format
msgid "E706: Variable type mismatch for: %s"
msgstr "E706: Nekongrua datumtipo de variablo: %s"
-#: ../eval.c:16705
#, c-format
msgid "E795: Cannot delete variable %s"
msgstr "E795: Ne eblas forviÅi variablon %s"
-#: ../eval.c:16724
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr "E704: Nomo de variablo Funcref devas finiÄi per majusklo: %s"
-#: ../eval.c:16732
#, c-format
msgid "E705: Variable name conflicts with existing function: %s"
msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
-#: ../eval.c:16763
#, c-format
msgid "E741: Value is locked: %s"
msgstr "E741: Valoro estas Ålosita: %s"
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
msgid "Unknown"
msgstr "Nekonata"
-#: ../eval.c:16768
#, c-format
msgid "E742: Cannot change value of %s"
msgstr "E742: Ne eblas ÅanÄi valoron de %s"
-#: ../eval.c:16838
msgid "E698: variable nested too deep for making a copy"
msgstr "E698: variablo ingita tro profunde por fari kopion"
-#: ../eval.c:17249
#, c-format
msgid "E123: Undefined function: %s"
msgstr "E123: Nedifinita funkcio: %s"
-#: ../eval.c:17260
#, c-format
msgid "E124: Missing '(': %s"
msgstr "E124: Mankas '(': %s"
-#: ../eval.c:17293
msgid "E862: Cannot use g: here"
msgstr "E862: Ne eblas uzi g: ĉi tie"
-#: ../eval.c:17312
#, c-format
msgid "E125: Illegal argument: %s"
msgstr "E125: Nevalida argumento: %s"
-#: ../eval.c:17323
#, c-format
msgid "E853: Duplicate argument name: %s"
msgstr "E853: Ripetita nomo de argumento: %s"
-#: ../eval.c:17416
msgid "E126: Missing :endfunction"
msgstr "E126: Mankas \":endfunction\""
-#: ../eval.c:17537
#, c-format
msgid "E707: Function name conflicts with variable: %s"
msgstr "E707: Nomo de funkcio konfliktas kun variablo: %s"
-#: ../eval.c:17549
#, c-format
msgid "E127: Cannot redefine function %s: It is in use"
msgstr "E127: Ne eblas redifini funkcion %s: Estas nuntempe uzata"
-#: ../eval.c:17604
#, c-format
msgid "E746: Function name does not match script file name: %s"
msgstr "E746: Nomo de funkcio ne kongruas kun dosiernomo de skripto: %s"
-#: ../eval.c:17716
msgid "E129: Function name required"
msgstr "E129: Nomo de funkcio bezonata"
-#: ../eval.c:17824
#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: Nomo de funkcio devas eki per majusklo aÅ­ enhavi dupunkton: %s"
+#~ msgid "E128: Function name must start with a capital or \"s:\": %s"
+#~ msgstr "E128: Nomo de funkcio devas eki per majusklo aÅ­ enhavi dupunkton: %s"
-#: ../eval.c:17833
#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: Nomo de funkcio devas eki per majusklo aÅ­ enhavi dupunkton: %s"
+#~ msgid "E884: Function name cannot contain a colon: %s"
+#~ msgstr "E128: Nomo de funkcio devas eki per majusklo aÅ­ enhavi dupunkton: %s"
-#: ../eval.c:18336
#, c-format
msgid "E131: Cannot delete function %s: It is in use"
msgstr "E131: Ne eblas forviÅi funkcion %s: Estas nuntempe uzata"
-#: ../eval.c:18441
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr "E132: Profundo de funkcia alvoko superas 'maxfuncdepth'"
-#: ../eval.c:18568
#, c-format
msgid "calling %s"
msgstr "alvokas %s"
-#: ../eval.c:18651
#, c-format
msgid "%s aborted"
msgstr "%s ĉesigita"
-#: ../eval.c:18653
#, c-format
msgid "%s returning #%<PRId64>"
msgstr "%s liveras #%<PRId64>"
-#: ../eval.c:18670
#, c-format
msgid "%s returning %s"
msgstr "%s liveras %s"
-#: ../eval.c:18691 ../ex_cmds2.c:2695
#, c-format
msgid "continuing in %s"
msgstr "daÅ­rigas en %s"
-#: ../eval.c:18795
msgid "E133: :return not inside a function"
msgstr "E133: \":return\" ekster funkcio"
-#: ../eval.c:19159
msgid ""
"\n"
"# global variables:\n"
@@ -1027,7 +826,6 @@ msgstr ""
"\n"
"# mallokaj variabloj:\n"
-#: ../eval.c:19254
msgid ""
"\n"
"\tLast set from "
@@ -1035,104 +833,82 @@ msgstr ""
"\n"
"\tLaste Åaltita de "
-#: ../eval.c:19272
msgid "No old files"
msgstr "Neniu malnova dosiero"
-#: ../ex_cmds.c:122
#, c-format
msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
msgstr "<%s>%s%s %d, Deksesuma %02x, Okuma %03o"
-#: ../ex_cmds.c:145
#, c-format
msgid "> %d, Hex %04x, Octal %o"
msgstr "> %d, Deksesuma %04x, Okuma %o"
-#: ../ex_cmds.c:146
#, c-format
msgid "> %d, Hex %08x, Octal %o"
msgstr "> %d, Deksesuma %08x, Okuma %o"
-#: ../ex_cmds.c:684
msgid "E134: Move lines into themselves"
msgstr "E134: Movas liniojn en ilin mem"
-#: ../ex_cmds.c:747
msgid "1 line moved"
msgstr "1 linio movita"
-#: ../ex_cmds.c:749
#, c-format
msgid "%<PRId64> lines moved"
msgstr "%<PRId64> linioj movitaj"
-#: ../ex_cmds.c:1175
#, c-format
msgid "%<PRId64> lines filtered"
msgstr "%<PRId64> linioj filtritaj"
-#: ../ex_cmds.c:1194
msgid "E135: *Filter* Autocommands must not change current buffer"
msgstr "E135: *Filtraj* AÅ­tokomandoj ne rajtas ÅanÄi aktualan bufron"
-#: ../ex_cmds.c:1244
msgid "[No write since last change]\n"
msgstr "[Neniu skribo de post lasta ÅanÄo]\n"
-#: ../ex_cmds.c:1424
#, c-format
msgid "%sviminfo: %s in line: "
msgstr "%sviminfo: %s en linio: "
-#: ../ex_cmds.c:1431
msgid "E136: viminfo: Too many errors, skipping rest of file"
msgstr "E136: viminfo: Tro da eraroj, nun ignoras la reston de la dosiero"
-#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
msgstr "Legado de dosiero viminfo \"%s\"%s%s%s"
-#: ../ex_cmds.c:1460
msgid " info"
msgstr " informo"
-#: ../ex_cmds.c:1461
msgid " marks"
msgstr " markoj"
-#: ../ex_cmds.c:1462
msgid " oldfiles"
msgstr " malnovaj dosieroj"
-#: ../ex_cmds.c:1463
msgid " FAILED"
msgstr " FIASKIS"
#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
#, c-format
msgid "E137: Viminfo file is not writable: %s"
msgstr "E137: Dosiero viminfo ne skribeblas: %s"
-#: ../ex_cmds.c:1626
#, c-format
msgid "E138: Can't write viminfo file %s!"
msgstr "E138: Ne eblas skribi dosieron viminfo %s!"
-#: ../ex_cmds.c:1635
#, c-format
msgid "Writing viminfo file \"%s\""
msgstr "Skribas dosieron viminfo \"%s\""
#. Write the info:
-#: ../ex_cmds.c:1720
#, c-format
msgid "# This viminfo file was generated by Vim %s.\n"
msgstr "# Tiu dosiero viminfo estis kreita de Vim %s.\n"
-#: ../ex_cmds.c:1722
msgid ""
"# You may edit it if you're careful!\n"
"\n"
@@ -1140,47 +916,37 @@ msgstr ""
"# Vi povas redakti Äin se vi estas singarda.\n"
"\n"
-#: ../ex_cmds.c:1723
msgid "# Value of 'encoding' when this file was written\n"
msgstr "# Valoro de 'encoding' kiam tiu dosiero estis kreita\n"
-#: ../ex_cmds.c:1800
msgid "Illegal starting char"
msgstr "Nevalida eka signo"
-#: ../ex_cmds.c:2162
msgid "Write partial file?"
msgstr "Ĉu skribi partan dosieron?"
-#: ../ex_cmds.c:2166
msgid "E140: Use ! to write partial buffer"
msgstr "E140: Uzu ! por skribi partan bufron"
-#: ../ex_cmds.c:2281
#, c-format
msgid "Overwrite existing file \"%s\"?"
msgstr "Ĉu anstataŭigi ekzistantan dosieron \"%s\"?"
-#: ../ex_cmds.c:2317
#, c-format
msgid "Swap file \"%s\" exists, overwrite anyway?"
msgstr "Permutodosiero .swp \"%s\" ekzistas, ĉu tamen anstataÅ­igi Äin?"
-#: ../ex_cmds.c:2326
#, c-format
msgid "E768: Swap file exists: %s (:silent! overrides)"
msgstr "E768: Permutodosiero .swp ekzistas: %s (:silent! por transpasi)"
-#: ../ex_cmds.c:2381
#, c-format
msgid "E141: No file name for buffer %<PRId64>"
msgstr "E141: Neniu dosiernomo de bufro %<PRId64>"
-#: ../ex_cmds.c:2412
msgid "E142: File not written: Writing is disabled by 'write' option"
msgstr "E142: Dosiero ne skribita: Skribo malÅaltita per la opcio 'write'"
-#: ../ex_cmds.c:2434
#, c-format
msgid ""
"'readonly' option is set for \"%s\".\n"
@@ -1189,7 +955,6 @@ msgstr ""
"La opcio 'readonly' estas Åaltita por \"%s\".\n"
"Ĉu vi tamen volas skribi?"
-#: ../ex_cmds.c:2439
#, c-format
msgid ""
"File permissions of \"%s\" are read-only.\n"
@@ -1200,84 +965,66 @@ msgstr ""
"BonÅance Äi eble skribeblus.\n"
"Ĉu vi volas provi?"
-#: ../ex_cmds.c:2451
#, c-format
msgid "E505: \"%s\" is read-only (add ! to override)"
msgstr "E505: \"%s\" estas nurlegebla (aldonu ! por transpasi)"
-#: ../ex_cmds.c:3120
#, c-format
msgid "E143: Autocommands unexpectedly deleted new buffer %s"
msgstr "E143: AÅ­tokomandoj neatendite forviÅis novan bufron %s"
-#: ../ex_cmds.c:3313
msgid "E144: non-numeric argument to :z"
msgstr "E144: nenumera argumento de :z"
-#: ../ex_cmds.c:3404
msgid "E145: Shell commands not allowed in rvim"
msgstr "E145: Åœelkomandoj nepermeseblaj en rvim"
-#: ../ex_cmds.c:3498
msgid "E146: Regular expressions can't be delimited by letters"
msgstr "E146: Ne eblas limigi regulesprimon per literoj"
-#: ../ex_cmds.c:3964
#, c-format
msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
msgstr "ĉu anstataŭigi per %s (y/n/a/q/l/^E/^Y)?"
-#: ../ex_cmds.c:4379
msgid "(Interrupted) "
msgstr "(Interrompita) "
-#: ../ex_cmds.c:4384
msgid "1 match"
msgstr "1 kongruo"
-#: ../ex_cmds.c:4384
msgid "1 substitution"
msgstr "1 anstataÅ­igo"
-#: ../ex_cmds.c:4387
#, c-format
msgid "%<PRId64> matches"
msgstr "%<PRId64> kongruoj"
-#: ../ex_cmds.c:4388
#, c-format
msgid "%<PRId64> substitutions"
msgstr "%<PRId64> anstataÅ­igoj"
-#: ../ex_cmds.c:4392
msgid " on 1 line"
msgstr " en 1 linio"
-#: ../ex_cmds.c:4395
#, c-format
msgid " on %<PRId64> lines"
msgstr " en %<PRId64> linioj"
-#: ../ex_cmds.c:4438
msgid "E147: Cannot do :global recursive"
msgstr "E147: Ne eblas fari \":global\" rekursie"
# DP: global estas por ":global" do mi ne tradukis Äin
-#: ../ex_cmds.c:4467
msgid "E148: Regular expression missing from global"
msgstr "E148: Regulesprimo mankas el global"
-#: ../ex_cmds.c:4508
#, c-format
msgid "Pattern found in every line: %s"
msgstr "Ŝablono trovita en ĉiuj linioj: %s"
-#: ../ex_cmds.c:4510
#, c-format
msgid "Pattern not found: %s"
msgstr "Åœablono ne trovita: %s"
-#: ../ex_cmds.c:4587
msgid ""
"\n"
"# Last Substitute String:\n"
@@ -1288,334 +1035,268 @@ msgstr ""
"$"
# This message should *so* be E42!
-#: ../ex_cmds.c:4679
msgid "E478: Don't panic!"
msgstr "E478: Ne paniku!"
-#: ../ex_cmds.c:4717
#, c-format
msgid "E661: Sorry, no '%s' help for %s"
msgstr "E661: BedaÅ­rinde estas neniu helpo '%s' por %s"
-#: ../ex_cmds.c:4719
#, c-format
msgid "E149: Sorry, no help for %s"
msgstr "E149: BedaÅ­rinde estas neniu helpo por %s"
-#: ../ex_cmds.c:4751
#, c-format
msgid "Sorry, help file \"%s\" not found"
msgstr "BedaÅ­rinde, la helpdosiero \"%s\" ne troveblas"
-#: ../ex_cmds.c:5323
#, c-format
msgid "E150: Not a directory: %s"
msgstr "E150: Ne estas dosierujo: %s"
-#: ../ex_cmds.c:5446
#, c-format
msgid "E152: Cannot open %s for writing"
msgstr "E152: Ne eblas malfermi %s en skribreÄimo"
-#: ../ex_cmds.c:5471
#, c-format
msgid "E153: Unable to open %s for reading"
msgstr "E153: Ne eblas malfermi %s en legreÄimo"
-#: ../ex_cmds.c:5500
#, c-format
msgid "E670: Mix of help file encodings within a language: %s"
msgstr "E670: Miksaĵo de kodoprezento de helpa dosiero en lingvo: %s"
-#: ../ex_cmds.c:5565
#, c-format
msgid "E154: Duplicate tag \"%s\" in file %s/%s"
msgstr "E154: Ripetita etikedo \"%s\" en dosiero %s/%s"
-#: ../ex_cmds.c:5687
#, c-format
msgid "E160: Unknown sign command: %s"
msgstr "E160: Nekonata simbola komando: %s"
-#: ../ex_cmds.c:5704
msgid "E156: Missing sign name"
msgstr "E156: Mankas nomo de simbolo"
-#: ../ex_cmds.c:5746
msgid "E612: Too many signs defined"
msgstr "E612: Tro da simboloj estas difinitaj"
-#: ../ex_cmds.c:5813
#, c-format
msgid "E239: Invalid sign text: %s"
msgstr "E239: Nevalida teksto de simbolo: %s"
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
#, c-format
msgid "E155: Unknown sign: %s"
msgstr "E155: Nekonata simbolo: %s"
-#: ../ex_cmds.c:5877
msgid "E159: Missing sign number"
msgstr "E159: Mankas numero de simbolo"
-#: ../ex_cmds.c:5971
#, c-format
msgid "E158: Invalid buffer name: %s"
msgstr "E158: Nevalida nomo de bufro: %s"
-#: ../ex_cmds.c:6008
#, c-format
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: Nevalida identigilo de simbolo: %<PRId64>"
-#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " (nesubtenata)"
-#: ../ex_cmds.c:6169
msgid "[Deleted]"
msgstr "[ForviÅita]"
-#: ../ex_cmds2.c:139
msgid "Entering Debug mode. Type \"cont\" to continue."
msgstr "Eniras sencimigan reÄimon. Tajpu \"cont\" por daÅ­rigi."
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
#, c-format
msgid "line %<PRId64>: %s"
msgstr "linio %<PRId64>: %s"
-#: ../ex_cmds2.c:145
#, c-format
msgid "cmd: %s"
msgstr "kmd: %s"
-#: ../ex_cmds2.c:322
+msgid "frame is zero"
+msgstr "kadro estas nul"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "kadro je la plej alta nivelo: %d"
+
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
msgstr "Kontrolpunkto en \"%s%s\" linio %<PRId64>"
-#: ../ex_cmds2.c:581
#, c-format
msgid "E161: Breakpoint not found: %s"
msgstr "E161: Kontrolpunkto ne trovita: %s"
-#: ../ex_cmds2.c:611
msgid "No breakpoints defined"
msgstr "Neniu kontrolpunkto estas difinita"
-#: ../ex_cmds2.c:617
#, c-format
msgid "%3d %s %s line %<PRId64>"
msgstr "%3d %s %s linio %<PRId64>"
-#: ../ex_cmds2.c:942
msgid "E750: First use \":profile start {fname}\""
msgstr "E750: Uzu unue \":profile start {dosiernomo}\""
-#: ../ex_cmds2.c:1269
#, c-format
msgid "Save changes to \"%s\"?"
msgstr "Ĉu konservi ÅanÄojn al \"%s\"?"
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
msgid "Untitled"
msgstr "Sen titolo"
-#: ../ex_cmds2.c:1421
#, c-format
msgid "E162: No write since last change for buffer \"%s\""
msgstr "E162: Neniu skribo de post la lasta ÅanÄo por bufro \"%s\""
-#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
msgstr "Averto: Eniris neatendite alian bufron (kontrolu aÅ­tokomandojn)"
-#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
msgstr "E163: Estas nur unu redaktenda dosiero"
-#: ../ex_cmds2.c:1828
msgid "E164: Cannot go before first file"
msgstr "E164: Ne eblas iri antaÅ­ ol la unuan dosieron"
-#: ../ex_cmds2.c:1830
msgid "E165: Cannot go beyond last file"
msgstr "E165: Ne eblas iri preter la lastan dosieron"
-#: ../ex_cmds2.c:2175
#, c-format
msgid "E666: compiler not supported: %s"
msgstr "E666: kompililo nesubtenata: %s"
-#: ../ex_cmds2.c:2257
#, c-format
msgid "Searching for \"%s\" in \"%s\""
msgstr "Serĉado de \"%s\" en \"%s\""
-#: ../ex_cmds2.c:2284
#, c-format
msgid "Searching for \"%s\""
msgstr "Serĉado de \"%s\""
-#: ../ex_cmds2.c:2307
#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "ne trovita en 'runtimepath': \"%s\""
+msgid "not found in '%s': \"%s\""
+msgstr "ne trovita en '%s: \"%s\""
-#: ../ex_cmds2.c:2472
#, c-format
msgid "Cannot source a directory: \"%s\""
msgstr "Ne eblas ruli dosierujon: \"%s\""
-#: ../ex_cmds2.c:2518
#, c-format
msgid "could not source \"%s\""
msgstr "ne eblis ruli \"%s\""
-#: ../ex_cmds2.c:2520
#, c-format
msgid "line %<PRId64>: could not source \"%s\""
msgstr "linio %<PRId64>: ne eblis ruli \"%s\""
-#: ../ex_cmds2.c:2535
#, c-format
msgid "sourcing \"%s\""
msgstr "rulas \"%s\""
-#: ../ex_cmds2.c:2537
#, c-format
msgid "line %<PRId64>: sourcing \"%s\""
msgstr "linio %<PRId64>: rulas \"%s\""
-#: ../ex_cmds2.c:2693
#, c-format
msgid "finished sourcing %s"
msgstr "finis ruli %s"
-#: ../ex_cmds2.c:2765
msgid "modeline"
msgstr "reÄimlinio"
-#: ../ex_cmds2.c:2767
msgid "--cmd argument"
msgstr "--cmd argumento"
-#: ../ex_cmds2.c:2769
msgid "-c argument"
msgstr "-c argumento"
-#: ../ex_cmds2.c:2771
msgid "environment variable"
msgstr "medivariablo"
-#: ../ex_cmds2.c:2773
msgid "error handler"
msgstr "erartraktilo"
-#: ../ex_cmds2.c:3020
msgid "W15: Warning: Wrong line separator, ^M may be missing"
msgstr "W15: Averto: NeÄusta disigilo de linio, ^M eble mankas"
-#: ../ex_cmds2.c:3139
msgid "E167: :scriptencoding used outside of a sourced file"
msgstr "E167: \":scriptencoding\" uzita ekster rulita dosiero"
-#: ../ex_cmds2.c:3166
msgid "E168: :finish used outside of a sourced file"
msgstr "E168: \":finish\" uzita ekster rulita dosiero"
-#: ../ex_cmds2.c:3389
#, c-format
msgid "Current %slanguage: \"%s\""
msgstr "Aktuala %slingvo: \"%s\""
-#: ../ex_cmds2.c:3404
#, c-format
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: Ne eblas ÅanÄi la lingvon al \"%s\""
#. don't redisplay the window
#. don't wait for return
-#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
msgstr "Eniras reÄimon Ex. Tajpu \"visual\" por iri al reÄimo Normala."
-#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
msgstr "E501: Ĉe fino-de-dosiero"
-#: ../ex_docmd.c:513
msgid "E169: Command too recursive"
msgstr "E169: Komando tro rekursia"
-#: ../ex_docmd.c:1006
#, c-format
msgid "E605: Exception not caught: %s"
msgstr "E605: Escepto nekaptita: %s"
-#: ../ex_docmd.c:1085
msgid "End of sourced file"
msgstr "Fino de rulita dosiero"
-#: ../ex_docmd.c:1086
msgid "End of function"
msgstr "Fino de funkcio"
-#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
msgstr "E464: Ambigua uzo de komando difinita de uzanto"
-#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
msgstr "E492: Ne estas redaktila komando"
-#: ../ex_docmd.c:1729
msgid "E493: Backwards range given"
msgstr "E493: Inversa amplekso donita"
-#: ../ex_docmd.c:1733
msgid "Backwards range given, OK to swap"
msgstr "Inversa amplekso donita, permuteblas"
#. append
#. typed wrong
-#: ../ex_docmd.c:1787
msgid "E494: Use w or w>>"
msgstr "E494: Uzu w aÅ­ w>>"
-#: ../ex_docmd.c:3454
msgid "E319: The command is not available in this version"
msgstr "E319: BedaÅ­rinde, tiu komando ne haveblas en tiu versio"
-#: ../ex_docmd.c:3752
msgid "E172: Only one file name allowed"
msgstr "E172: Nur unu dosiernomo permesebla"
-#: ../ex_docmd.c:4238
msgid "1 more file to edit. Quit anyway?"
msgstr "1 plia redaktenda dosiero. Ĉu tamen eliri?"
-#: ../ex_docmd.c:4242
#, c-format
msgid "%d more files to edit. Quit anyway?"
msgstr "%d pliaj redaktendaj dosieroj. Ĉu tamen eliri?"
-#: ../ex_docmd.c:4248
msgid "E173: 1 more file to edit"
msgstr "E173: 1 plia redaktenda dosiero"
-#: ../ex_docmd.c:4250
#, c-format
msgid "E173: %<PRId64> more files to edit"
msgstr "E173: %<PRId64> pliaj redaktendaj dosieroj"
-#: ../ex_docmd.c:4320
msgid "E174: Command already exists: add ! to replace it"
msgstr "E174: La komando jam ekzistas: aldonu ! por anstataÅ­igi Äin"
-#: ../ex_docmd.c:4432
msgid ""
"\n"
" Name Args Address Complete Definition"
@@ -1623,352 +1304,273 @@ msgstr ""
"\n"
" Nomo Argumentoj Adreso Kompleto Difino"
-#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
msgstr "Neniu komando difinita de uzanto trovita"
-#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
msgstr "E175: Neniu atributo specifita"
-#: ../ex_docmd.c:4583
msgid "E176: Invalid number of arguments"
msgstr "E176: Nevalida nombro de argumentoj"
-#: ../ex_docmd.c:4594
msgid "E177: Count cannot be specified twice"
msgstr "E177: Kvantoro ne povas aperi dufoje"
-#: ../ex_docmd.c:4603
msgid "E178: Invalid default value for count"
msgstr "E178: Nevalida defaÅ­lta valoro de kvantoro"
-#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
msgstr "E179: argumento bezonata por -complete"
-#: ../ex_docmd.c:4933
msgid "E179: argument required for -addr"
msgstr "E179: argumento bezonata por -addr"
-#: ../ex_docmd.c:4635
#, c-format
msgid "E181: Invalid attribute: %s"
msgstr "E181: Nevalida atributo: %s"
-#: ../ex_docmd.c:4678
msgid "E182: Invalid command name"
msgstr "E182: Nevalida komanda nomo"
-#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
msgstr "E183: Komandoj difinataj de uzanto devas eki per majusklo"
-#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
msgstr "E841: Rezervita nomo, neuzebla por komando difinita de uzanto"
-#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
msgstr "E184: Neniu komando-difinita-de-uzanto kiel: %s"
-#: ../ex_docmd.c:5516
#, c-format
msgid "E180: Invalid address type value: %s"
msgstr "E180: Nevalida valoro de tipo de adreso: %s"
-#: ../ex_docmd.c:5219
#, c-format
msgid "E180: Invalid complete value: %s"
msgstr "E180: Nevalida valoro de kompletigo: %s"
-#: ../ex_docmd.c:5225
msgid "E468: Completion argument only allowed for custom completion"
msgstr ""
"E468: Argumento de kompletigo nur permesebla por kompletigo difinita de "
"uzanto"
-#: ../ex_docmd.c:5231
msgid "E467: Custom completion requires a function argument"
msgstr "E467: Uzula kompletigo bezonas funkcian argumenton"
-#: ../ex_docmd.c:5257
#, c-format
msgid "E185: Cannot find color scheme '%s'"
msgstr "E185: Ne eblas trovi agordaron de koloroj '%s'"
-#: ../ex_docmd.c:5263
msgid "Greetings, Vim user!"
msgstr "Bonvenon, uzanto de Vim!"
-#: ../ex_docmd.c:5431
msgid "E784: Cannot close last tab page"
msgstr "E784: Ne eblas fermi lastan langeton"
-#: ../ex_docmd.c:5462
msgid "Already only one tab page"
msgstr "Jam nur unu langeto"
-#: ../ex_docmd.c:6004
#, c-format
msgid "Tab page %d"
msgstr "Langeto %d"
-#: ../ex_docmd.c:6295
msgid "No swap file"
msgstr "Neniu permutodosiero .swp"
-#: ../ex_docmd.c:6478
msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
msgstr ""
"E747: Ne eblas ÅanÄi dosierujon, bufro estas ÅanÄita (aldonu ! por transpasi)"
-#: ../ex_docmd.c:6485
msgid "E186: No previous directory"
msgstr "E186: Neniu antaÅ­a dosierujo"
-#: ../ex_docmd.c:6530
msgid "E187: Unknown"
msgstr "E187: Nekonata"
-#: ../ex_docmd.c:6610
msgid "E465: :winsize requires two number arguments"
msgstr "E465: \":winsize\" bezonas du numerajn argumentojn"
-#: ../ex_docmd.c:6655
msgid "E188: Obtaining window position not implemented for this platform"
msgstr ""
"E188: Akiro de pozicio de fenestro ne estas realigita por tiu platformo"
-#: ../ex_docmd.c:6662
msgid "E466: :winpos requires two number arguments"
msgstr "E466: \":winpos\" bezonas du numerajn argumentojn"
-#: ../ex_docmd.c:7241
#, c-format
msgid "E739: Cannot create directory: %s"
msgstr "E739: Ne eblas krei dosierujon %s"
-#: ../ex_docmd.c:7268
#, c-format
msgid "E189: \"%s\" exists (add ! to override)"
msgstr "E189: \"%s\" ekzistas (aldonu ! por transpasi)"
-#: ../ex_docmd.c:7273
#, c-format
msgid "E190: Cannot open \"%s\" for writing"
msgstr "E190: Ne eblas malfermi \"%s\" por skribi"
#. set mark
-#: ../ex_docmd.c:7294
msgid "E191: Argument must be a letter or forward/backward quote"
msgstr "E191: Argumento devas esti litero, citilo aÅ­ retrocitilo"
-#: ../ex_docmd.c:7333
msgid "E192: Recursive use of :normal too deep"
msgstr "E192: Tro profunda rekursia alvoko de \":normal\""
-#: ../ex_docmd.c:7807
msgid "E194: No alternate file name to substitute for '#'"
msgstr "E194: Neniu alterna dosiernomo por anstataÅ­igi al '#'"
-#: ../ex_docmd.c:7841
msgid "E495: no autocommand file name to substitute for \"<afile>\""
msgstr "E495: neniu dosiernomo de aÅ­tokomando por anstataÅ­igi al \"<afile>\""
-#: ../ex_docmd.c:7850
msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
msgstr ""
"E496: neniu numero de bufro de aÅ­tokomando por anstataÅ­igi al \"<abuf>\""
# DP: ĉu match estas verbo aŭ nomo en la angla version?
# AM: ĉi tie, nomo, Åajnas al mi
-#: ../ex_docmd.c:7861
msgid "E497: no autocommand match name to substitute for \"<amatch>\""
msgstr ""
"E497: neniu nomo de kongruo de aÅ­tokomando por anstataÅ­igi al \"<amatch>\""
-#: ../ex_docmd.c:7870
msgid "E498: no :source file name to substitute for \"<sfile>\""
msgstr "E498: neniu dosiernomo \":source\" por anstataÅ­igi al \"<sfile>\""
-#: ../ex_docmd.c:7876
msgid "E842: no line number to use for \"<slnum>\""
msgstr "E842: neniu uzebla numero de linio por \"<slnum>\""
-#: ../ex_docmd.c:7903
#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Malplena dosiernomo por '%' aÅ­ '#', nur funkcias kun \":p:h\""
+#~ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+#~ msgstr "E499: Malplena dosiernomo por '%' aÅ­ '#', nur funkcias kun \":p:h\""
-#: ../ex_docmd.c:7905
msgid "E500: Evaluates to an empty string"
msgstr "E500: Liveras malplenan ĉenon"
-#: ../ex_docmd.c:8838
msgid "E195: Cannot open viminfo file for reading"
msgstr "E195: Ne eblas malfermi dosieron viminfo en lega reÄimo"
-#: ../ex_eval.c:464
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr "E608: Ne eblas lanĉi (:throw) escepton kun prefikso 'Vim'"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
#, c-format
msgid "Exception thrown: %s"
msgstr "Escepto lanĉita: %s"
-#: ../ex_eval.c:545
#, c-format
msgid "Exception finished: %s"
msgstr "Escepto finiÄis: %s"
-#: ../ex_eval.c:546
#, c-format
msgid "Exception discarded: %s"
msgstr "Escepto ne konservita: %s"
-#: ../ex_eval.c:588 ../ex_eval.c:634
#, c-format
msgid "%s, line %<PRId64>"
msgstr "%s, linio %<PRId64>"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
#, c-format
msgid "Exception caught: %s"
msgstr "Kaptis escepton: %s"
-#: ../ex_eval.c:676
#, c-format
msgid "%s made pending"
msgstr "%s iÄis atendanta(j)"
-#: ../ex_eval.c:679
#, c-format
msgid "%s resumed"
msgstr "%s daÅ­rigita(j)"
-#: ../ex_eval.c:683
#, c-format
msgid "%s discarded"
msgstr "%s ne konservita(j)"
-#: ../ex_eval.c:708
msgid "Exception"
msgstr "Escepto"
-#: ../ex_eval.c:713
msgid "Error and interrupt"
msgstr "Eraro kaj interrompo"
-#: ../ex_eval.c:715
msgid "Error"
msgstr "Eraro"
#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
msgid "Interrupt"
msgstr "Interrompo"
-#: ../ex_eval.c:795
msgid "E579: :if nesting too deep"
msgstr "E579: \":if\" tro profunde ingita"
-#: ../ex_eval.c:830
msgid "E580: :endif without :if"
msgstr "E580: \":endif\" sen \":if\""
-#: ../ex_eval.c:873
msgid "E581: :else without :if"
msgstr "E581: \":else\" sen \":if\""
-#: ../ex_eval.c:876
msgid "E582: :elseif without :if"
msgstr "E582: \":elseif\" sen \":if\""
-#: ../ex_eval.c:880
msgid "E583: multiple :else"
msgstr "E583: pluraj \":else\""
-#: ../ex_eval.c:883
msgid "E584: :elseif after :else"
msgstr "E584: \":elseif\" post \":else\""
-#: ../ex_eval.c:941
msgid "E585: :while/:for nesting too deep"
msgstr "E585: \":while/:for\" ingita tro profunde"
-#: ../ex_eval.c:1028
msgid "E586: :continue without :while or :for"
msgstr "E586: \":continue\" sen \":while\" aÅ­ \":for\""
-#: ../ex_eval.c:1061
msgid "E587: :break without :while or :for"
msgstr "E587: \":break\" sen \":while\" aÅ­ \":for\""
-#: ../ex_eval.c:1102
msgid "E732: Using :endfor with :while"
msgstr "E732: Uzo de \":endfor\" kun \":while\""
-#: ../ex_eval.c:1104
msgid "E733: Using :endwhile with :for"
msgstr "E733: Uzo de \":endwhile\" kun \":for\""
-#: ../ex_eval.c:1247
msgid "E601: :try nesting too deep"
msgstr "E601: \":try\" ingita tro profunde"
-#: ../ex_eval.c:1317
msgid "E603: :catch without :try"
msgstr "E603: \":catch\" sen \":try\""
#. Give up for a ":catch" after ":finally" and ignore it.
#. * Just parse.
-#: ../ex_eval.c:1332
msgid "E604: :catch after :finally"
msgstr "E604: \":catch\" post \":finally\""
-#: ../ex_eval.c:1451
msgid "E606: :finally without :try"
msgstr "E606: \":finally\" sen \":try\""
#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
msgid "E607: multiple :finally"
msgstr "E607: pluraj \":finally\""
-#: ../ex_eval.c:1571
msgid "E602: :endtry without :try"
msgstr "E602: \":endtry\" sen \":try\""
-#: ../ex_eval.c:2026
msgid "E193: :endfunction not inside a function"
msgstr "E193: \":endfunction\" ekster funkcio"
-#: ../ex_getln.c:1643
msgid "E788: Not allowed to edit another buffer now"
msgstr "E788: Ne eblas redakti alian bufron nun"
-#: ../ex_getln.c:1656
msgid "E811: Not allowed to change buffer information now"
msgstr "E811: Ne eblas ÅanÄi informon de bufro nun"
-#: ../ex_getln.c:3178
msgid "tagname"
msgstr "nomo de etikedo"
-#: ../ex_getln.c:3181
msgid " kind file\n"
msgstr " tipo de dosiero\n"
-#: ../ex_getln.c:4799
msgid "'history' option is zero"
msgstr "opcio 'history' estas nul"
-#: ../ex_getln.c:5046
#, c-format
msgid ""
"\n"
@@ -1977,35 +1579,30 @@ msgstr ""
"\n"
"# Historio %s (de plej nova al plej malnova):\n"
-#: ../ex_getln.c:5047
msgid "Command Line"
msgstr "Komanda linio"
-#: ../ex_getln.c:5048
msgid "Search String"
msgstr "Serĉa ĉeno"
-#: ../ex_getln.c:5049
msgid "Expression"
msgstr "Esprimo"
-#: ../ex_getln.c:5050
msgid "Input Line"
msgstr "Eniga linio"
-#: ../ex_getln.c:5117
+msgid "Debug Line"
+msgstr "Sencimiga linio"
+
msgid "E198: cmd_pchar beyond the command length"
msgstr "E198: cmd_pchar preter la longo de komando"
-#: ../ex_getln.c:5279
msgid "E199: Active window or buffer deleted"
msgstr "E199: Aktiva fenestro aÅ­ bufro forviÅita"
-#: ../file_search.c:203
msgid "E854: path too long for completion"
msgstr "E854: tro longa vojo por kompletigo"
-#: ../file_search.c:446
#, c-format
msgid ""
"E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -2014,208 +1611,160 @@ msgstr ""
"E343: Nevalida vojo: '**[nombro]' devas esti ĉe la fino de la vojo aŭ "
"sekvita de '%s'."
-#: ../file_search.c:1505
#, c-format
msgid "E344: Can't find directory \"%s\" in cdpath"
msgstr "E344: Ne eblas trovi dosierujon \"%s\" en cdpath"
-#: ../file_search.c:1508
#, c-format
msgid "E345: Can't find file \"%s\" in path"
msgstr "E345: Ne eblas trovi dosieron \"%s\" en serĉvojo"
-#: ../file_search.c:1512
#, c-format
msgid "E346: No more directory \"%s\" found in cdpath"
msgstr "E346: Ne plu trovis dosierujon \"%s\" en cdpath"
-#: ../file_search.c:1515
#, c-format
msgid "E347: No more file \"%s\" found in path"
msgstr "E347: Ne plu trovis dosieron \"%s\" en serĉvojo"
-#: ../fileio.c:137
msgid "E812: Autocommands changed buffer or buffer name"
msgstr "E812: AÅ­tokomandoj ÅanÄis bufron aÅ­ nomon de bufro"
-#: ../fileio.c:368
msgid "Illegal file name"
msgstr "Nevalida dosiernomo"
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
msgstr "estas dosierujo"
-#: ../fileio.c:397
msgid "is not a file"
msgstr "ne estas dosiero"
-#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
msgstr "[Nova dosiero]"
-#: ../fileio.c:511
msgid "[New DIRECTORY]"
msgstr "[Nova DOSIERUJO]"
-#: ../fileio.c:529 ../fileio.c:532
msgid "[File too big]"
msgstr "[Dosiero tro granda]"
-#: ../fileio.c:534
msgid "[Permission Denied]"
msgstr "[Permeso rifuzita]"
-#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: La aÅ­tokomandoj *ReadPre igis la dosieron nelegebla"
-#: ../fileio.c:655
msgid "E201: *ReadPre autocommands must not change current buffer"
msgstr "E201: La aÅ­tokomandoj *ReadPre ne rajtas ÅanÄi la aktualan bufron"
-#: ../fileio.c:672
msgid "Nvim: Reading from stdin...\n"
msgstr "Vim: Legado el stdin...\n"
#. Re-opening the original file failed!
-#: ../fileio.c:909
msgid "E202: Conversion made file unreadable!"
msgstr "E202: Konverto igis la dosieron nelegebla!"
#. fifo or socket
-#: ../fileio.c:1782
msgid "[fifo/socket]"
msgstr "[rektvica memoro/kontaktoskatolo]"
#. fifo
-#: ../fileio.c:1788
msgid "[fifo]"
msgstr "[rektvica memoro]"
#. or socket
-#: ../fileio.c:1794
msgid "[socket]"
msgstr "[kontaktoskatolo]"
#. or character special
-#: ../fileio.c:1801
msgid "[character special]"
msgstr "[speciala signo]"
-#: ../fileio.c:1815
msgid "[CR missing]"
msgstr "[CR mankas]"
-#: ../fileio.c:1819
msgid "[long lines split]"
msgstr "[divido de longaj linioj]"
-#: ../fileio.c:1823 ../fileio.c:3512
msgid "[NOT converted]"
msgstr "[NE konvertita]"
-#: ../fileio.c:1826 ../fileio.c:3515
msgid "[converted]"
msgstr "[konvertita]"
-#: ../fileio.c:1831
#, c-format
msgid "[CONVERSION ERROR in line %<PRId64>]"
msgstr "[ERARO DE KONVERTO en linio %<PRId64>]"
-#: ../fileio.c:1835
#, c-format
msgid "[ILLEGAL BYTE in line %<PRId64>]"
msgstr "[NEVALIDA BAJTO en linio %<PRId64>]"
-#: ../fileio.c:1838
msgid "[READ ERRORS]"
msgstr "[ERAROJ DE LEGADO]"
-#: ../fileio.c:2104
msgid "Can't find temp file for conversion"
msgstr "Ne eblas trovi provizoran dosieron por konverti"
-#: ../fileio.c:2110
msgid "Conversion with 'charconvert' failed"
msgstr "Konverto kun 'charconvert' fiaskis"
-#: ../fileio.c:2113
msgid "can't read output of 'charconvert'"
msgstr "ne eblas legi la eligon de 'charconvert'"
-#: ../fileio.c:2437
msgid "E676: No matching autocommands for acwrite buffer"
msgstr "E676: Neniu kongrua aÅ­tokomando por la bufro acwrite"
-#: ../fileio.c:2466
msgid "E203: Autocommands deleted or unloaded buffer to be written"
msgstr "E203: AÅ­tokomandoj forviÅis aÅ­ malÅargis la skribendan bufron"
-#: ../fileio.c:2486
msgid "E204: Autocommand changed number of lines in unexpected way"
msgstr "E204: AÅ­tokomando ÅanÄis la nombron de linioj neatendite"
-#: ../fileio.c:2548 ../fileio.c:2565
msgid "is not a file or writable device"
msgstr "ne estas dosiero aÅ­ skribebla aparatdosiero"
-#: ../fileio.c:2601
msgid "is read-only (add ! to override)"
msgstr "estas nurlegebla (aldonu ! por transpasi)"
-#: ../fileio.c:2886
msgid "E506: Can't write to backup file (add ! to override)"
msgstr "E506: Ne eblas skribi restaÅ­rkopion (aldonu ! por transpasi)"
-#: ../fileio.c:2898
msgid "E507: Close error for backup file (add ! to override)"
msgstr "E507: Eraro dum fermo de restaÅ­rkopio (aldonu ! transpasi)"
-#: ../fileio.c:2901
msgid "E508: Can't read file for backup (add ! to override)"
msgstr "E508: Ne eblas legi restaÅ­rkopion (aldonu ! por transpasi)"
-#: ../fileio.c:2923
msgid "E509: Cannot create backup file (add ! to override)"
msgstr "E509: Ne eblas krei restaÅ­rkopion (aldonu ! por transpasi)"
-#: ../fileio.c:3008
msgid "E510: Can't make backup file (add ! to override)"
msgstr "E510: Ne eblas krei restaÅ­rkopion (aldonu ! por transpasi)"
#. Can't write without a tempfile!
-#: ../fileio.c:3121
msgid "E214: Can't find temp file for writing"
msgstr "E214: Ne eblas trovi provizoran dosieron por skribi"
-#: ../fileio.c:3134
msgid "E213: Cannot convert (add ! to write without conversion)"
msgstr "E213: Ne eblas konverti (aldonu ! por skribi sen konverto)"
-#: ../fileio.c:3169
msgid "E166: Can't open linked file for writing"
msgstr "E166: Ne eblas malfermi ligitan dosieron por skribi"
-#: ../fileio.c:3173
msgid "E212: Can't open file for writing"
msgstr "E212: Ne eblas malfermi la dosieron por skribi"
# AM: fsync: ne traduku (nomo de C-komando)
-#: ../fileio.c:3363
msgid "E667: Fsync failed"
msgstr "E667: Fsync fiaskis"
-#: ../fileio.c:3398
msgid "E512: Close failed"
msgstr "E512: Fermo fiaskis"
-#: ../fileio.c:3436
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: skriberaro, konverto fiaskis (igu 'fenc' malplena por transpasi)"
-#: ../fileio.c:3441
#, c-format
msgid ""
"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
@@ -2224,56 +1773,43 @@ msgstr ""
"E513: skriberaro, konverto fiaskis en linio %<PRId64> (igu 'fenc' malplena "
"por transpasi)"
-#: ../fileio.c:3448
msgid "E514: write error (file system full?)"
msgstr "E514: skriberaro (ĉu plena dosiersistemo?)"
-#: ../fileio.c:3506
msgid " CONVERSION ERROR"
msgstr " ERARO DE KONVERTO"
-#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
msgstr " en linio %<PRId64>;"
-#: ../fileio.c:3519
msgid "[Device]"
msgstr "[Aparatdosiero]"
-#: ../fileio.c:3522
msgid "[New]"
msgstr "[Nova]"
-#: ../fileio.c:3535
msgid " [a]"
msgstr " [a]"
-#: ../fileio.c:3535
msgid " appended"
msgstr " postaldonita(j)"
-#: ../fileio.c:3537
msgid " [w]"
msgstr " [s]"
-#: ../fileio.c:3537
msgid " written"
msgstr " skribita(j)"
-#: ../fileio.c:3579
msgid "E205: Patchmode: can't save original file"
msgstr "E205: Patchmode: ne eblas konservi originalan dosieron"
-#: ../fileio.c:3602
msgid "E206: patchmode: can't touch empty original file"
msgstr "E206: patchmode: ne eblas tuÅi malplenan originalan dosieron"
-#: ../fileio.c:3616
msgid "E207: Can't delete backup file"
msgstr "E207: Ne eblas forviÅi restaÅ­rkopion"
-#: ../fileio.c:3672
msgid ""
"\n"
"WARNING: Original file may be lost or damaged\n"
@@ -2281,96 +1817,75 @@ msgstr ""
"\n"
"AVERTO: Originala dosiero estas eble perdita aÅ­ difekta\n"
-#: ../fileio.c:3675
msgid "don't quit the editor until the file is successfully written!"
msgstr "ne eliru el la redaktilo Äis kiam la dosiero estas sukcese konservita!"
-#: ../fileio.c:3795
msgid "[dos]"
msgstr "[dos]"
-#: ../fileio.c:3795
msgid "[dos format]"
msgstr "[formato dos]"
-#: ../fileio.c:3801
msgid "[mac]"
msgstr "[mac]"
-#: ../fileio.c:3801
msgid "[mac format]"
msgstr "[formato mac]"
-#: ../fileio.c:3807
msgid "[unix]"
msgstr "[unikso]"
-#: ../fileio.c:3807
msgid "[unix format]"
msgstr "[formato unikso]"
-#: ../fileio.c:3831
msgid "1 line, "
msgstr "1 linio, "
-#: ../fileio.c:3833
#, c-format
msgid "%<PRId64> lines, "
msgstr "%<PRId64> linioj, "
-#: ../fileio.c:3836
msgid "1 character"
msgstr "1 signo"
-#: ../fileio.c:3838
#, c-format
msgid "%<PRId64> characters"
msgstr "%<PRId64> signoj"
-#: ../fileio.c:3849
msgid "[noeol]"
msgstr "[sen EOL]"
-#: ../fileio.c:3849
msgid "[Incomplete last line]"
msgstr "[Nekompleta lasta linio]"
#. don't overwrite messages here
#. must give this prompt
#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
msgid "WARNING: The file has been changed since reading it!!!"
msgstr "AVERTO: La dosiero estas ÅanÄita de post kiam Äi estis legita!!!"
-#: ../fileio.c:3867
msgid "Do you really want to write to it"
msgstr "Ĉu vi vere volas skribi al Äi"
-#: ../fileio.c:4648
#, c-format
msgid "E208: Error writing to \"%s\""
msgstr "E208: Eraro dum skribo de \"%s\""
-#: ../fileio.c:4655
#, c-format
msgid "E209: Error closing \"%s\""
msgstr "E209: Eraro dum fermo de \"%s\""
-#: ../fileio.c:4657
#, c-format
msgid "E210: Error reading \"%s\""
msgstr "E210: Eraro dum lego de \"%s\""
-#: ../fileio.c:4883
msgid "E246: FileChangedShell autocommand deleted buffer"
msgstr "E246: AÅ­tokomando FileChangedShell forviÅis bufron"
-#: ../fileio.c:4894
#, c-format
msgid "E211: File \"%s\" no longer available"
msgstr "E211: Dosiero \"%s\" ne plu haveblas"
-#: ../fileio.c:4906
#, c-format
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
@@ -2378,38 +1893,30 @@ msgid ""
msgstr ""
"W12: Averto: Dosiero \"%s\" ÅanÄiÄis kaj la bufro estis ÅanÄita ankaÅ­ en Vim"
-#: ../fileio.c:4907
msgid "See \":help W12\" for more info."
msgstr "Vidu \":help W12\" por pliaj informoj."
-#: ../fileio.c:4910
#, c-format
msgid "W11: Warning: File \"%s\" has changed since editing started"
msgstr "W11: Averto: La dosiero \"%s\" ÅanÄiÄis ekde redakti Äin"
-#: ../fileio.c:4911
msgid "See \":help W11\" for more info."
msgstr "Vidu \":help W11\" por pliaj informoj."
-#: ../fileio.c:4914
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr "W16: Averto: Permeso de dosiero \"%s\" ÅanÄiÄis ekde redakti Äin"
-#: ../fileio.c:4915
msgid "See \":help W16\" for more info."
msgstr "Vidu \":help W16\" por pliaj informoj."
-#: ../fileio.c:4927
#, c-format
msgid "W13: Warning: File \"%s\" has been created after editing started"
msgstr "W13: Averto: Dosiero \"%s\" kreiÄis post la komenco de redaktado"
-#: ../fileio.c:4947
msgid "Warning"
msgstr "Averto"
-#: ../fileio.c:4948
msgid ""
"&OK\n"
"&Load File"
@@ -2417,48 +1924,39 @@ msgstr ""
"&Bone\n"
"Ŝ&argi Dosieron"
-#: ../fileio.c:5065
#, c-format
msgid "E462: Could not prepare for reloading \"%s\""
msgstr "E462: Ne eblis prepari por reÅargi \"%s\""
-#: ../fileio.c:5078
#, c-format
msgid "E321: Could not reload \"%s\""
msgstr "E321: Ne eblis reÅargi \"%s\""
-#: ../fileio.c:5601
msgid "--Deleted--"
msgstr "--ForviÅita--"
-#: ../fileio.c:5732
#, c-format
msgid "auto-removing autocommand: %s <buffer=%d>"
msgstr "aÅ­to-forviÅas aÅ­tokomandon: %s <bufro=%d>"
#. the group doesn't exist
-#: ../fileio.c:5772
#, c-format
msgid "E367: No such group: \"%s\""
msgstr "E367: Ne ekzistas tia grupo: \"%s\""
-#: ../fileio.c:5897
#, c-format
msgid "E215: Illegal character after *: %s"
msgstr "E215: Nevalida signo post *: %s"
-#: ../fileio.c:5905
#, c-format
msgid "E216: No such event: %s"
msgstr "E216: Ne estas tia evento: %s"
-#: ../fileio.c:5907
#, c-format
msgid "E216: No such group or event: %s"
msgstr "E216: Ne ekzistas tia grupo aÅ­ evento: %s"
#. Highlight title
-#: ../fileio.c:6090
msgid ""
"\n"
"--- Auto-Commands ---"
@@ -2466,108 +1964,85 @@ msgstr ""
"\n"
"--- AÅ­to-Komandoj ---"
-#: ../fileio.c:6293
#, c-format
msgid "E680: <buffer=%d>: invalid buffer number "
msgstr "E680: <bufro=%d>: nevalida numero de bufro "
-#: ../fileio.c:6370
msgid "E217: Can't execute autocommands for ALL events"
msgstr "E217: Ne eblas plenumi aŭtokomandojn por ĈIUJ eventoj"
-#: ../fileio.c:6393
msgid "No matching autocommands"
msgstr "Neniu kongrua aÅ­tokomando"
-#: ../fileio.c:6831
msgid "E218: autocommand nesting too deep"
msgstr "E218: aÅ­tokomando tro ingita"
-#: ../fileio.c:7143
#, c-format
msgid "%s Auto commands for \"%s\""
msgstr "%s AÅ­tokomandoj por \"%s\""
-#: ../fileio.c:7149
#, c-format
msgid "Executing %s"
msgstr "Plenumado de %s"
-#: ../fileio.c:7211
#, c-format
msgid "autocommand %s"
msgstr "aÅ­tokomando %s"
-#: ../fileio.c:7795
msgid "E219: Missing {."
msgstr "E219: Mankas {."
-#: ../fileio.c:7797
msgid "E220: Missing }."
msgstr "E220: Mankas }."
-#: ../fold.c:93
msgid "E490: No fold found"
msgstr "E490: Neniu faldo trovita"
-#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
msgstr "E350: Ne eblas krei faldon per la aktuala 'foldmethod'"
-#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
msgstr "E351: Ne eblas forviÅi faldon per la aktuala 'foldmethod'"
-#: ../fold.c:1784
#, c-format
msgid "+--%3ld lines folded "
msgstr "+--%3ld linioj falditaj "
#. buffer has already been read
-#: ../getchar.c:273
msgid "E222: Add to read buffer"
msgstr "E222: Aldoni al lega bufro"
-#: ../getchar.c:2040
msgid "E223: recursive mapping"
msgstr "E223: rekursia mapo"
-#: ../getchar.c:2849
#, c-format
msgid "E224: global abbreviation already exists for %s"
msgstr "E224: malloka mallongigo jam ekzistas por %s"
-#: ../getchar.c:2852
#, c-format
msgid "E225: global mapping already exists for %s"
msgstr "E225: malloka mapo jam ekzistas por %s"
-#: ../getchar.c:2952
#, c-format
msgid "E226: abbreviation already exists for %s"
msgstr "E226: mallongigo jam ekzistas por %s"
-#: ../getchar.c:2955
#, c-format
msgid "E227: mapping already exists for %s"
msgstr "E227: mapo jam ekzistas por %s"
-#: ../getchar.c:3008
msgid "No abbreviation found"
msgstr "Neniu mallongigo trovita"
-#: ../getchar.c:3010
msgid "No mapping found"
msgstr "Neniu mapo trovita"
-#: ../getchar.c:3974
msgid "E228: makemap: Illegal mode"
msgstr "E228: makemap: Nevalida reÄimo"
#. key value of 'cedit' option
#. type of cmdline window or 0
#. result of cmdline window or 0
-#: ../globals.h:924
msgid "--No lines in buffer--"
msgstr "--Neniu linio en bufro--"
@@ -2575,658 +2050,504 @@ msgstr "--Neniu linio en bufro--"
#. * The error messages that can be shared are included here.
#. * Excluded are errors that are only used once and debugging messages.
#.
-#: ../globals.h:996
msgid "E470: Command aborted"
msgstr "E470: komando ĉesigita"
-#: ../globals.h:997
msgid "E471: Argument required"
msgstr "E471: Argumento bezonata"
-#: ../globals.h:998
msgid "E10: \\ should be followed by /, ? or &"
msgstr "E10: \\ devus esti sekvita de /, ? aÅ­ &"
-#: ../globals.h:1000
msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
msgstr ""
"E11: Nevalida en fenestro de komanda linio; <CR> plenumas, CTRL-C eliras"
-#: ../globals.h:1002
msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
msgstr ""
"E12: Nepermesebla komando el exrc/vimrc en aktuala dosierujo aŭ etikeda serĉo"
-#: ../globals.h:1003
msgid "E171: Missing :endif"
msgstr "E171: Mankas \":endif\""
-#: ../globals.h:1004
msgid "E600: Missing :endtry"
msgstr "E600: Mankas \":endtry\""
-#: ../globals.h:1005
msgid "E170: Missing :endwhile"
msgstr "E170: Mankas \":endwhile\""
-#: ../globals.h:1006
msgid "E170: Missing :endfor"
msgstr "E170: Mankas \":endfor\""
-#: ../globals.h:1007
msgid "E588: :endwhile without :while"
msgstr "E588: \":endwhile\" sen \":while\""
-#: ../globals.h:1008
msgid "E588: :endfor without :for"
msgstr "E588: \":endfor\" sen \":for\""
-#: ../globals.h:1009
msgid "E13: File exists (add ! to override)"
msgstr "E13: Dosiero ekzistas (aldonu ! por transpasi)"
-#: ../globals.h:1010
msgid "E472: Command failed"
msgstr "E472: La komando fiaskis"
-#: ../globals.h:1011
msgid "E473: Internal error"
msgstr "E473: Interna eraro"
-#: ../globals.h:1012
msgid "Interrupted"
msgstr "Interrompita"
-#: ../globals.h:1013
msgid "E14: Invalid address"
msgstr "E14: Nevalida adreso"
-#: ../globals.h:1014
msgid "E474: Invalid argument"
msgstr "E474: Nevalida argumento"
-#: ../globals.h:1015
#, c-format
msgid "E475: Invalid argument: %s"
msgstr "E475: Nevalida argumento: %s"
-#: ../globals.h:1016
#, c-format
msgid "E15: Invalid expression: %s"
msgstr "E15: Nevalida esprimo: %s"
-#: ../globals.h:1017
msgid "E16: Invalid range"
msgstr "E16: Nevalida amplekso"
-#: ../globals.h:1018
msgid "E476: Invalid command"
msgstr "E476: Nevalida komando"
-#: ../globals.h:1019
#, c-format
msgid "E17: \"%s\" is a directory"
msgstr "E17: \"%s\" estas dosierujo"
-#: ../globals.h:1020
#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Nevalida grando de rulumo"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
+#~ msgid "E900: Invalid job id"
+#~ msgstr "E49: Nevalida grando de rulumo"
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
+#~ msgid "E901: Job table is full"
+#~ msgstr ""
-#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
msgstr "E364: Alvoko al biblioteko fiaskis por \"%s()\""
-#: ../globals.h:1026
msgid "E19: Mark has invalid line number"
msgstr "E19: Marko havas nevalidan numeron de linio"
-#: ../globals.h:1027
msgid "E20: Mark not set"
msgstr "E20: Marko ne estas agordita"
-#: ../globals.h:1029
msgid "E21: Cannot make changes, 'modifiable' is off"
msgstr "E21: Ne eblas fari ÅanÄojn, 'modifiable' estas malÅaltita"
-#: ../globals.h:1030
msgid "E22: Scripts nested too deep"
msgstr "E22: Tro profunde ingitaj skriptoj"
-#: ../globals.h:1031
msgid "E23: No alternate file"
msgstr "E23: Neniu alterna dosiero"
-#: ../globals.h:1032
msgid "E24: No such abbreviation"
msgstr "E24: Ne estas tia mallongigo"
-#: ../globals.h:1033
msgid "E477: No ! allowed"
msgstr "E477: Neniu ! permesebla"
-#: ../globals.h:1035
msgid "E25: Nvim does not have a built-in GUI"
msgstr "E25: Grafika interfaco ne uzeblas: MalÅaltita dum kompilado"
-#: ../globals.h:1036
#, c-format
msgid "E28: No such highlight group name: %s"
msgstr "E28: Neniu grupo de emfazo kiel: %s"
-#: ../globals.h:1037
msgid "E29: No inserted text yet"
msgstr "E29: AnkoraÅ­ neniu enmetita teksto"
-#: ../globals.h:1038
msgid "E30: No previous command line"
msgstr "E30: Neniu antaÅ­a komanda linio"
-#: ../globals.h:1039
msgid "E31: No such mapping"
msgstr "E31: Neniu tiel mapo"
-#: ../globals.h:1040
msgid "E479: No match"
msgstr "E479: Neniu kongruo"
-#: ../globals.h:1041
#, c-format
msgid "E480: No match: %s"
msgstr "E480: Neniu kongruo: %s"
-#: ../globals.h:1042
msgid "E32: No file name"
msgstr "E32: Neniu dosiernomo"
-#: ../globals.h:1044
msgid "E33: No previous substitute regular expression"
msgstr "E33: Neniu antaÅ­a regulesprimo de anstataÅ­igo"
-#: ../globals.h:1045
msgid "E34: No previous command"
msgstr "E34: Neniu antaÅ­a komando"
-#: ../globals.h:1046
msgid "E35: No previous regular expression"
msgstr "E35: Neniu antaÅ­a regulesprimo"
-#: ../globals.h:1047
msgid "E481: No range allowed"
msgstr "E481: Amplekso nepermesebla"
-#: ../globals.h:1048
msgid "E36: Not enough room"
msgstr "E36: Ne sufiĉe da spaco"
-#: ../globals.h:1049
#, c-format
msgid "E482: Can't create file %s"
msgstr "E482: Ne eblas krei dosieron %s"
-#: ../globals.h:1050
msgid "E483: Can't get temp file name"
msgstr "E483: Ne eblas akiri provizoran dosiernomon"
-#: ../globals.h:1051
#, c-format
msgid "E484: Can't open file %s"
msgstr "E484: Ne eblas malfermi dosieron %s"
-#: ../globals.h:1052
#, c-format
msgid "E485: Can't read file %s"
msgstr "E485: Ne eblas legi dosieron %s"
-#: ../globals.h:1054
msgid "E37: No write since last change (add ! to override)"
msgstr "E37: Neniu skribo de post lasta ÅanÄo (aldonu ! por transpasi)"
-#: ../globals.h:1055
#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Neniu skribo de post lasta ÅanÄo]\n"
+#~ msgid "E37: No write since last change"
+#~ msgstr "[Neniu skribo de post lasta ÅanÄo]\n"
-#: ../globals.h:1056
msgid "E38: Null argument"
msgstr "E38: Nula argumento"
-#: ../globals.h:1057
msgid "E39: Number expected"
msgstr "E39: Nombro atendita"
-#: ../globals.h:1058
#, c-format
msgid "E40: Can't open errorfile %s"
msgstr "E40: Ne eblas malfermi eraran dosieron %s"
-#: ../globals.h:1059
msgid "E41: Out of memory!"
msgstr "E41: Ne plu restas memoro!"
-#: ../globals.h:1060
msgid "Pattern not found"
msgstr "Åœablono ne trovita"
-#: ../globals.h:1061
#, c-format
msgid "E486: Pattern not found: %s"
msgstr "E486: Åœablono ne trovita: %s"
-#: ../globals.h:1062
msgid "E487: Argument must be positive"
msgstr "E487: La argumento devas esti pozitiva"
-#: ../globals.h:1064
msgid "E459: Cannot go back to previous directory"
msgstr "E459: Ne eblas reiri al antaÅ­a dosierujo"
-#: ../globals.h:1066
msgid "E42: No Errors"
msgstr "E42: Neniu eraro"
-#: ../globals.h:1067
msgid "E776: No location list"
msgstr "E776: Neniu listo de loko"
-#: ../globals.h:1068
msgid "E43: Damaged match string"
msgstr "E43: Difekta kongruenda ĉeno"
-#: ../globals.h:1069
msgid "E44: Corrupted regexp program"
msgstr "E44: Difekta programo de regulesprimo"
-#: ../globals.h:1071
msgid "E45: 'readonly' option is set (add ! to override)"
msgstr "E45: La opcio 'readonly' estas Åaltita '(aldonu ! por transpasi)"
-#: ../globals.h:1073
#, c-format
msgid "E46: Cannot change read-only variable \"%s\""
msgstr "E46: Ne eblas ÅanÄi nurlegeblan variablon \"%s\""
-#: ../globals.h:1075
#, c-format
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr "E794: Ne eblas agordi variablon en la sabloludejo: \"%s\""
-#: ../globals.h:1076
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Ne eblas uzi malplenan Ålosilon de Vortaro"
+
msgid "E47: Error while reading errorfile"
msgstr "E47: Eraro dum legado de erardosiero"
-#: ../globals.h:1078
msgid "E48: Not allowed in sandbox"
msgstr "E48: Nepermesebla en sabloludejo"
-#: ../globals.h:1080
msgid "E523: Not allowed here"
msgstr "E523: Nepermesebla tie"
-#: ../globals.h:1082
msgid "E359: Screen mode setting not supported"
msgstr "E359: ReÄimo de ekrano ne subtenata"
-#: ../globals.h:1083
msgid "E49: Invalid scroll size"
msgstr "E49: Nevalida grando de rulumo"
-#: ../globals.h:1084
msgid "E91: 'shell' option is empty"
msgstr "E91: La opcio 'shell' estas malplena"
-#: ../globals.h:1085
msgid "E255: Couldn't read in sign data!"
msgstr "E255: Ne eblis legi datumojn de simboloj!"
-#: ../globals.h:1086
msgid "E72: Close error on swap file"
msgstr "E72: Eraro dum malfermo de permutodosiero .swp"
-#: ../globals.h:1087
msgid "E73: tag stack empty"
msgstr "E73: malplena stako de etikedo"
-#: ../globals.h:1088
msgid "E74: Command too complex"
msgstr "E74: Komando tro kompleksa"
-#: ../globals.h:1089
msgid "E75: Name too long"
msgstr "E75: Nomo tro longa"
-#: ../globals.h:1090
msgid "E76: Too many ["
msgstr "E76: Tro da ["
-#: ../globals.h:1091
msgid "E77: Too many file names"
msgstr "E77: Tro da dosiernomoj"
-#: ../globals.h:1092
msgid "E488: Trailing characters"
msgstr "E488: Vostaj signoj"
-#: ../globals.h:1093
msgid "E78: Unknown mark"
msgstr "E78: Nekonata marko"
-#: ../globals.h:1094
msgid "E79: Cannot expand wildcards"
msgstr "E79: Ne eblas malvolvi ĵokerojn"
-#: ../globals.h:1096
msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
msgstr "E591: 'winheight' ne rajtas esti malpli ol 'winminheight'"
-#: ../globals.h:1098
msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
msgstr "E592: 'winwidth' ne rajtas esti malpli ol 'winminwidth'"
-#: ../globals.h:1099
msgid "E80: Error while writing"
msgstr "E80: Eraro dum skribado"
-#: ../globals.h:1100
msgid "Zero count"
msgstr "Nul kvantoro"
-#: ../globals.h:1101
msgid "E81: Using <SID> not in a script context"
msgstr "E81: Uzo de <SID> ekster kunteksto de skripto"
-#: ../globals.h:1102
#, c-format
msgid "E685: Internal error: %s"
msgstr "E685: Interna eraro: %s"
-#: ../globals.h:1104
msgid "E363: pattern uses more memory than 'maxmempattern'"
msgstr "E363: Åablono uzas pli da memoro ol 'maxmempattern'"
-#: ../globals.h:1105
msgid "E749: empty buffer"
msgstr "E749: malplena bufro"
-#: ../globals.h:1226
#, c-format
msgid "E86: Buffer %<PRId64> does not exist"
msgstr "E86: La bufro %<PRId64> ne ekzistas"
-#: ../globals.h:1108
msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: Nevalida serĉa Åablono aÅ­ disigilo"
-#: ../globals.h:1109
msgid "E139: File is loaded in another buffer"
msgstr "E139: Dosiero estas Åargita en alia bufro"
-#: ../globals.h:1110
#, c-format
msgid "E764: Option '%s' is not set"
msgstr "E764: La opcio '%s' ne estas Åaltita"
-#: ../globals.h:1111
msgid "E850: Invalid register name"
msgstr "E850: Nevalida nomo de reÄistro"
-#: ../globals.h:1114
msgid "search hit TOP, continuing at BOTTOM"
msgstr "serĉo atingis SUPRON, daŭrigonte al SUBO"
-#: ../globals.h:1115
msgid "search hit BOTTOM, continuing at TOP"
msgstr "serĉo atingis SUBON, daŭrigonte al SUPRO"
-#: ../hardcopy.c:240
msgid "E550: Missing colon"
msgstr "E550: Mankas dupunkto"
-#: ../hardcopy.c:252
msgid "E551: Illegal component"
msgstr "E551: Nevalida komponento"
-#: ../hardcopy.c:259
msgid "E552: digit expected"
msgstr "E552: cifero atendita"
-#: ../hardcopy.c:473
#, c-format
msgid "Page %d"
msgstr "PaÄo %d"
-#: ../hardcopy.c:597
msgid "No text to be printed"
msgstr "Neniu presenda teksto"
-#: ../hardcopy.c:668
#, c-format
msgid "Printing page %d (%d%%)"
msgstr "Presas paÄon %d (%d%%)"
-#: ../hardcopy.c:680
#, c-format
msgid " Copy %d of %d"
msgstr " Kopio %d de %d"
-#: ../hardcopy.c:733
#, c-format
msgid "Printed: %s"
msgstr "Presis: %s"
-#: ../hardcopy.c:740
msgid "Printing aborted"
msgstr "Presado ĉesigita"
-#: ../hardcopy.c:1365
msgid "E455: Error writing to PostScript output file"
msgstr "E455: Eraro dum skribo de PostSkripta eliga dosiero"
-#: ../hardcopy.c:1747
#, c-format
msgid "E624: Can't open file \"%s\""
msgstr "E624: Ne eblas malfermi dosieron \"%s\""
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
#, c-format
msgid "E457: Can't read PostScript resource file \"%s\""
msgstr "E457: Ne eblas legi dosieron de PostSkripta rimedo \"%s\""
-#: ../hardcopy.c:1772
#, c-format
msgid "E618: file \"%s\" is not a PostScript resource file"
msgstr "E618: \"%s\" ne estas dosiero de PostSkripta rimedo"
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
#, c-format
msgid "E619: file \"%s\" is not a supported PostScript resource file"
msgstr "E619: \"%s\" ne estas subtenata dosiero de PostSkripta rimedo"
-#: ../hardcopy.c:1856
#, c-format
msgid "E621: \"%s\" resource file has wrong version"
msgstr "E621: \"%s\" dosiero de rimedo havas neÄustan version"
-#: ../hardcopy.c:2225
msgid "E673: Incompatible multi-byte encoding and character set."
msgstr "E673: Nekongrua plurbajta kodoprezento kaj signaro."
-#: ../hardcopy.c:2238
msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
msgstr ""
"E674: printmbcharset ne rajtas esti malplena kun plurbajta kodoprezento."
-#: ../hardcopy.c:2254
msgid "E675: No default font specified for multi-byte printing."
msgstr "E675: Neniu defaÅ­lta tiparo specifita por plurbajta presado."
-#: ../hardcopy.c:2426
msgid "E324: Can't open PostScript output file"
msgstr "E324: Ne eblas malfermi eligan PostSkriptan dosieron"
-#: ../hardcopy.c:2458
#, c-format
msgid "E456: Can't open file \"%s\""
msgstr "E456: Ne eblas malfermi dosieron \"%s\""
-#: ../hardcopy.c:2583
msgid "E456: Can't find PostScript resource file \"prolog.ps\""
msgstr "E456: Dosiero de PostSkripta rimedo \"prolog.ps\" ne troveblas"
-#: ../hardcopy.c:2593
msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
msgstr "E456: Dosiero de PostSkripta rimedo \"cidfont.ps\" ne troveblas"
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
#, c-format
msgid "E456: Can't find PostScript resource file \"%s.ps\""
msgstr "E456: Dosiero de PostSkripta rimedo \"%s.ps\" ne troveblas"
-#: ../hardcopy.c:2654
#, c-format
msgid "E620: Unable to convert to print encoding \"%s\""
msgstr "E620: Ne eblas konverti al la presa kodoprezento \"%s\""
-#: ../hardcopy.c:2877
msgid "Sending to printer..."
msgstr "Sendas al presilo..."
-#: ../hardcopy.c:2881
msgid "E365: Failed to print PostScript file"
msgstr "E365: Presado de PostSkripta dosiero fiaskis"
-#: ../hardcopy.c:2883
msgid "Print job sent."
msgstr "Laboro de presado sendita."
-#: ../if_cscope.c:85
msgid "Add a new database"
msgstr "Aldoni novan datumbazon"
-#: ../if_cscope.c:87
msgid "Query for a pattern"
msgstr "Serĉi Åablonon"
-#: ../if_cscope.c:89
msgid "Show this message"
msgstr "Montri tiun mesaÄon"
-#: ../if_cscope.c:91
msgid "Kill a connection"
msgstr "Ĉesigi konekton"
-#: ../if_cscope.c:93
msgid "Reinit all connections"
msgstr "Repravalorizi ĉiujn konektojn"
-#: ../if_cscope.c:95
msgid "Show connections"
msgstr "Montri konektojn"
-#: ../if_cscope.c:101
#, c-format
msgid "E560: Usage: cs[cope] %s"
msgstr "E560: Uzo: cs[cope] %s"
-#: ../if_cscope.c:225
msgid "This cscope command does not support splitting the window.\n"
msgstr "Tiu ĉi komando de cscope ne subtenas dividon de fenestro.\n"
-#: ../if_cscope.c:266
msgid "E562: Usage: cstag <ident>"
msgstr "E562: Uzo: cstag <ident>"
-#: ../if_cscope.c:313
msgid "E257: cstag: tag not found"
msgstr "E257: cstag: etikedo netrovita"
-#: ../if_cscope.c:461
#, c-format
msgid "E563: stat(%s) error: %d"
msgstr "E563: Eraro de stat(%s): %d"
-#: ../if_cscope.c:551
#, c-format
msgid "E564: %s is not a directory or a valid cscope database"
msgstr "E564: %s ne estas dosierujo aÅ­ valida datumbazo de cscope"
-#: ../if_cscope.c:566
#, c-format
msgid "Added cscope database %s"
msgstr "Aldonis datumbazon de cscope %s"
-#: ../if_cscope.c:616
#, c-format
msgid "E262: error reading cscope connection %<PRId64>"
msgstr "E262: eraro dum legado de konekto de cscope %<PRId64>"
-#: ../if_cscope.c:711
msgid "E561: unknown cscope search type"
msgstr "E561: nekonata tipo de serĉo de cscope"
-#: ../if_cscope.c:752 ../if_cscope.c:789
msgid "E566: Could not create cscope pipes"
msgstr "E566: Ne eblis krei duktojn de cscope"
-#: ../if_cscope.c:767
msgid "E622: Could not fork for cscope"
msgstr "E622: Ne eblis forki cscope"
-#: ../if_cscope.c:849
#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "plenumo de cs_create_connection fiaskis"
+#~ msgid "cs_create_connection setpgid failed"
+#~ msgstr "plenumo de cs_create_connection fiaskis"
-#: ../if_cscope.c:853 ../if_cscope.c:889
msgid "cs_create_connection exec failed"
msgstr "plenumo de cs_create_connection fiaskis"
-#: ../if_cscope.c:863 ../if_cscope.c:902
msgid "cs_create_connection: fdopen for to_fp failed"
msgstr "cs_create_connection: fdopen de to_fp fiaskis"
-#: ../if_cscope.c:865 ../if_cscope.c:906
msgid "cs_create_connection: fdopen for fr_fp failed"
msgstr "cs_create_connection: fdopen de fr_fp fiaskis"
-#: ../if_cscope.c:890
msgid "E623: Could not spawn cscope process"
msgstr "E623: Ne eblis naskigi procezon cscope"
-#: ../if_cscope.c:932
msgid "E567: no cscope connections"
msgstr "E567: neniu konekto al cscope"
-#: ../if_cscope.c:1009
#, c-format
msgid "E469: invalid cscopequickfix flag %c for %c"
msgstr "E469: nevalida flago cscopequickfix %c de %c"
-#: ../if_cscope.c:1058
#, c-format
msgid "E259: no matches found for cscope query %s of %s"
msgstr "E259: neniu kongruo trovita por serĉo per cscope %s de %s"
-#: ../if_cscope.c:1142
msgid "cscope commands:\n"
msgstr "komandoj de cscope:\n"
-#: ../if_cscope.c:1150
#, c-format
msgid "%-5s: %s%*s (Usage: %s)"
msgstr "%-5s: %s%*s (Uzo: %s)"
-#: ../if_cscope.c:1155
msgid ""
"\n"
" c: Find functions calling this function\n"
@@ -3237,6 +2558,7 @@ msgid ""
" i: Find files #including this file\n"
" s: Find this C symbol\n"
" t: Find this text string\n"
+" a: Find assignments to this symbol\n"
msgstr ""
"\n"
" c: Trovi funkciojn, kiuj alvokas tiun funkcion\n"
@@ -3247,32 +2569,27 @@ msgstr ""
" i: Trovi dosierojn, kiuj inkluzivas (#include) tiun dosieron\n"
" s: Trovi tiun C-simbolon\n"
" t: Trovi tiun ĉenon\n"
+" a: Trovi valirizojn al tiu simbolo\n"
-#: ../if_cscope.c:1226
msgid "E568: duplicate cscope database not added"
msgstr "E568: ripetita datumbazo de cscope ne aldonita"
-#: ../if_cscope.c:1335
#, c-format
msgid "E261: cscope connection %s not found"
msgstr "E261: konekto cscope %s netrovita"
-#: ../if_cscope.c:1364
#, c-format
msgid "cscope connection %s closed"
msgstr "konekto cscope %s fermita"
#. should not reach here
-#: ../if_cscope.c:1486
msgid "E570: fatal error in cs_manage_matches"
msgstr "E570: neriparebla eraro en cs_manage_matches"
-#: ../if_cscope.c:1693
#, c-format
msgid "Cscope tag: %s"
msgstr "Etikedo de cscope: %s"
-#: ../if_cscope.c:1711
msgid ""
"\n"
" # line"
@@ -3280,87 +2597,67 @@ msgstr ""
"\n"
" nro linio"
-#: ../if_cscope.c:1713
msgid "filename / context / line\n"
msgstr "dosiernomo / kunteksto / linio\n"
-#: ../if_cscope.c:1809
#, c-format
msgid "E609: Cscope error: %s"
msgstr "E609: Eraro de cscope: %s"
-#: ../if_cscope.c:2053
msgid "All cscope databases reset"
msgstr "ReÅargo de ĉiuj datumbazoj de cscope"
-#: ../if_cscope.c:2123
msgid "no cscope connections\n"
msgstr "neniu konekto de cscope\n"
-#: ../if_cscope.c:2126
msgid " # pid database name prepend path\n"
msgstr " # pid nomo de datumbazo prefiksa vojo\n"
-#: ../main.c:144
msgid "Unknown option argument"
msgstr "Nekonata argumento de opcio"
-#: ../main.c:146
msgid "Too many edit arguments"
msgstr "Tro da argumentoj de redakto"
-#: ../main.c:148
msgid "Argument missing after"
msgstr "Argumento mankas post"
-#: ../main.c:150
msgid "Garbage after option argument"
msgstr "Forĵetindaĵo post argumento de opcio"
-#: ../main.c:152
msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
msgstr "Tro da argumentoj \"+komando\", \"-c komando\" aÅ­ \"--cmd komando\""
-#: ../main.c:154
msgid "Invalid argument for"
msgstr "Nevalida argumento por"
-#: ../main.c:294
#, c-format
msgid "%d files to edit\n"
msgstr "%d redaktendaj dosieroj\n"
-#: ../main.c:1342
msgid "Attempt to open script file again: \""
msgstr "Provas malfermi skriptan dosieron denove: \""
-#: ../main.c:1350
msgid "Cannot open for reading: \""
msgstr "Ne eblas malfermi en lega reÄimo: \""
-#: ../main.c:1393
msgid "Cannot open for script output: \""
msgstr "Ne eblas malfermi por eligo de skripto: \""
-#: ../main.c:1622
msgid "Vim: Warning: Output is not to a terminal\n"
msgstr "Vim: Averto: Eligo ne estas al terminalo\n"
-#: ../main.c:1624
msgid "Vim: Warning: Input is not from a terminal\n"
msgstr "Vim: Averto: Enigo ne estas el terminalo\n"
#. just in case..
-#: ../main.c:1891
msgid "pre-vimrc command line"
msgstr "komanda linio pre-vimrc"
-#: ../main.c:1964
#, c-format
msgid "E282: Cannot read from \"%s\""
msgstr "E282: Ne eblas legi el \"%s\""
-#: ../main.c:2149
msgid ""
"\n"
"More info with: \"vim -h\"\n"
@@ -3369,23 +2666,18 @@ msgstr ""
"Pliaj informoj per: \"vim -h\"\n"
# DP: tajpu "vim --help" por testi tiujn mesaÄojn
-#: ../main.c:2178
msgid "[file ..] edit specified file(s)"
msgstr "[dosiero...] redakti specifita(j)n dosiero(j)n"
-#: ../main.c:2179
msgid "- read text from stdin"
msgstr "- legi tekston el stdin"
-#: ../main.c:2180
msgid "-t tag edit file where tag is defined"
msgstr "-t etikedo redakti dosieron kie etikedo estas difinata"
-#: ../main.c:2181
msgid "-q [errorfile] edit file with first error"
msgstr "-q [erardosiero] redakti dosieron kun unua eraro"
-#: ../main.c:2187
msgid ""
"\n"
"\n"
@@ -3395,11 +2687,9 @@ msgstr ""
"\n"
" uzo:"
-#: ../main.c:2189
msgid " vim [arguments] "
msgstr " vim [argumentoj] "
-#: ../main.c:2193
msgid ""
"\n"
" or:"
@@ -3407,7 +2697,6 @@ msgstr ""
"\n"
" aÅ­:"
-#: ../main.c:2196
msgid ""
"\n"
"\n"
@@ -3417,197 +2706,151 @@ msgstr ""
"\n"
"Argumentoj:\n"
-#: ../main.c:2197
msgid "--\t\t\tOnly file names after this"
msgstr "--\t\t\tNur dosiernomoj post tio"
-#: ../main.c:2199
msgid "--literal\t\tDon't expand wildcards"
msgstr "--literal\t\tNe malvolvi ĵokerojn"
-#: ../main.c:2201
msgid "-v\t\t\tVi mode (like \"vi\")"
msgstr "-v\t\t\tReÄimo Vi (kiel \"vi\")"
-#: ../main.c:2202
msgid "-e\t\t\tEx mode (like \"ex\")"
msgstr "-e\t\t\tReÄimo Ex (kiel \"ex\")"
-#: ../main.c:2203
msgid "-E\t\t\tImproved Ex mode"
msgstr "-E\t\t\tPlibonigita Ex-reÄimo"
-#: ../main.c:2204
msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
msgstr "-s\t\t\tSilenta (stapla) reÄimo (nur por \"ex\")"
-#: ../main.c:2205
msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
msgstr "-d\t\t\tKompara reÄimo (kiel \"vimdiff\")"
-#: ../main.c:2206
msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
msgstr "-y\t\t\tFacila reÄimo (kiel \"evim\", senreÄima)"
-#: ../main.c:2207
msgid "-R\t\t\tReadonly mode (like \"view\")"
msgstr "-R\t\t\tNurlegebla reÄimo (kiel \"view\")"
-#: ../main.c:2208
msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
msgstr "-Z\t\t\tLimigita reÄimo (kiel \"rvim\")"
-#: ../main.c:2209
msgid "-m\t\t\tModifications (writing files) not allowed"
msgstr "-m\t\t\tÅœanÄoj (skribo al dosieroj) nepermeseblaj"
-#: ../main.c:2210
msgid "-M\t\t\tModifications in text not allowed"
msgstr "-M\t\t\tÅœanÄoj al teksto nepermeseblaj"
-#: ../main.c:2211
msgid "-b\t\t\tBinary mode"
msgstr "-b\t\t\tDuuma reÄimo"
-#: ../main.c:2212
msgid "-l\t\t\tLisp mode"
msgstr "-l\t\t\tReÄimo Lisp"
-#: ../main.c:2213
msgid "-C\t\t\tCompatible with Vi: 'compatible'"
msgstr "-C\t\t\tKongrua kun Vi: 'compatible'"
-#: ../main.c:2214
msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
msgstr "-N\t\t\tNe tute kongrua kun Vi: 'nocompatible'"
-#: ../main.c:2215
msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
msgstr ""
"-V[N][dosiernomo]\tEsti babilema [nivelo N] [konservi mesaÄojn al dosiernomo]"
-#: ../main.c:2216
msgid "-D\t\t\tDebugging mode"
msgstr "-D\t\t\tSencimiga reÄimo"
-#: ../main.c:2217
msgid "-n\t\t\tNo swap file, use memory only"
msgstr "-n\t\t\tNeniu permutodosiero .swp, uzas nur memoron"
-#: ../main.c:2218
msgid "-r\t\t\tList swap files and exit"
msgstr "-r\t\t\tListigi permutodosierojn .swp kaj eliri"
-#: ../main.c:2219
msgid "-r (with file name)\tRecover crashed session"
msgstr "-r (kun dosiernomo)\tRestaÅ­ri kolapsintan seancon"
-#: ../main.c:2220
msgid "-L\t\t\tSame as -r"
msgstr "-L\t\t\tKiel -r"
-#: ../main.c:2221
msgid "-A\t\t\tstart in Arabic mode"
msgstr "-A\t\t\tKomenci en araba reÄimo"
-#: ../main.c:2222
msgid "-H\t\t\tStart in Hebrew mode"
msgstr "-H\t\t\tKomenci en hebrea reÄimo"
-#: ../main.c:2223
msgid "-F\t\t\tStart in Farsi mode"
msgstr "-F\t\t\tKomenci en persa reÄimo"
-#: ../main.c:2224
msgid "-T <terminal>\tSet terminal type to <terminal>"
msgstr "-T <terminalo>\tAgordi terminalon al <terminalo>"
-#: ../main.c:2225
msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
msgstr "-u <vimrc>\t\tUzi <vimrc> anstataÅ­ iun ajn .vimrc"
-#: ../main.c:2226
msgid "--noplugin\t\tDon't load plugin scripts"
msgstr "--noplugin\t\tNe Åargi kromaĵajn skriptojn"
-#: ../main.c:2227
msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
msgstr "-p[N]\t\tMalfermi N langetojn (defaŭlto: po unu por ĉiu dosiero)"
-#: ../main.c:2228
msgid "-o[N]\t\tOpen N windows (default: one for each file)"
msgstr "-o[N]\t\tMalfermi N fenestrojn (defaŭlto: po unu por ĉiu dosiero)"
-#: ../main.c:2229
msgid "-O[N]\t\tLike -o but split vertically"
msgstr "-O[N]\t\tKiel -o sed dividi vertikale"
-#: ../main.c:2230
msgid "+\t\t\tStart at end of file"
msgstr "+\t\t\tKomenci ĉe la fino de la dosiero"
-#: ../main.c:2231
msgid "+<lnum>\t\tStart at line <lnum>"
msgstr "+<numL>\t\tKomenci ĉe linio <numL>"
-#: ../main.c:2232
msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
msgstr ""
"--cmd <komando>\tPlenumi <komando>-n antaÅ­ ol Åargi iun ajn dosieron vimrc"
-#: ../main.c:2233
msgid "-c <command>\t\tExecute <command> after loading the first file"
msgstr "-c <komando>\t\tPlenumi <komando>-n post kiam la unua dosiero ÅargiÄis"
-#: ../main.c:2235
msgid "-S <session>\t\tSource file <session> after loading the first file"
msgstr ""
"-S <seanco>\t\tRuli dosieron <seanco>-n post kiam la unua dosiero ÅargiÄis"
-#: ../main.c:2236
msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
msgstr "-s <skripto>\t\tLegi komandojn en Normala reÄimo el dosiero <skripto>"
-#: ../main.c:2237
msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
msgstr ""
"-w <eligaskripto>\tPostaldoni ĉiujn tajpitajn komandojn al dosiero "
"<eligaskripto>"
-#: ../main.c:2238
msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
msgstr ""
"-W <eligaskripto>\tSkribi ĉiujn tajpitajn komandojn al dosiero <eligaskripto>"
-#: ../main.c:2240
msgid "--startuptime <file>\tWrite startup timing messages to <file>"
msgstr ""
"--startuptime <dosiero> Skribi mesaÄojn de komenca tempomezurado al "
"<dosiero>"
-#: ../main.c:2242
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
msgstr "-i <viminfo>\t\tUzi <viminfo> anstataÅ­ .viminfo"
-#: ../main.c:2243
msgid "-h or --help\tPrint Help (this message) and exit"
msgstr "-h aÅ­ --help\tAfiÅi Helpon (tiun mesaÄon) kaj eliri"
-#: ../main.c:2244
msgid "--version\t\tPrint version information and exit"
msgstr "--version\t\tAfiÅi informon de versio kaj eliri"
-#: ../mark.c:676
msgid "No marks set"
msgstr "Neniu marko"
-#: ../mark.c:678
#, c-format
msgid "E283: No marks matching \"%s\""
msgstr "E283: Neniu marko kongruas kun \"%s\""
#. Highlight title
-#: ../mark.c:687
msgid ""
"\n"
"mark line col file/text"
@@ -3616,7 +2859,6 @@ msgstr ""
"mark linio kol dosiero/teksto"
#. Highlight title
-#: ../mark.c:789
msgid ""
"\n"
" jump line col file/text"
@@ -3625,7 +2867,6 @@ msgstr ""
" salt linio kol dosiero/teksto"
#. Highlight title
-#: ../mark.c:831
msgid ""
"\n"
"change line col text"
@@ -3633,7 +2874,6 @@ msgstr ""
"\n"
"ÅanÄo linio kol teksto"
-#: ../mark.c:1238
msgid ""
"\n"
"# File marks:\n"
@@ -3642,7 +2882,6 @@ msgstr ""
"# Markoj de dosiero:\n"
#. Write the jumplist with -'
-#: ../mark.c:1271
msgid ""
"\n"
"# Jumplist (newest first):\n"
@@ -3650,7 +2889,6 @@ msgstr ""
"\n"
"# Saltlisto (plej novaj unue):\n"
-#: ../mark.c:1352
msgid ""
"\n"
"# History of marks within files (newest to oldest):\n"
@@ -3658,85 +2896,66 @@ msgstr ""
"\n"
"# Historio de markoj en dosieroj (de plej nova al plej malnova):\n"
-#: ../mark.c:1431
msgid "Missing '>'"
msgstr "Mankas '>'"
-#: ../memfile.c:426
msgid "E293: block was not locked"
msgstr "E293: bloko ne estis Ålosita"
-#: ../memfile.c:799
msgid "E294: Seek error in swap file read"
msgstr "E294: Eraro de enpoziciigo dum lego de permutodosiero .swp"
-#: ../memfile.c:803
msgid "E295: Read error in swap file"
msgstr "E295: Eraro de lego en permutodosiero .swp"
-#: ../memfile.c:849
msgid "E296: Seek error in swap file write"
msgstr "E296: Eraro de enpoziciigo dum skribo de permutodosiero .swp"
-#: ../memfile.c:865
msgid "E297: Write error in swap file"
msgstr "E297: Skriberaro en permutodosiero .swp"
-#: ../memfile.c:1036
msgid "E300: Swap file already exists (symlink attack?)"
msgstr "E300: Permutodosiero .swp jam ekzistas (ĉu atako per simbola ligilo?)"
-#: ../memline.c:318
msgid "E298: Didn't get block nr 0?"
msgstr "E298: Ĉu ne akiris blokon n-ro 0?"
-#: ../memline.c:361
msgid "E298: Didn't get block nr 1?"
msgstr "E298: Ĉu ne akiris blokon n-ro 1?"
-#: ../memline.c:377
msgid "E298: Didn't get block nr 2?"
msgstr "E298: Ĉu ne akiris blokon n-ro 2?"
#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
msgid "E301: Oops, lost the swap file!!!"
msgstr "E301: Ve, perdis la permutodosieron .swp!!!"
-#: ../memline.c:477
msgid "E302: Could not rename swap file"
msgstr "E302: Ne eblis renomi la permutodosieron .swp"
-#: ../memline.c:554
#, c-format
msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
msgstr ""
"E303: Ne eblas malfermi permutodosieron .swp de \"%s\", restaÅ­ro neeblas"
-#: ../memline.c:666
msgid "E304: ml_upd_block0(): Didn't get block 0??"
msgstr "E304: ml_upd_block0(): Ne akiris blokon 0??"
#. no swap files found
-#: ../memline.c:830
#, c-format
msgid "E305: No swap file found for %s"
msgstr "E305: Neniu permutodosiero .swp trovita por %s"
-#: ../memline.c:839
msgid "Enter number of swap file to use (0 to quit): "
msgstr "Entajpu la uzendan numeron de permutodosiero .swp (0 por eliri): "
-#: ../memline.c:879
#, c-format
msgid "E306: Cannot open %s"
msgstr "E306: Ne eblas malfermi %s"
-#: ../memline.c:897
msgid "Unable to read block 0 from "
msgstr "Ne eblas legi blokon 0 de "
-#: ../memline.c:900
msgid ""
"\n"
"Maybe no changes were made or Vim did not update the swap file."
@@ -3744,28 +2963,22 @@ msgstr ""
"\n"
"Eble neniu ÅanÄo estis farita aÅ­ Vim ne Äisdatigis la permutodosieron .swp."
-#: ../memline.c:909
msgid " cannot be used with this version of Vim.\n"
msgstr " ne uzeblas per tiu versio de vim.\n"
-#: ../memline.c:911
msgid "Use Vim version 3.0.\n"
msgstr "Uzu version 3.0 de Vim\n"
-#: ../memline.c:916
#, c-format
msgid "E307: %s does not look like a Vim swap file"
msgstr "E307: %s ne aspektas kiel permutodosiero .swp de Vim"
-#: ../memline.c:922
msgid " cannot be used on this computer.\n"
msgstr " ne uzeblas per tiu komputilo.\n"
-#: ../memline.c:924
msgid "The file was created on "
msgstr "La dosiero estas kreita je "
-#: ../memline.c:928
msgid ""
",\n"
"or the file has been damaged."
@@ -3773,85 +2986,66 @@ msgstr ""
",\n"
"aÅ­ la dosiero estas difekta."
-#: ../memline.c:945
msgid " has been damaged (page size is smaller than minimum value).\n"
msgstr " difektiÄis (paÄa grando pli malgranda ol minimuma valoro).\n"
-#: ../memline.c:974
#, c-format
msgid "Using swap file \"%s\""
msgstr "Uzado de permutodosiero .swp \"%s\""
-#: ../memline.c:980
#, c-format
msgid "Original file \"%s\""
msgstr "Originala dosiero \"%s\""
-#: ../memline.c:995
msgid "E308: Warning: Original file may have been changed"
msgstr "E308: Averto: Originala dosiero eble ÅanÄiÄis"
-#: ../memline.c:1061
#, c-format
msgid "E309: Unable to read block 1 from %s"
msgstr "E309: Ne eblas legi blokon 1 de %s"
-#: ../memline.c:1065
msgid "???MANY LINES MISSING"
msgstr "???MULTAJ LINIOJ MANKAS"
-#: ../memline.c:1076
msgid "???LINE COUNT WRONG"
msgstr "???NOMBRO DE LINIOJ NE ÄœUSTAS"
-#: ../memline.c:1082
msgid "???EMPTY BLOCK"
msgstr "???MALPLENA BLOKO"
-#: ../memline.c:1103
msgid "???LINES MISSING"
msgstr "???LINIOJ MANKANTAJ"
-#: ../memline.c:1128
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr ""
"E310: Nevalida identigilo de bloko 1 (ĉu %s ne estas permutodosiero .swp?)"
-#: ../memline.c:1133
msgid "???BLOCK MISSING"
msgstr "???MANKAS BLOKO"
-#: ../memline.c:1147
msgid "??? from here until ???END lines may be messed up"
msgstr "??? ekde tie Äis ???FINO linioj estas eble difektaj"
-#: ../memline.c:1164
msgid "??? from here until ???END lines may have been inserted/deleted"
msgstr "??? ekde tie Äis ???FINO linioj estas eble enmetitaj/forviÅitaj"
-#: ../memline.c:1181
msgid "???END"
msgstr "???FINO"
-#: ../memline.c:1238
msgid "E311: Recovery Interrupted"
msgstr "E311: RestaÅ­ro interrompita"
-#: ../memline.c:1243
msgid ""
"E312: Errors detected while recovering; look for lines starting with ???"
msgstr "E312: Eraroj dum restaÅ­ro; rigardu liniojn komencantajn per ???"
-#: ../memline.c:1245
msgid "See \":help E312\" for more information."
msgstr "Vidu \":help E312\" por pliaj informoj."
-#: ../memline.c:1249
msgid "Recovery completed. You should check if everything is OK."
msgstr "RestaÅ­ro finiÄis. Indus kontroli ĉu ĉio estas en ordo."
-#: ../memline.c:1251
msgid ""
"\n"
"(You might want to write out this file under another name\n"
@@ -3859,16 +3053,13 @@ msgstr ""
"\n"
"(Indas konservi tiun dosieron per alia nomo\n"
-#: ../memline.c:1252
msgid "and run diff with the original file to check for changes)"
msgstr "kaj lanĉi diff kun la originala dosiero por kontroli la ÅanÄojn)"
-#: ../memline.c:1254
msgid "Recovery completed. Buffer contents equals file contents."
msgstr ""
"RestaÅ­ro finiÄis. La enhavo de la bufro samas kun la enhavo de la dosiero."
-#: ../memline.c:1255
msgid ""
"\n"
"You may want to delete the .swp file now.\n"
@@ -3879,51 +3070,39 @@ msgstr ""
"\n"
#. use msg() to start the scrolling properly
-#: ../memline.c:1327
msgid "Swap files found:"
msgstr "Permutodosiero .swp trovita:"
-#: ../memline.c:1446
msgid " In current directory:\n"
msgstr " En la aktuala dosierujo:\n"
-#: ../memline.c:1448
msgid " Using specified name:\n"
msgstr " Uzado de specifita nomo:\n"
-#: ../memline.c:1450
msgid " In directory "
msgstr " En dosierujo "
-#: ../memline.c:1465
msgid " -- none --\n"
msgstr " -- nenio --\n"
-#: ../memline.c:1527
msgid " owned by: "
msgstr " posedata de: "
-#: ../memline.c:1529
msgid " dated: "
msgstr " dato: "
-#: ../memline.c:1532 ../memline.c:3231
msgid " dated: "
msgstr " dato: "
-#: ../memline.c:1548
msgid " [from Vim version 3.0]"
msgstr " [de Vim versio 3.0]"
-#: ../memline.c:1550
msgid " [does not look like a Vim swap file]"
msgstr " [ne aspektas kiel permutodosiero .swp de Vim]"
-#: ../memline.c:1552
msgid " file name: "
msgstr " dosiernomo: "
-#: ../memline.c:1558
msgid ""
"\n"
" modified: "
@@ -3931,15 +3110,12 @@ msgstr ""
"\n"
" modifita: "
-#: ../memline.c:1559
msgid "YES"
msgstr "JES"
-#: ../memline.c:1559
msgid "no"
msgstr "ne"
-#: ../memline.c:1562
msgid ""
"\n"
" user name: "
@@ -3947,11 +3123,9 @@ msgstr ""
"\n"
" uzantonomo: "
-#: ../memline.c:1568
msgid " host name: "
msgstr " komputila nomo: "
-#: ../memline.c:1570
msgid ""
"\n"
" host name: "
@@ -3959,7 +3133,6 @@ msgstr ""
"\n"
" komputila nomo: "
-#: ../memline.c:1575
msgid ""
"\n"
" process ID: "
@@ -3967,11 +3140,9 @@ msgstr ""
"\n"
" proceza ID: "
-#: ../memline.c:1579
msgid " (still running)"
msgstr " (ankoraÅ­ ruliÄas)"
-#: ../memline.c:1586
msgid ""
"\n"
" [not usable on this computer]"
@@ -3979,97 +3150,75 @@ msgstr ""
"\n"
" [neuzebla per tiu komputilo]"
-#: ../memline.c:1590
msgid " [cannot be read]"
msgstr " [nelegebla]"
-#: ../memline.c:1593
msgid " [cannot be opened]"
msgstr " [nemalfermebla]"
-#: ../memline.c:1698
msgid "E313: Cannot preserve, there is no swap file"
msgstr "E313: Ne eblas konservi, ne estas permutodosiero .swp"
-#: ../memline.c:1747
msgid "File preserved"
msgstr "Dosiero konservita"
-#: ../memline.c:1749
msgid "E314: Preserve failed"
msgstr "E314: Konservo fiaskis"
-#: ../memline.c:1819
#, c-format
msgid "E315: ml_get: invalid lnum: %<PRId64>"
msgstr "E315: ml_get: nevalida lnum: %<PRId64>"
-#: ../memline.c:1851
#, c-format
msgid "E316: ml_get: cannot find line %<PRId64>"
msgstr "E316: ml_get: ne eblas trovi linion %<PRId64>"
-#: ../memline.c:2236
msgid "E317: pointer block id wrong 3"
msgstr "E317: nevalida referenco de bloko id 3"
-#: ../memline.c:2311
msgid "stack_idx should be 0"
msgstr "stack_idx devus esti 0"
-#: ../memline.c:2369
msgid "E318: Updated too many blocks?"
msgstr "E318: Ĉu Äisdatigis tro da blokoj?"
-#: ../memline.c:2511
msgid "E317: pointer block id wrong 4"
msgstr "E317: nevalida referenco de bloko id 4"
-#: ../memline.c:2536
msgid "deleted block 1?"
msgstr "ĉu forviÅita bloko 1?"
-#: ../memline.c:2707
#, c-format
msgid "E320: Cannot find line %<PRId64>"
msgstr "E320: Ne eblas trovi linion %<PRId64>"
-#: ../memline.c:2916
msgid "E317: pointer block id wrong"
msgstr "E317: nevalida referenco de bloko id"
-#: ../memline.c:2930
msgid "pe_line_count is zero"
msgstr "pe_line_count estas nul"
-#: ../memline.c:2955
#, c-format
msgid "E322: line number out of range: %<PRId64> past the end"
msgstr "E322: numero de linio ekster limoj: %<PRId64> preter la fino"
-#: ../memline.c:2959
#, c-format
msgid "E323: line count wrong in block %<PRId64>"
msgstr "E323: nevalida nombro de linioj en bloko %<PRId64>"
-#: ../memline.c:2999
msgid "Stack size increases"
msgstr "Stako pligrandiÄas"
-#: ../memline.c:3038
msgid "E317: pointer block id wrong 2"
msgstr "E317: nevalida referenco de bloko id 2"
-#: ../memline.c:3070
#, c-format
msgid "E773: Symlink loop for \"%s\""
msgstr "E773: Buklo de simbolaj ligiloj por \"%s\""
-#: ../memline.c:3221
msgid "E325: ATTENTION"
msgstr "E325: ATENTO"
-#: ../memline.c:3222
msgid ""
"\n"
"Found a swap file by the name \""
@@ -4077,39 +3226,32 @@ msgstr ""
"\n"
"Trovis permutodosieron .swp kun la nomo \""
-#: ../memline.c:3226
msgid "While opening file \""
msgstr "Dum malfermo de dosiero \""
-#: ../memline.c:3239
msgid " NEWER than swap file!\n"
msgstr " PLI NOVA ol permutodosiero .swp!\n"
-#: ../memline.c:3244
msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
" be careful not to end up with two different instances of the same\n"
-" file when making changes."
+" file when making changes. Quit, or continue with caution.\n"
msgstr ""
"\n"
-"(1) Alia programo eble redaktas la saman dosieron.\n"
-" Se jes, estu singarda por ne havi du malsamajn\n"
-" aperojn de la sama dosiero, kiam vi faros ÅanÄojn."
+"(1) Alia programo eble redaktas la saman dosieron. Se jes, estu singarda\n"
+" por ne havi du malsamajn aperojn de la sama dosiero, kiam vi faros\n"
+" ÅanÄojn. Eliru aÅ­ daÅ­rigu singarde.\n"
-#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
msgstr " Eliru, aÅ­ daÅ­rigu singarde.\n"
-#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
msgstr "(2) Redakta seanco de tiu dosiero kolapsis.\n"
-#: ../memline.c:3247
msgid " If this is the case, use \":recover\" or \"vim -r "
msgstr " Se veras, uzu \":recover\" aÅ­ \"vim -r "
-#: ../memline.c:3249
msgid ""
"\"\n"
" to recover the changes (see \":help recovery\").\n"
@@ -4117,11 +3259,9 @@ msgstr ""
"\"\n"
" por restaÅ­ri la ÅanÄojn (vidu \":help recovery\").\n"
-#: ../memline.c:3250
msgid " If you did this already, delete the swap file \""
msgstr " Se vi jam faris Äin, forviÅu la permutodosieron .swp \""
-#: ../memline.c:3252
msgid ""
"\"\n"
" to avoid this message.\n"
@@ -4129,25 +3269,20 @@ msgstr ""
"\"\n"
" por eviti tiun mesaÄon.\n"
-#: ../memline.c:3450 ../memline.c:3452
msgid "Swap file \""
msgstr "Permutodosiero .swp \""
-#: ../memline.c:3451 ../memline.c:3455
msgid "\" already exists!"
msgstr "\" jam ekzistas!"
-#: ../memline.c:3457
msgid "VIM - ATTENTION"
msgstr "VIM - ATENTO"
-#: ../memline.c:3459
msgid "Swap file already exists!"
msgstr "Permutodosiero .swp jam ekzistas!"
# AM: ĉu Vim konvertos la unuliterajn respondojn de la uzulo?
# DP: jes, la '&' respondoj bone funkcias (mi kontrolis)
-#: ../memline.c:3464
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4161,7 +3296,6 @@ msgstr ""
"&Eliri\n"
"Ĉe&sigi"
-#: ../memline.c:3467
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4185,48 +3319,38 @@ msgstr ""
#.
#. ".s?a"
#. ".saa": tried enough, give up
-#: ../memline.c:3528
msgid "E326: Too many swap files found"
msgstr "E326: Tro da dosieroj trovitaj"
-#: ../memory.c:227
#, c-format
msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
msgstr "E342: Ne plu restas memoro! (disponigo de %<PRIu64> bajtoj)"
-#: ../menu.c:62
msgid "E327: Part of menu-item path is not sub-menu"
msgstr "E327: Parto de vojo de menuero ne estas sub-menuo"
-#: ../menu.c:63
msgid "E328: Menu only exists in another mode"
msgstr "E328: Menuo nur ekzistas en alia reÄimo"
-#: ../menu.c:64
#, c-format
msgid "E329: No menu \"%s\""
msgstr "E329: Neniu menuo \"%s\""
#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
msgid "E792: Empty menu name"
msgstr "E792: Malplena nomo de menuo"
-#: ../menu.c:340
msgid "E330: Menu path must not lead to a sub-menu"
msgstr "E330: Vojo de menuo ne rajtas konduki al sub-menuo"
-#: ../menu.c:365
msgid "E331: Must not add menu items directly to menu bar"
msgstr "E331: Aldono de menueroj direkte al menuzono estas malpermesita"
-#: ../menu.c:370
msgid "E332: Separator cannot be part of a menu path"
msgstr "E332: Disigilo ne rajtas esti ero de vojo de menuo"
#. Now we have found the matching menu, and we list the mappings
#. Highlight title
-#: ../menu.c:762
msgid ""
"\n"
"--- Menus ---"
@@ -4234,73 +3358,54 @@ msgstr ""
"\n"
"--- Menuoj ---"
-#: ../menu.c:1313
msgid "E333: Menu path must lead to a menu item"
msgstr "E333: Vojo de menuo devas konduki al menuero"
-#: ../menu.c:1330
#, c-format
msgid "E334: Menu not found: %s"
msgstr "E334: Menuo netrovita: %s"
-#: ../menu.c:1396
#, c-format
msgid "E335: Menu not defined for %s mode"
msgstr "E335: Menuo ne estas difinita por reÄimo %s"
-#: ../menu.c:1426
msgid "E336: Menu path must lead to a sub-menu"
msgstr "E336: Vojo de menuo devas konduki al sub-menuo"
-#: ../menu.c:1447
msgid "E337: Menu not found - check menu names"
msgstr "E337: Menuo ne trovita - kontrolu nomojn de menuoj"
-#: ../message.c:423
#, c-format
msgid "Error detected while processing %s:"
msgstr "Eraro okazis dum traktado de %s:"
-#: ../message.c:445
#, c-format
msgid "line %4ld:"
msgstr "linio %4ld:"
-#: ../message.c:617
#, c-format
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nevalida nomo de reÄistro: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Flegado de mesaÄoj: Dominique PELLÉ <dominique.pelle@gmail.com>"
-
-#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrompo: "
-#: ../message.c:988
msgid "Press ENTER or type command to continue"
msgstr "Premu ENEN-KLAVON aÅ­ tajpu komandon por daÅ­rigi"
-#: ../message.c:1843
#, c-format
msgid "%s line %<PRId64>"
msgstr "%s linio %<PRId64>"
-#: ../message.c:2392
msgid "-- More --"
msgstr "-- Pli --"
-#: ../message.c:2398
msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
msgstr " SPACETO/d/j: ekrano/paÄo/sub linio, b/u/k: supre, q: eliri "
-#: ../message.c:3021 ../message.c:3031
msgid "Question"
msgstr "Demando"
-#: ../message.c:3023
msgid ""
"&Yes\n"
"&No"
@@ -4308,7 +3413,6 @@ msgstr ""
"&Jes\n"
"&Ne"
-#: ../message.c:3033
msgid ""
"&Yes\n"
"&No\n"
@@ -4320,7 +3424,6 @@ msgstr ""
# AM: ĉu Vim konvertos unuliterajn respondojn?
# DP: jes, '&' bone funkcias (mi kontrolis)
-#: ../message.c:3045
msgid ""
"&Yes\n"
"&No\n"
@@ -4334,175 +3437,136 @@ msgstr ""
"&Forlasi Ĉion\n"
"&Rezigni"
-#: ../message.c:3058
msgid "E766: Insufficient arguments for printf()"
msgstr "E766: Ne sufiĉaj argumentoj por printf()"
-#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
msgstr "E807: Atendis Glitpunktnombron kiel argumento de printf()"
-#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
msgstr "E767: Tro da argumentoj al printf()"
-#: ../misc1.c:2256
msgid "W10: Warning: Changing a readonly file"
msgstr "W10: Averto: ÅœanÄo de nurlegebla dosiero"
-#: ../misc1.c:2537
msgid "Type number and <Enter> or click with mouse (empty cancels): "
msgstr ""
"Tajpu nombron kaj <Enenklavon> aÅ­ alklaku per la muso (malpleno rezignas): "
-#: ../misc1.c:2539
msgid "Type number and <Enter> (empty cancels): "
msgstr "Tajpu nombron kaj <Enenklavon> (malpleno rezignas): "
-#: ../misc1.c:2585
msgid "1 more line"
msgstr "1 plia linio"
-#: ../misc1.c:2588
msgid "1 line less"
msgstr "1 malplia linio"
-#: ../misc1.c:2593
#, c-format
msgid "%<PRId64> more lines"
msgstr "%<PRId64> pliaj linioj"
-#: ../misc1.c:2596
#, c-format
msgid "%<PRId64> fewer lines"
msgstr "%<PRId64> malpliaj linioj"
-#: ../misc1.c:2599
msgid " (Interrupted)"
msgstr " (Interrompita)"
-#: ../misc1.c:2635
msgid "Beep!"
msgstr "Bip!"
-#: ../misc2.c:738
#, c-format
msgid "Calling shell to execute: \"%s\""
msgstr "Alvokas Åelon por plenumi: \"%s\""
-#: ../normal.c:183
msgid "E349: No identifier under cursor"
msgstr "E349: Neniu identigilo sub la kursoro"
-#: ../normal.c:1866
msgid "E774: 'operatorfunc' is empty"
msgstr "E774: 'operatorfunc' estas malplena"
-#: ../normal.c:2637
msgid "Warning: terminal cannot highlight"
msgstr "Averto: terminalo ne povas emfazi"
-#: ../normal.c:2807
msgid "E348: No string under cursor"
msgstr "E348: Neniu ĉeno sub la kursoro"
-#: ../normal.c:3937
msgid "E352: Cannot erase folds with current 'foldmethod'"
msgstr "E352: Ne eblas forviÅi faldon per aktuala 'foldmethod'"
-#: ../normal.c:5897
msgid "E664: changelist is empty"
msgstr "E664: Listo de ÅanÄoj estas malplena"
-#: ../normal.c:5899
msgid "E662: At start of changelist"
msgstr "E662: Ĉe komenco de ÅanÄlisto"
-#: ../normal.c:5901
msgid "E663: At end of changelist"
msgstr "E663: Ĉe fino de ÅanÄlisto"
-#: ../normal.c:7053
msgid "Type :quit<Enter> to exit Nvim"
msgstr "Tajpu \":quit<Enenklavo>\" por eliri el Vim"
-#: ../ops.c:248
#, c-format
msgid "1 line %sed 1 time"
msgstr "1 linio %sita 1 foje"
-#: ../ops.c:250
#, c-format
msgid "1 line %sed %d times"
msgstr "1 linio %sita %d foje"
-#: ../ops.c:253
#, c-format
msgid "%<PRId64> lines %sed 1 time"
msgstr "%<PRId64> linio %sita 1 foje"
-#: ../ops.c:256
#, c-format
msgid "%<PRId64> lines %sed %d times"
msgstr "%<PRId64> linioj %sitaj %d foje"
-#: ../ops.c:592
#, c-format
msgid "%<PRId64> lines to indent... "
msgstr "%<PRId64> krommarÄenendaj linioj... "
-#: ../ops.c:634
msgid "1 line indented "
msgstr "1 linio krommarÄenita "
-#: ../ops.c:636
#, c-format
msgid "%<PRId64> lines indented "
msgstr "%<PRId64> linioj krommarÄenitaj "
-#: ../ops.c:938
msgid "E748: No previously used register"
msgstr "E748: Neniu reÄistro antaÅ­e uzata"
#. must display the prompt
-#: ../ops.c:1433
msgid "cannot yank; delete anyway"
msgstr "ne eblas kopii; forviÅi tamene"
-#: ../ops.c:1929
msgid "1 line changed"
msgstr "1 linio ÅanÄita"
-#: ../ops.c:1931
#, c-format
msgid "%<PRId64> lines changed"
msgstr "%<PRId64> linioj ÅanÄitaj"
-#: ../ops.c:2521
msgid "block of 1 line yanked"
msgstr "bloko de 1 linio kopiita"
-#: ../ops.c:2523
msgid "1 line yanked"
msgstr "1 linio kopiita"
-#: ../ops.c:2525
#, c-format
msgid "block of %<PRId64> lines yanked"
msgstr "bloko de %<PRId64> linioj kopiita"
-#: ../ops.c:2528
#, c-format
msgid "%<PRId64> lines yanked"
msgstr "%<PRId64> linioj kopiitaj"
-#: ../ops.c:2710
#, c-format
msgid "E353: Nothing in register %s"
msgstr "E353: Nenio en reÄistro %s"
#. Highlight title
-#: ../ops.c:3185
msgid ""
"\n"
"--- Registers ---"
@@ -4510,11 +3574,9 @@ msgstr ""
"\n"
"--- ReÄistroj ---"
-#: ../ops.c:4455
msgid "Illegal register name"
msgstr "Nevalida nomo de reÄistro"
-#: ../ops.c:4533
msgid ""
"\n"
"# Registers:\n"
@@ -4522,17 +3584,14 @@ msgstr ""
"\n"
"# ReÄistroj:\n"
-#: ../ops.c:4575
#, c-format
msgid "E574: Unknown register type %d"
msgstr "E574: Nekonata tipo de reÄistro %d"
-#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
msgstr "%<PRId64> Kolumnoj; "
-#: ../ops.c:5097
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4541,7 +3600,6 @@ msgstr ""
"Apartigis %s%<PRId64> de %<PRId64> Linioj; %<PRId64> de %<PRId64> Vortoj; "
"%<PRId64> de %<PRId64> Bajtoj"
-#: ../ops.c:5105
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4550,7 +3608,6 @@ msgstr ""
"Apartigis %s%<PRId64> de %<PRId64> Linioj; %<PRId64> de %<PRId64> Vortoj; "
"%<PRId64> de %<PRId64> Signoj; %<PRId64> de %<PRId64> Bajtoj"
-#: ../ops.c:5123
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
@@ -4559,7 +3616,6 @@ msgstr ""
"Kol %s de %s; Linio %<PRId64> de %<PRId64>; Vorto %<PRId64> de %<PRId64>; "
"Bajto %<PRId64> de %<PRId64>"
-#: ../ops.c:5133
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
@@ -4568,140 +3624,108 @@ msgstr ""
"Kol %s de %s; Linio %<PRId64> de %<PRId64>; Vorto %<PRId64> de %<PRId64>; "
"Signo %<PRId64> de %<PRId64>; Bajto %<PRId64> de %<PRId64>"
-#: ../ops.c:5146
#, c-format
msgid "(+%<PRId64> for BOM)"
msgstr "(+%<PRId64> por BOM)"
-#: ../option.c:1238
msgid "%<%f%h%m%=Page %N"
msgstr "%<%f%h%m%=Folio %N"
-#: ../option.c:1574
msgid "Thanks for flying Vim"
msgstr "Dankon pro flugi per Vim"
#. found a mismatch: skip
-#: ../option.c:2698
msgid "E518: Unknown option"
msgstr "E518: Nekonata opcio"
-#: ../option.c:2709
msgid "E519: Option not supported"
msgstr "E519: Opcio ne subtenata"
-#: ../option.c:2740
msgid "E520: Not allowed in a modeline"
msgstr "E520: Nepermesebla en reÄimlinio"
-#: ../option.c:2815
msgid "E846: Key code not set"
msgstr "E846: Klavkodo ne agordita"
-#: ../option.c:2924
msgid "E521: Number required after ="
msgstr "E521: Nombro bezonata post ="
-#: ../option.c:3226 ../option.c:3864
msgid "E522: Not found in termcap"
msgstr "E522: Netrovita en termcap"
-#: ../option.c:3335
#, c-format
msgid "E539: Illegal character <%s>"
msgstr "E539: Nevalida signo <%s>"
-#: ../option.c:2253
#, c-format
msgid "For option %s"
msgstr "Por opcio %s"
-#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: Ne eblas agordi 'term' al malplena ĉeno"
-#: ../option.c:3885
msgid "E589: 'backupext' and 'patchmode' are equal"
msgstr "E589: 'backupext' kaj 'patchmode' estas egalaj"
-#: ../option.c:3964
msgid "E834: Conflicts with value of 'listchars'"
msgstr "E834: Konfliktoj kun la valoro de 'listchars'"
-#: ../option.c:3966
msgid "E835: Conflicts with value of 'fillchars'"
msgstr "E835: Konfliktoj kun la valoro de 'fillchars'"
-#: ../option.c:4163
msgid "E524: Missing colon"
msgstr "E524: Mankas dupunkto"
-#: ../option.c:4165
msgid "E525: Zero length string"
msgstr "E525: Ĉeno de nula longo"
-#: ../option.c:4220
#, c-format
msgid "E526: Missing number after <%s>"
msgstr "E526: Mankas nombro post <%s>"
-#: ../option.c:4232
msgid "E527: Missing comma"
msgstr "E527: Mankas komo"
-#: ../option.c:4239
msgid "E528: Must specify a ' value"
msgstr "E528: Devas specifi ' valoron"
-#: ../option.c:4271
msgid "E595: contains unprintable or wide character"
msgstr "E595: enhavas nepreseblan aÅ­ plurĉellarÄan signon"
-#: ../option.c:4469
#, c-format
msgid "E535: Illegal character after <%c>"
msgstr "E535: Nevalida signo post <%c>"
-#: ../option.c:4534
msgid "E536: comma required"
msgstr "E536: komo bezonata"
-#: ../option.c:4543
#, c-format
msgid "E537: 'commentstring' must be empty or contain %s"
msgstr "E537: 'commentstring' devas esti malplena aÅ­ enhavi %s"
-#: ../option.c:4928
msgid "E540: Unclosed expression sequence"
msgstr "E540: '}' mankas"
-#: ../option.c:4932
msgid "E541: too many items"
msgstr "E541: tro da elementoj"
-#: ../option.c:4934
msgid "E542: unbalanced groups"
msgstr "E542: misekvilibritaj grupoj"
-#: ../option.c:5148
msgid "E590: A preview window already exists"
msgstr "E590: AntaÅ­vida fenestro jam ekzistas"
-#: ../option.c:5311
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr "W17: La araba bezonas UTF-8, tajpu \":set encoding=utf-8\""
-#: ../option.c:5623
#, c-format
msgid "E593: Need at least %d lines"
msgstr "E593: Bezonas almenaÅ­ %d liniojn"
-#: ../option.c:5631
#, c-format
msgid "E594: Need at least %d columns"
msgstr "E594: Bezonas almenaÅ­ %d kolumnojn"
-#: ../option.c:6011
#, c-format
msgid "E355: Unknown option: %s"
msgstr "E355: Nekonata opcio: %s"
@@ -4709,12 +3733,10 @@ msgstr "E355: Nekonata opcio: %s"
#. There's another character after zeros or the string
#. * is empty. In both cases, we are trying to set a
#. * num option using a string.
-#: ../option.c:6037
#, c-format
msgid "E521: Number required: &%s = '%s'"
msgstr "E521: Nombro bezonata: &%s = '%s'"
-#: ../option.c:6149
msgid ""
"\n"
"--- Terminal codes ---"
@@ -4722,7 +3744,6 @@ msgstr ""
"\n"
"--- Kodoj de terminalo ---"
-#: ../option.c:6151
msgid ""
"\n"
"--- Global option values ---"
@@ -4730,7 +3751,6 @@ msgstr ""
"\n"
"--- Mallokaj opcioj ---"
-#: ../option.c:6153
msgid ""
"\n"
"--- Local option values ---"
@@ -4738,7 +3758,6 @@ msgstr ""
"\n"
"--- Valoroj de lokaj opcioj ---"
-#: ../option.c:6155
msgid ""
"\n"
"--- Options ---"
@@ -4746,21 +3765,17 @@ msgstr ""
"\n"
"--- Opcioj ---"
-#: ../option.c:6816
msgid "E356: get_varp ERROR"
msgstr "E356: ERARO get_varp"
-#: ../option.c:7696
#, c-format
msgid "E357: 'langmap': Matching character missing for %s"
msgstr "E357: 'langmap': Kongrua signo mankas por %s"
-#: ../option.c:7715
#, c-format
msgid "E358: 'langmap': Extra characters after semicolon: %s"
msgstr "E358: 'langmap': Ekstraj signoj post punktokomo: %s"
-#: ../os/shell.c:194
msgid ""
"\n"
"Cannot execute shell "
@@ -4768,7 +3783,6 @@ msgstr ""
"\n"
"Ne eblas plenumi Åelon "
-#: ../os/shell.c:439
msgid ""
"\n"
"shell returned "
@@ -4776,7 +3790,6 @@ msgstr ""
"\n"
"Åelo liveris "
-#: ../os_unix.c:465 ../os_unix.c:471
msgid ""
"\n"
"Could not get security context for "
@@ -4784,7 +3797,6 @@ msgstr ""
"\n"
"Ne povis akiri kuntekston de sekureco por "
-#: ../os_unix.c:479
msgid ""
"\n"
"Could not set security context for "
@@ -4792,219 +3804,181 @@ msgstr ""
"\n"
"Ne povis Åalti kuntekston de sekureco por "
-#: ../os_unix.c:1558 ../os_unix.c:1647
+#, c-format
+msgid "Could not set security context %s for %s"
+msgstr "Ne povis Åalti kuntekston de sekureco %s por %s"
+
+#, c-format
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr ""
+"Ne povis akiri kuntekston de sekureco %s por %s. Gi nun estas forigata!"
+
#, c-format
msgid "dlerror = \"%s\""
msgstr "dlerror = \"%s\""
-#: ../path.c:1449
#, c-format
msgid "E447: Can't find file \"%s\" in path"
msgstr "E447: Ne eblas trovi dosieron \"%s\" en serĉvojo"
-#: ../quickfix.c:359
#, c-format
msgid "E372: Too many %%%c in format string"
msgstr "E372: Tro da %%%c en formata ĉeno"
-#: ../quickfix.c:371
#, c-format
msgid "E373: Unexpected %%%c in format string"
msgstr "E373: Neatendita %%%c en formata ĉeno"
-#: ../quickfix.c:420
msgid "E374: Missing ] in format string"
msgstr "E374: Mankas ] en formata ĉeno"
-#: ../quickfix.c:431
#, c-format
msgid "E375: Unsupported %%%c in format string"
msgstr "E375: Nesubtenata %%%c en formata ĉeno"
-#: ../quickfix.c:448
#, c-format
msgid "E376: Invalid %%%c in format string prefix"
msgstr "E376: Nevalida %%%c en prefikso de formata ĉeno"
-#: ../quickfix.c:454
#, c-format
msgid "E377: Invalid %%%c in format string"
msgstr "E377: Nevalida %%%c en formata ĉeno"
#. nothing found
-#: ../quickfix.c:477
msgid "E378: 'errorformat' contains no pattern"
msgstr "E378: 'errorformat' enhavas neniun Åablonon"
-#: ../quickfix.c:695
msgid "E379: Missing or empty directory name"
msgstr "E379: Nomo de dosierujo mankas aÅ­ estas malplena"
-#: ../quickfix.c:1305
msgid "E553: No more items"
msgstr "E553: Ne plu estas eroj"
-#: ../quickfix.c:1674
#, c-format
msgid "(%d of %d)%s%s: "
msgstr "(%d de %d)%s%s: "
-#: ../quickfix.c:1676
msgid " (line deleted)"
msgstr " (forviÅita linio)"
-#: ../quickfix.c:1863
msgid "E380: At bottom of quickfix stack"
msgstr "E380: Ĉe la subo de stako de rapidriparo"
-#: ../quickfix.c:1869
msgid "E381: At top of quickfix stack"
msgstr "E381: Ĉe la supro de stako de rapidriparo"
-#: ../quickfix.c:1880
#, c-format
msgid "error list %d of %d; %d errors"
msgstr "listo de eraroj %d de %d; %d eraroj"
-#: ../quickfix.c:2427
msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: Ne eblas skribi, opcio 'buftype' estas Åaltita"
-#: ../quickfix.c:2812
msgid "E683: File name missing or invalid pattern"
msgstr "E683: Dosiernomo mankas aÅ­ nevalida Åablono"
-#: ../quickfix.c:2911
#, c-format
msgid "Cannot open file \"%s\""
msgstr "Ne eblas malfermi dosieron \"%s\""
-#: ../quickfix.c:3429
msgid "E681: Buffer is not loaded"
msgstr "E681: Bufro ne estas Åargita"
-#: ../quickfix.c:3487
msgid "E777: String or List expected"
msgstr "E777: Ĉeno aŭ Listo atendita"
-#: ../regexp.c:359
#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: nevalida ano en %s%%[]"
-#: ../regexp.c:374
#, c-format
msgid "E769: Missing ] after %s["
msgstr "E769: Mankas ] post %s["
-#: ../regexp.c:375
#, c-format
msgid "E53: Unmatched %s%%("
msgstr "E53: Neekvilibra %s%%("
-#: ../regexp.c:376
#, c-format
msgid "E54: Unmatched %s("
msgstr "E54: Neekvilibra %s("
-#: ../regexp.c:377
#, c-format
msgid "E55: Unmatched %s)"
msgstr "E55: Neekvilibra %s"
-#: ../regexp.c:378
msgid "E66: \\z( not allowed here"
msgstr "E66: \\z( estas permesebla tie"
# DP: vidu http://www.thefreedictionary.com/et+al.
-#: ../regexp.c:379
msgid "E67: \\z1 et al. not allowed here"
msgstr "E67: \\z1 kaj aliaj estas nepermeseblaj tie"
-#: ../regexp.c:380
#, c-format
msgid "E69: Missing ] after %s%%["
msgstr "E69: Mankas ] post %s%%["
-#: ../regexp.c:381
#, c-format
msgid "E70: Empty %s%%[]"
msgstr "E70: Malplena %s%%[]"
-#: ../regexp.c:1209 ../regexp.c:1224
msgid "E339: Pattern too long"
msgstr "E339: Åœablono tro longa"
-#: ../regexp.c:1371
msgid "E50: Too many \\z("
msgstr "E50: Tro da \\z("
-#: ../regexp.c:1378
#, c-format
msgid "E51: Too many %s("
msgstr "E51: Tro da %s("
-#: ../regexp.c:1427
msgid "E52: Unmatched \\z("
msgstr "E52: Neekvilibra \\z("
-#: ../regexp.c:1637
#, c-format
msgid "E59: invalid character after %s@"
msgstr "E59: nevalida signo post %s@"
-#: ../regexp.c:1672
#, c-format
msgid "E60: Too many complex %s{...}s"
msgstr "E60: Tro da kompleksaj %s{...}-oj"
-#: ../regexp.c:1687
#, c-format
msgid "E61: Nested %s*"
msgstr "E61: Ingita %s*"
-#: ../regexp.c:1690
#, c-format
msgid "E62: Nested %s%c"
msgstr "E62: Ingita %s%c"
-#: ../regexp.c:1800
msgid "E63: invalid use of \\_"
msgstr "E63: nevalida uzo de \\_"
-#: ../regexp.c:1850
#, c-format
msgid "E64: %s%c follows nothing"
msgstr "E64: %s%c sekvas nenion"
-#: ../regexp.c:1902
msgid "E65: Illegal back reference"
msgstr "E65: Nevalida retro-referenco"
-#: ../regexp.c:1943
msgid "E68: Invalid character after \\z"
msgstr "E68: Nevalida signo post \\z"
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
#, c-format
msgid "E678: Invalid character after %s%%[dxouU]"
msgstr "E678: Nevalida signo post %s%%[dxouU]"
-#: ../regexp.c:2107
#, c-format
msgid "E71: Invalid character after %s%%"
msgstr "E71: Nevalida signo post %s%%"
-#: ../regexp.c:3017
#, c-format
msgid "E554: Syntax error in %s{...}"
msgstr "E554: Sintaksa eraro en %s{...}"
-#: ../regexp.c:3805
msgid "External submatches:\n"
msgstr "Eksteraj subkongruoj:\n"
-#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
"used "
@@ -5012,65 +3986,52 @@ msgstr ""
"E864: \\%#= povas nur esti sekvita de 0, 1, aÅ­ 2. La aÅ­tomata motoro de "
"regulesprimo estos uzata "
-#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) Trovis finon de regulesprimo tro frue"
-#: ../regexp_nfa.c:240
#, c-format
msgid "E866: (NFA regexp) Misplaced %c"
msgstr "E866: (NFA-regulesprimo) Mispoziciigita %c"
-#: ../regexp_nfa.c:242
#, fuzzy, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr "E877: (NFA-regulesprimo) Nevalida klaso de signo "
+#~ msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
+#~ msgstr "E877: (NFA-regulesprimo) Nevalida klaso de signo "
-#: ../regexp_nfa.c:1261
#, c-format
msgid "E867: (NFA) Unknown operator '\\z%c'"
msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
-#: ../regexp_nfa.c:1387
#, fuzzy, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
+#~ msgid "E867: (NFA) Unknown operator '\\%%%c'"
+#~ msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
-#: ../regexp_nfa.c:1802
#, c-format
msgid "E869: (NFA) Unknown operator '\\@%c'"
msgstr "E869: (NFA) Nekonata operatoro '\\@%c'"
-#: ../regexp_nfa.c:1831
msgid "E870: (NFA regexp) Error reading repetition limits"
msgstr "E870: (NFS-regulesprimo) Eraro dum legado de limoj de ripeto"
#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
msgstr ""
"E871: (NFA-regulesprimo) Ne povas havi mult-selekton tuj post alia mult-"
"selekto!"
#. Too many `('
-#: ../regexp_nfa.c:2037
msgid "E872: (NFA regexp) Too many '('"
msgstr "E872: (NFA-regulesprimo) tro da '('"
-#: ../regexp_nfa.c:2042
#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E872: (NFA-regulesprimo) tro da '('"
+#~ msgid "E879: (NFA regexp) Too many \\z("
+#~ msgstr "E872: (NFA-regulesprimo) tro da '('"
-#: ../regexp_nfa.c:2066
msgid "E873: (NFA regexp) proper termination error"
msgstr "E873: (NFA-regulesprimo) propra end-eraro"
-#: ../regexp_nfa.c:2599
msgid "E874: (NFA) Could not pop the stack !"
msgstr "E874: (NFA) Ne povis elpreni de la staplo!"
-#: ../regexp_nfa.c:3298
msgid ""
"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
"left on stack"
@@ -5078,177 +4039,136 @@ msgstr ""
"E875: (NFA-regulesprimo) (dum konverto de postmeto al NFA), restas tro da "
"statoj en la staplo"
-#: ../regexp_nfa.c:3302
msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
msgstr "E876: (NFA-regulesprimo) ne sufiĉa spaco por enmomorigi la tutan NFA "
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
msgid ""
"Could not open temporary log file for writing, displaying on stderr ... "
msgstr ""
"Ne povis malfermi provizoran protokolan dosieron por skribi, nun montras sur "
"stderr ..."
-#: ../regexp_nfa.c:4840
#, c-format
msgid "(NFA) COULD NOT OPEN %s !"
msgstr "(NFA) NE POVIS MALFERMI %s!"
-#: ../regexp_nfa.c:6049
msgid "Could not open temporary log file for writing "
msgstr "Ne povis malfermi la provizoran protokolan dosieron por skribi "
-#: ../screen.c:7435
msgid " VREPLACE"
msgstr " V-ANSTATAŬIGO"
-#: ../screen.c:7437
msgid " REPLACE"
msgstr " ANSTATAŬIGO"
-#: ../screen.c:7440
msgid " REVERSE"
msgstr " INVERSI"
-#: ../screen.c:7441
msgid " INSERT"
msgstr " ENMETO"
-#: ../screen.c:7443
msgid " (insert)"
msgstr " (enmeto)"
-#: ../screen.c:7445
msgid " (replace)"
msgstr " (anstataÅ­igo)"
-#: ../screen.c:7447
msgid " (vreplace)"
msgstr " (v-anstataÅ­igo)"
-#: ../screen.c:7449
msgid " Hebrew"
msgstr " hebrea"
-#: ../screen.c:7454
msgid " Arabic"
msgstr " araba"
-#: ../screen.c:7456
msgid " (lang)"
msgstr " (lingvo)"
-#: ../screen.c:7459
msgid " (paste)"
msgstr " (algluo)"
-#: ../screen.c:7469
msgid " VISUAL"
msgstr " VIDUMA"
-#: ../screen.c:7470
msgid " VISUAL LINE"
msgstr " VIDUMA LINIO"
-#: ../screen.c:7471
msgid " VISUAL BLOCK"
msgstr " VIDUMA BLOKO"
-#: ../screen.c:7472
msgid " SELECT"
msgstr " APARTIGO"
-#: ../screen.c:7473
msgid " SELECT LINE"
msgstr " APARTIGITA LINIO"
-#: ../screen.c:7474
msgid " SELECT BLOCK"
msgstr " APARTIGITA BLOKO"
-#: ../screen.c:7486 ../screen.c:7541
msgid "recording"
msgstr "registrado"
-#: ../search.c:487
#, c-format
msgid "E383: Invalid search string: %s"
msgstr "E383: Nevalida serĉenda ĉeno: %s"
-#: ../search.c:832
#, c-format
msgid "E384: search hit TOP without match for: %s"
msgstr "E384: serĉo atingis SUPRON sen trovi: %s"
-#: ../search.c:835
#, c-format
msgid "E385: search hit BOTTOM without match for: %s"
msgstr "E385: serĉo atingis SUBON sen trovi: %s"
-#: ../search.c:1200
msgid "E386: Expected '?' or '/' after ';'"
msgstr "E386: Atendis '?' aÅ­ '/' post ';'"
-#: ../search.c:4085
msgid " (includes previously listed match)"
msgstr " (enhavas antaÅ­e listigitajn kongruojn)"
#. cursor at status line
-#: ../search.c:4104
msgid "--- Included files "
msgstr "--- Inkluzivitaj dosieroj "
-#: ../search.c:4106
msgid "not found "
msgstr "netrovitaj "
-#: ../search.c:4107
msgid "in path ---\n"
msgstr "en serĉvojo ---\n"
-#: ../search.c:4168
msgid " (Already listed)"
msgstr " (Jam listigita)"
-#: ../search.c:4170
msgid " NOT FOUND"
msgstr " NETROVITA"
-#: ../search.c:4211
#, c-format
msgid "Scanning included file: %s"
msgstr "Skanado de inkluzivitaj dosieroj: %s"
-#: ../search.c:4216
#, c-format
msgid "Searching included file %s"
msgstr "Serĉado de inkluzivitaj dosieroj %s"
-#: ../search.c:4405
msgid "E387: Match is on current line"
msgstr "E387: Kongruo estas ĉe aktuala linio"
-#: ../search.c:4517
msgid "All included files were found"
msgstr "Ĉiuj inkluzivitaj dosieroj estis trovitaj"
-#: ../search.c:4519
msgid "No included files"
msgstr "Neniu inkluzivita dosiero"
-#: ../search.c:4527
msgid "E388: Couldn't find definition"
msgstr "E388: Ne eblis trovi difinon"
-#: ../search.c:4529
msgid "E389: Couldn't find pattern"
msgstr "E389: Ne eblis trovi Åablonon"
-#: ../search.c:4668
msgid "Substitute "
msgstr "AnstataÅ­igi "
-#: ../search.c:4681
#, c-format
msgid ""
"\n"
@@ -5259,97 +4179,76 @@ msgstr ""
"# Lasta serĉa Åablono %s:\n"
"~"
-#: ../spell.c:951
msgid "E759: Format error in spell file"
msgstr "E759: Eraro de formato en literuma dosiero"
-#: ../spell.c:952
msgid "E758: Truncated spell file"
msgstr "E758: Trunkita literuma dosiero"
-#: ../spell.c:953
#, c-format
msgid "Trailing text in %s line %d: %s"
msgstr "Vosta teksto en %s linio %d: %s"
-#: ../spell.c:954
#, c-format
msgid "Affix name too long in %s line %d: %s"
msgstr "Nomo de afikso tro longa en %s linio %d: %s"
-#: ../spell.c:955
msgid "E761: Format error in affix file FOL, LOW or UPP"
msgstr "E761: Eraro de formato en afiksa dosiero FOL, LOW aÅ­ UPP"
-#: ../spell.c:957
msgid "E762: Character in FOL, LOW or UPP is out of range"
msgstr "E762: Signo en FOL, LOW aÅ­ UPP estas ekster limoj"
-#: ../spell.c:958
msgid "Compressing word tree..."
msgstr "Densigas arbon de vortoj..."
-#: ../spell.c:1951
msgid "E756: Spell checking is not enabled"
msgstr "E756: Literumilo ne estas Åaltita"
-#: ../spell.c:2249
#, c-format
msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
msgstr "Averto: Ne eblas trovi vortliston \"%s.%s.spl\" aÅ­ \"%s.ascii.spl\""
-#: ../spell.c:2473
#, c-format
msgid "Reading spell file \"%s\""
msgstr "Legado de literuma dosiero \"%s\""
-#: ../spell.c:2496
msgid "E757: This does not look like a spell file"
msgstr "E757: Tio ne Åajnas esti literuma dosiero"
-#: ../spell.c:2501
msgid "E771: Old spell file, needs to be updated"
msgstr "E771: Malnova literuma dosiero, Äisdatigo bezonata"
-#: ../spell.c:2504
msgid "E772: Spell file is for newer version of Vim"
msgstr "E772: Literuma dosiero estas por pli nova versio de Vim"
-#: ../spell.c:2602
msgid "E770: Unsupported section in spell file"
msgstr "E770: Nesubtenata sekcio en literuma dosiero"
-#: ../spell.c:3762
#, c-format
msgid "Warning: region %s not supported"
msgstr "Averto: regiono %s ne subtenata"
-#: ../spell.c:4550
#, c-format
msgid "Reading affix file %s ..."
msgstr "Legado de afiksa dosiero %s ..."
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
#, c-format
msgid "Conversion failure for word in %s line %d: %s"
msgstr "Malsukceso dum konverto de vorto en %s linio %d: %s"
-#: ../spell.c:4630 ../spell.c:6170
#, c-format
msgid "Conversion in %s not supported: from %s to %s"
msgstr "Konverto en %s nesubtenata: de %s al %s"
-#: ../spell.c:4642
#, c-format
msgid "Invalid value for FLAG in %s line %d: %s"
msgstr "Nevalida valoro de FLAG en %s linio %d: %s"
-#: ../spell.c:4655
#, c-format
msgid "FLAG after using flags in %s line %d: %s"
msgstr "FLAG post flagoj en %s linio %d: %s"
-#: ../spell.c:4723
#, c-format
msgid ""
"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
@@ -5358,7 +4257,6 @@ msgstr ""
"Difino de COMPOUNDFORBIDFLAG post ano PFX povas doni neÄustajn rezultojn en "
"%s linio %d"
-#: ../spell.c:4731
#, c-format
msgid ""
"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
@@ -5367,42 +4265,34 @@ msgstr ""
"Difino de COMPOUNDPERMITFLAG post ano PFX povas doni neÄustajn rezultojn en "
"%s linio %d"
-#: ../spell.c:4747
#, c-format
msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
msgstr "Nevalida valoro de COMPOUNDRULES en %s linio %d: %s"
-#: ../spell.c:4771
#, c-format
msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
msgstr "Nevalida valoro de COMPOUNDWORDMAX en %s linio %d: %s"
-#: ../spell.c:4777
#, c-format
msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
msgstr "Nevalida valoro de COMPOUNDMIN en %s linio %d: %s"
-#: ../spell.c:4783
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
msgstr "Nevalida valoro de COMPOUNDSYLMAX en %s linio %d: %s"
-#: ../spell.c:4795
#, c-format
msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
msgstr "Nevalida valoro de CHECKCOMPOUNDPATTERN en %s linio %d: %s"
-#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr "Malsama flago de kombino en daÅ­ra bloko de afikso en %s linio %d: %s"
-#: ../spell.c:4850
#, c-format
msgid "Duplicate affix in %s line %d: %s"
msgstr "Ripetita afikso en %s linio %d: %s"
-#: ../spell.c:4871
#, c-format
msgid ""
"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
@@ -5411,334 +4301,268 @@ msgstr ""
"Afikso ankaÅ­ uzata por BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST en "
"%s linio %d: %s"
-#: ../spell.c:4893
#, c-format
msgid "Expected Y or N in %s line %d: %s"
msgstr "Y aÅ­ N atendita en %s linio %d: %s"
-#: ../spell.c:4968
#, c-format
msgid "Broken condition in %s line %d: %s"
msgstr "Nevalida kondiĉo en %s linio %d: %s"
-#: ../spell.c:5091
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
msgstr "Neatendita nombro REP(SAL) en %s linio %d"
-#: ../spell.c:5120
#, c-format
msgid "Expected MAP count in %s line %d"
msgstr "Neatendita nombro de MAPen %s linio %d"
-#: ../spell.c:5132
#, c-format
msgid "Duplicate character in MAP in %s line %d"
msgstr "Ripetita signo en MAP en %s linio %d"
-#: ../spell.c:5176
#, c-format
msgid "Unrecognized or duplicate item in %s line %d: %s"
msgstr "Neagnoskita aÅ­ ripetita ano en %s linio %d: %s"
-#: ../spell.c:5197
#, c-format
msgid "Missing FOL/LOW/UPP line in %s"
msgstr "Mankas linio FOL/LOW/UPP en %s"
-#: ../spell.c:5220
msgid "COMPOUNDSYLMAX used without SYLLABLE"
msgstr "COMPOUNDSYLMAX uzita sen SYLLABLE"
-#: ../spell.c:5236
msgid "Too many postponed prefixes"
msgstr "Tro da prokrastitaj prefiksoj"
-#: ../spell.c:5238
msgid "Too many compound flags"
msgstr "Tro da kunmetitaj flagoj"
-#: ../spell.c:5240
msgid "Too many postponed prefixes and/or compound flags"
msgstr "Tro da prokrastitaj prefiksoj kaj/aÅ­ kunmetitaj flagoj"
-#: ../spell.c:5250
#, c-format
msgid "Missing SOFO%s line in %s"
msgstr "Mankas SOFO%s-aj linioj en %s"
-#: ../spell.c:5253
#, c-format
msgid "Both SAL and SOFO lines in %s"
msgstr "AmbaÅ­ SAL kaj SOFO linioj en %s"
-#: ../spell.c:5331
#, c-format
msgid "Flag is not a number in %s line %d: %s"
msgstr "Flago ne estas nombro en %s linio %d: %s"
-#: ../spell.c:5334
#, c-format
msgid "Illegal flag in %s line %d: %s"
msgstr "Nevalida flago en %s linio %d: %s"
-#: ../spell.c:5493 ../spell.c:5501
#, c-format
msgid "%s value differs from what is used in another .aff file"
msgstr "Valoro de %s malsamas ol tiu en alia dosiero .aff"
-#: ../spell.c:5602
#, c-format
msgid "Reading dictionary file %s ..."
msgstr "Legado de vortardosiero %s ..."
-#: ../spell.c:5611
#, c-format
msgid "E760: No word count in %s"
msgstr "E760: Ne estas nombro de vortoj en %s"
-#: ../spell.c:5669
#, c-format
msgid "line %6d, word %6d - %s"
msgstr "linio %6d, vorto %6d - %s"
-#: ../spell.c:5691
#, c-format
msgid "Duplicate word in %s line %d: %s"
msgstr "Ripetita vorto en %s linio %d: %s"
-#: ../spell.c:5694
#, c-format
msgid "First duplicate word in %s line %d: %s"
msgstr "Unua ripetita vorto en %s linio %d: %s"
-#: ../spell.c:5746
#, c-format
msgid "%d duplicate word(s) in %s"
msgstr "%d ripetita(j) vorto(j) en %s"
-#: ../spell.c:5748
#, c-format
msgid "Ignored %d word(s) with non-ASCII characters in %s"
msgstr "%d ignorita(j) vorto(j) kun neaskiaj signoj en %s"
-#: ../spell.c:6115
#, c-format
msgid "Reading word file %s ..."
msgstr "Legado de dosiero de vortoj %s ..."
-#: ../spell.c:6155
#, c-format
msgid "Duplicate /encoding= line ignored in %s line %d: %s"
msgstr "Ripetita linio /encoding= ignorita en %s linio %d: %s"
-#: ../spell.c:6159
#, c-format
msgid "/encoding= line after word ignored in %s line %d: %s"
msgstr "Linio /encoding= post vorto ignorita en %s linio %d: %s"
-#: ../spell.c:6180
#, c-format
msgid "Duplicate /regions= line ignored in %s line %d: %s"
msgstr "Ripetita linio /regions= ignorita en %s linio %d: %s"
-#: ../spell.c:6185
#, c-format
msgid "Too many regions in %s line %d: %s"
msgstr "Tro da regionoj en %s linio %d: %s"
-#: ../spell.c:6198
#, c-format
msgid "/ line ignored in %s line %d: %s"
msgstr "Linio / ignorita en %s linio %d: %s"
-#: ../spell.c:6224
#, c-format
msgid "Invalid region nr in %s line %d: %s"
msgstr "Nevalida regiono nr en %s linio %d: %s"
-#: ../spell.c:6230
#, c-format
msgid "Unrecognized flags in %s line %d: %s"
msgstr "Nekonata flago en %s linio %d: %s"
-#: ../spell.c:6257
#, c-format
msgid "Ignored %d words with non-ASCII characters"
msgstr "Ignoris %d vorto(j)n kun neaskiaj signoj"
-#: ../spell.c:6656
#, c-format
msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
msgstr "Densigis %d de %d nodoj; %d (%d%%) restantaj"
-#: ../spell.c:7340
msgid "Reading back spell file..."
msgstr "Relegas la dosieron de literumo..."
#. Go through the trie of good words, soundfold each word and add it to
#. the soundfold trie.
-#: ../spell.c:7357
msgid "Performing soundfolding..."
msgstr "Fonetika analizado..."
-#: ../spell.c:7368
#, c-format
msgid "Number of words after soundfolding: %<PRId64>"
msgstr "Nombro de vortoj post fonetika analizado: %<PRId64>"
-#: ../spell.c:7476
#, c-format
msgid "Total number of words: %d"
msgstr "Totala nombro de vortoj: %d"
-#: ../spell.c:7655
#, c-format
msgid "Writing suggestion file %s ..."
msgstr "Skribado de dosiero de sugesto %s ..."
-#: ../spell.c:7707 ../spell.c:7927
#, c-format
msgid "Estimated runtime memory use: %d bytes"
msgstr "Evaluo de memoro uzata: %d bajtoj"
-#: ../spell.c:7820
msgid "E751: Output file name must not have region name"
msgstr "E751: Nomo de eliga dosiero ne devas havi nomon de regiono"
-#: ../spell.c:7822
msgid "E754: Only up to 8 regions supported"
msgstr "E754: Nur 8 regionoj subtenataj"
-#: ../spell.c:7846
#, c-format
msgid "E755: Invalid region in %s"
msgstr "E755: Nevalida regiono en %s"
-#: ../spell.c:7907
msgid "Warning: both compounding and NOBREAK specified"
msgstr "Averto: ambaÅ­ NOBREAK kaj NOBREAK specifitaj"
-#: ../spell.c:7920
#, c-format
msgid "Writing spell file %s ..."
msgstr "Skribado de literuma dosiero %s ..."
-#: ../spell.c:7925
msgid "Done!"
msgstr "Farita!"
-#: ../spell.c:8034
#, c-format
msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' ne havas %<PRId64> rikordojn"
-#: ../spell.c:8074
#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Vorto fortirita el %s"
+#~ msgid "Word '%.*s' removed from %s"
+#~ msgstr "Vorto fortirita el %s"
-#: ../spell.c:8117
#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Vorto aldonita al %s"
+#~ msgid "Word '%.*s' added to %s"
+#~ msgstr "Vorto aldonita al %s"
-#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
msgstr "E763: Signoj de vorto malsamas tra literumaj dosieroj"
-#: ../spell.c:8684
msgid "Sorry, no suggestions"
msgstr "BedaÅ­rinde ne estas sugestoj"
-#: ../spell.c:8687
#, c-format
msgid "Sorry, only %<PRId64> suggestions"
msgstr "BedaÅ­rinde estas nur %<PRId64> sugestoj"
#. for when 'cmdheight' > 1
#. avoid more prompt
-#: ../spell.c:8704
#, c-format
msgid "Change \"%.*s\" to:"
msgstr "AnstataÅ­igi \"%.*s\" per:"
-#: ../spell.c:8737
#, c-format
msgid " < \"%.*s\""
msgstr " < \"%.*s\""
-#: ../spell.c:8882
msgid "E752: No previous spell replacement"
msgstr "E752: Neniu antaÅ­a literuma anstataÅ­igo"
-#: ../spell.c:8925
#, c-format
msgid "E753: Not found: %s"
msgstr "E753: Netrovita: %s"
-#: ../spell.c:9276
#, c-format
msgid "E778: This does not look like a .sug file: %s"
msgstr "E778: Tio ne Åajnas esti dosiero .sug: %s"
-#: ../spell.c:9282
#, c-format
msgid "E779: Old .sug file, needs to be updated: %s"
msgstr "E779: Malnova dosiero .sug, bezonas Äisdatigon: %s"
-#: ../spell.c:9286
#, c-format
msgid "E780: .sug file is for newer version of Vim: %s"
msgstr "E780: Dosiero .sug estas por pli nova versio de Vim: %s"
-#: ../spell.c:9295
#, c-format
msgid "E781: .sug file doesn't match .spl file: %s"
msgstr "E781: Dosiero .sug ne kongruas kun dosiero .spl: %s"
-#: ../spell.c:9305
#, c-format
msgid "E782: error while reading .sug file: %s"
msgstr "E782: eraro dum legado de dosiero .sug: %s"
#. This should have been checked when generating the .spl
#. file.
-#: ../spell.c:11575
msgid "E783: duplicate char in MAP entry"
msgstr "E783: ripetita signo en rikordo MAP"
-#: ../syntax.c:266
msgid "No Syntax items defined for this buffer"
msgstr "Neniu sintaksa elemento difinita por tiu bufro"
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
#, c-format
msgid "E390: Illegal argument: %s"
msgstr "E390: Nevalida argumento: %s"
-#: ../syntax.c:3299
+msgid "syntax iskeyword "
+msgstr "sintakso iskeyword "
+
#, c-format
msgid "E391: No such syntax cluster: %s"
msgstr "E391: Nenia sintaksa fasko: %s"
-#: ../syntax.c:3433
msgid "syncing on C-style comments"
msgstr "sinkronigo per C-stilaj komentoj"
-#: ../syntax.c:3439
msgid "no syncing"
msgstr "neniu sinkronigo"
-#: ../syntax.c:3441
msgid "syncing starts "
msgstr "sinkronigo ekas "
-#: ../syntax.c:3443 ../syntax.c:3506
msgid " lines before top line"
msgstr " linioj antaÅ­ supra linio"
-#: ../syntax.c:3448
msgid ""
"\n"
"--- Syntax sync items ---"
@@ -5746,7 +4570,6 @@ msgstr ""
"\n"
"--- Eroj de sintaksa sinkronigo ---"
-#: ../syntax.c:3452
msgid ""
"\n"
"syncing on items"
@@ -5754,7 +4577,6 @@ msgstr ""
"\n"
"sinkronigo per eroj"
-#: ../syntax.c:3457
msgid ""
"\n"
"--- Syntax items ---"
@@ -5762,272 +4584,217 @@ msgstr ""
"\n"
"--- Sintakseroj ---"
-#: ../syntax.c:3475
#, c-format
msgid "E392: No such syntax cluster: %s"
msgstr "E392: Nenia sintaksa fasko: %s"
-#: ../syntax.c:3497
msgid "minimal "
msgstr "minimuma "
-#: ../syntax.c:3503
msgid "maximal "
msgstr "maksimuma "
-#: ../syntax.c:3513
msgid "; match "
msgstr "; kongruo "
-#: ../syntax.c:3515
msgid " line breaks"
msgstr " liniavancoj"
-#: ../syntax.c:4076
msgid "E395: contains argument not accepted here"
msgstr "E395: La argumento \"contains\" ne akcepteblas tie"
-#: ../syntax.c:4096
msgid "E844: invalid cchar value"
msgstr "E844: nevalida valoro de cchar"
-#: ../syntax.c:4107
msgid "E393: group[t]here not accepted here"
msgstr "E393: La argumento \"group[t]here\" ne akcepteblas tie"
-#: ../syntax.c:4126
#, c-format
msgid "E394: Didn't find region item for %s"
msgstr "E394: Ne trovis regionan elementon por %s"
-#: ../syntax.c:4188
msgid "E397: Filename required"
msgstr "E397: Dosiernomo bezonata"
-#: ../syntax.c:4221
msgid "E847: Too many syntax includes"
msgstr "E847: Tro da sintaksaj inkluzivoj"
-#: ../syntax.c:4303
#, c-format
msgid "E789: Missing ']': %s"
msgstr "E789: Mankas ']': %s"
-#: ../syntax.c:4531
+#, c-format
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: vosta signo post ']': %s]%s"
+
#, c-format
msgid "E398: Missing '=': %s"
msgstr "E398: Mankas '=': %s"
-#: ../syntax.c:4666
#, c-format
msgid "E399: Not enough arguments: syntax region %s"
msgstr "E399: Ne sufiĉaj argumentoj: sintaksa regiono %s"
-#: ../syntax.c:4870
msgid "E848: Too many syntax clusters"
msgstr "E848: Tro da sintaksaj grupoj"
-#: ../syntax.c:4954
msgid "E400: No cluster specified"
msgstr "E400: Neniu fasko specifita"
#. end delimiter not found
-#: ../syntax.c:4986
#, c-format
msgid "E401: Pattern delimiter not found: %s"
msgstr "E401: Disigilo de Åablono netrovita: %s"
-#: ../syntax.c:5049
#, c-format
msgid "E402: Garbage after pattern: %s"
msgstr "E402: Forĵetindaĵo post Åablono: %s"
-#: ../syntax.c:5120
msgid "E403: syntax sync: line continuations pattern specified twice"
msgstr "E403: sintaksa sinkronigo: Åablono de linia daÅ­rigo specifita dufoje"
-#: ../syntax.c:5169
#, c-format
msgid "E404: Illegal arguments: %s"
msgstr "E404: Nevalidaj argumentoj: %s"
-#: ../syntax.c:5217
#, c-format
msgid "E405: Missing equal sign: %s"
msgstr "E405: Mankas egalsigno: %s"
-#: ../syntax.c:5222
#, c-format
msgid "E406: Empty argument: %s"
msgstr "E406: Malplena argumento: %s"
-#: ../syntax.c:5240
#, c-format
msgid "E407: %s not allowed here"
msgstr "E407: %s ne estas permesebla tie"
-#: ../syntax.c:5246
#, c-format
msgid "E408: %s must be first in contains list"
msgstr "E408: %s devas esti la unua ano de la listo \"contains\""
-#: ../syntax.c:5304
#, c-format
msgid "E409: Unknown group name: %s"
msgstr "E409: Nekonata nomo de grupo: %s"
-#: ../syntax.c:5512
#, c-format
msgid "E410: Invalid :syntax subcommand: %s"
msgstr "E410: Nevalida \":syntax\" subkomando: %s"
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
+#~ msgid ""
+#~ " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
+#~ msgstr ""
-#: ../syntax.c:6146
msgid "E679: recursive loop loading syncolor.vim"
msgstr "E679: rekursia buklo dum Åargo de syncolor.vim"
-#: ../syntax.c:6256
#, c-format
msgid "E411: highlight group not found: %s"
msgstr "E411: emfaza grupo netrovita: %s"
-#: ../syntax.c:6278
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
msgstr "E412: Ne sufiĉaj argumentoj: \":highlight link %s\""
-#: ../syntax.c:6284
#, c-format
msgid "E413: Too many arguments: \":highlight link %s\""
msgstr "E413: Tro argumentoj: \":highlight link %s\""
-#: ../syntax.c:6302
msgid "E414: group has settings, highlight link ignored"
msgstr "E414: grupo havas agordojn, ligilo de emfazo ignorita"
-#: ../syntax.c:6367
#, c-format
msgid "E415: unexpected equal sign: %s"
msgstr "E415: neatendita egalsigno: %s"
-#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
msgstr "E416: mankas egalsigno: %s"
-#: ../syntax.c:6418
#, c-format
msgid "E417: missing argument: %s"
msgstr "E417: mankas argumento: %s"
-#: ../syntax.c:6446
#, c-format
msgid "E418: Illegal value: %s"
msgstr "E418: Nevalida valoro: %s"
-#: ../syntax.c:6496
msgid "E419: FG color unknown"
msgstr "E419: Nekonata malfona koloro"
-#: ../syntax.c:6504
msgid "E420: BG color unknown"
msgstr "E420: Nekonata fona koloro"
-#: ../syntax.c:6564
#, c-format
msgid "E421: Color name or number not recognized: %s"
msgstr "E421: Kolora nomo aÅ­ nombro nerekonita: %s"
-#: ../syntax.c:6714
#, c-format
msgid "E422: terminal code too long: %s"
msgstr "E422: kodo de terminalo estas tro longa: %s"
-#: ../syntax.c:6753
#, c-format
msgid "E423: Illegal argument: %s"
msgstr "E423: Nevalida argumento: %s"
-#: ../syntax.c:6925
msgid "E424: Too many different highlighting attributes in use"
msgstr "E424: Tro da malsamaj atributoj de emfazo uzataj"
-#: ../syntax.c:7427
msgid "E669: Unprintable character in group name"
msgstr "E669: Nepresebla signo en nomo de grupo"
-#: ../syntax.c:7434
msgid "W18: Invalid character in group name"
msgstr "W18: Nevalida signo en nomo de grupo"
-#: ../syntax.c:7448
msgid "E849: Too many highlight and syntax groups"
msgstr "E849: Tro da emfazaj kaj sintaksaj grupoj"
-#: ../tag.c:104
msgid "E555: at bottom of tag stack"
msgstr "E555: ĉe subo de stako de etikedoj"
-#: ../tag.c:105
msgid "E556: at top of tag stack"
msgstr "E556: ĉe supro de stako de etikedoj"
-#: ../tag.c:380
msgid "E425: Cannot go before first matching tag"
msgstr "E425: Ne eblas iri antaÅ­ la unuan kongruan etikedon"
-#: ../tag.c:504
#, c-format
msgid "E426: tag not found: %s"
msgstr "E426: etikedo netrovita: %s"
# DP: "pri" estas "priority"
-#: ../tag.c:528
msgid " # pri kind tag"
msgstr "nro pri tipo etikedo"
-#: ../tag.c:531
msgid "file\n"
msgstr "dosiero\n"
-#: ../tag.c:829
msgid "E427: There is only one matching tag"
msgstr "E427: Estas nur unu kongrua etikedo"
-#: ../tag.c:831
msgid "E428: Cannot go beyond last matching tag"
msgstr "E428: Ne eblas iri preter lastan kongruan etikedon"
-#: ../tag.c:850
#, c-format
msgid "File \"%s\" does not exist"
msgstr "La dosiero \"%s\" ne ekzistas"
#. Give an indication of the number of matching tags
-#: ../tag.c:859
#, c-format
msgid "tag %d of %d%s"
msgstr "etikedo %d de %d%s"
-#: ../tag.c:862
msgid " or more"
msgstr " aÅ­ pli"
-#: ../tag.c:864
msgid " Using tag with different case!"
msgstr " Uzo de etikedo kun malsama uskleco!"
-#: ../tag.c:909
#, c-format
msgid "E429: File \"%s\" does not exist"
msgstr "E429: Dosiero \"%s\" ne ekzistas"
#. Highlight title
-#: ../tag.c:960
msgid ""
"\n"
" # TO tag FROM line in file/text"
@@ -6035,79 +4802,62 @@ msgstr ""
"\n"
"nro AL etikedo DE linio en dosiero/teksto"
-#: ../tag.c:1303
#, c-format
msgid "Searching tags file %s"
msgstr "Serĉado de dosiero de etikedoj %s"
-#: ../tag.c:1545
msgid "Ignoring long line in tags file"
msgstr "Ignoro de longa linio en etikeda dosiero"
-#: ../tag.c:1915
#, c-format
msgid "E431: Format error in tags file \"%s\""
msgstr "E431: Eraro de formato en etikeda dosiero \"%s\""
-#: ../tag.c:1917
#, c-format
msgid "Before byte %<PRId64>"
msgstr "AntaÅ­ bajto %<PRId64>"
-#: ../tag.c:1929
#, c-format
msgid "E432: Tags file not sorted: %s"
msgstr "E432: Etikeda dosiero ne estas ordigita: %s"
#. never opened any tags file
-#: ../tag.c:1960
msgid "E433: No tags file"
msgstr "E433: Neniu etikeda dosiero"
-#: ../tag.c:2536
msgid "E434: Can't find tag pattern"
msgstr "E434: Ne eblas trovi Åablonon de etikedo"
-#: ../tag.c:2544
msgid "E435: Couldn't find tag, just guessing!"
msgstr "E435: Ne eblis trovi etikedon, nur divenas!"
-#: ../tag.c:2797
#, c-format
msgid "Duplicate field name: %s"
msgstr "Ripetita kamponomo: %s"
-#: ../term.c:1442
msgid "' not known. Available builtin terminals are:"
msgstr "' nekonata. Haveblaj terminaloj estas:"
-#: ../term.c:1463
msgid "defaulting to '"
msgstr "defaÅ­lto al '"
-#: ../term.c:1731
msgid "E557: Cannot open termcap file"
msgstr "E557: Ne eblas malfermi la dosieron termcap"
-#: ../term.c:1735
msgid "E558: Terminal entry not found in terminfo"
msgstr "E558: Ne trovis rikordon de terminalo terminfo"
-#: ../term.c:1737
msgid "E559: Terminal entry not found in termcap"
msgstr "E559: Ne trovis rikordon de terminalo en termcap"
-#: ../term.c:1878
#, c-format
msgid "E436: No \"%s\" entry in termcap"
msgstr "E436: Neniu rikordo \"%s\" en termcap"
-#: ../term.c:2249
msgid "E437: terminal capability \"cm\" required"
msgstr "E437: kapablo de terminalo \"cm\" bezonata"
#. Highlight title
-#: ../term.c:4376
msgid ""
"\n"
"--- Terminal keys ---"
@@ -6115,169 +4865,132 @@ msgstr ""
"\n"
"--- Klavoj de terminalo ---"
-#: ../ui.c:481
msgid "Vim: Error reading input, exiting...\n"
msgstr "Vim: Eraro dum legado de eniro, elironta...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
-#: ../undo.c:379
#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Nombro de linioj ÅanÄiÄis neatendite"
+#~ msgid "E881: Line count changed unexpectedly"
+#~ msgstr "E834: Nombro de linioj ÅanÄiÄis neatendite"
-#: ../undo.c:627
#, c-format
msgid "E828: Cannot open undo file for writing: %s"
msgstr "E828: Ne eblas malfermi la malfaran dosieron por skribi: %s"
-#: ../undo.c:717
#, c-format
msgid "E825: Corrupted undo file (%s): %s"
msgstr "E825: Difektita malfara dosiero (%s): %s"
-#: ../undo.c:1039
msgid "Cannot write undo file in any directory in 'undodir'"
msgstr "Ne eblis skribi malfaran dosieron en iu dosiero ajn de 'undodir'"
-#: ../undo.c:1074
#, c-format
msgid "Will not overwrite with undo file, cannot read: %s"
msgstr "Ne superskribos malfaran dosieron, ne eblis legi: %s"
-#: ../undo.c:1092
#, c-format
msgid "Will not overwrite, this is not an undo file: %s"
msgstr "Ne superskribos, tio ne estas malfara dosiero: %s"
-#: ../undo.c:1108
msgid "Skipping undo file write, nothing to undo"
msgstr "Preterpasas skribon de malfara dosiero, nenio por malfari"
-#: ../undo.c:1121
#, c-format
msgid "Writing undo file: %s"
msgstr "Skribas malfaran dosieron: %s"
-#: ../undo.c:1213
#, c-format
msgid "E829: write error in undo file: %s"
msgstr "E829: Skriberaro en malfara dosiero: %s"
-#: ../undo.c:1280
#, c-format
msgid "Not reading undo file, owner differs: %s"
msgstr "Ne legas malfaran dosieron, posedanto malsamas: %s"
-#: ../undo.c:1292
#, c-format
msgid "Reading undo file: %s"
msgstr "Legado de malfara dosiero: %s"
-#: ../undo.c:1299
#, c-format
msgid "E822: Cannot open undo file for reading: %s"
msgstr "E822: Ne eblas malfermi malfaran dosieron por legi: %s"
-#: ../undo.c:1308
#, c-format
msgid "E823: Not an undo file: %s"
msgstr "E823: Ne estas malfara dosiero: %s"
-#: ../undo.c:1313
#, c-format
msgid "E824: Incompatible undo file: %s"
msgstr "E824: Malkongrua malfara dosiero: %s"
-#: ../undo.c:1328
msgid "File contents changed, cannot use undo info"
msgstr "Enhavo de dosiero ÅanÄiÄis, ne eblas uzi malfarajn informojn"
-#: ../undo.c:1497
#, c-format
msgid "Finished reading undo file %s"
msgstr "Finis legi malfaran dosieron %s"
-#: ../undo.c:1586 ../undo.c:1812
msgid "Already at oldest change"
msgstr "Jam al la plej malnova ÅanÄo"
-#: ../undo.c:1597 ../undo.c:1814
msgid "Already at newest change"
msgstr "Jam al la plej nova ÅanÄo"
-#: ../undo.c:1806
#, c-format
msgid "E830: Undo number %<PRId64> not found"
msgstr "E830: Malfara numero %<PRId64> netrovita"
-#: ../undo.c:1979
msgid "E438: u_undo: line numbers wrong"
msgstr "E438: u_undo: nevalidaj numeroj de linioj"
-#: ../undo.c:2183
msgid "more line"
msgstr "plia linio"
-#: ../undo.c:2185
msgid "more lines"
msgstr "pliaj linioj"
-#: ../undo.c:2187
msgid "line less"
msgstr "malpli linio"
-#: ../undo.c:2189
msgid "fewer lines"
msgstr "malpli linioj"
-#: ../undo.c:2193
msgid "change"
msgstr "ÅanÄo"
-#: ../undo.c:2195
msgid "changes"
msgstr "ÅanÄoj"
-#: ../undo.c:2225
#, c-format
msgid "%<PRId64> %s; %s #%<PRId64> %s"
msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-#: ../undo.c:2228
msgid "before"
msgstr "antaÅ­"
-#: ../undo.c:2228
msgid "after"
msgstr "post"
-#: ../undo.c:2325
msgid "Nothing to undo"
msgstr "Nenio por malfari"
-#: ../undo.c:2330
msgid "number changes when saved"
msgstr "numero ÅanÄoj tempo konservita"
-#: ../undo.c:2360
#, c-format
msgid "%<PRId64> seconds ago"
msgstr "antaÅ­ %<PRId64> sekundoj"
-#: ../undo.c:2372
msgid "E790: undojoin is not allowed after undo"
msgstr "E790: undojoin estas nepermesebla post malfaro"
-#: ../undo.c:2466
msgid "E439: undo list corrupt"
msgstr "E439: listo de malfaro estas difekta"
-#: ../undo.c:2495
msgid "E440: undo line missing"
msgstr "E440: linio de malfaro mankas"
-#: ../version.c:600
msgid ""
"\n"
"Included patches: "
@@ -6285,7 +4998,6 @@ msgstr ""
"\n"
"Flikaĵoj inkluzivitaj: "
-#: ../version.c:627
msgid ""
"\n"
"Extra patches: "
@@ -6293,11 +5005,9 @@ msgstr ""
"\n"
"Ekstraj flikaĵoj: "
-#: ../version.c:639 ../version.c:864
msgid "Modified by "
msgstr "Modifita de "
-#: ../version.c:646
msgid ""
"\n"
"Compiled "
@@ -6305,11 +5015,9 @@ msgstr ""
"\n"
"Kompilita "
-#: ../version.c:649
msgid "by "
msgstr "de "
-#: ../version.c:660
msgid ""
"\n"
"Huge version "
@@ -6317,169 +5025,130 @@ msgstr ""
"\n"
"Grandega versio "
-#: ../version.c:661
msgid "without GUI."
msgstr "sen grafika interfaco."
-#: ../version.c:662
msgid " Features included (+) or not (-):\n"
msgstr " Ebloj inkluzivitaj (+) aÅ­ ne (-):\n"
-#: ../version.c:667
msgid " system vimrc file: \""
msgstr " sistema dosiero vimrc: \""
-#: ../version.c:672
msgid " user vimrc file: \""
msgstr " dosiero vimrc de uzanto: \""
-#: ../version.c:677
msgid " 2nd user vimrc file: \""
msgstr " 2-a dosiero vimrc de uzanto: \""
-#: ../version.c:682
msgid " 3rd user vimrc file: \""
msgstr " 3-a dosiero vimrc de uzanto: \""
-#: ../version.c:687
msgid " user exrc file: \""
msgstr " dosiero exrc de uzanto: \""
-#: ../version.c:692
msgid " 2nd user exrc file: \""
msgstr " 2-a dosiero exrc de uzanto: \""
-#: ../version.c:699
msgid " fall-back for $VIM: \""
msgstr " defaÅ­lto de $VIM: \""
-#: ../version.c:705
msgid " f-b for $VIMRUNTIME: \""
msgstr " defaÅ­lto de VIMRUNTIME: \""
-#: ../version.c:709
msgid "Compilation: "
msgstr "Kompilado: "
-#: ../version.c:712
msgid "Linking: "
msgstr "Ligado: "
-#: ../version.c:717
msgid " DEBUG BUILD"
msgstr " SENCIMIGA MUNTO"
-#: ../version.c:767
msgid "VIM - Vi IMproved"
msgstr "VIM - Vi plibonigita"
-#: ../version.c:769
msgid "version "
msgstr "versio "
# DP: vidu http://www.thefreedictionary.com/et+al.
-#: ../version.c:770
msgid "by Bram Moolenaar et al."
msgstr "de Bram Moolenaar kaj aliuloj"
-#: ../version.c:774
msgid "Vim is open source and freely distributable"
msgstr "Vim estas libera programo kaj disdoneblas libere"
-#: ../version.c:776
msgid "Help poor children in Uganda!"
msgstr "Helpu malriĉajn infanojn en Ugando!"
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:777
msgid "type :help iccf<Enter> for information "
msgstr "tajpu :help iccf<Enenklavo> por pliaj informoj "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:779
msgid "type :q<Enter> to exit "
msgstr "tajpu :q<Enenklavo> por eliri "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:780
msgid "type :help<Enter> or <F1> for on-line help"
msgstr "tajpu :help<Enenklavo> aÅ­ <F1> por aliri la helpon "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:781
msgid "type :help version7<Enter> for version info"
msgstr "tajpu :help version7<Enenklavo> por informo de versio"
-#: ../version.c:784
msgid "Running in Vi compatible mode"
msgstr "RuliÄas en reÄimo kongrua kun Vi"
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:785
msgid "type :set nocp<Enter> for Vim defaults"
msgstr "tajpu :set nocp<Enenklavo> por Vim defaÅ­ltoj "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:786
msgid "type :help cp-default<Enter> for info on this"
msgstr "tajpu :help cp-default<Enenklavo> por pliaj informoj "
-#: ../version.c:827
msgid "Sponsor Vim development!"
msgstr "Subtenu la programadon de Vim!"
-#: ../version.c:828
msgid "Become a registered Vim user!"
msgstr "IÄu registrita uzanto de Vim!"
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
msgstr "tajpu :help sponsor<Enenklavo> por pliaj informoj "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:832
msgid "type :help register<Enter> for information "
msgstr "tajpu :help register<Enenklavo> por pliaj informoj "
# DP: atentu al la spacetoj: ĉiuj ĉenoj devas havi la saman longon
-#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
msgstr "menuo Helpo->Subteni/Registri por pliaj informoj "
-#: ../window.c:119
msgid "Already only one window"
msgstr "Jam nur unu fenestro"
-#: ../window.c:224
msgid "E441: There is no preview window"
msgstr "E441: Ne estas antaÅ­vida fenestro"
-#: ../window.c:559
msgid "E442: Can't split topleft and botright at the same time"
msgstr "E442: Ne eblas dividi supralivan kaj subdekstran samtempe"
-#: ../window.c:1228
msgid "E443: Cannot rotate when another window is split"
msgstr "E443: Ne eblas rotacii kiam alia fenestro estas dividita"
-#: ../window.c:1803
msgid "E444: Cannot close last window"
msgstr "E444: Ne eblas fermi la lastan fenestron"
-#: ../window.c:1810
msgid "E813: Cannot close autocmd window"
msgstr "E813: Ne eblas fermi la fenestron de aÅ­tokomandoj"
-#: ../window.c:1814
msgid "E814: Cannot close window, only autocmd window would remain"
msgstr "E814: Ne eblas fermi fenestron, nur la fenestro de aÅ­tokomandoj restus"
-#: ../window.c:2717
msgid "E445: Other window contains changes"
msgstr "E445: La alia fenestro enhavas ÅanÄojn"
-#: ../window.c:4805
msgid "E446: No file name under cursor"
msgstr "E446: Neniu dosiernomo sub la kursoro"
@@ -6650,6 +5319,12 @@ msgstr "E446: Neniu dosiernomo sub la kursoro"
#~ msgid "E232: Cannot create BalloonEval with both message and callback"
#~ msgstr "E232: Ne eblas krei BalloonEval kun ambaÅ­ mesaÄo kaj reagfunkcio"
+msgid "Yes"
+msgstr "Jes"
+
+msgid "No"
+msgstr "Ne"
+
# todo '_' is for hotkey, i guess?
#~ msgid "Input _Methods"
#~ msgstr "Enigaj _metodoj"
diff --git a/src/nvim/po/es.po b/src/nvim/po/es.po
index 8a9c86e88d..ed96e4de94 100644
--- a/src/nvim/po/es.po
+++ b/src/nvim/po/es.po
@@ -2748,11 +2748,6 @@ msgstr "E49: La longitud de desplazamiento no es válida"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4377,12 +4372,6 @@ msgstr "línea %4ld"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nombre de registro no válido: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Traducción: Proyecto vim-doc-es <http://www.assembla.com/wiki/show/vim-doc-"
-"es>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interrupción: "
diff --git a/src/nvim/po/fi.po b/src/nvim/po/fi.po
index d4082135aa..d30faeb554 100644
--- a/src/nvim/po/fi.po
+++ b/src/nvim/po/fi.po
@@ -2691,11 +2691,6 @@ msgstr "E49: Virheellinen vierityskoko"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4275,10 +4270,6 @@ msgstr "rivi %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Virheellinen rekisterin nimi: %s"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Käännöksen ylläpitäjä: Flammie Pirinen <flammie@iki.fi>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Keskeytys: "
diff --git a/src/nvim/po/fr.po b/src/nvim/po/fr.po
index 41efd5c5e3..61920697d0 100644
--- a/src/nvim/po/fr.po
+++ b/src/nvim/po/fr.po
@@ -15,8 +15,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim(Français)\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-07-30 17:54+0200\n"
-"PO-Revision-Date: 2015-07-30 18:00+0200\n"
+"POT-Creation-Date: 2016-07-02 16:21+0200\n"
+"PO-Revision-Date: 2016-07-02 17:06+0200\n"
"Last-Translator: Dominique Pellé <dominique.pelle@gmail.com>\n"
"Language-Team: \n"
"Language: fr\n"
@@ -24,106 +24,84 @@ msgstr ""
"Content-Type: text/plain; charset=ISO_8859-15\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../api/private/helpers.c:201
#, fuzzy
-msgid "Unable to get option value"
-msgstr "impossible d'obtenir la valeur d'une option"
+#~ msgid "Unable to get option value"
+#~ msgstr "impossible d'obtenir la valeur d'une option"
-#: ../api/private/helpers.c:204
#, fuzzy
-msgid "internal error: unknown option type"
-msgstr "erreur interne : pas d'élément de liste vim"
+#~ msgid "internal error: unknown option type"
+#~ msgstr "erreur interne : pas d'élément de liste vim"
# DB - TODO : Trouver une traduction valable et attestée pour "location".
-#: ../buffer.c:92
msgid "[Location List]"
msgstr "[Liste des emplacements]"
-#: ../buffer.c:93
msgid "[Quickfix List]"
msgstr "[Liste Quickfix]"
-#: ../buffer.c:94
msgid "E855: Autocommands caused command to abort"
msgstr "E855: Des autocommandes ont causé la terminaison de la commande"
# AB - Il faut respecter l'esprit plus que la lettre.
-#: ../buffer.c:135
msgid "E82: Cannot allocate any buffer, exiting..."
msgstr "E82: Aucun tampon ne peut être alloué, Vim doit s'arrêter"
# AB - La situation est probablement plus grave que la version anglaise ne le
# laisse entendre (voir l'aide en ligne). La version française est plus
# explicite.
-#: ../buffer.c:138
msgid "E83: Cannot allocate buffer, using other one..."
msgstr ""
"E83: L'allocation du tampon a échoué : arrêtez Vim, libérez de la mémoire"
-#: ../buffer.c:763
msgid "E515: No buffers were unloaded"
msgstr "E515: Aucun tampon n'a été déchargé"
-#: ../buffer.c:765
msgid "E516: No buffers were deleted"
msgstr "E516: Aucun tampon n'a été effacé"
-#: ../buffer.c:767
msgid "E517: No buffers were wiped out"
msgstr "E517: Aucun tampon n'a été détruit"
-#: ../buffer.c:772
msgid "1 buffer unloaded"
msgstr "1 tampon a été déchargé"
-#: ../buffer.c:774
#, c-format
msgid "%d buffers unloaded"
msgstr "%d tampons ont été déchargés"
-#: ../buffer.c:777
msgid "1 buffer deleted"
msgstr "1 tampon a été effacé"
-#: ../buffer.c:779
#, c-format
msgid "%d buffers deleted"
msgstr "%d tampons ont été effacés"
-#: ../buffer.c:782
msgid "1 buffer wiped out"
msgstr "1 tampon a été détruit"
-#: ../buffer.c:784
#, c-format
msgid "%d buffers wiped out"
msgstr "%d tampons ont été détruits"
-#: ../buffer.c:806
msgid "E90: Cannot unload last buffer"
msgstr "E90: Impossible de décharger le dernier tampon"
# AB - La version française est meilleure que la version anglaise.
-#: ../buffer.c:874
msgid "E84: No modified buffer found"
msgstr "E84: Aucun tampon n'est modifié"
#. back where we started, didn't find anything.
-#: ../buffer.c:903
msgid "E85: There is no listed buffer"
msgstr "E85: Aucun tampon n'est listé"
# AB - Je ne suis pas sûr que l'on puisse obtenir ce message.
-#: ../buffer.c:915
msgid "E87: Cannot go beyond last buffer"
msgstr "E87: Impossible d'aller après le dernier tampon"
# AB - Je ne suis pas sûr que l'on puisse obtenir ce message.
-#: ../buffer.c:917
msgid "E88: Cannot go before first buffer"
msgstr "E88: Impossible d'aller avant le premier tampon"
-#: ../buffer.c:945
#, c-format
msgid ""
"E89: No write since last change for buffer %<PRId64> (add ! to override)"
@@ -131,77 +109,62 @@ msgstr ""
"E89: Le tampon %<PRId64> n'a pas été enregistré (ajoutez ! pour passer outre)"
#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
msgid "W14: Warning: List of file names overflow"
msgstr "W14: Alerte : La liste des noms de fichier déborde"
# AB - Vu le code source, la version française est meilleure que la
# version anglaise. Ce message est similaire au message E86.
-#: ../buffer.c:1555 ../quickfix.c:3361
#, c-format
msgid "E92: Buffer %<PRId64> not found"
msgstr "E92: Le tampon %<PRId64> n'existe pas"
# AB - Il faut respecter l'esprit plus que la lettre.
-#: ../buffer.c:1798
#, c-format
msgid "E93: More than one match for %s"
msgstr "E93: Plusieurs tampons correspondent à %s"
-#: ../buffer.c:1800
#, c-format
msgid "E94: No matching buffer for %s"
msgstr "E94: Aucun tampon ne correspond à %s"
-#: ../buffer.c:2161
#, c-format
msgid "line %<PRId64>"
msgstr "ligne %<PRId64>"
-#: ../buffer.c:2233
msgid "E95: Buffer with this name already exists"
msgstr "E95: Un tampon porte déjà ce nom"
-#: ../buffer.c:2498
msgid " [Modified]"
msgstr "[Modifié]"
# AB - "[Inédité]" est plus correct, mais sonne faux.
-#: ../buffer.c:2501
msgid "[Not edited]"
msgstr "[Non édité]"
-#: ../buffer.c:2504
msgid "[New file]"
msgstr "[Nouveau fichier]"
-#: ../buffer.c:2505
msgid "[Read errors]"
msgstr "[Erreurs de lecture]"
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
msgid "[RO]"
msgstr "[RO]"
# AB - La version courte, "[RO]", devrait-elle être traduite par "[LS]" ?
# Il faudrait faire un sondage auprès des utilisateurs francophones.
-#: ../buffer.c:2507 ../fileio.c:1807
msgid "[readonly]"
msgstr "[lecture-seule]"
-#: ../buffer.c:2524
#, c-format
msgid "1 line --%d%%--"
msgstr "1 ligne --%d%%--"
-#: ../buffer.c:2526
#, c-format
msgid "%<PRId64> lines --%d%%--"
msgstr "%<PRId64> lignes --%d%%--"
# AB - Faut-il remplacer "sur" par "de" ?
# DB - Mon avis : oui.
-#: ../buffer.c:2530
#, c-format
msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
msgstr "ligne %<PRId64> sur %<PRId64> --%d%%-- col "
@@ -209,16 +172,13 @@ msgstr "ligne %<PRId64> sur %<PRId64> --%d%%-- col "
# DB - Je trouvais [Aucun fichier] (VO : [No file]) plus naturel
# lors du lancement de Vim en mode graphique (ce message
# apparaît notamment dans le titre de la fenêtre).
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
msgid "[No Name]"
msgstr "[Aucun nom]"
#. must be a help buffer
-#: ../buffer.c:2667
msgid "help"
msgstr "aide"
-#: ../buffer.c:3225 ../screen.c:4883
msgid "[Help]"
msgstr "[Aide]"
@@ -226,24 +186,19 @@ msgstr "[Aide]"
# traduction littérale et brève, mais qui risque fort d'être mal comprise.
# J'ai finalement choisi d'utiliser une abréviation, mais cela ne me
# satisfait pas.
-#: ../buffer.c:3254 ../screen.c:4887
msgid "[Preview]"
msgstr "[Prévisu]"
-#: ../buffer.c:3528
msgid "All"
msgstr "Tout"
-#: ../buffer.c:3528
msgid "Bot"
msgstr "Bas"
# AB - Attention, on passe de trois à quatre lettres.
-#: ../buffer.c:3531
msgid "Top"
msgstr "Haut"
-#: ../buffer.c:4244
msgid ""
"\n"
"# Buffer list:\n"
@@ -251,11 +206,9 @@ msgstr ""
"\n"
"# Liste des tampons :\n"
-#: ../buffer.c:4289
msgid "[Scratch]"
msgstr "[Brouillon]"
-#: ../buffer.c:4529
msgid ""
"\n"
"--- Signs ---"
@@ -263,29 +216,23 @@ msgstr ""
"\n"
"--- Symboles ---"
-#: ../buffer.c:4538
#, c-format
msgid "Signs for %s:"
msgstr "Symboles dans %s :"
-#: ../buffer.c:4543
#, c-format
msgid " line=%<PRId64> id=%d name=%s"
msgstr " ligne=%<PRId64> id=%d nom=%s"
-#: ../cursor_shape.c:68
msgid "E545: Missing colon"
msgstr "E545: ':' manquant"
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
msgid "E546: Illegal mode"
msgstr "E546: Mode non autorisé"
-#: ../cursor_shape.c:134
msgid "E548: digit expected"
msgstr "E548: chiffre attendu"
-#: ../cursor_shape.c:138
msgid "E549: Illegal percentage"
msgstr "E549: Pourcentage non autorisé"
@@ -293,145 +240,115 @@ msgstr "E549: Pourcentage non autorisé"
# Vim fait en pratique appel au programme "diff" pour evaluer les
# différences entre fichiers, "to diff" a été traduit par "utiliser diff"
# et d'autres expressions appropriées.
-#: ../diff.c:146
#, c-format
msgid "E96: Can not diff more than %<PRId64> buffers"
msgstr "E96: Impossible d'utiliser diff sur plus de %<PRId64> tampons"
-#: ../diff.c:753
msgid "E810: Cannot read or write temp files"
msgstr "E810: Impossible de lire ou écrire des fichiers temporaires"
# AB - La version française est meilleure que la version anglaise.
-#: ../diff.c:755
msgid "E97: Cannot create diffs"
msgstr "E97: diff ne fonctionne pas"
-#: ../diff.c:966
msgid "E816: Cannot read patch output"
msgstr "E816: Le fichier intermédiaire produit par patch n'a pu être lu"
-#: ../diff.c:1220
msgid "E98: Cannot read diff output"
msgstr "E98: Le fichier intermédiaire produit par diff n'a pu être lu"
-#: ../diff.c:2081
msgid "E99: Current buffer is not in diff mode"
msgstr "E99: Le tampon courant n'est pas en mode diff"
-#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
msgstr "E793: Aucun autre tampon en mode diff n'est modifiable"
-#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
msgstr "E100: Aucun autre tampon n'est en mode diff"
# AB - La version française est meilleure que la version anglaise, mais elle
# peut être améliorée.
-#: ../diff.c:2112
msgid "E101: More than two buffers in diff mode, don't know which one to use"
msgstr "E101: Plus de deux tampons sont en mode diff, soyez plus précis"
-#: ../diff.c:2141
#, c-format
msgid "E102: Can't find buffer \"%s\""
msgstr "E102: Le tampon %s est introuvable"
-#: ../diff.c:2152
#, c-format
msgid "E103: Buffer \"%s\" is not in diff mode"
msgstr "E103: Le tampon %s n'est pas en mode diff"
-#: ../diff.c:2193
msgid "E787: Buffer changed unexpectedly"
msgstr "E787: Le tampon a été modifié inopinément"
# AB - Je cherche une traduction plus concise pour "escape".
-#: ../digraph.c:1598
msgid "E104: Escape not allowed in digraph"
msgstr "E104: Un digraphe ne peut contenir le caractère d'échappement"
# AB - La version française est trop verbeuse.
-#: ../digraph.c:1760
msgid "E544: Keymap file not found"
msgstr "E544: Le fichier descripteur de clavier est introuvable"
# AB - La version française est meilleure que la version anglaise.
-#: ../digraph.c:1785
msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :loadkeymap ne peut être utilisé que dans un script Vim"
-#: ../digraph.c:1821
msgid "E791: Empty keymap entry"
msgstr "E791: Entrée du descripteur de clavier (keymap) vide"
# AB - Remplacer "complétion" par "complètement" ? Voir l'éthymologie
# d'"accrétion".
-#: ../edit.c:82
msgid " Keyword completion (^N^P)"
msgstr " Complètement de mot-clé (^N^P)"
# DB - todo : Faut-il une majuscule à "mode" ?
#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
msgstr " mode ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-#: ../edit.c:85
msgid " Whole line completion (^L^N^P)"
msgstr " Complètement de ligne entière (^L^N^P)"
-#: ../edit.c:86
msgid " File name completion (^F^N^P)"
msgstr " Complètement de nom de fichier (^F^N^P)"
-#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
msgstr " Complètement de marqueur (^]^N^P)"
# AB - J'ai dû avoir une bonne raison de faire une version française aussi
# différente de la version anglaise. Il me faut la retrouver.
# DB - TODO
-#: ../edit.c:88
msgid " Path pattern completion (^N^P)"
msgstr " Complètement global de mot-clé (^N^P)"
-#: ../edit.c:89
msgid " Definition completion (^D^N^P)"
msgstr " Complètement de définition (^D^N^P)"
# AB - Trouver une meilleure formulation que "selon le".
# DB : proposition : "avec"
-#: ../edit.c:91
msgid " Dictionary completion (^K^N^P)"
msgstr " Complètement avec le dictionnaire (^K^N^P)"
# AB - Trouver une meilleure formulation que "selon le".
-#: ../edit.c:92
msgid " Thesaurus completion (^T^N^P)"
msgstr " Complètement avec le thésaurus (^T^N^P)"
# AB - La version française est meilleure que la version anglaise.
# DB : Suggestion.
-#: ../edit.c:93
msgid " Command-line completion (^V^N^P)"
msgstr " Complètement de ligne de commande (^V^N^P)"
-#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
msgstr " Complètement défini par l'utilisateur (^U^N^P)"
# DB : On doit pouvoir trouver nettement mieux que ça.
-#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
msgstr " Complètement selon le type de fichier (Omni) (^O^N^P)"
-#: ../edit.c:96
msgid " Spelling suggestion (s^N^P)"
msgstr " Suggestion d'orthographe (s^N^P)"
-#: ../edit.c:97
msgid " Keyword Local completion (^N^P)"
msgstr " Complètement local de mot-clé (^N/^P)"
@@ -439,45 +356,35 @@ msgstr " Complètement local de mot-clé (^N/^P)"
# Il faut éviter de le faire trop long. Je pense que la version française
# est suffisamment compréhensible dans le contexte dans lequel elle est
# affichée.
-#: ../edit.c:100
msgid "Hit end of paragraph"
msgstr "Fin du paragraphe"
-#: ../edit.c:101
msgid "E839: Completion function changed window"
msgstr "E839: La fonction de complètement a changé la fenêtre"
-#: ../edit.c:102
msgid "E840: Completion function deleted text"
msgstr "E840: La fonction de complètement a effacé du texte"
-#: ../edit.c:1847
msgid "'dictionary' option is empty"
msgstr "L'option 'dictionary' est vide"
-#: ../edit.c:1848
msgid "'thesaurus' option is empty"
msgstr "L'option 'thesaurus' est vide"
-#: ../edit.c:2655
#, c-format
msgid "Scanning dictionary: %s"
msgstr "Examen du dictionnaire : %s"
-#: ../edit.c:3079
msgid " (insert) Scroll (^E/^Y)"
msgstr " (insertion) Défilement (^E/^Y)"
-#: ../edit.c:3081
msgid " (replace) Scroll (^E/^Y)"
msgstr " (remplacement) Défilement (^E/^Y)"
-#: ../edit.c:3587
#, c-format
msgid "Scanning: %s"
msgstr "Examen : %s"
-#: ../edit.c:3614
msgid "Scanning tags."
msgstr "Examen des marqueurs."
@@ -485,7 +392,6 @@ msgstr "Examen des marqueurs."
# opération de complétion est répétée (typiquement avec CTRL-X CTRL-N).
# Que ce soit en anglais ou en français, il y a un problème de majuscules.
# Bien qu'insatisfaisante, cette traduction semble optimale.
-#: ../edit.c:4519
msgid " Adding"
msgstr " Ajout"
@@ -493,236 +399,189 @@ msgstr " Ajout"
#. * be called before line = ml_get(), or when this address is no
#. * longer needed. -- Acevedo.
#.
-#: ../edit.c:4562
msgid "-- Searching..."
msgstr "-- Recherche en cours..."
# AB - Ce texte s'ajoute à la fin d'un des messages de complétion ci-dessus.
# AB - Faut-il utiliser "origine" ou "originel" au lieu d'"original" ?
# DB : Suggestion.
-#: ../edit.c:4618
msgid "Back at original"
msgstr "Retour au point de départ"
# AB - Ce texte s'ajoute à la fin d'un des messages de complétion ci-dessus.
-#: ../edit.c:4621
msgid "Word from other line"
msgstr "Mot d'une autre ligne"
# AB - Ce texte s'ajoute à la fin d'un des messages de complétion ci-dessus.
-#: ../edit.c:4624
msgid "The only match"
msgstr "La seule correspondance"
# AB - Ce texte s'ajoute à la fin d'un des messages de complétion ci-dessus.
# AB - Faut-il remplacer "sur" par "de" ?
# DB : Pour moi, non.
-#: ../edit.c:4680
#, c-format
msgid "match %d of %d"
msgstr "Correspondance %d sur %d"
# AB - Ce texte s'ajoute à la fin d'un des messages de complétion ci-dessus.
# DB - todo : la VO n'a pas de majuscule.
-#: ../edit.c:4684
#, c-format
msgid "match %d"
msgstr "Correspondance %d"
-#: ../eval.c:137
msgid "E18: Unexpected characters in :let"
msgstr "E18: Caractères inattendus avant '='"
-#: ../eval.c:138
#, c-format
msgid "E684: list index out of range: %<PRId64>"
msgstr "E684: index de Liste hors limites : %<PRId64> au-delà de la fin"
-#: ../eval.c:139
#, c-format
msgid "E121: Undefined variable: %s"
msgstr "E121: Variable non définie : %s"
-#: ../eval.c:140
msgid "E111: Missing ']'"
msgstr "E111: ']' manquant"
-#: ../eval.c:141
#, c-format
msgid "E686: Argument of %s must be a List"
msgstr "E686: L'argument de %s doit être une Liste"
-#: ../eval.c:143
#, c-format
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: L'argument de %s doit être une Liste ou un Dictionnaire"
-#: ../eval.c:144
msgid "E713: Cannot use empty key for Dictionary"
msgstr "E713: Impossible d'utiliser une clé vide dans un Dictionnaire"
-#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: Liste requise"
-#: ../eval.c:146
msgid "E715: Dictionary required"
msgstr "E715: Dictionnaire requis"
+msgid "E928: String required"
+msgstr "E928: Chaine requis"
+
# DB : Suggestion
-#: ../eval.c:147
#, c-format
msgid "E118: Too many arguments for function: %s"
msgstr "E118: La fonction %s a reçu trop d'arguments"
-#: ../eval.c:148
#, c-format
msgid "E716: Key not present in Dictionary: %s"
msgstr "E716: La clé %s n'existe pas dans le Dictionnaire"
-#: ../eval.c:150
#, c-format
msgid "E122: Function %s already exists, add ! to replace it"
msgstr "E122: La fonction %s existe déjà (ajoutez ! pour la remplacer)"
-#: ../eval.c:151
msgid "E717: Dictionary entry already exists"
msgstr "E717: Une entrée du Dictionnaire porte déjà ce nom"
-#: ../eval.c:152
msgid "E718: Funcref required"
msgstr "E718: Référence de fonction (Funcref) requise"
-#: ../eval.c:153
msgid "E719: Cannot use [:] with a Dictionary"
msgstr "E719: Utilisation de [:] impossible avec un Dictionnaire"
-#: ../eval.c:154
#, c-format
msgid "E734: Wrong variable type for %s="
msgstr "E734: Type de variable erroné avec %s="
-#: ../eval.c:155
#, c-format
msgid "E130: Unknown function: %s"
msgstr "E130: Fonction inconnue : %s"
-#: ../eval.c:156
#, c-format
msgid "E461: Illegal variable name: %s"
msgstr "E461: Nom de variable invalide : %s"
-#: ../eval.c:157
msgid "E806: using Float as a String"
msgstr "E806: Utilisation d'un Flottant comme une Chaîne"
# DB - todo : trouver mieux que "destinations".
-#: ../eval.c:1830
msgid "E687: Less targets than List items"
msgstr "E687: Moins de destinations que d'éléments dans la Liste"
# DB - todo : trouver mieux que "destinations".
-#: ../eval.c:1834
msgid "E688: More targets than List items"
msgstr "E688: Plus de destinations que d'éléments dans la Liste"
-#: ../eval.c:1906
msgid "Double ; in list of variables"
msgstr "Double ; dans une liste de variables"
-#: ../eval.c:2078
#, c-format
msgid "E738: Can't list variables for %s"
msgstr "E738: Impossible de lister les variables de %s"
-#: ../eval.c:2391
msgid "E689: Can only index a List or Dictionary"
msgstr "E689: Seul une Liste ou un Dictionnaire peut être indexé"
-#: ../eval.c:2396
msgid "E708: [:] must come last"
msgstr "E708: [:] ne peut être spécifié qu'en dernier"
-#: ../eval.c:2439
msgid "E709: [:] requires a List value"
-msgstr "E709: [:] requiert une Liste"
+msgstr "E709: [:] n?cessite une Liste"
-#: ../eval.c:2674
msgid "E710: List value has more items than target"
msgstr "E710: La Liste a plus d'éléments que la destination"
-#: ../eval.c:2678
msgid "E711: List value has not enough items"
msgstr "E711: La Liste n'a pas assez d'éléments"
-#: ../eval.c:2867
msgid "E690: Missing \"in\" after :for"
msgstr "E690: \"in\" manquant après :for"
-#: ../eval.c:3063
#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: Parenthèses manquantes : %s"
-#: ../eval.c:3263
#, c-format
msgid "E108: No such variable: \"%s\""
msgstr "E108: Variable inexistante : %s"
-#: ../eval.c:3333
msgid "E743: variable nested too deep for (un)lock"
msgstr "E743: variable trop imbriquée pour la (dé)verrouiller"
# AB - Je suis partagé entre la concision d'une traduction assez littérale et
# la lourdeur d'une traduction plus correcte.
-#: ../eval.c:3630
msgid "E109: Missing ':' after '?'"
msgstr "E109: Il manque ':' après '?'"
-#: ../eval.c:3893
msgid "E691: Can only compare List with List"
msgstr "E691: Une Liste ne peut être comparée qu'avec une Liste"
-#: ../eval.c:3895
msgid "E692: Invalid operation for Lists"
msgstr "E692: Opération invalide avec les Listes"
-#: ../eval.c:3915
msgid "E735: Can only compare Dictionary with Dictionary"
msgstr "E735: Un Dictionnaire ne peut être comparé qu'avec un Dictionnaire"
-#: ../eval.c:3917
msgid "E736: Invalid operation for Dictionary"
msgstr "E736: Opération invalide avec les Dictionnaires"
# DB - todo : Traduction valable (et courte) pour Funcref ?
-#: ../eval.c:3932
msgid "E693: Can only compare Funcref with Funcref"
msgstr "E693: Une Funcref ne peut être comparée qu'à une Funcref"
-#: ../eval.c:3934
msgid "E694: Invalid operation for Funcrefs"
msgstr "E694: Opération invalide avec les Funcrefs"
-#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
msgstr "E804: Impossible d'utiliser '%' avec un Flottant"
-#: ../eval.c:4478
msgid "E110: Missing ')'"
msgstr "E110: ')' manquant"
-#: ../eval.c:4609
msgid "E695: Cannot index a Funcref"
msgstr "E695: Impossible d'indexer une Funcref"
# AB - La version française est meilleure que la version anglaise.
-#: ../eval.c:4839
#, c-format
msgid "E112: Option name missing: %s"
msgstr "E112: Il manque un nom d'option après %s"
-#: ../eval.c:4855
#, c-format
msgid "E113: Unknown option: %s"
msgstr "E113: Option inconnue : %s"
@@ -730,270 +589,215 @@ msgstr "E113: Option inconnue : %s"
# AB - La version française est meilleure que la version anglaise, qui est
# erronée, d'ailleurs : il s'agit d'une "double quote" et non d'une
# "quote".
-#: ../eval.c:4904
#, c-format
msgid "E114: Missing quote: %s"
msgstr "E114: Il manque \" à la fin de %s"
# AB - La version française est meilleure que la version anglaise.
-#: ../eval.c:5020
#, c-format
msgid "E115: Missing quote: %s"
msgstr "E115: Il manque ' à la fin de %s"
-#: ../eval.c:5084
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr "E696: Il manque une virgule dans la Liste %s"
-#: ../eval.c:5091
#, c-format
msgid "E697: Missing end of List ']': %s"
msgstr "E697: Il manque ']' à la fin de la Liste %s"
-#: ../eval.c:5750
msgid "Not enough memory to set references, garbage collection aborted!"
msgstr ""
"Pas assez de mémoire pour les références, arrêt du ramassage de miètes !"
-#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
msgstr "E720: Il manque ':' dans le Dictionnaire %s"
-#: ../eval.c:6499
#, c-format
msgid "E721: Duplicate key in Dictionary: \"%s\""
msgstr "E721: Clé \"%s\" dupliquée dans le Dictionnaire"
-#: ../eval.c:6517
#, c-format
msgid "E722: Missing comma in Dictionary: %s"
msgstr "E722: Il manque une virgule dans le Dictionnaire %s"
-#: ../eval.c:6524
#, c-format
msgid "E723: Missing end of Dictionary '}': %s"
msgstr "E723: Il manque '}' à la fin du Dictionnaire %s"
-#: ../eval.c:6555
msgid "E724: variable nested too deep for displaying"
msgstr "E724: variable trop imbriquée pour être affichée"
-#: ../eval.c:7188
#, c-format
msgid "E740: Too many arguments for function %s"
msgstr "E740: Trop d'arguments pour la fonction %s"
-#: ../eval.c:7190
#, c-format
msgid "E116: Invalid arguments for function %s"
msgstr "E116: Arguments invalides pour la fonction %s"
-#: ../eval.c:7377
#, c-format
msgid "E117: Unknown function: %s"
msgstr "E117: Fonction inconnue : %s"
-#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
msgstr "E119: La fonction %s n'a pas reçu assez d'arguments"
-#: ../eval.c:7387
#, c-format
msgid "E120: Using <SID> not in a script context: %s"
msgstr "E120: <SID> utilisé en dehors d'un script : %s"
-#: ../eval.c:7391
#, c-format
msgid "E725: Calling dict function without Dictionary: %s"
msgstr "E725: Appel d'une fonction « dict » sans Dictionnaire : %s"
-#: ../eval.c:7453
msgid "E808: Number or Float required"
msgstr "E808: Nombre ou Flottant requis"
-#: ../eval.c:7503
msgid "add() argument"
msgstr "argument de add()"
-#: ../eval.c:7907
msgid "E699: Too many arguments"
msgstr "E699: Trop d'arguments"
-#: ../eval.c:8073
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() n'est utilisable que dans le mode Insertion"
# AB - Texte par défaut du bouton de la boîte de dialogue affichée par la
# fonction confirm().
-#: ../eval.c:8156
msgid "&Ok"
msgstr "&Ok"
-#: ../eval.c:8692
msgid "extend() argument"
msgstr "argument de extend()"
-#: ../eval.c:9345
#, c-format
msgid "E737: Key already exists: %s"
msgstr "E737: un mappage existe déjà pour %s"
-#: ../eval.c:8915
msgid "map() argument"
msgstr "argument de map()"
-#: ../eval.c:8916
msgid "filter() argument"
msgstr "argument de filter()"
-#: ../eval.c:9229
#, c-format
msgid "+-%s%3ld lines: "
msgstr "+-%s%3ld lignes : "
-#: ../eval.c:9291
#, c-format
msgid "E700: Unknown function: %s"
msgstr "E700: Fonction inconnue : %s"
# AB - La version française est meilleure que la version anglaise.
-#: ../eval.c:10729
msgid "called inputrestore() more often than inputsave()"
msgstr "inputrestore() a été appelé plus de fois qu'inputsave()"
-#: ../eval.c:10771
msgid "insert() argument"
msgstr "argument de insert()"
-#: ../eval.c:10841
msgid "E786: Range not allowed"
msgstr "E786: Les plages ne sont pas autorisées"
-#: ../eval.c:11140
msgid "E701: Invalid type for len()"
msgstr "E701: Type invalide avec len()"
-#: ../eval.c:11980
msgid "E726: Stride is zero"
msgstr "E726: Le pas est nul"
-#: ../eval.c:11982
msgid "E727: Start past end"
msgstr "E727: Début au-delà de la fin"
-#: ../eval.c:12024 ../eval.c:15297
msgid "<empty>"
msgstr "<vide>"
-#: ../eval.c:12282
msgid "remove() argument"
msgstr "argument de remove()"
-#: ../eval.c:12466
msgid "E655: Too many symbolic links (cycle?)"
msgstr "E655: Trop de liens symboliques (cycle ?)"
-#: ../eval.c:12593
msgid "reverse() argument"
msgstr "argument de reverse()"
-#: ../eval.c:13721
+#, c-format
+msgid "E927: Invalid action: '%s'"
+msgstr "E927: Action invalide : « %s »"
+
msgid "sort() argument"
msgstr "argument de sort()"
-#: ../eval.c:13721
#, fuzzy
-msgid "uniq() argument"
-msgstr "argument de add()"
+#~ msgid "uniq() argument"
+#~ msgstr "argument de add()"
-#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: La fonction de comparaison de sort() a échoué"
-#: ../eval.c:13806
#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: La fonction de comparaison de sort() a échoué"
+#~ msgid "E882: Uniq compare function failed"
+#~ msgstr "E702: La fonction de comparaison de sort() a échoué"
-#: ../eval.c:14085
msgid "(Invalid)"
msgstr "(Invalide)"
-#: ../eval.c:14590
msgid "E677: Error writing temp file"
msgstr "E677: Erreur lors de l'écriture du fichier temporaire"
-#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
msgstr "E805: Utilisation d'un Flottant comme un Nombre"
-#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
msgstr "E703: Utilisation d'une Funcref comme un Nombre"
-#: ../eval.c:16170
msgid "E745: Using a List as a Number"
msgstr "E745: Utilisation d'une Liste comme un Nombre"
-#: ../eval.c:16173
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Utilisation d'un Dictionnaire comme un Nombre"
-#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: Utilisation d'une Funcref comme une Chaîne"
-#: ../eval.c:16262
msgid "E730: using List as a String"
msgstr "E730: Utilisation d'une Liste comme une Chaîne"
-#: ../eval.c:16265
msgid "E731: using Dictionary as a String"
msgstr "E731: Utilisation d'un Dictionnaire comme une Chaîne"
# DB : On doit pouvoir trouver nettement mieux que ça.
-#: ../eval.c:16619
#, c-format
msgid "E706: Variable type mismatch for: %s"
msgstr "E706: Type de variable incohérent pour %s"
-#: ../eval.c:16705
#, c-format
msgid "E795: Cannot delete variable %s"
msgstr "E795: Impossible de supprimer la variable %s"
-#: ../eval.c:16724
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
-#: ../eval.c:16732
#, c-format
msgid "E705: Variable name conflicts with existing function: %s"
msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
-#: ../eval.c:16763
#, c-format
msgid "E741: Value is locked: %s"
msgstr "E741: La valeur de %s est verrouillée"
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
msgid "Unknown"
msgstr "Inconnu"
-#: ../eval.c:16768
#, c-format
msgid "E742: Cannot change value of %s"
msgstr "E742: Impossible de modifier la valeur de %s"
-#: ../eval.c:16838
msgid "E698: variable nested too deep for making a copy"
msgstr "E698: variable trop imbriquée pour en faire une copie"
-#: ../eval.c:17249
#, c-format
msgid "E123: Undefined function: %s"
msgstr "E123: Fonction non définie : %s"
@@ -1001,112 +805,92 @@ msgstr "E123: Fonction non définie : %s"
# AB - La version française est plus consistante que la version anglaise.
# AB - Je suis partagé entre la concision d'une traduction assez littérale et
# la lourdeur d'une traduction plus correcte.
-#: ../eval.c:17260
#, c-format
msgid "E124: Missing '(': %s"
msgstr "E124: Il manque '(' après %s"
-#: ../eval.c:17293
msgid "E862: Cannot use g: here"
msgstr "E862: Impossible d'utiliser g: ici"
-#: ../eval.c:17312
#, c-format
msgid "E125: Illegal argument: %s"
msgstr "E125: Argument invalide : %s"
-#: ../eval.c:17323
#, c-format
msgid "E853: Duplicate argument name: %s"
msgstr "E853: Nom d'argument dupliqué : %s"
-#: ../eval.c:17416
msgid "E126: Missing :endfunction"
msgstr "E126: Il manque :endfunction"
-#: ../eval.c:17537
#, c-format
msgid "E707: Function name conflicts with variable: %s"
msgstr "E707: Le nom de fonction entre en conflit avec la variable : %s"
-#: ../eval.c:17549
#, c-format
msgid "E127: Cannot redefine function %s: It is in use"
msgstr "E127: Impossible de redéfinir fonction %s : déjà utilisée"
# DB - Le contenu du "c-format" est le nom de la fonction.
-#: ../eval.c:17604
#, c-format
msgid "E746: Function name does not match script file name: %s"
msgstr "E746: Le nom de la fonction %s ne correspond pas le nom du script"
-#: ../eval.c:17716
msgid "E129: Function name required"
msgstr "E129: Nom de fonction requis"
-#: ../eval.c:17824
#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: La fonction %s ne commence pas par une majuscule ou contient ':'"
+#~ msgid "E128: Function name must start with a capital or \"s:\": %s"
+#~ msgstr "E128: La fonction %s ne commence pas par une majuscule ou contient ':'"
-#: ../eval.c:17833
#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: La fonction %s ne commence pas par une majuscule ou contient ':'"
+#~ msgid "E884: Function name cannot contain a colon: %s"
+#~ msgstr "E128: La fonction %s ne commence pas par une majuscule ou contient ':'"
# AB - Il est difficile de créer une version française qui fasse moins de 80
# caractères de long, nom de la fonction compris : "It is in use" est une
# expression très dense. Traductions possibles : "elle est utilisée",
# "elle s'exécute" ou "elle est occupée".
-#: ../eval.c:18336
#, c-format
msgid "E131: Cannot delete function %s: It is in use"
msgstr "E131: Impossible d'effacer %s : cette fonction est utilisée"
# AB - Vérifier dans la littérature technique s'il n'existe pas une meilleure
# traduction pour "function call depth".
-#: ../eval.c:18441
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr ""
"E132: La profondeur d'appel de fonction est supérieure à 'maxfuncdepth'"
# AB - Ce texte fait partie d'un message de débogage.
-#: ../eval.c:18568
#, c-format
msgid "calling %s"
msgstr "appel de %s"
# AB - Vérifier.
-#: ../eval.c:18651
#, c-format
msgid "%s aborted"
msgstr "%s annulée"
# AB - Ce texte fait partie d'un message de débogage.
-#: ../eval.c:18653
#, c-format
msgid "%s returning #%<PRId64>"
msgstr "%s a retourné #%<PRId64>"
# AB - Ce texte fait partie d'un message de débogage.
-#: ../eval.c:18670
#, c-format
msgid "%s returning %s"
msgstr "%s a retourné \"%s\""
# AB - Ce texte fait partie d'un message de débogage.
-#: ../eval.c:18691 ../ex_cmds2.c:2695
#, c-format
msgid "continuing in %s"
msgstr "de retour dans %s"
-#: ../eval.c:18795
msgid "E133: :return not inside a function"
msgstr "E133: :return en dehors d'une fonction"
# AB - La version française est capitalisée pour être en accord avec les autres
# commentaires enregistrés dans le fichier viminfo.
-#: ../eval.c:19159
msgid ""
"\n"
"# global variables:\n"
@@ -1115,7 +899,6 @@ msgstr ""
"# Variables globales:\n"
# DB - Plus précis ("la dernière fois") ?
-#: ../eval.c:19254
msgid ""
"\n"
"\tLast set from "
@@ -1123,41 +906,33 @@ msgstr ""
"\n"
"\tModifié la dernière fois dans "
-#: ../eval.c:19272
msgid "No old files"
msgstr "Aucun vieux fichier"
-#: ../ex_cmds.c:122
#, c-format
msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
msgstr "<%s>%s%s %d, Hexa %02x, Octal %03o"
-#: ../ex_cmds.c:145
#, c-format
msgid "> %d, Hex %04x, Octal %o"
msgstr "> %d, Hexa %04x, Octal %o"
-#: ../ex_cmds.c:146
#, c-format
msgid "> %d, Hex %08x, Octal %o"
msgstr "> %d, Hexa %08x, Octal %o"
# AB - La version anglaise est très mauvaise, ce qui m'oblige a inventer une
# version française.
-#: ../ex_cmds.c:684
msgid "E134: Move lines into themselves"
msgstr "E134: La destination est dans la plage d'origine"
-#: ../ex_cmds.c:747
msgid "1 line moved"
msgstr "1 ligne déplacée"
-#: ../ex_cmds.c:749
#, c-format
msgid "%<PRId64> lines moved"
msgstr "%<PRId64> lignes déplacées"
-#: ../ex_cmds.c:1175
#, c-format
msgid "%<PRId64> lines filtered"
msgstr "%<PRId64> lignes filtrées"
@@ -1167,27 +942,23 @@ msgstr "%<PRId64> lignes filtrées"
# au filtrage (FilterReadPre, FilterReadPost, FilterWritePre et
# FilterWritePost) que "*Filter*" que l'on confond avec une tentative de
# mise en valeur.
-#: ../ex_cmds.c:1194
msgid "E135: *Filter* Autocommands must not change current buffer"
msgstr ""
"E135: Les autocommandes Filter* ne doivent pas changer le tampon courant"
# AB - Il faut respecter l'esprit plus que la lettre. Dans le cas présent,
# nettement plus.
-#: ../ex_cmds.c:1244
msgid "[No write since last change]\n"
msgstr "[Attention : tout n'est pas enregistré]\n"
# AB - Le numéro et le message d'erreur (%s ci-dessous) et le "numéro" de ligne
# sont des chaînes de caractères dont le contenu est à la discrétion de
# l'appelant de la fonction viminfo_error().
-#: ../ex_cmds.c:1424
#, c-format
msgid "%sviminfo: %s in line: "
msgstr "%sviminfo : %s à la ligne "
# AB - La version française est meilleure que la version anglaise.
-#: ../ex_cmds.c:1431
msgid "E136: viminfo: Too many errors, skipping rest of file"
msgstr ""
"E136: Il y a trop d'erreurs ; interruption de la lecture du fichier viminfo"
@@ -1195,30 +966,25 @@ msgstr ""
# AB - Ce texte fait partie d'un message de débogage.
# DB - ... dont les valeurs possibles sont les messages
# qui suivent.
-#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
msgstr "Lecture du fichier viminfo \"%s\"%s%s%s"
# AB - Ce texte fait partie d'un message de débogage.
# DB - Voir ci-dessus.
-#: ../ex_cmds.c:1460
msgid " info"
msgstr " info"
# AB - Ce texte fait partie d'un message de débogage.
# DB - Voir ci-dessus.
-#: ../ex_cmds.c:1461
msgid " marks"
msgstr " marques"
-#: ../ex_cmds.c:1462
msgid " oldfiles"
msgstr " vieux fichiers"
# AB - Ce texte fait partie d'un message de débogage.
# DB - Voir ci-dessus.
-#: ../ex_cmds.c:1463
msgid " FAILED"
msgstr " ÉCHEC"
@@ -1227,7 +993,6 @@ msgstr " ÉCHEC"
# AB - Le mot "viminfo" a été retiré pour que le message ne dépasse pas 80
# caractères dans le cas courant où %s = /home/12345678/.viminfo
#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
#, c-format
msgid "E137: Viminfo file is not writable: %s"
msgstr "E137: L'écriture dans le fichier %s est interdite"
@@ -1235,25 +1000,21 @@ msgstr "E137: L'écriture dans le fichier %s est interdite"
# AB - Le point d'exclamation est superflu.
# AB - Le mot "viminfo" a été retiré pour que le message ne dépasse pas 80
# caractères dans le cas courant où %s = /home/12345678/.viminfo
-#: ../ex_cmds.c:1626
#, c-format
msgid "E138: Can't write viminfo file %s!"
msgstr "E138: Impossible d'écrire le fichier %s"
# AB - Ce texte est un message de débogage.
-#: ../ex_cmds.c:1635
#, c-format
msgid "Writing viminfo file \"%s\""
msgstr "Écriture du fichier viminfo \"%s\""
#. Write the info:
-#: ../ex_cmds.c:1720
#, c-format
msgid "# This viminfo file was generated by Vim %s.\n"
msgstr "# Ce fichier viminfo a été généré par Vim %s.\n"
# AB - Les deux versions, bien que différentes, se valent.
-#: ../ex_cmds.c:1722
msgid ""
"# You may edit it if you're careful!\n"
"\n"
@@ -1261,58 +1022,48 @@ msgstr ""
"# Vous pouvez l'éditer, mais soyez prudent.\n"
"\n"
-#: ../ex_cmds.c:1723
msgid "# Value of 'encoding' when this file was written\n"
msgstr "# 'encoding' dans lequel ce fichier a été écrit\n"
# AB - Ce texte est passé en argument à la fonction viminfo_error().
# AB - "illégal" est un terme trop fort à mon goût.
-#: ../ex_cmds.c:1800
msgid "Illegal starting char"
msgstr "Caractère initial non valide"
# AB - Ceci est un contenu de boîte de dialogue (éventuellement en mode texte).
# AB - La version française est meilleure que la version anglaise.
-#: ../ex_cmds.c:2162
msgid "Write partial file?"
msgstr "Perdre une partie du fichier ?"
# AB - La version française est nettement meilleure que la version anglaise.
-#: ../ex_cmds.c:2166
msgid "E140: Use ! to write partial buffer"
msgstr ""
"E140: Une partie du fichier serait perdue (ajoutez ! pour passer outre)"
-#: ../ex_cmds.c:2281
#, c-format
msgid "Overwrite existing file \"%s\"?"
msgstr "Écraser le fichier %s existant ?"
-#: ../ex_cmds.c:2317
#, c-format
msgid "Swap file \"%s\" exists, overwrite anyway?"
msgstr "Le fichier d'échange \"%s\" existe déjà, l'écraser ?"
# DB - Un peu long à mon avis.
-#: ../ex_cmds.c:2326
#, c-format
msgid "E768: Swap file exists: %s (:silent! overrides)"
msgstr "E768: Le fichier d'échange %s existe déjà (:silent! pour passer outre)"
-#: ../ex_cmds.c:2381
#, c-format
msgid "E141: No file name for buffer %<PRId64>"
msgstr "E141: Pas de nom de fichier pour le tampon %<PRId64>"
# AB - Il faut respecter l'esprit plus que la lettre.
-#: ../ex_cmds.c:2412
msgid "E142: File not written: Writing is disabled by 'write' option"
msgstr ""
"E142: L'option 'nowrite' est activée et empêche toute écriture du fichier"
# AB - Ceci est un contenu de boîte de dialogue (éventuellement en mode texte).
# AB - "activée pour" n'est pas une formulation très heureuse.
-#: ../ex_cmds.c:2434
#, c-format
msgid ""
"'readonly' option is set for \"%s\".\n"
@@ -1321,7 +1072,6 @@ msgstr ""
"L'option 'readonly' est activée pour \"%s\".\n"
"Voulez-vous tout de même enregistrer ?"
-#: ../ex_cmds.c:2439
#, c-format
msgid ""
"File permissions of \"%s\" are read-only.\n"
@@ -1332,7 +1082,6 @@ msgstr ""
"Il peut être possible de l'écrire tout de même.\n"
"Tenter ?"
-#: ../ex_cmds.c:2451
#, c-format
msgid "E505: \"%s\" is read-only (add ! to override)"
msgstr "E505: \"%s\" est en lecture seule (ajoutez ! pour passer outre)"
@@ -1342,84 +1091,68 @@ msgstr "E505: \"%s\" est en lecture seule (ajoutez ! pour passer outre)"
# devrait n'être affiché qu'après une tentative d'ouverture de fichier,
# la version actuelle devrait donc suffire.
# DB - Suggestion : "nouveau tampon" ?
-#: ../ex_cmds.c:3120
#, c-format
msgid "E143: Autocommands unexpectedly deleted new buffer %s"
msgstr "E143: Une autocommande a effacé le nouveau tampon %s"
-#: ../ex_cmds.c:3313
msgid "E144: non-numeric argument to :z"
msgstr "E144: L'argument de :z n'est pas numérique"
# AB - La version française fera peut-être mieux passer l'amère pilule.
# La consultation de l'aide donnera l'explication complète à ceux qui
# ne comprendraient pas à quoi ce message est dû.
-#: ../ex_cmds.c:3404
msgid "E145: Shell commands not allowed in rvim"
msgstr "E145: Les commandes externes sont indisponibles dans rvim"
-#: ../ex_cmds.c:3498
msgid "E146: Regular expressions can't be delimited by letters"
msgstr ""
"E146: Les expressions régulières ne peuvent pas être délimitées par des "
"lettres"
-#: ../ex_cmds.c:3964
#, c-format
msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
msgstr "remplacer par %s (y/n/a/q/l/^E/^Y)?"
-#: ../ex_cmds.c:4379
msgid "(Interrupted) "
msgstr "(Interrompu) "
-#: ../ex_cmds.c:4384
msgid "1 match"
msgstr "1 correspondance"
-#: ../ex_cmds.c:4384
msgid "1 substitution"
msgstr "1 substitution"
-#: ../ex_cmds.c:4387
#, c-format
msgid "%<PRId64> matches"
msgstr "%<PRId64> correspondances"
-#: ../ex_cmds.c:4388
#, c-format
msgid "%<PRId64> substitutions"
msgstr "%<PRId64> substitutions"
-#: ../ex_cmds.c:4392
msgid " on 1 line"
msgstr " sur 1 ligne"
-#: ../ex_cmds.c:4395
#, c-format
msgid " on %<PRId64> lines"
msgstr " sur %<PRId64> lignes"
# AB - Il faut respecter l'esprit plus que la lettre.
# AB - Ce message devrait contenir une référence à :vglobal.
-#: ../ex_cmds.c:4438
msgid "E147: Cannot do :global recursive"
msgstr "E147: :global ne peut pas exécuter :global"
# AB - Ce message devrait contenir une référence à :vglobal.
-#: ../ex_cmds.c:4467
msgid "E148: Regular expression missing from global"
msgstr "E148: :global doit être suivi par une expression régulière"
# AB - Ce message est utilisé lorsque :vglobal ne trouve rien. Lorsque :global
# ne trouve rien, c'est "Pattern not found: %s" / "Motif introuvable: %s"
# qui est utilisé.
-#: ../ex_cmds.c:4508
#, c-format
msgid "Pattern found in every line: %s"
msgstr "Motif trouvé dans toutes les lignes : %s"
-#: ../ex_cmds.c:4510
#, c-format
msgid "Pattern not found: %s"
msgstr "Motif introuvable: %s"
@@ -1430,7 +1163,6 @@ msgstr "Motif introuvable: %s"
# à internationalisation. J'attends que les deux autres messages soient
# traduisibles pour traduire celui-ci.
# DB - TODO : Qu'en est-il à présent ?
-#: ../ex_cmds.c:4587
msgid ""
"\n"
"# Last Substitute String:\n"
@@ -1441,43 +1173,35 @@ msgstr ""
"$"
# This message should *so* be E42!
-#: ../ex_cmds.c:4679
msgid "E478: Don't panic!"
msgstr "E478: Pas de panique !"
-#: ../ex_cmds.c:4717
#, c-format
msgid "E661: Sorry, no '%s' help for %s"
msgstr "E661: Désolé, aucune aide en langue '%s' pour %s"
-#: ../ex_cmds.c:4719
#, c-format
msgid "E149: Sorry, no help for %s"
msgstr "E149: Désolé, aucune aide pour %s"
-#: ../ex_cmds.c:4751
#, c-format
msgid "Sorry, help file \"%s\" not found"
msgstr "Désolé, le fichier d'aide \"%s\" est introuvable"
-#: ../ex_cmds.c:5323
#, c-format
msgid "E150: Not a directory: %s"
msgstr "E150: %s n'est pas un répertoire"
# AB - La version anglaise est plus précise, mais trop technique.
-#: ../ex_cmds.c:5446
#, c-format
msgid "E152: Cannot open %s for writing"
msgstr "E152: Impossible d'écrire %s"
# AB - La version anglaise est plus précise, mais trop technique.
-#: ../ex_cmds.c:5471
#, c-format
msgid "E153: Unable to open %s for reading"
msgstr "E153: Impossible de lire %s"
-#: ../ex_cmds.c:5500
#, c-format
msgid "E670: Mix of help file encodings within a language: %s"
msgstr "E670: Encodages différents dans les fichiers d'aide en langue %s"
@@ -1487,315 +1211,250 @@ msgstr "E670: Encodages différents dans les fichiers d'aide en langue %s"
# traduction de 40 caractères ou moins. Ce qui est loin d'être le cas
# présent.
# DB - Suggestion.
-#: ../ex_cmds.c:5565
#, c-format
msgid "E154: Duplicate tag \"%s\" in file %s/%s"
msgstr "E154: Marqueur \"%s\" dupliqué dans le fichier %s/%s"
# AB - Il faut respecter l'esprit plus que la lettre.
-#: ../ex_cmds.c:5687
#, c-format
msgid "E160: Unknown sign command: %s"
msgstr "E160: Commande inconnue : :sign %s"
# AB - La version française est meilleure que la version anglaise.
-#: ../ex_cmds.c:5704
msgid "E156: Missing sign name"
msgstr "E156: Il manque le nom du symbole"
-#: ../ex_cmds.c:5746
msgid "E612: Too many signs defined"
msgstr "E612: Trop de symboles sont définis"
# AB - Cette traduction ne me satisfait pas.
# DB - Suggestion.
-#: ../ex_cmds.c:5813
#, c-format
msgid "E239: Invalid sign text: %s"
msgstr "E239: Le texte du symbole est invalide : %s"
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
#, c-format
msgid "E155: Unknown sign: %s"
msgstr "E155: Symbole inconnu : %s"
# AB - La version française est meilleure que la version anglaise.
-#: ../ex_cmds.c:5877
msgid "E159: Missing sign number"
msgstr "E159: Il manque l'ID du symbole"
# AB - Vu le code source, la version française est meilleure que la
# version anglaise. Ce message est similaire au message E102.
-#: ../ex_cmds.c:5971
#, c-format
msgid "E158: Invalid buffer name: %s"
msgstr "E158: Le tampon %s est introuvable"
# AB - Vu le code source, la version française est meilleure que la
# version anglaise.
-#: ../ex_cmds.c:6008
#, c-format
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: Le symbole %<PRId64> est introuvable"
-#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " (non supporté)"
-#: ../ex_cmds.c:6169
msgid "[Deleted]"
msgstr "[Effacé]"
# AB - La version française de la première phrase ne me satisfait pas.
# DB - Suggestion.
-#: ../ex_cmds2.c:139
msgid "Entering Debug mode. Type \"cont\" to continue."
msgstr "Mode débogage activé. Tapez \"cont\" pour continuer."
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
#, c-format
msgid "line %<PRId64>: %s"
msgstr "ligne %<PRId64> : %s"
-#: ../ex_cmds2.c:145
#, c-format
msgid "cmd: %s"
msgstr "cmde : %s"
-#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
msgstr "Point d'arrêt dans %s%s ligne %<PRId64>"
-#: ../ex_cmds2.c:581
#, c-format
msgid "E161: Breakpoint not found: %s"
msgstr "E161: Le point d'arrêt %s est introuvable"
-#: ../ex_cmds2.c:611
msgid "No breakpoints defined"
msgstr "Aucun point d'arrêt n'est défini"
# AB - Le deuxième %s est remplacé par "func" ou "file" sans que l'on puisse
# traduire ces mots.
-#: ../ex_cmds2.c:617
#, c-format
msgid "%3d %s %s line %<PRId64>"
msgstr "%3d %s %s ligne %<PRId64>"
-#: ../ex_cmds2.c:942
msgid "E750: First use \":profile start {fname}\""
msgstr "E750: Utilisez d'abord \":profile start {nomfichier}\""
# AB - "changes to" est redondant et a été omis de la version française.
-#: ../ex_cmds2.c:1269
#, c-format
msgid "Save changes to \"%s\"?"
msgstr "Enregistrer \"%s\" ?"
# AB - Si les parenthèses posent problème, il faudra remettre les guillemets
# ci-dessus.
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
msgid "Untitled"
msgstr "(sans titre)"
# AB - Il faut respecter l'esprit plus que la lettre.
# AB - Ce message est similaire au message E89.
-#: ../ex_cmds2.c:1421
#, c-format
msgid "E162: No write since last change for buffer \"%s\""
msgstr "E162: Le tampon %s n'a pas été enregistré"
-#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "Alerte : Entrée inattendue dans un autre tampon (vérifier autocmdes)"
+msgstr "Alerte : Entrée inattendue dans un autre tampon (vérifier autocommandes)"
-#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
msgstr "E163: Il n'y a qu'un seul fichier à éditer"
-#: ../ex_cmds2.c:1828
msgid "E164: Cannot go before first file"
msgstr "E164: Impossible d'aller avant le premier fichier"
-#: ../ex_cmds2.c:1830
msgid "E165: Cannot go beyond last file"
msgstr "E165: Impossible d'aller au-delà du dernier fichier"
-#: ../ex_cmds2.c:2175
#, c-format
msgid "E666: compiler not supported: %s"
msgstr "E666: Compilateur %s non supporté"
-#: ../ex_cmds2.c:2257
#, c-format
msgid "Searching for \"%s\" in \"%s\""
msgstr "Recherche de \"%s\" dans \"%s\""
-#: ../ex_cmds2.c:2284
#, c-format
msgid "Searching for \"%s\""
msgstr "Recherche de \"%s\""
-#: ../ex_cmds2.c:2307
#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "introuvable dans 'runtimepath' : \"%s\""
+msgid "not found in '%s': \"%s\""
+msgstr "introuvable dans '%s' : \"%s\""
-#: ../ex_cmds2.c:2472
#, c-format
msgid "Cannot source a directory: \"%s\""
msgstr "Impossible de sourcer un répertoire : \"%s\""
-#: ../ex_cmds2.c:2518
#, c-format
msgid "could not source \"%s\""
msgstr "impossible de sourcer \"%s\""
-#: ../ex_cmds2.c:2520
#, c-format
msgid "line %<PRId64>: could not source \"%s\""
msgstr "ligne %<PRId64> : impossible de sourcer \"%s\""
-#: ../ex_cmds2.c:2535
#, c-format
msgid "sourcing \"%s\""
msgstr "sourcement \"%s\""
-#: ../ex_cmds2.c:2537
#, c-format
msgid "line %<PRId64>: sourcing \"%s\""
msgstr "ligne %<PRId64> : sourcement de \"%s\""
-#: ../ex_cmds2.c:2693
#, c-format
msgid "finished sourcing %s"
msgstr "fin du sourcement de %s"
-#: ../ex_cmds2.c:2765
msgid "modeline"
msgstr "ligne de mode"
-#: ../ex_cmds2.c:2767
msgid "--cmd argument"
msgstr "argument --cmd"
-#: ../ex_cmds2.c:2769
msgid "-c argument"
msgstr "argument -c"
-#: ../ex_cmds2.c:2771
msgid "environment variable"
msgstr "variable d'environnement"
-#: ../ex_cmds2.c:2773
msgid "error handler"
msgstr "gestionnaire d'erreur"
-#: ../ex_cmds2.c:3020
msgid "W15: Warning: Wrong line separator, ^M may be missing"
msgstr "W15: Alerte : Séparateur de ligne erroné, ^M possiblement manquant"
-#: ../ex_cmds2.c:3139
msgid "E167: :scriptencoding used outside of a sourced file"
msgstr "E167: :scriptencoding utilisé en dehors d'un fichier sourcé"
-#: ../ex_cmds2.c:3166
msgid "E168: :finish used outside of a sourced file"
msgstr "E168: :finish utilisé en dehors d'un fichier sourcé"
# DB - Le premier %s est, au choix : "time ", "ctype " ou "messages ",
# sans qu'il soit possible de les traduire.
-#: ../ex_cmds2.c:3389
#, c-format
msgid "Current %slanguage: \"%s\""
msgstr "Langue courante pour %s : \"%s\""
-#: ../ex_cmds2.c:3404
#, c-format
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: Impossible de choisir la langue \"%s\""
#. don't redisplay the window
#. don't wait for return
-#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
msgstr "Mode Ex activé. Tapez \"visual\" pour passer en mode Normal."
-#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
msgstr "E501: À la fin du fichier"
-#: ../ex_docmd.c:513
msgid "E169: Command too recursive"
msgstr "E169: Commande trop récursive"
-#: ../ex_docmd.c:1006
#, c-format
msgid "E605: Exception not caught: %s"
msgstr "E605: Exception non interceptée : %s"
-#: ../ex_docmd.c:1085
msgid "End of sourced file"
msgstr "Fin du fichier sourcé"
-#: ../ex_docmd.c:1086
msgid "End of function"
msgstr "Fin de la fonction"
-#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
msgstr "E464: Utilisation ambiguë d'une commande définie par l'utilisateur"
-#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
msgstr "E492: Commande inconnue"
-#: ../ex_docmd.c:1729
msgid "E493: Backwards range given"
msgstr "E493: La plage spécifiée est inversée"
-#: ../ex_docmd.c:1733
msgid "Backwards range given, OK to swap"
msgstr "La plage spécifiée est inversée, OK pour l'inverser"
#. append
#. typed wrong
-#: ../ex_docmd.c:1787
msgid "E494: Use w or w>>"
msgstr "E494: Utilisez w ou w>>"
-#: ../ex_docmd.c:3454
msgid "E319: The command is not available in this version"
msgstr "E319: Désolé, cette commande n'est pas disponible dans cette version"
-#: ../ex_docmd.c:3752
msgid "E172: Only one file name allowed"
msgstr "E172: Un seul nom de fichier autorisé"
-#: ../ex_docmd.c:4238
msgid "1 more file to edit. Quit anyway?"
msgstr "Encore 1 fichier à éditer. Quitter tout de même ?"
-#: ../ex_docmd.c:4242
#, c-format
msgid "%d more files to edit. Quit anyway?"
msgstr "Encore %d fichiers à éditer. Quitter tout de même ?"
-#: ../ex_docmd.c:4248
msgid "E173: 1 more file to edit"
msgstr "E173: encore 1 fichier à éditer"
-#: ../ex_docmd.c:4250
#, c-format
msgid "E173: %<PRId64> more files to edit"
msgstr "E173: encore %<PRId64> fichiers à éditer"
-#: ../ex_docmd.c:4320
msgid "E174: Command already exists: add ! to replace it"
msgstr "E174: La commande existe déjà : ajoutez ! pour la redéfinir"
-#: ../ex_docmd.c:4432
msgid ""
"\n"
" Name Args Address Complete Definition"
@@ -1803,356 +1462,277 @@ msgstr ""
"\n"
" Nom Args Adresse Complet. Définition"
-#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
msgstr "Aucune commande définie par l'utilisateur trouvée"
-#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
msgstr "E175: Pas d'attribut spécifié"
-#: ../ex_docmd.c:4583
msgid "E176: Invalid number of arguments"
msgstr "E176: Nombre d'arguments invalide"
-#: ../ex_docmd.c:4594
msgid "E177: Count cannot be specified twice"
msgstr "E177: Le quantificateur ne peut être spécifié deux fois"
-#: ../ex_docmd.c:4603
msgid "E178: Invalid default value for count"
msgstr "E178: La valeur par défaut du quantificateur est invalide"
-#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
msgstr "E179: argument requis avec -complete"
-#: ../ex_docmd.c:4933
msgid "E179: argument required for -addr"
msgstr "E179: argument requis avec -addr"
-#: ../ex_docmd.c:4635
#, c-format
msgid "E181: Invalid attribute: %s"
msgstr "E181: Attribut invalide : %s"
-#: ../ex_docmd.c:4678
msgid "E182: Invalid command name"
msgstr "E182: Nom de commande invalide"
-#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
-#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
msgstr ""
"E841: Nom réservé, ne peux pas être utilisé pour une commande utilisateur"
-#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
msgstr "E184: Aucune commande %s définie par l'utilisateur"
-#: ../ex_docmd.c:5516
#, c-format
msgid "E180: Invalid address type value: %s"
msgstr "E180: Valeur de type d'adresse invalide : %s"
-#: ../ex_docmd.c:5219
#, c-format
msgid "E180: Invalid complete value: %s"
msgstr "E180: Valeur invalide pour \"-complete=\" : %s"
-#: ../ex_docmd.c:5225
msgid "E468: Completion argument only allowed for custom completion"
msgstr "E468: Seul le complètement personnalisé accepte un argument"
-#: ../ex_docmd.c:5231
msgid "E467: Custom completion requires a function argument"
msgstr "E467: Le complètement personnalisé requiert une fonction en argument"
-#: ../ex_docmd.c:5257
#, c-format
msgid "E185: Cannot find color scheme '%s'"
msgstr "E185: Impossible de trouver le jeu de couleurs '%s'"
-#: ../ex_docmd.c:5263
msgid "Greetings, Vim user!"
msgstr "Bienvenue, utilisateur de Vim !"
-#: ../ex_docmd.c:5431
msgid "E784: Cannot close last tab page"
msgstr "E784: Impossible de fermer le dernier onglet"
-#: ../ex_docmd.c:5462
msgid "Already only one tab page"
msgstr "Il ne reste déjà plus qu'un seul onglet"
-#: ../ex_docmd.c:6004
#, c-format
msgid "Tab page %d"
msgstr "Onglet %d"
-#: ../ex_docmd.c:6295
msgid "No swap file"
msgstr "Pas de fichier d'échange"
-#: ../ex_docmd.c:6478
msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
msgstr ""
"E747: Tampon modifié : impossible de changer de répertoire (ajoutez ! pour "
"passer outre)"
-#: ../ex_docmd.c:6485
msgid "E186: No previous directory"
msgstr "E186: Pas de répertoire précédent"
-#: ../ex_docmd.c:6530
msgid "E187: Unknown"
msgstr "E187: Inconnu"
-#: ../ex_docmd.c:6610
msgid "E465: :winsize requires two number arguments"
msgstr "E465: :winsize requiert deux arguments numériques"
# DB : Suggestion, sans doute perfectible.
-#: ../ex_docmd.c:6655
msgid "E188: Obtaining window position not implemented for this platform"
msgstr ""
"E188: Récupérer la position de la fenêtre non implémenté dans cette version"
-#: ../ex_docmd.c:6662
msgid "E466: :winpos requires two number arguments"
msgstr "E466: :winpos requiert deux arguments numériques"
-#: ../ex_docmd.c:7241
#, c-format
msgid "E739: Cannot create directory: %s"
msgstr "E739: Impossible de créer le répertoire \"%s\""
-#: ../ex_docmd.c:7268
#, c-format
msgid "E189: \"%s\" exists (add ! to override)"
msgstr "E189: \"%s\" existe (ajoutez ! pour passer outre)"
-#: ../ex_docmd.c:7273
#, c-format
msgid "E190: Cannot open \"%s\" for writing"
msgstr "E190: Impossible d'ouvrir \"%s\" pour y écrire"
#. set mark
-#: ../ex_docmd.c:7294
msgid "E191: Argument must be a letter or forward/backward quote"
msgstr "E191: L'argument doit être une lettre ou une (contre-)apostrophe"
-#: ../ex_docmd.c:7333
msgid "E192: Recursive use of :normal too deep"
msgstr "E192: Appel récursif de :normal trop important"
-#: ../ex_docmd.c:7807
msgid "E194: No alternate file name to substitute for '#'"
msgstr "E194: Aucun nom de fichier alternatif à substituer à '#'"
-#: ../ex_docmd.c:7841
msgid "E495: no autocommand file name to substitute for \"<afile>\""
msgstr "E495: Aucun nom de ficher d'autocommande à substituer à \"<afile>\""
-#: ../ex_docmd.c:7850
msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
msgstr "E496: Aucun numéro de tampon d'autocommande à substituer à \"<abuf>\""
-#: ../ex_docmd.c:7861
msgid "E497: no autocommand match name to substitute for \"<amatch>\""
msgstr "E497: Aucune correspondance d'autocommande à substituer à \"<amatch>\""
-#: ../ex_docmd.c:7870
msgid "E498: no :source file name to substitute for \"<sfile>\""
msgstr "E498: Aucun nom de fichier :source à substituer à \"<sfile>\""
-#: ../ex_docmd.c:7876
msgid "E842: no line number to use for \"<slnum>\""
msgstr "E842: aucun numéro de ligne à utiliser pour \"<slnum>\""
-#: ../ex_docmd.c:7903
#, c-format
msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
msgstr "E499: Nom de fichier vide pour '%' ou '#', ne marche qu'avec \":p:h\""
-#: ../ex_docmd.c:7905
msgid "E500: Evaluates to an empty string"
msgstr "E500: Évalué en une chaîne vide"
-#: ../ex_docmd.c:8838
msgid "E195: Cannot open viminfo file for reading"
msgstr "E195: Impossible d'ouvrir le viminfo en lecture"
-#: ../ex_eval.c:464
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr "E608: Impossible d'émettre des exceptions avec 'Vim' comme préfixe"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
#, c-format
msgid "Exception thrown: %s"
msgstr "Exception émise : %s"
-#: ../ex_eval.c:545
#, c-format
msgid "Exception finished: %s"
msgstr "Exception terminée : %s"
-#: ../ex_eval.c:546
#, c-format
msgid "Exception discarded: %s"
msgstr "Exception éliminée : %s"
-#: ../ex_eval.c:588 ../ex_eval.c:634
#, c-format
msgid "%s, line %<PRId64>"
msgstr "%s, ligne %<PRId64>"
#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
#, c-format
msgid "Exception caught: %s"
msgstr "Exception interceptée : %s"
# DB - Le c-format est féminin, singulier ou pluriel (cf. 3 messages plus bas).
-#: ../ex_eval.c:676
#, c-format
msgid "%s made pending"
msgstr "%s mise(s) en attente"
-#: ../ex_eval.c:679
#, c-format
msgid "%s resumed"
msgstr "%s ré-émise(s)"
-#: ../ex_eval.c:683
#, c-format
msgid "%s discarded"
msgstr "%s éliminée(s)"
-#: ../ex_eval.c:708
msgid "Exception"
msgstr "Exception"
-#: ../ex_eval.c:713
msgid "Error and interrupt"
msgstr "Erreur et interruption"
-#: ../ex_eval.c:715
msgid "Error"
msgstr "Erreur"
#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
msgid "Interrupt"
msgstr "Interruption"
-#: ../ex_eval.c:795
msgid "E579: :if nesting too deep"
msgstr "E579: Imbrication de :if trop importante"
-#: ../ex_eval.c:830
msgid "E580: :endif without :if"
msgstr "E580: :endif sans :if"
-#: ../ex_eval.c:873
msgid "E581: :else without :if"
msgstr "E581: :else sans :if"
-#: ../ex_eval.c:876
msgid "E582: :elseif without :if"
msgstr "E582: :elseif sans :if"
-#: ../ex_eval.c:880
msgid "E583: multiple :else"
msgstr "E583: Il ne peut y avoir qu'un seul :else"
-#: ../ex_eval.c:883
msgid "E584: :elseif after :else"
msgstr "E584: :elseif après :else"
-#: ../ex_eval.c:941
msgid "E585: :while/:for nesting too deep"
msgstr "E585: Imbrication de :while ou :for trop importante"
-#: ../ex_eval.c:1028
msgid "E586: :continue without :while or :for"
msgstr "E586: :continue sans :while ou :for"
-#: ../ex_eval.c:1061
msgid "E587: :break without :while or :for"
msgstr "E587: :break sans :while ou :for"
-#: ../ex_eval.c:1102
msgid "E732: Using :endfor with :while"
msgstr "E732: Utilisation de :endfor avec :while"
-#: ../ex_eval.c:1104
msgid "E733: Using :endwhile with :for"
msgstr "E733: Utilisation de :endwhile avec :for"
-#: ../ex_eval.c:1247
msgid "E601: :try nesting too deep"
msgstr "E601: Imbrication de :try trop importante"
-#: ../ex_eval.c:1317
msgid "E603: :catch without :try"
msgstr "E603: :catch sans :try"
#. Give up for a ":catch" after ":finally" and ignore it.
#. * Just parse.
-#: ../ex_eval.c:1332
msgid "E604: :catch after :finally"
msgstr "E604: :catch après :finally"
-#: ../ex_eval.c:1451
msgid "E606: :finally without :try"
msgstr "E606: :finally sans :try"
#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
msgid "E607: multiple :finally"
msgstr "E607: Il ne peut y avoir qu'un seul :finally"
-#: ../ex_eval.c:1571
msgid "E602: :endtry without :try"
msgstr "E602: :endtry sans :try"
-#: ../ex_eval.c:2026
msgid "E193: :endfunction not inside a function"
msgstr "E193: :endfunction en dehors d'une fonction"
-#: ../ex_getln.c:1643
msgid "E788: Not allowed to edit another buffer now"
msgstr "E788: L'édition d'un autre tampon n'est plus permise"
-#: ../ex_getln.c:1656
msgid "E811: Not allowed to change buffer information now"
msgstr ""
"E811: Changement des informations du tampon n'est pas permise maintenant"
# DB - TODO : Pas compris le message ni comment le déclencher malgré une visite
# dans le code.
-#: ../ex_getln.c:3178
msgid "tagname"
msgstr "nom du marqueur"
# DB - TODO : Idem précédent.
-#: ../ex_getln.c:3181
msgid " kind file\n"
msgstr " type de fichier\n"
-#: ../ex_getln.c:4799
msgid "'history' option is zero"
msgstr "l'option 'history' vaut zéro"
# DB - Messages et les suivants : fichier .viminfo.
# Pas de majuscule nécessaire pour les messages d'après.
-#: ../ex_getln.c:5046
#, c-format
msgid ""
"\n"
@@ -2161,35 +1741,30 @@ msgstr ""
"\n"
"# Historique %s (chronologie décroissante) :\n"
-#: ../ex_getln.c:5047
msgid "Command Line"
msgstr "ligne de commande"
-#: ../ex_getln.c:5048
msgid "Search String"
msgstr "chaîne de recherche"
-#: ../ex_getln.c:5049
msgid "Expression"
msgstr "expression"
-#: ../ex_getln.c:5050
msgid "Input Line"
msgstr "ligne de saisie"
-#: ../ex_getln.c:5117
+msgid "Debug Line"
+msgstr "Ligne de débogage"
+
msgid "E198: cmd_pchar beyond the command length"
msgstr "E198: cmd_pchar au-delà de la longueur de la commande"
-#: ../ex_getln.c:5279
msgid "E199: Active window or buffer deleted"
msgstr "E199: Fenêtre ou tampon actif effacé"
-#: ../file_search.c:203
msgid "E854: path too long for completion"
msgstr "E854: chemin trop long pour complètement"
-#: ../file_search.c:446
#, c-format
msgid ""
"E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -2198,216 +1773,168 @@ msgstr ""
"E343: Chemin invalide : '**[nombre]' doit être à la fin du chemin ou être "
"suivi de '%s'."
-#: ../file_search.c:1505
#, c-format
msgid "E344: Can't find directory \"%s\" in cdpath"
msgstr "E344: Répertoire \"%s\" introuvable dans 'cdpath'"
-#: ../file_search.c:1508
#, c-format
msgid "E345: Can't find file \"%s\" in path"
msgstr "E345: Fichier \"%s\" introuvable dans 'path'"
-#: ../file_search.c:1512
#, c-format
msgid "E346: No more directory \"%s\" found in cdpath"
msgstr "E346: Plus de répertoire \"%s\" dans 'cdpath'"
-#: ../file_search.c:1515
#, c-format
msgid "E347: No more file \"%s\" found in path"
msgstr "E347: Plus de fichier \"%s\" dans 'path'"
-#: ../fileio.c:137
msgid "E812: Autocommands changed buffer or buffer name"
msgstr "E812: Des autocommandes ont changé le tampon ou le nom du tampon"
-#: ../fileio.c:368
msgid "Illegal file name"
msgstr "Nom de fichier invalide"
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
msgstr "est un répertoire"
-#: ../fileio.c:397
msgid "is not a file"
msgstr "n'est pas un fichier"
-#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
msgstr "[Nouveau fichier]"
-#: ../fileio.c:511
msgid "[New DIRECTORY]"
msgstr "[Nouveau RÉPERTOIRE]"
-#: ../fileio.c:529 ../fileio.c:532
msgid "[File too big]"
msgstr "[Fichier trop volumineux]"
-#: ../fileio.c:534
msgid "[Permission Denied]"
msgstr "[Permission refusée]"
-#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: Les autocommandes *ReadPre ont rendu le fichier illisible"
-#: ../fileio.c:655
msgid "E201: *ReadPre autocommands must not change current buffer"
msgstr ""
"E201: Autocommandes *ReadPre ne doivent pas modifier le contenu du tampon "
"courant"
-#: ../fileio.c:672
msgid "Nvim: Reading from stdin...\n"
msgstr "Vim : Lecture de stdin...\n"
#. Re-opening the original file failed!
-#: ../fileio.c:909
msgid "E202: Conversion made file unreadable!"
msgstr "E202: La conversion a rendu le fichier illisible !"
#. fifo or socket
-#: ../fileio.c:1782
msgid "[fifo/socket]"
msgstr "[fifo/socket]"
#. fifo
-#: ../fileio.c:1788
msgid "[fifo]"
msgstr "[fifo]"
#. or socket
-#: ../fileio.c:1794
msgid "[socket]"
msgstr "[socket]"
#. or character special
-#: ../fileio.c:1801
msgid "[character special]"
msgstr "[caractère spécial]"
-#: ../fileio.c:1815
msgid "[CR missing]"
msgstr "[CR manquant]"
-#: ../fileio.c:1819
msgid "[long lines split]"
msgstr "[lignes longues coupées]"
-#: ../fileio.c:1823 ../fileio.c:3512
msgid "[NOT converted]"
msgstr "[NON converti]"
-#: ../fileio.c:1826 ../fileio.c:3515
msgid "[converted]"
msgstr "[converti]"
-#: ../fileio.c:1831
#, c-format
msgid "[CONVERSION ERROR in line %<PRId64>]"
msgstr "[ERREUR DE CONVERSION à la ligne %<PRId64>]"
-#: ../fileio.c:1835
#, c-format
msgid "[ILLEGAL BYTE in line %<PRId64>]"
msgstr "[OCTET INVALIDE à la ligne %<PRId64>]"
-#: ../fileio.c:1838
msgid "[READ ERRORS]"
msgstr "[ERREURS DE LECTURE]"
-#: ../fileio.c:2104
msgid "Can't find temp file for conversion"
msgstr "Impossible de générer un fichier temporaire pour la conversion"
-#: ../fileio.c:2110
msgid "Conversion with 'charconvert' failed"
msgstr "La conversion avec 'charconvert' a échoué"
# DB : Pas de majuscule ?
-#: ../fileio.c:2113
msgid "can't read output of 'charconvert'"
msgstr "Impossible de lire la sortie de 'charconvert'"
-#: ../fileio.c:2437
msgid "E676: No matching autocommands for acwrite buffer"
msgstr "E676: Pas d'autocommande correspondante pour le tampon acwrite"
-#: ../fileio.c:2466
msgid "E203: Autocommands deleted or unloaded buffer to be written"
msgstr "E203: Des autocommandes ont effacé ou déchargé le tampon à écrire"
-#: ../fileio.c:2486
msgid "E204: Autocommand changed number of lines in unexpected way"
msgstr ""
"E204: L'autocommande a modifié le nombre de lignes de manière inattendue"
-#: ../fileio.c:2548 ../fileio.c:2565
msgid "is not a file or writable device"
msgstr "n'est pas un fichier ou un périphérique inscriptible"
-#: ../fileio.c:2601
msgid "is read-only (add ! to override)"
msgstr "est en lecture seule (ajoutez ! pour passer outre)"
-#: ../fileio.c:2886
msgid "E506: Can't write to backup file (add ! to override)"
msgstr "E506: Impossible d'écrire la copie de secours (! pour passer outre)"
-#: ../fileio.c:2898
msgid "E507: Close error for backup file (add ! to override)"
msgstr "E507: Erreur de fermeture de la copie de secours (! pour passer outre)"
-#: ../fileio.c:2901
msgid "E508: Can't read file for backup (add ! to override)"
msgstr ""
"E508: Impossible de lire le fichier pour la copie de secours (ajoutez ! pour "
"passer outre)"
-#: ../fileio.c:2923
msgid "E509: Cannot create backup file (add ! to override)"
msgstr ""
"E509: Impossible de créer la copie de secours (ajoutez ! pour passer outre)"
-#: ../fileio.c:3008
msgid "E510: Can't make backup file (add ! to override)"
msgstr ""
"E510: Impossible de générer la copie de secours (ajoutez ! pour passer outre)"
#. Can't write without a tempfile!
-#: ../fileio.c:3121
msgid "E214: Can't find temp file for writing"
msgstr "E214: Impossible de générer un fichier temporaire pour y écrire"
-#: ../fileio.c:3134
msgid "E213: Cannot convert (add ! to write without conversion)"
msgstr "E213: Impossible de convertir (ajoutez ! pour écrire sans convertir)"
-#: ../fileio.c:3169
msgid "E166: Can't open linked file for writing"
msgstr "E166: Impossible d'ouvrir le lien pour y écrire"
-#: ../fileio.c:3173
msgid "E212: Can't open file for writing"
msgstr "E212: Impossible d'ouvrir le fichier pour y écrire"
-#: ../fileio.c:3363
msgid "E667: Fsync failed"
msgstr "E667: Fsynch a échoué"
-#: ../fileio.c:3398
msgid "E512: Close failed"
msgstr "E512: Erreur de fermeture de fichier"
-#: ../fileio.c:3436
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr ""
"E513: Erreur d'écriture, échec de conversion (videz 'fenc' pour passer outre)"
-#: ../fileio.c:3441
#, c-format
msgid ""
"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
@@ -2416,56 +1943,43 @@ msgstr ""
"E513: Erreur d'écriture, échec de conversion à la ligne %<PRId64> (videz "
"'fenc' pour passer outre)"
-#: ../fileio.c:3448
msgid "E514: write error (file system full?)"
msgstr "E514: erreur d'écriture (système de fichiers plein ?)"
-#: ../fileio.c:3506
msgid " CONVERSION ERROR"
msgstr " ERREUR DE CONVERSION"
-#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
msgstr " à la ligne %<PRId64>"
-#: ../fileio.c:3519
msgid "[Device]"
msgstr "[Périph.]"
-#: ../fileio.c:3522
msgid "[New]"
msgstr "[Nouveau]"
-#: ../fileio.c:3535
msgid " [a]"
msgstr " [a]"
-#: ../fileio.c:3535
msgid " appended"
msgstr " ajouté(s)"
-#: ../fileio.c:3537
msgid " [w]"
msgstr " [e]"
-#: ../fileio.c:3537
msgid " written"
msgstr " écrit(s)"
-#: ../fileio.c:3579
msgid "E205: Patchmode: can't save original file"
msgstr "E205: Patchmode : impossible d'enregistrer le fichier original"
-#: ../fileio.c:3602
msgid "E206: patchmode: can't touch empty original file"
msgstr "E206: patchmode : impossible de créer le fichier original vide"
-#: ../fileio.c:3616
msgid "E207: Can't delete backup file"
msgstr "E207: Impossible d'effacer la copie de secours"
-#: ../fileio.c:3672
msgid ""
"\n"
"WARNING: Original file may be lost or damaged\n"
@@ -2474,99 +1988,78 @@ msgstr ""
"ALERTE: Le fichier original est peut-être perdu ou endommagé\n"
# DB - todo : un peu long...
-#: ../fileio.c:3675
msgid "don't quit the editor until the file is successfully written!"
msgstr ""
"ne quittez pas l'éditeur tant que le fichier n'est pas correctement "
"enregistré !"
-#: ../fileio.c:3795
msgid "[dos]"
msgstr "[dos]"
-#: ../fileio.c:3795
msgid "[dos format]"
msgstr "[format dos]"
-#: ../fileio.c:3801
msgid "[mac]"
msgstr "[mac]"
-#: ../fileio.c:3801
msgid "[mac format]"
msgstr "[format mac]"
-#: ../fileio.c:3807
msgid "[unix]"
msgstr "[unix]"
-#: ../fileio.c:3807
msgid "[unix format]"
msgstr "[format unix]"
-#: ../fileio.c:3831
msgid "1 line, "
msgstr "1 ligne, "
-#: ../fileio.c:3833
#, c-format
msgid "%<PRId64> lines, "
msgstr "%<PRId64> lignes, "
-#: ../fileio.c:3836
msgid "1 character"
msgstr "1 caractère"
-#: ../fileio.c:3838
#, c-format
msgid "%<PRId64> characters"
msgstr "%<PRId64> caractères"
-#: ../fileio.c:3849
msgid "[noeol]"
msgstr "[noeol]"
-#: ../fileio.c:3849
msgid "[Incomplete last line]"
msgstr "[Dernière ligne incomplète]"
#. don't overwrite messages here
#. must give this prompt
#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
msgid "WARNING: The file has been changed since reading it!!!"
msgstr "ALERTE : Le fichier a été modifié depuis que Vim l'a lu !"
-#: ../fileio.c:3867
msgid "Do you really want to write to it"
msgstr "Voulez-vous vraiment écrire dedans"
-#: ../fileio.c:4648
#, c-format
msgid "E208: Error writing to \"%s\""
msgstr "E208: Erreur lors de l'écriture dans \"%s\""
-#: ../fileio.c:4655
#, c-format
msgid "E209: Error closing \"%s\""
msgstr "E209: Erreur lors de la fermeture de \"%s\""
-#: ../fileio.c:4657
#, c-format
msgid "E210: Error reading \"%s\""
msgstr "E210: Erreur lors de la lecture de \"%s\""
-#: ../fileio.c:4883
msgid "E246: FileChangedShell autocommand deleted buffer"
msgstr "E246: L'autocommande FileChangedShell a effacé le tampon"
-#: ../fileio.c:4894
#, c-format
msgid "E211: File \"%s\" no longer available"
msgstr "E211: Le fichier \"%s\" n'est plus disponible"
# DB - todo : Suggestion. Bof bof, à améliorer.
-#: ../fileio.c:4906
#, c-format
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
@@ -2574,40 +2067,32 @@ msgid ""
msgstr ""
"W12: Alerte : Le fichier \"%s\" a été modifié, ainsi que le tampon dans Vim"
-#: ../fileio.c:4907
msgid "See \":help W12\" for more info."
msgstr "Consultez \":help W12\" pour plus d'information."
-#: ../fileio.c:4910
#, c-format
msgid "W11: Warning: File \"%s\" has changed since editing started"
msgstr "W11: Alerte : Le fichier \"%s\" a changé depuis le début de l'édition"
-#: ../fileio.c:4911
msgid "See \":help W11\" for more info."
msgstr "Consultez \":help W11\" pour plus d'information."
-#: ../fileio.c:4914
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr ""
"W16: Alerte : Les permissions de \"%s\" ont changé depuis le début de "
"l'édition"
-#: ../fileio.c:4915
msgid "See \":help W16\" for more info."
msgstr "Consultez \":help W16\" pour plus d'information."
-#: ../fileio.c:4927
#, c-format
msgid "W13: Warning: File \"%s\" has been created after editing started"
msgstr "W13: Alerte : Le fichier \"%s\" a été créé après le début de l'édition"
-#: ../fileio.c:4947
msgid "Warning"
msgstr "Alerte"
-#: ../fileio.c:4948
msgid ""
"&OK\n"
"&Load File"
@@ -2615,48 +2100,39 @@ msgstr ""
"&Ok\n"
"&Charger le fichier"
-#: ../fileio.c:5065
#, c-format
msgid "E462: Could not prepare for reloading \"%s\""
msgstr "E462: Impossible de préparer le rechargement de \"%s\""
-#: ../fileio.c:5078
#, c-format
msgid "E321: Could not reload \"%s\""
msgstr "E321: Impossible de recharger \"%s\""
-#: ../fileio.c:5601
msgid "--Deleted--"
msgstr "--Effacé--"
-#: ../fileio.c:5732
#, c-format
msgid "auto-removing autocommand: %s <buffer=%d>"
msgstr "Autocommandes marquées pour auto-suppression : %s <tampon=%d>"
#. the group doesn't exist
-#: ../fileio.c:5772
#, c-format
msgid "E367: No such group: \"%s\""
msgstr "E367: Aucun groupe \"%s\""
-#: ../fileio.c:5897
#, c-format
msgid "E215: Illegal character after *: %s"
msgstr "E215: Caractère non valide après * : %s"
-#: ../fileio.c:5905
#, c-format
msgid "E216: No such event: %s"
msgstr "E216: Aucun événement %s"
-#: ../fileio.c:5907
#, c-format
msgid "E216: No such group or event: %s"
msgstr "E216: Aucun événement ou groupe %s"
#. Highlight title
-#: ../fileio.c:6090
msgid ""
"\n"
"--- Auto-Commands ---"
@@ -2664,102 +2140,80 @@ msgstr ""
"\n"
"--- Auto-commandes ---"
-#: ../fileio.c:6293
#, c-format
msgid "E680: <buffer=%d>: invalid buffer number "
msgstr "E680: <buffer=%d> : numéro de tampon invalide"
-#: ../fileio.c:6370
msgid "E217: Can't execute autocommands for ALL events"
msgstr ""
"E217: Impossible d'exécuter les autocommandes pour TOUS les événements (ALL)"
-#: ../fileio.c:6393
msgid "No matching autocommands"
msgstr "Aucune autocommande correspondante"
-#: ../fileio.c:6831
msgid "E218: autocommand nesting too deep"
msgstr "E218: autocommandes trop imbriquées"
-#: ../fileio.c:7143
#, c-format
msgid "%s Auto commands for \"%s\""
msgstr "Autocommandes %s pour \"%s\""
-#: ../fileio.c:7149
#, c-format
msgid "Executing %s"
msgstr "Exécution de %s"
-#: ../fileio.c:7211
#, c-format
msgid "autocommand %s"
msgstr "autocommande %s"
-#: ../fileio.c:7795
msgid "E219: Missing {."
msgstr "E219: { manquant."
-#: ../fileio.c:7797
msgid "E220: Missing }."
msgstr "E220: } manquant."
-#: ../fold.c:93
msgid "E490: No fold found"
msgstr "E490: Aucun repli trouvé"
-#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
msgstr "E350: Impossible de créer un repli avec la 'foldmethod'e actuelle"
-#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
msgstr "E351: Impossible de supprimer un repli avec la 'foldmethod'e actuelle"
-#: ../fold.c:1784
#, c-format
msgid "+--%3ld lines folded "
msgstr "+--%3ld lignes repliées "
#. buffer has already been read
-#: ../getchar.c:273
msgid "E222: Add to read buffer"
msgstr "E222: Ajout au tampon de lecture"
-#: ../getchar.c:2040
msgid "E223: recursive mapping"
msgstr "E223: mappage récursif"
-#: ../getchar.c:2849
#, c-format
msgid "E224: global abbreviation already exists for %s"
msgstr "E224: une abréviation globale existe déjà pour %s"
-#: ../getchar.c:2852
#, c-format
msgid "E225: global mapping already exists for %s"
msgstr "E225: un mappage global existe déjà pour %s"
-#: ../getchar.c:2952
#, c-format
msgid "E226: abbreviation already exists for %s"
msgstr "E226: une abréviation existe déjà pour %s"
-#: ../getchar.c:2955
#, c-format
msgid "E227: mapping already exists for %s"
msgstr "E227: un mappage existe déjà pour %s"
-#: ../getchar.c:3008
msgid "No abbreviation found"
msgstr "Aucune abréviation trouvée"
-#: ../getchar.c:3010
msgid "No mapping found"
msgstr "Aucun mappage trouvé"
-#: ../getchar.c:3974
msgid "E228: makemap: Illegal mode"
msgstr "E228: makemap : mode invalide"
@@ -2768,7 +2222,6 @@ msgstr "E228: makemap : mode invalide"
#. key value of 'cedit' option
#. type of cmdline window or 0
#. result of cmdline window or 0
-#: ../globals.h:924
msgid "--No lines in buffer--"
msgstr "--Le tampon est vide--"
@@ -2776,667 +2229,510 @@ msgstr "--Le tampon est vide--"
#. * The error messages that can be shared are included here.
#. * Excluded are errors that are only used once and debugging messages.
#.
-#: ../globals.h:996
msgid "E470: Command aborted"
msgstr "E470: Commande annulée"
-#: ../globals.h:997
msgid "E471: Argument required"
msgstr "E471: Argument requis"
-#: ../globals.h:998
msgid "E10: \\ should be followed by /, ? or &"
msgstr "E10: \\ devrait être suivi de /, ? ou &"
-#: ../globals.h:1000
msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
msgstr ""
"E11: Invalide dans la fenêtre ligne-de-commande ; <CR> exécute, CTRL-C quitte"
-#: ../globals.h:1002
msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
msgstr ""
"E12: commande non autorisée depuis un exrc/vimrc dans répertoire courant ou "
"une recherche de marqueur"
-#: ../globals.h:1003
msgid "E171: Missing :endif"
msgstr "E171: :endif manquant"
-#: ../globals.h:1004
msgid "E600: Missing :endtry"
msgstr "E600: :endtry manquant"
-#: ../globals.h:1005
msgid "E170: Missing :endwhile"
msgstr "E170: :endwhile manquant"
-#: ../globals.h:1006
msgid "E170: Missing :endfor"
msgstr "E170: :endfor manquant"
-#: ../globals.h:1007
msgid "E588: :endwhile without :while"
msgstr "E588: :endwhile sans :while"
-#: ../globals.h:1008
msgid "E588: :endfor without :for"
msgstr "E588: :endfor sans :for"
-#: ../globals.h:1009
msgid "E13: File exists (add ! to override)"
msgstr "E13: Le fichier existe déjà (ajoutez ! pour passer outre)"
-#: ../globals.h:1010
msgid "E472: Command failed"
msgstr "E472: La commande a échoué"
-#: ../globals.h:1011
msgid "E473: Internal error"
msgstr "E473: Erreur interne"
-#: ../globals.h:1012
msgid "Interrupted"
msgstr "Interrompu"
-#: ../globals.h:1013
msgid "E14: Invalid address"
msgstr "E14: Adresse invalide"
-#: ../globals.h:1014
msgid "E474: Invalid argument"
msgstr "E474: Argument invalide"
-#: ../globals.h:1015
#, c-format
msgid "E475: Invalid argument: %s"
msgstr "E475: Argument invalide : %s"
-#: ../globals.h:1016
#, c-format
msgid "E15: Invalid expression: %s"
msgstr "E15: Expression invalide : %s"
-#: ../globals.h:1017
msgid "E16: Invalid range"
msgstr "E16: Plage invalide"
-#: ../globals.h:1018
msgid "E476: Invalid command"
msgstr "E476: Commande invalide"
-#: ../globals.h:1019
#, c-format
msgid "E17: \"%s\" is a directory"
msgstr "E17: \"%s\" est un répertoire"
-#: ../globals.h:1020
#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Valeur de défilement invalide"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
+#~ msgid "E900: Invalid job id"
+#~ msgstr "E49: Valeur de défilement invalide"
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
+#~ msgid "E901: Job table is full"
+#~ msgstr ""
-#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
msgstr "E364: L'appel à la bibliothèque a échoué pour \"%s()\""
-#: ../globals.h:1026
msgid "E19: Mark has invalid line number"
msgstr "E19: La marque a un numéro de ligne invalide"
-#: ../globals.h:1027
msgid "E20: Mark not set"
msgstr "E20: Marque non positionnée"
-#: ../globals.h:1029
msgid "E21: Cannot make changes, 'modifiable' is off"
msgstr "E21: Impossible de modifier, 'modifiable' est désactivé"
-#: ../globals.h:1030
msgid "E22: Scripts nested too deep"
msgstr "E22: Trop de récursion dans les scripts"
-#: ../globals.h:1031
msgid "E23: No alternate file"
msgstr "E23: Pas de fichier alternatif"
-#: ../globals.h:1032
msgid "E24: No such abbreviation"
msgstr "E24: Cette abréviation n'existe pas"
-#: ../globals.h:1033
msgid "E477: No ! allowed"
msgstr "E477: Le ! n'est pas autorisé"
-#: ../globals.h:1035
msgid "E25: Nvim does not have a built-in GUI"
msgstr "E25: L'interface graphique n'a pas été compilée dans cette version"
-#: ../globals.h:1036
#, c-format
msgid "E28: No such highlight group name: %s"
msgstr "E28: Aucun nom de groupe de surbrillance %s"
-#: ../globals.h:1037
msgid "E29: No inserted text yet"
msgstr "E29: Pas encore de texte inséré"
-#: ../globals.h:1038
msgid "E30: No previous command line"
msgstr "E30: Aucune ligne de commande précédente"
-#: ../globals.h:1039
msgid "E31: No such mapping"
msgstr "E31: Mappage inexistant"
-#: ../globals.h:1040
msgid "E479: No match"
msgstr "E479: Aucune correspondance"
-#: ../globals.h:1041
#, c-format
msgid "E480: No match: %s"
msgstr "E480: Aucune correspondance : %s"
-#: ../globals.h:1042
msgid "E32: No file name"
msgstr "E32: Aucun nom de fichier"
-#: ../globals.h:1044
msgid "E33: No previous substitute regular expression"
msgstr "E33: Aucune expression régulière de substitution précédente"
-#: ../globals.h:1045
msgid "E34: No previous command"
msgstr "E34: Aucune commande précédente"
-#: ../globals.h:1046
msgid "E35: No previous regular expression"
msgstr "E35: Aucune expression régulière précédente"
-#: ../globals.h:1047
msgid "E481: No range allowed"
msgstr "E481: Les plages ne sont pas autorisées"
-#: ../globals.h:1048
msgid "E36: Not enough room"
msgstr "E36: Pas assez de place"
-#: ../globals.h:1049
#, c-format
msgid "E482: Can't create file %s"
msgstr "E482: Impossible de créer le fichier %s"
-#: ../globals.h:1050
msgid "E483: Can't get temp file name"
msgstr "E483: Impossible d'obtenir un nom de fichier temporaire"
-#: ../globals.h:1051
#, c-format
msgid "E484: Can't open file %s"
msgstr "E484: Impossible d'ouvrir le fichier \"%s\""
-#: ../globals.h:1052
#, c-format
msgid "E485: Can't read file %s"
msgstr "E485: Impossible de lire le fichier %s"
-#: ../globals.h:1054
msgid "E37: No write since last change (add ! to override)"
msgstr "E37: Modifications non enregistrées (ajoutez ! pour passer outre)"
# AB - Il faut respecter l'esprit plus que la lettre. Dans le cas présent,
# nettement plus.
-#: ../globals.h:1055
#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Attention : tout n'est pas enregistré]\n"
+#~ msgid "E37: No write since last change"
+#~ msgstr "[Attention : tout n'est pas enregistré]\n"
-#: ../globals.h:1056
msgid "E38: Null argument"
msgstr "E38: Argument null"
-#: ../globals.h:1057
msgid "E39: Number expected"
msgstr "E39: Nombre attendu"
-#: ../globals.h:1058
#, c-format
msgid "E40: Can't open errorfile %s"
msgstr "E40: Impossible d'ouvrir le fichier d'erreurs %s"
-#: ../globals.h:1059
msgid "E41: Out of memory!"
msgstr "E41: Mémoire épuisée"
-#: ../globals.h:1060
msgid "Pattern not found"
msgstr "Motif introuvable"
-#: ../globals.h:1061
#, c-format
msgid "E486: Pattern not found: %s"
msgstr "E486: Motif introuvable : %s"
-#: ../globals.h:1062
msgid "E487: Argument must be positive"
msgstr "E487: L'argument doit être positif"
-#: ../globals.h:1064
msgid "E459: Cannot go back to previous directory"
msgstr "E459: Impossible de retourner au répertoire précédent"
-#: ../globals.h:1066
msgid "E42: No Errors"
msgstr "E42: Aucune erreur"
# DB - TODO : trouver une traduction valable et attestée pour "location".
-#: ../globals.h:1067
msgid "E776: No location list"
msgstr "E776: Aucune liste d'emplacements"
-#: ../globals.h:1068
msgid "E43: Damaged match string"
msgstr "E43: La chaîne de recherche est endommagée"
-#: ../globals.h:1069
msgid "E44: Corrupted regexp program"
msgstr "E44: L'automate de regexp est corrompu"
-#: ../globals.h:1071
msgid "E45: 'readonly' option is set (add ! to override)"
msgstr "E45: L'option 'readonly' est activée (ajoutez ! pour passer outre)"
-#: ../globals.h:1073
#, c-format
msgid "E46: Cannot change read-only variable \"%s\""
msgstr "E46: La variable \"%s\" est en lecture seule"
-#: ../globals.h:1075
#, c-format
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr ""
"E794: Impossible de modifier une variable depuis le bac à sable : \"%s\""
-#: ../globals.h:1076
msgid "E47: Error while reading errorfile"
msgstr "E47: Erreur lors de la lecture du fichier d'erreurs"
-#: ../globals.h:1078
msgid "E48: Not allowed in sandbox"
msgstr "E48: Opération interdite dans le bac à sable"
-#: ../globals.h:1080
msgid "E523: Not allowed here"
msgstr "E523: Interdit à cet endroit"
-#: ../globals.h:1082
msgid "E359: Screen mode setting not supported"
msgstr "E359: Choix du mode d'écran non supporté"
-#: ../globals.h:1083
msgid "E49: Invalid scroll size"
msgstr "E49: Valeur de défilement invalide"
-#: ../globals.h:1084
msgid "E91: 'shell' option is empty"
msgstr "E91: L'option 'shell' est vide"
-#: ../globals.h:1085
msgid "E255: Couldn't read in sign data!"
msgstr "E255: Impossible de lire les données du symbole !"
-#: ../globals.h:1086
msgid "E72: Close error on swap file"
msgstr "E72: Erreur lors de la fermeture du fichier d'échange"
-#: ../globals.h:1087
msgid "E73: tag stack empty"
msgstr "E73: La pile des marqueurs est vide"
-#: ../globals.h:1088
msgid "E74: Command too complex"
msgstr "E74: Commande trop complexe"
-#: ../globals.h:1089
msgid "E75: Name too long"
msgstr "E75: Nom trop long"
-#: ../globals.h:1090
msgid "E76: Too many ["
msgstr "E76: Trop de ["
-#: ../globals.h:1091
msgid "E77: Too many file names"
msgstr "E77: Trop de noms de fichiers"
-#: ../globals.h:1092
msgid "E488: Trailing characters"
msgstr "E488: Caractères surnuméraires"
-#: ../globals.h:1093
msgid "E78: Unknown mark"
msgstr "E78: Marque inconnue"
-#: ../globals.h:1094
msgid "E79: Cannot expand wildcards"
msgstr "E79: Impossible de développer les métacaractères"
-#: ../globals.h:1096
msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
msgstr "E591: 'winheight' ne peut pas être plus petit que 'winminheight'"
-#: ../globals.h:1098
msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
msgstr "E592: 'winwidth' ne peut pas être plus petit que 'winminwidth'"
-#: ../globals.h:1099
msgid "E80: Error while writing"
msgstr "E80: Erreur lors de l'écriture"
-#: ../globals.h:1100
msgid "Zero count"
msgstr "Le quantificateur est nul"
-#: ../globals.h:1101
msgid "E81: Using <SID> not in a script context"
msgstr "E81: <SID> utilisé en dehors d'un script"
-#: ../globals.h:1102
#, c-format
msgid "E685: Internal error: %s"
msgstr "E685: Erreur interne : %s"
-#: ../globals.h:1104
msgid "E363: pattern uses more memory than 'maxmempattern'"
msgstr "E363: le motif utilise plus de mémoire que 'maxmempattern'"
-#: ../globals.h:1105
msgid "E749: empty buffer"
msgstr "E749: tampon vide"
-#: ../buffer.c:1587
#, c-format
msgid "E86: Buffer %<PRId64> does not exist"
msgstr "E86: Le tampon %<PRId64> n'existe pas"
-#: ../globals.h:1108
msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: Délimiteur ou motif de recherche invalide"
-#: ../globals.h:1109
msgid "E139: File is loaded in another buffer"
msgstr "E139: Le fichier est chargé dans un autre tampon"
-#: ../globals.h:1110
#, c-format
msgid "E764: Option '%s' is not set"
msgstr "E764: L'option '%s' n'est pas activée"
-#: ../globals.h:1111
msgid "E850: Invalid register name"
msgstr "E850: Nom de registre invalide"
-#: ../globals.h:1114
msgid "search hit TOP, continuing at BOTTOM"
msgstr "La recherche a atteint le HAUT, et continue en BAS"
-#: ../globals.h:1115
msgid "search hit BOTTOM, continuing at TOP"
msgstr "La recherche a atteint le BAS, et continue en HAUT"
-#: ../hardcopy.c:240
msgid "E550: Missing colon"
msgstr "E550: ':' manquant"
# DB - Il s'agit ici d'un problème lors du parsing d'une option dont le contenu
# est une liste d'éléments séparés par des virgules.
-#: ../hardcopy.c:252
msgid "E551: Illegal component"
msgstr "E551: élément invalide"
-#: ../hardcopy.c:259
msgid "E552: digit expected"
msgstr "E552: chiffre attendu"
-#: ../hardcopy.c:473
#, c-format
msgid "Page %d"
msgstr "Page %d"
-#: ../hardcopy.c:597
msgid "No text to be printed"
msgstr "Aucun texte à imprimer"
-#: ../hardcopy.c:668
#, c-format
msgid "Printing page %d (%d%%)"
msgstr "Impression de la page %d (%d%%)"
-#: ../hardcopy.c:680
#, c-format
msgid " Copy %d of %d"
msgstr " Copie %d sur %d"
-#: ../hardcopy.c:733
#, c-format
msgid "Printed: %s"
msgstr "Imprimé : %s"
-#: ../hardcopy.c:740
msgid "Printing aborted"
msgstr "Impression interrompue"
-#: ../hardcopy.c:1365
msgid "E455: Error writing to PostScript output file"
msgstr "E455: Erreur lors de l'écriture du fichier PostScript"
-#: ../hardcopy.c:1747
#, c-format
msgid "E624: Can't open file \"%s\""
msgstr "E624: Impossible d'ouvrir le fichier \"%s\""
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
#, c-format
msgid "E457: Can't read PostScript resource file \"%s\""
msgstr "E457: Impossible de lire le fichier de ressource PostScript \"%s\""
-#: ../hardcopy.c:1772
#, c-format
msgid "E618: file \"%s\" is not a PostScript resource file"
msgstr "E618: \"%s\" n'est pas un fichier de ressource PostScript"
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
#, c-format
msgid "E619: file \"%s\" is not a supported PostScript resource file"
msgstr "E619: \"%s\" n'est pas un fichier de ressource PostScript supporté"
-#: ../hardcopy.c:1856
#, c-format
msgid "E621: \"%s\" resource file has wrong version"
msgstr "E621: La version du fichier de ressource \"%s\" est erronée"
-#: ../hardcopy.c:2225
msgid "E673: Incompatible multi-byte encoding and character set."
msgstr "E673: Jeu de caractères et encodage multi-octets incompatibles"
-#: ../hardcopy.c:2238
msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
msgstr ""
"E674: 'printmbcharset' ne peut pas être vide avec un encodage multi-octets"
-#: ../hardcopy.c:2254
msgid "E675: No default font specified for multi-byte printing."
msgstr "E675: Aucune police par défaut pour l'impression multi-octets"
-#: ../hardcopy.c:2426
msgid "E324: Can't open PostScript output file"
msgstr "E324: Impossible d'ouvrir le fichier PostScript de sortie"
-#: ../hardcopy.c:2458
#, c-format
msgid "E456: Can't open file \"%s\""
msgstr "E456: Impossible d'ouvrir le fichier \"%s\""
-#: ../hardcopy.c:2583
msgid "E456: Can't find PostScript resource file \"prolog.ps\""
msgstr "E456: Le fichier de ressource PostScript \"prolog.ps\" est introuvable"
-#: ../hardcopy.c:2593
msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
msgstr ""
"E456: Le fichier de ressource PostScript \"cidfont.ps\" est introuvable"
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
#, c-format
msgid "E456: Can't find PostScript resource file \"%s.ps\""
msgstr "E456: Le fichier de ressource PostScript \"%s.ps\" est introuvable"
-#: ../hardcopy.c:2654
#, c-format
msgid "E620: Unable to convert to print encoding \"%s\""
msgstr "E620: La conversion pour imprimer dans l'encodage \"%s\" a échoué"
-#: ../hardcopy.c:2877
msgid "Sending to printer..."
msgstr "Envoi à l'imprimante..."
-#: ../hardcopy.c:2881
msgid "E365: Failed to print PostScript file"
msgstr "E365: L'impression du fichier PostScript a échoué"
-#: ../hardcopy.c:2883
msgid "Print job sent."
msgstr "Tâche d'impression envoyée."
-#: ../if_cscope.c:85
msgid "Add a new database"
msgstr "Ajouter une base de données"
-#: ../if_cscope.c:87
msgid "Query for a pattern"
msgstr "Rechercher un motif"
-#: ../if_cscope.c:89
msgid "Show this message"
msgstr "Afficher ce message"
-#: ../if_cscope.c:91
msgid "Kill a connection"
msgstr "Fermer une connexion"
-#: ../if_cscope.c:93
msgid "Reinit all connections"
msgstr "Réinitialiser toutes les connexions"
-#: ../if_cscope.c:95
msgid "Show connections"
msgstr "Afficher les connexions"
-#: ../if_cscope.c:101
#, c-format
msgid "E560: Usage: cs[cope] %s"
msgstr "E560: Utilisation : cs[cope] %s"
-#: ../if_cscope.c:225
msgid "This cscope command does not support splitting the window.\n"
msgstr "Cette commande cscope ne supporte pas le partage de la fenêtre.\n"
-#: ../if_cscope.c:266
msgid "E562: Usage: cstag <ident>"
msgstr "E562: Utilisation : cstag <ident>"
-#: ../if_cscope.c:313
msgid "E257: cstag: tag not found"
msgstr "E257: cstag : marqueur introuvable"
-#: ../if_cscope.c:461
#, c-format
msgid "E563: stat(%s) error: %d"
msgstr "E563: Erreur stat(%s) : %d"
-#: ../if_cscope.c:551
#, c-format
msgid "E564: %s is not a directory or a valid cscope database"
msgstr "E564: %s n'est pas un répertoire ou une base de données cscope valide"
-#: ../if_cscope.c:566
#, c-format
msgid "Added cscope database %s"
msgstr "Base de données cscope %s ajoutée"
-#: ../if_cscope.c:616
#, c-format
msgid "E262: error reading cscope connection %<PRId64>"
msgstr "E262: erreur lors de la lecture de la connexion cscope %<PRId64>"
-#: ../if_cscope.c:711
msgid "E561: unknown cscope search type"
msgstr "E561: type de recherche cscope inconnu"
-#: ../if_cscope.c:752 ../if_cscope.c:789
msgid "E566: Could not create cscope pipes"
msgstr "E566: Impossible de créer les tuyaux (pipes) cscope"
-#: ../if_cscope.c:767
msgid "E622: Could not fork for cscope"
msgstr "E622: Impossible de forker pour cscope"
-#: ../if_cscope.c:849
#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "exec de cs_create_connection a échoué"
+#~ msgid "cs_create_connection setpgid failed"
+#~ msgstr "exec de cs_create_connection a échoué"
-#: ../if_cscope.c:853 ../if_cscope.c:889
msgid "cs_create_connection exec failed"
msgstr "exec de cs_create_connection a échoué"
-#: ../if_cscope.c:863 ../if_cscope.c:902
msgid "cs_create_connection: fdopen for to_fp failed"
msgstr "cs_create_connection : fdopen pour to_fp a échoué"
-#: ../if_cscope.c:865 ../if_cscope.c:906
msgid "cs_create_connection: fdopen for fr_fp failed"
msgstr "cs_create_connection : fdopen pour fr_fp a échoué"
-#: ../if_cscope.c:890
msgid "E623: Could not spawn cscope process"
msgstr "E623: Impossible d'engendrer le processus cscope"
-#: ../if_cscope.c:932
msgid "E567: no cscope connections"
msgstr "E567: Aucune connexion cscope"
-#: ../if_cscope.c:1009
#, c-format
msgid "E469: invalid cscopequickfix flag %c for %c"
msgstr "E469: Drapeau cscopequickfix %c invalide pour %c"
# DB - todo
-#: ../if_cscope.c:1058
#, c-format
msgid "E259: no matches found for cscope query %s of %s"
msgstr "E259: aucune correspondance trouvée pour la requête cscope %s de %s"
-#: ../if_cscope.c:1142
msgid "cscope commands:\n"
msgstr "commandes cscope :\n"
-#: ../if_cscope.c:1150
#, c-format
msgid "%-5s: %s%*s (Usage: %s)"
msgstr "%-5s: %s%*s (Utilisation : %s)"
-#: ../if_cscope.c:1155
msgid ""
"\n"
" c: Find functions calling this function\n"
@@ -3447,6 +2743,7 @@ msgid ""
" i: Find files #including this file\n"
" s: Find this C symbol\n"
" t: Find this text string\n"
+" a: Find assignments to this symbol\n"
msgstr ""
"\n"
" c: Trouver les fonctions appelant cette fonction\n"
@@ -3457,32 +2754,27 @@ msgstr ""
" i: Trouver les fichiers qui #incluent ce fichier\n"
" s: Trouver ce symbole C\n"
" t: Trouver cette chaîne\n"
+" a: Trouver les assignements à ce symbole\n"
-#: ../if_cscope.c:1226
msgid "E568: duplicate cscope database not added"
msgstr "E568: base de données cscope redondante non ajoutée"
-#: ../if_cscope.c:1335
#, c-format
msgid "E261: cscope connection %s not found"
msgstr "E261: Connexion cscope %s introuvable"
-#: ../if_cscope.c:1364
#, c-format
msgid "cscope connection %s closed"
msgstr "connexion cscope %s fermée"
#. should not reach here
-#: ../if_cscope.c:1486
msgid "E570: fatal error in cs_manage_matches"
msgstr "E570: erreur fatale dans cs_manage_matches"
-#: ../if_cscope.c:1693
#, c-format
msgid "Cscope tag: %s"
msgstr "Marqueur cscope : %s"
-#: ../if_cscope.c:1711
msgid ""
"\n"
" # line"
@@ -3491,87 +2783,67 @@ msgstr ""
" # ligne"
# DB - todo : Faut-il respecter l'alignement ici ?
-#: ../if_cscope.c:1713
msgid "filename / context / line\n"
msgstr "nom / contexte/ ligne\n"
-#: ../if_cscope.c:1809
#, c-format
msgid "E609: Cscope error: %s"
msgstr "E609: Erreur cscope : %s"
-#: ../if_cscope.c:2053
msgid "All cscope databases reset"
msgstr "Toutes les bases de données cscope ont été réinitialisées"
-#: ../if_cscope.c:2123
msgid "no cscope connections\n"
msgstr "aucune connexion cscope\n"
-#: ../if_cscope.c:2126
msgid " # pid database name prepend path\n"
msgstr " # pid nom de la base de données chemin\n"
-#: ../main.c:144
msgid "Unknown option argument"
msgstr "Option inconnue"
-#: ../main.c:146
msgid "Too many edit arguments"
msgstr "Trop d'arguments d'édition"
-#: ../main.c:148
msgid "Argument missing after"
msgstr "Argument manquant après"
-#: ../main.c:150
msgid "Garbage after option argument"
msgstr "arguments en trop après l'option"
-#: ../main.c:152
msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
msgstr "Trop d'arguments \"+command\", \"-c command\" ou \"--cmd command\""
-#: ../main.c:154
msgid "Invalid argument for"
msgstr "Argument invalide pour"
-#: ../main.c:294
#, c-format
msgid "%d files to edit\n"
msgstr "%d fichiers à éditer\n"
-#: ../main.c:1342
msgid "Attempt to open script file again: \""
msgstr "Nouvelle tentative pour ouvrir le script : \""
-#: ../main.c:1350
msgid "Cannot open for reading: \""
msgstr "Impossible d'ouvrir en lecture : \""
-#: ../main.c:1393
msgid "Cannot open for script output: \""
msgstr "Impossible d'ouvrir pour la sortie script : \""
-#: ../main.c:1622
msgid "Vim: Warning: Output is not to a terminal\n"
msgstr "Vim : Alerte : La sortie ne s'effectue pas sur un terminal\n"
-#: ../main.c:1624
msgid "Vim: Warning: Input is not from a terminal\n"
msgstr "Vim : Alerte : L'entrée ne se fait pas sur un terminal\n"
#. just in case..
-#: ../main.c:1891
msgid "pre-vimrc command line"
msgstr "ligne de commande pre-vimrc"
-#: ../main.c:1964
#, c-format
msgid "E282: Cannot read from \"%s\""
msgstr "E282: Impossible de lire \"%s\""
-#: ../main.c:2149
msgid ""
"\n"
"More info with: \"vim -h\"\n"
@@ -3579,23 +2851,18 @@ msgstr ""
"\n"
"Plus d'info avec : \"vim -h\"\n"
-#: ../main.c:2178
msgid "[file ..] edit specified file(s)"
msgstr "[fichier ...] ouvrir le ou les fichiers spécifiés"
-#: ../main.c:2179
msgid "- read text from stdin"
msgstr "- lire le texte à partir de stdin"
-#: ../main.c:2180
msgid "-t tag edit file where tag is defined"
msgstr "-t marqueur ouvrir le fichier qui contient le marqueur"
-#: ../main.c:2181
msgid "-q [errorfile] edit file with first error"
msgstr "-q [fichErr] ouvrir à l'endroit de la première erreur"
-#: ../main.c:2187
msgid ""
"\n"
"\n"
@@ -3605,11 +2872,9 @@ msgstr ""
"\n"
"utilisation :"
-#: ../main.c:2189
msgid " vim [arguments] "
msgstr " vim [args] "
-#: ../main.c:2193
msgid ""
"\n"
" or:"
@@ -3617,7 +2882,6 @@ msgstr ""
"\n"
" ou :"
-#: ../main.c:2196
msgid ""
"\n"
"\n"
@@ -3627,192 +2891,146 @@ msgstr ""
"\n"
"Arguments :\n"
-#: ../main.c:2197
msgid "--\t\t\tOnly file names after this"
msgstr "--\t\tSeuls des noms de fichier sont spécifiés après ceci"
-#: ../main.c:2199
msgid "--literal\t\tDon't expand wildcards"
msgstr "--literal\tNe pas développer les métacaractères"
-#: ../main.c:2201
msgid "-v\t\t\tVi mode (like \"vi\")"
msgstr "-v\t\tMode Vi (comme \"vi\")"
-#: ../main.c:2202
msgid "-e\t\t\tEx mode (like \"ex\")"
msgstr "-e\t\tMode Ex (comme \"ex\")"
-#: ../main.c:2203
msgid "-E\t\t\tImproved Ex mode"
msgstr "-E\t\t\tMode Ex amélioré"
-#: ../main.c:2204
msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
msgstr "-s\t\tMode silencieux (batch) (seulement pour \"ex\")"
-#: ../main.c:2205
msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
msgstr "-d\t\tMode diff (comme \"vimdiff\")"
-#: ../main.c:2206
msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
msgstr "-y\t\tMode facile (comme \"evim\", vim sans modes)"
-#: ../main.c:2207
msgid "-R\t\t\tReadonly mode (like \"view\")"
msgstr "-R\t\tMode lecture seule (comme \"view\")"
-#: ../main.c:2208
msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
msgstr "-Z\t\tMode restreint (comme \"rvim\")"
-#: ../main.c:2209
msgid "-m\t\t\tModifications (writing files) not allowed"
msgstr "-m\t\tInterdire l'enregistrement des fichiers"
-#: ../main.c:2210
msgid "-M\t\t\tModifications in text not allowed"
msgstr "-M\t\tInterdire toute modification de texte"
-#: ../main.c:2211
msgid "-b\t\t\tBinary mode"
msgstr "-b\t\tMode binaire"
-#: ../main.c:2212
msgid "-l\t\t\tLisp mode"
msgstr "-l\t\tMode lisp"
-#: ../main.c:2213
msgid "-C\t\t\tCompatible with Vi: 'compatible'"
msgstr "-C\t\tCompatible avec Vi : 'compatible'"
-#: ../main.c:2214
msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
msgstr "-N\t\tPas totalement compatible avec Vi : 'nocompatible'"
-#: ../main.c:2215
msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
msgstr "-V[N][<fichier>]\tMode verbeux [niveau N] [dans <fichier>]"
-#: ../main.c:2216
msgid "-D\t\t\tDebugging mode"
msgstr "-D\t\tMode débogage"
-#: ../main.c:2217
msgid "-n\t\t\tNo swap file, use memory only"
msgstr "-n\t\tNe pas utiliser de fichier d'échange, seulement la mémoire"
-#: ../main.c:2218
msgid "-r\t\t\tList swap files and exit"
msgstr "-r\t\tLister les fichiers d'échange et quitter"
-#: ../main.c:2219
msgid "-r (with file name)\tRecover crashed session"
msgstr "-r <fichier>\tRécupérer une session plantée"
-#: ../main.c:2220
msgid "-L\t\t\tSame as -r"
msgstr "-L\t\tComme -r"
-#: ../main.c:2221
msgid "-A\t\t\tstart in Arabic mode"
msgstr "-A\t\tDémarrer en mode arabe"
-#: ../main.c:2222
msgid "-H\t\t\tStart in Hebrew mode"
msgstr "-H\t\tDémarrer en mode hébreu"
-#: ../main.c:2223
msgid "-F\t\t\tStart in Farsi mode"
msgstr "-F\t\tDémarrer en mode farsi"
-#: ../main.c:2224
msgid "-T <terminal>\tSet terminal type to <terminal>"
msgstr "-T <term>\tRégler le type du terminal sur <terminal>"
-#: ../main.c:2225
msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
msgstr "-u <vimrc>\tUtiliser <vimrc> au lieu du vimrc habituel"
-#: ../main.c:2226
msgid "--noplugin\t\tDon't load plugin scripts"
msgstr "--noplugin\tNe charger aucun greffon"
-#: ../main.c:2227
msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
msgstr "-p[N]\tOuvrir N onglets (défaut : un pour chaque fichier)"
-#: ../main.c:2228
msgid "-o[N]\t\tOpen N windows (default: one for each file)"
msgstr "-o[N]\tOuvrir N fenêtres (défaut : une pour chaque fichier)"
-#: ../main.c:2229
msgid "-O[N]\t\tLike -o but split vertically"
msgstr "-O[N]\tComme -o, mais partager verticalement"
-#: ../main.c:2230
msgid "+\t\t\tStart at end of file"
msgstr "+\t\tOuvrir à la fin du fichier"
-#: ../main.c:2231
msgid "+<lnum>\t\tStart at line <lnum>"
msgstr "+<numL>\tOuvrir le fichier à la ligne <numL>"
-#: ../main.c:2232
msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
msgstr "--cmd <cmde>\tExécuter <commande> avant de charger les fichiers vimrc"
-#: ../main.c:2233
msgid "-c <command>\t\tExecute <command> after loading the first file"
msgstr "-c <cmde>\tExécuter <commande> une fois le 1er fichier chargé"
-#: ../main.c:2235
msgid "-S <session>\t\tSource file <session> after loading the first file"
msgstr ""
"-S <session>\tSourcer le fichier <session> une fois le 1er fichier chargé"
-#: ../main.c:2236
msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
msgstr "-s <src>\tLire les commandes du mode Normal à partir du fichier <src>"
-#: ../main.c:2237
msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
msgstr "-w <dest>\tAjouter toutes les commandes tapées dans le fichier <dest>"
-#: ../main.c:2238
msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
msgstr "-W <dest>\tÉcrire toutes les commandes tapées dans le fichier <dest>"
-#: ../main.c:2240
msgid "--startuptime <file>\tWrite startup timing messages to <file>"
msgstr ""
"--startuptime <fich>\tÉcrire les messages d'horodatage au démarrage dans "
"<fich>"
-#: ../main.c:2242
msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
msgstr "-i <viminfo>\t\tUtiliser <viminfo> au lieu du viminfo habituel"
-#: ../main.c:2243
msgid "-h or --help\tPrint Help (this message) and exit"
msgstr "-h ou --help\t\tAfficher l'aide (ce message) puis quitter"
-#: ../main.c:2244
msgid "--version\t\tPrint version information and exit"
msgstr "--version\t\tAfficher les informations de version et quitter"
-#: ../mark.c:676
msgid "No marks set"
msgstr "Aucune marque positionnée"
-#: ../mark.c:678
#, c-format
msgid "E283: No marks matching \"%s\""
msgstr "E283: Aucune marque ne correspond à \"%s\""
#. Highlight title
-#: ../mark.c:687
msgid ""
"\n"
"mark line col file/text"
@@ -3821,7 +3039,6 @@ msgstr ""
"marq ligne col fichier/texte"
#. Highlight title
-#: ../mark.c:789
msgid ""
"\n"
" jump line col file/text"
@@ -3830,7 +3047,6 @@ msgstr ""
" saut ligne col fichier/texte"
#. Highlight title
-#: ../mark.c:831
msgid ""
"\n"
"change line col text"
@@ -3838,7 +3054,6 @@ msgstr ""
"\n"
"modif ligne col fichier/texte"
-#: ../mark.c:1238
msgid ""
"\n"
"# File marks:\n"
@@ -3847,7 +3062,6 @@ msgstr ""
"# Marques dans le fichier :\n"
#. Write the jumplist with -'
-#: ../mark.c:1271
msgid ""
"\n"
"# Jumplist (newest first):\n"
@@ -3855,7 +3069,6 @@ msgstr ""
"\n"
"# Liste de sauts (le plus récent en premier) :\n"
-#: ../mark.c:1352
msgid ""
"\n"
"# History of marks within files (newest to oldest):\n"
@@ -3863,84 +3076,65 @@ msgstr ""
"\n"
"# Historique des marques dans les fichiers (les plus récentes en premier) :\n"
-#: ../mark.c:1431
msgid "Missing '>'"
msgstr "'>' manquant"
-#: ../memfile.c:426
msgid "E293: block was not locked"
msgstr "E293: le bloc n'était pas verrouillé"
-#: ../memfile.c:799
msgid "E294: Seek error in swap file read"
msgstr "E294: Erreur de positionnement lors de la lecture du fichier d'échange"
-#: ../memfile.c:803
msgid "E295: Read error in swap file"
msgstr "E295: Erreur de lecture dans le fichier d'échange"
-#: ../memfile.c:849
msgid "E296: Seek error in swap file write"
msgstr "E296: Erreur de positionnement lors de l'écriture du fichier d'échange"
-#: ../memfile.c:865
msgid "E297: Write error in swap file"
msgstr "E297: Erreur d'écriture dans le fichier d'échange"
-#: ../memfile.c:1036
msgid "E300: Swap file already exists (symlink attack?)"
msgstr "E300: Le fichier d'échange existe déjà (attaque par symlink ?)"
-#: ../memline.c:318
msgid "E298: Didn't get block nr 0?"
msgstr "E298: Bloc n°0 non récupéré ?"
-#: ../memline.c:361
msgid "E298: Didn't get block nr 1?"
msgstr "E298: Bloc n°1 non récupéré ?"
-#: ../memline.c:377
msgid "E298: Didn't get block nr 2?"
msgstr "E298: Bloc n°2 non récupéré ?"
#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
msgid "E301: Oops, lost the swap file!!!"
msgstr "E301: Oups, le fichier d'échange a disparu !"
-#: ../memline.c:477
msgid "E302: Could not rename swap file"
msgstr "E302: Impossible de renommer le fichier d'échange"
-#: ../memline.c:554
#, c-format
msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
msgstr "E303: Impossible d'ouvrir fichier .swp pour \"%s\", récup. impossible"
-#: ../memline.c:666
msgid "E304: ml_upd_block0(): Didn't get block 0??"
msgstr "E304: ml_upd_block0() : bloc 0 non récupéré ?!"
#. no swap files found
-#: ../memline.c:830
#, c-format
msgid "E305: No swap file found for %s"
msgstr "E305: Aucun fichier d'échange trouvé pour %s"
-#: ../memline.c:839
msgid "Enter number of swap file to use (0 to quit): "
msgstr "Entrez le numéro du fichier d'échange à utiliser (0 pour quitter) : "
-#: ../memline.c:879
#, c-format
msgid "E306: Cannot open %s"
msgstr "E306: Impossible d'ouvrir %s"
-#: ../memline.c:897
msgid "Unable to read block 0 from "
msgstr "Impossible de lire le bloc 0 de "
-#: ../memline.c:900
msgid ""
"\n"
"Maybe no changes were made or Vim did not update the swap file."
@@ -3949,28 +3143,22 @@ msgstr ""
"Il est possible qu'aucune modification n'a été faite ou que Vim n'a pas mis "
"à jour le fichier d'échange."
-#: ../memline.c:909
msgid " cannot be used with this version of Vim.\n"
msgstr " ne peut pas être utilisé avec cette version de Vim.\n"
-#: ../memline.c:911
msgid "Use Vim version 3.0.\n"
msgstr "Utilisez Vim version 3.0.\n"
-#: ../memline.c:916
#, c-format
msgid "E307: %s does not look like a Vim swap file"
msgstr "E307: %s ne semble pas être un fichier d'échange de Vim"
-#: ../memline.c:922
msgid " cannot be used on this computer.\n"
msgstr " ne peut pas être utilisé sur cet ordinateur.\n"
-#: ../memline.c:924
msgid "The file was created on "
msgstr "Le fichier a été créé le "
-#: ../memline.c:928
msgid ""
",\n"
"or the file has been damaged."
@@ -3978,86 +3166,67 @@ msgstr ""
",\n"
"ou le fichier a été endommagé."
-#: ../memline.c:945
msgid " has been damaged (page size is smaller than minimum value).\n"
msgstr " a été endommagé (taille de page inférieure à la valeur minimale).\n"
-#: ../memline.c:974
#, c-format
msgid "Using swap file \"%s\""
msgstr "Utilisation du fichier d'échange \"%s\""
-#: ../memline.c:980
#, c-format
msgid "Original file \"%s\""
msgstr "Fichier original \"%s\""
-#: ../memline.c:995
msgid "E308: Warning: Original file may have been changed"
msgstr "E308: Alerte : Le fichier original a pu être modifié"
-#: ../memline.c:1061
#, c-format
msgid "E309: Unable to read block 1 from %s"
msgstr "E309: Impossible de lire le bloc 1 de %s"
-#: ../memline.c:1065
msgid "???MANY LINES MISSING"
msgstr "???DE NOMBREUSES LIGNES MANQUENT"
-#: ../memline.c:1076
msgid "???LINE COUNT WRONG"
msgstr "???NOMBRE DE LIGNES ERRONÉ"
-#: ../memline.c:1082
msgid "???EMPTY BLOCK"
msgstr "???BLOC VIDE"
-#: ../memline.c:1103
msgid "???LINES MISSING"
msgstr "???LIGNES MANQUANTES"
-#: ../memline.c:1128
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr "E310: ID du bloc 1 erroné (%s n'est pas un fichier d'échange ?)"
-#: ../memline.c:1133
msgid "???BLOCK MISSING"
msgstr "???BLOC MANQUANT"
-#: ../memline.c:1147
msgid "??? from here until ???END lines may be messed up"
msgstr "??? d'ici jusqu'à ???FIN des lignes peuvent être corrompues"
-#: ../memline.c:1164
msgid "??? from here until ???END lines may have been inserted/deleted"
msgstr "??? d'ici jusqu'à ???FIN des lignes ont pu être insérées/effacées"
-#: ../memline.c:1181
msgid "???END"
msgstr "???FIN"
-#: ../memline.c:1238
msgid "E311: Recovery Interrupted"
msgstr "E311: Récupération interrompue"
-#: ../memline.c:1243
msgid ""
"E312: Errors detected while recovering; look for lines starting with ???"
msgstr ""
"E312: Erreurs lors de la récupération ; examinez les lignes commençant "
"par ???"
-#: ../memline.c:1245
msgid "See \":help E312\" for more information."
msgstr "Consultez \":help E312\" pour plus d'information."
-#: ../memline.c:1249
msgid "Recovery completed. You should check if everything is OK."
msgstr "Récupération achevée. Vérifiez que tout est correct."
-#: ../memline.c:1251
msgid ""
"\n"
"(You might want to write out this file under another name\n"
@@ -4065,17 +3234,14 @@ msgstr ""
"\n"
"(Vous voudrez peut-être enregistrer ce fichier sous un autre nom\n"
-#: ../memline.c:1252
msgid "and run diff with the original file to check for changes)"
msgstr "et lancer diff avec le fichier original pour repérer les changements)"
-#: ../memline.c:1254
msgid "Recovery completed. Buffer contents equals file contents."
msgstr ""
"Récupération achevée. Le contenu du tampon est identique au contenu du "
"fichier."
-#: ../memline.c:1255
msgid ""
"\n"
"You may want to delete the .swp file now.\n"
@@ -4086,51 +3252,39 @@ msgstr ""
"\n"
#. use msg() to start the scrolling properly
-#: ../memline.c:1327
msgid "Swap files found:"
msgstr "Fichiers d'échange trouvés :"
-#: ../memline.c:1446
msgid " In current directory:\n"
msgstr " Dans le répertoire courant :\n"
-#: ../memline.c:1448
msgid " Using specified name:\n"
msgstr "Utilisant le nom indiqué :\n"
-#: ../memline.c:1450
msgid " In directory "
msgstr " Dans le répertoire "
-#: ../memline.c:1465
msgid " -- none --\n"
msgstr " -- aucun --\n"
-#: ../memline.c:1527
msgid " owned by: "
msgstr " propriété de : "
-#: ../memline.c:1529
msgid " dated: "
msgstr " daté : "
-#: ../memline.c:1532 ../memline.c:3231
msgid " dated: "
msgstr " daté : "
-#: ../memline.c:1548
msgid " [from Vim version 3.0]"
msgstr " [de Vim version 3.0]"
-#: ../memline.c:1550
msgid " [does not look like a Vim swap file]"
msgstr " [ne semble pas être un fichier d'échange Vim]"
-#: ../memline.c:1552
msgid " file name: "
msgstr " nom de fichier : "
-#: ../memline.c:1558
msgid ""
"\n"
" modified: "
@@ -4138,15 +3292,12 @@ msgstr ""
"\n"
" modifié : "
-#: ../memline.c:1559
msgid "YES"
msgstr "OUI"
-#: ../memline.c:1559
msgid "no"
msgstr "non"
-#: ../memline.c:1562
msgid ""
"\n"
" user name: "
@@ -4154,11 +3305,9 @@ msgstr ""
"\n"
" nom d'utilisateur : "
-#: ../memline.c:1568
msgid " host name: "
msgstr " nom d'hôte : "
-#: ../memline.c:1570
msgid ""
"\n"
" host name: "
@@ -4166,7 +3315,6 @@ msgstr ""
"\n"
" nom d'hôte : "
-#: ../memline.c:1575
msgid ""
"\n"
" process ID: "
@@ -4174,11 +3322,9 @@ msgstr ""
"\n"
" processus n° : "
-#: ../memline.c:1579
msgid " (still running)"
msgstr " (en cours d'exécution)"
-#: ../memline.c:1586
msgid ""
"\n"
" [not usable on this computer]"
@@ -4186,97 +3332,75 @@ msgstr ""
"\n"
" [inutilisable sur cet ordinateur]"
-#: ../memline.c:1590
msgid " [cannot be read]"
msgstr " [ne peut être lu]"
-#: ../memline.c:1593
msgid " [cannot be opened]"
msgstr " [ne peut être ouvert]"
-#: ../memline.c:1698
msgid "E313: Cannot preserve, there is no swap file"
msgstr "E313: Préservation impossible, il n'y a pas de fichier d'échange"
-#: ../memline.c:1747
msgid "File preserved"
msgstr "Fichier préservé"
-#: ../memline.c:1749
msgid "E314: Preserve failed"
msgstr "E314: Échec de la préservation"
-#: ../memline.c:1819
#, c-format
msgid "E315: ml_get: invalid lnum: %<PRId64>"
msgstr "E315: ml_get : numéro de ligne invalide : %<PRId64>"
-#: ../memline.c:1851
#, c-format
msgid "E316: ml_get: cannot find line %<PRId64>"
msgstr "E316: ml_get : ligne %<PRId64> introuvable"
-#: ../memline.c:2236
msgid "E317: pointer block id wrong 3"
msgstr "E317: mauvais id de pointeur de bloc 3"
-#: ../memline.c:2311
msgid "stack_idx should be 0"
msgstr "stack_idx devrait être 0"
-#: ../memline.c:2369
msgid "E318: Updated too many blocks?"
msgstr "E318: Trop de blocs mis à jour ?"
-#: ../memline.c:2511
msgid "E317: pointer block id wrong 4"
msgstr "E317: mauvais id de pointeur de bloc 4"
-#: ../memline.c:2536
msgid "deleted block 1?"
msgstr "bloc 1 effacé ?"
-#: ../memline.c:2707
#, c-format
msgid "E320: Cannot find line %<PRId64>"
msgstr "E320: Ligne %<PRId64> introuvable"
-#: ../memline.c:2916
msgid "E317: pointer block id wrong"
msgstr "E317: mauvais id de pointeur de bloc"
-#: ../memline.c:2930
msgid "pe_line_count is zero"
msgstr "pe_line_count vaut zéro"
-#: ../memline.c:2955
#, c-format
msgid "E322: line number out of range: %<PRId64> past the end"
msgstr "E322: numéro de ligne hors limites : %<PRId64> au-delà de la fin"
-#: ../memline.c:2959
#, c-format
msgid "E323: line count wrong in block %<PRId64>"
msgstr "E323: nombre de lignes erroné dans le bloc %<PRId64>"
-#: ../memline.c:2999
msgid "Stack size increases"
msgstr "La taille de la pile s'accroît"
-#: ../memline.c:3038
msgid "E317: pointer block id wrong 2"
msgstr "E317: mauvais id de pointeur de block 2"
-#: ../memline.c:3070
#, c-format
msgid "E773: Symlink loop for \"%s\""
msgstr "E773: cycle de liens symboliques avec \"%s\""
-#: ../memline.c:3221
msgid "E325: ATTENTION"
msgstr "E325: ATTENTION"
-#: ../memline.c:3222
msgid ""
"\n"
"Found a swap file by the name \""
@@ -4284,15 +3408,12 @@ msgstr ""
"\n"
"Trouvé un fichier d'échange nommé \""
-#: ../memline.c:3226
msgid "While opening file \""
msgstr "Lors de l'ouverture du fichier \""
-#: ../memline.c:3239
msgid " NEWER than swap file!\n"
msgstr " PLUS RÉCENT que le fichier d'échange !\n"
-#: ../memline.c:3244
msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
@@ -4304,19 +3425,15 @@ msgstr ""
" Si c'est le cas, faites attention à ne pas vous retrouver avec\n"
" deux versions différentes du même fichier en faisant des modifications."
-#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
msgstr " Quittez, ou continuez prudemment.\n"
-#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
msgstr "(2) Une session d'édition de ce fichier a planté.\n"
-#: ../memline.c:3247
msgid " If this is the case, use \":recover\" or \"vim -r "
msgstr " Si c'est le cas, utilisez \":recover\" ou \"vim -r "
-#: ../memline.c:3249
msgid ""
"\"\n"
" to recover the changes (see \":help recovery\").\n"
@@ -4324,11 +3441,9 @@ msgstr ""
"\"\n"
" pour récupérer le fichier (consultez \":help recovery\").\n"
-#: ../memline.c:3250
msgid " If you did this already, delete the swap file \""
msgstr " Si vous l'avez déjà fait, effacez le fichier d'échange \""
-#: ../memline.c:3252
msgid ""
"\"\n"
" to avoid this message.\n"
@@ -4336,23 +3451,18 @@ msgstr ""
"\"\n"
" pour éviter ce message.\n"
-#: ../memline.c:3450 ../memline.c:3452
msgid "Swap file \""
msgstr "Le fichier d'échange \""
-#: ../memline.c:3451 ../memline.c:3455
msgid "\" already exists!"
msgstr "\" existe déjà !"
-#: ../memline.c:3457
msgid "VIM - ATTENTION"
msgstr "VIM - ATTENTION"
-#: ../memline.c:3459
msgid "Swap file already exists!"
msgstr "Un fichier d'échange existe déjà !"
-#: ../memline.c:3464
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4366,7 +3476,6 @@ msgstr ""
"&Quitter\n"
"&Abandonner"
-#: ../memline.c:3467
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4390,50 +3499,40 @@ msgstr ""
#.
#. ".s?a"
#. ".saa": tried enough, give up
-#: ../memline.c:3528
msgid "E326: Too many swap files found"
msgstr "E326: Trop de fichiers d'échange trouvés"
-#: ../memory.c:227
#, c-format
msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
msgstr "E342: Mémoire épuisée ! (allocation de %<PRIu64> octets)"
-#: ../menu.c:62
msgid "E327: Part of menu-item path is not sub-menu"
msgstr "E327: Une partie du chemin de l'élément de menu n'est pas un sous-menu"
# DB - todo : J'hésite avec
# msgstr "E328: Le menu n'existe pas dans ce mode"
-#: ../menu.c:63
msgid "E328: Menu only exists in another mode"
msgstr "E328: Le menu n'existe que dans un autre mode"
-#: ../menu.c:64
#, c-format
msgid "E329: No menu \"%s\""
msgstr "E329: Aucun menu \"%s\""
#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
msgid "E792: Empty menu name"
msgstr "E792: Nom de menu vide"
-#: ../menu.c:340
msgid "E330: Menu path must not lead to a sub-menu"
msgstr "E330: Le chemin de menu ne doit pas conduire à un sous-menu"
-#: ../menu.c:365
msgid "E331: Must not add menu items directly to menu bar"
msgstr "E331: Ajout d'éléments de menu directement dans barre de menu interdit"
-#: ../menu.c:370
msgid "E332: Separator cannot be part of a menu path"
msgstr "E332: Un séparateur ne peut faire partie d'un chemin de menu"
#. Now we have found the matching menu, and we list the mappings
#. Highlight title
-#: ../menu.c:762
msgid ""
"\n"
"--- Menus ---"
@@ -4441,75 +3540,56 @@ msgstr ""
"\n"
"--- Menus ---"
-#: ../menu.c:1313
msgid "E333: Menu path must lead to a menu item"
msgstr "E333: Le chemin du menu doit conduire à un élément de menu"
-#: ../menu.c:1330
#, c-format
msgid "E334: Menu not found: %s"
msgstr "E334: Menu introuvable : %s"
-#: ../menu.c:1396
#, c-format
msgid "E335: Menu not defined for %s mode"
msgstr "E335: Le menu n'est pas défini pour le mode %s"
-#: ../menu.c:1426
msgid "E336: Menu path must lead to a sub-menu"
msgstr "E336: Le chemin du menu doit conduire à un sous-menu"
-#: ../menu.c:1447
msgid "E337: Menu not found - check menu names"
msgstr "E337: Menu introuvable - vérifiez les noms des menus"
-#: ../message.c:423
#, c-format
msgid "Error detected while processing %s:"
msgstr "Erreur détectée en traitant %s :"
-#: ../message.c:445
#, c-format
msgid "line %4ld:"
msgstr "ligne %4ld :"
-#: ../message.c:617
#, c-format
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nom de registre invalide : '%s'"
# DB - todo : mettre à jour ?
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Maintenance des messages : Dominique Pellé <dominique.pelle@gmail.com>"
-
-#: ../message.c:986
msgid "Interrupt: "
msgstr "Interruption : "
-#: ../message.c:988
msgid "Press ENTER or type command to continue"
msgstr "Appuyez sur ENTRÉE ou tapez une commande pour continuer"
-#: ../message.c:1843
#, c-format
msgid "%s line %<PRId64>"
msgstr "%s, ligne %<PRId64>"
-#: ../message.c:2392
msgid "-- More --"
msgstr "-- Plus --"
-#: ../message.c:2398
msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
msgstr ""
"ESPACE/d/j : écran/page/ligne vers le bas, b/u/k : vers le haut, q : quitter"
-#: ../message.c:3021 ../message.c:3031
msgid "Question"
msgstr "Question"
-#: ../message.c:3023
msgid ""
"&Yes\n"
"&No"
@@ -4517,7 +3597,6 @@ msgstr ""
"&Oui\n"
"&Non"
-#: ../message.c:3033
msgid ""
"&Yes\n"
"&No\n"
@@ -4527,7 +3606,6 @@ msgstr ""
"&Non\n"
"&Annuler"
-#: ../message.c:3045
msgid ""
"&Yes\n"
"&No\n"
@@ -4541,176 +3619,137 @@ msgstr ""
"Tout aban&donner\n"
"&Annuler"
-#: ../message.c:3058
msgid "E766: Insufficient arguments for printf()"
msgstr "E766: Pas assez d'arguments pour printf()"
-#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
msgstr "E807: printf() attend un argument de type Flottant"
-#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
msgstr "E767: Trop d'arguments pour printf()"
-#: ../misc1.c:2256
msgid "W10: Warning: Changing a readonly file"
msgstr "W10: Alerte : Modification d'un fichier en lecture seule"
-#: ../misc1.c:2537
msgid "Type number and <Enter> or click with mouse (empty cancels): "
msgstr "Tapez un nombre et <Entrée> ou cliquez avec la souris (rien annule) :"
-#: ../misc1.c:2539
msgid "Type number and <Enter> (empty cancels): "
msgstr "Tapez un nombre et <Entrée> (rien annule) :"
-#: ../misc1.c:2585
msgid "1 more line"
msgstr "1 ligne en plus"
-#: ../misc1.c:2588
msgid "1 line less"
msgstr "1 ligne en moins"
-#: ../misc1.c:2593
#, c-format
msgid "%<PRId64> more lines"
msgstr "%<PRId64> lignes en plus"
-#: ../misc1.c:2596
#, c-format
msgid "%<PRId64> fewer lines"
msgstr "%<PRId64> lignes en moins"
-#: ../misc1.c:2599
msgid " (Interrupted)"
msgstr " (Interrompu)"
-#: ../misc1.c:2635
msgid "Beep!"
msgstr "Bip !"
-#: ../misc2.c:738
#, c-format
msgid "Calling shell to execute: \"%s\""
msgstr "Appel du shell pour exécuter : \"%s\""
-#: ../normal.c:183
msgid "E349: No identifier under cursor"
msgstr "E349: Aucun identifiant sous le curseur"
-#: ../normal.c:1866
msgid "E774: 'operatorfunc' is empty"
msgstr "E774: 'operatorfunc' est vide"
# DB : Il est ici question du mode Visuel.
-#: ../normal.c:2637
msgid "Warning: terminal cannot highlight"
msgstr "Alerte : le terminal ne peut pas surligner"
-#: ../normal.c:2807
msgid "E348: No string under cursor"
msgstr "E348: Aucune chaîne sous le curseur"
-#: ../normal.c:3937
msgid "E352: Cannot erase folds with current 'foldmethod'"
msgstr "E352: Impossible d'effacer des replis avec la 'foldmethod'e actuelle"
-#: ../normal.c:5897
msgid "E664: changelist is empty"
msgstr "E664: La liste des modifications (changelist) est vide"
-#: ../normal.c:5899
msgid "E662: At start of changelist"
msgstr "E662: Au début de la liste des modifications"
-#: ../normal.c:5901
msgid "E663: At end of changelist"
msgstr "E663: À la fin de la liste des modifications"
-#: ../normal.c:7053
msgid "Type :quit<Enter> to exit Nvim"
msgstr "tapez :q<Entrée> pour quitter Vim"
-#: ../ops.c:248
#, c-format
msgid "1 line %sed 1 time"
msgstr "1 ligne %sée 1 fois"
-#: ../ops.c:250
#, c-format
msgid "1 line %sed %d times"
msgstr "1 ligne %sée %d fois"
-#: ../ops.c:253
#, c-format
msgid "%<PRId64> lines %sed 1 time"
msgstr "%<PRId64> lignes %sées 1 fois"
-#: ../ops.c:256
#, c-format
msgid "%<PRId64> lines %sed %d times"
msgstr "%<PRId64> lignes %sées %d fois"
-#: ../ops.c:592
#, c-format
msgid "%<PRId64> lines to indent... "
msgstr "%<PRId64> lignes à indenter... "
-#: ../ops.c:634
msgid "1 line indented "
msgstr "1 ligne indentée "
-#: ../ops.c:636
#, c-format
msgid "%<PRId64> lines indented "
msgstr "%<PRId64> lignes indentées "
-#: ../ops.c:938
msgid "E748: No previously used register"
msgstr "E748: Aucun registre n'a été précédemment utilisé"
# DB - Question O/N.
#. must display the prompt
-#: ../ops.c:1433
msgid "cannot yank; delete anyway"
msgstr "impossible de réaliser une copie ; effacer tout de même"
-#: ../ops.c:1929
msgid "1 line changed"
msgstr "1 ligne modifiée"
-#: ../ops.c:1931
#, c-format
msgid "%<PRId64> lines changed"
msgstr "%<PRId64> lignes modifiées"
-#: ../ops.c:2521
msgid "block of 1 line yanked"
msgstr "bloc de 1 ligne copié"
-#: ../ops.c:2523
msgid "1 line yanked"
msgstr "1 ligne copiée"
-#: ../ops.c:2525
#, c-format
msgid "block of %<PRId64> lines yanked"
msgstr "bloc de %<PRId64> lignes copié"
-#: ../ops.c:2528
#, c-format
msgid "%<PRId64> lines yanked"
msgstr "%<PRId64> lignes copiées"
-#: ../ops.c:2710
#, c-format
msgid "E353: Nothing in register %s"
msgstr "E353: Le registre %s est vide"
#. Highlight title
-#: ../ops.c:3185
msgid ""
"\n"
"--- Registers ---"
@@ -4718,11 +3757,9 @@ msgstr ""
"\n"
"--- Registres ---"
-#: ../ops.c:4455
msgid "Illegal register name"
msgstr "Nom de registre invalide"
-#: ../ops.c:4533
msgid ""
"\n"
"# Registers:\n"
@@ -4730,17 +3767,14 @@ msgstr ""
"\n"
"# Registres :\n"
-#: ../ops.c:4575
#, c-format
msgid "E574: Unknown register type %d"
msgstr "E574: Type de registre %d inconnu"
-#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
msgstr "%<PRId64> Colonnes ; "
-#: ../ops.c:5097
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4749,7 +3783,6 @@ msgstr ""
"%s%<PRId64> sur %<PRId64> Lignes ; %<PRId64> sur %<PRId64> Mots ; %<PRId64> "
"sur %<PRId64> Octets sélectionnés"
-#: ../ops.c:5105
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4758,7 +3791,6 @@ msgstr ""
"%s%<PRId64> sur %<PRId64> Lignes ; %<PRId64> sur %<PRId64> Mots ; %<PRId64> "
"sur %<PRId64> Caractères ; %<PRId64> sur %<PRId64> octets sélectionnés"
-#: ../ops.c:5123
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
@@ -4767,7 +3799,6 @@ msgstr ""
"Colonne %s sur %s ; Ligne %<PRId64> sur %<PRId64> ; Mot %<PRId64> sur "
"%<PRId64> ; Octet %<PRId64> sur %<PRId64>"
-#: ../ops.c:5133
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
@@ -4776,105 +3807,81 @@ msgstr ""
"Colonne %s sur %s ; Ligne %<PRId64> sur %<PRId64> ; Mot %<PRId64> sur "
"%<PRId64> ; Caractère %<PRId64> sur %<PRId64> ; Octet %<PRId64> sur %<PRId64>"
-#: ../ops.c:5146
#, c-format
msgid "(+%<PRId64> for BOM)"
msgstr "(+%<PRId64> pour le BOM)"
-#: ../option.c:1238
msgid "%<%f%h%m%=Page %N"
msgstr "%<%f%h%m%=Page %N"
-#: ../option.c:1574
msgid "Thanks for flying Vim"
msgstr "Merci d'avoir choisi Vim"
#. found a mismatch: skip
-#: ../option.c:2698
msgid "E518: Unknown option"
msgstr "E518: Option inconnue"
-#: ../option.c:2709
msgid "E519: Option not supported"
msgstr "E519: Option non supportée"
-#: ../option.c:2740
msgid "E520: Not allowed in a modeline"
msgstr "E520: Non autorisé dans une ligne de mode"
-#: ../option.c:2815
msgid "E846: Key code not set"
msgstr "E846: Le code de touche n'est pas configuré"
-#: ../option.c:2924
msgid "E521: Number required after ="
msgstr "E521: Nombre requis après ="
-#: ../option.c:3226 ../option.c:3864
msgid "E522: Not found in termcap"
msgstr "E522: Introuvable dans termcap"
-#: ../option.c:3335
#, c-format
msgid "E539: Illegal character <%s>"
msgstr "E539: Caractère <%s> invalide"
-#: ../option.c:2253
#, c-format
msgid "For option %s"
msgstr "Pour l'option %s"
-#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: 'term' ne doit pas être une chaîne vide"
-#: ../option.c:3885
msgid "E589: 'backupext' and 'patchmode' are equal"
msgstr "E589: 'backupext' et 'patchmode' sont égaux"
-#: ../option.c:3964
msgid "E834: Conflicts with value of 'listchars'"
msgstr "E834: Conflits avec la valeur de 'listchars'"
-#: ../option.c:3966
msgid "E835: Conflicts with value of 'fillchars'"
msgstr "E835: Conflits avec la valeur de 'fillchars'"
-#: ../option.c:4163
msgid "E524: Missing colon"
msgstr "E524: ':' manquant"
-#: ../option.c:4165
msgid "E525: Zero length string"
msgstr "E525: Chaîne de longueur nulle"
-#: ../option.c:4220
#, c-format
msgid "E526: Missing number after <%s>"
msgstr "E526: Nombre manquant après <%s>"
-#: ../option.c:4232
msgid "E527: Missing comma"
msgstr "E527: Virgule manquante"
-#: ../option.c:4239
msgid "E528: Must specify a ' value"
msgstr "E528: Une valeur ' doit être spécifiée"
-#: ../option.c:4271
msgid "E595: contains unprintable or wide character"
msgstr "E595: contient des caractères à largeur double non-imprimables"
-#: ../option.c:4469
#, c-format
msgid "E535: Illegal character after <%c>"
msgstr "E535: Caractère invalide après <%c>"
-#: ../option.c:4534
msgid "E536: comma required"
msgstr "E536: virgule requise"
-#: ../option.c:4543
#, c-format
msgid "E537: 'commentstring' must be empty or contain %s"
msgstr "E537: 'commentstring' doit être vide ou contenir %s"
@@ -4882,37 +3889,29 @@ msgstr "E537: 'commentstring' doit être vide ou contenir %s"
# DB - Le code est sans ambiguïté sur le caractère manquant.
# À défaut d'une traduction valable, au moins comprend-on
# ce qui se passe.
-#: ../option.c:4928
msgid "E540: Unclosed expression sequence"
msgstr "E540: '}' manquant"
-#: ../option.c:4932
msgid "E541: too many items"
msgstr "E541: trop d'éléments"
-#: ../option.c:4934
msgid "E542: unbalanced groups"
msgstr "E542: parenthèses non équilibrées"
-#: ../option.c:5148
msgid "E590: A preview window already exists"
msgstr "E590: Il existe déjà une fenêtre de prévisualisation"
-#: ../option.c:5311
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr "W17: L'arabe requiert l'UTF-8, tapez ':set encoding=utf-8'"
-#: ../option.c:5623
#, c-format
msgid "E593: Need at least %d lines"
msgstr "E593: Au moins %d lignes sont nécessaires"
-#: ../option.c:5631
#, c-format
msgid "E594: Need at least %d columns"
msgstr "E594: Au moins %d colonnes sont nécessaires"
-#: ../option.c:6011
#, c-format
msgid "E355: Unknown option: %s"
msgstr "E355: Option inconnue : %s"
@@ -4920,12 +3919,10 @@ msgstr "E355: Option inconnue : %s"
#. There's another character after zeros or the string
#. * is empty. In both cases, we are trying to set a
#. * num option using a string.
-#: ../option.c:6037
#, c-format
msgid "E521: Number required: &%s = '%s'"
msgstr "E521: Nombre requis : &%s = '%s'"
-#: ../option.c:6149
msgid ""
"\n"
"--- Terminal codes ---"
@@ -4933,7 +3930,6 @@ msgstr ""
"\n"
"--- Codes de terminal ---"
-#: ../option.c:6151
msgid ""
"\n"
"--- Global option values ---"
@@ -4941,7 +3937,6 @@ msgstr ""
"\n"
"--- Valeur des options globales ---"
-#: ../option.c:6153
msgid ""
"\n"
"--- Local option values ---"
@@ -4949,7 +3944,6 @@ msgstr ""
"\n"
"--- Valeur des options locales ---"
-#: ../option.c:6155
msgid ""
"\n"
"--- Options ---"
@@ -4957,21 +3951,17 @@ msgstr ""
"\n"
"--- Options ---"
-#: ../option.c:6816
msgid "E356: get_varp ERROR"
msgstr "E356: ERREUR get_varp"
-#: ../option.c:7696
#, c-format
msgid "E357: 'langmap': Matching character missing for %s"
msgstr "E357: 'langmap' : Aucun caractère correspondant pour %s"
-#: ../option.c:7715
#, c-format
msgid "E358: 'langmap': Extra characters after semicolon: %s"
msgstr "E358: 'langmap' : Caractères surnuméraires après point-virgule : %s"
-#: ../os/shell.c:194
msgid ""
"\n"
"Cannot execute shell "
@@ -4979,7 +3969,6 @@ msgstr ""
"\n"
"Impossible d'exécuter le shell "
-#: ../os/shell.c:439
msgid ""
"\n"
"shell returned "
@@ -4987,7 +3976,6 @@ msgstr ""
"\n"
"le shell a retourné "
-#: ../os_unix.c:465 ../os_unix.c:471
msgid ""
"\n"
"Could not get security context for "
@@ -4995,7 +3983,6 @@ msgstr ""
"\n"
"Impossible d'obtenir le contexte de sécurité pour "
-#: ../os_unix.c:479
msgid ""
"\n"
"Could not set security context for "
@@ -5003,218 +3990,171 @@ msgstr ""
"\n"
"Impossible de modifier le contexte de sécurité pour "
-#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
msgstr "dlerror = \"%s\""
-#: ../path.c:1449
#, c-format
msgid "E447: Can't find file \"%s\" in path"
msgstr "E447: Le fichier \"%s\" est introuvable dans 'path'"
-#: ../quickfix.c:359
#, c-format
msgid "E372: Too many %%%c in format string"
msgstr "E372: Trop de %%%c dans la chaîne de format"
-#: ../quickfix.c:371
#, c-format
msgid "E373: Unexpected %%%c in format string"
msgstr "E373: %%%c inattendu dans la chaîne de format"
-#: ../quickfix.c:420
msgid "E374: Missing ] in format string"
msgstr "E374: ] manquant dans la chaîne de format"
-#: ../quickfix.c:431
#, c-format
msgid "E375: Unsupported %%%c in format string"
msgstr "E375: %%%c non supporté dans la chaîne de format"
-#: ../quickfix.c:448
#, c-format
msgid "E376: Invalid %%%c in format string prefix"
msgstr "E376: %%%c invalide dans le préfixe de la chaîne de format"
-#: ../quickfix.c:454
#, c-format
msgid "E377: Invalid %%%c in format string"
msgstr "E377: %%%c invalide dans la chaîne de format"
#. nothing found
-#: ../quickfix.c:477
msgid "E378: 'errorformat' contains no pattern"
msgstr "E378: 'errorformat' ne contient aucun motif"
-#: ../quickfix.c:695
msgid "E379: Missing or empty directory name"
msgstr "E379: Nom de répertoire vide ou absent"
-#: ../quickfix.c:1305
msgid "E553: No more items"
msgstr "E553: Plus d'éléments"
-#: ../quickfix.c:1674
#, c-format
msgid "(%d of %d)%s%s: "
msgstr "(%d sur %d)%s%s : "
-#: ../quickfix.c:1676
msgid " (line deleted)"
msgstr " (ligne effacée)"
-#: ../quickfix.c:1863
msgid "E380: At bottom of quickfix stack"
msgstr "E380: En bas de la pile quickfix"
-#: ../quickfix.c:1869
msgid "E381: At top of quickfix stack"
msgstr "E381: Au sommet de la pile quickfix"
-#: ../quickfix.c:1880
#, c-format
msgid "error list %d of %d; %d errors"
msgstr "liste d'erreurs %d sur %d ; %d erreurs"
-#: ../quickfix.c:2427
msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: Écriture impossible, l'option 'buftype' est activée"
-#: ../quickfix.c:2812
msgid "E683: File name missing or invalid pattern"
msgstr "E683: Nom de fichier manquant ou motif invalide"
-#: ../quickfix.c:2911
#, c-format
msgid "Cannot open file \"%s\""
msgstr "Impossible d'ouvrir le fichier \"%s\""
-#: ../quickfix.c:3429
msgid "E681: Buffer is not loaded"
msgstr "E681: le tampon n'est pas chargé"
-#: ../quickfix.c:3487
msgid "E777: String or List expected"
msgstr "E777: Chaîne ou Liste attendue"
-#: ../regexp.c:359
#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: élément invalide dans %s%%[]"
-#: ../regexp.c:374
#, c-format
msgid "E769: Missing ] after %s["
msgstr "E769: ']' manquant après %s["
-#: ../regexp.c:375
#, c-format
msgid "E53: Unmatched %s%%("
msgstr "E53: Pas de correspondance pour %s%%("
-#: ../regexp.c:376
#, c-format
msgid "E54: Unmatched %s("
msgstr "E54: %s( ouvrante non fermée"
-#: ../regexp.c:377
#, c-format
msgid "E55: Unmatched %s)"
msgstr "E55: %s) fermante non ouverte"
-#: ../regexp.c:378
msgid "E66: \\z( not allowed here"
msgstr "E66: \\z( n'est pas autorisé ici"
-#: ../regexp.c:379
msgid "E67: \\z1 et al. not allowed here"
msgstr "E67: \\z1 et co. ne sont pas autorisés ici"
-#: ../regexp.c:380
#, c-format
msgid "E69: Missing ] after %s%%["
msgstr "E69: ']' manquant après %s%%["
-#: ../regexp.c:381
#, c-format
msgid "E70: Empty %s%%[]"
msgstr "E70: %s%%[] vide"
-#: ../regexp.c:1209 ../regexp.c:1224
msgid "E339: Pattern too long"
msgstr "E339: Motif trop long"
-#: ../regexp.c:1371
msgid "E50: Too many \\z("
msgstr "E50: Trop de \\z("
-#: ../regexp.c:1378
#, c-format
msgid "E51: Too many %s("
msgstr "E51: Trop de %s("
-#: ../regexp.c:1427
msgid "E52: Unmatched \\z("
msgstr "E52: Pas de correspondance pour \\z("
-#: ../regexp.c:1637
#, c-format
msgid "E59: invalid character after %s@"
msgstr "E59: caractère invalide après %s@"
-#: ../regexp.c:1672
#, c-format
msgid "E60: Too many complex %s{...}s"
msgstr "E60: Trop de %s{...}s complexes"
-#: ../regexp.c:1687
#, c-format
msgid "E61: Nested %s*"
msgstr "E61: %s* imbriqués"
-#: ../regexp.c:1690
#, c-format
msgid "E62: Nested %s%c"
msgstr "E62: %s%c imbriqués"
-#: ../regexp.c:1800
msgid "E63: invalid use of \\_"
msgstr "E63: utilisation invalide de \\_"
-#: ../regexp.c:1850
#, c-format
msgid "E64: %s%c follows nothing"
msgstr "E64: %s%c ne suit aucun atome"
-#: ../regexp.c:1902
msgid "E65: Illegal back reference"
msgstr "E65: post-référence invalide"
-#: ../regexp.c:1943
msgid "E68: Invalid character after \\z"
msgstr "E68: Caractère invalide après \\z"
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
#, c-format
msgid "E678: Invalid character after %s%%[dxouU]"
msgstr "E678: Caractère invalide après %s%%[dxouU]"
-#: ../regexp.c:2107
#, c-format
msgid "E71: Invalid character after %s%%"
msgstr "E71: Caractère invalide après %s%%"
-#: ../regexp.c:3017
#, c-format
msgid "E554: Syntax error in %s{...}"
msgstr "E554: Erreur de syntaxe dans %s{...}"
-#: ../regexp.c:3805
msgid "External submatches:\n"
msgstr "Sous-correspondances externes :\n"
-#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
"used "
@@ -5222,63 +4162,50 @@ msgstr ""
"E864: \\%#= peut être suivi uniquement de 0, 1 ou 2. Le moteur automatique "
"sera utilisé "
-#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) Fin de regexp rencontrée prématurément"
-#: ../regexp_nfa.c:240
#, c-format
msgid "E866: (NFA regexp) Misplaced %c"
msgstr "E866: (regexp NFA) %c au mauvais endroit"
-#: ../regexp_nfa.c:242
#, fuzzy, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr "E877: (regexp NFA) Classe de caractère invalide "
+#~ msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
+#~ msgstr "E877: (regexp NFA) Classe de caractère invalide "
-#: ../regexp_nfa.c:1261
#, c-format
msgid "E867: (NFA) Unknown operator '\\z%c'"
msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
-#: ../regexp_nfa.c:1387
#, fuzzy, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
+#~ msgid "E867: (NFA) Unknown operator '\\%%%c'"
+#~ msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
-#: ../regexp_nfa.c:1802
#, c-format
msgid "E869: (NFA) Unknown operator '\\@%c'"
msgstr "E869: (NFA) Opérateur inconnu '\\@%c'"
-#: ../regexp_nfa.c:1831
msgid "E870: (NFA regexp) Error reading repetition limits"
msgstr "E870: (regexp NFA) Erreur à la lecture des limites de répétition"
#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
msgstr "E871: (regexp NFA) Un multi ne peut pas suivre un multi !"
#. Too many `('
-#: ../regexp_nfa.c:2037
msgid "E872: (NFA regexp) Too many '('"
msgstr "E872: (regexp NFA) Trop de '('"
-#: ../regexp_nfa.c:2042
#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E872: (regexp NFA) Trop de '('"
+#~ msgid "E879: (NFA regexp) Too many \\z("
+#~ msgstr "E872: (regexp NFA) Trop de '('"
-#: ../regexp_nfa.c:2066
msgid "E873: (NFA regexp) proper termination error"
msgstr "E873: (NFA regexp) erreur de terminaison"
-#: ../regexp_nfa.c:2599
msgid "E874: (NFA) Could not pop the stack !"
msgstr "E874: (NFA) Impossible de dépiler !"
-#: ../regexp_nfa.c:3298
msgid ""
"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
"left on stack"
@@ -5286,178 +4213,137 @@ msgstr ""
"E875: (regexp NFA) (lors de la conversion de postfix à NFA), il reste trop "
"d'états sur la pile"
-#: ../regexp_nfa.c:3302
msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
msgstr "E876: (regexp NFA) Pas assez de mémoire pour stocker le NFA"
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
msgid ""
"Could not open temporary log file for writing, displaying on stderr ... "
msgstr ""
"Impossible d'ouvrir le fichier de log temporaire en écriture, affichage sur "
"stderr ... "
-#: ../regexp_nfa.c:4840
#, c-format
msgid "(NFA) COULD NOT OPEN %s !"
msgstr "(NFA) IMPOSSIBLE D'OUVRIR %s !"
-#: ../regexp_nfa.c:6049
msgid "Could not open temporary log file for writing "
msgstr "Impossible d'ouvrir le fichier de log en écriture"
-#: ../screen.c:7435
msgid " VREPLACE"
msgstr " VREMPLACEMENT"
-#: ../screen.c:7437
msgid " REPLACE"
msgstr " REMPLACEMENT"
# DB - todo
-#: ../screen.c:7440
msgid " REVERSE"
msgstr " REVERSE"
-#: ../screen.c:7441
msgid " INSERT"
msgstr " INSERTION"
-#: ../screen.c:7443
msgid " (insert)"
msgstr " (insertion)"
-#: ../screen.c:7445
msgid " (replace)"
msgstr " (remplacement)"
-#: ../screen.c:7447
msgid " (vreplace)"
msgstr " (vremplacement)"
-#: ../screen.c:7449
msgid " Hebrew"
msgstr " hébreu"
-#: ../screen.c:7454
msgid " Arabic"
msgstr " arabe"
-#: ../screen.c:7456
msgid " (lang)"
msgstr " (langue)"
-#: ../screen.c:7459
msgid " (paste)"
msgstr " (collage)"
-#: ../screen.c:7469
msgid " VISUAL"
msgstr " VISUEL"
-#: ../screen.c:7470
msgid " VISUAL LINE"
msgstr " VISUEL LIGNE"
-#: ../screen.c:7471
msgid " VISUAL BLOCK"
msgstr " VISUEL BLOC"
-#: ../screen.c:7472
msgid " SELECT"
msgstr " SÉLECTION"
-#: ../screen.c:7473
msgid " SELECT LINE"
msgstr " SÉLECTION LIGNE"
-#: ../screen.c:7474
msgid " SELECT BLOCK"
msgstr " SÉLECTION BLOC"
-#: ../screen.c:7486 ../screen.c:7541
msgid "recording"
msgstr "Enregistrement"
-#: ../search.c:487
#, c-format
msgid "E383: Invalid search string: %s"
msgstr "E383: Chaîne de recherche invalide : %s"
-#: ../search.c:832
#, c-format
msgid "E384: search hit TOP without match for: %s"
msgstr "E384: la recherche a atteint le HAUT sans trouver : %s"
-#: ../search.c:835
#, c-format
msgid "E385: search hit BOTTOM without match for: %s"
msgstr "E385: la recherche a atteint le BAS sans trouver : %s"
-#: ../search.c:1200
msgid "E386: Expected '?' or '/' after ';'"
msgstr "E386: '?' ou '/' attendu après ';'"
-#: ../search.c:4085
msgid " (includes previously listed match)"
msgstr " (inclut des correspondances listées précédemment)"
#. cursor at status line
-#: ../search.c:4104
msgid "--- Included files "
msgstr "--- Fichiers inclus "
-#: ../search.c:4106
msgid "not found "
msgstr "introuvables "
-#: ../search.c:4107
msgid "in path ---\n"
msgstr "dans le chemin ---\n"
-#: ../search.c:4168
msgid " (Already listed)"
msgstr " (Déjà listé)"
-#: ../search.c:4170
msgid " NOT FOUND"
msgstr " INTROUVABLE"
-#: ../search.c:4211
#, c-format
msgid "Scanning included file: %s"
msgstr "Examen des fichiers inclus : %s"
-#: ../search.c:4216
#, c-format
msgid "Searching included file %s"
msgstr "Recherche du fichier inclus %s"
-#: ../search.c:4405
msgid "E387: Match is on current line"
msgstr "E387: La correspondance est sur la ligne courante"
-#: ../search.c:4517
msgid "All included files were found"
msgstr "Tous les fichiers inclus ont été trouvés"
-#: ../search.c:4519
msgid "No included files"
msgstr "Aucun fichier inclus"
-#: ../search.c:4527
msgid "E388: Couldn't find definition"
msgstr "E388: Impossible de trouver la définition"
-#: ../search.c:4529
msgid "E389: Couldn't find pattern"
msgstr "E389: Impossible de trouver le motif"
-#: ../search.c:4668
msgid "Substitute "
msgstr "Substitue "
-#: ../search.c:4681
#, c-format
msgid ""
"\n"
@@ -5468,97 +4354,76 @@ msgstr ""
"# Dernier motif de recherche %s :\n"
"~"
-#: ../spell.c:951
msgid "E759: Format error in spell file"
msgstr "E759: Erreur de format du fichier orthographique"
-#: ../spell.c:952
msgid "E758: Truncated spell file"
msgstr "E758: Fichier orthographique tronqué"
-#: ../spell.c:953
#, c-format
msgid "Trailing text in %s line %d: %s"
msgstr "Texte en trop dans %s ligne %d : %s"
-#: ../spell.c:954
#, c-format
msgid "Affix name too long in %s line %d: %s"
msgstr "Nom d'affixe trop long dans %s ligne %d : %s"
-#: ../spell.c:955
msgid "E761: Format error in affix file FOL, LOW or UPP"
msgstr "E761: Erreur de format dans le fichier d'affixe FOL, LOW et UPP"
-#: ../spell.c:957
msgid "E762: Character in FOL, LOW or UPP is out of range"
msgstr "E762: Un caractère dans FOL, LOW ou UPP est hors-limites"
-#: ../spell.c:958
msgid "Compressing word tree..."
msgstr "Compression de l'arbre des mots"
-#: ../spell.c:1951
msgid "E756: Spell checking is not enabled"
msgstr "E756: La vérification orthographique n'est pas activée"
-#: ../spell.c:2249
#, c-format
msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
msgstr "Alerte : Liste de mots \"%s.%s.spl\" ou \"%s.ascii.spl\" introuvable"
-#: ../spell.c:2473
#, c-format
msgid "Reading spell file \"%s\""
msgstr "Lecture du fichier orthographique \"%s\""
-#: ../spell.c:2496
msgid "E757: This does not look like a spell file"
msgstr "E757: Le fichier ne ressemble pas à un fichier orthographique"
-#: ../spell.c:2501
msgid "E771: Old spell file, needs to be updated"
msgstr "E771: Fichier orthographique obsolète, sa mise à jour est nécessaire"
-#: ../spell.c:2504
msgid "E772: Spell file is for newer version of Vim"
msgstr "E772: Le fichier est prévu pour une version de Vim plus récente"
-#: ../spell.c:2602
msgid "E770: Unsupported section in spell file"
msgstr "E770: Section non supportée dans le fichier orthographique"
-#: ../spell.c:3762
#, c-format
msgid "Warning: region %s not supported"
msgstr "Alerte : région %s non supportée"
-#: ../spell.c:4550
#, c-format
msgid "Reading affix file %s ..."
msgstr "Lecture du fichier d'affixes %s..."
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
#, c-format
msgid "Conversion failure for word in %s line %d: %s"
msgstr "Échec de conversion du mot dans %s ligne %d : %s"
-#: ../spell.c:4630 ../spell.c:6170
#, c-format
msgid "Conversion in %s not supported: from %s to %s"
msgstr "La conversion dans %s non supportée : de %s vers %s"
-#: ../spell.c:4642
#, c-format
msgid "Invalid value for FLAG in %s line %d: %s"
msgstr "Valeur de FLAG invalide dans %s ligne %d : %s"
-#: ../spell.c:4655
#, c-format
msgid "FLAG after using flags in %s line %d: %s"
msgstr "FLAG trouvé après des drapeaux dans %s ligne %d : %s"
-#: ../spell.c:4723
#, c-format
msgid ""
"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
@@ -5567,7 +4432,6 @@ msgstr ""
"Définir COMPOUNDFORBIDFLAG après des PFX peut donner des résultats erronés "
"dans %s ligne %d"
-#: ../spell.c:4731
#, c-format
msgid ""
"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
@@ -5576,45 +4440,37 @@ msgstr ""
"Définir COMPOUNDPERMITFLAG après des PFX peut donner des résultats erronés "
"dans %s ligne %d"
-#: ../spell.c:4747
#, c-format
msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
msgstr "Valeur de COMPOUNDRULES erronée dans %s ligne %d : %s"
-#: ../spell.c:4771
#, c-format
msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
msgstr "Valeur de COMPOUNDWORDMAX erronée dans %s ligne %d : %s"
-#: ../spell.c:4777
#, c-format
msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
msgstr "Valeur de COMPOUNDMIN erronée dans %s ligne %d : %s"
-#: ../spell.c:4783
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
msgstr "Valeur de COMPOUNDSYLMAX erronée dans %s ligne %d : %s"
-#: ../spell.c:4795
#, c-format
msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
msgstr "Valeur de CHECKCOMPOUNDPATTERN erronée dans %s ligne %d : %s"
# DB - TODO
-#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr ""
"Drapeaux de composition différents dans un bloc d'affixes continu dans %s "
"ligne %d : %s"
-#: ../spell.c:4850
#, c-format
msgid "Duplicate affix in %s line %d: %s"
msgstr "Affixe dupliqué dans %s ligne %d : %s"
-#: ../spell.c:4871
#, c-format
msgid ""
"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
@@ -5623,339 +4479,270 @@ msgstr ""
"Affixe aussi utilisée pour BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
"NOSUGGEST dans %s ligne %d : %s"
-#: ../spell.c:4893
#, c-format
msgid "Expected Y or N in %s line %d: %s"
msgstr "Y ou N attendu dans %s ligne %d : %s"
# DB - todo (regexp impossible à compiler...)
-#: ../spell.c:4968
#, c-format
msgid "Broken condition in %s line %d: %s"
msgstr "Condition non valide dans %s ligne %d : %s"
-#: ../spell.c:5091
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
msgstr "Nombre de REP(SAL) attendu dans %s ligne %d"
-#: ../spell.c:5120
#, c-format
msgid "Expected MAP count in %s line %d"
msgstr "Nombre de MAP attendu dans %s ligne %d"
-#: ../spell.c:5132
#, c-format
msgid "Duplicate character in MAP in %s line %d"
msgstr "Caractère dupliqué dans MAP dans %s ligne %d"
-#: ../spell.c:5176
#, c-format
msgid "Unrecognized or duplicate item in %s line %d: %s"
msgstr "Élément non reconnu ou dupliqué dans %s ligne %d : %s"
-#: ../spell.c:5197
#, c-format
msgid "Missing FOL/LOW/UPP line in %s"
msgstr "Ligne FOL/LOW/UPP manquante dans %s"
-#: ../spell.c:5220
msgid "COMPOUNDSYLMAX used without SYLLABLE"
msgstr "Utilisation de COMPOUNDSYLMAX sans SYLLABLE"
-#: ../spell.c:5236
msgid "Too many postponed prefixes"
msgstr "Trop de préfixes reportés (PFXPOSTPONE)"
-#: ../spell.c:5238
msgid "Too many compound flags"
msgstr "Trop de drapeaux de composition"
-#: ../spell.c:5240
msgid "Too many postponed prefixes and/or compound flags"
msgstr "Trop de préfixes reportés et/ou de drapeaux de composition"
-#: ../spell.c:5250
#, c-format
msgid "Missing SOFO%s line in %s"
msgstr "Ligne SOFO%s manquante dans %s"
-#: ../spell.c:5253
#, c-format
msgid "Both SAL and SOFO lines in %s"
msgstr "Lignes SAL et lignes SOFO présentes dans %s"
-#: ../spell.c:5331
#, c-format
msgid "Flag is not a number in %s line %d: %s"
msgstr "Le drapeau n'est pas un nombre dans %s ligne %d : %s"
-#: ../spell.c:5334
#, c-format
msgid "Illegal flag in %s line %d: %s"
msgstr "Drapeau non autorisé dans %s ligne %d : %s"
-#: ../spell.c:5493 ../spell.c:5501
#, c-format
msgid "%s value differs from what is used in another .aff file"
msgstr "La valeur de %s est différente de celle d'un autre fichier .aff"
-#: ../spell.c:5602
#, c-format
msgid "Reading dictionary file %s ..."
msgstr "Lecture du fichier orthographique %s..."
-#: ../spell.c:5611
#, c-format
msgid "E760: No word count in %s"
msgstr "E760: Nombre de mots non indiqué dans %s"
-#: ../spell.c:5669
#, c-format
msgid "line %6d, word %6d - %s"
msgstr "ligne %6d, mot %6d - %s"
-#: ../spell.c:5691
#, c-format
msgid "Duplicate word in %s line %d: %s"
msgstr "Mot dupliqué dans %s ligne %d : %s"
-#: ../spell.c:5694
#, c-format
msgid "First duplicate word in %s line %d: %s"
msgstr "Premier mot dupliqué dans %s ligne %d : %s"
-#: ../spell.c:5746
#, c-format
msgid "%d duplicate word(s) in %s"
msgstr "%d mot(s) dupliqué(s) dans %s"
-#: ../spell.c:5748
#, c-format
msgid "Ignored %d word(s) with non-ASCII characters in %s"
msgstr "%d mot(s) ignoré(s) avec des caractères non-ASCII dans %s"
-#: ../spell.c:6115
#, c-format
msgid "Reading word file %s ..."
msgstr "Lecture de la liste de mots %s..."
-#: ../spell.c:6155
#, c-format
msgid "Duplicate /encoding= line ignored in %s line %d: %s"
msgstr "Ligne /encoding= en double ignorée dans %s ligne %d : %s"
-#: ../spell.c:6159
#, c-format
msgid "/encoding= line after word ignored in %s line %d: %s"
msgstr "Ligne /encoding= après des mots ignorée dans %s ligne %d : %s"
-#: ../spell.c:6180
#, c-format
msgid "Duplicate /regions= line ignored in %s line %d: %s"
msgstr "Ligne /regions= en double ignorée dans %s ligne %d : %s"
-#: ../spell.c:6185
#, c-format
msgid "Too many regions in %s line %d: %s"
msgstr "Trop de régions dans %s ligne %d : %s"
-#: ../spell.c:6198
#, c-format
msgid "/ line ignored in %s line %d: %s"
msgstr "Ligne / ignorée dans %s ligne %d : %s"
-#: ../spell.c:6224
#, c-format
msgid "Invalid region nr in %s line %d: %s"
msgstr "Numéro de région invalide dans %s ligne %d : %s"
-#: ../spell.c:6230
#, c-format
msgid "Unrecognized flags in %s line %d: %s"
msgstr "Drapeaux non reconnus dans %s ligne %d : %s"
-#: ../spell.c:6257
#, c-format
msgid "Ignored %d words with non-ASCII characters"
msgstr "%d mot(s) ignoré(s) avec des caractères non-ASCII"
-#: ../spell.c:6656
#, c-format
msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
msgstr "%d noeuds compressés sur %d ; %d (%d%%) restants "
-#: ../spell.c:7340
msgid "Reading back spell file..."
msgstr "Relecture du fichier orthographique"
#. Go through the trie of good words, soundfold each word and add it to
#. the soundfold trie.
-#: ../spell.c:7357
msgid "Performing soundfolding..."
msgstr "Analyse phonétique en cours..."
-#: ../spell.c:7368
#, c-format
msgid "Number of words after soundfolding: %<PRId64>"
msgstr "Nombre de mots après l'analyse phonétique : %<PRId64>"
-#: ../spell.c:7476
#, c-format
msgid "Total number of words: %d"
msgstr "Nombre total de mots : %d"
-#: ../spell.c:7655
#, c-format
msgid "Writing suggestion file %s ..."
msgstr "Écriture du fichier de suggestions %s..."
-#: ../spell.c:7707 ../spell.c:7927
#, c-format
msgid "Estimated runtime memory use: %d bytes"
msgstr "Estimation de mémoire consommée : %d octets"
-#: ../spell.c:7820
msgid "E751: Output file name must not have region name"
msgstr "E751: Le nom du fichier ne doit pas contenir de nom de région"
-#: ../spell.c:7822
msgid "E754: Only up to 8 regions supported"
msgstr "E754: 8 régions au maximum sont supportées"
-#: ../spell.c:7846
#, c-format
msgid "E755: Invalid region in %s"
msgstr "E755: Région invalide dans %s"
-#: ../spell.c:7907
msgid "Warning: both compounding and NOBREAK specified"
msgstr "Alerte : la composition et NOBREAK sont tous les deux spécifiés"
-#: ../spell.c:7920
#, c-format
msgid "Writing spell file %s ..."
msgstr "Écriture du fichier orthographique %s..."
-#: ../spell.c:7925
msgid "Done!"
msgstr "Terminé !"
# DB - todo : perfectible.
-#: ../spell.c:8034
#, c-format
msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' n'a pas %<PRId64> entrées"
-#: ../spell.c:8074
#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Mot retiré de %s"
+#~ msgid "Word '%.*s' removed from %s"
+#~ msgstr "Mot retiré de %s"
-#: ../spell.c:8117
#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Mot ajouté dans %s"
+#~ msgid "Word '%.*s' added to %s"
+#~ msgstr "Mot ajouté dans %s"
-#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
msgstr ""
"E763: Les caractères de mots diffèrent entre les fichiers orthographiques"
-#: ../spell.c:8684
msgid "Sorry, no suggestions"
msgstr "Désolé, aucune suggestion"
-#: ../spell.c:8687
#, c-format
msgid "Sorry, only %<PRId64> suggestions"
msgstr "Désolé, seulement %<PRId64> suggestions"
#. for when 'cmdheight' > 1
#. avoid more prompt
-#: ../spell.c:8704
#, c-format
msgid "Change \"%.*s\" to:"
msgstr "Remplacer \"%.*s\" par :"
# DB - todo : l'intérêt de traduire ce message m'échappe.
-#: ../spell.c:8737
#, c-format
msgid " < \"%.*s\""
msgstr " < \"%.*s\""
-#: ../spell.c:8882
msgid "E752: No previous spell replacement"
msgstr "E752: Pas de suggestion orthographique précédente"
-#: ../spell.c:8925
#, c-format
msgid "E753: Not found: %s"
msgstr "E753: Introuvable : %s"
-#: ../spell.c:9276
#, c-format
msgid "E778: This does not look like a .sug file: %s"
msgstr "E778: %s ne semble pas être un fichier .sug"
-#: ../spell.c:9282
#, c-format
msgid "E779: Old .sug file, needs to be updated: %s"
msgstr "E779: Fichier de suggestions obsolète, mise à jour nécessaire : %s"
-#: ../spell.c:9286
#, c-format
msgid "E780: .sug file is for newer version of Vim: %s"
msgstr "E780: Fichier .sug prévu pour une version de Vim plus récente : %s"
-#: ../spell.c:9295
#, c-format
msgid "E781: .sug file doesn't match .spl file: %s"
msgstr "E781: Le fichier .sug ne correspond pas au fichier .spl : %s"
-#: ../spell.c:9305
#, c-format
msgid "E782: error while reading .sug file: %s"
msgstr "E782: Erreur lors de la lecture de fichier de suggestions : %s"
#. This should have been checked when generating the .spl
#. file.
-#: ../spell.c:11575
msgid "E783: duplicate char in MAP entry"
msgstr "E783: caractères dupliqué dans l'entrée MAP"
-#: ../syntax.c:266
msgid "No Syntax items defined for this buffer"
msgstr "Aucun élément de syntaxe défini pour ce tampon"
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
#, c-format
msgid "E390: Illegal argument: %s"
msgstr "E390: Argument invalide : %s"
-#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
msgstr "E391: Aucune grappe de syntaxe %s"
-#: ../syntax.c:3433
msgid "syncing on C-style comments"
msgstr "synchronisation sur les commentaires de type C"
-#: ../syntax.c:3439
msgid "no syncing"
msgstr "Aucune synchronisation"
# DB - Les deux messages qui suivent vont ensemble.
-#: ../syntax.c:3441
msgid "syncing starts "
msgstr "La synchronisation débute "
-#: ../syntax.c:3443 ../syntax.c:3506
msgid " lines before top line"
msgstr " lignes avant la ligne du haut"
-#: ../syntax.c:3448
msgid ""
"\n"
"--- Syntax sync items ---"
@@ -5963,7 +4750,6 @@ msgstr ""
"\n"
"--- Éléments de synchronisation syntaxique ---"
-#: ../syntax.c:3452
msgid ""
"\n"
"syncing on items"
@@ -5971,7 +4757,6 @@ msgstr ""
"\n"
"synchronisation sur éléments"
-#: ../syntax.c:3457
msgid ""
"\n"
"--- Syntax items ---"
@@ -5979,275 +4764,216 @@ msgstr ""
"\n"
"--- Éléments de syntaxe ---"
-#: ../syntax.c:3475
#, c-format
msgid "E392: No such syntax cluster: %s"
msgstr "E392: Aucune grappe de syntaxe %s"
-#: ../syntax.c:3497
msgid "minimal "
msgstr "minimum "
-#: ../syntax.c:3503
msgid "maximal "
msgstr "maximum "
# DB - todo
-#: ../syntax.c:3513
msgid "; match "
msgstr "; correspond avec "
# DB - todo
-#: ../syntax.c:3515
msgid " line breaks"
msgstr " coupures de ligne"
-#: ../syntax.c:4076
msgid "E395: contains argument not accepted here"
msgstr "E395: L'argument « contains » n'est pas accepté ici"
-#: ../syntax.c:4096
msgid "E844: invalid cchar value"
msgstr "E844: valeur de cchar invalide"
-#: ../syntax.c:4107
msgid "E393: group[t]here not accepted here"
msgstr "E393: L'argument « group[t]here » n'est pas accepté ici"
-#: ../syntax.c:4126
#, c-format
msgid "E394: Didn't find region item for %s"
msgstr "E394: Aucun élément de type région trouvé pour %s"
-#: ../syntax.c:4188
msgid "E397: Filename required"
msgstr "E397: Nom de fichier requis"
-#: ../syntax.c:4221
msgid "E847: Too many syntax includes"
msgstr "E847: Trop d'inclusions de syntaxe"
-#: ../syntax.c:4303
#, c-format
msgid "E789: Missing ']': %s"
msgstr "E789: ']' manquant : %s"
-#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
msgstr "E398: '=' manquant : %s"
-#: ../syntax.c:4666
#, c-format
msgid "E399: Not enough arguments: syntax region %s"
msgstr "E399: Pas assez d'arguments : syntax region %s"
-#: ../syntax.c:4870
msgid "E848: Too many syntax clusters"
msgstr "E848: Trop de grappes de syntaxe"
-#: ../syntax.c:4954
msgid "E400: No cluster specified"
msgstr "E400: Aucune grappe spécifiée"
#. end delimiter not found
-#: ../syntax.c:4986
#, c-format
msgid "E401: Pattern delimiter not found: %s"
msgstr "E401: Délimiteur de motif introuvable : %s"
-#: ../syntax.c:5049
#, c-format
msgid "E402: Garbage after pattern: %s"
msgstr "E402: caractères en trop après le motif : %s"
-#: ../syntax.c:5120
msgid "E403: syntax sync: line continuations pattern specified twice"
msgstr ""
"E403: synchro syntax : motif de continuation de ligne présent deux fois"
-#: ../syntax.c:5169
#, c-format
msgid "E404: Illegal arguments: %s"
msgstr "E404: Arguments invalides : %s"
-#: ../syntax.c:5217
#, c-format
msgid "E405: Missing equal sign: %s"
msgstr "E405: '=' manquant : %s"
-#: ../syntax.c:5222
#, c-format
msgid "E406: Empty argument: %s"
msgstr "E406: Argument vide : %s"
-#: ../syntax.c:5240
#, c-format
msgid "E407: %s not allowed here"
msgstr "E407: %s n'est pas autorisé ici"
-#: ../syntax.c:5246
#, c-format
msgid "E408: %s must be first in contains list"
msgstr "E408: %s doit être le premier élément d'une liste « contains »"
-#: ../syntax.c:5304
#, c-format
msgid "E409: Unknown group name: %s"
msgstr "E409: Nom de groupe inconnu : %s"
-#: ../syntax.c:5512
#, c-format
msgid "E410: Invalid :syntax subcommand: %s"
msgstr "E410: Sous-commande de :syntax invalide : %s"
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
+#~ msgid ""
+#~ " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
+#~ msgstr ""
-#: ../syntax.c:6146
msgid "E679: recursive loop loading syncolor.vim"
msgstr "E679: boucle récursive lors du chargement de syncolor.vim"
-#: ../syntax.c:6256
#, c-format
msgid "E411: highlight group not found: %s"
msgstr "E411: groupe de surbrillance introuvable : %s"
-#: ../syntax.c:6278
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
msgstr "E412: Trop peu d'arguments : \":highlight link %s\""
-#: ../syntax.c:6284
#, c-format
msgid "E413: Too many arguments: \":highlight link %s\""
msgstr "E413: Trop d'arguments : \":highlight link %s\""
-#: ../syntax.c:6302
msgid "E414: group has settings, highlight link ignored"
msgstr "E414: le groupe a déjà des attributs, lien de surbrillance ignoré"
-#: ../syntax.c:6367
#, c-format
msgid "E415: unexpected equal sign: %s"
msgstr "E415: signe égal inattendu : %s"
-#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
msgstr "E416: '=' manquant : %s"
-#: ../syntax.c:6418
#, c-format
msgid "E417: missing argument: %s"
msgstr "E417: argument manquant : %s"
-#: ../syntax.c:6446
#, c-format
msgid "E418: Illegal value: %s"
msgstr "E418: Valeur invalide : %s"
-#: ../syntax.c:6496
msgid "E419: FG color unknown"
msgstr "E419: Couleur de premier plan inconnue"
-#: ../syntax.c:6504
msgid "E420: BG color unknown"
msgstr "E420: Couleur d'arrière-plan inconnue"
-#: ../syntax.c:6564
#, c-format
msgid "E421: Color name or number not recognized: %s"
msgstr "E421: Nom ou numéro de couleur non reconnu : %s"
-#: ../syntax.c:6714
#, c-format
msgid "E422: terminal code too long: %s"
msgstr "E422: le code de terminal est trop long : %s"
-#: ../syntax.c:6753
#, c-format
msgid "E423: Illegal argument: %s"
msgstr "E423: Argument invalide : %s"
-#: ../syntax.c:6925
msgid "E424: Too many different highlighting attributes in use"
msgstr ""
"E424: Trop d'attributs de surbrillance différents en cours d'utilisation"
-#: ../syntax.c:7427
msgid "E669: Unprintable character in group name"
msgstr "E669: Caractère non-imprimable dans un nom de groupe"
-#: ../syntax.c:7434
msgid "W18: Invalid character in group name"
msgstr "W18: Caractère invalide dans un nom de groupe"
-#: ../syntax.c:7448
msgid "E849: Too many highlight and syntax groups"
msgstr "E849: Trop de groupes de surbrillance et de syntaxe"
-#: ../tag.c:104
msgid "E555: at bottom of tag stack"
msgstr "E555: En bas de la pile de marqueurs"
-#: ../tag.c:105
msgid "E556: at top of tag stack"
msgstr "E556: Au sommet de la pile de marqueurs"
-#: ../tag.c:380
msgid "E425: Cannot go before first matching tag"
msgstr "E425: Impossible d'aller avant le premier marqueur correspondant"
-#: ../tag.c:504
#, c-format
msgid "E426: tag not found: %s"
msgstr "E426: Marqueur introuvable : %s"
-#: ../tag.c:528
msgid " # pri kind tag"
msgstr " # pri type marqueur"
-#: ../tag.c:531
msgid "file\n"
msgstr "fichier\n"
-#: ../tag.c:829
msgid "E427: There is only one matching tag"
msgstr "E427: Il n'y a qu'un marqueur correspondant"
-#: ../tag.c:831
msgid "E428: Cannot go beyond last matching tag"
msgstr "E428: Impossible d'aller au-delà du dernier marqueur correspondant"
-#: ../tag.c:850
#, c-format
msgid "File \"%s\" does not exist"
msgstr "Le fichier \"%s\" n'existe pas"
#. Give an indication of the number of matching tags
-#: ../tag.c:859
#, c-format
msgid "tag %d of %d%s"
msgstr "marqueur %d sur %d%s"
-#: ../tag.c:862
msgid " or more"
msgstr " ou plus"
-#: ../tag.c:864
msgid " Using tag with different case!"
msgstr " Utilisation d'un marqueur avec une casse différente !"
-#: ../tag.c:909
#, c-format
msgid "E429: File \"%s\" does not exist"
msgstr "E429: Le fichier \"%s\" n'existe pas"
#. Highlight title
-#: ../tag.c:960
msgid ""
"\n"
" # TO tag FROM line in file/text"
@@ -6255,80 +4981,63 @@ msgstr ""
"\n"
" # VERS marqueur DE ligne dans le fichier/texte"
-#: ../tag.c:1303
#, c-format
msgid "Searching tags file %s"
msgstr "Examen du fichier de marqueurs %s"
-#: ../tag.c:1545
msgid "Ignoring long line in tags file"
msgstr "Ignore longue ligne dans le fichier de marqueurs"
-#: ../tag.c:1915
#, c-format
msgid "E431: Format error in tags file \"%s\""
msgstr "E431: Erreur de format dans le fichier de marqueurs \"%s\""
-#: ../tag.c:1917
#, c-format
msgid "Before byte %<PRId64>"
msgstr "Avant l'octet %<PRId64>"
-#: ../tag.c:1929
#, c-format
msgid "E432: Tags file not sorted: %s"
msgstr "E432: Le fichier de marqueurs %s n'est pas ordonné"
#. never opened any tags file
-#: ../tag.c:1960
msgid "E433: No tags file"
msgstr "E433: Aucun fichier de marqueurs"
-#: ../tag.c:2536
msgid "E434: Can't find tag pattern"
msgstr "E434: Le motif de marqueur est introuvable"
-#: ../tag.c:2544
msgid "E435: Couldn't find tag, just guessing!"
msgstr "E435: Marqueur introuvable, tentative pour deviner !"
-#: ../tag.c:2797
#, c-format
msgid "Duplicate field name: %s"
msgstr "Nom de champ dupliqué : %s"
-#: ../term.c:1442
msgid "' not known. Available builtin terminals are:"
msgstr "' inconnu. Les terminaux intégrés sont :"
-#: ../term.c:1463
msgid "defaulting to '"
msgstr "utilisation par défaut de '"
-#: ../term.c:1731
msgid "E557: Cannot open termcap file"
msgstr "E557: Impossible d'ouvrir le fichier termcap"
-#: ../term.c:1735
msgid "E558: Terminal entry not found in terminfo"
msgstr "E558: La description du terminal est introuvable dans terminfo"
-#: ../term.c:1737
msgid "E559: Terminal entry not found in termcap"
msgstr "E559: La description du terminal est introuvable dans termcap"
-#: ../term.c:1878
#, c-format
msgid "E436: No \"%s\" entry in termcap"
msgstr "E436: Aucune entrée \"%s\" dans termcap"
# DB - todo : Comment améliorer ?
-#: ../term.c:2249
msgid "E437: terminal capability \"cm\" required"
msgstr "E437: capacité de terminal \"cm\" requise"
#. Highlight title
-#: ../term.c:4376
msgid ""
"\n"
"--- Terminal keys ---"
@@ -6336,174 +5045,137 @@ msgstr ""
"\n"
"--- Touches du terminal ---"
-#: ../ui.c:481
msgid "Vim: Error reading input, exiting...\n"
msgstr "Vim : Erreur lors de la lecture de l'entrée, sortie...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
-#: ../undo.c:379
#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Le nombre de lignes a été changé inopinément"
+#~ msgid "E881: Line count changed unexpectedly"
+#~ msgstr "E834: Le nombre de lignes a été changé inopinément"
-#: ../undo.c:627
#, c-format
msgid "E828: Cannot open undo file for writing: %s"
msgstr "E828: Impossible d'ouvrir le fichier d'annulations en écriture : %s"
-#: ../undo.c:717
#, c-format
msgid "E825: Corrupted undo file (%s): %s"
msgstr "E825: Fichier d'annulations corrompu (%s) : %s"
-#: ../undo.c:1039
msgid "Cannot write undo file in any directory in 'undodir'"
msgstr ""
"Impossible d'écrire le fichier d'annulations dans n'importe quel répertoire "
"de 'undodir'"
-#: ../undo.c:1074
#, c-format
msgid "Will not overwrite with undo file, cannot read: %s"
msgstr "Le fichier d'annulations ne sera pas écrasé, impossible de lire : %s"
-#: ../undo.c:1092
#, c-format
msgid "Will not overwrite, this is not an undo file: %s"
msgstr "Fichier ne sera pas écrasé, ce n'est pas un fichier d'annulations : %s"
-#: ../undo.c:1108
msgid "Skipping undo file write, nothing to undo"
msgstr "Le fichier d'annulations n'est pas écrit, rien à annuler"
-#: ../undo.c:1121
#, c-format
msgid "Writing undo file: %s"
msgstr "Écriture du fichier d'annulations : %s"
-#: ../undo.c:1213
#, c-format
msgid "E829: write error in undo file: %s"
msgstr "E829: Erreur d'écriture dans le fichier d'annulations : %s"
-#: ../undo.c:1280
#, c-format
msgid "Not reading undo file, owner differs: %s"
msgstr "Le fichier d'annulations n'est pas lu, propriétaire différent : %s"
-#: ../undo.c:1292
#, c-format
msgid "Reading undo file: %s"
msgstr "Lecture du fichier d'annulations : %s..."
-#: ../undo.c:1299
#, c-format
msgid "E822: Cannot open undo file for reading: %s"
msgstr "E822: Impossible d'ouvrir le fichier d'annulations en lecture : %s"
-#: ../undo.c:1308
#, c-format
msgid "E823: Not an undo file: %s"
msgstr "E823: Ce n'est pas un fichier d'annulations : %s"
-#: ../undo.c:1313
#, c-format
msgid "E824: Incompatible undo file: %s"
msgstr "E824: Fichier d'annulations incompatible : %s"
-#: ../undo.c:1328
msgid "File contents changed, cannot use undo info"
msgstr ""
"Le contenu du fichier a changé, impossible d'utiliser les informations "
"d'annulation"
-#: ../undo.c:1497
#, c-format
msgid "Finished reading undo file %s"
msgstr "Fin de lecture du fichier d'annulations %s"
-#: ../undo.c:1586 ../undo.c:1812
msgid "Already at oldest change"
msgstr "Déjà à la modification la plus ancienne"
-#: ../undo.c:1597 ../undo.c:1814
msgid "Already at newest change"
msgstr "Déjà à la modification la plus récente"
-#: ../undo.c:1806
#, c-format
msgid "E830: Undo number %<PRId64> not found"
msgstr "E830: Annulation n° %<PRId64> introuvable"
-#: ../undo.c:1979
msgid "E438: u_undo: line numbers wrong"
msgstr "E438: u_undo : numéros de ligne erronés"
-#: ../undo.c:2183
msgid "more line"
msgstr "ligne en plus"
-#: ../undo.c:2185
msgid "more lines"
msgstr "lignes en plus"
-#: ../undo.c:2187
msgid "line less"
msgstr "ligne en moins"
-#: ../undo.c:2189
msgid "fewer lines"
msgstr "lignes en moins"
-#: ../undo.c:2193
msgid "change"
msgstr "modification"
-#: ../undo.c:2195
msgid "changes"
msgstr "modifications"
-#: ../undo.c:2225
#, c-format
msgid "%<PRId64> %s; %s #%<PRId64> %s"
msgstr "%<PRId64> %s ; %s #%<PRId64> ; %s"
-#: ../undo.c:2228
msgid "before"
msgstr "avant"
-#: ../undo.c:2228
msgid "after"
msgstr "après"
-#: ../undo.c:2325
msgid "Nothing to undo"
msgstr "Rien à annuler"
# DB - Les deux premières colonnes sont alignées à droite.
-#: ../undo.c:2330
msgid "number changes when saved"
msgstr "numéro modif. instant enregistré"
-#: ../undo.c:2360
#, c-format
msgid "%<PRId64> seconds ago"
msgstr "il y a %<PRId64> secondes"
-#: ../undo.c:2372
msgid "E790: undojoin is not allowed after undo"
msgstr "E790: undojoin n'est pas autorisé après une annulation"
-#: ../undo.c:2466
msgid "E439: undo list corrupt"
msgstr "E439: la liste d'annulation est corrompue"
-#: ../undo.c:2495
msgid "E440: undo line missing"
msgstr "E440: ligne d'annulation manquante"
-#: ../version.c:600
msgid ""
"\n"
"Included patches: "
@@ -6511,7 +5183,6 @@ msgstr ""
"\n"
"Rustines incluses : "
-#: ../version.c:627
msgid ""
"\n"
"Extra patches: "
@@ -6519,11 +5190,9 @@ msgstr ""
"\n"
"Rustines extra : "
-#: ../version.c:639 ../version.c:864
msgid "Modified by "
msgstr "Modifié par "
-#: ../version.c:646
msgid ""
"\n"
"Compiled "
@@ -6531,11 +5200,9 @@ msgstr ""
"\n"
"Compilé "
-#: ../version.c:649
msgid "by "
msgstr "par "
-#: ../version.c:660
msgid ""
"\n"
"Huge version "
@@ -6543,164 +5210,125 @@ msgstr ""
"\n"
"Énorme version "
-#: ../version.c:661
msgid "without GUI."
msgstr "sans interface graphique."
-#: ../version.c:662
msgid " Features included (+) or not (-):\n"
msgstr " Fonctionnalités incluses (+) ou non (-) :\n"
-#: ../version.c:667
msgid " system vimrc file: \""
msgstr " fichier vimrc système : \""
-#: ../version.c:672
msgid " user vimrc file: \""
msgstr " fichier vimrc utilisateur : \""
-#: ../version.c:677
msgid " 2nd user vimrc file: \""
msgstr " 2me fichier vimrc utilisateur : \""
-#: ../version.c:682
msgid " 3rd user vimrc file: \""
msgstr " 3me fichier vimrc utilisateur : \""
-#: ../version.c:687
msgid " user exrc file: \""
msgstr " fichier exrc utilisateur : \""
-#: ../version.c:692
msgid " 2nd user exrc file: \""
msgstr " 2me fichier exrc utilisateur : \""
-#: ../version.c:699
msgid " fall-back for $VIM: \""
msgstr " $VIM par défaut : \""
-#: ../version.c:705
msgid " f-b for $VIMRUNTIME: \""
msgstr " $VIMRUNTIME par défaut : \""
-#: ../version.c:709
msgid "Compilation: "
msgstr "Compilation : "
-#: ../version.c:712
msgid "Linking: "
msgstr "Édition de liens : "
-#: ../version.c:717
msgid " DEBUG BUILD"
msgstr " VERSION DE DÉBOGAGE"
-#: ../version.c:767
msgid "VIM - Vi IMproved"
msgstr "VIM - Vi Amélioré"
-#: ../version.c:769
msgid "version "
msgstr "version "
-#: ../version.c:770
msgid "by Bram Moolenaar et al."
msgstr "par Bram Moolenaar et al."
-#: ../version.c:774
msgid "Vim is open source and freely distributable"
msgstr "Vim est un logiciel libre"
-#: ../version.c:776
msgid "Help poor children in Uganda!"
msgstr "Aidez les enfants pauvres d'Ouganda !"
-#: ../version.c:777
msgid "type :help iccf<Enter> for information "
msgstr "tapez :help iccf<Entrée> pour plus d'informations "
-#: ../version.c:779
msgid "type :q<Enter> to exit "
msgstr "tapez :q<Entrée> pour sortir du programme "
-#: ../version.c:780
msgid "type :help<Enter> or <F1> for on-line help"
msgstr "tapez :help<Entrée> ou <F1> pour accéder à l'aide en ligne "
-#: ../version.c:781
msgid "type :help version7<Enter> for version info"
msgstr "tapez :help version7<Entrée> pour lire les notes de mise à jour"
# DB - Pour les trois messages qui suivent :
# :set cp
# :intro
-#: ../version.c:784
msgid "Running in Vi compatible mode"
msgstr "Compatibilité avec Vi activée"
-#: ../version.c:785
msgid "type :set nocp<Enter> for Vim defaults"
msgstr "tapez :set nocp<Entrée> pour la désactiver"
-#: ../version.c:786
msgid "type :help cp-default<Enter> for info on this"
msgstr "tapez :help cp-default<Entrée> pour plus d'info"
-#: ../version.c:827
msgid "Sponsor Vim development!"
msgstr "Sponsorisez le développement de Vim !"
-#: ../version.c:828
msgid "Become a registered Vim user!"
msgstr "Devenez un utilisateur de Vim enregistré !"
-#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
msgstr "tapez :help sponsor<Entrée> pour plus d'informations "
-#: ../version.c:832
msgid "type :help register<Enter> for information "
msgstr "tapez :help register<Entrée> pour plus d'informations "
-#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
msgstr "menu Aide->Sponsor/Enregistrement pour plus d'info"
-#: ../window.c:119
msgid "Already only one window"
msgstr "Il n'y a déjà plus qu'une fenêtre"
-#: ../window.c:224
msgid "E441: There is no preview window"
msgstr "E441: Il n'y a pas de fenêtre de prévisualisation"
-#: ../window.c:559
msgid "E442: Can't split topleft and botright at the same time"
msgstr "E442: Impossible de partager topleft et botright en même temps"
-#: ../window.c:1228
msgid "E443: Cannot rotate when another window is split"
msgstr "E443: Rotation impossible quand une autre fenêtre est partagée"
-#: ../window.c:1803
msgid "E444: Cannot close last window"
msgstr "E444: Impossible de fermer la dernière fenêtre"
-#: ../window.c:1810
msgid "E813: Cannot close autocmd window"
msgstr "E813: Impossible de fermer la fenêtre des autocommandes"
-#: ../window.c:1814
msgid "E814: Cannot close window, only autocmd window would remain"
msgstr ""
"E814: Impossible de fermer la fenêtre, seule la fenêtre des autocommandes "
"resterait"
-#: ../window.c:2717
msgid "E445: Other window contains changes"
msgstr "E445: Les modifications de l'autre fenêtre n'ont pas été enregistrées"
-#: ../window.c:4805
msgid "E446: No file name under cursor"
msgstr "E446: Aucun nom de fichier sous le curseur"
@@ -6881,6 +5509,12 @@ msgstr "E446: Aucun nom de fichier sous le curseur"
#~ msgid "E232: Cannot create BalloonEval with both message and callback"
#~ msgstr "E232: Impossible de créer un BalloonEval avec message ET callback"
+msgid "Yes"
+msgstr "Oui"
+
+msgid "No"
+msgstr "Non"
+
# todo '_' is for hotkey, i guess?
#~ msgid "Input _Methods"
#~ msgstr "_Méthodes de saisie"
diff --git a/src/nvim/po/ga.po b/src/nvim/po/ga.po
index f7117c6e86..761539039d 100644
--- a/src/nvim/po/ga.po
+++ b/src/nvim/po/ga.po
@@ -2684,11 +2684,6 @@ msgstr "E49: Méid neamhbhailí scrollaithe"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4286,11 +4281,6 @@ msgstr "líne %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ainm neamhbhailí tabhaill: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Cothaitheoir na dteachtaireachtaí: Kevin P. Scannell <scannell@slu.edu>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Idirbhriseadh: "
diff --git a/src/nvim/po/it.po b/src/nvim/po/it.po
index 171e155689..b8b119ade6 100644
--- a/src/nvim/po/it.po
+++ b/src/nvim/po/it.po
@@ -13,13 +13,13 @@ msgid ""
msgstr ""
"Project-Id-Version: vim 7.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2015-08-11 20:58+0200\n"
-"PO-Revision-Date: 2015-08-11 22:02+0200\n"
-"Last-Translator: Vlad Sandrini <vlad.gently@gmail.com>\n"
-"Language-Team: Italian Antonio Colombo <azc100@gmail."
-"com> Vlad Sandrini <vlad.gently@gmail."
-"com> Luciano Montanaro <mikelima@cirulla.net>\n"
-"Language: \n"
+"POT-Creation-Date: 2016-02-11 12:10+0100\n"
+"PO-Revision-Date: 2016-02-11 14:42+0200\n"
+"Last-Translator: Antonio Colombo <azc100@gmail.com>\n"
+"Language-Team: Antonio Colombo <azc100@gmail.com>"
+" Vlad Sandrini <vlad.gently@gmail.com"
+" Luciano Montanaro <mikelima@cirulla.net>\n"
+"Language: Italian\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=ISO_8859-1\n"
"Content-Transfer-Encoding: 8-bit\n"
@@ -491,10 +491,6 @@ msgstr "E686: L'argomento di %s deve essere una Lista"
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: L'argomento di %s deve essere una Lista o un Dizionario"
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Non posso usare una chiave nulla per il Dizionario"
-
#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: È necessaria una Lista"
@@ -548,7 +544,7 @@ msgstr "E461: Nome di variabile non ammesso: %s"
# nuovo
#: ../eval.c:157
msgid "E806: using Float as a String"
-msgstr "E806: uso di un numero con virgola come stringa"
+msgstr "E806: uso di un Numero-a-virgola-mobile come Stringa"
#: ../eval.c:1830
msgid "E687: Less targets than List items"
@@ -635,7 +631,7 @@ msgstr "E694: Operazione non valida per Funcref"
#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Non si può usare '%' con un numero con virgola"
+msgstr "E804: Non si può usare '%' con un Numero-a-virgola-mobile"
#: ../eval.c:4478
msgid "E110: Missing ')'"
@@ -645,6 +641,9 @@ msgstr "E110: Manca ')'"
msgid "E695: Cannot index a Funcref"
msgstr "E695: Non posso indicizzare un Funcref"
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Non posso indicizzare una variabile speciale"
+
#: ../eval.c:4839
#, c-format
msgid "E112: Option name missing: %s"
@@ -736,7 +735,7 @@ msgstr "E725: Chiamata di funzione dict in assenza di Dizionario: %s"
#: ../eval.c:7453
msgid "E808: Number or Float required"
-msgstr "E808: Ci vuole un numero intero o con virgola"
+msgstr "E808: Ci vuole un Numero o un Numero-a-virgola-mobile"
#: ../eval.c:7503
msgid "add() argument"
@@ -847,7 +846,7 @@ msgstr "E677: Errore in scrittura su file temporaneo"
#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
-msgstr "E805: Uso di un numero con virgola come intero"
+msgstr "E805: Uso di un Numero-a-virgola-mobile come Numero"
#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
@@ -861,6 +860,18 @@ msgstr "E745: Uso di Lista come Numero"
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Uso di Dizionario come Numero"
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Uso di Funcref come Numero-a-virgola-mobile"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: Uso di Stringa come Numero-a-virgola-mobile"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: Uso di Lista come Numero-a-virgola-mobile"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Uso di Dizionario come Numero-a-virgola-mobile"
+
#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: uso di Funcref come Stringa"
@@ -873,6 +884,10 @@ msgstr "E730: uso di Lista come Stringa"
msgid "E731: using Dictionary as a String"
msgstr "E731: uso di Dizionario come Stringa"
+# nuovo
+msgid "E908: using an invalid value as a String"
+msgstr "E908: uso di un valore non valido come Stringa"
+
#: ../eval.c:16619
#, c-format
msgid "E706: Variable type mismatch for: %s"
@@ -960,12 +975,14 @@ msgid "E129: Function name required"
msgstr "E129: Nome funzione necessario"
#: ../eval.c:17824
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: Il nome funzione deve iniziare con una maiuscola o \"s:\": %s"
+msgstr "E128: Il nome funzione deve iniziare con maiuscola o \"s:\": %s"
#: ../eval.c:17833
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E884: Il nome funzione non può contenere una virgola: %s"
+msgstr "E884: Il nome della funzione non può contenere un due punti: %s"
#: ../eval.c:18336
#, c-format
@@ -1382,6 +1399,13 @@ msgstr "riga %<PRId64>: %s"
msgid "cmd: %s"
msgstr "com: %s"
+msgid "frame is zero"
+msgstr "al livello zero"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "al livello più alto: %d"
+
#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
@@ -1422,8 +1446,7 @@ msgstr "E162: Buffer \"%s\" non salvato dopo modifica"
#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
msgstr ""
-"Avviso: Entrato in altro buffer inaspettatamente (controllare "
-"autocomandi)"
+"Avviso: Entrato in altro buffer inaspettatamente (controllare autocomandi)"
#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
@@ -2301,19 +2324,19 @@ msgstr "[in formato DOS]"
#: ../fileio.c:3801
msgid "[mac]"
-msgstr "[MAC]"
+msgstr "[Mac]"
#: ../fileio.c:3801
msgid "[mac format]"
-msgstr "[in formato MAC]"
+msgstr "[in formato Mac]"
#: ../fileio.c:3807
msgid "[unix]"
-msgstr "[UNIX]"
+msgstr "[Unix]"
#: ../fileio.c:3807
msgid "[unix format]"
-msgstr "[in formato UNIX]"
+msgstr "[in formato Unix]"
#: ../fileio.c:3831
msgid "1 line, "
@@ -2518,7 +2541,7 @@ msgstr "E490: Non trovo alcuna piegatura"
#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Non posso create piegatura con il 'foldmethod' in uso"
+msgstr "E350: Non posso creare piegatura con il 'foldmethod' in uso"
#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
@@ -2681,11 +2704,6 @@ msgstr "E900: 'Job id' non valido"
msgid "E901: Job table is full"
msgstr "E901: Job table piena"
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr "E902: \"%s\" non è un esegubile"
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -2864,6 +2882,9 @@ msgstr "E46: Non posso cambiare la variabile read-only \"%s\""
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr "E794: Non posso impostare la variabile read-only in ambiente protetto: \"%s\""
+msgid "E713: Cannot use empty key for Dictionary"
+msgstr "E713: Non posso usare una chiave nulla per il Dizionario"
+
#: ../globals.h:1076
msgid "E47: Error while reading errorfile"
msgstr "E47: Errore leggendo il file errori"
@@ -4087,12 +4108,12 @@ msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
" be careful not to end up with two different instances of the same\n"
-" file when making changes."
+" file when making changes. Quit, or continue with caution.\n"
msgstr ""
"\n"
-"(1) Un altro programma può essere in edit sullo stesso file.\n"
-" Se è così, attenzione a non trovarti con due versioni\n"
-" differenti dello stesso file a cui vengono apportate modifiche."
+"(1) Un altro programma può essere in edit sullo stesso file. Se è così,\n"
+" attenzione a non finire con due sessioni differenti che modificano lo\n"
+" stesso file. Uscire da Vim, o continuare con cautela.\n"
#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
@@ -4268,10 +4289,6 @@ msgstr "riga %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Nome registro non valido: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Manutentore messaggi: Vlad Sandrini <marco@sandrini.biz>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Interruzione: "
@@ -4335,7 +4352,7 @@ msgstr "E766: Argomenti non sufficienti per printf()"
#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Numero con virgola atteso come argomento per printf()"
+msgstr "E807: Numero-a-virgola-mobile atteso come argomento per printf()"
#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
@@ -4526,7 +4543,8 @@ msgstr "E574: Tipo di registro sconosciuto: %d"
msgid ""
"E883: search pattern and expression register may not contain two or more "
"lines"
-msgstr "E883: espressione di ricerca e registro dell'espressione non possono "
+msgstr ""
+"E883: espressione di ricerca e registro dell'espressione non possono "
"contenere due o più righe"
#: ../ops.c:5089
@@ -4794,6 +4812,14 @@ msgstr ""
"\n"
"Non posso impostare il contesto di sicurezza per "
+#, c-format
+msgid "Could not set security context %s for %s"
+msgstr "Non posso impostare il contesto di sicurezza %s per %s"
+
+#, c-format
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr "Non posso ottenere il contesto di sicurezza %s per %s. Lo rimuovo!"
+
#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
@@ -4890,6 +4916,7 @@ msgid "E777: String or List expected"
msgstr "E777: aspettavo Stringa o Lista"
#: ../regexp.c:359
+#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: elemento non valido in %s%%[]"
@@ -5005,6 +5032,7 @@ msgid "External submatches:\n"
msgstr "Sotto-corrispondenze esterne:\n"
#: ../regexp.c:2470
+#, c-format
msgid "E888: (NFA regexp) cannot repeat %s"
msgstr "E888: (NFA regexp) non riesco a ripetere %s"
@@ -5399,8 +5427,7 @@ msgstr "Valore errato per CHECKCOMPOUNDPATTERN in %s riga %d: %s"
#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-"Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s"
+msgstr "Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s"
#: ../spell.c:4850
#, c-format
@@ -5639,10 +5666,12 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' non ha %<PRId64> elementi"
#: ../spell.c:8074
+#, c-format
msgid "Word '%.*s' removed from %s"
msgstr "Parola '%.*s' rimossa da %s"
#: ../spell.c:8117
+#, c-format
msgid "Word '%.*s' added to %s"
msgstr "Parola '%.*s' aggiunta a %s"
@@ -5720,6 +5749,9 @@ msgstr "Nessun elemento sintattico definito per questo buffer"
msgid "E390: Illegal argument: %s"
msgstr "E390: Argomento non ammesso: %s"
+msgid "syntax iskeyword "
+msgstr "syntax iskeyword "
+
#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
@@ -5816,6 +5848,9 @@ msgstr "E847: Troppe inclusioni di sintassi"
msgid "E789: Missing ']': %s"
msgstr "E789: Manca ']': %s"
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: Caratteri in più dopo ']': %s]%s"
+
#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
diff --git a/src/nvim/po/ja.euc-jp.po b/src/nvim/po/ja.euc-jp.po
index d3061d3c5a..c6425324b1 100644
--- a/src/nvim/po/ja.euc-jp.po
+++ b/src/nvim/po/ja.euc-jp.po
@@ -1,11 +1,11 @@
-# Japanese translation for Vim vim:set foldmethod=marker:
+# Japanese translation for Vim
#
# Do ":help uganda" in Vim to read copying and usage conditions.
# Do ":help credits" in Vim to see a list of people who contributed.
#
-# Last Change: 2013 Jul 06
+# Copyright (C) 2001-2016 MURAOKA Taro <koron.kaoriya@gmail.com>,
+# vim-jp (http://vim-jp.org/)
#
-# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
#
# Generated from ja.po, DO NOT EDIT.
@@ -14,10 +14,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim 7.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2013-07-06 15:00+0900\n"
+"POT-Creation-Date: 2016-02-01 09:02+0900\n"
+"PO-Revision-Date: 2016-02-01 09:08+0900\n"
"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
-"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language-Team: vim-jp (https://github.com/vim-jp/lang-ja)\n"
"Language: Japanese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=euc-jp\n"
@@ -34,7 +34,7 @@ msgstr "ÆâÉô¥¨¥é¡¼: ̤ÃΤΥª¥×¥·¥ç¥ó·¿¤Ç¤¹"
#: ../buffer.c:92
msgid "[Location List]"
-msgstr "[¾ì½ê¥ê¥¹¥È]"
+msgstr "[¥í¥±¡¼¥·¥ç¥ó¥ê¥¹¥È]"
#: ../buffer.c:93
msgid "[Quickfix List]"
@@ -277,7 +277,7 @@ msgstr "E810: °ì»þ¥Õ¥¡¥¤¥ë¤ÎÆÉ¹þ¤â¤·¤¯¤Ï½ñ¹þ¤¬¤Ç¤­¤Þ¤»¤ó"
#: ../diff.c:755
msgid "E97: Cannot create diffs"
-msgstr "E97: º¹Ê¬¤òºîÀ®¤Ç¤­¤Þ¤»¤ó "
+msgstr "E97: º¹Ê¬¤òºîÀ®¤Ç¤­¤Þ¤»¤ó"
#: ../diff.c:966
msgid "E816: Cannot read patch output"
@@ -293,7 +293,7 @@ msgstr "E99: ¸½ºß¤Î¥Ð¥Ã¥Õ¥¡¤Ïº¹Ê¬¥â¡¼¥É¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: º¹Ê¬¥â¡¼¥É¤Ç¤¢¤ë¾¤Î¥Ð¥Ã¥Õ¥¡¤ÏÊѹ¹²Äǽ¤Ç¤¹"
+msgstr "E793: º¹Ê¬¥â¡¼¥É¤Ç¤¢¤ë¾¤Î¥Ð¥Ã¥Õ¥¡¤ÏÊѹ¹¤Ç¤­¤Þ¤»¤ó"
#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
@@ -349,7 +349,7 @@ msgstr " ¹Ô(Á´ÂÎ)Êä´° (^L^N^P)"
#: ../edit.c:86
msgid " File name completion (^F^N^P)"
-msgstr "¥Õ¥¡¥¤¥ë̾Êä´° (^F^N^P)"
+msgstr " ¥Õ¥¡¥¤¥ë̾Êä´° (^F^N^P)"
#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
@@ -377,7 +377,7 @@ msgstr " ¥³¥Þ¥ó¥É¥é¥¤¥óÊä´° (^V^N^P)"
#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
-msgstr " ¥æ¡¼¥¶ÄêµÁÊä´° (^U^N^P)"
+msgstr " ¥æ¡¼¥¶¡¼ÄêµÁÊä´° (^U^N^P)"
#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
@@ -679,6 +679,11 @@ msgstr "E696: ¥ê¥¹¥È·¿¤Ë¥«¥ó¥Þ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
msgid "E697: Missing end of List ']': %s"
msgstr "E697: ¥ê¥¹¥È·¿¤ÎºÇ¸å¤Ë ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+#: ../eval.c:5807
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"¥¬¡¼¥Ù¥Ã¥¸¥³¥ì¥¯¥·¥ç¥ó¤òÃæ»ß¤·¤Þ¤·¤¿! »²¾È¤òºîÀ®¤¹¤ë¤Î¤Ë¥á¥â¥ê¤¬ÉÔ­¤·¤Þ¤·¤¿"
+
#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
@@ -721,7 +726,7 @@ msgstr "E117: ̤ÃΤδؿô¤Ç¤¹: %s"
#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: ´Ø¿ô¤Î°ú¿ô¤¬¾¯¤Ê²á¤®¤Þ¤¹: %s"
+msgstr "E119: ´Ø¿ô¤Î°ú¿ô¤¬Â­¤ê¤Þ¤»¤ó: %s"
#: ../eval.c:7387
#, c-format
@@ -826,18 +831,16 @@ msgid "sort() argument"
msgstr "sort() ¤Î°ú¿ô"
#: ../eval.c:13721
-#, fuzzy
msgid "uniq() argument"
-msgstr "add() ¤Î°ú¿ô"
+msgstr "uniq() ¤Î°ú¿ô"
#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: ¥½¡¼¥È¤ÎÈæ³Ó´Ø¿ô¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
#: ../eval.c:13806
-#, fuzzy
msgid "E882: Uniq compare function failed"
-msgstr "E702: ¥½¡¼¥È¤ÎÈæ³Ó´Ø¿ô¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
+msgstr "E882: Uniq ¤ÎÈæ³Ó´Ø¿ô¤¬¼ºÇÔ¤·¤Þ¤·¤¿"
#: ../eval.c:14085
msgid "(Invalid)"
@@ -863,6 +866,18 @@ msgstr "E745: ¥ê¥¹¥È·¿¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: ¼­½ñ·¿¤ò¿ôÃͤȤ·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: ´Ø¿ô»²¾È·¿¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹¡£"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: ʸ»úÎó¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: ¥ê¥¹¥È·¿¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: ¼­½ñ·¿¤òÉâÆ°¾®¿ôÅÀ¿ô¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
+
#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: ´Ø¿ô»²¾È·¿¤òʸ»úÎó¤È¤·¤Æ°·¤Ã¤Æ¤¤¤Þ¤¹"
@@ -961,14 +976,14 @@ msgid "E129: Function name required"
msgstr "E129: ´Ø¿ô̾¤¬Í׵ᤵ¤ì¤Þ¤¹"
#: ../eval.c:17824
-#, fuzzy, c-format
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: ´Ø¿ô̾¤ÏÂçʸ»ú¤Ç»Ï¤Þ¤ë¤«¥³¥í¥ó¤ò´Þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: %s"
+msgstr "E128: ´Ø¿ô̾¤ÏÂçʸ»ú¤« \"s:\" ¤Ç»Ï¤Þ¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: %s"
#: ../eval.c:17833
-#, fuzzy, c-format
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: ´Ø¿ô̾¤ÏÂçʸ»ú¤Ç»Ï¤Þ¤ë¤«¥³¥í¥ó¤ò´Þ¤Þ¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó: %s"
+msgstr "E884: ´Ø¿ô̾¤Ë¤Ï¥³¥í¥ó¤Ï´Þ¤á¤é¤ì¤Þ¤»¤ó: %s"
#: ../eval.c:18336
#, c-format
@@ -1081,7 +1096,7 @@ msgstr "E136: viminfo: ¥¨¥é¡¼¤¬Â¿²á¤®¤ë¤Î¤Ç, °Ê¹ß¤Ï¥¹¥­¥Ã¥×¤·¤Þ¤¹"
#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\"%s%s%s ¤òÆÉ¹þ¤ßÃæ "
+msgstr "viminfo¥Õ¥¡¥¤¥ë \"%s\"%s%s%s ¤òÆÉ¹þ¤ßÃæ"
#: ../ex_cmds.c:1460
msgid " info"
@@ -1357,6 +1372,10 @@ msgstr "E158: ̵¸ú¤Ê¥Ð¥Ã¥Õ¥¡Ì¾¤Ç¤¹: %s"
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: ̵¸ú¤Êsign¼±Ê̻ҤǤ¹: %<PRId64>"
+#, c-format
+msgid "E885: Not possible to change sign %s"
+msgstr "E885: Êѹ¹¤Ç¤­¤Ê¤¤ sign ¤Ç¤¹: %s"
+
#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " (È󥵥ݡ¼¥È)"
@@ -1379,6 +1398,13 @@ msgstr "¹Ô %<PRId64>: %s"
msgid "cmd: %s"
msgstr "¥³¥Þ¥ó¥É: %s"
+msgid "frame is zero"
+msgstr "¥Õ¥ì¡¼¥à¤¬ 0 ¤Ç¤¹"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "ºÇ¹â¥ì¥Ù¥ë¤Î¥Õ¥ì¡¼¥à: %d"
+
#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
@@ -1528,7 +1554,8 @@ msgstr "E197: ¸À¸ì¤ò \"%s\" ¤ËÀßÄê¤Ç¤­¤Þ¤»¤ó"
#. don't wait for return
#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Ex¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. ¥Î¡¼¥Þ¥ë¤ËÌá¤ë¤Ë¤Ï\"visual\"¤ÈÆþÎϤ·¤Æ¤¯¤À¤µ¤¤."
+msgstr ""
+"Ex¥â¡¼¥É¤ËÆþ¤ê¤Þ¤¹. ¥Î¡¼¥Þ¥ë¥â¡¼¥É¤ËÌá¤ë¤Ë¤Ï\"visual\"¤ÈÆþÎϤ·¤Æ¤¯¤À¤µ¤¤."
#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
@@ -1553,7 +1580,7 @@ msgstr "´Ø¿ô¤ÎºÇ¸å¤Ç¤¹"
#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ¥æ¡¼¥¶ÄêµÁ¥³¥Þ¥ó¥É¤Î¤¢¤¤¤Þ¤¤¤Ê»ÈÍѤǤ¹"
+msgstr "E464: ¥æ¡¼¥¶¡¼ÄêµÁ¥³¥Þ¥ó¥É¤Î¤¢¤¤¤Þ¤¤¤Ê»ÈÍѤǤ¹"
#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
@@ -1606,14 +1633,14 @@ msgstr "E174: ¥³¥Þ¥ó¥É¤¬´û¤Ë¤¢¤ê¤Þ¤¹: ºÆÄêµÁ¤¹¤ë¤Ë¤Ï ! ¤òÄɲ䷤Ƥ¯¤À¤µ¤¤"
#: ../ex_docmd.c:4432
msgid ""
"\n"
-" Name Args Range Complete Definition"
+" Name Args Address Complete Definition"
msgstr ""
"\n"
-" ̾Á° °ú¿ô ÈÏ°Ï Êä´° ÄêµÁ"
+" ̾Á° °ú¿ô ¥¢¥É¥ì¥¹ Êä´° ÄêµÁ"
#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
-msgstr "¥æ¡¼¥¶ÄêµÁ¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
+msgstr "¥æ¡¼¥¶¡¼ÄêµÁ¥³¥Þ¥ó¥É¤¬¸«¤Ä¤«¤ê¤Þ¤»¤ó¤Ç¤·¤¿"
#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
@@ -1633,7 +1660,10 @@ msgstr "E178: ¥«¥¦¥ó¥È¤Î¾ÊάÃͤ¬Ìµ¸ú¤Ç¤¹"
#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
-msgstr "E179: -Êä´°¤Î¤¿¤á¤Î°ú¿ô¤¬É¬ÍפǤ¹"
+msgstr "E179: -complete ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹"
+
+msgid "E179: argument required for -addr"
+msgstr "E179: -addr ¤Ë¤Ï°ú¿ô¤¬É¬ÍפǤ¹"
#: ../ex_docmd.c:4635
#, c-format
@@ -1650,12 +1680,16 @@ msgstr "E183: ¥æ¡¼¥¶ÄêµÁ¥³¥Þ¥ó¥É¤Ï±ÑÂçʸ»ú¤Ç»Ï¤Þ¤é¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó"
#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: ͽÌó̾¤Ê¤Î¤Ç, ¥æ¡¼¥¶ÄêµÁ¥³¥Þ¥ó¥É¤ËÍøÍѤǤ­¤Þ¤»¤ó"
+msgstr "E841: ͽÌó̾¤Ê¤Î¤Ç, ¥æ¡¼¥¶¡¼ÄêµÁ¥³¥Þ¥ó¥É¤ËÍøÍѤǤ­¤Þ¤»¤ó"
#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
-msgstr "E184: ¤½¤Î¥æ¡¼¥¶ÄêµÁ¥³¥Þ¥ó¥É¤Ï¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E184: ¤½¤Î¥æ¡¼¥¶¡¼ÄêµÁ¥³¥Þ¥ó¥É¤Ï¤¢¤ê¤Þ¤»¤ó: %s"
+
+#, c-format
+msgid "E180: Invalid address type value: %s"
+msgstr "E180: ̵¸ú¤Ê¥¢¥É¥ì¥¹¥¿¥¤¥×ÃͤǤ¹: %s"
#: ../ex_docmd.c:5219
#, c-format
@@ -2019,11 +2053,11 @@ msgstr "ÉÔÀµ¤Ê¥Õ¥¡¥¤¥ë̾"
#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
-msgstr " ¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
+msgstr "¤Ï¥Ç¥£¥ì¥¯¥È¥ê¤Ç¤¹"
#: ../fileio.c:397
msgid "is not a file"
-msgstr " ¤Ï¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
+msgstr "¤Ï¥Õ¥¡¥¤¥ë¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó"
#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
@@ -2039,7 +2073,7 @@ msgstr "[¥Õ¥¡¥¤¥ë²áÂç]"
#: ../fileio.c:534
msgid "[Permission Denied]"
-msgstr "[ǧ²Ä¤¬¤¢¤ê¤Þ¤»¤ó]"
+msgstr "[¸¢¸Â¤¬¤¢¤ê¤Þ¤»¤ó]"
#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
@@ -2210,7 +2244,7 @@ msgstr " ÊÑ´¹¥¨¥é¡¼"
#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
-msgstr "¹Ô %<PRId64>;"
+msgstr " ¹Ô %<PRId64>;"
#: ../fileio.c:3519
msgid "[Device]"
@@ -2650,11 +2684,6 @@ msgstr "E49: ̵¸ú¤Ê¥¹¥¯¥í¡¼¥ëÎ̤Ǥ¹"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -2766,9 +2795,8 @@ msgid "E37: No write since last change (add ! to override)"
msgstr "E37: ºÇ¸å¤ÎÊѹ¹¤¬Êݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó (! ¤òÄɲäÇÊѹ¹¤òÇË´þ)"
#: ../globals.h:1055
-#, fuzzy
msgid "E37: No write since last change"
-msgstr "[ºÇ¸å¤ÎÊѹ¹¤¬Êݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó]\n"
+msgstr "E37: ºÇ¸å¤ÎÊѹ¹¤¬Êݸ¤µ¤ì¤Æ¤¤¤Þ¤»¤ó"
#: ../globals.h:1056
msgid "E38: Null argument"
@@ -2810,7 +2838,7 @@ msgstr "E42: ¥¨¥é¡¼¤Ï¤¢¤ê¤Þ¤»¤ó"
#: ../globals.h:1067
msgid "E776: No location list"
-msgstr "E776: ¾ì½ê¥ê¥¹¥È¤Ï¤¢¤ê¤Þ¤»¤ó"
+msgstr "E776: ¥í¥±¡¼¥·¥ç¥ó¥ê¥¹¥È¤Ï¤¢¤ê¤Þ¤»¤ó"
#: ../globals.h:1068
msgid "E43: Damaged match string"
@@ -3831,7 +3859,7 @@ msgid ""
"\n"
msgstr ""
"\n"
-"¤½¤ì¤«¤é.swp¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤Æ¤¯¤À¤µ¤¤\n"
+"¸µ¤Î.swp¥Õ¥¡¥¤¥ë¤Ïºï½ü¤·¤Æ¤â¹½¤¤¤Þ¤»¤ó\n"
"\n"
#. use msg() to start the scrolling properly
@@ -3845,7 +3873,7 @@ msgstr " ¸½ºß¤Î¥Ç¥£¥ì¥¯¥È¥ê:\n"
#: ../memline.c:1448
msgid " Using specified name:\n"
-msgstr " ¤¢¤ë̾Á°¤ò»ÈÍÑÃæ:\n"
+msgstr " °Ê²¼¤Î̾Á°¤ò»ÈÍÑÃæ:\n"
#: ../memline.c:1450
msgid " In directory "
@@ -3901,7 +3929,7 @@ msgid ""
" user name: "
msgstr ""
"\n"
-" ¥æ¡¼¥¶Ì¾: "
+" ¥æ¡¼¥¶¡¼Ì¾: "
#: ../memline.c:1568
msgid " host name: "
@@ -4050,12 +4078,12 @@ msgid ""
msgstr ""
"\n"
"(1) ÊÌ¤Î¥×¥í¥°¥é¥à¤¬Æ±¤¸¥Õ¥¡¥¤¥ë¤òÊÔ½¸¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Þ¤»¤ó.\n"
-" ¤³¤Î¾ì¹ç¤Ë¤Ï, Êѹ¹¤ò¤·¤¿ºÝ¤ËºÇ½ªÅª¤Ë, Ʊ¤¸¥Õ¥¡¥¤¥ë¤Î°Û¤Ê¤ë\n"
-" 2¤Ä¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤¬¤Ç¤­¤Æ¤·¤Þ¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤."
+" ¤³¤Î¾ì¹ç¤Ë¤Ï, Êѹ¹¤ò¤·¤Æ¤·¤Þ¤¦¤È1¤Ä¤Î¥Õ¥¡¥¤¥ë¤ËÂФ·¤Æ°Û¤Ê¤ë2¤Ä¤Î\n"
+" ¥¤¥ó¥¹¥¿¥ó¥¹¤¬¤Ç¤­¤Æ¤·¤Þ¤¦¤Î¤Ç, ¤½¤¦¤·¤Ê¤¤¤è¤¦¤Ëµ¤¤ò¤Ä¤±¤Æ¤¯¤À¤µ¤¤."
#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
-msgstr " ½ªÎ»¤¹¤ë¤«, Ãí°Õ¤·¤Ê¤¬¤é³¤±¤Æ¤¯¤À¤µ¤¤.\n"
+msgstr " ½ªÎ»¤¹¤ë¤«, Ãí°Õ¤·¤Ê¤¬¤é³¤±¤Æ¤¯¤À¤µ¤¤.\n"
#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
@@ -4225,10 +4253,6 @@ msgstr "¹Ô %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ̵¸ú¤Ê¥ì¥¸¥¹¥¿Ì¾: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "ÆüËܸì¥á¥Ã¥»¡¼¥¸ËÝÌõ/´Æ½¤: ¼²¬ ÂÀϺ <koron.kaoriya@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "³ä¹þ¤ß: "
@@ -4479,6 +4503,11 @@ msgstr ""
msgid "E574: Unknown register type %d"
msgstr "E574: ̤ÃΤΥ쥸¥¹¥¿·¿ %d ¤Ç¤¹"
+msgid ""
+"E883: search pattern and expression register may not contain two or more "
+"lines"
+msgstr "E883: ¸¡º÷¥Ñ¥¿¡¼¥ó¤È¼°¥ì¥¸¥¹¥¿¤Ë¤Ï2¹Ô°Ê¾å¤ò´Þ¤á¤é¤ì¤Þ¤»¤ó"
+
#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
@@ -4563,6 +4592,10 @@ msgstr "E522: termcap Æâ¤Ë¸«¤Ä¤«¤ê¤Þ¤»¤ó"
msgid "E539: Illegal character <%s>"
msgstr "E539: ÉÔÀµ¤Êʸ»ú¤Ç¤¹ <%s>"
+#, c-format
+msgid "For option %s"
+msgstr "¥ª¥×¥·¥ç¥ó: %s"
+
#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: 'term' ¤Ë¤Ï¶õʸ»úÎó¤òÀßÄê¤Ç¤­¤Þ¤»¤ó"
@@ -4740,6 +4773,14 @@ msgstr ""
"\n"
"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È¤òÀßÄê¤Ç¤­¤Þ¤»¤ó "
+#, c-format
+msgid "Could not set security context %s for %s"
+msgstr "¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È %s ¤ò %s ¤ËÀßÄê¤Ç¤­¤Þ¤»¤ó"
+
+#, c-format
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr "¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È %s ¤ò %s ¤«¤é¼èÆÀ¤Ç¤­¤Þ¤»¤ó. ºï½ü¤·¤Þ¤¹!"
+
#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
@@ -4960,6 +5001,10 @@ msgstr "E554: %s{...} Æâ¤Ëʸˡ¥¨¥é¡¼¤¬¤¢¤ê¤Þ¤¹"
msgid "External submatches:\n"
msgstr "³°Éô¤ÎÉôʬ³ºÅö:\n"
+#, c-format
+msgid "E888: (NFA regexp) cannot repeat %s"
+msgstr "E888: (NFA Àµµ¬É½¸½) ·«¤êÊÖ¤»¤Þ¤»¤ó %s"
+
#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
@@ -4968,6 +5013,9 @@ msgstr ""
"E864: \\%#= ¤Ë¤Ï 0, 1 ¤â¤·¤¯¤Ï 2 ¤Î¤ß¤¬Â³¤±¤é¤ì¤Þ¤¹¡£Àµµ¬É½¸½¥¨¥ó¥¸¥ó¤Ï¼«Æ°Áª"
"Âò¤µ¤ì¤Þ¤¹¡£"
+msgid "Switching to backtracking RE engine for pattern: "
+msgstr "¼¡¤Î¥Ñ¥¿¡¼¥ó¤Ë¥Ð¥Ã¥¯¥È¥é¥Ã¥­¥ó¥° RE ¥¨¥ó¥¸¥ó¤òŬÍѤ·¤Þ¤¹: "
+
#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) ´üÂÔ¤è¤êÁ᤯Àµµ¬É½¸½¤Î½ªÃ¼¤ËÅþ㤷¤Þ¤·¤¿"
@@ -4980,7 +5028,7 @@ msgstr "E866: (NFA Àµµ¬É½¸½) °ÌÃÖ¤¬¸í¤Ã¤Æ¤¤¤Þ¤¹: %c"
#: ../regexp_nfa.c:242
#, c-format
msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
+msgstr "E877: (NFA Àµµ¬É½¸½) ̵¸ú¤Êʸ»ú¥¯¥é¥¹: %<PRId64>"
#: ../regexp_nfa.c:1261
#, c-format
@@ -5590,14 +5638,14 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' ¤Ë¤Ï %<PRId64> ¸Ä¤Î¥¨¥ó¥È¥ê¤Ï¤¢¤ê¤Þ¤»¤ó"
#: ../spell.c:8074
-#, fuzzy, c-format
+#, c-format
msgid "Word '%.*s' removed from %s"
-msgstr "%s ¤«¤éñ¸ì¤¬ºï½ü¤µ¤ì¤Þ¤·¤¿"
+msgstr "ñ¸ì '%.*s' ¤¬ %s ¤«¤éºï½ü¤µ¤ì¤Þ¤·¤¿"
#: ../spell.c:8117
-#, fuzzy, c-format
+#, c-format
msgid "Word '%.*s' added to %s"
-msgstr "%s ¤Ëñ¸ì¤¬Äɲ䵤ì¤Þ¤·¤¿"
+msgstr "ñ¸ì '%.*s' ¤¬ %s ¤ØÄɲ䵤ì¤Þ¤·¤¿"
#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
@@ -5673,6 +5721,9 @@ msgstr "¤³¤Î¥Ð¥Ã¥Õ¥¡¤ËÄêµÁ¤µ¤ì¤¿¹½Ê¸Í×ÁǤϤ¢¤ê¤Þ¤»¤ó"
msgid "E390: Illegal argument: %s"
msgstr "E390: ÉÔÀµ¤Ê°ú¿ô¤Ç¤¹: %s"
+msgid "syntax iskeyword "
+msgstr "¥·¥ó¥¿¥Ã¥¯¥¹ÍÑ iskeyword "
+
#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
@@ -5769,6 +5820,10 @@ msgstr "E847: ¹½Ê¸¤Î¼è¤ê¹þ¤ß(include)¤¬Â¿²á¤®¤Þ¤¹"
msgid "E789: Missing ']': %s"
msgstr "E789: ']' ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+#, c-format
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: ']' ¤Î¸å¤í¤Ë;ʬ¤Êʸ»ú¤¬¤¢¤ê¤Þ¤¹: %s]%s"
+
#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
@@ -5874,7 +5929,7 @@ msgstr "E415: ͽ´ü¤»¤ÌÅù¹æ¤Ç¤¹: %s"
#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
-msgstr "E416: Åù¹æ¤¬¤¬¤¢¤ê¤Þ¤»¤ó: %s"
+msgstr "E416: Åù¹æ¤¬¤¢¤ê¤Þ¤»¤ó: %s"
#: ../syntax.c:6418
#, c-format
@@ -6078,9 +6133,8 @@ msgstr "Vim: ÆþÎϤòÆÉ¹þ¤ßÃæ¤Î¥¨¥é¡¼¤Ë¤è¤ê½ªÎ»¤·¤Þ¤¹...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
#: ../undo.c:379
-#, fuzzy
msgid "E881: Line count changed unexpectedly"
-msgstr "E834: ͽ´ü¤»¤º¹Ô¥«¥¦¥ó¥È¤¬ÊѤï¤ê¤Þ¤·¤¿"
+msgstr "E881: ͽ´ü¤»¤º¹Ô¥«¥¦¥ó¥È¤¬ÊѤï¤ê¤Þ¤·¤¿"
#: ../undo.c:627
#, c-format
@@ -6287,23 +6341,23 @@ msgstr " ¥·¥¹¥Æ¥à vimrc: \""
#: ../version.c:672
msgid " user vimrc file: \""
-msgstr " ¥æ¡¼¥¶ vimrc: \""
+msgstr " ¥æ¡¼¥¶¡¼ vimrc: \""
#: ../version.c:677
msgid " 2nd user vimrc file: \""
-msgstr " Âè2¥æ¡¼¥¶ vimrc: \""
+msgstr " Âè2¥æ¡¼¥¶¡¼ vimrc: \""
#: ../version.c:682
msgid " 3rd user vimrc file: \""
-msgstr " Âè3¥æ¡¼¥¶ vimrc: \""
+msgstr " Âè3¥æ¡¼¥¶¡¼ vimrc: \""
#: ../version.c:687
msgid " user exrc file: \""
-msgstr " ¥æ¡¼¥¶ exrc: \""
+msgstr " ¥æ¡¼¥¶¡¼ exrc: \""
#: ../version.c:692
msgid " 2nd user exrc file: \""
-msgstr " Âè2¥æ¡¼¥¶ exrc: \""
+msgstr " Âè2¥æ¡¼¥¶¡¼ exrc: \""
#: ../version.c:699
msgid " fall-back for $VIM: \""
@@ -6379,7 +6433,7 @@ msgstr "Vim¤Î³«È¯¤ò±þ±ç¤·¤Æ¤¯¤À¤µ¤¤!"
#: ../version.c:828
msgid "Become a registered Vim user!"
-msgstr "Vim¤ÎÅÐÏ¿¥æ¡¼¥¶¤Ë¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤!"
+msgstr "Vim¤ÎÅÐÏ¿¥æ¡¼¥¶¡¼¤Ë¤Ê¤Ã¤Æ¤¯¤À¤µ¤¤!"
#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
@@ -6391,7 +6445,7 @@ msgstr "¾ÜºÙ¤Ê¾ðÊó¤Ï :help register<Enter> "
#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
-msgstr "¾ÜºÙ¤Ï¥á¥Ë¥å¡¼¤Î ¥Ø¥ë¥×¢ª¥¹¥Ý¥ó¥µ¡¼/ÅÐÏ¿ ¤ò»²¾È¤·¤Æ²¼¤µ¤¤ "
+msgstr "¾ÜºÙ¤Ï¥á¥Ë¥å¡¼¤Î ¥Ø¥ë¥×->¥¹¥Ý¥ó¥µ¡¼/ÅÐÏ¿ ¤ò»²¾È¤·¤Æ²¼¤µ¤¤"
#: ../window.c:119
msgid "Already only one window"
@@ -6429,6 +6483,9 @@ msgstr "E445: ¾¤Î¥¦¥£¥ó¥É¥¦¤Ë¤ÏÊѹ¹¤¬¤¢¤ê¤Þ¤¹"
msgid "E446: No file name under cursor"
msgstr "E446: ¥«¡¼¥½¥ë¤Î²¼¤Ë¥Õ¥¡¥¤¥ë̾¤¬¤¢¤ê¤Þ¤»¤ó"
+msgid "List or number required"
+msgstr "¥ê¥¹¥È¤«¿ôÃͤ¬É¬ÍפǤ¹"
+
#~ msgid "E831: bf_key_init() called with empty password"
#~ msgstr "E831: bf_key_init() ¤¬¶õ¥Ñ¥¹¥ï¡¼¥É¤Ç¸Æ¤Ó½Ð¤µ¤ì¤Þ¤·¤¿"
diff --git a/src/nvim/po/ja.po b/src/nvim/po/ja.po
index 6bdfcb426f..e12cfb7e70 100644
--- a/src/nvim/po/ja.po
+++ b/src/nvim/po/ja.po
@@ -1,11 +1,11 @@
-# Japanese translation for Vim vim:set foldmethod=marker:
+# Japanese translation for Vim
#
# Do ":help uganda" in Vim to read copying and usage conditions.
# Do ":help credits" in Vim to see a list of people who contributed.
#
-# Last Change: 2013 Jul 06
+# Copyright (C) 2001-2016 MURAOKA Taro <koron.kaoriya@gmail.com>,
+# vim-jp (http://vim-jp.org/)
#
-# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
#
# Original translations.
@@ -14,10 +14,10 @@ msgid ""
msgstr ""
"Project-Id-Version: Vim 7.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2013-07-06 15:00+0900\n"
+"POT-Creation-Date: 2016-02-01 09:02+0900\n"
+"PO-Revision-Date: 2013-06-02-01 09:08+09n"
"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
-"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+"Language-Team: vim-jp (https://github.com/vim-jp/lang-ja)\n"
"Language: Japanese\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
@@ -34,7 +34,7 @@ msgstr "内部エラー: 未知ã®ã‚ªãƒ—ション型ã§ã™"
#: ../buffer.c:92
msgid "[Location List]"
-msgstr "[場所リスト]"
+msgstr "[ロケーションリスト]"
#: ../buffer.c:93
msgid "[Quickfix List]"
@@ -277,7 +277,7 @@ msgstr "E810: 一時ファイルã®èª­è¾¼ã‚‚ã—ãã¯æ›¸è¾¼ãŒã§ãã¾ã›ã‚“"
#: ../diff.c:755
msgid "E97: Cannot create diffs"
-msgstr "E97: 差分を作æˆã§ãã¾ã›ã‚“ "
+msgstr "E97: 差分を作æˆã§ãã¾ã›ã‚“"
#: ../diff.c:966
msgid "E816: Cannot read patch output"
@@ -293,7 +293,7 @@ msgstr "E99: ç¾åœ¨ã®ãƒãƒƒãƒ•ã‚¡ã¯å·®åˆ†ãƒ¢ãƒ¼ãƒ‰ã§ã¯ã‚りã¾ã›ã‚“"
#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: 差分モードã§ã‚ã‚‹ä»–ã®ãƒãƒƒãƒ•ã‚¡ã¯å¤‰æ›´å¯èƒ½ã§ã™"
+msgstr "E793: 差分モードã§ã‚ã‚‹ä»–ã®ãƒãƒƒãƒ•ã‚¡ã¯å¤‰æ›´ã§ãã¾ã›ã‚“"
#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
@@ -349,7 +349,7 @@ msgstr " 行(全体)補完 (^L^N^P)"
#: ../edit.c:86
msgid " File name completion (^F^N^P)"
-msgstr "ファイルå補完 (^F^N^P)"
+msgstr " ファイルå補完 (^F^N^P)"
#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
@@ -377,7 +377,7 @@ msgstr " コマンドライン補完 (^V^N^P)"
#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
-msgstr " ユーザ定義補完 (^U^N^P)"
+msgstr " ユーザー定義補完 (^U^N^P)"
#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
@@ -679,6 +679,10 @@ msgstr "E696: リスト型ã«ã‚«ãƒ³ãƒžãŒã‚りã¾ã›ã‚“: %s"
msgid "E697: Missing end of List ']': %s"
msgstr "E697: ãƒªã‚¹ãƒˆåž‹ã®æœ€å¾Œã« ']' ãŒã‚りã¾ã›ã‚“: %s"
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr ""
+"ガーベッジコレクションを中止ã—ã¾ã—ãŸ! å‚照を作æˆã™ã‚‹ã®ã«ãƒ¡ãƒ¢ãƒªãŒä¸è¶³ã—ã¾ã—ãŸ"
+
#: ../eval.c:6475
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
@@ -721,7 +725,7 @@ msgstr "E117: 未知ã®é–¢æ•°ã§ã™: %s"
#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: 関数ã®å¼•æ•°ãŒå°‘ãªéŽãŽã¾ã™: %s"
+msgstr "E119: 関数ã®å¼•æ•°ãŒè¶³ã‚Šã¾ã›ã‚“: %s"
#: ../eval.c:7387
#, c-format
@@ -826,18 +830,16 @@ msgid "sort() argument"
msgstr "sort() ã®å¼•æ•°"
#: ../eval.c:13721
-#, fuzzy
msgid "uniq() argument"
-msgstr "add() ã®å¼•æ•°"
+msgstr "uniq() ã®å¼•æ•°"
#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: ã‚½ãƒ¼ãƒˆã®æ¯”較関数ãŒå¤±æ•—ã—ã¾ã—ãŸ"
#: ../eval.c:13806
-#, fuzzy
msgid "E882: Uniq compare function failed"
-msgstr "E702: ã‚½ãƒ¼ãƒˆã®æ¯”較関数ãŒå¤±æ•—ã—ã¾ã—ãŸ"
+msgstr "E882: Uniq ã®æ¯”較関数ãŒå¤±æ•—ã—ã¾ã—ãŸ"
#: ../eval.c:14085
msgid "(Invalid)"
@@ -863,6 +865,18 @@ msgstr "E745: リスト型を数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: 辞書型を数値ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: 関数å‚ç…§åž‹ã‚’æµ®å‹•å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™ã€‚"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: æ–‡å­—åˆ—ã‚’æµ®å‹•å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: ãƒªã‚¹ãƒˆåž‹ã‚’æµ®å‹•å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: è¾žæ›¸åž‹ã‚’æµ®å‹•å°æ•°ç‚¹æ•°ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
+
#: ../eval.c:16259
msgid "E729: using Funcref as a String"
msgstr "E729: 関数å‚照型を文字列ã¨ã—ã¦æ‰±ã£ã¦ã„ã¾ã™"
@@ -961,14 +975,14 @@ msgid "E129: Function name required"
msgstr "E129: 関数åãŒè¦æ±‚ã•れã¾ã™"
#: ../eval.c:17824
-#, fuzzy, c-format
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: 関数åã¯å¤§æ–‡å­—ã§å§‹ã¾ã‚‹ã‹ã‚³ãƒ­ãƒ³ã‚’å«ã¾ãªã‘れã°ãªã‚Šã¾ã›ã‚“: %s"
+msgstr "E128: 関数åã¯å¤§æ–‡å­—ã‹ \"s:\" ã§å§‹ã¾ã‚‰ãªã‘れã°ãªã‚Šã¾ã›ã‚“: %s"
#: ../eval.c:17833
-#, fuzzy, c-format
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: 関数åã¯å¤§æ–‡å­—ã§å§‹ã¾ã‚‹ã‹ã‚³ãƒ­ãƒ³ã‚’å«ã¾ãªã‘れã°ãªã‚Šã¾ã›ã‚“: %s"
+msgstr "E884: 関数åã«ã¯ã‚³ãƒ­ãƒ³ã¯å«ã‚られã¾ã›ã‚“: %s"
#: ../eval.c:18336
#, c-format
@@ -1081,7 +1095,7 @@ msgstr "E136: viminfo: エラーãŒå¤šéŽãŽã‚‹ã®ã§, 以é™ã¯ã‚¹ã‚­ãƒƒãƒ—ã—ã
#: ../ex_cmds.c:1458
#, c-format
msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfoファイル \"%s\"%s%s%s を読込ã¿ä¸­ "
+msgstr "viminfoファイル \"%s\"%s%s%s を読込ã¿ä¸­"
#: ../ex_cmds.c:1460
msgid " info"
@@ -1357,6 +1371,10 @@ msgstr "E158: 無効ãªãƒãƒƒãƒ•ã‚¡åã§ã™: %s"
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: 無効ãªsign識別å­ã§ã™: %<PRId64>"
+#, c-format
+msgid "E885: Not possible to change sign %s"
+msgstr "E885: 変更ã§ããªã„ sign ã§ã™: %s"
+
#: ../ex_cmds.c:6066
msgid " (not supported)"
msgstr " (éžã‚µãƒãƒ¼ãƒˆ)"
@@ -1379,6 +1397,13 @@ msgstr "行 %<PRId64>: %s"
msgid "cmd: %s"
msgstr "コマンド: %s"
+msgid "frame is zero"
+msgstr "フレーム㌠0 ã§ã™"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "最高レベルã®ãƒ•レーム: %d"
+
#: ../ex_cmds2.c:322
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
@@ -1528,7 +1553,8 @@ msgstr "E197: 言語を \"%s\" ã«è¨­å®šã§ãã¾ã›ã‚“"
#. don't wait for return
#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Exモードã«å…¥ã‚Šã¾ã™. ãƒŽãƒ¼ãƒžãƒ«ã«æˆ»ã‚‹ã«ã¯\"visual\"ã¨å…¥åŠ›ã—ã¦ãã ã•ã„."
+msgstr ""
+"Exモードã«å…¥ã‚Šã¾ã™. ãƒŽãƒ¼ãƒžãƒ«ãƒ¢ãƒ¼ãƒ‰ã«æˆ»ã‚‹ã«ã¯\"visual\"ã¨å…¥åŠ›ã—ã¦ãã ã•ã„."
#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
@@ -1553,7 +1579,7 @@ msgstr "é–¢æ•°ã®æœ€å¾Œã§ã™"
#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ユーザ定義コマンドã®ã‚ã„ã¾ã„ãªä½¿ç”¨ã§ã™"
+msgstr "E464: ユーザー定義コマンドã®ã‚ã„ã¾ã„ãªä½¿ç”¨ã§ã™"
#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
@@ -1606,14 +1632,14 @@ msgstr "E174: ã‚³ãƒžãƒ³ãƒ‰ãŒæ—¢ã«ã‚りã¾ã™: å†å®šç¾©ã™ã‚‹ã«ã¯ ! を追å
#: ../ex_docmd.c:4432
msgid ""
"\n"
-" Name Args Range Complete Definition"
+" Name Args Address Complete Definition"
msgstr ""
"\n"
-" åå‰ å¼•æ•° 範囲 補完 定義"
+" åå‰ å¼•æ•° アドレス 補完 定義"
#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
-msgstr "ユーザ定義コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
+msgstr "ユーザー定義コマンドãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ"
#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
@@ -1633,7 +1659,10 @@ msgstr "E178: カウントã®çœç•¥å€¤ãŒç„¡åйã§ã™"
#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
-msgstr "E179: -補完ã®ãŸã‚ã®å¼•æ•°ãŒå¿…è¦ã§ã™"
+msgstr "E179: -complete ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™"
+
+msgid "E179: argument required for -addr"
+msgstr "E179: -addr ã«ã¯å¼•æ•°ãŒå¿…è¦ã§ã™"
#: ../ex_docmd.c:4635
#, c-format
@@ -1646,16 +1675,20 @@ msgstr "E182: 無効ãªã‚³ãƒžãƒ³ãƒ‰åã§ã™"
#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: ユーザ定義コマンドã¯è‹±å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘れã°ãªã‚Šã¾ã›ã‚“"
+msgstr "E183: ユーザー定義コマンドã¯è‹±å¤§æ–‡å­—ã§å§‹ã¾ã‚‰ãªã‘れã°ãªã‚Šã¾ã›ã‚“"
#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: 予約åãªã®ã§, ユーザ定義コマンドã«åˆ©ç”¨ã§ãã¾ã›ã‚“"
+msgstr "E841: 予約åãªã®ã§, ユーザー定義コマンドã«åˆ©ç”¨ã§ãã¾ã›ã‚“"
#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
-msgstr "E184: ãã®ãƒ¦ãƒ¼ã‚¶å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚りã¾ã›ã‚“: %s"
+msgstr "E184: ãã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å®šç¾©ã‚³ãƒžãƒ³ãƒ‰ã¯ã‚りã¾ã›ã‚“: %s"
+
+#, c-format
+msgid "E180: Invalid address type value: %s"
+msgstr "E180: 無効ãªã‚¢ãƒ‰ãƒ¬ã‚¹ã‚¿ã‚¤ãƒ—値ã§ã™: %s"
#: ../ex_docmd.c:5219
#, c-format
@@ -2019,11 +2052,11 @@ msgstr "䏿­£ãªãƒ•ァイルå"
#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
-msgstr " ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™"
+msgstr "ã¯ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªã§ã™"
#: ../fileio.c:397
msgid "is not a file"
-msgstr " ã¯ãƒ•ァイルã§ã¯ã‚りã¾ã›ã‚“"
+msgstr "ã¯ãƒ•ァイルã§ã¯ã‚りã¾ã›ã‚“"
#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
@@ -2039,7 +2072,7 @@ msgstr "[ファイルéŽå¤§]"
#: ../fileio.c:534
msgid "[Permission Denied]"
-msgstr "[èªå¯ãŒã‚りã¾ã›ã‚“]"
+msgstr "[権é™ãŒã‚りã¾ã›ã‚“]"
#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
@@ -2210,7 +2243,7 @@ msgstr " 変æ›ã‚¨ãƒ©ãƒ¼"
#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
-msgstr "行 %<PRId64>;"
+msgstr " 行 %<PRId64>;"
#: ../fileio.c:3519
msgid "[Device]"
@@ -2650,11 +2683,6 @@ msgstr "E49: 無効ãªã‚¹ã‚¯ãƒ­ãƒ¼ãƒ«é‡ã§ã™"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -2766,9 +2794,8 @@ msgid "E37: No write since last change (add ! to override)"
msgstr "E37: 最後ã®å¤‰æ›´ãŒä¿å­˜ã•れã¦ã„ã¾ã›ã‚“ (! を追加ã§å¤‰æ›´ã‚’破棄)"
#: ../globals.h:1055
-#, fuzzy
msgid "E37: No write since last change"
-msgstr "[最後ã®å¤‰æ›´ãŒä¿å­˜ã•れã¦ã„ã¾ã›ã‚“]\n"
+msgstr "E37: 最後ã®å¤‰æ›´ãŒä¿å­˜ã•れã¦ã„ã¾ã›ã‚“"
#: ../globals.h:1056
msgid "E38: Null argument"
@@ -2810,7 +2837,7 @@ msgstr "E42: エラーã¯ã‚りã¾ã›ã‚“"
#: ../globals.h:1067
msgid "E776: No location list"
-msgstr "E776: 場所リストã¯ã‚りã¾ã›ã‚“"
+msgstr "E776: ロケーションリストã¯ã‚りã¾ã›ã‚“"
#: ../globals.h:1068
msgid "E43: Damaged match string"
@@ -3831,7 +3858,7 @@ msgid ""
"\n"
msgstr ""
"\n"
-"ãれã‹ã‚‰.swpファイルを削除ã—ã¦ãã ã•ã„\n"
+"å…ƒã®.swpファイルã¯å‰Šé™¤ã—ã¦ã‚‚æ§‹ã„ã¾ã›ã‚“\n"
"\n"
#. use msg() to start the scrolling properly
@@ -3845,7 +3872,7 @@ msgstr " ç¾åœ¨ã®ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒª:\n"
#: ../memline.c:1448
msgid " Using specified name:\n"
-msgstr " ã‚ã‚‹åå‰ã‚’使用中:\n"
+msgstr " 以下ã®åå‰ã‚’使用中:\n"
#: ../memline.c:1450
msgid " In directory "
@@ -3901,7 +3928,7 @@ msgid ""
" user name: "
msgstr ""
"\n"
-" ユーザå: "
+" ユーザーå: "
#: ../memline.c:1568
msgid " host name: "
@@ -4050,12 +4077,12 @@ msgid ""
msgstr ""
"\n"
"(1) 別ã®ãƒ—ログラムãŒåŒã˜ãƒ•ァイルを編集ã—ã¦ã„ã‚‹ã‹ã‚‚ã—れã¾ã›ã‚“.\n"
-" ã“ã®å ´åˆã«ã¯, 変更をã—ãŸéš›ã«æœ€çµ‚çš„ã«, åŒã˜ãƒ•ァイルã®ç•°ãªã‚‹\n"
-" 2ã¤ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒã§ãã¦ã—ã¾ã†ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„."
+" ã“ã®å ´åˆã«ã¯, 変更をã—ã¦ã—ã¾ã†ã¨1ã¤ã®ãƒ•ァイルã«å¯¾ã—ã¦ç•°ãªã‚‹2ã¤ã®\n"
+" インスタンスãŒã§ãã¦ã—ã¾ã†ã®ã§, ãã†ã—ãªã„よã†ã«æ°—ã‚’ã¤ã‘ã¦ãã ã•ã„."
#: ../memline.c:3245
msgid " Quit, or continue with caution.\n"
-msgstr " 終了ã™ã‚‹ã‹, 注æ„ã—ãªãŒã‚‰ç¶šã‘ã¦ãã ã•ã„.\n"
+msgstr " 終了ã™ã‚‹ã‹, 注æ„ã—ãªãŒã‚‰ç¶šã‘ã¦ãã ã•ã„.\n"
#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
@@ -4225,10 +4252,6 @@ msgstr "行 %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 無効ãªãƒ¬ã‚¸ã‚¹ã‚¿å: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "日本語メッセージ翻訳/監修: æ‘岡 太郎 <koron.kaoriya@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "割込ã¿: "
@@ -4479,6 +4502,11 @@ msgstr ""
msgid "E574: Unknown register type %d"
msgstr "E574: 未知ã®ãƒ¬ã‚¸ã‚¹ã‚¿åž‹ %d ã§ã™"
+msgid ""
+"E883: search pattern and expression register may not contain two or more "
+"lines"
+msgstr "E883: 検索パターンã¨å¼ãƒ¬ã‚¸ã‚¹ã‚¿ã«ã¯2行以上をå«ã‚られã¾ã›ã‚“"
+
#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
@@ -4563,6 +4591,10 @@ msgstr "E522: termcap 内ã«è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“"
msgid "E539: Illegal character <%s>"
msgstr "E539: 䏿­£ãªæ–‡å­—ã§ã™ <%s>"
+#, c-format
+msgid "For option %s"
+msgstr "オプション: %s"
+
#: ../option.c:3862
msgid "E529: Cannot set 'term' to empty string"
msgstr "E529: 'term' ã«ã¯ç©ºæ–‡å­—列を設定ã§ãã¾ã›ã‚“"
@@ -4740,6 +4772,14 @@ msgstr ""
"\n"
"セキュリティコンテキストを設定ã§ãã¾ã›ã‚“ "
+#, c-format
+msgid "Could not set security context %s for %s"
+msgstr "セキュリティコンテキスト %s ã‚’ %s ã«è¨­å®šã§ãã¾ã›ã‚“"
+
+#, c-format
+msgid "Could not get security context %s for %s. Removing it!"
+msgstr "セキュリティコンテキスト %s ã‚’ %s ã‹ã‚‰å–å¾—ã§ãã¾ã›ã‚“. 削除ã—ã¾ã™!"
+
#: ../os_unix.c:1558 ../os_unix.c:1647
#, c-format
msgid "dlerror = \"%s\""
@@ -4960,6 +5000,10 @@ msgstr "E554: %s{...} å†…ã«æ–‡æ³•エラーãŒã‚りã¾ã™"
msgid "External submatches:\n"
msgstr "外部ã®éƒ¨åˆ†è©²å½“:\n"
+#, c-format
+msgid "E888: (NFA regexp) cannot repeat %s"
+msgstr "E888: (NFA æ­£è¦è¡¨ç¾) 繰り返ã›ã¾ã›ã‚“ %s"
+
#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
@@ -4968,6 +5012,9 @@ msgstr ""
"E864: \\%#= ã«ã¯ 0, 1 ã‚‚ã—ã㯠2 ã®ã¿ãŒç¶šã‘られã¾ã™ã€‚æ­£è¦è¡¨ç¾ã‚¨ãƒ³ã‚¸ãƒ³ã¯è‡ªå‹•é¸"
"択ã•れã¾ã™ã€‚"
+msgid "Switching to backtracking RE engine for pattern: "
+msgstr "次ã®ãƒ‘ターンã«ãƒãƒƒã‚¯ãƒˆãƒ©ãƒƒã‚­ãƒ³ã‚° RE エンジンをé©ç”¨ã—ã¾ã™: "
+
#: ../regexp_nfa.c:239
msgid "E865: (NFA) Regexp end encountered prematurely"
msgstr "E865: (NFA) æœŸå¾…ã‚ˆã‚Šæ—©ãæ­£è¦è¡¨ç¾ã®çµ‚端ã«åˆ°é”ã—ã¾ã—ãŸ"
@@ -4980,7 +5027,7 @@ msgstr "E866: (NFA æ­£è¦è¡¨ç¾) ä½ç½®ãŒèª¤ã£ã¦ã„ã¾ã™: %c"
#: ../regexp_nfa.c:242
#, c-format
msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
+msgstr "E877: (NFA æ­£è¦è¡¨ç¾) ç„¡åŠ¹ãªæ–‡å­—クラス: %<PRId64>"
#: ../regexp_nfa.c:1261
#, c-format
@@ -5590,14 +5637,14 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' ã«ã¯ %<PRId64> 個ã®ã‚¨ãƒ³ãƒˆãƒªã¯ã‚りã¾ã›ã‚“"
#: ../spell.c:8074
-#, fuzzy, c-format
+#, c-format
msgid "Word '%.*s' removed from %s"
-msgstr "%s ã‹ã‚‰å˜èªžãŒå‰Šé™¤ã•れã¾ã—ãŸ"
+msgstr "å˜èªž '%.*s' ㌠%s ã‹ã‚‰å‰Šé™¤ã•れã¾ã—ãŸ"
#: ../spell.c:8117
-#, fuzzy, c-format
+#, c-format
msgid "Word '%.*s' added to %s"
-msgstr "%s ã«å˜èªžãŒè¿½åŠ ã•れã¾ã—ãŸ"
+msgstr "å˜èªž '%.*s' ㌠%s ã¸è¿½åŠ ã•れã¾ã—ãŸ"
#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
@@ -5673,6 +5720,9 @@ msgstr "ã“ã®ãƒãƒƒãƒ•ã‚¡ã«å®šç¾©ã•ã‚ŒãŸæ§‹æ–‡è¦ç´ ã¯ã‚りã¾ã›ã‚“"
msgid "E390: Illegal argument: %s"
msgstr "E390: 䏿­£ãªå¼•æ•°ã§ã™: %s"
+msgid "syntax iskeyword "
+msgstr "シンタックス用 iskeyword "
+
#: ../syntax.c:3299
#, c-format
msgid "E391: No such syntax cluster: %s"
@@ -5769,6 +5819,10 @@ msgstr "E847: æ§‹æ–‡ã®å–り込ã¿(include)ãŒå¤šéŽãŽã¾ã™"
msgid "E789: Missing ']': %s"
msgstr "E789: ']' ãŒã‚りã¾ã›ã‚“: %s"
+#, c-format
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: ']' ã®å¾Œã‚ã«ä½™åˆ†ãªæ–‡å­—ãŒã‚りã¾ã™: %s]%s"
+
#: ../syntax.c:4531
#, c-format
msgid "E398: Missing '=': %s"
@@ -5874,7 +5928,7 @@ msgstr "E415: 予期ã›ã¬ç­‰å·ã§ã™: %s"
#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
-msgstr "E416: ç­‰å·ãŒãŒã‚りã¾ã›ã‚“: %s"
+msgstr "E416: ç­‰å·ãŒã‚りã¾ã›ã‚“: %s"
#: ../syntax.c:6418
#, c-format
@@ -6078,9 +6132,8 @@ msgstr "Vim: 入力を読込ã¿ä¸­ã®ã‚¨ãƒ©ãƒ¼ã«ã‚ˆã‚Šçµ‚了ã—ã¾ã™...\n"
#. This happens when the FileChangedRO autocommand changes the
#. * file in a way it becomes shorter.
#: ../undo.c:379
-#, fuzzy
msgid "E881: Line count changed unexpectedly"
-msgstr "E834: 予期ã›ãšè¡Œã‚«ã‚¦ãƒ³ãƒˆãŒå¤‰ã‚りã¾ã—ãŸ"
+msgstr "E881: 予期ã›ãšè¡Œã‚«ã‚¦ãƒ³ãƒˆãŒå¤‰ã‚りã¾ã—ãŸ"
#: ../undo.c:627
#, c-format
@@ -6287,23 +6340,23 @@ msgstr " システム vimrc: \""
#: ../version.c:672
msgid " user vimrc file: \""
-msgstr " ユーザ vimrc: \""
+msgstr " ユーザー vimrc: \""
#: ../version.c:677
msgid " 2nd user vimrc file: \""
-msgstr " 第2ユーザ vimrc: \""
+msgstr " 第2ユーザー vimrc: \""
#: ../version.c:682
msgid " 3rd user vimrc file: \""
-msgstr " 第3ユーザ vimrc: \""
+msgstr " 第3ユーザー vimrc: \""
#: ../version.c:687
msgid " user exrc file: \""
-msgstr " ユーザ exrc: \""
+msgstr " ユーザー exrc: \""
#: ../version.c:692
msgid " 2nd user exrc file: \""
-msgstr " 第2ユーザ exrc: \""
+msgstr " 第2ユーザー exrc: \""
#: ../version.c:699
msgid " fall-back for $VIM: \""
@@ -6379,7 +6432,7 @@ msgstr "Vimã®é–‹ç™ºã‚’応æ´ã—ã¦ãã ã•ã„!"
#: ../version.c:828
msgid "Become a registered Vim user!"
-msgstr "Vimã®ç™»éŒ²ãƒ¦ãƒ¼ã‚¶ã«ãªã£ã¦ãã ã•ã„!"
+msgstr "Vimã®ç™»éŒ²ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãªã£ã¦ãã ã•ã„!"
#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
@@ -6391,7 +6444,7 @@ msgstr "è©³ç´°ãªæƒ…報㯠:help register<Enter> "
#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
-msgstr "詳細ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã® ヘルプ→スãƒãƒ³ã‚µãƒ¼/登録 ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„ "
+msgstr "詳細ã¯ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã® ヘルプ->スãƒãƒ³ã‚µãƒ¼/登録 ã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„"
#: ../window.c:119
msgid "Already only one window"
@@ -6429,6 +6482,9 @@ msgstr "E445: ä»–ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«ã¯å¤‰æ›´ãŒã‚りã¾ã™"
msgid "E446: No file name under cursor"
msgstr "E446: カーソルã®ä¸‹ã«ãƒ•ァイルåãŒã‚りã¾ã›ã‚“"
+msgid "List or number required"
+msgstr "ãƒªã‚¹ãƒˆã‹æ•°å€¤ãŒå¿…è¦ã§ã™"
+
#~ msgid "E831: bf_key_init() called with empty password"
#~ msgstr "E831: bf_key_init() ãŒç©ºãƒ‘スワードã§å‘¼ã³å‡ºã•れã¾ã—ãŸ"
diff --git a/src/nvim/po/ja.sjis.po b/src/nvim/po/ja.sjis.po
deleted file mode 100644
index 7dac89e172..0000000000
--- a/src/nvim/po/ja.sjis.po
+++ /dev/null
@@ -1,8155 +0,0 @@
-# Japanese translation for Vim vim:set foldmethod=marker:
-#
-# Do ":help uganda" in Vim to read copying and usage conditions.
-# Do ":help credits" in Vim to see a list of people who contributed.
-#
-# Last Change: 2013 Jul 06
-#
-# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
-# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
-#
-# Original translations.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Vim 7.4\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2013-07-06 15:00+0900\n"
-"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
-"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
-"Language: Japanese\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp932\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "ƒIƒvƒVƒ‡ƒ“‚Ì’l‚͎擾‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "“à•”ƒGƒ‰[: –¢’m‚̃IƒvƒVƒ‡ƒ“Œ^‚Å‚·"
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[êŠƒŠƒXƒg]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[QuickfixƒŠƒXƒg]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr "E855: autocommand‚ªƒRƒ}ƒ“ƒh‚Ì’âŽ~‚ðˆø‚«‹N‚±‚µ‚Ü‚µ‚½"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: ƒoƒbƒtƒ@‚ð1‚‚à쬂ł«‚È‚¢‚Ì‚Å, I—¹‚µ‚Ü‚·..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: ƒoƒbƒtƒ@‚ð쬂ł«‚È‚¢‚Ì‚Å, ‘¼‚Ì‚ðŽg—p‚µ‚Ü‚·..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: ‰ð•ú‚³‚ꂽƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: 휂³‚ꂽƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: ”jŠü‚³‚ꂽƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "1 ŒÂ‚̃oƒbƒtƒ@‚ª‰ð•ú‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "%d ŒÂ‚̃oƒbƒtƒ@‚ª‰ð•ú‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "1 ŒÂ‚̃oƒbƒtƒ@‚ªíœ‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "%d ŒÂ‚̃oƒbƒtƒ@‚ªíœ‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "1 ŒÂ‚̃oƒbƒtƒ@‚ª”jŠü‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "%d ŒÂ‚̃oƒbƒtƒ@‚ª”jŠü‚³‚ê‚Ü‚µ‚½"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: ÅŒã‚̃oƒbƒtƒ@‚͉ð•ú‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: •ÏX‚³‚ꂽƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: ƒŠƒXƒg•\\ަ‚³‚ê‚éƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: ƒoƒbƒtƒ@ %<PRId64> ‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ÅŒã‚̃oƒbƒtƒ@‚ð‰z‚¦‚Ĉړ®‚͂ł«‚Ü‚¹‚ñ"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: ʼn‚̃oƒbƒtƒ@‚æ‚è‘O‚ւ͈ړ®‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: ƒoƒbƒtƒ@ %<PRId64> ‚Ì•ÏX‚͕ۑ¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ (! ‚Å•ÏX‚ð”jŠü)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: Œx: ƒtƒ@ƒCƒ‹–¼‚ÌƒŠƒXƒg‚ª’·‰ß‚¬‚Ü‚·"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: ƒoƒbƒtƒ@ %<PRId64> ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: %s ‚É•¡”‚ÌŠY“–‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: %s ‚ÉŠY“–‚·‚éƒoƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "s %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: ‚±‚Ì–¼‘O‚̃oƒbƒtƒ@‚ÍŠù‚É‚ ‚è‚Ü‚·"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [•ÏX‚ ‚è]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[–¢•ÒW]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[Vƒtƒ@ƒCƒ‹]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[“ÇžƒGƒ‰[]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[“Çê]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[“Çžê—p]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 s --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> s --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "s %<PRId64> (‘S‘Ì %<PRId64>) --%d%%-- col "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[–³–¼]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "ƒwƒ‹ƒv"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[ƒwƒ‹ƒv]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[ƒvƒŒƒrƒ…[]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "‘S‚Ä"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "––”ö"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "擪"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# ƒoƒbƒtƒ@ƒŠƒXƒg:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[‰º‘‚«]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- ƒTƒCƒ“ ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "%s ‚̃TƒCƒ“:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " s=%<PRId64> ޝ•ÊŽq=%d –¼‘O=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: ƒRƒƒ“‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: •s³‚ȃ‚[ƒh‚Å‚·"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: ”’l‚ª•K—v‚Å‚·"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: •s³‚ȃp[ƒZƒ“ƒe[ƒW‚Å‚·"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: %<PRId64> ˆÈã‚̃oƒbƒtƒ@‚Ídiff‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: ˆêŽžƒtƒ@ƒCƒ‹‚̓Ǟ‚à‚µ‚­‚Í‘ž‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: ·•ª‚ð쬂ł«‚Ü‚¹‚ñ "
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: patch‚Ìo—Í‚ð“Çž‚߂܂¹‚ñ"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: diff‚Ìo—Í‚ð“Çž‚߂܂¹‚ñ"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Œ»Ý‚̃oƒbƒtƒ@‚Í·•ªƒ‚[ƒh‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ·•ªƒ‚[ƒh‚Å‚ ‚鑼‚̃oƒbƒtƒ@‚Í•ÏX‰Â”\\‚Å‚·"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: ·•ªƒ‚[ƒh‚Å‚ ‚鑼‚̃oƒbƒtƒ@‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr ""
-"E101: ·•ªƒ‚[ƒh‚̃oƒbƒtƒ@‚ª2ŒÂˆÈã‚ ‚é‚Ì‚ÅA‚Ç‚ê‚ðŽg‚¤‚©“Á’è‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: ƒoƒbƒtƒ@ \"%s\" ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: ƒoƒbƒtƒ@ \"%s\" ‚Í·•ªƒ‚[ƒh‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: —\\Šú‚¹‚¸ƒoƒbƒtƒ@‚ª•ÏX•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: ‡Žš‚ÉEscape‚ÍŽg—p‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: ƒL[ƒ}ƒbƒvƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: :source ‚Ŏ枂ރtƒ@ƒCƒ‹ˆÈŠO‚Å‚Í :loadkeymap ‚ðŽg‚¦‚Ü‚¹‚ñ"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: ‹ó‚̃L[ƒ}ƒbƒvƒGƒ“ƒgƒŠ"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " ƒL[ƒ[ƒh•⊮ (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ƒ‚[ƒh (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " s(‘S‘Ì)•⊮ (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr "ƒtƒ@ƒCƒ‹–¼•⊮ (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " ƒ^ƒO•⊮ (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " ƒpƒXƒpƒ^[ƒ“•⊮ (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " ’è‹`•⊮ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Ž«‘•⊮ (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " ƒVƒ\\[ƒ‰ƒX•⊮ (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“•⊮ (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " ƒ†[ƒU’è‹`•⊮ (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " ƒIƒ€ƒj•⊮ (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ’Ô‚èC³Œó•â (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " ‹ÇŠƒL[ƒ[ƒh•⊮ (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "’i—Ž‚ÌÅŒã‚Ƀqƒbƒg"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: •âŠÔŠÖ”‚ªƒEƒBƒ“ƒhƒE‚ð•ÏX‚µ‚Ü‚µ‚½"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: •⊮ŠÖ”‚ªƒeƒLƒXƒg‚ð휂µ‚Ü‚µ‚½"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "'dictionary' ƒIƒvƒVƒ‡ƒ“‚ª‹ó‚Å‚·"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "'thesaurus' ƒIƒvƒVƒ‡ƒ“‚ª‹ó‚Å‚·"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "Ž«‘‚ðƒXƒLƒƒƒ“’†: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (‘}“ü) ƒXƒNƒ[ƒ‹(^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (’uŠ·) ƒXƒNƒ[ƒ‹ (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "ƒXƒLƒƒƒ“’†: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "ƒ^ƒO‚ðƒXƒLƒƒƒ“’†."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " ’ljÁ’†"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- ŒŸõ’†..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "Žn‚߂ɖ߂é"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "‘¼‚Ìs‚Ì’PŒê"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "—Bˆê‚ÌŠY“–"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "%d ”Ô–Ú‚ÌŠY“– (‘SŠY“– %d ŒÂ’†)"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "%d ”Ô–Ú‚ÌŠY“–"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: —\\Šú‚¹‚Ê•¶Žš‚ª :let ‚É‚ ‚è‚Ü‚µ‚½"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: ƒŠƒXƒg‚̃Cƒ“ƒfƒbƒNƒX‚ª”͈͊O‚Å‚·: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: –¢’è‹`‚̕ϔ‚Å‚·: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: ']' ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s ‚̈ø”‚ÍƒŠƒXƒgŒ^‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s ‚̈ø”‚ÍƒŠƒXƒgŒ^‚Ü‚½‚ÍŽ«‘Œ^‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Ž«‘Œ^‚É‹ó‚̃L[‚ðŽg‚¤‚±‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: ƒŠƒXƒgŒ^‚ª•K—v‚Å‚·"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: Ž«‘Œ^‚ª•K—v‚Å‚·"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: ŠÖ”‚̈ø”‚ª‘½‰ß‚¬‚Ü‚·: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Ž«‘Œ^‚ɃL[‚ª‘¶Ý‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: ŠÖ” %s ‚Í’è‹`ςł·, Ä’è‹`‚·‚é‚É‚Í ! ‚ð’ljÁ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: Ž«‘Œ^“à‚ɃGƒ“ƒgƒŠ‚ªŠù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: ŠÖ”ŽQÆŒ^‚ª—v‹‚³‚ê‚Ü‚·"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: [:] ‚ðŽ«‘Œ^‚Æ‘g‚݇‚킹‚Ă͎g‚¦‚Ü‚¹‚ñ"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: ˆÙ‚È‚Á‚½Œ^‚̕ϔ‚Å‚· %s="
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: –¢’m‚ÌŠÖ”‚Å‚·: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: •s³‚ȕϔ–¼‚Å‚·: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: •‚“®¬”“_”‚ð•¶Žš—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: ƒ^[ƒQƒbƒg‚ªƒŠƒXƒgŒ^“à‚Ì—v‘f‚æ‚è‚à­‚È‚¢‚Å‚·"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: ƒ^[ƒQƒbƒg‚ªƒŠƒXƒgŒ^“à‚Ì—v‘f‚æ‚è‚à‘½‚¢‚Å‚·"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "ƒŠƒXƒgŒ^‚Ì’l‚É2‚ˆÈã‚Ì ; ‚ªŒŸo‚³‚ê‚Ü‚µ‚½"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: %s ‚Ì’l‚ðˆê——•\\ަ‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: ƒŠƒXƒgŒ^‚ÆŽ«‘Œ^ˆÈŠO‚̓Cƒ“ƒfƒbƒNƒXŽw’è‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] ‚ÍÅŒã‚łȂ¯‚ê‚΂¢‚¯‚Ü‚¹‚ñ"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] ‚É‚ÍƒŠƒXƒgŒ^‚Ì’l‚ª•K—v‚Å‚·"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: ƒŠƒXƒgŒ^•Ï”‚Ƀ^[ƒQƒbƒg‚æ‚è‚à‘½‚¢—v‘f‚ª‚ ‚è‚Ü‚·"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: ƒŠƒXƒgŒ^•Ï”‚É\\•ª‚È”‚Ì—v‘f‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for ‚ÌŒã‚É \"in\" ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: ƒJƒbƒR '(' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: ‚»‚̕ϔ‚Í‚ ‚è‚Ü‚¹‚ñ: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (ƒAƒ“)ƒƒbƒN‚·‚é‚ɂ͕ϔ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' ‚ÌŒã‚É ':' ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: ƒŠƒXƒgŒ^‚ÍƒŠƒXƒgŒ^‚Æ‚µ‚©”äŠr‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: ƒŠƒXƒgŒ^‚ɂ͖³Œø‚È‘€ì‚Å‚·"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Ž«‘Œ^‚ÍŽ«‘Œ^‚Æ‚µ‚©”äŠr‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Ž«‘Œ^‚ɂ͖³Œø‚È‘€ì‚Å‚·"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: ŠÖ”ŽQÆŒ^‚ÍŠÖ”ŽQÆŒ^‚Æ‚µ‚©”äŠr‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: ŠÖ”ŽQÆŒ^‚ɂ͖³Œø‚È‘€ì‚Å‚·"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: '%' ‚ð•‚“®¬”“_”‚Æ‘g‚݇‚킹‚Ă͎g‚¦‚Ü‚¹‚ñ"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: ')' ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: ŠÖ”ŽQÆŒ^‚̓Cƒ“ƒfƒbƒNƒX‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: ƒIƒvƒVƒ‡ƒ“–¼‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: –¢’m‚̃IƒvƒVƒ‡ƒ“‚Å‚·: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: ˆø—p•„ (\") ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: ˆø—p•„ (') ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: ƒŠƒXƒgŒ^‚ɃJƒ“ƒ}‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: ƒŠƒXƒgŒ^‚ÌÅŒã‚É ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Ž«‘Œ^‚ɃRƒƒ“‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Ž«‘Œ^‚Éd•¡ƒL[‚ª‚ ‚è‚Ü‚·: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Ž«‘Œ^‚ɃJƒ“ƒ}‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Ž«‘Œ^‚ÌÅŒã‚É '}' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: •\\ަ‚·‚é‚ɂ͕ϔ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: ŠÖ”‚̈ø”‚ª‘½‰ß‚¬‚Ü‚·: %s"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: ŠÖ”‚Ì–³Œø‚Ȉø”‚Å‚·: %s"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: –¢’m‚ÌŠÖ”‚Å‚·: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: ŠÖ”‚̈ø”‚ª­‚ȉ߂¬‚Ü‚·: %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: ƒXƒNƒŠƒvƒgˆÈŠO‚Å<SID>‚ªŽg‚í‚ê‚Ü‚µ‚½: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Ž«‘—pŠÖ”‚ªŒÄ‚΂ê‚Ü‚µ‚½‚ªŽ«‘‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: ”’l‚©•‚“®¬”“_”‚ª•K—v‚Å‚·"
-
-#: ../eval.c:7503
-msgid "add() argument"
-msgstr "add() ‚̈ø”"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: ˆø”‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() ‚Í‘}“üƒ‚[ƒh‚Å‚µ‚©—˜—p‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "&Ok"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: ƒL[‚ÍŠù‚É‘¶Ý‚µ‚Ü‚·: %s"
-
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "extend() ‚̈ø”"
-
-#: ../eval.c:8915
-msgid "map() argument"
-msgstr "map() ‚̈ø”"
-
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr "filter() ‚̈ø”"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld s: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: –¢’m‚ÌŠÖ”‚Å‚·: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore() ‚ª inputsave() ‚æ‚è‚à‘½‚­ŒÄ‚΂ê‚Ü‚µ‚½"
-
-#: ../eval.c:10771
-msgid "insert() argument"
-msgstr "insert() ‚̈ø”"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: ”͈͎w’è‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: len() ‚ɂ͖³Œø‚ÈŒ^‚Å‚·"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: ƒXƒgƒ‰ƒCƒh(‘Oi—Ê)‚ª 0 ‚Å‚·"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: ŠJŽnˆÊ’u‚ªI—¹ˆÊ’u‚ð‰z‚¦‚Ü‚µ‚½"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<‹ó>"
-
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr "remove() ‚̈ø”"
-
-# Added at 10-Mar-2004.
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ƒVƒ“ƒ{ƒŠƒbƒNƒŠƒ“ƒN‚ª‘½‰ß‚¬‚Ü‚· (zŠÂ‚µ‚Ä‚¢‚é‰Â”\\«‚ª‚ ‚è‚Ü‚·)"
-
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr "reverse() ‚̈ø”"
-
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr "sort() ‚̈ø”"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "add() ‚̈ø”"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: ƒ\\[ƒg‚Ì”äŠrŠÖ”‚ªŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: ƒ\\[ƒg‚Ì”äŠrŠÖ”‚ªŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(–³Œø)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: ˆêŽžƒtƒ@ƒCƒ‹‘ž’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: •‚“®¬”“_”‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: ŠÖ”ŽQÆŒ^‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·B"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: ƒŠƒXƒgŒ^‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Ž«‘Œ^‚ð”’l‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: ŠÖ”ŽQÆŒ^‚ð•¶Žš—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: ƒŠƒXƒgŒ^‚ð•¶Žš—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: Ž«‘Œ^‚ð•¶Žš—ñ‚Æ‚µ‚Ĉµ‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: •Ï”‚ÌŒ^‚ªˆê’v‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: •Ï” %s ‚ð휂ł«‚Ü‚¹‚ñ"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: ŠÖ”ŽQÆŒ^•Ï”–¼‚Í‘å•¶Žš‚ÅŽn‚Ü‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: •Ï”–¼‚ªŠù‘¶‚ÌŠÖ”–¼‚ÆÕ“Ë‚µ‚Ü‚·: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: ’l‚ªƒƒbƒN‚³‚ê‚Ä‚¢‚Ü‚·: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "•s–¾"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: %s ‚Ì’l‚ð•ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: ƒRƒs[‚ðŽæ‚é‚ɂ͕ϔ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: –¢’è‹`‚ÌŠÖ”‚Å‚·: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: '(' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:17293
-msgid "E862: Cannot use g: here"
-msgstr "E862: ‚±‚±‚Å‚Í g: ‚ÍŽg‚¦‚Ü‚¹‚ñ"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: •s³‚Ȉø”‚Å‚·: %s"
-
-#: ../eval.c:17323
-#, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E853: ˆø”–¼‚ªd•¡‚µ‚Ä‚¢‚Ü‚·: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: :endfunction ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: ŠÖ”–¼‚ª•Ï”–¼‚ÆÕ“Ë‚µ‚Ü‚·: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: ŠÖ” %s ‚ðÄ’è‹`‚Å‚«‚Ü‚¹‚ñ: Žg—p’†‚Å‚·"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: ŠÖ”–¼‚ªƒXƒNƒŠƒvƒg‚̃tƒ@ƒCƒ‹–¼‚ƈê’v‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: ŠÖ”–¼‚ª—v‹‚³‚ê‚Ü‚·"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: ŠÖ”–¼‚Í‘å•¶Žš‚ÅŽn‚܂邩ƒRƒƒ“‚ðŠÜ‚܂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: ŠÖ”–¼‚Í‘å•¶Žš‚ÅŽn‚܂邩ƒRƒƒ“‚ðŠÜ‚܂Ȃ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ŠÖ” %s ‚ð휂ł«‚Ü‚¹‚ñ: Žg—p’†‚Å‚·"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: ŠÖ”ŒÄo‚Ì“ü‚êŽq”‚ª 'maxfuncdepth' ‚ð’´‚¦‚Ü‚µ‚½"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "%s ‚ðŽÀs’†‚Å‚·"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ‚ª’†’f‚³‚ê‚Ü‚µ‚½"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s ‚ª #%<PRId64> ‚ð•Ô‚µ‚Ü‚µ‚½"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s ‚ª %s ‚ð•Ô‚µ‚Ü‚µ‚½"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "%s ‚ÌŽÀs‚ðŒp‘±’†‚Å‚·"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: ŠÖ”ŠO‚É :return ‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# ƒOƒ[ƒoƒ‹•Ï”:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tLast set from "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "ŒÃ‚¢ƒtƒ@ƒCƒ‹‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, 16i” %02x, 8i” %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, 16i” %04x, 8i” %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, 16i” %08x, 8i” %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: s‚ð‚»‚êŽ©g‚ɂ͈ړ®‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "1 s‚ªˆÚ“®‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "%<PRId64> s‚ªˆÚ“®‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "%<PRId64> s‚ªƒtƒBƒ‹ƒ^ˆ—‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *ƒtƒBƒ‹ƒ^* autocommand‚ÍŒ»Ý‚̃oƒbƒtƒ@‚ð•ÏX‚µ‚Ă͂¢‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[ÅŒã‚Ì•ÏX‚ª•Û‘¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s s–Ú: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: ƒGƒ‰[‚ª‘½‰ß‚¬‚é‚Ì‚Å, ˆÈ~‚̓XƒLƒbƒv‚µ‚Ü‚·"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfoƒtƒ@ƒCƒ‹ \"%s\"%s%s%s ‚ð“Çž‚Ý’† "
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " î•ñ"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " ƒ}[ƒN"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " ‹Œƒtƒ@ƒCƒ‹ŒQ"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ޏ”s"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: viminfoƒtƒ@ƒCƒ‹‚ª‘ž‚݂ł«‚Ü‚¹‚ñ: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: viminfoƒtƒ@ƒCƒ‹ %s ‚ð•Û‘¶‚Å‚«‚Ü‚¹‚ñ!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "viminfoƒtƒ@ƒCƒ‹ \"%s\" ‚𑞂ݒ†"
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# ‚±‚Ì viminfo ƒtƒ@ƒCƒ‹‚Í Vim %s ‚É‚æ‚Á‚ͬ‚³‚ê‚Ü‚µ‚½.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# •ÏX‚·‚éÛ‚É‚Í\\•ª’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢!\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# ‚±‚̃tƒ@ƒCƒ‹‚ª‘‚©‚ê‚½Žž‚Ì 'encoding' ‚Ì’l\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "•s³‚Èæ“ª•¶Žš‚Å‚·"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "ƒtƒ@ƒCƒ‹‚ð•”•ª“I‚ɕۑ¶‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ƒoƒbƒtƒ@‚ð•”•ª“I‚ɕۑ¶‚·‚é‚É‚Í ! ‚ðŽg‚Á‚Ä‚­‚¾‚³‚¢"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "Šù‘¶‚̃tƒ@ƒCƒ‹ \"%s\" ‚ðã‘‚«‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹ \"%s\" ‚ª‘¶Ý‚µ‚Ü‚·. ã‘‚«‚ð‹­§‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µ‚Ü‚·: %s (:silent! ‚ð’ljÁ‚Åã‘)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: ƒoƒbƒtƒ@ %<PRId64> ‚ɂ͖¼‘O‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ƒtƒ@ƒCƒ‹‚͕ۑ¶‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½: 'write' ƒIƒvƒVƒ‡ƒ“‚É‚æ‚è–³Œø‚Å‚·"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"\"%s\" ‚É‚Í 'readonly' ƒIƒvƒVƒ‡ƒ“‚ªÝ’肳‚ê‚Ä‚¢‚Ü‚·.\n"
-"ã‘‚«‹­§‚ð‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"ƒtƒ@ƒCƒ‹ \"%s\" ‚̃p[ƒ~ƒbƒVƒ‡ƒ“‚ª“Çžê—p‚Å‚·.\n"
-"‚»‚ê‚Å‚à‹°‚ç‚­‘‚«ž‚Þ‚±‚Ƃ͉”\\‚Å‚·.\n"
-"Œp‘±‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" ‚͓Ǟê—p‚Å‚· (‹­§‘ž‚É‚Í ! ‚ð’ljÁ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: autocommand‚ª—\\Šú‚¹‚¸V‚µ‚¢ƒoƒbƒtƒ@ %s ‚ð휂µ‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: ”‚ł͂Ȃ¢ˆø”‚ª :z ‚É“n‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim‚ł̓VƒFƒ‹ƒRƒ}ƒ“ƒh‚ðŽg‚¦‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: ³‹K•\\Œ»‚Í•¶Žš‚Å‹æØ‚é‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "%s ‚É’uŠ·‚µ‚Ü‚·‚©? (y/n/a/q/l/^E/^Y)"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(Š„ž‚Ü‚ê‚Ü‚µ‚½) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1 ‰ÓŠŠY“–‚µ‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1 ‰ÓŠ’uŠ·‚µ‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> ‰ÓŠŠY“–‚µ‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> ‰ÓŠ’uŠ·‚µ‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " (Œv 1 s“à)"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " (Œv %<PRId64> s“à)"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global ‚ðÄ‹A“I‚ɂ͎g‚¦‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: globalƒRƒ}ƒ“ƒh‚ɳ‹K•\\Œ»‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "ƒpƒ^[ƒ“‚ª‘S‚Ä‚Ìs‚ÅŒ©‚‚©‚è‚Ü‚µ‚½: %s"
-
-#: ../ex_cmds.c:4510
-#, c-format
-msgid "Pattern not found: %s"
-msgstr "ƒpƒ^[ƒ“‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# ÅŒã‚É’uŠ·‚³‚ꂽ•¶Žš—ñ:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: Q‚ĂȂ¢‚Å‚­‚¾‚³‚¢"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Žc”O‚Å‚·‚ª '%s' ‚̃wƒ‹ƒv‚ª %s ‚ɂ͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Žc”O‚Å‚·‚ª %s ‚ɂ̓wƒ‹ƒv‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Žc”O‚Å‚·‚ªƒwƒ‹ƒvƒtƒ@ƒCƒ‹ \"%s\" ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: ƒfƒBƒŒƒNƒgƒŠ‚ł͂ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: ‘ž‚Ý—p‚É %s ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: “Çž—p‚É %s ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-# Added at 29-Apr-2004.
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: 1‚‚̌¾Œê‚̃wƒ‹ƒvƒtƒ@ƒCƒ‹‚É•¡”‚̃Gƒ“ƒR[ƒh‚ª¬Ý‚µ‚Ä‚¢‚Ü‚·: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: ƒ^ƒO \"%s\" ‚ªƒtƒ@ƒCƒ‹ %s/%s ‚Éd•¡‚µ‚Ä‚¢‚Ü‚·"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: –¢’m‚ÌsignƒRƒ}ƒ“ƒh‚Å‚·: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: sign–¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: sign‚Ì’è‹`‚ª‘½”Œ©‚‚©‚è‚Ü‚µ‚½"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: –³Œø‚Èsign‚̃eƒLƒXƒg‚Å‚·: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: –¢’m‚Ìsign‚Å‚·: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: sign‚̔Ԇ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: –³Œø‚ȃoƒbƒtƒ@–¼‚Å‚·: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: –³Œø‚Èsignޝ•ÊŽq‚Å‚·: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (”ñƒTƒ|[ƒg)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[íœÏ]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "ƒfƒoƒbƒOƒ‚[ƒh‚É“ü‚è‚Ü‚·. ‘±‚¯‚é‚É‚Í \"cont\" ‚Æ“ü—Í‚µ‚Ä‚­‚¾‚³‚¢."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "s %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "ƒRƒ}ƒ“ƒh: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "ƒuƒŒ[ƒNƒ|ƒCƒ“ƒg \"%s%s\" s %<PRId64>"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: ƒuƒŒ[ƒNƒ|ƒCƒ“ƒg‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "ƒuƒŒ[ƒNƒ|ƒCƒ“ƒg‚ª’è‹`‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s s %<PRId64>"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: ‰‚ß‚É \":profile start {fname}\" ‚ðŽÀs‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "•ÏX‚ð \"%s\" ‚ɕۑ¶‚µ‚Ü‚·‚©?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "–³‘è"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: ƒoƒbƒtƒ@ \"%s\" ‚Ì•ÏX‚͕ۑ¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "Œx: —\\Šú‚¹‚¸‘¼ƒoƒbƒtƒ@‚ÖˆÚ“®‚µ‚Ü‚µ‚½ (autocommands ‚𒲂ׂĂ­‚¾‚³‚¢)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: •ÒW‚·‚éƒtƒ@ƒCƒ‹‚Í1‚‚µ‚©‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: ʼn‚̃tƒ@ƒCƒ‹‚æ‚è‘O‚É‚Ís‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: ÅŒã‚̃tƒ@ƒCƒ‹‚ð‰z‚¦‚ÄŒã‚É‚Ís‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: ‚»‚̃Rƒ“ƒpƒCƒ‰‚ɂ͑Ήž‚µ‚Ä‚¢‚Ü‚¹‚ñ: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "\"%s\" ‚ð \"%s\" ‚©‚猟õ’†"
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "\"%s\" ‚ðŒŸõ’†"
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath' ‚Ì’†‚ɂ͌©‚‚©‚è‚Ü‚¹‚ñ: \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "ƒfƒBƒŒƒNƒgƒŠ‚͎枂߂܂¹‚ñ: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "\"%s\" ‚ðŽæž‚߂܂¹‚ñ"
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "s %<PRId64>: \"%s\" ‚ðŽæž‚߂܂¹‚ñ"
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "\"%s\" ‚ðŽæž’†"
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "s %<PRId64>: %s ‚ðŽæž’†"
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "%s ‚ÌŽæž‚ðŠ®—¹"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "ƒ‚[ƒhs"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd ˆø”"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c ˆø”"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "ŠÂ‹«•Ï”"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "ƒGƒ‰[ƒnƒ“ƒhƒ‰"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: Œx: s‹æØ‚ª•s³‚Å‚·. ^M ‚ª‚È‚¢‚̂łµ‚傤"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: :scriptencoding ‚ªŽæžƒXƒNƒŠƒvƒgˆÈŠO‚ÅŽg—p‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: :finish ‚ªŽæžƒXƒNƒŠƒvƒgˆÈŠO‚ÅŽg—p‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Œ»Ý‚Ì %sŒ¾Œê: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Œ¾Œê‚ð \"%s\" ‚ÉÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Exƒ‚[ƒh‚É“ü‚è‚Ü‚·. ƒm[ƒ}ƒ‹‚É–ß‚é‚É‚Í\"visual\"‚Æ“ü—Í‚µ‚Ä‚­‚¾‚³‚¢."
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: ƒtƒ@ƒCƒ‹‚ÌI—¹ˆÊ’u"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: ƒRƒ}ƒ“ƒh‚ªÄ‹A“I‰ß‚¬‚Ü‚·"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: —áŠO‚ª•ß‘¨‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "Žæžƒtƒ@ƒCƒ‹‚ÌÅŒã‚Å‚·"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "ŠÖ”‚ÌÅŒã‚Å‚·"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ƒ†[ƒU’è‹`ƒRƒ}ƒ“ƒh‚Ì‚ ‚¢‚Ü‚¢‚ÈŽg—p‚Å‚·"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: ƒGƒfƒBƒ^‚̃Rƒ}ƒ“ƒh‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: ‹t‚³‚܂͈̔͂ªŽw’肳‚ê‚Ü‚µ‚½"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "‹t‚³‚܂͈̔͂ªŽw’肳‚ê‚Ü‚µ‚½, “ü‘Ö‚¦‚Ü‚·‚©?"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: w ‚à‚µ‚­‚Í w>> ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: ‚±‚̃o[ƒWƒ‡ƒ“‚ł͂±‚̃Rƒ}ƒ“ƒh‚Í—˜—p‚Å‚«‚Ü‚¹‚ñ, ‚²‚ß‚ñ‚È‚³‚¢"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: ƒtƒ@ƒCƒ‹–¼‚Í 1 ‚‚ɂµ‚Ä‚­‚¾‚³‚¢"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "•ÒW‚·‚ׂ«ƒtƒ@ƒCƒ‹‚ª 1 ŒÂ‚ ‚è‚Ü‚·‚ª, I—¹‚µ‚Ü‚·‚©?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "•ÒW‚·‚ׂ«ƒtƒ@ƒCƒ‹‚ª‚ ‚Æ %d ŒÂ‚ ‚è‚Ü‚·‚ª, I—¹‚µ‚Ü‚·‚©?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: •ÒW‚·‚ׂ«ƒtƒ@ƒCƒ‹‚ª 1 ŒÂ‚ ‚è‚Ü‚·"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: •ÒW‚·‚ׂ«ƒtƒ@ƒCƒ‹‚ª‚ ‚Æ %<PRId64> ŒÂ‚ ‚è‚Ü‚·"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ƒRƒ}ƒ“ƒh‚ªŠù‚É‚ ‚è‚Ü‚·: Ä’è‹`‚·‚é‚É‚Í ! ‚ð’ljÁ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" –¼‘O ˆø” ”ÍˆÍ •⊮ ’è‹`"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "ƒ†[ƒU’è‹`ƒRƒ}ƒ“ƒh‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: ‘®«‚Í’è‹`‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: ˆø”‚Ì”‚ª–³Œø‚Å‚·"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ƒJƒEƒ“ƒg‚ð2dŽw’è‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: ƒJƒEƒ“ƒg‚ÌÈ—ª’l‚ª–³Œø‚Å‚·"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -•⊮‚Ì‚½‚߂̈ø”‚ª•K—v‚Å‚·"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: –³Œø‚È‘®«‚Å‚·: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: –³Œø‚ȃRƒ}ƒ“ƒh–¼‚Å‚·"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: ƒ†[ƒU’è‹`ƒRƒ}ƒ“ƒh‚͉p‘å•¶Žš‚ÅŽn‚Ü‚ç‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: —\\–ñ–¼‚Ȃ̂Å, ƒ†[ƒU’è‹`ƒRƒ}ƒ“ƒh‚É—˜—p‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: ‚»‚̃†[ƒU’è‹`ƒRƒ}ƒ“ƒh‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: –³Œø‚ȕ⊮Žw’è‚Å‚·: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: •⊮ˆø”‚̓JƒXƒ^ƒ€•⊮‚Å‚µ‚©Žg—p‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: ƒJƒXƒ^ƒ€•⊮‚ɂ͈ø”‚Æ‚µ‚ÄŠÖ”‚ª•K—v‚Å‚·"
-
-#: ../ex_docmd.c:5257
-#, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: ƒJƒ‰[ƒXƒL[ƒ€ '%s' ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "Vim Žg‚¢‚³‚ñA‚â‚ !"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: ÅŒã‚̃^ƒuƒy[ƒW‚ð•‚¶‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "Šù‚Ƀ^ƒuƒy[ƒW‚Í1‚‚µ‚©‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "ƒ^ƒuƒy[ƒW %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr ""
-"E747: ƒoƒbƒtƒ@‚ªC³‚³‚ê‚Ä‚¢‚é‚Ì‚Å, ƒfƒBƒŒƒNƒgƒŠ‚ð•ÏX‚Å‚«‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å"
-"ã‘)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: ‘O‚̃fƒBƒŒƒNƒgƒŠ‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: –¢’m"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize ‚É‚Í2‚‚̔’l‚̈ø”‚ª•K—v‚Å‚·"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr ""
-"E188: ‚±‚̃vƒ‰ƒbƒgƒz[ƒ€‚ɂ̓EƒBƒ“ƒhƒEˆÊ’u‚̎擾‹@”\\‚ÍŽÀ‘•‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos ‚É‚Í2‚‚̔’l‚̈ø”‚ª•K—v‚Å‚·"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: ƒfƒBƒŒƒNƒgƒŠ‚ð쬂ł«‚Ü‚¹‚ñ: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ‚ª‘¶Ý‚µ‚Ü‚· (ã‘‚·‚é‚É‚Í ! ‚ð’ljÁ‚µ‚Ä‚­‚¾‚³‚¢)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: \"%s\" ‚𑞂ݗp‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñ"
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ˆø”‚Í1•¶Žš‚̉pŽš‚©ˆø—p•„ (' ‚© `) ‚łȂ¯‚ê‚΂¢‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal ‚ÌÄ‹A—˜—p‚ª[‚­‚È‚è‰ß‚¬‚Ü‚µ‚½"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: '#'‚ð’u‚«Š·‚¦‚é•›ƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: \"<afile>\"‚ð’u‚«Š·‚¦‚éautocommand‚̃tƒ@ƒCƒ‹–¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: \"<abuf>\"‚ð’u‚«Š·‚¦‚éautocommandƒoƒbƒtƒ@”Ô†‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: \"<amatch>\"‚ð’u‚«Š·‚¦‚éautocommand‚ÌŠY“––¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: \"<sfile>\"‚ð’u‚«Š·‚¦‚é :source ‘ÎÛƒtƒ@ƒCƒ‹–¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: \"<slnum>\"‚ð’u‚«Š·‚¦‚és”Ô†‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr ""
-"E499: '%' ‚â '#' ‚ª–³–¼ƒtƒ@ƒCƒ‹‚Ȃ̂Š\":p:h\" ‚𔺂í‚È‚¢Žg‚¢•û‚͂ł«‚Ü‚¹‚ñ"
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: ‹ó•¶Žš—ñ‚Æ‚µ‚Ä•]‰¿‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: viminfoƒtƒ@ƒCƒ‹‚ð“Çž—p‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: 'Vim' ‚ÅŽn‚Ü‚é—áŠO‚Í :throw ‚Å‚«‚Ü‚¹‚ñ"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "—áŠO‚ª”­¶‚µ‚Ü‚µ‚½: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "—áŠO‚ªŽû‘©‚µ‚Ü‚µ‚½: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "—áŠO‚ª”jŠü‚³‚ê‚Ü‚µ‚½: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, s %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "—áŠO‚ª•ß‘¨‚³‚ê‚Ü‚µ‚½: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%s ‚É‚æ‚è–¢Œˆ’èó‘Ô‚ª¶‚¶‚Ü‚µ‚½"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%s ‚ªÄŠJ‚µ‚Ü‚µ‚½"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%s ‚ª”jŠü‚³‚ê‚Ü‚µ‚½"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "—áŠO"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "ƒGƒ‰[‚ÆŠ„ž‚Ý"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "ƒGƒ‰["
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "Š„ž‚Ý"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: :if ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :if ‚̂Ȃ¢ :endif ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :if ‚̂Ȃ¢ :else ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :if ‚̂Ȃ¢ :elseif ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: •¡”‚Ì :else ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :else ‚ÌŒã‚É :elseif ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while ‚â :for ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :while ‚â :for ‚̂Ȃ¢ :continue ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :while ‚â :for ‚̂Ȃ¢ :break ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: :endfor ‚ð :while ‚Æ‘g‚݇‚킹‚Ä‚¢‚Ü‚·"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: :endwhile ‚ð :for ‚Æ‘g‚݇‚킹‚Ä‚¢‚Ü‚·"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: :try ‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :try ‚̂Ȃ¢ :catch ‚ª‚ ‚è‚Ü‚·"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :finally ‚ÌŒã‚É :catch ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :try ‚̂Ȃ¢ :finally ‚ª‚ ‚è‚Ü‚·"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: •¡”‚Ì :finally ‚ª‚ ‚è‚Ü‚·"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :try ‚̂Ȃ¢ :endtry ‚Å‚·"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: ŠÖ”‚ÌŠO‚É :endfunction ‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Œ»Ý‚Í‘¼‚̃oƒbƒtƒ@‚ð•ÒW‚·‚邱‚Ƃ͋–‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Œ»Ý‚̓oƒbƒtƒ@î•ñ‚ð•ÏX‚·‚邱‚Ƃ͋–‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "ƒ^ƒO–¼"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " ƒtƒ@ƒCƒ‹Ží—Þ\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "ƒIƒvƒVƒ‡ƒ“ 'history' ‚ªƒ[ƒ‚Å‚·"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s €–Ú‚Ì—š—ð (V‚µ‚¢‚à‚Ì‚©‚çŒÃ‚¢‚à‚Ì‚Ö):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "ŒŸõ•¶Žš—ñ"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "Ž®"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "“ü—Ís"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ‚ªƒRƒ}ƒ“ƒh’·‚ð’´‚¦‚Ü‚µ‚½"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: ƒAƒNƒeƒBƒu‚ȃEƒBƒ“ƒhƒE‚©ƒoƒbƒtƒ@‚ªíœ‚³‚ê‚Ü‚µ‚½"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr "E854: ƒpƒX‚ª’·‰ß‚¬‚ĕ⊮‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: –³Œø‚ȃpƒX‚Å‚·: '**[”’l]' ‚Ípath‚ÌŌォ '%s' ‚ª‘±‚¢‚ĂȂ¢‚Æ‚¢‚¯‚Ü‚¹"
-"‚ñ."
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath‚É‚Í \"%s\" ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: path‚É‚Í \"%s\" ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: cdpath‚ɂ͂±‚êˆÈã \"%s\" ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: ƒpƒX‚ɂ͂±‚êˆÈã \"%s\" ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: autocommand‚ªƒoƒbƒtƒ@‚©ƒoƒbƒtƒ@–¼‚ð•ÏX‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "•s³‚ȃtƒ@ƒCƒ‹–¼"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr " ‚̓fƒBƒŒƒNƒgƒŠ‚Å‚·"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr " ‚̓tƒ@ƒCƒ‹‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[Vƒtƒ@ƒCƒ‹]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[V‹KƒfƒBƒŒƒNƒgƒŠ]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[ƒtƒ@ƒCƒ‹‰ß‘å]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[”F‰Â‚ª‚ ‚è‚Ü‚¹‚ñ]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre autocommand ‚ªƒtƒ@ƒCƒ‹‚ð“Çž•s‰Â‚É‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre autocommand ‚ÍŒ»Ý‚̃oƒbƒtƒ@‚ð•Ï‚¦‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: •W€“ü—Í‚©‚ç“Çž’†...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: •ÏŠ·‚ªƒtƒ@ƒCƒ‹‚ð“Çž•s‰Â‚É‚µ‚Ü‚µ‚½"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[FIFO/ƒ\\ƒPƒbƒg]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[FIFO]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[ƒ\\ƒPƒbƒg]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr "[ƒLƒƒƒ‰ƒNƒ^EƒfƒoƒCƒX]"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[CR–³]"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[’·s•ªŠ„]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[–¢•ÏŠ·]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[•ÏŠ·Ï]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[%<PRId64> s–ڂŕϊ·ƒGƒ‰[]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[%<PRId64> s–Ú‚Ì•s³‚ȃoƒCƒg]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[“ÇžƒGƒ‰[]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "•ÏŠ·‚É•K—v‚Ȉꎞƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert' ‚É‚æ‚é•ÏŠ·‚ªŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "'charconvert' ‚Ìo—Í‚ð“Çž‚߂܂¹‚ñ‚Å‚µ‚½"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: acwriteƒoƒbƒtƒ@‚ÌŠY“–‚·‚éautocommand‚Í‘¶Ý‚µ‚Ü‚¹‚ñ"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: •Û‘¶‚·‚éƒoƒbƒtƒ@‚ðautocommand‚ªíœ‚©‰ð•ú‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: autocommand‚ª—\\Šú‚¹‚Ê•û–@‚Ås”‚ð•ÏX‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "‚̓tƒ@ƒCƒ‹‚Å‚à‘ž‚݉”\\ƒfƒoƒCƒX‚Å‚à‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "‚͓Ǟê—p‚Å‚· (‹­§‘ž‚É‚Í ! ‚ð’ljÁ)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: ƒoƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹‚ð•Û‘¶‚Å‚«‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å‹­§•Û‘¶)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr ""
-"E507: ƒoƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹‚ð•‚¶‚éۂɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½ (! ‚ð’ljÁ‚Å‹­§)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: ƒoƒbƒNƒAƒbƒv—pƒtƒ@ƒCƒ‹‚ð“Çž‚߂܂¹‚ñ (! ‚ð’ljÁ‚Å‹­§“Çž)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: ƒoƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹‚ðì‚ê‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å‹­§ì¬)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: ƒoƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹‚ðì‚ê‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å‹­§ì¬)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: •Û‘¶—pˆêŽžƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: •ÏŠ·‚Å‚«‚Ü‚¹‚ñ (! ‚ð’ljÁ‚ŕϊ·‚¹‚¸‚ɕۑ¶)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: ƒŠƒ“ƒN‚³‚ꂽƒtƒ@ƒCƒ‹‚É‘ž‚߂܂¹‚ñ"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: ‘ž‚Ý—p‚Ƀtƒ@ƒCƒ‹‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: fsync ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: •‚¶‚邱‚ƂɎ¸”s"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: ‘ž‚݃Gƒ‰[, •ÏŠ·Ž¸”s (ã‘‚·‚é‚É‚Í 'fenc' ‚ð‹ó‚É‚µ‚Ä‚­‚¾‚³‚¢)"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: ‘ž‚݃Gƒ‰[, •ÏŠ·Ž¸”s, s” %<PRId64> (ã‘‚·‚é‚É‚Í 'fenc' ‚ð‹ó‚É‚µ‚Ä"
-"‚­‚¾‚³‚¢)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: ‘ž‚݃Gƒ‰[, (ƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€‚ª–ž”t?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " •ÏŠ·ƒGƒ‰["
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr "s %<PRId64>;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[ƒfƒoƒCƒX]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[V]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " ’ljÁ"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " ‘ž‚Ý"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: patchmode: Œ´–{ƒtƒ@ƒCƒ‹‚ð•Û‘¶‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: patchmode: ‹ó‚ÌŒ´–{ƒtƒ@ƒCƒ‹‚ðtouch‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: ƒoƒbƒNƒAƒbƒvƒtƒ@ƒCƒ‹‚ðÁ‚¹‚Ü‚¹‚ñ"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"Œx: Œ´–{ƒtƒ@ƒCƒ‹‚ªŽ¸‚í‚ꂽ‚©•ÏX‚³‚ê‚Ü‚µ‚½\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "ƒtƒ@ƒCƒ‹‚̕ۑ¶‚ɬŒ÷‚·‚é‚܂ŃGƒfƒBƒ^‚ðI—¹‚µ‚È‚¢‚Å‚­‚¾‚³‚¢!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[dosƒtƒH[ƒ}ƒbƒg]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[macƒtƒH[ƒ}ƒbƒg]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[unixƒtƒH[ƒ}ƒbƒg]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 s, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> s, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 •¶Žš"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> •¶Žš"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[ÅIs‚ª•sŠ®‘S]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "Œx: “Çž‚ñ‚¾Œã‚Ƀtƒ@ƒCƒ‹‚É•ÏX‚ª‚ ‚è‚Ü‚µ‚½!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "–{“–‚Éã‘‚«‚µ‚Ü‚·‚©"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: \"%s\" ‚𑞂ݒ†‚̃Gƒ‰[‚Å‚·"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: \"%s\" ‚ð•‚¶‚鎞‚ɃGƒ‰[‚Å‚·"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: \"%s\" ‚ð“Çž’†‚̃Gƒ‰[‚Å‚·"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: autocommand ‚Ì FileChangedShell ‚ªƒoƒbƒtƒ@‚ð휂µ‚Ü‚µ‚½"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: ƒtƒ@ƒCƒ‹ \"%s\" ‚ÍŠù‚É‘¶Ý‚µ‚Ü‚¹‚ñ"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr "W12: Œx: ƒtƒ@ƒCƒ‹ \"%s\" ‚ª•ÏX‚³‚êVim‚̃oƒbƒtƒ@‚à•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "Ú×‚Í \":help W12\" ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Œx: ƒtƒ@ƒCƒ‹ \"%s\" ‚Í•ÒWŠJŽnŒã‚É•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "Ú×‚Í \":help W11\" ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: Œx: ƒtƒ@ƒCƒ‹ \"%s\" ‚̃‚[ƒh‚ª•ÒWŠJŽnŒã‚É•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "Ú×‚Í \":help W16\" ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Œx: ƒtƒ@ƒCƒ‹ \"%s\" ‚Í•ÒWŠJŽnŒã‚É쬂³‚ê‚Ü‚µ‚½"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "Œx"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"&OK\n"
-"ƒtƒ@ƒCƒ‹“Çž(&L)"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: \"%s\" ‚ðƒŠƒ[ƒh‚·‚途õ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: \"%s\" ‚ÍƒŠƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--íœÏ--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "autocommand: %s <ƒoƒbƒtƒ@=%d> ‚ªŽ©“®“I‚É휂³‚ê‚Ü‚·"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: ‚»‚̃Oƒ‹[ƒv‚Í‚ ‚è‚Ü‚¹‚ñ: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: * ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚µ‚½: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: ‚»‚̂悤‚ȃCƒxƒ“ƒg‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: ‚»‚̂悤‚ȃOƒ‹[ƒv‚à‚µ‚­‚̓Cƒxƒ“ƒg‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Auto-Commands ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <ƒoƒbƒtƒ@=%d>: –³Œø‚ȃoƒbƒtƒ@”Ô†‚Å‚· "
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: ‘S‚ẴCƒxƒ“ƒg‚ɑ΂µ‚Ä‚Ìautocommand‚ÍŽÀs‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "ŠY“–‚·‚éautocommand‚Í‘¶Ý‚µ‚Ü‚¹‚ñ"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: autocommand‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s Auto commands for \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "%s ‚ðŽÀs‚µ‚Ä‚¢‚Ü‚·"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "autocommand %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: { ‚ª‚ ‚è‚Ü‚¹‚ñ."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: } ‚ª‚ ‚è‚Ü‚¹‚ñ."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: Üô‚Ý‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Œ»Ý‚Ì 'foldmethod' ‚Å‚ÍÜô‚Ý‚ð쬂ł«‚Ü‚¹‚ñ"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Œ»Ý‚Ì 'foldmethod' ‚Å‚ÍÜô‚Ý‚ð휂ł«‚Ü‚¹‚ñ"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld s‚ªÜô‚Ü‚ê‚Ü‚µ‚½ "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: “Çžƒoƒbƒtƒ@‚֒ljÁ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: Ä‹A“Iƒ}ƒbƒsƒ“ƒO"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: %s ‚Æ‚¢‚¤ƒOƒ[ƒoƒ‹’Zk“ü—͂͊ù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: %s ‚Æ‚¢‚¤ƒOƒ[ƒoƒ‹ƒ}ƒbƒsƒ“ƒO‚ÍŠù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: %s ‚Æ‚¢‚¤’Zk“ü—͂͊ù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: %s ‚Æ‚¢‚¤ƒ}ƒbƒsƒ“ƒO‚ÍŠù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "’Zk“ü—͂͌©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "ƒ}ƒbƒsƒ“ƒO‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: •s³‚ȃ‚[ƒh"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--ƒoƒbƒtƒ@‚És‚ª‚ ‚è‚Ü‚¹‚ñ--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: ƒRƒ}ƒ“ƒh‚ª’†’f‚³‚ê‚Ü‚µ‚½"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: ˆø”‚ª•K—v‚Å‚·"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ ‚ÌŒã‚Í / ‚© ? ‚© & ‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ƒRƒ}ƒ“ƒhƒ‰ƒCƒ“‚ł͖³Œø‚Å‚·; <CR>‚ÅŽÀs, CTRL-C‚Å‚â‚ß‚é"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: Œ»Ý‚̃fƒBƒŒƒNƒgƒŠ‚âƒ^ƒOŒŸõ‚Å‚Íexrc/vimrc‚̃Rƒ}ƒ“ƒh‚Í‹–‰Â‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: :endif ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: :endtry ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: :endwhile ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: :endfor ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :while ‚̂Ȃ¢ :endwhile ‚ª‚ ‚è‚Ü‚·"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor ‚̂Ȃ¢ :for ‚ª‚ ‚è‚Ü‚·"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: ƒtƒ@ƒCƒ‹‚ª‘¶Ý‚µ‚Ü‚· (! ‚ð’ljÁ‚Åã‘)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: ƒRƒ}ƒ“ƒh‚ªŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: “à•”ƒGƒ‰[‚Å‚·"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "Š„ž‚Ü‚ê‚Ü‚µ‚½"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: –³Œø‚ȃAƒhƒŒƒX‚Å‚·"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: –³Œø‚Ȉø”‚Å‚·"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: –³Œø‚Ȉø”‚Å‚·: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: –³Œø‚ÈŽ®‚Å‚·: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: –³Œø‚Ȕ͈͂ł·"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: –³Œø‚ȃRƒ}ƒ“ƒh‚Å‚·"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ‚̓fƒBƒŒƒNƒgƒŠ‚Å‚·"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: –³Œø‚ȃXƒNƒ[ƒ‹—ʂł·"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: \"%s\"() ‚̃‰ƒCƒuƒ‰ƒŠŒÄo‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: ƒ}[ƒN‚É–³Œø‚Ès”Ô†‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚µ‚½"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: ƒ}[ƒN‚Íݒ肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: 'modifiable' ‚ªƒIƒt‚Ȃ̂Å, •ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: ƒXƒNƒŠƒvƒg‚Ì“ü‚êŽq‚ª[‰ß‚¬‚Ü‚·"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: •›ƒtƒ@ƒCƒ‹‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: ‚»‚̂悤‚È’Zk“ü—͂͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ! ‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: GUI‚ÍŽg—p•s‰Â”\\‚Å‚·: ƒRƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: ‚»‚̂悤‚È–¼‚̃nƒCƒ‰ƒCƒgƒOƒ‹[ƒv‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: ‚Ü‚¾ƒeƒLƒXƒg‚ª‘}“ü‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: ˆÈ‘O‚ɃRƒ}ƒ“ƒhs‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: ‚»‚̂悤‚ȃ}ƒbƒsƒ“ƒO‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: ŠY“–‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: ŠY“–‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: ƒtƒ@ƒCƒ‹–¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: ³‹K•\\Œ»’uŠ·‚ª‚Ü‚¾ŽÀs‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: ƒRƒ}ƒ“ƒh‚ª‚Ü‚¾ŽÀs‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: ³‹K•\\Œ»‚ª‚Ü‚¾ŽÀs‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: ”͈͎w’è‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ƒEƒBƒ“ƒhƒE‚É\\•ª‚È‚‚³‚à‚µ‚­‚Í•‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: ƒtƒ@ƒCƒ‹ %s ‚ð쬂ł«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: ˆêŽžƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: ƒtƒ@ƒCƒ‹ \"%s\" ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: ƒtƒ@ƒCƒ‹ %s ‚ð“Çž‚߂܂¹‚ñ"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ÅŒã‚Ì•ÏX‚ª•Û‘¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å•ÏX‚ð”jŠü)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[ÅŒã‚Ì•ÏX‚ª•Û‘¶‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ˆø”‚ª‹ó‚Å‚·"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: ”’l‚ª—v‹‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: ƒGƒ‰[ƒtƒ@ƒCƒ‹ %s ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: ƒƒ‚ƒŠ‚ªs‚«‰Ê‚Ă܂µ‚½!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "ƒpƒ^[ƒ“‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: ƒpƒ^[ƒ“‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: ˆø”‚ͳ‚Ì’l‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: ‘O‚̃fƒBƒŒƒNƒgƒŠ‚É–ß‚ê‚Ü‚¹‚ñ"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: ƒGƒ‰[‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: êŠƒŠƒXƒg‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: ŠY“–•¶Žš—ñ‚ª”j‘¹‚µ‚Ä‚¢‚Ü‚·"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: •s³‚ȳ‹K•\\Œ»ƒvƒƒOƒ‰ƒ€‚Å‚·"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: 'readonly' ƒIƒvƒVƒ‡ƒ“‚ªÝ’肳‚ê‚Ä‚¢‚Ü‚· (! ‚ð’ljÁ‚Åã‘‚«)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: “ÇŽæê—p•Ï” \"%s\" ‚ɂ͒l‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: ƒTƒ“ƒhƒ{ƒbƒNƒX‚ł͕ϔ \"%s\" ‚É’l‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: ƒGƒ‰[ƒtƒ@ƒCƒ‹‚̓Ǟ’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: ƒTƒ“ƒhƒ{ƒbƒNƒX‚ł͋–‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: ‚±‚±‚ł͋–‰Â‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: ƒXƒNƒŠ[ƒ“ƒ‚[ƒh‚ÌÝ’è‚ɂ͑Ήž‚µ‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: –³Œø‚ȃXƒNƒ[ƒ‹—ʂł·"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: 'shell' ƒIƒvƒVƒ‡ƒ“‚ª‹ó‚Å‚·"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: sign ‚̃f[ƒ^‚ð“Çž‚߂܂¹‚ñ‚Å‚µ‚½"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚̃Nƒ[ƒYŽžƒGƒ‰[‚Å‚·"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: ƒ^ƒOƒXƒ^ƒbƒN‚ª‹ó‚Å‚·"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: ƒRƒ}ƒ“ƒh‚ª•¡ŽG‰ß‚¬‚Ü‚·"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: –¼‘O‚ª’·‰ß‚¬‚Ü‚·"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: [ ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: ƒtƒ@ƒCƒ‹–¼‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: —]•ª‚È•¶Žš‚ªŒã‚ë‚É‚ ‚è‚Ü‚·"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: –¢’m‚̃}[ƒN"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: ƒƒCƒ‹ƒhƒJ[ƒh‚ð“WŠJ‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' ‚Í 'winminheight' ‚æ‚謂³‚­‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' ‚Í 'winminwidth' ‚æ‚謂³‚­‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: ‘ž‚Ý’†‚̃Gƒ‰["
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "ƒ[ƒƒJƒEƒ“ƒg"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: ƒXƒNƒŠƒvƒgˆÈŠO‚Å<SID>‚ªŽg‚í‚ê‚Ü‚µ‚½"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: “à•”ƒGƒ‰[‚Å‚·: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: ƒpƒ^[ƒ“‚ª 'maxmempattern' ˆÈã‚̃ƒ‚ƒŠ‚ðŽg—p‚µ‚Ü‚·"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: ƒoƒbƒtƒ@‚ª‹ó‚Å‚·"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: ŒŸõƒpƒ^[ƒ“‚©‹æØ‚è‹L†‚ª•s³‚Å‚·"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: “¯‚¶–¼‘O‚̃tƒ@ƒCƒ‹‚ª‘¼‚̃oƒbƒtƒ@‚œǞ‚Ü‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: ƒIƒvƒVƒ‡ƒ“ '%s' ‚Íݒ肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../globals.h:1111
-msgid "E850: Invalid register name"
-msgstr "E850: –³Œø‚ȃŒƒWƒXƒ^–¼‚Å‚·"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ã‚܂ŌŸõ‚µ‚½‚̂ʼnº‚É–ß‚è‚Ü‚·"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "‰º‚܂ŌŸõ‚µ‚½‚Ì‚Åã‚É–ß‚è‚Ü‚·"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: ƒRƒƒ“‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: •s³‚È\\•¶—v‘f‚Å‚·"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: ”’l‚ª•K—v‚Å‚·"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "%d ƒy[ƒW"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "ˆóü‚·‚éƒeƒLƒXƒg‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "ˆóü’†: ƒy[ƒW %d (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " ƒRƒs[ %d (‘S %d ’†)"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "ˆóü‚µ‚Ü‚µ‚½: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "ˆóü‚ª’†Ž~‚³‚ê‚Ü‚µ‚½"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: PostScripto—̓tƒ@ƒCƒ‹‚Ì‘ž‚݃Gƒ‰[‚Å‚·"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: ƒtƒ@ƒCƒ‹ \"%s\" ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: PostScript‚ÌƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹ \"%s\" ‚ð“Çž‚߂܂¹‚ñ"
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ƒtƒ@ƒCƒ‹ \"%s\" ‚Í PostScript ƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ƒtƒ@ƒCƒ‹ \"%s\" ‚͑Ήž‚µ‚Ä‚¢‚È‚¢ PostScript ƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹‚Å‚·"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: ƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹ \"%s\" ‚̓o[ƒWƒ‡ƒ“‚ªˆÙ‚È‚è‚Ü‚·"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: ŒÝŠ·«‚Ì–³‚¢ƒ}ƒ‹ƒ`ƒoƒCƒgƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Æ•¶ŽšƒZƒbƒg‚Å‚·"
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: ƒ}ƒ‹ƒ`ƒoƒCƒgƒGƒ“ƒR[ƒfƒBƒ“ƒO‚Å‚Í printmbcharset ‚ð‹ó‚ɂł«‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr ""
-"E675: ƒ}ƒ‹ƒ`ƒoƒCƒg•¶Žš‚ðˆóü‚·‚邽‚߂̃fƒtƒHƒ‹ƒgƒtƒHƒ“ƒg‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: PostScripto—Í—p‚̃tƒ@ƒCƒ‹‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: ƒtƒ@ƒCƒ‹ \"%s\" ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: PostScript‚ÌƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹ \"prolog.ps\" ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: PostScript‚ÌƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹ \"cidfont.ps\" ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: PostScript‚ÌƒŠƒ\\[ƒXƒtƒ@ƒCƒ‹ \"%s.ps\" ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: ˆóüƒGƒ“ƒR[ƒh \"%s\" ‚Ö•ÏŠ·‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "ƒvƒŠƒ“ƒ^‚É‘—M’†..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: PostScriptƒtƒ@ƒCƒ‹‚̈óü‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "ˆóüƒWƒ‡ƒu‚ð‘—M‚µ‚Ü‚µ‚½."
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Vƒf[ƒ^ƒx[ƒX‚ð’ljÁ"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "ƒpƒ^[ƒ“‚̃NƒGƒŠ[‚ð’ljÁ"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "‚±‚̃ƒbƒZ[ƒW‚ð•\\ަ‚·‚é"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "Ú‘±‚ðI—¹‚·‚é"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "‘S‚Ä‚ÌÚ‘±‚ðĉŠú‰»‚·‚é"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Ú‘±‚ð•\\ަ‚·‚é"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Žg—p•û–@: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "‚±‚ÌcscopeƒRƒ}ƒ“ƒh‚Í•ªŠ„ƒEƒBƒ“ƒhƒE‚ł̓Tƒ|[ƒg‚³‚ê‚Ü‚¹‚ñ.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Žg—p–@: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ƒ^ƒO‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ƒGƒ‰[: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s ‚̓fƒBƒŒƒNƒgƒŠ‹y‚Ñ—LŒø‚Ècscope‚̃f[ƒ^ƒx[ƒX‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "cscopeƒf[ƒ^ƒx[ƒX %s ‚ð’ljÁ"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: cscope‚ÌÚ‘± %<PRId64> ‚ð“Çž‚Ý’†‚̃Gƒ‰[‚Å‚·"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: –¢’m‚ÌcscopeŒŸõŒ^‚Å‚·"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: cscopeƒpƒCƒv‚ð쬂ł«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: cscope‚Ì‹N“®€”õ(fork)‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:849
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection ‚Ö‚Ì setpgid ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection ‚ÌŽÀs‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: to_fp ‚Ì fdopen ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fr_fp ‚Ì fdopen ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: cscopeƒvƒƒZƒX‚ð‹N“®‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: cscopeÚ‘±‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: –³Œø‚È cscopequickfix ƒtƒ‰ƒO %c ‚Ì %c ‚Å‚·"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscopeƒNƒGƒŠ[ %s of %s ‚ÉŠY“–‚ª‚ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "cscopeƒRƒ}ƒ“ƒh:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (Žg—p–@: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: ‚±‚ÌŠÖ”‚ðŒÄ‚ñ‚Å‚¢‚éŠÖ”‚ð’T‚·\n"
-" d: ‚±‚ÌŠÖ”‚©‚çŒÄ‚ñ‚Å‚¢‚éŠÖ”‚ð’T‚·\n"
-" e: ‚±‚Ìegrepƒpƒ^[ƒ“‚ð’T‚·\n"
-" f: ‚±‚̃tƒ@ƒCƒ‹‚ð’T‚·\n"
-" g: ‚±‚Ì’è‹`‚ð’T‚·\n"
-" i: ‚±‚̃tƒ@ƒCƒ‹‚ð#include‚µ‚Ä‚¢‚éƒtƒ@ƒCƒ‹‚ð’T‚·\n"
-" s: ‚±‚ÌCƒVƒ“ƒ{ƒ‹‚ð’T‚·\n"
-" t: ‚±‚̃eƒLƒXƒg•¶Žš—ñ‚ð’T‚·\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: d•¡‚·‚écscopeƒf[ƒ^ƒx[ƒX‚͒ljÁ‚³‚ê‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: cscopeÚ‘± %s ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "cscopeÚ‘± %s ‚ª•‚¶‚ç‚ê‚Ü‚µ‚½"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches ‚Å’v–½“I‚ȃGƒ‰[‚Å‚·"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Cscope ƒ^ƒO: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # s”Ô†"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ƒtƒ@ƒCƒ‹–¼ / •¶–¬ / s\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: cscopeƒGƒ‰[: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "‘S‚Ä‚Ìcscopeƒf[ƒ^ƒx[ƒX‚ðƒŠƒZƒbƒg‚µ‚Ü‚·"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "cscopeÚ‘±‚ª‚ ‚è‚Ü‚¹‚ñ\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid ƒf[ƒ^ƒx[ƒX–¼ prepend ƒpƒX\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "–¢’m‚̃IƒvƒVƒ‡ƒ“ˆø”‚Å‚·"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "•ÒWˆø”‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "ˆø”‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "ƒIƒvƒVƒ‡ƒ“ˆø”‚ÌŒã‚ɃSƒ~‚ª‚ ‚è‚Ü‚·"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "\"+command\", \"-c command\", \"--cmd command\" ‚̈ø”‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "–³Œø‚Ȉø”‚Å‚·: "
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d ŒÂ‚̃tƒ@ƒCƒ‹‚ª•ÒW‚ðT‚¦‚Ä‚¢‚Ü‚·\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "ƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ðĂъJ‚¢‚Ă݂܂·: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "“Çž—p‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "ƒXƒNƒŠƒvƒgo—Í—p‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: Œx: ’[––‚Ö‚Ìo—͂ł͂ ‚è‚Ü‚¹‚ñ\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: Œx: ’[––‚©‚ç‚Ì“ü—͂ł͂ ‚è‚Ü‚¹‚ñ\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "vimrc‘O‚̃Rƒ}ƒ“ƒhƒ‰ƒCƒ“"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: \"%s\"‚©‚ç“Çž‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"‚æ‚èÚׂÈî•ñ‚Í: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[ƒtƒ@ƒCƒ‹..] ‚ ‚éƒtƒ@ƒCƒ‹‚ð•ÒW‚·‚é"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- •W€“ü—Í‚©‚çƒeƒLƒXƒg‚ð“Çž‚Þ"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t ƒ^ƒO ƒ^ƒO‚ª’è‹`‚³‚ꂽ‚Æ‚±‚ë‚©‚ç•ÒW‚·‚é"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] ʼn‚̃Gƒ‰[‚Å•ÒW‚·‚é"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Žg—p–@:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [ˆø”] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" ‚à‚µ‚­‚Í:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"ˆø”:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\t‚±‚Ì‚ ‚Ƃɂ̓tƒ@ƒCƒ‹–¼‚¾‚¯"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tƒƒCƒ‹ƒhƒJ[ƒh‚ð“WŠJ‚µ‚È‚¢"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tViƒ‚[ƒh (\"vi\" ‚Æ“¯‚¶)"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tExƒ‚[ƒh (\"ex\" ‚Æ“¯‚¶)"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\t‰ü—ÇExƒ‚[ƒh"
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tƒTƒCƒŒƒ“ƒg(ƒoƒbƒ`)ƒ‚[ƒh (\"ex\" ê—p)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\t·•ªƒ‚[ƒh (\"vidiff\" ‚Æ“¯‚¶)"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tƒC[ƒW[ƒ‚[ƒh (\"evim\" ‚Æ“¯‚¶, ƒ‚[ƒh–³)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\t“Çžê—pƒ‚[ƒh (\"view\" ‚Æ“¯‚¶)"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\t§ŒÀƒ‚[ƒh (\"rvim\" ‚Æ“¯‚¶)"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\t•ÏX (ƒtƒ@ƒCƒ‹•Û‘¶Žž) ‚ð‚Å‚«‚È‚¢‚悤‚É‚·‚é"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tƒeƒLƒXƒg‚Ì•ÒW‚ðs‚È‚¦‚È‚¢‚悤‚É‚·‚é"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tƒoƒCƒiƒŠƒ‚[ƒh"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLispƒ‚[ƒh"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tViŒÝŠ·ƒ‚[ƒh: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tVi”ñŒÝŠ·ƒ‚[ƒh: 'nocompatible"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][fname]\t\tƒƒOo—ÍÝ’è [ƒŒƒxƒ‹ N] [ƒƒOƒtƒ@ƒCƒ‹–¼ fname]"
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tƒfƒoƒbƒOƒ‚[ƒh"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ðŽg—p‚¹‚¸ƒƒ‚ƒŠ‚¾‚¯"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ð—ñ‹“‚µI—¹"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (ƒtƒ@ƒCƒ‹–¼)\tƒNƒ‰ƒbƒVƒ…‚µ‚½ƒZƒbƒVƒ‡ƒ“‚𕜋A"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\t-r‚Æ“¯‚¶"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tƒAƒ‰ƒrƒAŒêƒ‚[ƒh‚Å‹N“®‚·‚é"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tƒwƒuƒ‰ƒCŒêƒ‚[ƒh‚Å‹N“®‚·‚é"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tƒyƒ‹ƒVƒAŒêƒ‚[ƒh‚Å‹N“®‚·‚é"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\t’[––‚ð <terminal> ‚ÉÝ’è‚·‚é"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\t.vimrc‚Ì‘ã‚í‚è‚É <vimrc> ‚ðŽg‚¤"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tƒvƒ‰ƒOƒCƒ“ƒXƒNƒŠƒvƒg‚ðƒ[ƒh‚µ‚È‚¢"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tN ŒÂƒ^ƒuƒy[ƒW‚ðŠJ‚­(È—ª’l: ƒtƒ@ƒCƒ‹‚ɂ‚«1ŒÂ)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tN ŒÂƒEƒBƒ“ƒhƒE‚ðŠJ‚­(È—ª’l: ƒtƒ@ƒCƒ‹‚ɂ‚«1ŒÂ)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\t-o‚Æ“¯‚¶‚¾‚ª‚’¼•ªŠ„"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tƒtƒ@ƒCƒ‹‚ÌŌォ‚ç‚Í‚¶‚ß‚é"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\t<lnum> s‚©‚ç‚Í‚¶‚ß‚é"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\tvimrc‚ðƒ[ƒh‚·‚é‘O‚É <command> ‚ðŽÀs‚·‚é"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\tʼn‚̃tƒ@ƒCƒ‹‚ðƒ[ƒhŒã <command> ‚ðŽÀs‚·‚é"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\tʼn‚̃tƒ@ƒCƒ‹‚ðƒ[ƒhŒãƒtƒ@ƒCƒ‹ <session> ‚ðŽæž‚Þ"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\tƒtƒ@ƒCƒ‹ <scriptin> ‚©‚çƒm[ƒ}ƒ‹ƒRƒ}ƒ“ƒh‚ð“Çž‚Þ"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\t“ü—Í‚µ‚½‘SƒRƒ}ƒ“ƒh‚ðƒtƒ@ƒCƒ‹ <scriptout> ‚ɒljÁ‚·‚é"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\t“ü—Í‚µ‚½‘SƒRƒ}ƒ“ƒh‚ðƒtƒ@ƒCƒ‹ <scriptout> ‚ɕۑ¶‚·‚é"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr "--startuptime <file>\t‹N“®‚É‚©‚©‚Á‚½ŽžŠÔ‚ÌÚׂð <file> ‚Öo—Í‚·‚é"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\t.viminfo‚Ì‘ã‚í‚è‚É <viminfo> ‚ðŽg‚¤"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h or --help\tƒwƒ‹ƒv(‚±‚̃ƒbƒZ[ƒW)‚ð•\\ަ‚µI—¹‚·‚é"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tƒo[ƒWƒ‡ƒ“î•ñ‚ð•\\ަ‚µI—¹‚·‚é"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "ƒ}[ƒN‚ªÝ’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: \"%s\" ‚ÉŠY“–‚·‚éƒ}[ƒN‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"mark s —ñ ƒtƒ@ƒCƒ‹/ƒeƒLƒXƒg"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" jump s —ñ ƒtƒ@ƒCƒ‹/ƒeƒLƒXƒg"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"•ÏX s —ñ ƒeƒLƒXƒg"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# ƒtƒ@ƒCƒ‹ƒ}[ƒN:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# ƒWƒƒƒ“ƒvƒŠƒXƒg (V‚µ‚¢‚à‚Ì‚ªæ):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# ƒtƒ@ƒCƒ‹“àƒ}[ƒN‚Ì—š—ð (V‚µ‚¢‚à‚Ì‚©‚çŒÃ‚¢‚à‚Ì):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "'>' ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: ƒuƒƒbƒN‚ªƒƒbƒN‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: ƒXƒƒbƒvƒtƒ@ƒCƒ‹“ÇžŽž‚ɃV[ƒNƒGƒ‰[‚Å‚·"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚̓Ǟ‚݃Gƒ‰[‚Å‚·"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‘ž‚ÝŽž‚ɃV[ƒNƒGƒ‰[‚Å‚·"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚Ì‘ž‚݃Gƒ‰[‚Å‚·"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ªŠù‚É‘¶Ý‚µ‚Ü‚· (symlink‚É‚æ‚éUŒ‚?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: ƒuƒƒbƒN 0 ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: ƒuƒƒbƒN 1 ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: ƒuƒƒbƒN 2 ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: ‚¨‚Á‚Æ, ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ªŽ¸‚í‚ê‚Ü‚µ‚½!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚Ì–¼‘O‚ð•Ï‚¦‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: \"%s\" ‚̃Xƒƒbƒvƒtƒ@ƒCƒ‹‚ðŠJ‚¯‚È‚¢‚Ì‚ÅƒŠƒJƒoƒŠ‚Í•s‰Â”\\‚Å‚·"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): ƒuƒƒbƒN 0 ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: %s ‚ɂ̓Xƒƒbƒvƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "Žg—p‚·‚éƒXƒƒbƒvƒtƒ@ƒCƒ‹‚̔Ԇ‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢(0 ‚ÅI—¹): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: %s ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "ƒuƒƒbƒN 0 ‚ð“Çž‚߂܂¹‚ñ "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"‹°‚ç‚­•ÏX‚ª‚³‚ê‚Ä‚¢‚È‚¢‚©Vim‚ªƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ðXV‚µ‚Ä‚¢‚Ü‚¹‚ñ."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " Vim‚Ì‚±‚̃o[ƒWƒ‡ƒ“‚ł͎g—p‚Å‚«‚Ü‚¹‚ñ.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "Vim‚̃o[ƒWƒ‡ƒ“3.0‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢.\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s ‚ÍVim‚̃Xƒƒbƒvƒtƒ@ƒCƒ‹‚ł͂Ȃ¢‚悤‚Å‚·"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " ‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ł͎g—p‚Å‚«‚Ü‚¹‚ñ.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "‚±‚̃tƒ@ƒCƒ‹‚ÍŽŸ‚ÌꊂÅì‚ç‚ê‚Ü‚µ‚½ "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"‚à‚µ‚­‚̓tƒ@ƒCƒ‹‚ª‘¹‚µ‚Ä‚¢‚Ü‚·."
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr " ‚Í‘¹‚µ‚Ä‚¢‚Ü‚· (ƒy[ƒWƒTƒCƒY‚ªÅ¬’l‚ð‰º‰ñ‚Á‚Ä‚¢‚Ü‚·).\n"
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹ \"%s\" ‚ðŽg—p’†"
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "Œ´–{ƒtƒ@ƒCƒ‹ \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: Œx: Œ´–{ƒtƒ@ƒCƒ‹‚ª•ÏX‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: %s ‚©‚çƒuƒƒbƒN 1 ‚ð“Çž‚߂܂¹‚ñ"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???‘½‚­‚Ìs‚ªŽ¸‚í‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???s”‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???ƒuƒƒbƒN‚ª‹ó‚Å‚·"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???s‚ªŽ¸‚í‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ƒuƒƒbƒN 1 ‚ÌID‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·(%s ‚ª.swpƒtƒ@ƒCƒ‹‚łȂ¢?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???ƒuƒƒbƒN‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ‚±‚±‚©‚ç ???END ‚܂łÌs‚ª”j‰ó‚³‚ê‚Ä‚¢‚邿‚¤‚Å‚·"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ‚±‚±‚©‚ç ???END ‚܂łÌs‚ª‘}“ü‚©íœ‚³‚ꂽ‚悤‚Å‚·"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???END"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: ƒŠƒJƒoƒŠ‚ªŠ„ž‚Ü‚ê‚Ü‚µ‚½"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr ""
-"E312: ƒŠƒJƒoƒŠ‚ÌÅ’†‚ɃGƒ‰[‚ªŒŸo‚³‚ê‚Ü‚µ‚½; ???‚ÅŽn‚Ü‚és‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "Ú×‚Í \":help E312\" ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "ƒŠƒJƒoƒŠ‚ªI—¹‚µ‚Ü‚µ‚½. ‘S‚Ä‚ª³‚µ‚¢‚©ƒ`ƒFƒbƒN‚µ‚Ä‚­‚¾‚³‚¢."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(•ÏX‚ðƒ`ƒFƒbƒN‚·‚邽‚ß‚É, ‚±‚̃tƒ@ƒCƒ‹‚ð•ʂ̖¼‘O‚ŕۑ¶‚µ‚½ã‚Å\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "Œ´–{ƒtƒ@ƒCƒ‹‚Æ‚Ì diff ‚ðŽÀs‚·‚邯—Ç‚¢‚Å‚µ‚傤)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "•œŒ³Š®—¹. ƒoƒbƒtƒ@‚Ì“à—e‚̓tƒ@ƒCƒ‹‚Æ“¯‚¶‚ɂȂè‚Ü‚µ‚½."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"‚»‚ê‚©‚ç.swpƒtƒ@ƒCƒ‹‚ð휂µ‚Ä‚­‚¾‚³‚¢\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ª•¡”Œ©‚‚©‚è‚Ü‚µ‚½:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " Œ»Ý‚̃fƒBƒŒƒNƒgƒŠ:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " ‚ ‚é–¼‘O‚ðŽg—p’†:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " ƒfƒBƒŒƒNƒgƒŠ "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ‚È‚µ --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " Š—LŽÒ: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " “ú•t: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " “ú•t: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [from Vim version 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [Vim‚̃Xƒƒbƒvƒtƒ@ƒCƒ‹‚ł͂Ȃ¢‚悤‚Å‚·]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " ƒtƒ@ƒCƒ‹–¼: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" •ÏXó‘Ô: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "‚ ‚è"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "‚È‚µ"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" ƒ†[ƒU–¼: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " ƒzƒXƒg–¼: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" ƒzƒXƒg–¼: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ƒvƒƒZƒXID: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (‚Ü‚¾ŽÀs’†)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [‚±‚̃Rƒ“ƒsƒ…[ƒ^‚ł͎g—p‚Å‚«‚Ü‚¹‚ñ]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [“Çž‚߂܂¹‚ñ]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [ŠJ‚¯‚Ü‚¹‚ñ]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ª–³‚¢‚̂ňێ‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "ƒtƒ@ƒCƒ‹‚ªˆÛŽ‚³‚ê‚Ü‚·"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: ˆÛŽ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: –³Œø‚Èlnum‚Å‚·: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: s %<PRId64> ‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: ƒ|ƒCƒ“ƒ^ƒuƒƒbƒN‚ÌID‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚· 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx ‚Í 0 ‚Å‚ ‚é‚ׂ«‚Å‚·"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: XV‚³‚ꂽƒuƒƒbƒN‚ª‘½‰ß‚¬‚é‚©‚à?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: ƒ|ƒCƒ“ƒ^ƒuƒƒbƒN‚ÌID‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚· 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "ƒuƒƒbƒN 1 ‚ÍÁ‚³‚ꂽ?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: s %<PRId64> ‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: ƒ|ƒCƒ“ƒ^ƒuƒƒbƒN‚ÌID‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count ‚ªƒ[ƒ‚Å‚·"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: s”Ô†‚ª”͈͊O‚Å‚·: %<PRId64> ’´‚¦‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: ƒuƒƒbƒN %<PRId64> ‚ÌsƒJƒEƒ“ƒg‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "ƒXƒ^ƒbƒNƒTƒCƒY‚ª‘‚¦‚Ü‚·"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: ƒ|ƒCƒ“ƒ^ƒuƒƒbƒN‚ÌID‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚· 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: \"%s\" ‚̃Vƒ“ƒ{ƒŠƒbƒNƒŠƒ“ƒN‚ªƒ‹[ƒv‚ɂȂÁ‚Ä‚¢‚Ü‚·"
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ’ˆÓ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"ŽŸ‚Ì–¼‘O‚ŃXƒƒbƒvƒtƒ@ƒCƒ‹‚ðŒ©‚Â‚¯‚Ü‚µ‚½ \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "ŽŸ‚̃tƒ@ƒCƒ‹‚ðŠJ‚¢‚Ä‚¢‚éÅ’† \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚æ‚è‚àV‚µ‚¢‚Å‚·!\n"
-
-#: ../memline.c:3244
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) •ʂ̃vƒƒOƒ‰ƒ€‚ª“¯‚¶ƒtƒ@ƒCƒ‹‚ð•ÒW‚µ‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ.\n"
-" ‚±‚ÌꇂɂÍ, •ÏX‚ð‚µ‚½Û‚ÉÅI“I‚É, “¯‚¶ƒtƒ@ƒCƒ‹‚̈قȂé\n"
-" 2‚‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ª‚Å‚«‚Ä‚µ‚Ü‚¤‚±‚ƂɒˆÓ‚µ‚Ä‚­‚¾‚³‚¢."
-
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr " I—¹‚·‚é‚©, ’ˆÓ‚µ‚È‚ª‚瑱‚¯‚Ä‚­‚¾‚³‚¢.\n"
-
-#: ../memline.c:3246
-msgid "(2) An edit session for this file crashed.\n"
-msgstr "(2) ‚±‚̃tƒ@ƒCƒ‹‚Ì•ÒWƒZƒbƒVƒ‡ƒ“‚ªƒNƒ‰ƒbƒVƒ…‚µ‚½.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " ‚±‚Ìê‡‚É‚Í \":recover\" ‚© \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" ‚ðŽg—p‚µ‚Ä•ÏX‚ðƒŠƒJƒo[‚µ‚Ü‚·(\":help recovery\" ‚ðŽQÆ).\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Šù‚É‚±‚ê‚ðs‚È‚Á‚½‚̂Ȃç‚Î, ƒXƒƒbƒvƒtƒ@ƒCƒ‹ \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" ‚ðÁ‚¹‚΂±‚̃ƒbƒZ[ƒW‚ð‰ñ”ð‚Å‚«‚Ü‚·.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹ \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ‚ªŠù‚É‚ ‚è‚Ü‚·!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - ’ˆÓ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ªŠù‚É‘¶Ý‚µ‚Ü‚·!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"“Çžê—p‚ÅŠJ‚­(&O)\n"
-"‚Ƃɂ©‚­•ÒW‚·‚é(&E)\n"
-"•œŠˆ‚³‚¹‚é(&R)\n"
-"I—¹‚·‚é(&Q)\n"
-"’†Ž~‚·‚é(&A)"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"“Çžê—p‚ÅŠJ‚­(&O)\n"
-"‚Ƃɂ©‚­•ÒW‚·‚é(&E)\n"
-"•œŠˆ‚³‚¹‚é(&R)\n"
-"휂·‚é(&D)\n"
-"I—¹‚·‚é(&Q)\n"
-"’†Ž~‚·‚é(&A)"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚ª‘½”Œ©‚‚©‚è‚Ü‚µ‚½"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: ƒƒ‚ƒŠ‚ª‘«‚è‚Ü‚¹‚ñ! (%<PRIu64> ƒoƒCƒg‚ðŠ„“–—v‹)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ƒƒjƒ…[ƒAƒCƒeƒ€‚̃pƒX‚Ì•”•ª‚ªƒTƒuƒƒjƒ…[‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: ƒƒjƒ…[‚Í‘¼‚̃‚[ƒh‚É‚¾‚¯‚ ‚è‚Ü‚·"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: \"%s\" ‚Æ‚¢‚¤ƒƒjƒ…[‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: ƒƒjƒ…[–¼‚ª‹ó‚Å‚·"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ƒƒjƒ…[ƒpƒX‚̓Tƒuƒƒjƒ…[‚ð¶‚¶‚é‚ׂ«‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ƒƒjƒ…[ƒo[‚ɂ͒¼Úƒƒjƒ…[ƒAƒCƒeƒ€‚ð’ljÁ‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ‹æØ‚è‚̓ƒjƒ…[ƒpƒX‚̈ꕔ‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- ƒƒjƒ…[ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ƒƒjƒ…[ƒpƒX‚̓ƒjƒ…[ƒAƒCƒeƒ€‚ð¶‚¶‚È‚¯‚ê‚΂¢‚¯‚Ü‚¹‚ñ"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: ƒƒjƒ…[‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ‚ɂ̓ƒjƒ…[‚ª’è‹`‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ƒƒjƒ…[ƒpƒX‚̓Tƒuƒƒjƒ…[‚ð¶‚¶‚È‚¯‚ê‚΂¢‚¯‚Ü‚¹‚ñ"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: ƒƒjƒ…[‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ - ƒƒjƒ…[–¼‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "%s ‚̈—’†‚ɃGƒ‰[‚ªŒŸo‚³‚ê‚Ü‚µ‚½:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "s %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: –³Œø‚ȃŒƒWƒXƒ^–¼: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "“ú–{ŒêƒƒbƒZ[ƒW–|–ó/ŠÄC: ‘º‰ª ‘¾˜Y <koron.kaoriya@gmail.com>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Š„ž‚Ý: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "‘±‚¯‚é‚É‚ÍENTER‚ð‰Ÿ‚·‚©ƒRƒ}ƒ“ƒh‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s s %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- Œp‘± --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: ‰æ–Ê/ƒy[ƒW/s ‰º, b/u/k: ã, q: I—¹ "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Ž¿–â"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"‚Í‚¢(&Y)\n"
-"‚¢‚¢‚¦(&N)"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"‚Í‚¢(&Y)\n"
-"‚¢‚¢‚¦(&N)\n"
-"ƒLƒƒƒ“ƒZƒ‹(&C)"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"‚Í‚¢(&Y)\n"
-"‚¢‚¢‚¦(&N)\n"
-"‘S‚ĕۑ¶(&A)\n"
-"‘S‚Ä•úŠü(&D)\n"
-"ƒLƒƒƒ“ƒZƒ‹(&C)"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf() ‚̈ø”‚ª•s\\•ª‚Å‚·"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: printf() ‚̈ø”‚ɂ͕‚“®­”“_”‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: printf() ‚̈ø”‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: Œx: “Çžê—pƒtƒ@ƒCƒ‹‚ð•ÏX‚µ‚Ü‚·"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr ""
-"”Ô†‚Æ<Enter>‚ð“ü—Í‚·‚é‚©ƒ}ƒEƒX‚ŃNƒŠƒbƒN‚µ‚Ä‚­‚¾‚³‚¢ (‹ó‚ŃLƒƒƒ“ƒZƒ‹): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "”Ô†‚Æ<Enter>‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢ (‹ó‚ŃLƒƒƒ“ƒZƒ‹): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "1 s ’ljÁ‚µ‚Ü‚µ‚½"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "1 s 휂µ‚Ü‚µ‚½"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "%<PRId64> s ’ljÁ‚µ‚Ü‚µ‚½"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "%<PRId64> s 휂µ‚Ü‚µ‚½"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (Š„ž‚Ü‚ê‚Ü‚µ‚½)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "ƒr[ƒb!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "ŽÀs‚Ì‚½‚߂ɃVƒFƒ‹‚ðŒÄo‚µ’†: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: ƒJ[ƒ\\ƒ‹‚̈ʒu‚ɂ͎¯•ÊŽq‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' ƒIƒvƒVƒ‡ƒ“‚ª‹ó‚Å‚·"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "Œx: Žg—p‚µ‚Ä‚¢‚é’[––‚̓nƒCƒ‰ƒCƒg‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: ƒJ[ƒ\\ƒ‹‚̈ʒu‚ɂ͕¶Žš—ñ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Œ»Ý‚Ì 'foldmethod' ‚Å‚ÍÜô‚Ý‚ðÁ‹Ž‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: •ÏXƒŠƒXƒg‚ª‹ó‚Å‚·"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: •ÏXƒŠƒXƒg‚Ìæ“ª"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: •ÏXƒŠƒXƒg‚Ì––”ö"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "Vim‚ðI—¹‚·‚é‚É‚Í :quit<Enter> ‚Æ“ü—Í‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 s‚ª %s ‚Å 1 ‰ñˆ—‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 s‚ª %s ‚Å %d ‰ñˆ—‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> s‚ª %s ‚Å 1 ‰ñˆ—‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> s‚ª %s ‚Å %d ‰ñˆ—‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "%<PRId64> s‚ªƒCƒ“ƒfƒ“ƒg‚³‚ê‚Ü‚·... "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "1 s‚ðƒCƒ“ƒfƒ“ƒg‚µ‚Ü‚µ‚½ "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "%<PRId64> s‚ðƒCƒ“ƒfƒ“ƒg‚µ‚Ü‚µ‚½ "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: ‚Ü‚¾ƒŒƒWƒXƒ^‚ðŽg—p‚µ‚Ä‚¢‚Ü‚¹‚ñ"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "ƒ„ƒ“ƒN‚Å‚«‚Ü‚¹‚ñ; ‚Ƃɂ©‚­Á‹Ž"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "1 s‚ª•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "%<PRId64> s‚ª•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "1 s‚̃uƒƒbƒN‚ªƒ„ƒ“ƒN‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "1 s‚ªƒ„ƒ“ƒN‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "%<PRId64> s‚̃uƒƒbƒN‚ªƒ„ƒ“ƒN‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "%<PRId64> s‚ªƒ„ƒ“ƒN‚³‚ê‚Ü‚µ‚½"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: ƒŒƒWƒXƒ^ %s ‚ɂ͉½‚à‚ ‚è‚Ü‚¹‚ñ"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- ƒŒƒWƒXƒ^ ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "•s³‚ȃŒƒWƒXƒ^–¼"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# ƒŒƒWƒXƒ^:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: –¢’m‚̃ŒƒWƒXƒ^Œ^ %d ‚Å‚·"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> —ñ; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"‘I‘ð %s%<PRId64> / %<PRId64> s; %<PRId64> / %<PRId64> ’PŒê; %<PRId64> / "
-"%<PRId64> ƒoƒCƒg"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"‘I‘ð %s%<PRId64> / %<PRId64> s; %<PRId64> / %<PRId64> ’PŒê; %<PRId64> / "
-"%<PRId64> •¶Žš; %<PRId64> / %<PRId64> ƒoƒCƒg"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"—ñ %s / %s; s %<PRId64> of %<PRId64>; ’PŒê %<PRId64> / %<PRId64>; ƒoƒCƒg "
-"%<PRId64> / %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"—ñ %s / %s; s %<PRId64> / %<PRId64>; ’PŒê %<PRId64> / %<PRId64>; •¶Žš "
-"%<PRId64> / %<PRId64>; ƒoƒCƒg %<PRId64> of %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> for BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=%N ƒy[ƒW"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "Vim ‚ðŽg‚Á‚Ä‚­‚ê‚Ä‚ ‚肪‚Æ‚¤"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: –¢’m‚̃IƒvƒVƒ‡ƒ“‚Å‚·"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: ƒIƒvƒVƒ‡ƒ“‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: modeline ‚ł͋–‰Â‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr "E846: ƒL[ƒR[ƒh‚ªÝ’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: = ‚ÌŒã‚É‚Í”Žš‚ª•K—v‚Å‚·"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: termcap “à‚ÉŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: •s³‚È•¶Žš‚Å‚· <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: 'term' ‚ɂ͋󕶎š—ñ‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' ‚Æ 'patchmode' ‚ª“¯‚¶‚Å‚·"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: 'listchars'‚Ì’l‚É–µ‚‚ª‚ ‚è‚Ü‚·"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: 'fillchars'‚Ì’l‚É–µ‚‚ª‚ ‚è‚Ü‚·"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: ƒRƒƒ“‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: •¶Žš—ñ‚Ì’·‚³‚ªƒ[ƒ‚Å‚·"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> ‚ÌŒã‚É”Žš‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: ƒJƒ“ƒ}‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: ' ‚Ì’l‚ðŽw’肵‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: •\\ަ‚Å‚«‚È‚¢•¶Žš‚©ƒƒCƒh•¶Žš‚ðŠÜ‚ñ‚Å‚¢‚Ü‚·"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚·"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: ƒJƒ“ƒ}‚ª•K—v‚Å‚·"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ‚Í‹ó‚Å‚ ‚é‚© %s ‚ðŠÜ‚Þ•K—v‚ª‚ ‚è‚Ü‚·"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: Ž®‚ªI—¹‚µ‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: —v‘f‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: ƒOƒ‹[ƒv‚ª’Þ‡‚¢‚Ü‚¹‚ñ"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: ƒvƒŒƒrƒ…[ƒEƒBƒ“ƒhƒE‚ªŠù‚É‘¶Ý‚µ‚Ü‚·"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr ""
-"W17: ƒAƒ‰ƒrƒA•¶Žš‚É‚ÍUTF-8‚ª•K—v‚Ȃ̂Å, ':set encoding=utf-8' ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Å’á %d ‚Ìs”‚ª•K—v‚Å‚·"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Å’á %d ‚̃Jƒ‰ƒ€•‚ª•K—v‚Å‚·"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: –¢’m‚̃IƒvƒVƒ‡ƒ“‚Å‚·: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: ”Žš‚ª•K—v‚Å‚·: &%s = '%s'"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- ’[––ƒR[ƒh ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- ƒOƒ[ƒoƒ‹ƒIƒvƒVƒ‡ƒ“’l ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- ƒ[ƒJƒ‹ƒIƒvƒVƒ‡ƒ“’l ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- ƒIƒvƒVƒ‡ƒ“ ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp ƒGƒ‰["
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': %s ‚ɑΉž‚·‚é•¶Žš‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ƒZƒ~ƒRƒƒ“‚ÌŒã‚É—]•ª‚È•¶Žš‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"ƒVƒFƒ‹‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ "
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"ƒVƒFƒ‹‚ª’l‚ð•Ô‚µ‚Ü‚µ‚½ "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"ƒZƒLƒ…ƒŠƒeƒBƒRƒ“ƒeƒLƒXƒg‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ "
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"ƒZƒLƒ…ƒŠƒeƒBƒRƒ“ƒeƒLƒXƒg‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ "
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: path‚É‚Í \"%s\" ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚É %%%c ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚É—\\Šú‚¹‚Ê %%%c ‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚É ] ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚Å‚Í %%%c ‚̓Tƒ|[ƒg‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚Ì‘O’u‚É–³Œø‚È %%%c ‚ª‚ ‚è‚Ü‚·"
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: ƒtƒH[ƒ}ƒbƒg•¶Žš—ñ‚É–³Œø‚È %%%c ‚ª‚ ‚è‚Ü‚·"
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' ‚Ƀpƒ^[ƒ“‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: ƒfƒBƒŒƒNƒgƒŠ–¼‚ª–³‚¢‚©‹ó‚Å‚·"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: —v‘f‚ª‚à‚¤‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d of %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (s‚ªíœ‚³‚ê‚Ü‚µ‚½)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: quickfix ƒXƒ^ƒbƒN‚Ì––”ö‚Å‚·"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: quickfix ƒXƒ^ƒbƒN‚Ìæ“ª‚Å‚·"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "ƒGƒ‰[ˆê—— %d of %d; %d ŒÂƒGƒ‰["
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: 'buftype' ƒIƒvƒVƒ‡ƒ“‚ªÝ’肳‚ê‚Ä‚¢‚é‚̂őž‚݂܂¹‚ñ"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: ƒtƒ@ƒCƒ‹–¼‚ª–³‚¢‚©–³Œø‚ȃpƒ^[ƒ“‚Å‚·"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "ƒtƒ@ƒCƒ‹ \"%s\" ‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: ƒoƒbƒtƒ@‚͓ǂݞ‚Ü‚ê‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: •¶Žš—ñ‚©ƒŠƒXƒg‚ª•K—v‚Å‚·"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: –³Œø‚È€–Ú‚Å‚·: %s%%[]"
-
-#
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ ‚ÌŒã‚É ] ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: %s%%( ‚ª’ނ臂Á‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: %s( ‚ª’ނ臂Á‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: %s) ‚ª’ނ臂Á‚Ä‚¢‚Ü‚¹‚ñ"
-
-#
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( ‚̓RƒR‚ł͋–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 ‚»‚Ì‘¼‚̓RƒR‚ł͋–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ ‚ÌŒã‚É ] ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] ‚ª‹ó‚Å‚·"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: ƒpƒ^[ƒ“‚ª’·‰ß‚¬‚Ü‚·"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: \\z( ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: %s( ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: \\z( ‚ª’ނ臂Á‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: •¡ŽG‚È %s{...} ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61:%s* ‚ª“ü‚êŽq‚ɂȂÁ‚Ä‚¢‚Ü‚·"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62:%s%c ‚ª“ü‚êŽq‚ɂȂÁ‚Ä‚¢‚Ü‚·"
-
-#
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: \\_ ‚Ì–³Œø‚ÈŽg—p•û–@‚Å‚·"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64:%s%c ‚ÌŒã‚É‚È‚É‚à‚ ‚è‚Ü‚¹‚ñ"
-
-#
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: •s³‚ÈŒã•ûŽQƂł·"
-
-#
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚µ‚½"
-
-#
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚µ‚½"
-
-#
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% ‚ÌŒã‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚µ‚½"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...} “à‚É•¶–@ƒGƒ‰[‚ª‚ ‚è‚Ü‚·"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "ŠO•”‚Ì•”•ªŠY“–:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-"E864: \\%#= ‚É‚Í 0, 1 ‚à‚µ‚­‚Í 2 ‚݂̂ª‘±‚¯‚ç‚ê‚Ü‚·B³‹K•\\Œ»ƒGƒ“ƒWƒ“‚ÍŽ©“®‘I"
-"‘ð‚³‚ê‚Ü‚·B"
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (NFA) Šú‘Ò‚æ‚è‘‚­³‹K•\\Œ»‚ÌI’[‚É“ž’B‚µ‚Ü‚µ‚½"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (NFA ³‹K•\\Œ») ˆÊ’u‚ªŒë‚Á‚Ä‚¢‚Ü‚·: %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (NFA) –¢’m‚̃IƒyƒŒ[ƒ^‚Å‚·: '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) –¢’m‚̃IƒyƒŒ[ƒ^‚Å‚·: '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (NFA) –¢’m‚̃IƒyƒŒ[ƒ^‚Å‚·: '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr "E870: (NFA ³‹K•\\Œ») ŒJ‚è•Ô‚µ‚̧ŒÀ‰ñ”‚ð“Çž’†‚ɃGƒ‰["
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr "E871: (NFA ³‹K•\\Œ») ŒJ‚è•Ô‚µ ‚ÌŒã‚É ŒJ‚è•Ô‚µ ‚͂ł«‚Ü‚¹‚ñ!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (NFA ³‹K•\\Œ») '(' ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (NFA ³‹K•\\Œ») \\z( ‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (NFA ³‹K•\\Œ») I’[‹L†‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (NFA) ƒXƒ^ƒbƒN‚ðƒ|ƒbƒv‚Å‚«‚Ü‚¹‚ñ!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (NFA ³‹K•\\Œ») (Œã’u•¶Žš—ñ‚ðNFA‚ɕϊ·’†‚É) ƒXƒ^ƒbƒN‚ÉŽc‚³‚ꂽƒXƒe[ƒg‚ª"
-"‘½‰ß‚¬‚Ü‚·"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (NFA ³‹K•\\Œ») NFA‘S‘Ì‚ð•Û‘¶‚·‚é‚ɂ͋󂫃Xƒy[ƒX‚ª‘«‚è‚Ü‚¹‚ñ"
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"NFA³‹K•\\Œ»ƒGƒ“ƒWƒ“—p‚̃ƒOƒtƒ@ƒCƒ‹‚𑞗p‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñBƒƒO‚Í•W€o—Í‚É"
-"o—Í‚µ‚Ü‚·B"
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(NFA) ƒƒOƒtƒ@ƒCƒ‹ %s ‚ðŠJ‚¯‚Ü‚¹‚ñ!"
-
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "NFA³‹K•\\Œ»ƒGƒ“ƒWƒ“—p‚̃ƒOƒtƒ@ƒCƒ‹‚𑞗p‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñB"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " ‰¼‘z’uŠ·"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ’uŠ·"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ”½“]"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ‘}“ü"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (‘}“ü)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (’uŠ·)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (‰¼‘z’uŠ·)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " ƒwƒuƒ‰ƒC"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " ƒAƒ‰ƒrƒA"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (Œ¾Œê)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (“\\‚è•t‚¯)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ƒrƒWƒ…ƒAƒ‹"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ƒrƒWƒ…ƒAƒ‹ s"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ƒrƒWƒ…ƒAƒ‹ ‹éŒ`"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ƒZƒŒƒNƒg"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " sŽwŒü‘I‘ð"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ‹éŒ`‘I‘ð"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "‹L˜^’†"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: –³Œø‚ÈŒŸõ•¶Žš—ñ‚Å‚·: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ã‚܂ŌŸõ‚µ‚Ü‚µ‚½‚ªŠY“–‰ÓŠ‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ‰º‚܂ŌŸõ‚µ‚Ü‚µ‚½‚ªŠY“–‰ÓŠ‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ';' ‚Ì‚ ‚Æ‚É‚Í '?' ‚© '/' ‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (‘O‚É—ñ‹“‚µ‚½ŠY“–‰ÓŠ‚ðŠÜ‚Þ)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- ƒCƒ“ƒNƒ‹[ƒh‚³‚ꂽƒtƒ@ƒCƒ‹ "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "Œ©‚‚©‚è‚Ü‚¹‚ñ "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "ƒpƒX‚É ----\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Šù‚É—ñ‹“)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " Œ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "ƒCƒ“ƒNƒ‹[ƒh‚³‚ꂽƒtƒ@ƒCƒ‹‚ðƒXƒLƒƒƒ“’†: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "ƒCƒ“ƒNƒ‹[ƒh‚³‚ꂽƒtƒ@ƒCƒ‹‚ðƒXƒLƒƒƒ“’† %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: Œ»Ýs‚ÉŠY“–‚ª‚ ‚è‚Ü‚·"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "‘S‚ẴCƒ“ƒNƒ‹[ƒh‚³‚ꂽƒtƒ@ƒCƒ‹‚ªŒ©‚‚©‚è‚Ü‚µ‚½"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "ƒCƒ“ƒNƒ‹[ƒhƒtƒ@ƒCƒ‹‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: ’è‹`‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: ƒpƒ^[ƒ“‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Substitute "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# ÅŒã‚Ì %sŒŸõƒpƒ^[ƒ“:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚Ì‘Ž®ƒGƒ‰[‚Å‚·"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚ªØŽæ‚ç‚ê‚Ä‚¢‚邿‚¤‚Å‚·"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "%s (%d s–Ú) ‚É‘±‚­ƒeƒLƒXƒg: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "%s (%d s–Ú) ‚Ì affix –¼‚ª’·‰ß‚¬‚Ü‚·: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr ""
-"E761: affixƒtƒ@ƒCƒ‹‚Ì FOL, LOW ‚à‚µ‚­‚Í UPP ‚̃tƒH[ƒ}ƒbƒg‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚·"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL, LOW ‚à‚µ‚­‚Í UPP ‚Ì•¶Žš‚ª”͈͊O‚Å‚·"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "’PŒêƒcƒŠ[‚ðˆ³k‚µ‚Ä‚¢‚Ü‚·..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: ƒXƒyƒ‹ƒ`ƒFƒbƒN‚Í–³Œø‰»‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-"Œx: ’PŒêƒŠƒXƒg \"%s.%s.spl\" ‚¨‚æ‚Ñ \"%s.ascii.spl\" ‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "ƒXƒyƒ‹ƒtƒ@ƒCƒ‹ \"%s\" ‚ð“Çž’†"
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚ł͂Ȃ¢‚悤‚Å‚·"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: ŒÃ‚¢ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚Ȃ̂Å, ƒAƒbƒvƒf[ƒg‚µ‚Ä‚­‚¾‚³‚¢"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: ‚æ‚èV‚µ‚¢ƒo[ƒWƒ‡ƒ“‚Ì Vim —p‚̃Xƒyƒ‹ƒtƒ@ƒCƒ‹‚Å‚·"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚ɃTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢ƒZƒNƒVƒ‡ƒ“‚ª‚ ‚è‚Ü‚·"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "Œx9: %s ‚Æ‚¢‚¤”͈͂̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "affix ƒtƒ@ƒCƒ‹ %s ‚ð“Çž’†..."
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "%s (%d s–Ú) ‚Ì’PŒê‚ð•ÏŠ·‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "%s “à‚ÌŽŸ‚̕ϊ·‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ: %s ‚©‚ç %s ‚Ö"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s “à‚Ì %d s–Ú‚Ì FLAG ‚É–³Œø‚È’l‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s “à‚Ì %d s–ڂɃtƒ‰ƒO‚Ì“ñdŽg—p‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"%s ‚Ì %d s–Ú‚Ì PFX €–Ú‚ÌŒã‚Ì COMPOUNDFORBIDFLAG ‚Ì’è‹`‚ÍŒë‚Á‚½Œ‹‰Ê‚ð¶‚¶‚é"
-"‚±‚Æ‚ª‚ ‚è‚Ü‚·"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"%s ‚Ì %d s–Ú‚Ì PFX €–Ú‚ÌŒã‚Ì COMPOUNDPERMITFLAG ‚Ì’è‹`‚ÍŒë‚Á‚½Œ‹‰Ê‚ð¶‚¶‚é"
-"‚±‚Æ‚ª‚ ‚è‚Ü‚·"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "COMPOUNDRULES ‚Ì’l‚ÉŒë‚肪‚ ‚è‚Ü‚·. ƒtƒ@ƒCƒ‹ %s ‚Ì %d s–Ú: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì COMPOUNDWORDMAX ‚Ì’l‚ÉŒë‚肪‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì COMPOUNDMIN ‚Ì’l‚ÉŒë‚肪‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì COMPOUNDSYLMAX ‚Ì’l‚ÉŒë‚肪‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì CHECKCOMPOUNDPATTERN ‚Ì’l‚ÉŒë‚肪‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-"%s ‚Ì %d s–Ú‚Ì ˜A‘± affix ƒuƒƒbƒN‚̃tƒ‰ƒO‚Ì‘g‡‚¹‚ɈႢ‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚É d•¡‚µ‚½ affix ‚ðŒŸo‚µ‚Ü‚µ‚½: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"%s ‚Ì %d s–Ú‚Ì affix ‚Í BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
-"‚ÉŽg—p‚µ‚Ä‚­‚¾‚³‚¢: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Å‚Í Y ‚© N ‚ª•K—v‚Å‚·: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì ðŒ‚͉ó‚ê‚Ä‚¢‚Ü‚·: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s ‚Ì %d s–Ú‚É‚Í REP(SAL) ‚̉ñ”‚ª•K—v‚Å‚·"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "%s ‚Ì %d s–Ú‚É‚Í MAP ‚̉ñ”‚ª•K—v‚Å‚·"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s ‚Ì %d s–Ú‚Ì MAP ‚Éd•¡‚µ‚½•¶Žš‚ª‚ ‚è‚Ü‚·"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚É ”Fޝ‚Å‚«‚È‚¢‚©d•¡‚µ‚½€–Ú‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s s–Ú‚É FOL/LOW/UPP ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "SYLLABLE ‚ªŽw’肳‚ê‚È‚¢ COMPOUNDSYLMAX"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "’x‰„Œã’uŽq‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "•¡‡ƒtƒ‰ƒO‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "’x‰„Œã’uŽq ‚Æ/‚à‚µ‚­‚Í •¡‡ƒtƒ‰ƒO‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "SOFO%s s‚ª %s ‚É‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "SALs ‚Æ SOFOs ‚ª %s ‚Å—¼•ûŽw’肳‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s ‚Ì %d s‚Ì ƒtƒ‰ƒO‚ª”’l‚ł͂ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì ƒtƒ‰ƒO‚ª•s³‚Å‚·: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "’l %s ‚Í‘¼‚Ì .aff ƒtƒ@ƒCƒ‹‚ÅŽg—p‚³‚ꂽ‚̂ƈقȂè‚Ü‚·"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "Ž«‘ƒtƒ@ƒCƒ‹ %s ‚ðƒXƒLƒƒƒ“’†..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: %s ‚ɂ͒PŒê”‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "s %6d, ’PŒê %6d - %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Å d•¡’PŒê‚ªŒ©‚‚©‚è‚Ü‚µ‚½: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "d•¡‚Ì‚¤‚¿Å‰‚Ì’PŒê‚Í %s ‚Ì %d s–Ú‚Å‚·: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d ŒÂ‚Ì’PŒê‚ªŒ©‚‚©‚è‚Ü‚µ‚½ (%s “à)"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "”ñASCII•¶Žš‚ðŠÜ‚Þ %d ŒÂ‚Ì’PŒê‚𖳎‹‚µ‚Ü‚µ‚½ (%s “à)"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "•W€“ü—Í‚©‚ç“Çž‚Ý’† %s ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì d•¡‚µ‚½ /encoding= s‚𖳎‹‚µ‚Ü‚µ‚½: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì ’PŒê‚ÌŒã‚Ì /encoding= s‚𖳎‹‚µ‚Ü‚µ‚½: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì d•¡‚µ‚½ /regions= s‚𖳎‹‚µ‚Ü‚µ‚½: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú, ”͈͎w’肪‘½‰ß‚¬‚Ü‚·: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú‚Ì d•¡‚µ‚½ / s‚𖳎‹‚µ‚Ü‚µ‚½: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú –³Œø‚È nr —̈æ‚Å‚·: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s ‚Ì %d s–Ú ”Fޝ•s”\\‚ȃtƒ‰ƒO‚Å‚·: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "”ñASCII•¶Žš‚ðŠÜ‚Þ %d ŒÂ‚Ì’PŒê‚𖳎‹‚µ‚Ü‚µ‚½"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "ƒm[ƒh %d ŒÂ(‘S %d ŒÂ’†) ‚ðˆ³k‚µ‚Ü‚µ‚½; Žc‚è %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "ƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚ð‹t“Çž’†"
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "‰¹ºôž‚Ý‚ðŽÀs’†..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "‰¹ºôž‚ÝŒã‚Ì‘’PŒê”: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "‘’PŒê”: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "C³Œó•âƒtƒ@ƒCƒ‹ \"%s\" ‚𑞂ݒ†..."
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "„’胃‚ƒŠŽg—p—Ê: %d ƒoƒCƒg"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: o—̓tƒ@ƒCƒ‹–¼‚ɂ͔͈͖¼‚ðŠÜ‚ß‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ”ÍˆÍ‚Í 8 ŒÂ‚܂łµ‚©ƒTƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: –³Œø‚Ȕ͈͂ł·: %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "Œx: •¡‡ƒtƒ‰ƒO‚Æ NOBREAK ‚ª—¼•û‚Æ‚àŽw’肳‚ê‚Ü‚µ‚½"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "ƒXƒyƒ‹ƒtƒ@ƒCƒ‹ %s ‚𑞂ݒ†..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "ŽÀs‚µ‚Ü‚µ‚½!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' ‚É‚Í %<PRId64> ŒÂ‚̃Gƒ“ƒgƒŠ‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "%s ‚©‚ç’PŒê‚ªíœ‚³‚ê‚Ü‚µ‚½"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "%s ‚É’PŒê‚ª’ljÁ‚³‚ê‚Ü‚µ‚½"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: ’PŒê‚Ì•¶Žš‚ªƒXƒyƒ‹ƒtƒ@ƒCƒ‹‚ƈقȂè‚Ü‚·"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Žc”O‚Å‚·‚ª, C³Œó•â‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Žc”O‚Å‚·‚ª, C³Œó•â‚Í %<PRId64> ŒÂ‚µ‚©‚ ‚è‚Ü‚¹‚ñ"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "\"%.*s\" ‚ðŽŸ‚Ö•ÏŠ·:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: ƒXƒyƒ‹’uŠ·‚ª‚Ü‚¾ŽÀs‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: Œ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: .sug ƒtƒ@ƒCƒ‹‚ł͂Ȃ¢‚悤‚Å‚·: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: ŒÃ‚¢ .sug ƒtƒ@ƒCƒ‹‚Ȃ̂Å, ƒAƒbƒvƒf[ƒg‚µ‚Ä‚­‚¾‚³‚¢: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: ‚æ‚èV‚µ‚¢ƒo[ƒWƒ‡ƒ“‚Ì Vim —p‚Ì .sug ƒtƒ@ƒCƒ‹‚Å‚·: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: .sug ƒtƒ@ƒCƒ‹‚ª .spl ƒtƒ@ƒCƒ‹‚ƈê’v‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: .sug ƒtƒ@ƒCƒ‹‚̓Ǟ’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: MAP ƒGƒ“ƒgƒŠ‚Éd•¡•¶Žš‚ª‘¶Ý‚µ‚Ü‚·"
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "‚±‚̃oƒbƒtƒ@‚É’è‹`‚³‚ꂽ\\•¶—v‘f‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: •s³‚Ȉø”‚Å‚·: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: ‚»‚̂悤‚È\\•¶ƒNƒ‰ƒXƒ^‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "CŒ¾Œê•—ƒRƒƒ“ƒg‚©‚瓯Šú’†"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "”ñ“¯Šú"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "“¯ŠúŠJŽn "
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " s‘O(ƒgƒbƒvs‚æ‚è‚à)"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- \\•¶“¯Šú—v‘f ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"—v‘fã‚Å“¯Šú’†"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- \\•¶—v‘f ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: ‚»‚̂悤‚È\\•¶ƒNƒ‰ƒXƒ^‚Í‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "minimal "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "maximal "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; ŠY“– "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr " ŒÂ‚̉üs"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: ‚±‚Ìꊂł͈ø”contains‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: –³Œø‚Ècchar‚Ì’l‚Å‚·"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: ‚±‚±‚ł̓Oƒ‹[ƒv‚Í‹–‰Â‚³‚ê‚Ü‚¹‚ñ"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s ‚͈̔͗v‘f‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: ƒtƒ@ƒCƒ‹–¼‚ª•K—v‚Å‚·"
-
-#: ../syntax.c:4221
-msgid "E847: Too many syntax includes"
-msgstr "E847: \\•¶‚ÌŽæ‚èž‚Ý(include)‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: ']' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: '=' ‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: ˆø”‚ª‘«‚è‚Ü‚¹‚ñ: \\•¶”ÍˆÍ %s"
-
-#: ../syntax.c:4870
-msgid "E848: Too many syntax clusters"
-msgstr "E848: \\•¶ƒNƒ‰ƒXƒ^‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: ƒNƒ‰ƒXƒ^‚ªŽw’肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ƒpƒ^[ƒ“‹æØ‚肪Œ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: ƒpƒ^[ƒ“‚Ì‚ ‚ƂɃSƒ~‚ª‚ ‚è‚Ü‚·: %s"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: \\•¶“¯Šú: ˜A‘±sƒpƒ^[ƒ“‚ª2“xŽw’肳‚ê‚Ü‚µ‚½"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: •s³‚Ȉø”‚Å‚·: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: “™†‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: ‹ó‚̈ø”: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s ‚̓RƒR‚ł͋–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ‚Í“à—eƒŠƒXƒg‚Ìæ“ª‚łȂ¯‚ê‚΂Ȃç‚È‚¢"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: –¢’m‚̃Oƒ‹[ƒv–¼: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: –³Œø‚È :syntax ‚̃TƒuƒRƒ}ƒ“ƒh: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: syncolor.vim ‚ÌÄ‹AŒÄ‚Ño‚µ‚ðŒŸo‚µ‚Ü‚µ‚½"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: ƒnƒCƒ‰ƒCƒgƒOƒ‹[ƒv‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ˆø”‚ª[•ª‚ł͂Ȃ¢: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: ˆø”‚ª‘½‰ß‚¬‚Ü‚·: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: ƒOƒ‹[ƒv‚ªÝ’肳‚ê‚Ä‚¢‚é‚̂ŃnƒCƒ‰ƒCƒgƒŠƒ“ƒN‚Í–³Ž‹‚³‚ê‚Ü‚·"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: —\\Šú‚¹‚Ê“™†‚Å‚·: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: “™†‚ª‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: ˆø”‚ª‚ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: •s³‚È’l‚Å‚·: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: –¢’m‚Ì‘OŒiF‚Å‚·"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: –¢’m‚Ì”wŒiF‚Å‚·"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: ƒJƒ‰[–¼‚â”Ô†‚ð”Fޝ‚Å‚«‚Ü‚¹‚ñ: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: I’[ƒR[ƒh‚ª’·‰ß‚¬‚Ü‚·: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: •s³‚Ȉø”‚Å‚·: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ‘½‚­‚̈قȂéƒnƒCƒ‰ƒCƒg‘®«‚ªŽg‚í‚ê‰ß‚¬‚Ä‚¢‚Ü‚·"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: ƒOƒ‹[ƒv–¼‚Ɉóü•s‰Â”\\‚È•¶Žš‚ª‚ ‚è‚Ü‚·"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: ƒOƒ‹[ƒv–¼‚É•s³‚È•¶Žš‚ª‚ ‚è‚Ü‚·"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr "E849: ƒnƒCƒ‰ƒCƒg‚Æ\\•¶ƒOƒ‹[ƒv‚ª‘½‰ß‚¬‚Ü‚·"
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ƒ^ƒOƒXƒ^ƒbƒN‚Ì––”ö‚Å‚·"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: ƒ^ƒOƒXƒ^ƒbƒN‚Ìæ“ª‚Å‚·"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: ʼn‚ÌŠY“–ƒ^ƒO‚ð’´‚¦‚Ė߂邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: ƒ^ƒO‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri kind tag"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "ƒtƒ@ƒCƒ‹\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: ŠY“–ƒ^ƒO‚ª1‚‚¾‚¯‚µ‚©‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ÅŒã‚ÉŠY“–‚·‚éƒ^ƒO‚ð’´‚¦‚Äi‚Þ‚±‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "ƒtƒ@ƒCƒ‹ \"%s\" ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "ƒ^ƒO %d (‘S%d%s)"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " ‚©‚»‚êˆÈã"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " ƒ^ƒO‚ðˆÙ‚È‚écase‚ÅŽg—p‚µ‚Ü‚·!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: ƒtƒ@ƒCƒ‹ \"%s\" ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # TO ƒ^ƒO FROM s in file/text"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "ƒ^ƒOƒtƒ@ƒCƒ‹ %s ‚ðŒŸõ’†"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "ƒ^ƒOƒtƒ@ƒCƒ‹“à‚Ì’·‚¢s‚𖳎‹‚µ‚Ü‚·"
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: ƒ^ƒOƒtƒ@ƒCƒ‹ \"%s\" ‚̃tƒH[ƒ}ƒbƒg‚ɃGƒ‰[‚ª‚ ‚è‚Ü‚·"
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "’¼‘O‚Ì %<PRId64> ƒoƒCƒg"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: ƒ^ƒOƒtƒ@ƒCƒ‹‚ªƒ\\[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: ƒ^ƒOƒtƒ@ƒCƒ‹‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: ƒ^ƒOƒpƒ^[ƒ“‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ƒ^ƒO‚ðŒ©‚Â‚¯‚ç‚ê‚È‚¢‚̂ŒP‚É„‘ª‚µ‚Ü‚·!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "d•¡‚µ‚½ƒtƒB[ƒ‹ƒh–¼: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' ‚Í–¢’m‚Å‚·. Œ»s‚Ì‘g‚Ýž‚Ý’[––‚ÍŽŸ‚̂Ƃ¨‚è‚Å‚·:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "È—ª’l‚ðŽŸ‚Ì‚æ‚¤‚Éݒ肵‚Ü‚· '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: termcapƒtƒ@ƒCƒ‹‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfo‚É’[––ƒGƒ“ƒgƒŠ‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcap‚É’[––ƒGƒ“ƒgƒŠ‚ðŒ©‚Â‚¯‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap‚É \"%s\" ‚̃Gƒ“ƒgƒŠ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ’[––‚É \"cm\" ‹@”\\‚ª•K—v‚Å‚·"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- ’[––ƒL[ ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: “ü—Í‚ð“Çž‚Ý’†‚̃Gƒ‰[‚É‚æ‚èI—¹‚µ‚Ü‚·...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: —\\Šú‚¹‚¸sƒJƒEƒ“ƒg‚ª•Ï‚í‚è‚Ü‚µ‚½"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: ‘ž‚Ý—p‚ɃAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ðŠJ‚¯‚Ü‚¹‚ñ: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ª‰ó‚ê‚Ä‚¢‚Ü‚· (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "'undodir'‚̃fƒBƒŒƒNƒgƒŠ‚ɃAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ð‘‚«ž‚߂܂¹‚ñ"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚Æ‚µ‚ēǂݞ‚߂Ȃ¢‚Ì‚Åã‘‚«‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ł͂Ȃ¢‚Ì‚Åã‘‚«‚µ‚Ü‚¹‚ñ: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "‘ÎÛ‚ª‚È‚¢‚̂ŃAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚Ì‘‚«ž‚Ý‚ðƒXƒLƒbƒv‚µ‚Ü‚·"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‘‚«ž‚Ý’†: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚Ì‘‚«ž‚݃Gƒ‰[‚Å‚·: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "ƒI[ƒi[‚ªˆÙ‚È‚é‚̂ŃAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ð“ǂݞ‚݂܂¹‚ñ: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹“Çž’†: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ð“Çž—p‚Æ‚µ‚ÄŠJ‚¯‚Ü‚¹‚ñ: %s"
-
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ł͂ ‚è‚Ü‚¹‚ñ: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: ŒÝŠ·«‚Ì–³‚¢ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚Å‚·: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "ƒtƒ@ƒCƒ‹‚Ì“à—e‚ª•Ï‚í‚Á‚Ä‚¢‚邽‚ßAƒAƒ“ƒhƒDî•ñ‚ð—˜—p‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹ %s ‚ÌŽæž‚ðŠ®—¹"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "Šù‚Ɉê”Ԍ¢•ÏX‚Å‚·"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "Šù‚Ɉê”ÔV‚µ‚¢•ÏX‚Å‚·"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: ƒAƒ“ƒhƒD”Ô† %<PRId64> ‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: s”Ô†‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "s ’ljÁ‚µ‚Ü‚µ‚½"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "s ’ljÁ‚µ‚Ü‚µ‚½"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "s 휂µ‚Ü‚µ‚½"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "s 휂µ‚Ü‚µ‚½"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "‰ÓŠ•ÏX‚µ‚Ü‚µ‚½"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "‰ÓŠ•ÏX‚µ‚Ü‚µ‚½"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "‘O•û"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "Œã•û"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "ƒAƒ“ƒhƒD‘ÎÛ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr "’Ê”Ô •ÏX” •ÏXŽžŠú •Û‘¶Ï"
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> •bŒo‰ß‚µ‚Ä‚¢‚Ü‚·"
-
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undo ‚Ì’¼Œã‚É undojoin ‚͂ł«‚Ü‚¹‚ñ"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: ƒAƒ“ƒhƒDƒŠƒXƒg‚ª‰ó‚ê‚Ä‚¢‚Ü‚·"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: ƒAƒ“ƒhƒDs‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"“K—pσpƒbƒ`: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"’ljÁŠg’£ƒpƒbƒ`: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Modified by "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Compiled "
-
-#: ../version.c:649
-msgid "by "
-msgstr "by "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"Huge Ӂ "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "without GUI."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " ‹@”\\‚̈ꗗ —LŒø(+)/–³Œø(-)\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ƒVƒXƒeƒ€ vimrc: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " ƒ†[ƒU vimrc: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " ‘æ2ƒ†[ƒU vimrc: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " ‘æ3ƒ†[ƒU vimrc: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " ƒ†[ƒU exrc: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " ‘æ2ƒ†[ƒU exrc: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " È—ªŽž‚Ì $VIM: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr "È—ªŽž‚Ì $VIMRUNTIME: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "ƒRƒ“ƒpƒCƒ‹: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "ƒŠƒ“ƒN: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr "ƒfƒoƒbƒOƒrƒ‹ƒh"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi IMproved"
-
-#: ../version.c:769
-msgid "version "
-msgstr "version "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "by Bram Moolenaar ‘¼."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim ‚̓I[ƒvƒ“ƒ\\[ƒX‚Å‚ ‚莩—R‚É”z•z‰Â”\\‚Å‚·"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "ƒEƒKƒ“ƒ_‚ÌŒb‚Ü‚ê‚È‚¢Žq‹Ÿ‚½‚¿‚ɉ‡•‚ð!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "ÚׂÈî•ñ‚Í :help iccf<Enter> "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "I—¹‚·‚é‚É‚Í :q<Enter> "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "ƒIƒ“ƒ‰ƒCƒ“ƒwƒ‹ƒv‚Í :help<Enter> ‚© <F1> "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "ƒo[ƒWƒ‡ƒ“î•ñ‚Í :help version7<Enter> "
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "ViŒÝŠ·ƒ‚[ƒh‚Å“®ì’†"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "Vim„§’l‚É‚·‚é‚É‚Í :set nocp<Enter> "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "ÚׂÈî•ñ‚Í :help cp-default<Enter>"
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "Vim‚ÌŠJ”­‚ð‰ž‰‡‚µ‚Ä‚­‚¾‚³‚¢!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "Vim‚Ì“o˜^ƒ†[ƒU‚ɂȂÁ‚Ä‚­‚¾‚³‚¢!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "ÚׂÈî•ñ‚Í :help sponsor<Enter> "
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "ÚׂÈî•ñ‚Í :help register<Enter> "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "Úׂ̓ƒjƒ…[‚Ì ƒwƒ‹ƒv¨ƒXƒ|ƒ“ƒT[/“o˜^ ‚ðŽQÆ‚µ‚ĉº‚³‚¢ "
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "Šù‚ɃEƒBƒ“ƒhƒE‚Í1‚‚µ‚©‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: ƒvƒŒƒrƒ…[ƒEƒBƒ“ƒhƒE‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ¶ã‚ƉE‰º‚𓯎ž‚É•ªŠ„‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ‘¼‚̃EƒBƒ“ƒhƒE‚ª•ªŠ„‚³‚ê‚Ä‚¢‚鎞‚ɂ͇‰ñ‚Å‚«‚Ü‚¹‚ñ"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: ÅŒã‚̃EƒBƒ“ƒhƒE‚ð•‚¶‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: autocmdƒEƒBƒ“ƒhƒE‚͕‚¶‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: autocmdƒEƒBƒ“ƒhƒE‚µ‚©Žc‚ç‚È‚¢‚½‚ßAƒEƒBƒ“ƒhƒE‚͕‚¶‚ç‚ê‚Ü‚¹‚ñ"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: ‘¼‚̃EƒBƒ“ƒhƒE‚ɂ͕ÏX‚ª‚ ‚è‚Ü‚·"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: ƒJ[ƒ\\ƒ‹‚̉º‚Ƀtƒ@ƒCƒ‹–¼‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: bf_key_init() ‚ª‹óƒpƒXƒ[ƒh‚ŌĂÑo‚³‚ê‚Ü‚µ‚½"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: BlowfishˆÃ†‚̃rƒbƒO/ƒŠƒgƒ‹ƒGƒ“ƒfƒBƒAƒ“‚ªŠÔˆá‚Á‚Ä‚¢‚Ü‚·"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: sha256‚̃eƒXƒg‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: BlowfishˆÃ†‚̃eƒXƒg‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "Patch file"
-#~ msgstr "ƒpƒbƒ`ƒtƒ@ƒCƒ‹"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "Œˆ’è(&O)\n"
-#~ "ƒLƒƒƒ“ƒZƒ‹(&C)"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Vim ƒT[ƒo‚Ö‚ÌÚ‘±‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: %s ‚Ö‘—‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: ƒT[ƒo‚̉ž“š‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: ƒNƒ‰ƒCƒAƒ“ƒg‚Ö‘—‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "Save As"
-#~ msgstr "•Ê–¼‚ŕۑ¶"
-
-#~ msgid "Edit File"
-#~ msgstr "ƒtƒ@ƒCƒ‹‚ð•ÒW"
-
-# Added at 27-Jan-2004.
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (Œ©‚‚©‚è‚Ü‚¹‚ñ)"
-
-#~ msgid "Source Vim script"
-#~ msgstr "VimƒXƒNƒŠƒvƒg‚ÌŽæž‚Ý"
-
-#~ msgid "unknown"
-#~ msgstr "•s–¾"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "V‚µ‚¢ƒEƒBƒ“ƒhƒE‚Ńtƒ@ƒCƒ‹‚ð•ÒW‚µ‚Ü‚·"
-
-#~ msgid "Append File"
-#~ msgstr "’ljÁƒtƒ@ƒCƒ‹"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "ƒEƒBƒ“ƒhƒEˆÊ’u: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "ƒŠƒ_ƒCƒŒƒNƒg‚ð•Û‘¶‚µ‚Ü‚·"
-
-#~ msgid "Save View"
-#~ msgstr "ƒrƒ…[‚ð•Û‘¶‚µ‚Ü‚·"
-
-#~ msgid "Save Session"
-#~ msgstr "ƒZƒbƒVƒ‡ƒ“î•ñ‚ð•Û‘¶‚µ‚Ü‚·"
-
-#~ msgid "Save Setup"
-#~ msgstr "Ý’è‚ð•Û‘¶‚µ‚Ü‚·"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< ‚Í +eval ‹@”\\‚ª–³‚¢‚Æ—˜—p‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: ‚±‚̃o[ƒWƒ‡ƒ“‚É‡Žš‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr " ‚̓fƒoƒCƒX‚Å‚· ('opendevice' ƒIƒvƒVƒ‡ƒ“‚ʼnñ”ð‚Å‚«‚Ü‚·)"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "•W€“ü—Í‚©‚ç“Çž‚Ý’†..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfishˆÃ†‰»]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[ˆÃ†‰»]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: ƒtƒ@ƒCƒ‹‚ª–¢’m‚Ì•û–@‚ňƉ»‚³‚ê‚Ä‚¢‚Ü‚·"
-
-# Added at 19-Jan-2004.
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans‚Í–¢•ÏX‚̃oƒbƒtƒ@‚ðã‘‚·‚邱‚Ƃ͋–‰Â‚µ‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "NetBeansƒoƒbƒtƒ@‚̈ꕔ‚ð‘‚«o‚·‚±‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "'opendevice' ƒIƒvƒVƒ‡ƒ“‚É‚æ‚èƒfƒoƒCƒX‚Ö‚Ì‘‚«ž‚݂͂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: ƒŠƒ\\[ƒXƒtƒH[ƒN‚ªŽ¸‚í‚ê‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ (! ‚ð’ljÁ‚Å‹­§)"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: GUI—p‚̃vƒƒZƒX‚Ì‹N“®‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: ŽqƒvƒƒZƒX‚ªGUI‚Ì‹N“®‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: GUI‚ðŠJŽn‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: \"%s\"‚©‚ç“Çž‚Þ‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: —LŒø‚ȃtƒHƒ“ƒg‚ªŒ©‚‚©‚ç‚È‚¢‚Ì‚Å, GUI‚ðŠJŽn‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: 'guifontwide' ‚ª–³Œø‚Å‚·"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' ‚Éݒ肳‚ꂽ’l‚ª–³Œø‚Å‚·"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: %s ‚ÌF‚ðŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "ƒJ[ƒ\\ƒ‹‚̈ʒu‚Ƀ}ƒbƒ`‚Í‚ ‚è‚Ü‚¹‚ñ, ŽŸ‚ðŒŸõ‚µ‚Ä‚¢‚Ü‚·"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<ŠJ‚¯‚Ü‚¹‚ñ> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: ƒtƒHƒ“ƒg %s ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: Œ»Ý‚̃fƒBƒŒƒNƒgƒŠ‚É–ß‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "Pathname:"
-#~ msgstr "ƒpƒX–¼:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: Œ»Ý‚̃fƒBƒŒƒNƒgƒŠ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "OK"
-#~ msgstr "OK"
-
-#~ msgid "Cancel"
-#~ msgstr "ƒLƒƒƒ“ƒZƒ‹"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "ƒXƒNƒ[ƒ‹ƒo[: ‰æ‘œ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½."
-
-#~ msgid "Vim dialog"
-#~ msgstr "Vim ƒ_ƒCƒAƒƒO"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: ƒƒbƒZ[ƒW‚ƃR[ƒ‹ƒoƒbƒN‚Ì‚ ‚é BalloonEval ‚ð쬂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "Input _Methods"
-#~ msgstr "ƒCƒ“ƒvƒbƒgƒƒ\\ƒbƒh"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - ŒŸõ‚Æ’uŠ·..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - ŒŸõ..."
-
-#~ msgid "Find what:"
-#~ msgstr "ŒŸõ•¶Žš—ñ:"
-
-#~ msgid "Replace with:"
-#~ msgstr "’uŠ·•¶Žš—ñ:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "³Šm‚ÉŠY“–‚·‚é‚à‚Ì‚¾‚¯"
-
-#~ msgid "Match case"
-#~ msgstr "‘å•¶Žš/¬•¶Žš‚ð‹æ•Ê‚·‚é"
-
-#~ msgid "Direction"
-#~ msgstr "•ûŒü"
-
-#~ msgid "Up"
-#~ msgstr "ã"
-
-#~ msgid "Down"
-#~ msgstr "‰º"
-
-#~ msgid "Find Next"
-#~ msgstr "ŽŸ‚ðŒŸõ"
-
-#~ msgid "Replace"
-#~ msgstr "’uŠ·"
-
-#~ msgid "Replace All"
-#~ msgstr "‘S‚Ä’uŠ·"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: ƒZƒbƒVƒ‡ƒ“ƒ}ƒl[ƒWƒƒ‚©‚ç \"die\" —v‹‚ðŽó‚¯Žæ‚è‚Ü‚µ‚½\n"
-
-#~ msgid "Close"
-#~ msgstr "•‚¶‚é"
-
-#~ msgid "New tab"
-#~ msgstr "V‹Kƒ^ƒuƒy[ƒW"
-
-#~ msgid "Open Tab..."
-#~ msgstr "ƒ^ƒuƒy[ƒW‚ðŠJ‚­..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: ƒƒCƒ“ƒEƒBƒ“ƒhƒE‚ª•sˆÓ‚É”j‰ó‚³‚ê‚Ü‚µ‚½\n"
-
-#~ msgid "&Filter"
-#~ msgstr "ƒtƒBƒ‹ƒ^(&F)"
-
-#~ msgid "&Cancel"
-#~ msgstr "ƒLƒƒƒ“ƒZƒ‹(&C)"
-
-#~ msgid "Directories"
-#~ msgstr "ƒfƒBƒŒƒNƒgƒŠ"
-
-#~ msgid "Filter"
-#~ msgstr "ƒtƒBƒ‹ƒ^"
-
-#~ msgid "&Help"
-#~ msgstr "ƒwƒ‹ƒv(&H)"
-
-#~ msgid "Files"
-#~ msgstr "ƒtƒ@ƒCƒ‹"
-
-#~ msgid "&OK"
-#~ msgstr "&OK"
-
-#~ msgid "Selection"
-#~ msgstr "‘I‘ð"
-
-#~ msgid "Find &Next"
-#~ msgstr "ŽŸ‚ðŒŸõ(&N)"
-
-#~ msgid "&Replace"
-#~ msgstr "’uŠ·(&R)"
-
-#~ msgid "Replace &All"
-#~ msgstr "‘S‚Ä’uŠ·(&A)"
-
-#~ msgid "&Undo"
-#~ msgstr "ƒAƒ“ƒhƒD(&U)"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: ƒ^ƒCƒgƒ‹‚ª \"%s\" ‚̃EƒBƒ“ƒhƒE‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: ˆø”‚̓Tƒ|[ƒg‚³‚ê‚Ü‚¹‚ñ: \"-%s\"; OLE”Å‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: MDIƒAƒvƒŠ‚Ì’†‚ł̓EƒBƒ“ƒhƒE‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#~ msgid "Close tab"
-#~ msgstr "ƒ^ƒuƒy[ƒW‚ð•‚¶‚é"
-
-#~ msgid "Open tab..."
-#~ msgstr "ƒ^ƒuƒy[ƒW‚ðŠJ‚­"
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "ŒŸõ•¶Žš—ñ ('\\' ‚ðŒŸõ‚·‚é‚É‚Í '\\\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "ŒŸõE’uŠ· ('\\' ‚ðŒŸõ‚·‚é‚É‚Í '\\\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Žg‚í‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "ƒfƒBƒŒƒNƒgƒŠ\t*.nothing\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr "Vim E458: FŽw’肪³‚µ‚­‚È‚¢‚̂ŃGƒ“ƒgƒŠ‚ðŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: ˆÈ‰º‚Ì•¶ŽšƒZƒbƒg‚̃tƒHƒ“ƒg‚ª‚ ‚è‚Ü‚¹‚ñ %s:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: ƒtƒHƒ“ƒgƒZƒbƒg–¼: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "ƒtƒHƒ“ƒg '%s' ‚͌Œ蕂ł͂ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: ƒtƒHƒ“ƒgƒZƒbƒg–¼: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "ƒtƒHƒ“ƒg0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "ƒtƒHƒ“ƒg1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "ƒtƒHƒ“ƒg%<PRId64> ‚Ì•‚ªƒtƒHƒ“ƒg0‚Ì2”{‚ł͂ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "ƒtƒHƒ“ƒg0‚Ì•: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "ƒtƒHƒ“ƒg1‚Ì•: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "–³Œø‚ȃtƒHƒ“ƒgŽw’è‚Å‚·"
-
-#~ msgid "&Dismiss"
-#~ msgstr "‹p‰º‚·‚é(&D)"
-
-#~ msgid "no specific match"
-#~ msgstr "ƒ}ƒbƒ`‚·‚é‚à‚Ì‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - ƒtƒHƒ“ƒg‘I‘ð"
-
-#~ msgid "Name:"
-#~ msgstr "–¼‘O:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "ƒTƒCƒY‚ðƒ|ƒCƒ“ƒg‚Å•\\ަ‚·‚é"
-
-#~ msgid "Encoding:"
-#~ msgstr "ƒGƒ“ƒR[ƒh:"
-
-#~ msgid "Font:"
-#~ msgstr "ƒtƒHƒ“ƒg:"
-
-#~ msgid "Style:"
-#~ msgstr "ƒXƒ^ƒCƒ‹:"
-
-#~ msgid "Size:"
-#~ msgstr "ƒTƒCƒY:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: ƒnƒ“ƒOƒ‹ƒI[ƒgƒ}ƒgƒ“ƒGƒ‰["
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat ƒGƒ‰["
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: cscopeƒf[ƒ^ƒx[ƒX: %s ‚ðŠJ‚­‚±‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: cscopeƒf[ƒ^ƒx[ƒX‚Ìî•ñ‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Luaƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ."
-
-#~ msgid "cannot save undo information"
-#~ msgstr "ƒAƒ“ƒhƒDî•ñ‚ª•Û‘¶‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: ‚±‚̃Rƒ}ƒ“ƒh‚Í–³Œø‚Å‚·. MzScheme ƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ."
-
-#~ msgid "invalid expression"
-#~ msgstr "–³Œø‚ÈŽ®‚Å‚·"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "Ž®‚̓Rƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#~ msgid "hidden option"
-#~ msgstr "‰B‚µƒIƒvƒVƒ‡ƒ“"
-
-#~ msgid "unknown option"
-#~ msgstr "–¢’m‚̃IƒvƒVƒ‡ƒ“‚Å‚·"
-
-#~ msgid "window index is out of range"
-#~ msgstr "”͈͊O‚̃EƒBƒ“ƒhƒE”Ô†‚Å‚·"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "ƒoƒbƒtƒ@‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#~ msgid "cannot delete line"
-#~ msgstr "s‚ðÁ‚¹‚Ü‚¹‚ñ"
-
-#~ msgid "cannot replace line"
-#~ msgstr "s‚ð’uŠ·‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "cannot insert line"
-#~ msgstr "s‚ð‘}“ü‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "•¶Žš—ñ‚ɂ͉üs•¶Žš‚ðŠÜ‚ß‚ç‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "Scheme’l‚ÌVim‚ւ̕ϊ·ƒGƒ‰["
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Vim ƒGƒ‰[: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Vim ƒGƒ‰["
-
-#~ msgid "buffer is invalid"
-#~ msgstr "ƒoƒbƒtƒ@‚Í–³Œø‚Å‚·"
-
-#~ msgid "window is invalid"
-#~ msgstr "ƒEƒBƒ“ƒhƒE‚Í–³Œø‚Å‚·"
-
-#~ msgid "linenr out of range"
-#~ msgstr "”͈͊O‚Ìs”Ô†‚Å‚·"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "ƒTƒ“ƒhƒ{ƒbƒNƒX‚ł͋–‚³‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: ƒ‰ƒCƒuƒ‰ƒŠ %s ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "‚±‚̃Rƒ}ƒ“ƒh‚Í–³Œø‚Å‚·, ‚²‚ß‚ñ‚È‚³‚¢: Perlƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ"
-#~ "‚½."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: ƒTƒ“ƒhƒ{ƒbƒNƒX‚Å‚Í Safe ƒ‚ƒWƒ…[ƒ‹‚ðŽg—p‚µ‚È‚¢PerlƒXƒNƒŠƒvƒg‚͋ւ¶‚ç"
-#~ "‚ê‚Ä‚¢‚Ü‚·"
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: ‚±‚ÌVim‚Å‚Í :py3 ‚ðŽg‚Á‚½Œã‚É :python ‚ðŽg‚¦‚Ü‚¹‚ñ"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: ‚±‚̃Rƒ}ƒ“ƒh‚Í–³Œø‚Å‚·,‚²‚ß‚ñ‚È‚³‚¢: Pythonƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü"
-#~ "‚¹‚ñ‚Å‚µ‚½."
-
-# Added at 07-Feb-2004.
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Python ‚ðÄ‹A“I‚ÉŽÀs‚·‚邱‚Ƃ͂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: ‚±‚ÌVim‚Å‚Í :python ‚ðŽg‚Á‚½Œã‚É :py3 ‚ðŽg‚¦‚Ü‚¹‚ñ"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ ‚Í•¶Žš—ñ‚̃Cƒ“ƒXƒ^ƒ“ƒX‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: ‚±‚̃Rƒ}ƒ“ƒh‚Í–³Œø‚Å‚·,‚²‚ß‚ñ‚È‚³‚¢: Rubyƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü‚¹"
-#~ "‚ñ‚Å‚µ‚½."
-
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: —\\Šú‚¹‚Ê return ‚Å‚·"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: —\\Šú‚¹‚Ê next ‚Å‚·"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: —\\Šú‚¹‚Ê break ‚Å‚·"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: —\\Šú‚¹‚Ê redo ‚Å‚·"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: rescue ‚ÌŠO‚Ì retry ‚Å‚·"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: Žæ‚舵‚í‚ê‚È‚©‚Á‚½—áŠO‚ª‚ ‚è‚Ü‚·"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: –¢’m‚Ìlongjmpó‘Ô: %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "ŽÀ‘•‚Æ’è‹`‚ðØ‚è‘Ö‚¦‚é"
-
-#~ msgid "Show base class of"
-#~ msgstr "ŽŸ‚̃Nƒ‰ƒX‚ÌŠî’ê‚ð•\\ަ"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "ƒI[ƒo[ƒ‰ƒCƒh‚³‚ꂽƒƒ“ƒoŠÖ”‚ð•\\ަ"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "ƒtƒ@ƒCƒ‹‚©‚ç‰ñ•œ‚·‚é"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "ƒvƒƒWƒFƒNƒg‚©‚ç‰ñ•œ‚·‚é"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "‘S‚ẴvƒƒWƒFƒNƒg‚©‚ç‰ñ•œ‚·‚é"
-
-#~ msgid "Retrieve"
-#~ msgstr "‰ñ•œ"
-
-#~ msgid "Show source of"
-#~ msgstr "ŽŸ‚̃\\[ƒX‚ð•\\ަ‚·‚é"
-
-#~ msgid "Find symbol"
-#~ msgstr "Œ©‚‚¯‚½ƒVƒ“ƒ{ƒ‹"
-
-#~ msgid "Browse class"
-#~ msgstr "ƒNƒ‰ƒX‚ðŽQÆ"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "ŠK‘w‚ŃNƒ‰ƒX‚ð•\\ަ"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "ŒÀ’肳‚ꂽŠK‘w‚ŃNƒ‰ƒX‚ð•\\ަ"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref ‚ÌŽQÆæ"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ‚ªŽQÆ‚³‚ê‚é"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ‚ªŽŸ‚Ì‚à‚Ì‚ð‚à‚Á‚Ä‚¢‚Ü‚·"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref ‚ªŽg—p‚³‚ê‚é"
-
-#~ msgid "Show docu of"
-#~ msgstr "ŽŸ‚Ì•¶Í‚ð•\\ަ"
-
-#~ msgid "Generate docu for"
-#~ msgstr "ŽŸ‚Ì•¶Í‚ð¶¬"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "SNiFF+‚ÉÚ‘±‚Å‚«‚Ü‚¹‚ñ. ŠÂ‹«‚ðƒ`ƒFƒbƒN‚µ‚Ä‚­‚¾‚³‚¢(sniffemacs ‚ª $PATH ‚É"
-#~ "‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: “Çž’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½. Ø’f‚µ‚Ü‚µ‚½"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "Œ»ÝSNiFF+ ‚Ìó‘Ô‚Íu"
-
-#~ msgid "not "
-#~ msgstr "–¢"
-
-#~ msgid "connected"
-#~ msgstr "Ú‘±v‚Å‚·"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: –¢’m‚Ì SNiFF+ ƒŠƒNƒGƒXƒg‚Å‚·: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: SNiFF+ ‚Ö‚ÌÚ‘±’†‚̃Gƒ‰[‚Å‚·"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ ‚ÉÚ‘±‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: SNiFF+ ƒoƒbƒtƒ@‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: ‘ž‚Ý’†‚ɃGƒ‰[‚ª”­¶‚µ‚½‚Ì‚ÅØ’f‚µ‚Ü‚µ‚½"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "–³Œø‚ȃoƒbƒtƒ@”Ô†‚Å‚·"
-
-#~ msgid "not implemented yet"
-#~ msgstr "‚Ü‚¾ŽÀ‘•‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "s‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "invalid mark name"
-#~ msgstr "–³Œø‚ȃ}[ƒN–¼‚Å‚·"
-
-#~ msgid "mark not set"
-#~ msgstr "ƒ}[ƒN‚Íݒ肳‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "row %d column %d"
-#~ msgstr "s %d —ñ %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "s‚Ì‘}“ü/’ljÁ‚ð‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "line number out of range"
-#~ msgstr "”͈͊O‚Ìs”Ô†‚Å‚·"
-
-#~ msgid "unknown flag: "
-#~ msgstr "–¢’m‚̃tƒ‰ƒO: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "–¢’m‚Ì vimOption ‚Å‚·"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "ƒL[ƒ{[ƒhŠ„ž‚Ý"
-
-#~ msgid "vim error"
-#~ msgstr "vim ƒGƒ‰["
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr ""
-#~ "ƒoƒbƒtƒ@/ƒEƒBƒ“ƒhƒE쬃Rƒ}ƒ“ƒh‚ð쬂ł«‚Ü‚¹‚ñ: ƒIƒuƒWƒFƒNƒg‚ªÁ‹Ž‚³‚ê‚Ä"
-#~ "‚¢‚Ü‚µ‚½"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr ""
-#~ "ƒR[ƒ‹ƒoƒbƒNƒRƒ}ƒ“ƒh‚ð“o˜^‚Å‚«‚Ü‚¹‚ñ: ƒoƒbƒtƒ@/ƒEƒBƒ“ƒhƒE‚ªŠù‚ÉÁ‹Ž‚³‚ê‚Ü"
-#~ "‚µ‚½"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: TCL ’v–½“IƒGƒ‰[: reflist ‰˜õ!? vim-dev@vim.org ‚É•ñ‚µ‚Ä‚­‚¾‚³‚¢"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "ƒR[ƒ‹ƒoƒbƒNƒRƒ}ƒ“ƒh‚ð“o˜^‚Å‚«‚Ü‚¹‚ñ: ƒoƒbƒtƒ@/ƒEƒBƒ“ƒhƒE‚ÌŽQÆ‚ªŒ©‚‚©‚è"
-#~ "‚Ü‚¹‚ñ"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: ‚±‚̃Rƒ}ƒ“ƒh‚Í–³Œø‚Å‚·,‚²‚ß‚ñ‚È‚³‚¢: Tclƒ‰ƒCƒuƒ‰ƒŠ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ"
-#~ "‚Å‚µ‚½."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: I—¹ƒR[ƒh %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "s‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "–½—߃T[ƒo‚Ì–¼‘O‚ð“o˜^‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: –Ú“I‚̃vƒƒOƒ‰ƒ€‚ւ̃Rƒ}ƒ“ƒh‘—M‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: –³Œø‚ȃT[ƒoID‚ªŽg‚í‚ê‚Ü‚µ‚½: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr "E251: VIM ŽÀ‘̂̓o˜^ƒvƒƒpƒeƒB‚ª•s³‚Å‚·. Á‹Ž‚µ‚Ü‚µ‚½!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans ‚Í‚±‚ÌGUI‚ł͗˜—p‚Å‚«‚Ü‚¹‚ñ\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "‚±‚ÌVim‚É‚Ídiff‹@”\\‚ª‚ ‚è‚Ü‚¹‚ñ(ƒRƒ“ƒpƒCƒ‹ŽžÝ’è)."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "'-nb' Žg—p•s‰Â”\\‚Å‚·: ƒRƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: ƒGƒ‰[: NetBeans‚©‚çgvim‚ðƒXƒ^[ƒg‚Å‚«‚Ü‚¹‚ñ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "‘嬕¶Žš‚ª–³Ž‹‚³‚ê‚éê‡‚Í‘å•¶Žš‚É‚·‚邽‚ß‚É / ‚ð‘O’u‚µ‚Ä‚­‚¾‚³‚¢"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\t‚±‚Ìgvim‚ðOLE‚Æ‚µ‚Ä“o˜^‚·‚é"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tgvim‚ÌOLE“o˜^‚ð‰ðœ‚·‚é"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tGUI‚Å‹N“®‚·‚é (\"gvim\" ‚Æ“¯‚¶)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f or --nofork\tƒtƒHƒAƒOƒ‰ƒEƒ“ƒh: GUI‚ðŽn‚߂邯‚«‚Éfork‚µ‚È‚¢"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tƒEƒBƒ“ƒhƒE‚ðŠJ‚­‚Ì‚É newcli ‚ðŽg—p‚µ‚È‚¢"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\tI/O‚É <device> ‚ðŽg—p‚·‚é"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\t.gvimrc‚Ì‘ã‚í‚è‚É <gvimrc> ‚ðŽg‚¤"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tˆÃ†‰»‚³‚ꂽƒtƒ@ƒCƒ‹‚ð•ÒW‚·‚é"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\tvim‚ðŽw’肵‚½ X ƒT[ƒo‚ÉÚ‘±‚·‚é"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tXƒT[ƒo‚ÉÚ‘±‚µ‚È‚¢"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <files>\t‰Â”\\‚È‚ç‚ÎVimƒT[ƒo‚Å <files> ‚ð•ÒW‚·‚é"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <files> “¯ã, ƒT[ƒo‚ª–³‚­‚Ä‚àŒx•¶‚ðo—Í‚µ‚È‚¢"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr "--remote-wait <files>\t--remoteŒã ƒtƒ@ƒCƒ‹‚Ì•ÒW‚ªI‚í‚é‚Ì‚ð‘Ò‚Â"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <files> “¯ã, ƒT[ƒo‚ª–³‚­‚Ä‚àŒx•¶‚ðo—Í‚µ‚È‚¢"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <files> --remote‚Ńtƒ@ƒCƒ‹1‚‚ɂ‚«1‚‚̃^ƒu"
-#~ "ƒy[ƒW‚ðŠJ‚­"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <keys>\tVimƒT[ƒo‚É <keys> ‚ð‘—M‚µ‚ÄI—¹‚·‚é"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <expr>\tƒT[ƒo‚Å <expr> ‚ðŽÀs‚µ‚ÄŒ‹‰Ê‚ð•\\ަ‚·‚é"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\tVimƒT[ƒo–¼‚̈ꗗ‚ð•\\ަ‚µ‚ÄI—¹‚·‚é"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <name>\tVimƒT[ƒo <name> ‚É‘—M/–¼‘OÝ’è‚·‚é"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim‚É‚æ‚Á‚ĉðŽß‚³‚ê‚éˆø”(Motifƒo[ƒWƒ‡ƒ“):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim‚É‚æ‚Á‚ĉðŽß‚³‚ê‚éˆø”(neXtawƒo[ƒWƒ‡ƒ“):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim‚É‚æ‚Á‚ĉðŽß‚³‚ê‚éˆø”(Athenaƒo[ƒWƒ‡ƒ“):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\t<display> ‚Åvim‚ðŽÀs‚·‚é"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tŬ‰»‚µ‚½ó‘Ô‚Åvim‚ð‹N“®‚·‚é"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <color>\t”wŒiF‚É <color> ‚ðŽg‚¤(“¯‹`: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr "-foreground <color>\t‘OŒiF‚É <color> ‚ðŽg‚¤(“¯‹`: -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\t\tƒeƒLƒXƒg•\\ަ‚É <font> ‚ðŽg‚¤(“¯‹`: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\t‘¾Žš‚É <font> ‚ðŽg‚¤"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <for>\tŽÎ‘ÌŽš‚É <font> ‚ðŽg‚¤"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <geom>\t‰Šú”z’u‚É <geom> ‚ðŽg‚¤(“¯‹`: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <width>\t‹«ŠE‚Ì•‚ð <width> ‚É‚·‚é(“¯‹`: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <width> ƒXƒNƒ[ƒ‹ƒo[‚Ì•‚ð <width> ‚É‚·‚é(“¯‹`: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr ""
-#~ "-menuheight <height>\tƒƒjƒ…[ƒo[‚Ì‚‚³‚ð <height> ‚É‚·‚é(“¯‹`: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\t”½“]‰f‘œ‚ðŽg—p‚·‚é(“¯‹`: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t”½“]‰f‘œ‚ðŽg—p‚µ‚È‚¢(“¯‹`: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\t“Á’è‚ÌƒŠƒ\\[ƒX‚ðŽg—p‚·‚é"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim‚É‚æ‚Á‚ĉðŽß‚³‚ê‚éˆø”(GTK+ƒo[ƒWƒ‡ƒ“):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\t<display> ‚Åvim‚ðŽÀs‚·‚é(“¯‹`: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\tƒƒCƒ“ƒEƒBƒ“ƒhƒE‚ðŽ¯•Ê‚·‚éˆêˆÓ‚È–ðŠ„(role)‚ðÝ’è‚·‚é"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tˆÙ‚È‚éGTK widget‚ÅVim‚ðŠJ‚­"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "--echo-wid\t\tƒEƒBƒ“ƒhƒEID‚ð•W€o—Í‚Éo—Í‚·‚é"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <e‚̃^ƒCƒgƒ‹>\tVim‚ðeƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì’†‚Å‹N“®‚·‚é"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tˆÙ‚È‚éWin32 widget‚Ì“à•”‚ÉVim‚ðŠJ‚­"
-
-#~ msgid "No display"
-#~ msgstr "ƒfƒBƒXƒvƒŒƒC‚ªŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": ‘—M‚ÉŽ¸”s‚µ‚Ü‚µ‚½.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": ‘—M‚ÉŽ¸”s‚µ‚Ü‚µ‚½. ƒ[ƒJƒ‹‚ł̎Às‚ðŽŽ‚Ý‚Ä‚¢‚Ü‚·\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "%d ŒÂ (%d ŒÂ’†) ‚̃tƒ@ƒCƒ‹‚ð•ÒW‚µ‚Ü‚µ‚½"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "ƒfƒBƒXƒvƒŒƒC‚ª‚ ‚è‚Ü‚¹‚ñ: Ž®‚Ì‘—M‚ÉŽ¸”s‚µ‚Ü‚µ‚½.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Ž®‚Ì‘—M‚ÉŽ¸”s‚µ‚Ü‚µ‚½.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: –³Œø‚ȃR[ƒhƒy[ƒW‚Å‚·"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: IC‚Ì’l‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: ƒCƒ“ƒvƒbƒgƒRƒ“ƒeƒLƒXƒg‚Ì쬂Ɏ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: ƒCƒ“ƒvƒbƒgƒƒ\\ƒbƒh‚̃I[ƒvƒ“‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: Œx: IM‚Ì”j‰óƒR[ƒ‹ƒoƒbƒN‚ðÝ’è‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: ƒCƒ“ƒvƒbƒgƒƒ\\ƒbƒh‚͂ǂñ‚ȃXƒ^ƒCƒ‹‚àƒTƒ|[ƒg‚µ‚Ü‚¹‚ñ"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: ƒCƒ“ƒvƒbƒgƒƒ\\ƒbƒh‚Í my preedit type ‚ðƒTƒ|[ƒg‚µ‚Ü‚¹‚ñ"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚̈Æ‚ðXV’†‚ɃGƒ‰[‚ª”­¶‚µ‚Ü‚µ‚½"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr ""
-#~ "E833: %s ‚Í‚±‚̃o[ƒWƒ‡ƒ“‚ÌVim‚ŃTƒ|[ƒg‚µ‚Ä‚¢‚È‚¢Œ`Ž®‚ňƉ»‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚͈Ɖ»‚³‚ê‚Ä‚¢‚Ü‚·: \"%s\""
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "V‚µ‚¢ˆÃ†ƒL[‚ð“ü—Í‚µ‚½‚ ‚ƂɃeƒLƒXƒgƒtƒ@ƒCƒ‹‚ð•Û‘¶‚µ‚Ä‚¢‚È‚¢ê‡‚Í,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "V‚µ‚¢ˆÃ†ƒL[‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "ˆÃ†ƒL[‚ð•Ï‚¦‚½‚ ‚ƂɃeƒLƒXƒgƒtƒ@ƒCƒ‹‚ð•Û‘¶‚µ‚½ê‡‚Í, ƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚Æ"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚É“¯‚¶ˆÃ†ƒL[‚ðŽg‚¤‚½‚ß‚Éenter‚¾‚¯‚ð‰Ÿ‚µ‚Ä‚­‚¾‚³‚¢."
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "ƒXƒƒbƒvƒtƒ@ƒCƒ‹‚©‚çŽæ“¾‚µ‚½ˆÃ†ƒL[‚ðƒeƒLƒXƒgƒtƒ@ƒCƒ‹‚ÉŽg‚¢‚Ü‚·.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [‚±‚ÌVimƒo[ƒWƒ‡ƒ“‚ł͎g—p‚Å‚«‚Ü‚¹‚ñ]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "‚±‚̃ƒjƒ…[‚ðØ‚èŽæ‚é"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "ƒfƒBƒŒƒNƒgƒŠ‘I‘ðƒ_ƒCƒAƒƒO"
-
-#~ msgid "Save File dialog"
-#~ msgstr "ƒtƒ@ƒCƒ‹•Û‘¶ƒ_ƒCƒAƒƒO"
-
-#~ msgid "Open File dialog"
-#~ msgstr "ƒtƒ@ƒCƒ‹“Çžƒ_ƒCƒAƒƒO"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr ""
-#~ "E338: ƒRƒ“ƒ\\[ƒ‹ƒ‚[ƒh‚ł̓tƒ@ƒCƒ‹ƒuƒ‰ƒEƒU‚ðŽg‚¦‚Ü‚¹‚ñ, ‚²‚ß‚ñ‚È‚³‚¢"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: ƒtƒ@ƒCƒ‹‚ð•Û‘¶’†...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: I—¹‚µ‚Ü‚µ‚½.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "ƒGƒ‰[: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[ƒƒ‚ƒŠ(ƒoƒCƒg)] ‘Š„“–-‰ð•ú—Ê %<PRIu64>-%<PRIu64>, Žg—p—Ê %<PRIu64>, ƒs["
-#~ "ƒNŽž %<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[ŒÄo] ‘ re/malloc() ‰ñ” %<PRIu64>, ‘ free() ‰ñ” %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: s‚ª’·‚­‚È‚è‰ß‚¬‚Ü‚µ‚½"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: “à•”ƒGƒ‰[: lalloc(%<PRId64>,)"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: •s³‚È 'mouseshape' ‚Å‚·"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "ˆÃ†‰»—p‚̃L[‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "‚à‚¤ˆê“x“¯‚¶ƒL[‚ð“ü—Í‚µ‚Ä‚­‚¾‚³‚¢: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "ƒL[‚ªˆê’v‚µ‚Ü‚¹‚ñ"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Netbeans #2 ‚ÉÚ‘±‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Netbeans ‚ÉÚ‘±‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: NetBeans‚ÌÚ‘±î•ñƒtƒ@ƒCƒ‹‚̃AƒNƒZƒXƒ‚[ƒh‚É–â‘肪‚ ‚è‚Ü‚·: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "Netbeans ‚̃\\ƒPƒbƒg‚ð“Çž‚Ý"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: ƒoƒbƒtƒ@ %<PRId64> ‚Ì NetBeans Ú‘±‚ªŽ¸‚í‚ê‚Ü‚µ‚½"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: NetBeans‚Í‚±‚ÌGUI‚ɂ͑Ήž‚µ‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: NetBeans‚ÍŠù‚ÉÚ‘±‚µ‚Ä‚¢‚Ü‚·"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s ‚͓Ǟê—p‚Å‚· (‹­§‘ž‚É‚Í ! ‚ð’ljÁ)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Ž®•]‰¿‹@”\\‚ª–³Œø‚ɂȂÁ‚Ä‚¢‚Ü‚·"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "%<PRId64> s‚ð‰ð•ú’†"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: GUI‚Å‚Í 'term' ‚ð•ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: GUI‚ðƒXƒ^[ƒg‚·‚é‚É‚Í \":gui\" ‚ðŽg—p‚µ‚Ä‚­‚¾‚³‚¢"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: GTK+2 GUI‚ł͕ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: –³Œø‚ȃtƒHƒ“ƒg‚Å‚·"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: ƒtƒHƒ“ƒgƒZƒbƒg‚ð‘I‘ð‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: –³Œø‚ȃtƒHƒ“ƒgƒZƒbƒg‚Å‚·"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: ƒƒCƒhƒtƒHƒ“ƒg‚ð‘I‘ð‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: –³Œø‚ȃƒCƒhƒtƒHƒ“ƒg‚Å‚·"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: ƒ}ƒEƒX‚̓Tƒ|[ƒg‚³‚ê‚Ü‚¹‚ñ"
-
-#~ msgid "cannot open "
-#~ msgstr "ŠJ‚¯‚Ü‚¹‚ñ "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: ƒEƒBƒ“ƒhƒE‚ðŠJ‚¯‚Ü‚¹‚ñ!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Amigados‚̃o[ƒWƒ‡ƒ“ 2.04‚©‚»‚êˆÈ~‚ª•K—v‚Å‚·\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "%s ‚̃o[ƒWƒ‡ƒ“ %<PRId64> ‚ª•K—v‚Å‚·\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "NIL‚ðŠJ‚¯‚Ü‚¹‚ñ:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "쬂ł«‚Ü‚¹‚ñ "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim‚Í %d ‚ÅI—¹‚µ‚Ü‚·\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "ƒRƒ“ƒ\\[ƒ‹ƒ‚[ƒh‚ð•ÏX‚Å‚«‚Ü‚¹‚ñ?!\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ƒRƒ“ƒ\\[ƒ‹‚ł͂Ȃ¢??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: -f ƒIƒvƒVƒ‡ƒ“‚ŃVƒFƒ‹‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "Cannot execute "
-#~ msgstr "ŽÀs‚Å‚«‚Ü‚¹‚ñ "
-
-#~ msgid "shell "
-#~ msgstr "ƒVƒFƒ‹ "
-
-#~ msgid " returned\n"
-#~ msgstr " –ß‚è‚Ü‚µ‚½\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE ‚ª¬‚³‰ß‚¬‚Ü‚·."
-
-#~ msgid "I/O ERROR"
-#~ msgstr "“üo—̓Gƒ‰["
-
-#~ msgid "Message"
-#~ msgstr "ƒƒbƒZ[ƒW"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' ‚ª80‚ł͂Ȃ¢‚½‚ß, ŠO•”ƒRƒ}ƒ“ƒh‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: ƒvƒŠƒ“ƒ^‚Ì‘I‘ð‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "to %s on %s"
-#~ msgstr "%s ‚Ö (%s ã‚Ì)"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: –¢’m‚̃vƒŠƒ“ƒ^ƒIƒvƒVƒ‡ƒ“‚Å‚·: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: ˆóüƒGƒ‰[: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "ˆóü‚µ‚Ä‚¢‚Ü‚·: '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: •¶ŽšƒZƒbƒg–¼ \"%s\" ‚Í•s³‚Å‚· (ƒtƒHƒ“ƒg–¼ \"%s\")"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: '%c' ‚Í•s³‚È•¶Žš‚Å‚· (ƒtƒHƒ“ƒg–¼ \"%s\")"
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: 2d‚̃VƒOƒiƒ‹‚Ì‚½‚ß, I—¹‚µ‚Ü‚·\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: ’v–½“IƒVƒOƒiƒ‹ %s ‚ðŒŸ’m‚µ‚Ü‚µ‚½\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: ’v–½“IƒVƒOƒiƒ‹‚ðŒŸ’m‚µ‚Ü‚µ‚½\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "XƒT[ƒo‚Ö‚ÌÚ‘±‚É %<PRId64> ƒ~ƒŠ•b‚©‚©‚è‚Ü‚µ‚½"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: X ‚̃Gƒ‰[‚ðŒŸo‚µ‚Ü‚µ‚½r\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "X display ‚̃`ƒFƒbƒN‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "X display ‚Ì open ‚ªƒ^ƒCƒ€ƒAƒEƒg‚µ‚Ü‚µ‚½"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "sh ƒVƒFƒ‹‚ðŽÀs‚Å‚«‚Ü‚¹‚ñ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ƒpƒCƒv‚ð쬂ł«‚Ü‚¹‚ñ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "fork ‚Å‚«‚Ü‚¹‚ñ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ƒRƒ}ƒ“ƒh‚ð’†’f‚µ‚Ü‚µ‚½\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP ‚ªICEÚ‘±‚ðŽ¸‚¢‚Ü‚µ‚½"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "X display ‚Ì open ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP ‚ªsave-yourself—v‹‚ðˆ—‚µ‚Ä‚¢‚Ü‚·"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP ‚ªÚ‘±‚ðŠJŽn‚µ‚Ä‚¢‚Ü‚·"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ICEÚ‘±‚ªŽ¸”s‚µ‚½‚悤‚Å‚·"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection‚ªŽ¸”s‚µ‚Ü‚µ‚½: %s"
-
-#~ msgid "At line"
-#~ msgstr "s"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "vim32.dll ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "VIM Error"
-#~ msgstr "VIMƒGƒ‰["
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "DLL‚©‚çŠÖ”ƒ|ƒCƒ“ƒ^‚ðŽæ“¾‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "shell returned %d"
-#~ msgstr "ƒVƒFƒ‹‚ªƒR[ƒh %d ‚ÅI—¹‚µ‚Ü‚µ‚½"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: ƒCƒxƒ“ƒg %s ‚ðŒŸ’m\n"
-
-#~ msgid "close"
-#~ msgstr "•‚¶‚é"
-
-#~ msgid "logoff"
-#~ msgstr "ƒƒOƒIƒt"
-
-#~ msgid "shutdown"
-#~ msgstr "ƒVƒƒƒbƒgƒ_ƒEƒ“"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: ƒRƒ}ƒ“ƒh‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "VIMRUN.EXE‚ª $PATH ‚Ì’†‚ÉŒ©‚‚©‚è‚Ü‚¹‚ñ.\n"
-#~ "ŠO•”ƒRƒ}ƒ“ƒh‚ÌI—¹Œã‚Ɉꎞ’âŽ~‚ð‚µ‚Ü‚¹‚ñ.\n"
-#~ "Ú×‚Í :help win32-vimrun ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢."
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim‚ÌŒx"
-
-#~ msgid "Error file"
-#~ msgstr "ƒGƒ‰[ƒtƒ@ƒCƒ‹"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: “™‰¿ƒNƒ‰ƒX‚ðŠÜ‚ÞNFA\\’z‚ÉŽ¸”s‚µ‚Ü‚µ‚½!"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (NFA) Œ»Ý‰¡’f’†‚̃uƒ‰ƒ“ƒ`‚É\\•ª‚ȃƒ‚ƒŠ‚ðŠ„‚è“–‚Ä‚ç‚ê‚Ü‚¹‚ñ!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Œx: ’PŒêƒŠƒXƒg \"%s_%s.spl\" ‚¨‚æ‚Ñ \"%s_ascii.spl\" ‚ÍŒ©‚‚©‚è‚Ü‚¹‚ñ"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "%s “à‚̕ϊ·‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: ƒƒ‚ƒŠ‚ª‘«‚è‚È‚¢‚Ì‚ÅA’PŒêƒŠƒXƒg‚Í•sŠ®‘S‚Å‚·"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: ƒ^ƒOƒtƒ@ƒCƒ‹‚̃pƒX‚ª %s ‚ÉØ‚èŽÌ‚Ä‚ç‚ê‚Ü‚µ‚½\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "V‚µ‚¢ƒVƒFƒ‹‚ð‹N“®‚µ‚Ü‚·\n"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "‹ó‚Ì‘I‘ð—̈æ‚Ì‚©‚í‚è‚ÉCUT_BUFFER0‚ªŽg—p‚³‚ê‚Ü‚µ‚½"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "‰Â”\\‚ȃAƒ“ƒhƒD‚Í‚ ‚è‚Ü‚¹‚ñ: ‚Ƃ肠‚¦‚¸‘±‚¯‚Ü‚·"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr ""
-#~ "E832: ”ñˆÃ†‰»ƒtƒ@ƒCƒ‹‚ªˆÃ†‰»‚³‚ꂽƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ðŽg‚Á‚Ă܂·: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: ˆÃ†‰»‚³‚ꂽƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚̉ð“ǂɎ¸”s‚µ‚Ü‚µ‚½: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: ƒAƒ“ƒhƒDƒtƒ@ƒCƒ‹‚ªˆÃ†‰»‚³‚ê‚Ä‚¢‚Ü‚·: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16/32 ƒrƒbƒg GUI ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 64 ƒrƒbƒg GUI ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 ƒrƒbƒg GUI ”Å"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " in Win32s ƒ‚[ƒh"
-
-#~ msgid " with OLE support"
-#~ msgstr " with OLE ƒTƒ|[ƒg"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 64 ƒrƒbƒg ƒRƒ“ƒ\\[ƒ‹ ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 ƒrƒbƒg ƒRƒ“ƒ\\[ƒ‹ ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16 ƒrƒbƒg ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 ƒrƒbƒg MS-DOS ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 ƒrƒbƒg MS-DOS ”Å"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X (unix) Ӂ"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X Ӂ"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS Ӂ"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "OpenVMS Ӂ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Big Ӂ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "’Êí ”Å "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Small Ӂ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Tiny Ӂ "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "with GTK2-GNOME GUI."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "with GTK2 GUI."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "with X11-Motif GUI."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "with X11-neXtaw GUI."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "with X11-Athena GUI."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "with Photon GUI."
-
-#~ msgid "with GUI."
-#~ msgstr "with GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "with Carbon GUI."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "with Cocoa GUI."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "with (ƒNƒ‰ƒVƒbƒN) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ƒVƒXƒeƒ€ gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " ƒ†[ƒU gvimrc: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr " ‘æ2ƒ†[ƒU gvimrc: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr " ‘æ3ƒ†[ƒU gvimrc: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ƒVƒXƒeƒ€ƒƒjƒ…[: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "ƒRƒ“ƒpƒCƒ‰: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "Úׂ̓ƒjƒ…[‚Ì ƒwƒ‹ƒv¨ŒÇŽ™ ‚ðŽQÆ‚µ‚ĉº‚³‚¢ "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "ƒ‚[ƒh–³‚ÅŽÀs’†, ƒ^ƒCƒv‚µ‚½•¶Žš‚ª‘}“ü‚³‚ê‚Ü‚·"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "ƒƒjƒ…[‚Ì •ÒW¨‘S‘Ìݒ訑}“ü(‰SŽÒ)ƒ‚[ƒhØ‘Ö "
-
-#~ msgid " for two modes "
-#~ msgstr " ‚Ń‚[ƒh—L‚É "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "ƒƒjƒ…[‚Ì •ÒW¨‘S‘ÌÝ’è¨ViŒÝŠ·ƒ‚[ƒhØ‘Ö "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " ‚ÅVim‚Æ‚µ‚Ä“®ì "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr " Œx: Windows 95/98/Me ‚ðŒŸo "
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr " ÚׂÈî•ñ‚Í :help windows95<Enter> "
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "•¡”‚ÌVim‚Å•ÒW‚·‚é (&M)"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "1‚‚ÌVim‚Å•ÒW‚·‚é (&V)"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Vim‚Å·•ª‚ð•\\ަ‚·‚é"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Vim‚Å•ÒW‚·‚é (&V)"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "‹N“®Ï‚ÌVim‚Å•ÒW‚·‚é - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "‘I‘ð‚µ‚½ƒtƒ@ƒCƒ‹‚ðVim‚Å•ÒW‚·‚é"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "ƒvƒƒZƒX‚Ì쬂Ɏ¸”s: gvim‚ªŠÂ‹«•Ï”PATHã‚É‚ ‚é‚©Šm”F‚µ‚Ä‚­‚¾‚³‚¢!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "gvimext.dll ƒGƒ‰["
-
-#~ msgid "Path length too long!"
-#~ msgstr "ƒpƒX‚ª’·‚·‚¬‚Ü‚·!"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: –¢’m‚̃tƒHƒ“ƒgƒZƒbƒg: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: –¢’m‚̃tƒHƒ“ƒg: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: ƒtƒHƒ“ƒg \"%s\" ‚͌Œ蕂ł͂ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: ƒ‰ƒCƒuƒ‰ƒŠ‚ÌŠÖ” %s ‚ðƒ[ƒh‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: ƒwƒuƒ‰ƒCŒê‚ÍŽg—p•s‰Â”\\‚Å‚·: ƒRƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: ƒyƒ‹ƒVƒAŒê‚ÍŽg—p•s‰Â”\\‚Å‚·: ƒRƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E800: ƒAƒ‰ƒrƒAŒê‚ÍŽg—p•s‰Â”\\‚Å‚·: ƒRƒ“ƒpƒCƒ‹Žž‚É–³Œø‚É‚³‚ê‚Ä‚¢‚Ü‚·\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: %s ‚Æ‚¢‚¤–¼‘O‚Ì“o˜^‚³‚ꂽƒT[ƒo‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: ƒfƒBƒXƒvƒŒƒC‚ðŠJ‚¯‚Ü‚¹‚ñ"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: –³Œø‚ÈŽ®‚ðŽó‚¯Žæ‚è‚Ü‚µ‚½"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: —̈悪•ی삳‚ê‚Ä‚¢‚é‚Ì‚Å, •ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans ‚͓Ǟê—pƒtƒ@ƒCƒ‹‚ð•ÏX‚·‚邱‚Æ‚ð‹–‚µ‚Ü‚¹‚ñ"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "ˆÃ†ƒL[‚ª•K—v‚Å‚·: \"%s\""
-
-#~ msgid "empty keys are not allowed"
-#~ msgstr "‹ó‚̃L[‚Í‹–‰Â‚³‚ê‚Ä‚¢‚Ü‚¹‚ñ"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "Ž«‘‚̓ƒbƒN‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#~ msgid "list is locked"
-#~ msgstr "ƒŠƒXƒg‚̓ƒbƒN‚³‚ê‚Ä‚¢‚Ü‚·"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "Ž«‘‚ɃL[ '%s' ‚ð’ljÁ‚·‚é‚̂Ɏ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "ƒCƒ“ƒfƒbƒNƒX‚Í %s ‚ł͂Ȃ­®”‚©ƒXƒ‰ƒCƒX‚É‚µ‚Ä‚­‚¾‚³‚¢"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr ""
-#~ "str() ‚à‚µ‚­‚Í unicode() ‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "bytes() ‚à‚µ‚­‚Í str() ‚̃Cƒ“ƒXƒ^ƒ“ƒX‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr "long() ‚©‚»‚ê‚Ö•ÏŠ·‰Â”\\‚È‚à‚Ì‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr "int() ‚©‚»‚ê‚Ö•ÏŠ·‰Â”\\‚È‚à‚Ì‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "CŒ¾Œê‚Ì int Œ^‚Æ‚µ‚Ă͒l‚ª‘å‚«‰ß‚¬‚Ü‚·"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "CŒ¾Œê‚Ì int Œ^‚Æ‚µ‚Ă͒l‚ª¬‚³‰ß‚¬‚Ü‚·"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "”’l‚Í 0 ‚æ‚è‘å‚«‚­‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "”’l‚Í 0 ‚©‚»‚êˆÈã‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "OutputObject‘®«‚ðÁ‚¹‚Ü‚¹‚ñ"
-
-#~ msgid "invalid attribute: %s"
-#~ msgstr "–³Œø‚È‘®«‚Å‚·: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: I/OƒIƒuƒWƒFƒNƒg‚̉Šú‰»ƒGƒ‰["
-
-#~ msgid "failed to change directory"
-#~ msgstr "Ž«‘‚Ì•ÏX‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "imp.find_module() ‚ª %s ‚ð•Ô‚µ‚Ü‚µ‚½ (Šú‘Ò’l: 2 —v‘f‚̃^ƒvƒ‹)"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr "impl.find_module() ‚ª %d —v‘f‚̃^ƒvƒ‹‚ð•Ô‚µ‚Ü‚µ‚½ (Šú‘Ò’l: 2)"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "“à•”ƒGƒ‰[: imp.find_module ‚ª NULL ‚ðŠÜ‚Þƒ^ƒvƒ‹‚ð•Ô‚µ‚Ü‚µ‚½"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "vim.Dictionary‘®«‚ÍÁ‚¹‚Ü‚¹‚ñ"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "ŒÅ’肳‚ê‚½Ž«‘‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "‘®« %s ‚ÍÝ’è‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "ƒCƒeƒŒ[ƒVƒ‡ƒ“’†‚É hashtab ‚ª•ÏX‚³‚ê‚Ü‚µ‚½"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr "ƒV[ƒPƒ“ƒX‚Ì—v‘f”‚É‚Í 2 ‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚Ü‚µ‚½‚ª %d ‚Å‚µ‚½"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "ƒŠƒXƒg‚̃Rƒ“ƒXƒgƒ‰ƒNƒ^‚̓L[ƒ[ƒhˆø”‚ðŽó‚¯•t‚¯‚Ü‚¹‚ñ"
-
-#~ msgid "list index out of range"
-#~ msgstr "ƒŠƒXƒg”͈͊O‚̃Cƒ“ƒfƒbƒNƒX‚Å‚·"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "“à•”ƒGƒ‰[: vim‚ÌƒŠƒXƒg—v‘f %d ‚̎擾‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "ƒŠƒXƒg‚Ö‚Ì—v‘f’ljÁ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "“à•”ƒGƒ‰[: vim‚ÌƒŠƒXƒg—v‘f %d ‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "“à•”ƒGƒ‰[: ƒŠƒXƒg‚Ö‚Ì—v‘f’ljÁ‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "vim.List ‘®«‚ÍÁ‚¹‚Ü‚¹‚ñ"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "ŒÅ’肳‚ꂽƒŠƒXƒg‚Í•ÏX‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "–³–¼ŠÖ” %s ‚Í‘¶Ý‚µ‚Ü‚¹‚ñ"
-
-#~ msgid "function %s does not exist"
-#~ msgstr "ŠÖ” %s ‚ª‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "ŠÖ”‚̃Rƒ“ƒXƒgƒ‰ƒNƒ^‚̓L[ƒ[ƒhˆø”‚ðŽó‚¯•t‚¯‚Ü‚¹‚ñ"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "ŠÖ” %s ‚ÌŽÀs‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "ƒEƒBƒ“ƒhƒE‚ðØŠ·’†‚É–â‘肪”­¶‚µ‚Ü‚µ‚½"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "ƒOƒ[ƒoƒ‹ƒIƒvƒVƒ‡ƒ“ %s ‚ÌÝ’è‰ðœ‚͂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "ƒOƒ[ƒoƒ‹‚È’l‚Ì–³‚¢ƒIƒvƒVƒ‡ƒ“ %s ‚ÌÝ’è‰ðœ‚͂ł«‚Ü‚¹‚ñ"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "휂³‚ꂽƒ^ƒu‚ðŽQÆ‚µ‚悤‚Æ‚µ‚Ü‚µ‚½"
-
-#~ msgid "no such tab page"
-#~ msgstr "‚»‚̂悤‚ȃ^ƒuƒy[ƒW‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "휂³‚ꂽƒEƒBƒ“ƒhƒE‚ðŽQÆ‚µ‚悤‚Æ‚µ‚Ü‚µ‚½"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "“Çžê—p‘®«: ƒoƒbƒtƒ@["
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "ƒJ[ƒ\\ƒ‹ˆÊ’u‚ªƒoƒbƒtƒ@‚ÌŠO‘¤‚Å‚·"
-
-#~ msgid "no such window"
-#~ msgstr "‚»‚̂悤‚ȃEƒBƒ“ƒhƒE‚Í‚ ‚è‚Ü‚¹‚ñ"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "휂³‚ꂽƒoƒbƒtƒ@‚ðŽQÆ‚µ‚悤‚Æ‚µ‚Ü‚µ‚½"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "ƒoƒbƒtƒ@–¼‚Ì•ÏX‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "ƒ}[ƒN–¼‚Í1•¶Žš‚̃Aƒ‹ƒtƒ@ƒxƒbƒg‚łȂ¯‚ê‚΂Ȃè‚Ü‚¹‚ñ"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "vim.BufferƒIƒuƒWƒFƒNƒg‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "Žw’肳‚ꂽƒoƒbƒtƒ@ %d ‚Ö‚ÌØ‚è‘Ö‚¦‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "vim.WindowƒIƒuƒWƒFƒNƒg‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "Œ»Ý‚̃^ƒu‚ɂ͎w’肳‚ꂽƒEƒBƒ“ƒhƒE‚ª‚ ‚è‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "Žw’肳‚ꂽƒEƒBƒ“ƒhƒE‚ÉØ‚è‘Ö‚¦‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "vim.TabPageƒIƒuƒWƒFƒNƒg‚ªŠú‘Ò‚³‚ê‚Ä‚¢‚é‚Ì‚É %s ‚Å‚µ‚½"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "Žw’肳‚ꂽƒ^ƒuƒy[ƒW‚ÉØ‚è‘Ö‚¦‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "failed to run the code"
-#~ msgstr "ƒR[ƒh‚ÌŽÀs‚ÉŽ¸”s‚µ‚Ü‚µ‚½"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Ž®•]‰¿‚Í—LŒø‚ÈpythonƒIƒuƒWƒFƒNƒg‚ð•Ô‚µ‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: •Ô‚³‚ꂽpythonƒIƒuƒWƒFƒNƒg‚ðvim‚Ì’l‚ɕϊ·‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "%s vim‚ÌŽ«‘Œ^‚ɕϊ·‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "%s ‚ðvim‚Ì\\‘¢‘̂ɕϊ·‚Å‚«‚Ü‚¹‚ñ"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "“à•”ƒGƒ‰[: NULLŽQÆ‚ª“n‚³‚ê‚Ü‚µ‚½"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "“à•”ƒGƒ‰[: –³Œø‚È’lŒ^‚Å‚·"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "ƒpƒXƒtƒbƒN‚ÌÝ’è‚ÉŽ¸”s‚µ‚Ü‚µ‚½: sys.path_hooks ‚ªƒŠƒXƒg‚ł͂ ‚è‚Ü‚¹‚ñ\n"
-#~ "‚·‚®‚ɉº‹L‚ðŽÀŽ{‚µ‚Ä‚­‚¾‚³‚¢:\n"
-#~ "- vim.path_hooks ‚ð sys.path_hooks ‚֒ljÁ\n"
-#~ "- vim.VIM_SPECIAL_PATH ‚ð sys.path ‚֒ljÁ\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "ƒpƒX‚ÌÝ’è‚ÉŽ¸”s‚µ‚Ü‚µ‚½: sys.path ‚ªƒŠƒXƒg‚ł͂ ‚è‚Ü‚¹‚ñ\n"
-#~ "‚·‚®‚É vim.VIM_SPECIAL_PATH ‚ð sys.path ‚ɒljÁ‚µ‚Ä‚­‚¾‚³‚¢"
diff --git a/src/nvim/po/ko.UTF-8.po b/src/nvim/po/ko.UTF-8.po
index 149286eda8..7afa507edb 100644
--- a/src/nvim/po/ko.UTF-8.po
+++ b/src/nvim/po/ko.UTF-8.po
@@ -2648,11 +2648,6 @@ msgstr "E49: 스í¬ë¡¤ í¬ê¸°ê°€ 잘못ë˜ì—ˆìŠµë‹ˆë‹¤"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4224,10 +4219,6 @@ msgstr "%4ld 줄:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ìž˜ëª»ëœ ë ˆì§€ìŠ¤í„° ì´ë¦„: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "메시지 관리ìž: Bram Moolenaar <Bram@vim.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "중단: "
diff --git a/src/nvim/po/ko.po b/src/nvim/po/ko.po
deleted file mode 100644
index b6aaf37bbb..0000000000
--- a/src/nvim/po/ko.po
+++ /dev/null
@@ -1,7858 +0,0 @@
-# Korean translation for Vim
-#
-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
-#
-# Generated from ko.UTF-8, DO NOT EDIT.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: vim 7.3\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2010-02-18 09:49+0900\n"
-"Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
-"Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=euc-kr\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "¿É¼Ç ÀÎÀÚ µÚ¿¡ ¾²·¹±â °ª"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr ""
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[À§Ä¡ ¸ñ·Ï]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Quickfix ¸ñ·Ï]"
-
-#: ../buffer.c:94
-#, fuzzy
-msgid "E855: Autocommands caused command to abort"
-msgstr "E812: Autocommand°¡ ¹öÆÛ³ª ¹öÆÛÀ̸§À» ¹Ù²Ù¾ú½À´Ï´Ù"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: ¹öÆÛ¸¦ ÇÒ´çÇÒ ¼ö ¾ø¾î¼­ ³¡³À´Ï´Ù..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: ¹öÆÛ¸¦ ÇÒ´çÇÒ ¼ö ¾ø¾î¼­ ´Ù¸¥ °É »ç¿ëÇÕ´Ï´Ù..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: ³»·ÁÁø ¹öÆÛ°¡ ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: Áö¿öÁø ¹öÆÛ°¡ ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: ¿ÏÀüÈ÷ Áö¿öÁø ¹öÆÛ°¡ ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "¹öÆÛ ÇÑ °³°¡ ³»·ÁÁ³½À´Ï´Ù"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "¹öÆÛ %d °³°¡ ³»·ÁÁ³½À´Ï´Ù"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "¹öÆÛ ÇÑ °³°¡ Áö¿öÁ³½À´Ï´Ù"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "¹öÆÛ %d °³°¡ Áö¿öÁ³½À´Ï´Ù"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "¹öÆÛ ÇÑ °³°¡ ¿ÏÀüÈ÷ Áö¿öÁ³½À´Ï´Ù"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "¹öÆÛ %d°³°¡ ¿ÏÀüÈ÷ Áö¿öÁ³½À´Ï´Ù"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: ¸¶Áö¸· ¹öÆÛ¸¦ ³»¸± ¼ö ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: ¹Ù²ï ¹öÆÛ¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: ³ª¿­µÈ ¹öÆÛ°¡ ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: ¹öÆÛ %<PRId64>ÀÌ(°¡) Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ¸¶Áö¸· ¹öÆÛÀÔ´Ï´Ù"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: ù ¹øÂ° ¹öÆÛÀÔ´Ï´Ù"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr ""
-"E89: ¹öÆÛ %<PRId64>À»(¸¦) ¸¶Áö¸·À¸·Î °íÄ£ µÚ ÀúÀåÇÏÁö ¾Ê¾Ò½À´Ï´Ù (µ¤¾î¾²·Á"
-"¸é ! ´õÇϱâ)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: °æ°í: ÆÄÀÏ À̸§ ¸ñ·ÏÀÌ ³ÑÃÆ½À´Ï´Ù"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: ¹öÆÛ %<PRId64>À»(¸¦) ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: %sÀ»(¸¦) Çϳª ÀÌ»ó ã¾Ò½À´Ï´Ù"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: %s¿Í ¸Â´Â ¹öÆÛ°¡ ¾ø½À´Ï´Ù"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "%<PRId64> ÁÙ"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: ÀÌ À̸§À» °¡Áø ¹öÆÛ°¡ ÀÌ¹Ì ÀÖ½À´Ï´Ù"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [¹Ù²ñ]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[°íÄ¡Áö ¾Ê¾ÒÀ½]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[»õ ÆÄÀÏ]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[Àб⠿¡·¯]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[Àбâ Àü¿ë]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[Àбâ Àü¿ë]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 ÁÙ --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> ÁÙ --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "%<PRId64> / %<PRId64> ÁÙ --%d%%-- Ä­ "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[À̸§ ¾øÀ½]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "µµ¿ò¸»"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[µµ¿ò¸»]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[¹Ì¸® º¸±â]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "¸ðµÎ"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "¹Ù´Ú"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "²À´ë±â"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# ¹öÆÛ ¸ñ·Ï:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[Scratch]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- ±âÈ£ ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "%s¿¡ ´ëÇÑ ±âÈ£:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ÁÙ=%<PRId64> id=%d À̸§=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: ÄÝ·ÐÀÌ ¾ø½À´Ï´Ù"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: ÀÌ»óÇÑ ¸ðµå"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: ¼ýÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: ÀÌ»óÇÑ ¹éºÐÀ²"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: %<PRId64>°³ ÀÌ»óÀÇ ¹öÆÛ¿¡ ´ëÇØ¼­´Â diff¸¦ ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: Àӽà ÆÄÀÏÀ» Àаųª ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: diff¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: patch °á°ú¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: diff Ãâ·ÂÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: ÇöÀç ¹öÆÛ´Â diff »óŰ¡ ¾Æ´Õ´Ï´Ù"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ¼öÁ¤ °¡´ÉÇÑ diff »óÅ ¹öÆÛ´Â ¾ø½À´Ï´Ù"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: ´Ù¸¥ ¹öÆÛÁß¿¡ diff »óÅÂÀÎ °Ô ¾ø½À´Ï´Ù"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr ""
-"E101: µÎ°³ ÀÌ»óÀÇ ¹öÆÛ°¡ diff »óÅ¿©¼­ ¾î¶² °ÍÀ» ½á¾ßÇÒ Áö ¾Ë ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: \"%s\" ¹öÆÛ¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: \"%s\" ¹öÆÛ´Â diff »óŰ¡ ¾Æ´Õ´Ï´Ù"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: ¹öÆÛ°¡ ¸ð¸£´Â »çÀÌ¿¡ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: digraph¿¡´Â EscapeÀ» ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: Ű¸Ê ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: ºÒ·¯µéÀÎ ÆÄÀÏ¿¡¼­ :loadkeymapÀ» »ç¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: Ű¸Ê ¿£Æ®¸®°¡ ºñ¾îÀÖÀ½"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " ³¹¸» ¿Ï¼º (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ¸ðµå (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " Àüü ÁÙ ¿Ï¼º (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " ÆÄÀÏ À̸§ ¿Ï¼º (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " ÅÂ±× ¿Ï¼º (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " °æ·Î ÆÐÅÏ ¿Ï¼º (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " Á¤ÀÇ ¿Ï¼º (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Dictionary ¿Ï¼º (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " ¹é°ú»çÀü ¿Ï¼º (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " ¸í·ÉÇà ¿Ï¼º (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " »ç¿ëÀÚ Á¤ÀÇ ¿Ï¼º (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " Omni ¿Ï¼º (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ´Ü¾î Á¦¾È (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " ³¹¸» ·ÎÄà ¿Ï¼º (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "´Ü¶ôÀÇ ¸¶Áö¸· ¸¸³²"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: Completion ±â´ÉÀÌ Ã¢À» ¹Ù²Ù¾ú½À´Ï´Ù"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: Completion ±â´ÉÀÌ ¹®ÀÚ¿­À» Áö¿ü½À´Ï´Ù"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "'dictionary' ¿É¼ÇÀÌ ºñ¾ú½À´Ï´Ù"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "'thesaurus' ¿É¼ÇÀÌ ºñ¾ú½À´Ï´Ù"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "»çÀü ã´Â Áß: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (³¢¿ö³Ö±â) ½ºÅ©·Ñ (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (¹Ù²Þ) ½ºÅ©·Ñ (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "ã´Â Áß: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "ÅÂ±× Ã£´Â Áß."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " ´õÇϱâ"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- ã´Â Áß..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "¿ø·¡´ë·Î º¹±¸"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "´Ù¸¥ ÁÙ¿¡ ³¹¸»"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "The only match"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "match %d of %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "match %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: ':let'¿¡ ¸ð¸£´Â ±ÛÀÚ"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: ¸ñ·Ï ¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³²: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Á¤ÀÇ ¾È µÈ º¯¼ö: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: ']'ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s ÀÎÀÚ´Â ListÀ̾î¾ß ÇÕ´Ï´Ù"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s ÀÎÀÚ´Â List ȤÀº Dictionary¿©¾ß ÇÕ´Ï´Ù"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Dictionary¿¡ ºó ۸¦ ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: List°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: Dictionary°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: ÇÔ¼ö¿¡ ³Ê¹« ¸¹Àº ÀÎÀÚ ³Ñ±è: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary¿¡ ۰¡ ¾øÀ½: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: ÇÔ¼ö %sÀÌ(°¡) ÀÌ¹Ì ÀÖ½À´Ï´Ù, ¹Ù²Ù·Á¸é !À» ´õÇϼ¼¿ä"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: ÀÌ¹Ì Dictionary Ç׸ñÀÌ ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: Funcref°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Dictionary¿¡ [:]À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: %s=¿¡ ´ëÇÑ À߸øµÈ º¯¼öÇü"
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: ¸ð¸£´Â ÇÔ¼ö: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: ºñÁ¤»óÀûÀÎ º¯¼ö ¸í: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: Float¸¦ StringÀ¸·Î »ç¿ë"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: List Ç׸ñº¸´Ù ÀûÀº ´ë»ó"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: List Ç׸ñº¸´Ù ¸¹Àº ´ë»ó"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "º¯¼ö ¸ñ·Ï¿¡ Áߺ¹µÈ ;"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: %s º¯¼ö ¸ñ·ÏÀ» ³ª¿­ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: List³ª Dictionary¸¸ »öÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:]Àº ¸¶Áö¸·¿¡ À§Ä¡ÇØ¾ß ÇÕ´Ï´Ù"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:]Àº List °ªÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: List °ªÀÌ ´ë»óº¸´Ù ¸¹Àº Ç׸ñÀ» °¡Áö°í ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: List °ªÀÌ ÃæºÐÇÑ Ç׸ñÀ» °¡Áö°í ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for µÚ¿¡ \"in\"°¡ ¾ø½À´Ï´Ù"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: °ýÈ£ ¾øÀ½: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: ÀÌ·± º¯¼ö ¾øÀ½: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: Àá±Ý(ÇØÁ¦)Çϱ⿡ º¯¼ö°¡ ³Ê¹« ±íÀÌ ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' µÚ¿¡ ':'ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: List´Â List¿Í¸¸ ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: List¿¡ ´ëÇÑ À߸øµÈ µ¿ÀÛ"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Dictionary´Â Dictionary¿Í¸¸ ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Dictionary¿¡ ´ëÇÑ À߸øµÈ µ¿ÀÛ"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Funcref´Â Funcref¿Í¸¸ ºñ±³ÇÒ ¼ö ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Funcrefs¿¡ ´ëÇÑ À߸øµÈ µ¿ÀÛ"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Float¿¡ '%'´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: ')'°¡ ¾ø½À´Ï´Ù"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: Funcref¸¦ »öÀÎÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: ¿É¼Ç À̸§ ¾øÀ½: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: ¸ð¸£´Â ¿É¼Ç: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: µû¿ÈÇ¥ ¾øÀ½: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: µû¿ÈÇ¥ ¾øÀ½: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: List¿¡ ÄÞ¸¶ ´©¶ô: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: List ³¡¿¡ ']' ´©¶ô: %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Dictionary¿¡ ÄÝ·Ð ´©¶ô: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Dictionary¿¡ Áߺ¹µÈ Ű: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Dictionary¿¡ ÄÞ¸¶ ´©¶ô: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Dictionary ³¡¿¡ '}' ´©¶ô: %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: º¯¼ö°¡ Ç¥½ÃÇϱ⿡ ³Ê¹« ±íÀÌ ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: ÇÔ¼ö %s¿¡ ³Ê¹« ¸¹Àº ÀÎÀÚ°¡ Àü´ÞµÇ¾ú½À´Ï´Ù"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: ÇÔ¼ö %s(À¸)·Î À߸øµÈ ÀÎÀÚ°¡ ³Ñ°ÜÁ³½À´Ï´Ù"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: ¸ð¸£´Â ÇÔ¼ö: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: ÇÔ¼ö¿¡ ÀûÀº ÀÎÀÚ ³Ñ±è: %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: ½ºÅ©¸³Æ® ÄÜÅØ½ºÆ® ¹Û¿¡¼­ <SID> »ç¿ë: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Dictionary¾øÀÌ »çÀüÇÔ¼ö°¡ ºÒ·ÁÁü: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: Number ȤÀº Float°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:7503
-#, fuzzy
-msgid "add() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: ³Ê¹« ¸¹Àº ÀÎÀÚ"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete()Àº ÀÔ·Â ¸ðµå¿¡¼­¸¸ »ç¿ëµÉ ¼ö ÀÖ½À´Ï´Ù"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "È®ÀÎ(&O)"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: ۰¡ ÀÌ¹Ì Á¸ÀçÇÔ: %s"
-
-#: ../eval.c:8692
-#, fuzzy
-msgid "extend() argument"
-msgstr "--cmd ÀÎÀÚ"
-
-#: ../eval.c:8915
-#, fuzzy
-msgid "map() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:8916
-#, fuzzy
-msgid "filter() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ÁÙ: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: ¸ð¸£´Â ÇÔ¼ö: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore()°¡ inputsave()º¸´Ù ¸¹ÀÌ ºÒ·ÁÁ³½À´Ï´Ù"
-
-#: ../eval.c:10771
-#, fuzzy
-msgid "insert() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: ¹üÀ§°¡ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: len()¿¡ À߸øµÈ Çü"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: Stride°¡ 0"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: ½ÃÀÛÀ§Ä¡°¡ ³¡À» Áö³ªÄ§"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<ºñ¾îÀÖÀ½>"
-
-#: ../eval.c:12282
-#, fuzzy
-msgid "remove() argument"
-msgstr "--cmd ÀÎÀÚ"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ³Ê¹« ¸¹Àº ½Éº¼¸¯ ¸µÅ© (¹Ýº¹¼øÈ¯?)"
-
-#: ../eval.c:12593
-#, fuzzy
-msgid "reverse() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "sort() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Á¤·Ä ºñ±³ ±â´ÉÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Á¤·Ä ºñ±³ ±â´ÉÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(À߸øµÇ¾ú½À´Ï´Ù)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: Àӽà ÆÄÀÏ ¾²±â ¿¡·¯"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: Float¸¦ Number·Î »ç¿ë"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: Funcref¸¦ Number·Î »ç¿ë"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: List¸¦ Number·Î »ç¿ë"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Dictionary¸¦ Number·Î »ç¿ë"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: Funcref¸¦ StringÀ¸·Î »ç¿ë"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: List¸¦ StringÀ¸·Î »ç¿ë"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: Dictionary¸¦ StringÀ¸·Î »ç¿ë"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: º¯¼ö Çü ´Ù¸§: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: º¯¼ö %s¸¦ »èÁ¦ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Funcref º¯¼ö¸íÀº ´ë¹®ÀÚ·Î ½ÃÀÛÇØ¾ß ÇÔ: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: º¯¼ö¸íÀÌ ÀÌ¹Ì ÀÖ´Â ÇÔ¼ö¸í°ú Ãæµ¹: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: °ªÀÌ Àá°ÜÀÖÀ½: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "¸ð¸§"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: %s °ªÀ» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: º¹»çÇϱ⿡ º¯¼ö°¡ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: Á¤ÀÇ ¾È µÈ ÇÔ¼ö: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: '('°¡ ¾øÀ½: %s"
-
-#: ../eval.c:17293
-#, fuzzy
-msgid "E862: Cannot use g: here"
-msgstr "E284: IC °ªÀ» ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: À߸øµÈ ÀÎÀÚ: %s"
-
-#: ../eval.c:17323
-#, fuzzy, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "Áߺ¹µÈ ÇÊµå ¸í: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: :endfunctionÀÌ ¾ø½À´Ï´Ù"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: ÇÔ¼ö¸íÀÌ º¯¼ö¸í°ú Ãæµ¹: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: ÇÔ¼ö %sÀ»(¸¦) ´Ù½Ã Á¤ÀÇÇÒ ¼ö ¾ø½À´Ï´Ù: »ç¿ëÁßÀÔ´Ï´Ù"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: ÇÔ¼ö¸íÀÌ ½ºÅ©¸³Æ® ÆÄÀϸí°ú ´Ù¸§: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: ÇÔ¼ö À̸§ÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: ÇÔ¼ö À̸§Àº ´ë¹®ÀÚ·Î ½ÃÀÛÇϰųª ÄÝ·ÐÀ» Æ÷ÇÔÇØ¾ß ÇÔ: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: ÇÔ¼ö À̸§Àº ´ë¹®ÀÚ·Î ½ÃÀÛÇϰųª ÄÝ·ÐÀ» Æ÷ÇÔÇØ¾ß ÇÔ: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ÇÔ¼ö %sÀ»(¸¦) Áö¿ï ¼ö ¾ø½À´Ï´Ù: »ç¿ëÁßÀÔ´Ï´Ù"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: ÇÔ¼ö¸¦ ºÎ¸¥ ±íÀ̰¡ 'maxfuncdepth'º¸´Ù Å®´Ï´Ù"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "%s ºÎ¸£´Â Áß"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%sÀÌ(°¡) ÁßÁöµÇ¾ú½À´Ï´Ù"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%sÀÌ(°¡) #%<PRId64>À»(¸¦) µ¹·ÁÁÖ¾ú½À´Ï´Ù"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%sÀÌ(°¡) %sÀ»(¸¦) µ¹·ÁÁÖ¾ú½À´Ï´Ù"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "%s¿¡¼­ °è¼Ó"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :returnÀÌ ÇÔ¼ö ¾È¿¡ ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# Àü¿ª º¯¼ö:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tLast set from "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "old ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, ½ÊÀ°Áø %02x, ÆÈÁø %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, ½ÊÀ°Áø %04x, ÆÈÁø %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, ½ÊÀ°Áø %08x, ÆÈÁø %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: ÁÙÀ» ±× ÀÚ½ÅÀ¸·Î À̵¿ÇÏ·Á°í Çß½À´Ï´Ù"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "1 ÁÙ ¿Å°ÜÁ³½À´Ï´Ù"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "%<PRId64> ÁÙ ¿Å°ÜÁ³½À´Ï´Ù"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "%<PRId64> ÁÙÀ» °É·¶½À´Ï´Ù"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *Filter* ÀÚµ¿¸í·ÉÀº ÇöÀç ¹öÆÛ¸¦ ¹Ù²Ù¾î¼­´Â ¾È µË´Ï´Ù"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[¸¶Áö¸·À¸·Î °íÄ£ µÚ ÀúÀå ¾È ÇÔ]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: ÁÙ¿¡ %s: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: ³Ê¹« ¸¹Àº ¿¡·¯, ³ª¸ÓÁö °Ç³Ê¶Ü"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "viminfo ÆÄÀÏ \"%s\"%s%s%sÀ»(¸¦) Àд Áß"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " ÀÎÆ÷"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " ¸¶Å©"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr ""
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ½ÇÆÐ"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Viminfo ÆÄÀÏÀÇ ¾²±â ±ÇÇÑÀÌ ¾ø½À´Ï´Ù: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Viminfo ÆÄÀÏ %sÀ»(¸¦) ¾µ ¼ö ¾ø½À´Ï´Ù!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "Viminfo ÆÄÀÏ \"%s\"À»(¸¦) ¾²´Â Áß"
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# ÀÌ viminfo ÆÄÀÏÀº ºöÀÌ ¸¸µç °ÍÀÔ´Ï´Ù Vim %s.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Á¶½É¸¸ ÇÑ´Ù¸é °íÄ¥ ¼öµµ ÀÖ½À´Ï´Ù!\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# ÀÌ ÆÄÀÏÀÌ ÀúÀåµÇ¾úÀ» ¶§ÀÇ 'encoding'ÀÇ °ª\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "ÀÌ»óÇÑ ½ÃÀÛ ±ÛÀÚ"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "ÆÄÀÏ ÀϺθ¸ ÀúÀåÇÒ±î¿ä?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ¹öÆÛ ÀϺθ¸ ¾²·Á¸é !À» »ç¿ëÇϽʽÿÀ"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "ÀÌ¹Ì ÀÖ´Â \"%s\" ÆÄÀÏÀ» µ¤¾î¾µ±î¿ä?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "½º¿Ò ÆÄÀÏ \"%s\"°¡ ÀÖ½À´Ï´Ù, µ¤¾î¾µ±î¿ä?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: ½º¿Ò ÆÄÀÏ ÀÖÀ½: %s (µ¤¾î¾²·Á¸é :silent! »ç¿ë)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: ¹öÆÛ %<PRId64>ÀÇ ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ÆÄÀÏÀÌ ½áÁöÁö ¾ÊÀ½: 'write' ¿É¼Ç¿¡ ÀÇÇØ ¾µ ¼ö°¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"'readonly' ¿É¼ÇÀÌ \"%s\"¿¡ ´ëÇØ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù.\n"
-"±×·¡µµ ¾²±â¸¦ ¿øÇϽʴϱî?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"ÆÄÀÏ \"%s\"°¡ ÀбâÀü¿ëÀÔ´Ï´Ù.\n"
-"±×·¡µµ ¾²±â°¡ °¡´ÉÇÒ Áöµµ ¸ð¸¨´Ï´Ù.\n"
-"ÇÑ ¹ø ½á º¼±î¿ä?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\"´Â Àбâ Àü¿ëÀÔ´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Autocommand°¡ ¶æ ¹Û¿¡ »õ ¹öÆÛ %sÀ»(¸¦) Áö¿ü½À´Ï´Ù"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: ¼ýÀÚ°¡ ¾Æ´Ñ ÀÎÀÚ°¡ :z¿¡ ÁÖ¾îÁ³½À´Ï´Ù"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim¿¡¼­´Â ½© ¸í·ÉÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Á¤±ÔÇ¥Çö½ÄÀº ±ÛÀÚ·Î ±¸ºÐµÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "%s(À¸)·Î ¹Ù²Þ (y/n/a/q/l/^E/^Y)?"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(ÁߴܵǾú½À´Ï´Ù) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1°³ ã¾ÆÁü"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1°³ ¹Ù²åÀ½"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64>°³ ã¾ÆÁü"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64>°³ ¹Ù²åÀ½"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " ÇÑ ÁÙ¿¡¼­"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " %<PRId64> ÁÙ¿¡¼­"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :globalÀº Àç±Í È£Ãâ µÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: global¿¡¼­ Á¤±ÔÇ¥Çö½ÄÀÌ ºüÁ³½À´Ï´Ù"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "¿©·¯ ÁÙ¿¡¼­ ÆÐÅÏÀ» ã¾Ò½À´Ï´Ù: %s"
-
-#: ../ex_cmds.c:4510
-#, fuzzy, c-format
-msgid "Pattern not found: %s"
-msgstr "ÆÐÅÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# ¸¶Áö¸·À¸·Î ¹Ù²Û ¹®ÀÚ¿­:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: ´çȲÇÏÁö ¸¶½Ê½Ã¿À!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ¹Ì¾ÈÇÕ´Ï´Ù, µµ¿ò¸» '%s'ÀÌ(°¡) %s¿¡ ´ëÇØ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: ¹Ì¾ÈÇÕ´Ï´Ù, %s¿¡ ´ëÇÑ µµ¿ò¸»ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "¹Ì¾ÈÇÕ´Ï´Ù, µµ¿ò¸» ÆÄÀÏ \"%s\"À»(¸¦) ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: µð·ºÅ丮°¡ ¾Æ´Ô: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: ¾²±â À§ÇÑ %sÀ»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Àбâ À§ÇÑ %sÀ»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: ÇÑ ¾ð¾î³»¿¡¼­ ¿©·¯ ÀÎÄÚµù »ç¿ë: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: \"%s\" űװ¡ %s/%s ÆÄÀÏ¿¡¼­ Áߺ¹µÇ¾ú½À´Ï´Ù"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: ¸ð¸£´Â sign ¸í·É: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: sign À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: ³Ê¹« ¸¹Àº signÀÌ Á¤ÀǵǾî ÀÖ½À´Ï´Ù"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: À߸øµÈ sign ÅØ½ºÆ®: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: ¸ð¸£´Â sign: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: sign ¹øÈ£°¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: À߸øµÈ ¹öÆÛ À̸§: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: À߸øµÈ sign ID: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (Áö¿øµÇÁö ¾ÊÀ½)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[Áö¿öÁ³½À´Ï´Ù]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "µð¹ö±× »óÅ·Πµé¾î°¨. °è¼ÓÇÏ·Á¸é \"cont\"¸¦ ÀÔ·ÂÇϽʽÿÀ."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "%<PRId64> ÁÙ: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "¸í·É: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "ÁßÁöÁ¡: \"%s%s\" %<PRId64> ÁÙ"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: ÁßÁöÁ¡À» ãÀ» ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "ÁßÁöÁ¡ÀÌ Á¤ÀǵǾî ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s %<PRId64> ÁÙ"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: ¸ÕÀú \":profile start {fname}\"À» »ç¿ëÇϼ¼¿ä"
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "\"%s\"¿¡ ¹Ù²ï ³»¿ëÀ» ÀúÀåÇÒ±î¿ä?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "Á¦¸ñ ¾øÀ½"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: ¹öÆÛ \"%s\"¿¡ ³ªÁß¿¡ ¹Ù²ï ³»¿ëÀÌ ½áÁöÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "°æ°í: ¶æ ¹Û¿¡ ´Ù¸¥ ¹öÆÛ·Î µé¾î°¬½À´Ï´Ù (autocommand¸¦ È®ÀÎÇϽʽÿÀ)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: °íÄ¥ ÆÄÀÏÀÌ Çϳª ¹Û¿¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: ù ¹øÂ° ÆÄÀÏ ÀÌÀüÀ¸·Î´Â °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: ¸¶Áö¸· ÆÄÀÏ µÚ·Î´Â °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: ÄÄÆÄÀÏ·¯°¡ Áö¿øµÇÁö ¾ÊÀ½: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "\"%s\"À»(¸¦) \"%s\"¿¡¼­ ã´Â Áß"
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "\"%s\"À»(¸¦) ã´Â Áß"
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "'runtimepath'¿¡¼­ ãÀ» ¼ö ¾øÀ½: \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "µð·ºÅ丮´Â sourceÇÒ ¼ö ¾øÀ½: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "\"%s\"À»(¸¦) ºÒ·¯ µéÀÏ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "%<PRId64> ÁÙ: \"%s\"À»(¸¦) ºÒ·¯ µéÀÏ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "\"%s\"À»(¸¦) ºÒ·¯µéÀÌ´Â Áß"
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "%<PRId64> ÁÙ: \"%s\" ºÒ·¯µéÀÌ´Â Áß"
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "%s ºÒ·¯µéÀ̱⠳¡"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr ""
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd ÀÎÀÚ"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c ÀÎÀÚ"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "ȯ°æ º¯¼ö"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "¿¡·¯ Çڵ鷯"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: °æ°í: À߸øµÈ ÁÙ ±¸ºÐÀÚ. ^MÀÌ ¾ø´Â °Í °°½À´Ï´Ù"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: :scriptencodingÀÌ ºÒ·¯µéÀÎ ÆÄÀÏ ¹Û¿¡¼­ »ç¿ëµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: :finish°¡ ºÒ·¯µéÀÎ ÆÄÀÏ ¹Û¿¡¼­ »ç¿ëµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "ÇöÀç %s¾ð¾î: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: ¾ð¾î¸¦ \"%s\"(À¸)·Î ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Ex »óÅ·ΠÀüȯ. Normal »óÅ·Π°¡·Á¸é \"visual\"À» ÀÔ·ÂÇϽʽÿÀ."
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: ÆÄÀÏÀÇ ¸¶Áö¸·ÀÔ´Ï´Ù"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: ¸í·ÉÀÌ ³Ê¹« ¸¹ÀÌ ´Ù½Ã ¹Ýº¹µÇ¾ú½À´Ï´Ù"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: ¿¹¿Ü°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò½À´Ï´Ù: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "ºÒ·¯µéÀÎ ÆÄÀÏÀÇ ¸¶Áö¸·"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "ÇÔ¼öÀÇ ¸¶Áö¸·"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: »ç¿ëÀÚ Á¤ÀÇ ¸í·ÉÀ» ¸ðÈ£ÇÏ°Ô »ç¿ëÇϰí ÀÖ½À´Ï´Ù"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: ÆíÁý±â ¸í·ÉÀÌ ¾Æ´Õ´Ï´Ù"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: ¹Ý´ë ¿µ¿ªÀÌ ÁÖ¾îÁ³½À´Ï´Ù"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "¹Ý´ë ¿µ¿ªÀÌ ÁÖ¾îÁ³½À´Ï´Ù, µÚÁýÀ»±î¿ä"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: w³ª w>>¸¦ »ç¿ëÇϽʽÿÀ"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: ¹Ì¾ÈÇÕ´Ï´Ù, ±× ¸í·ÉÀº ÇöÀç ÆÇ¿¡¼­ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: ¿À·ÎÁö ÇϳªÀÇ ÆÄÀÏ À̸§¸¸ »ç¿ë °¡´ÉÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "°íÄ¥ ÆÄÀÏÀÌ ÇÑ °³ ´õ ÀÖ½À´Ï´Ù. ±×·¡µµ ³¡³¾±î¿ä?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "°íÄ¥ ÆÄÀÏÀÌ %d °³ ´õ ÀÖ½À´Ï´Ù. ±×·¡µµ ³¡³¾±î¿ä?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: °íÄ¥ ÆÄÀÏÀÌ ÇÑ °³ ´õ ÀÖ½À´Ï´Ù"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: °íÄ¥ ÆÄÀÏÀÌ %<PRId64> °³ ´õ ÀÖ½À´Ï´Ù"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ¸í·ÉÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù: ¹Ù²Ù·Á¸é !À» ´õÇϼ¼¿ä"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" À̸§ ÀÎÀÚ ¹üÀ§ ¿Ï¼º Á¤ÀÇ"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "»ç¿ëÀÚ Á¤ÀÇ ¸í·ÉÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: ¸í½ÃµÈ ¼Ó¼ºÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: À߸øµÈ ÀÎÀÚ °¹¼ö"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: Ä«¿îÆ®´Â µÎ ¹ø ÀÌ»ó ¸í½ÃµÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: À߸øµÈ ±âº» Ä«¿îÆ® °ª"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -complete¿¡ ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: À߸øµÈ ¼Ó¼º: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: À߸øµÈ ¸í·É À̸§"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: »ç¿ëÀÚ Á¤ÀÇ ¸í·ÉÀº ´ë¹®ÀÚ·Î ½ÃÀÛÇØ¾ß ÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: ¿¹¾àµÈ À̸§, »ç¿ëÀÚ Á¤ÀÇ ¸í·ÉÀ¸·Î »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: ±×·± »ç¿ëÀÚ Á¤ÀÇ ¸í·É ¾øÀ½: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: À߸øµÈ ³¡³»±â °ª: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: ¿Ï¼º ÀÎÀÚ´Â »ç¿ëÀÚ ¿Ï¼º¿¡¼­¸¸ Çã¿ëµË´Ï´Ù"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: »ç¿ëÀÚ ¿Ï¼ºÀº ÇÔ¼ö ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:5257
-#, fuzzy, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: »ö ½ºÅ´ %sÀ»(¸¦) ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "ºö »ç¿ëÀÚ´Ô, ȯ¿µÇÕ´Ï´Ù!"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: ¸¶Áö¸· ÅÇÀ» ´ÝÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "ÀÌ¹Ì ÇϳªÀÇ ÅǸ¸ ÀÖ½À´Ï´Ù"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "ÅÇ ÆäÀÌÁö %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "½º¿Ò ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E747: µð·ºÅ丮¸¦ ¹Ù²Ü ¼ö ¾ø´Â µ¥, ¹öÆÛ´Â ¼öÁ¤µÊ (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: ÀÌÀü µð·ºÅ丮°¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: ¸ð¸§"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize´Â µÎ°³ÀÇ ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: ÀÌ Ç÷§Æû¿¡ ´ëÇÑ Ã¢ À§Ä¡ ¾ò´Â ±â´ÉÀ» ±¸ÇöµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos¿¡´Â µÎ°³ÀÇ ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: µð·ºÅ丮 »ý¼º ½ÇÆÐ: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\"ÀÌ(°¡) Á¸ÀçÇÕ´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: ¾²±â À§ÇÑ \"%s\"À»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ÀÎÀÚ´Â ±ÛÀÚ³ª ¾Õ/µÚ ÀÎ¿ë ºÎÈ£¿©¾ß ÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normalÀÇ Àç±Í È£ÃâÀÌ ³Ê¹« ¸¹ÀÌ »ý°å½À´Ï´Ù"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: '#'¿¡ ´ëÇØ ġȯÇÒ ±³Ã¼ ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: \"<afile>\"¿¡ ´ëÇØ ġȯÇÒ ÀÚµ¿¸í·É ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: \"<abuf>\"¿¡ ´ëÇØ ġȯÇÒ ÀÚµ¿¸í·É ¹öÆÛ ¹øÈ£°¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: \"<amatch>\"¿¡ ´ëÇØ ġȯÇÒ ÀÚµ¿¸í·É ¸ÅÄ¡ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: \"<sfile>\"¿¡ ´ëÇØ ġȯÇÒ :source ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: \"<slnum>\"¿¡ »ç¿ëµÉ ÁÙ ¹øÈ£°¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: '%'³ª '#'¿¡ ´ëÇÑ ºó ÆÄÀÏ À̸§, ¿À·ÎÁö \":p:h\"¿Í¸¸ µ¿ÀÛÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: ºó ¹®ÀÚ¿­¿¡¼­ °ªÀ» ±¸ÇÏ·Á°í ÇÕ´Ï´Ù"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: ÀÐÀ» viminfo ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: 'Vim' Á¢µÎ»ç·Î ¿¹¿Ü¸¦ :throwÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "¿¹¿Ü thrown: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "¿¹¿Ü Á¾·áµÊ: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "¿¹¿Ü ¹ö·ÁÁü: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, %<PRId64> ÁÙ"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "¿¹¿Ü ¹ß»ý: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%sÀÌ(°¡) pending µÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%sÀÌ(°¡) Àç°³ µÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%sÀÌ(°¡) ¹ö·ÁÁ³½À´Ï´Ù"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "¿¹¿Ü"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "¿¡·¯¿Í ÀÎÅÍ·´Æ®"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "¿¡·¯"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "ÀÎÅÍ·´Æ®"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: :if°¡ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :if¾øÀÌ :endif°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :if¾øÀÌ :else°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :if¾øÀÌ :elseif°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: ¿©·¯°³ÀÇ :else°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :else µÚ¿¡ :elseif°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while/:for°¡ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :while ȤÀº :for¾øÀÌ :continue°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :while ȤÀº :for¾øÀÌ :break°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: :while¿¡ :endfor°¡ »ç¿ëµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: :for¿¡ :endwhileÀÌ »ç¿ëµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: :try°¡ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :try¾øÀÌ :catch°¡ ÀÖ½À´Ï´Ù"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :finally µÚ¿¡ :catch°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :try¾øÀÌ :finally°¡ ÀÖ½À´Ï´Ù"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: ¿©·¯°³ÀÇ :finally°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :try¾øÀÌ :endtry°¡ ÀÖ½À´Ï´Ù"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunctionÀÌ function ³»¿¡ ¾ø½À´Ï´Ù"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Áö±ÝÀº ´Ù¸¥ ¹öÆÛ¸¦ ÆíÁýÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Áö±ÝÀº ¹öÆÛ Á¤º¸¸¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "ű×À̸§"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " kind file\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "'history' ¿É¼ÇÀÌ 0ÀÔ´Ï´Ù"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s È÷½ºÅ丮 (»õ°ÍºÎÅÍ ¿À·¡µÈ °Í ¼ø):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "¸í·É ÁÙ"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "ãÀ» ¹®ÀÚ¿­"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "Ç¥Çö"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "ÀÔ·Â ÁÙ"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar°¡ ¸í·É ±æÀ̸¦ ¹þ¾î³µ½À´Ï´Ù"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Ȱ¼ºµÈ âÀ̳ª ¹öÆÛ°¡ Áö¿öÁ³½À´Ï´Ù"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr ""
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: À߸øµÈ °æ·Î: '**[¹øÈ£]'´Â °æ·ÎÀÇ ¸¶Áö¸·¿¡ À§Ä¡Çϰųª '%s' µÚ¿¡ ÀÖ¾î¾ß "
-"ÇÕ´Ï´Ù."
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath¿¡¼­ \"%s\" µð·ºÅ丮¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: path¿¡¼­ \"%s\" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: cdpath¿¡¼­ ´õ ÀÌ»óÀÇ \"%s\" µð·ºÅ丮¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: path¿¡¼­ ´õ ÀÌ»óÀÇ \"%s\" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Autocommand°¡ ¹öÆÛ³ª ¹öÆÛÀ̸§À» ¹Ù²Ù¾ú½À´Ï´Ù"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "À߸øµÈ ÆÄÀÏ À̸§"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "Àº(´Â) µð·ºÅ丮ÀÔ´Ï´Ù"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "Àº(´Â) ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[»õ ÆÄÀÏ]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[»õ µð·ºÅ丮]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[ÆÄÀÏÀÌ ³Ê¹« Å­]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[Çã¿ë ¾È µË´Ï´Ù]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre ÀÚµ¿¸í·ÉÀÌ ÆÄÀÏÀ» ÀÐÁö ¸øÇÏ°Ô ¸¸µé¾ú½À´Ï´Ù"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre ÀÚµ¿¸í·ÉÀº ÇöÀç ¹öÆÛ¸¦ ¹Ù²Ù¸é ¾È µË´Ï´Ù"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "ºö: Ç¥ÁØÀԷ¿¡¼­ Àд Áß...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: º¯È¯µÈ ÆÄÀÏÀ» ÀÐÀ» ¼ö°¡ ¾ø½À´Ï´Ù!"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[ÇÇÆ÷/¼ÒÄÏ]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[ÇÇÆ÷]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[¼ÒÄÏ]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr ""
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[CR ¾øÀ½]"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[±ä ÁÙ À߸²]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[º¯È¯ ¾È µË´Ï´Ù]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[º¯È¯ µÇ¾ú½À´Ï´Ù]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[%<PRId64> ÁÙ¿¡¼­ º¯È¯ ¿¡·¯]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[%<PRId64> ÁÙ¿¡ À߸øµÈ ¹ÙÀÌÆ®]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[Àб⠿¡·¯]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "º¯È¯Çϱâ À§ÇÑ Àӽà ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert'¸¦ »ç¿ëÇÑ º¯È¯ÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "'charconvert'ÀÇ Ãâ·Â°á°ú¸¦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: acwrite ¹öÆÛ¿¡ ´ëÇÑ autocommand¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: ¾µ ¹öÆÛ¸¦ ÀÚµ¿¸í·ÉÀÌ Áö¿ì°Å³ª ´Ý¾Ò½À´Ï´Ù"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Autocommand°¡ À߸øµÈ ¹æ¹ýÀ¸·Î ÁÙÀ» ¹Ù²Ù¾ú½À´Ï´Ù"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "ÆÄÀÏ È¤Àº ¾µ ¼ö ÀÖ´Â ÀåÄ¡°¡ ¾Æ´Õ´Ï´Ù"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "Àбâ Àü¿ëÀÔ´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: ¹é¾÷ÆÄÀÏÀ» ¾µ ¼ö ¾ø½À´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: ¹é¾÷ÆÄÀÏ ´Ý±â ¿¡·¯ (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: ¹é¾÷ÇÒ ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: ¹é¾÷ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: ¹é¾÷ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: ¾µ Àӽà ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù (º¯È¯ ¾øÀÌ ÀúÀåÇÏ·Á¸é ! ´õÇϱâ)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: ¾µ ¿¬°áµÈ ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: ¾µ ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Fsync°¡ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: ´Ý±â°¡ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: ¾²±â ¿¡·¯, º¯È¯ ½ÇÆÐ (¹«½ÃÇÏ·Á¸é 'fenc'¸¦ ºñ¿ì¸é µÊ)"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: ¾²±â ¿¡·¯, %<PRId64> ÁÙ¿¡¼­ º¯È¯ ½ÇÆÐ (¹«½ÃÇÏ·Á¸é 'fenc'¸¦ ºñ¿ì¸é µÊ)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: ¾²±â ¿¡·¯ (ÆÄÀÏ ½Ã½ºÅÛÀÌ ²Ëᳪ¿ä?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " º¯È¯ ¿¡·¯"
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr "%<PRId64> ÁÙ¿¡¼­;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[ÀåÄ¡]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[»õ·Î¿î]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " ´õÇß½À´Ï´Ù"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " ÀúÀå Çß½À´Ï´Ù"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: ÆÐÄ¡ »óÅÂ: ¿ø·¡ ÆÄÀÏÀ» ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: ÆÐÄ¡ »óÅÂ: ºó ¿ø·¡ ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: ¹é¾÷ ÆÄÀÏÀ» Áö¿ï ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"°æ°í: ¿ø·¡ ÆÄÀÏÀÌ ¾ø¾îÁ³°Å³ª ±úÁ³À» ¼ö ÀÖ½À´Ï´Ù\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "ÆÄÀÏÀÌ ¼º°øÀûÀ¸·Î ÀúÀåµÉ ¶§±îÁö ÆíÁý±â¸¦ ³¡³»Áö ¸¶½Ê½Ã¿À!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[µµ½º]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[µµ½º Çü½Ä]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[¸Æ]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[¸Æ Çü½Ä]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[À¯´Ð½º]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[À¯´Ð½º Çü½Ä]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 ÁÙ, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> ÁÙ, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 ±ÛÀÚ"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> ±ÛÀÚ"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[ºÒ¿ÏÀüÇÑ ¸¶Áö¸· ÁÙ]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "°æ°í: ÆÄÀÏÀÌ ÀÐÀº µÚ¿¡ ¹Ù²î¾ú½À´Ï´Ù!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "Á¤¸»·Î ¾²±â¸¦ ¿øÇϽʴϱî"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: \"%s\"¿¡ ¾²±â ¿¡·¯"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: \"%s\" ´Ý±â ¿¡·¯"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: \"%s\" Àб⠿¡·¯"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: FileChangedShell ÀÚµ¿¸í·ÉÀÌ ¹öÆÛ¸¦ Áö¿ü½À´Ï´Ù"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: ÆÄÀÏ \"%s\"À»(¸¦) ´õ ÀÌ»ó »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr ""
-"W12: °æ°í: ÆÄÀÏ \"%s\"ÀÌ(°¡) ¹Ù²î¾ú°í ¸¶Âù°¡Áö·Î ºöÀÇ ¹öÆÛµµ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é \":help W12\"À» ÀÔ·ÂÇϼ¼¿ä."
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: °æ°í: ÆÄÀÏ \"%s\"ÀÌ(°¡) °íÄ¡±â ½ÃÀÛÇÑ µÚ¿¡ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é \":help W11\"À» ÀÔ·ÂÇϼ¼¿ä."
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: °æ°í: ÆÄÀÏ \"%s\"ÀÇ »óŰ¡ °íÄ¡±â ½ÃÀÛÇÑ µÚ¿¡ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é \":help W16\"À» ÀÔ·ÂÇϼ¼¿ä."
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: °æ°í: ÆÄÀÏ \"%s\"ÀÌ(°¡) °íÄ¡±â ½ÃÀÛÇÑ µÚ¿¡ ¸¸µé¾ú½À´Ï´Ù"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "°æ°í"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"È®ÀÎ(&O)\n"
-"ÆÄÀÏ ºÒ·¯¿À±â(&L)"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: \"%s\"ÀÇ Àç·Îµå¸¦ ÁغñÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: \"%s\"À»(¸¦) ´Ù½Ã ·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--Áö¿öÁü--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "autocommand ÀÚµ¿»èÁ¦: %s <buffer=%d>"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: ÀÌ·± ±×·ì ¾øÀ½: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: * µÚ¿¡ ÀÌ»óÇÑ ±ÛÀÚ: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: ±×·± À̺¥Æ® ¾øÀ½: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: ±×·± ±×·ìÀ̳ª À̺¥Æ® ¾øÀ½: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- ÀÚµ¿-¸í·É ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: À߸øµÈ ¹öÆÛ ¹øÈ£"
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: ALL À̺¥Æ®¿¡ ´ëÇØ ÀÚµ¿¸í·ÉÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "¸Â´Â ÀÚµ¿¸í·ÉÀÌ ¾ø½À´Ï´Ù"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: ÀÚµ¿¸í·ÉÀÌ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr ""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "%s ½ÇÇàÁß"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "ÀÚµ¿¸í·É %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: {°¡ ¾ø½À´Ï´Ù."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: }°¡ ¾ø½À´Ï´Ù."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: fold°¡ ¾ø½À´Ï´Ù"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: ÇöÀçÀÇ 'foldmethod'À¸·Î Á¢±â¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: ÇöÀçÀÇ 'foldmethod'À¸·Î Á¢±â¸¦ Áö¿ï ¼ö ¾ø½À´Ï´Ù"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld ÁÙ Á¢Èû "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: ÀÐÇôÁø ¹öÆÛ¿¡ ´õÇϱâ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: Àç±Í ¸ÊÇÎ"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: %s Àü¿ª ¾à¾î°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: %s Àü¿ª ¸ÅÇÎÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: %s ¾à¾î°¡ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: %s ¸ÅÇÎÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "¾à¾î¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "¸ÊÇÎÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: ÀÌ»óÇÑ »óÅÂ"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--¹öÆÛ¿¡ ÁÙ ¾øÀ½--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: ¸í·ÉÀÌ ÁßÁöµÇ¾ú½À´Ï´Ù"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: ÀÎÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: /, ? ȤÀº &´Â \\ µÚ¿¡ ¿Í¾ß ÇÕ´Ï´Ù"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ¸í·ÉÁ٠â¿¡ À߸øµÊ; <CR> ½ÇÇà, CTRL-C ³¡³»±â"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: ÇöÀç µð·ºÅ丮 ¶Ç´Â ÅÂ±× Ã£±â¿¡¼­ exrc/vimrc¿¡¼­ÀÇ ¸í·ÉÀº Çã¿ë ¾È µË´Ï´Ù"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: :endif°¡ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: :endtry°¡ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: :endwhileÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: :endfor ´©¶ô"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :while¾øÀÌ :endwhileÀÌ ÀÖ½À´Ï´Ù"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :for ¾ø´Â :endfor"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: ÆÄÀÏÀÌ ÀÖ½À´Ï´Ù (µ¤¾î¾²·Á¸é ! »ç¿ë)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: ¸í·ÉÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: ³»ºÎ ¿¡·¯"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "ÁߴܵǾú½À´Ï´Ù"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: À߸øµÈ ÁÖ¼Ò"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: À߸øµÈ ÀÎÀÚ"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: À߸øµÈ ÀÎÀÚ: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: À߸øµÈ Ç¥Çö½Ä: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: À߸øµÈ ¹üÀ§"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: À߸øµÈ ¸í·É"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\"Àº(´Â) µð·ºÅ丮ÀÔ´Ï´Ù"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: ½ºÅ©·Ñ Å©±â°¡ À߸øµÇ¾ú½À´Ï´Ù"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: ¶óÀ̺귯¸® \"%s()\" ºÎ¸£±â ½ÇÆÐ"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: ¸¶Å©°¡ À߸øµÈ ÁÙ ¹øÈ£¸¦ °¡Áö°í ÀÖ½À´Ï´Ù"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: ¸¶Å©°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: ¹Ù²Ü ¼ö ¾øÀ½, 'modifiable'ÀÌ ²¨Á®ÀÖ½À´Ï´Ù"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: ½ºÅ©¸³Æ®°¡ ³Ê¹« ±í°Ô ÁßøµÇ¾ú½À´Ï´Ù"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: ´Ù¸¥ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: ±×·± ¾à¾î´Â ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: !Àº Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: GUI´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ÄÄÆÄÀÏ ¶§ Æ÷ÇÔµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: ÀÌ·± ÇÏÀ̶óÀÌÆ® ±×·ì À̸§Àº ¾ø½À´Ï´Ù: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: ÀÔ·ÂµÈ ÅØ½ºÆ®°¡ ¾ÆÁ÷ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: ÀÌÀü ¸í·É ÁÙÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: ±×·± ¸ÊÇÎÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: ¸ÂÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: ¸ÂÁö ¾ÊÀ½: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: ÀÌÀü ¹Ù²Ù±â Á¤±Ô Ç¥Çö½ÄÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: ÀÌÀü ¸í·ÉÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: ÀÌÀü Á¤±ÔÇ¥Çö½ÄÀÌ ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: ¹üÀ§´Â Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ºó °ø°£ÀÌ ÃæºÐÇÏÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: %s ÆÄÀÏÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: Àӽà ÆÄÀÏ À̸§À» ¾òÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: %s ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: %s ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ¸¶Áö¸·À¸·Î °íÄ£ µÚ ÀúÀåµÇÁö ¾Ê¾Ò½À´Ï´Ù (¹«½ÃÇÏ·Á¸é ! ´õÇϱâ)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[¸¶Áö¸·À¸·Î °íÄ£ µÚ ÀúÀå ¾È ÇÔ]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ³Î ÀÎÀÚ"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: ¼ýÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: ¿¡·¯ÆÄÀÏ %sÀ»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: ¸Þ¸ð¸®°¡ ¹Ù´Ú³µ½À´Ï´Ù!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "ÆÐÅÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: ÆÐÅÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: ÀÎÀÚ´Â ¾ç¼öÀ̾î¾ß ÇÕ´Ï´Ù"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: ÀÌÀü µð·ºÅ丮·Î °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: ¿¡·¯ ¾øÀ½"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: À§Ä¡ ¸ñ·Ï ¾øÀ½"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: ±úÁø ¸Â´Â ¹®ÀÚ¿­"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: ±úÁø Á¤±ÔÇ¥Çö½Ä ÇÁ·Î±×·¥"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: 'readonly' ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Àбâ Àü¿ë º¯¼ö \"%s\"À»(¸¦) ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: sandbox ¾È¿¡¼­´Â º¯¼ö¸¦ ¼³Á¤ÇÒ ¼ö ¾øÀ½: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: ¿¡·¯ÆÄÀÏ Àд µµÁß¿¡ ¿¡·¯"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: sandbox¿¡¼­´Â Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: ¿©±â¿¡¼­ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: ½ºÅ©¸° »óÅ ¼³Á¤Àº Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: ½ºÅ©·Ñ Å©±â°¡ À߸øµÇ¾ú½À´Ï´Ù"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: 'shell' ¿É¼ÇÀÌ ºñ¾ú½À´Ï´Ù"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: sign ÀڷḦ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: ½º¿Ò ÆÄÀÏÀ» ´ÝÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: ÅÂ±× ½ºÅÃÀÌ ºñ¾ú½À´Ï´Ù"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: ¸í·ÉÀÌ ³Ê¹« º¹ÀâÇÕ´Ï´Ù"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: À̸§ÀÌ ³Ê¹« ±é´Ï´Ù"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: [°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: ÆÄÀÏ À̸§ÀÌ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: ³¡¿¡ ¹®ÀÚ°¡ ´õ ÀÖ½À´Ï´Ù"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: ¸ð¸£´Â ¸¶Å©"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: ¸¸´É ±ÛÀÚ¸¦ È®ÀåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight'´Â 'winminheight'º¸´Ù Ä¿¾ß ÇÕ´Ï´Ù"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth'´Â 'winminwidth'º¸´Ù Ä¿¾ß ÇÕ´Ï´Ù"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: ¾²´Â Áß¿¡ ¿¡·¯"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "Zero count"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: ½ºÅ©¸³Æ® ÄÜÅØ½ºÆ® ¹Û¿¡¼­ <SID> »ç¿ë"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: ³»ºÎ ¿¡·¯: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: ÆÐÅÏÀÌ 'maxmempattern'º¸´Ù ¸¹Àº ¸Þ¸ð¸®¸¦ »ç¿ëÇÕ´Ï´Ù"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: ºó ¹öÆÛ"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: À߸øµÈ ã±â ÆÐÅÏ È¤Àº ±¸ºÐÀÚ"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: ÆÄÀÏÀÌ ´Ù¸¥ ¹öÆÛ¿¡ ·ÎµùµÇ¾î ÀÖ½À´Ï´Ù"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: ¿É¼Ç '%s'ÀÌ(°¡) ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../globals.h:1111
-#, fuzzy
-msgid "E850: Invalid register name"
-msgstr "E354: À߸øµÈ ·¹Áö½ºÅÍ À̸§: '%s'"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "óÀ½±îÁö ã¾ÒÀ½, ³¡¿¡¼­ °è¼Ó"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "³¡±îÁö ã¾ÒÀ½, óÀ½ºÎÅÍ °è¼Ó"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: ÄÝ·ÐÀÌ ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: ÀÌ»óÇÑ ÄÄÆ÷³ÍÆ®"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: ¼ýÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "ÆäÀÌÁö %d"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "ÀμâµÉ ÅØ½ºÆ®°¡ ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "ÆäÀÌÁö %d ÀμâÁß (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " º¹»ç %d / %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "ÀμâµÊ: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "ÀμⰡ Ãë¼ÒµÇ¾ú½À´Ï´Ù."
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Æ÷½ºÆ®½ºÅ©¸³Æ® Ãâ·ÂÆÄÀÏ¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù."
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: \"%s\" ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏ \"%s\"À»(¸¦) ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ÆÄÀÏ \"%s\"Àº(´Â) Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ÆÄÀÏ \"%s\"Àº(´Â) Áö¿øµÇ´Â Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" ¸®¼Ò½º ÆÄÀÏÀº ¹öÀüÀÌ À߸øµÇ¾ú½À´Ï´Ù"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: ȣȯµÇÁö ¾Ê´Â ´ÙÁß¹®ÀÚ ÀÎÄÚµù°ú ¹®ÀÚ¼Â."
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset´Â ´ÙÁß¹®ÀÚ ÀÎÄÚµù¿¡¼­ ¹Ýµå½Ã ¼³Á¤µÇ¾î¾ß ÇÕ´Ï´Ù."
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: ´ÙÁß¹®ÀÚ Àμ⸦ À§ÇÑ ±Û²ÃÀÌ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Æ÷½ºÆ®½ºÅ©¸³Æ® Ãâ·ÂÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: \"%s\" ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏ \"prolog.ps\"¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏ \"cidfont.ps\"¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Æ÷½ºÆ®½ºÅ©¸³Æ® ¸®¼Ò½º ÆÄÀÏ \"%s.ps\"¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: \"%s\" Àμâ ÀÎÄÚµùÀ¸·Î º¯È¯ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "ÇÁ¸°ÅÍ·Î º¸³»´Â Áß..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Æ÷½ºÆ®½ºÅ©¸³Æ® ÆÄÀÏÀ» ÀμâÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "ÀμâÀÛ¾÷ÀÌ ³¡³µ½À´Ï´Ù."
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "»õ µ¥ÀÌÅͺ£À̽º ´õÇϱâ"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr ""
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "ÀÌ ¸Þ½ÃÁö º¸À̱â"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "¿¬°á ²÷±â"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "¸ðµç ¿¬°á ´Ù½Ã ÃʱâÈ­"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "¿¬°á º¸¿©ÁÖ±â"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: »ç¿ë¹ý: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "ÀÌ cscope ¸í·ÉÀº â ³ª´©±â¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: »ç¿ë¹ý: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ű׸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ¿¡·¯: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %sÀº(´Â) µð·ºÅ丮µµ ȤÀº cscope µ¥ÀÌÅͺ£À̽º°¡ ¾Æ´Õ´Ï´Ù"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "cscope µ¥ÀÌÅͺ£À̽º %s¿¡ ´õÇß½À´Ï´Ù."
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: cscope ¿¬°á %<PRId64> Àб⠿¡·¯"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: ¸ð¸£´Â cscope ã±â Çü½Ä"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: cscope ÆÄÀÌÇÁ¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: cscope¸¦ forkÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:849
-#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection ½ÇÇàÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection ½ÇÇàÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: to_fp¿¡ ´ëÇÑ fdopen ½ÇÆÐ"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fr_fp¿¡ ´ëÇÑ fdopen ½ÇÆÐ"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: cscope ÇÁ·Î¼¼½º¸¦ spawnÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: cscope ¿¬°áÀÌ ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr ""
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr ""
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "cscope ¸í·É:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (»ç¿ë¹ý: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: ÀÌ ÇÔ¼ö¸¦ ºÎ¸£´Â ÇÔ¼öµé ã±â\n"
-" d: ÀÌ ÇÔ¼ö¿¡ ÀÇÇØ ºÒ·ÁÁö´Â ÇÔ¼öµé ã±â\n"
-" e: ÀÌ egrep ÆÐÅÏ Ã£±â\n"
-" f: ÀÌ ÆÄÀÏ Ã£±â\n"
-" g: ÀÌ Á¤ÀÇ Ã£±â\n"
-" i: ÀÌ ÆÄÀÏÀ» Æ÷ÇÔÇÏ´Â ÆÄÀϵé ã±â\n"
-" s: ÀÌ C ½Éº¼ ã±â\n"
-" t: ÀÌ ¹®ÀÚ¿­ ã±â\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: Áߺ¹µÈ cscope µ¥ÀÌÅͺ£À̽º´Â ´õÇØÁöÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: cscope ¿¬°á %sÀ»(¸¦) ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "cscope ¿¬°á %sÀÌ(°¡) ´ÝÇû½À´Ï´Ù"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches¿¡ ½É°¢ÇÑ ¿¡·¯"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Cscope ű×: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ÁÙ"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ÆÄÀÏ À̸§ / ÄÜÅØ½ºÆ® / ÁÙ\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Cscope ¿¡·¯: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "¸ðµç cscope µ¥ÀÌÅͺ£À̽º ¸®¼Â"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "cscope ¿¬°áÀÌ ¾ø½À´Ï´Ù\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid µ¥ÀÌÅͺ£À̽º À̸§ prepend path\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "¸ð¸£´Â ¿É¼Ç ÀÎÀÚ"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "³Ê¹« ¸¹Àº ÆíÁý ÀÎÀÚ"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "µÚ¿¡ ÀÎÀÚ°¡ ¾øÀ½"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "¿É¼Ç ÀÎÀÚ µÚ¿¡ ¾²·¹±â °ª"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "³Ê¹« ¸¹Àº \"+command\" \"-c command\" ȤÀº \"--cmd command\" ÀÎÀÚ"
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr ""
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d ÆÄÀÏÀ» °íÄ¡±â\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "½ºÅ©¸³Æ® ÆÄÀÏÀ» ´Ù½Ã ¿­·Á°í ½Ãµµ: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "Àбâ À§ÇØ ¿­ ¼ö ¾øÀ½: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "½ºÅ©¸³Æ® Ãâ·ÂÀ» ¿­ ¼ö ¾øÀ½: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "ºö: °æ°í: Å͹̳ηΠÃâ·ÂÇÒ ¼ö ¾ø½À´Ï´Ù\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "ºö: °æ°í: Å͹̳ηΠºÎÅÍ ÀԷ¹ÞÀ» ¼ö ¾ø½À´Ï´Ù\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "pre-vimrc ¸í·É Çà"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: \"%s\"¿¡¼­ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"´õ ¸¹Àº Á¤º¸¸¦ ¿øÇϽøé: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[ÆÄÀÏ ..] ÁÖ¾îÁø ÆÄÀÏ °íÄ¡±â"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- Ç¥ÁØÀԷ¿¡¼­ ÅØ½ºÆ® Àбâ"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t tag űװ¡ Á¤ÀÇµÈ À§Ä¡¿¡¼­ ÆÄÀÏ °íÄ¡±â"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [¿¡·¯ÆÄÀÏ] ù ¹øÂ° ¿¡·¯°¡ ³­ ÆÄÀÏ °íÄ¡±â"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"»ç¿ë¹ý:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [ÀÎÀÚ] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" ȤÀº:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"ÀÎÀÚ:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tÀÌ µÚ¿¡´Â ÆÄÀÏ À̸§¸¸"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t¿ÍÀϵåÄ«µå¸¦ È®ÀåÇÏÁö ¾ÊÀ½"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi »óÅ (\"vi\"¿Í °°À½)"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx »óÅ (\"ex\"¿Í °°À½)"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr ""
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tÁ¶¿ëÇÑ (¹èÄ¡) »óÅ (\"ex\"¸¸)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tDiff »óÅ (\"vimdiff\"¿Í °°À½)"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\t½¬¿î »óÅ (\"evim\"°ú °°À½, modeless)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÀбâ Àü¿ë »óÅ (\"view\"¿Í °°À½)"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÁ¦ÇÑµÈ »óÅ (\"rvim\"°ú °°À½)"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\t¼öÁ¤(ÆÄÀÏ ¾²±â)ÀÌ Çã¿ëµÇÁö ¾ÊÀ½"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÅØ½ºÆ® ¼öÁ¤ÀÌ Çã¿ëµÇÁö ¾ÊÀ½"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÀÌÁø »óÅÂ"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\t¸®½ºÇÁ »óÅÂ"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tVi ȣȯ: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tVi¿Í ȣȯµÇÁö ¾ÊÀ½: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr ""
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tµð¹ö±ë »óÅÂ"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\t½º¿Ò ÆÄÀÏ ¾øÀÌ ¸Þ¸ð¸®¸¸ »ç¿ë"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\t½º¿Ò ÆÄÀÏ ¸ñ·ÏÀ» Ç¥½ÃÇÑ µÚ ³¡³»±â"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (ÆÄÀÏ À̸§°ú ÇÔ²²)\tÆÄ¼ÕµÇ¾ú´ø ¼¼¼Ç º¹±¸"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\t-r°ú °°À½"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tArabic ¸ðµå·Î ½ÃÀÛ"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tHebrew ¸ðµå·Î ½ÃÀÛ"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tFarsi ¸ðµå·Î ½ÃÀÛ"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tÅ͹̳ΠÁ¾·ù¸¦ <terminal>·Î ¼³Á¤"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\t.vimrc ´ë½Å <vimrc>¸¦ »ç¿ë"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tÇ÷¯±×ÀÎ ½ºÅ©¸³Æ®¸¦ ºÒ·¯µéÀÌÁö ¾ÊÀ½"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tN°³ÀÇ ÅÇ ¿­±â (±âº»: ÆÄÀϺ°·Î Çϳª)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tN°³ÀÇ Ã¢ ¿­±â (±âº»: ÆÄÀϺ°·Î Çϳª)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\t-o¿Í °°Áö¸¸ âÀ» ¼öÁ÷À¸·Î ³ª´©±â"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tÆÄÀÏ ¸¶Áö¸·¿¡¼­ ½ÃÀÛ"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\t<lnum> ÁÙ¿¡¼­ ½ÃÀÛ"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <¸í·É>\tvimrc ÆÄÀÏÀ» Àбâ Àü¿¡ <¸í·É>À» ½ÇÇà"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <¸í·É>\t\tù° ÆÄÀÏÀ» ÀÐÀº µÚ <¸í·É>À» ½ÇÇà"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <¼¼¼Ç>\t\tù° ÆÄÀÏÀ» ÀÐÀº µÚ <¼¼¼Ç> ÆÄÀÏ ºÒ·¯ µéÀ̱â"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\t<scriptin> ÆÄÀÏ¿¡¼­ Normal »óÅ ¸í·É Àбâ"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\t¸ðµç ÀÔ·ÂµÈ ¸í·ÉÀ» <scriptout> ÆÄÀÏ¿¡ Ãß°¡"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\t¸ðµç ÀÔ·ÂµÈ ¸í·ÉÀ» <scriptout> ÆÄÀÏ¿¡ ÀúÀå"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr "--startuptime <file>\tstartup timing ¸Þ½ÃÁö¸¦ <file>¿¡ ÀúÀå"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\t.viminfo ´ë½Å <viminfo>¸¦ »ç¿ë"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h ȤÀº --help\tµµ¿ò¸»(ÀÌ ¸Þ½ÃÁö)À» Ãâ·ÂÇÑ µÚ ³¡³»±â"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tÆÇ Á¤º¸¸¦ Ãâ·ÂÇÑ µÚ ³¡³»±â"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "¼³Á¤µÈ ¸¶Å©°¡ ¾ø½À´Ï´Ù"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: \"%s\"¿¡ ¸Â´Â ¸¶Å©°¡ ¾ø½À´Ï´Ù"
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"¸¶Å© ¶óÀÎ col ÆÄÀÏ/ÅØ½ºÆ®"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" Á¡ÇÁ ¶óÀÎ col ÆÄÀÏ/ÅØ½ºÆ®"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# ÆÄÀÏ ¸¶Å©:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Á¡ÇÁ¸ñ·Ï (»õ°ÍÀÌ ¸ÕÀú):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# ÆÄÀϳ»ÀÇ ¸¶Å© È÷½ºÅ丮 (»õ°ÍºÎÅÍ ¿À·¡µÈ ¼ø):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "'>'ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: ±¸¿ªÀÌ Àá±ÅÁöÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: ½º¿Ò ÆÄÀÏÀ» Àбâ À§ÇØ Æ¯Á¤ À§Ä¡·Î °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: ½º¿Ò ÆÄÀÏÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: ½º¿Ò ÆÄÀÏÀ» ¾²±â À§ÇØ Æ¯Á¤ À§Ä¡·Î °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: ½º¿Ò ÆÄÀÏÀ» ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: ½º¿Ò ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù (symlink °ø°Ý?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: ±¸¿ª ¹øÈ£ 0À» ¾òÁö ¸øÇß³ª¿ä?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: ±¸¿ª ¹øÈ£ 1À» ¾òÁö ¸øÇß³ª¿ä?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: ±¸¿ª ¹øÈ£ 2¸¦ ¾òÁö ¸øÇß³ª¿ä?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: À¸À¹, ½º¿Ò ÆÄÀÏÀ» ÀÒ¾î¹ö·È½À´Ï´Ù!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: ½º¿Ò ÆÄÀÏ À̸§À» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: \"%s\"ÀÇ ½º¿Ò ÆÄÀÏÀ» ¿­ ¼ö ¾ø¾î¼­ º¹±¸´Â ºÒ°¡´ÉÇÕ´Ï´Ù"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): ±¸¿ª 0À» ¾òÁö ¸øÇß³ª¿ä??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: %sÀÇ ½º¿Ò ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "»ç¿ëÇÒ ½º¿Ò ÆÄÀÏ ¹øÈ£¸¦ ÀÔ·ÂÇϽʽÿÀ (0Àº ³¡³»±â): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: %sÀ»(¸¦) ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "Unable to read block 0 from "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"¾î¶² ¼öÁ¤µµ ¾ø¾ú°Å³ª ºöÀÌ ½º¿Ò ÆÄÀÏÀ» °»½ÅÇÏÁö ¾ÊÀº °Í °°½À´Ï´Ù."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " cannot be used with this version of Vim.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "ºö 3.0 ÆÇÀ» »ç¿ëÇϽʽÿÀ.\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %sÀº(´Â) ºö ½º¿Ò ÆÄÀÏÀÌ ¾Æ´Ñ °Í °°½À´Ï´Ù"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " ÀÌ ÄÄÇ»ÅÍ¿¡¼­´Â »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr ""
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "½º¿Ò ÆÄÀÏ \"%s\"À»(¸¦) »ç¿ëÇÕ´Ï´Ù"
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "¿ø·¡ ÆÄÀÏ \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: °æ°í: ¿ø·¡ ÆÄÀÏÀÌ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: %sÀÇ ±¸¿ª 1À» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???¸¹Àº ÁÙÀ» ÀÒ¾î¹ö¸²"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???ÁÙ ¹øÈ£°¡ À߸øµÇ¾ú½À´Ï´Ù"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???ºó ±¸¿ª"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???ÁÙÀ» ÀÒ¾î¹ö¸²"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ±¸¿ª 1ÀÇ ID°¡ À߸øµÇ¾ú½À´Ï´Ù (%sÀÌ(°¡) .swp ÆÄÀÏÀÌ ¾Æ´Ñ°¡?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???±¸¿ª ÀÒ¾î¹ö¸²"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ¿©±âºÎÅÍ ???³¡±îÁöÀÇ ÁÙÀÌ ¼¯¿´½À´Ï´Ù"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ¿©±âºÎÅÍ ???³¡±îÁöÀÇ ÁÙÀÌ ³¢¿öÁö°Å³ª Áö¿öÁ® ¹ö¸° °Í °°½À´Ï´Ù"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???³¡"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: º¹±¸ ÁߴܵǾú½À´Ï´Ù"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: º¹±¸ µµÁß ¿¡·¯ »ý°å½À´Ï´Ù; ???·Î ½ÃÀÛÇÏ´Â ÁÙÀ» ã¾Æº¸½Ê½Ã¿À"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é \":help E312\"¸¦ ÀÔ·ÂÇϼ¼¿ä."
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "º¹±¸°¡ ³¡³µ½À´Ï´Ù. ¸ðµç °Ô Á¤»óÀÎ Áö È®ÀÎÇØ º¸¼Å¾ß¸¸ ÇÕ´Ï´Ù."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(¾î¼¸é ´Ù¸¥ À̸§À¸·Î ÀúÀåÇÏ°í ½ÍÀ¸½Ç Áöµµ ¸ð¸£°Ú½À´Ï´Ù\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "±×¸®°í ¹Ù²ï ³»¿ëÀ» È®ÀÎÇÏ·Á¸é ¿ø·¡ ÆÄÀÏ¿¡ ´ëÇØ diff¸¦ ½ÇÇàÇϼ¼¿ä)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "º¹±¸°¡ ³¡³µ½À´Ï´Ù. ¹öÆÛÀÇ ³»¿ëÀÌ ÆÄÀÏ ³»¿ë°ú °°½À´Ï´Ù."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"ÀÌÁ¦ .swp ÆÄÀÏÀ» Áö¿ì¼Åµµ µË´Ï´Ù.\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "½º¿Ò ÆÄÀÏÀ» ã¾ÒÀ½:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " ÇöÀç µð·ºÅ丮¿¡:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " ¸í½ÃµÈ À̸§À» »ç¿ë:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " In directory "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ¾øÀ½ --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " ¼ÒÀ¯ÀÚ: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " ³¯Â¥: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " ³¯Â¥: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [ºö 3.0 ÆÇÀÇ °Í]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [ºö ½º¿Ò ÆÄÀÏ·Î º¸ÀÌÁö ¾Ê½À´Ï´Ù]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " ÆÄÀÏ À̸§: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" ¼öÁ¤: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "¿¹"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "¾Æ´Ï¿À"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" »ç¿ëÀÚ À̸§: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " È£½ºÆ® À̸§: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" È£½ºÆ® À̸§: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ÇÁ·Î¼¼½º ID: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (¾ÆÁ÷ ½ÇÇàÁß)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [ÀÌ ÄÄÇ»ÅÍ¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾øÀ½]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [ÀÐÀ» ¼ö ¾øÀ½]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [¿­ ¼ö ¾øÀ½]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: º¸Á¸ÇÒ ¼ö ¾ø½À´Ï´Ù, ½º¿Ò ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "ÆÄÀÏÀÌ º¸Á¸µÇ¾ú½À´Ï´Ù"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: ÆÄÀÏ º¸Á¸À» ½ÇÆÐÇß½À´Ï´Ù"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: À߸øµÈ lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: %<PRId64> ÁÙÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: À߸øµÈ Æ÷ÀÎÅÍ ±¸¿ª id 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx´Â 0¿©¾ß¸¸ ÇÕ´Ï´Ù"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: ³Ê¹« ¸¹Àº ±¸¿ªÀÌ °»½ÅµÇ¾ú³ª¿ä?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: À߸øµÈ Æ÷ÀÎÅÍ ±¸¿ª id 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "±¸¿ª 1ÀÌ Áö¿öÁ³³ª¿ä?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: %<PRId64> ÁÙÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: À߸øµÈ Æ÷ÀÎÅÍ ±¸¿ª id"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count°¡ 0ÀÔ´Ï´Ù"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: ÁÙ ¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³µ½À´Ï´Ù: ¸¶Áö¸·¿¡¼­ %<PRId64> ¸¸Å­"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: ±¸¿ª %<PRId64>ÀÇ ÁÙ °¹¼ö°¡ Ʋ·È½À´Ï´Ù"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "½ºÅà ũ±â Áõ°¡"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: À߸øµÈ Æ÷ÀÎÅÍ ±¸¿ª id 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr ""
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ÁÖ¸ñ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"Found a swap file by the name \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "While opening file \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " NEWER than swap file!\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) ´Ù¸¥ ÇÁ·Î±×·¥ÀÌ °°Àº ÆÄÀÏÀ» °íÄ¡°í ÀÖ´ÂÁßÀÏ ¼ö ÀÖ½À´Ï´Ù.\n"
-" ¸¸¾à ±×·¸´Ù¸é °°Àº ÆÄÀÏÀ» µÎ °³ÀÇ ÇÁ·Î±×·¥¿¡¼­ °íÄ¡Áö\n"
-" ¾Êµµ·Ï Á¶½ÉÇϽñ⠹ٶø´Ï´Ù.\n"
-
-#: ../memline.c:3245
-#, fuzzy
-msgid " Quit, or continue with caution.\n"
-msgstr " ³¡³»°Å³ª À§ÇèÀ» °¨¼öÇϽ÷Á¸é °è¼ÓÇϽʽÿÀ.\n"
-
-#: ../memline.c:3246
-#, fuzzy
-msgid "(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) ÆÄÀÏÀ» °íÄ¡´Ù°¡ Á×¾ú¾ú½À´Ï´Ù.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " ¸¸¾à ±×·¸´Ù¸é \":recover\" ȤÀº \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" À» »ç¿ëÇÏ¿© º¹±¸ÇϽʽÿÀ (\":help recovery\" Âü°í).\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " ÀÌ¹Ì º¹±¸Çϼ̾ú´Ù¸é ½º¿ÒÆÄÀÏ \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" À»(¸¦) Áö¿ì¼Å¾ß ÀÌ ¸Þ½ÃÁö°¡ »ç¶óÁý´Ï´Ù.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "½º¿Ò ÆÄÀÏ \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\"ÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "ºö - ÁÖ¸ñ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "½º¿Ò ÆÄÀÏÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"Àбâ Àü¿ëÀ¸·Î ¿­±â(&O)\n"
-"±×³É °íÄ¡±â(&E)\n"
-"º¹±¸(&R)\n"
-"³¡³»±â(&Q)\n"
-"¹ö¸®±â(&A)"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"Àбâ Àü¿ëÀ¸·Î ¿­±â(&O)\n"
-"¹«Á¶°Ç ÆíÁý(&E)\n"
-"º¹±¸(&R)\n"
-"»èÁ¦(&D)\n"
-"³¡³»±â(&Q)\n"
-"¹ö¸®±â(&A)"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: ³Ê¹« ¸¹Àº ½º¿Ò ÆÄÀÏÀÌ ¹ß°ßµÇ¾ú½À´Ï´Ù"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: ¸Þ¸ð¸® ºÎÁ·! (%<PRIu64> ¹ÙÀÌÆ®¸¦ ÇÒ´ç)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ¸Þ´º Ç׸ñ °æ·ÎÀÇ ºÎºÐÀÌ ÇÏÀ§ ¸Þ´º°¡ ¾Æ´Õ´Ï´Ù"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: ¸Þ´º°¡ ´Ù¸¥ ¸ðµå¿¡¼­¸¸ Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: \"%s\" ¸Þ´º ¾øÀ½"
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: ¸Þ´º À̸§ ¾øÀ½"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ÇÏÀ§ ¸Þ´º ¾Õ¿¡´Â ¸Þ´º °æ·Î°¡ ºÙÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ¸Þ´º¹Ù¿¡ °ð¹Ù·Î ¸Þ´º Ç׸ñÀ» ´õÇÒ ¼ö´Â ¾ø½À´Ï´Ù"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ±¸ºÐÀÚ´Â ¸Þ´º °æ·ÎÀÇ ºÎºÐÀÌ µÉ ¼ö ¾ø½À´Ï´Ù"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- ¸Þ´º ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ¸Þ´º Ç׸ñ ¾Õ¿¡´Â ¸Þ´º °æ·Î°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: ¸Þ´º¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ¸ðµå¿¡ ´ëÇÑ ¸Þ´º°¡ Á¤ÀǵǾî ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ÇÏÀ§ ¸Þ´º ¾Õ¿¡ ¸Þ´º °æ·Î°¡ ÀÖ¾î¾ß ÇÕ´Ï´Ù"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: ¸Þ´º¸¦ ãÀ» ¼ö ¾øÀ½ - ¸Þ´º À̸§À» È®ÀÎÇϽʽÿÀ"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "%s ¼öÇàÁß ¿¡·¯ ¹ß°ß:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "%4ld ÁÙ:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: À߸øµÈ ·¹Áö½ºÅÍ À̸§: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "¸Þ½ÃÁö °ü¸®ÀÚ: Bram Moolenaar <Bram@vim.org>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Áß´Ü: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "°è¼ÓÇÏ·Á¸é ¿£ÅÍ È¤Àº ¸í·ÉÀ» ÀÔ·ÂÇϽʽÿÀ"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s ÁÙ %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- ´õ --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: È­¸é/ÆäÀÌÁö/¶óÀÎ ¾Æ·¡·Î, b/u/k: À§·Î, q: Á¾·á "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Áú¹®"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"¿¹(&Y)\n"
-"¾Æ´Ï¿À(&N)"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"¿¹(&Y)\n"
-"¾Æ´Ï¿À(&N)\n"
-"Ãë¼Ò(&C)"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"¿¹(&Y)\n"
-"¾Æ´Ï¿À(&N)\n"
-"¸ðµÎ ÀúÀå(&A)\n"
-"¸ðµÎ ¹ö¸²(&D)\n"
-"Ãë¼Ò(&C)"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf()¿¡ ³Ñ¾î¿Â ÀÎÀÚ °¹¼ö°¡ ºÎÁ·"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: printf()¿¡ ¿¹»ó¸øÇÑ Float ÀÎÀÚ"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: printf()¿¡ ³Ê¹« ¸¹Àº ÀÎÀÚ ³Ñ¾î¿È"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: °æ°í: Àбâ Àü¿ë ÆÄÀÏÀ» °íÄ¡°í ÀÖ½À´Ï´Ù"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "¼ýÀÚ ÀÔ·ÂÈÄ <¿£ÅÍ>³ª ¸¶¿ì½º Ŭ¸¯ (¼ýÀÚ¾øÀ¸¸é Ãë¼Ò): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "¼ýÀÚ ÀÔ·ÂÈÄ <¿£ÅÍ> (¼ýÀÚ¾øÀ¸¸é Ãë¼Ò): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "ÇÑ ÁÙ ÀÌ»ó"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "ÇÑ ÁÙ ÀÌÇÏ"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "%<PRId64> º¸´Ù ¸¹Àº ÁÙ"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "%<PRId64> º¸´Ù ÀûÀº ÁÙ"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (ÁߴܵǾú½À´Ï´Ù)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Ȉ!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "½ÇÇàÇÏ·Á°í ½© ºÎ¸§: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: Ä¿¼­ ¹Ø¿¡ ½Äº°ÀÚ°¡ ¾ø½À´Ï´Ù"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc'°¡ ºñ¾îÀÖ½À´Ï´Ù"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "°æ°í: Å͹̳ÎÀÌ ºñÁê¾ó »óŸ¦ Ç¥½ÃÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: Ä¿¼­ ¹Ø¿¡ ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: ÇöÀçÀÇ 'foldmethod'À¸·Î Á¢±â¸¦ Áö¿ï ¼ö ¾ø½À´Ï´Ù"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: changelist°¡ ºñ¾ú½À´Ï´Ù"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr ""
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr ""
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "VIMÀ» ¸¶Ä¡·Á¸é :quit<Enter> ÀÔ·Â"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 line %sed 1 time"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 line %sed %d times"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> lines %sed 1 time"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> lines %sed %d times"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "%<PRId64> lines to indent... "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "1 line indented "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "%<PRId64> lines indented "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr ""
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "cannot yank; delete anyway"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "1 line changed"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "%<PRId64> lines changed"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "block of 1 line yanked"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "1 line yanked"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "block of %<PRId64> lines yanked"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "%<PRId64> lines yanked"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: %s ·¹Áö½ºÅÍ¿¡ ¾Æ¹« °Íµµ ¾ø½À´Ï´Ù"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- ·¹Áö½ºÅÍ ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "ÀÌ»óÇÑ ·¹Áö½ºÅÍ À̸§"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# ·¹Áö½ºÅÍ:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: ¸ð¸£´Â ·¹Áö½ºÅÍ Çü½Ä %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> ¿­; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Selected %s%<PRId64> of %<PRId64> ¶óÀÎ; %<PRId64> of %<PRId64> ´Ü¾î; "
-"%<PRId64> of %<PRId64> ¹ÙÀÌÆ®"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Selected %s%<PRId64> of %<PRId64> ¶óÀÎ; %<PRId64> of %<PRId64> ´Ü¾î; "
-"%<PRId64> of %<PRId64> ¹®ÀÚ; %<PRId64> of %<PRId64> ¹ÙÀÌÆ®"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Col %s of %s; ¶óÀÎ %<PRId64> of %<PRId64>; ´Ü¾î %<PRId64> of %<PRId64>; ¹ÙÀÌ"
-"Æ® %<PRId64> of %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Col %s of %s; ¶óÀÎ %<PRId64> of %<PRId64>; ´Ü¾î %<PRId64> of %<PRId64>; ¹®ÀÚ "
-"%<PRId64> of %<PRId64>; ¹ÙÀÌÆ® %<PRId64> of %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> for BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=ÆäÀÌÁö %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "ºöÀ» ³¯°Ô ÇØ Áּż­ °í¸¿½À´Ï´Ù"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: ¸ð¸£´Â ¿É¼Ç"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: Áö¿øµÇÁö ¾Ê´Â ¿É¼ÇÀÔ´Ï´Ù"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: ¸ðµå¶óÀο¡¼­ »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr ""
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: = µÚ¿¡ ¼ýÀÚ°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: termcap¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: ÀÌ»óÇÑ ±ÛÀÚ <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: 'term'À» ºó ¹®ÀÚ¿­·Î ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext'¿Í 'patchmode'°¡ µ¿ÀÏÇÕ´Ï´Ù"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: 'listchars' °ª°ú Ãæµ¹ÀÌ ¹ß»ýÇÕ´Ï´Ù"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: 'fillchars' °ª°ú Ãæµ¹ÀÌ ¹ß»ýÇÕ´Ï´Ù"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: ÄÝ·ÐÀÌ ¾ø½À´Ï´Ù"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: ºó ¹®ÀÚ¿­ÀÔ´Ï´Ù"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> µÚ¿¡ ¼ýÀÚ°¡ ¾ø½À´Ï´Ù"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: ÄÞ¸¶°¡ ¾ø½À´Ï´Ù"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: ' °ªÀ» ¸í½ÃÇØ ÁÖ¼Å¾ß ÇÕ´Ï´Ù"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: Ãâ·ÂÇÒ ¼ö ¾ø´Â, ȤÀº ¿ÍÀÌµå ¹®ÀÚ¸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> µÚ¿¡ ÀÌ»óÇÑ ±ÛÀÚ"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: ÄÞ¸¶°¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring'Àº ºñ°Å³ª %sÀ»(¸¦) Æ÷ÇÔÇØ¾ß ÇÕ´Ï´Ù"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: ´ÝÈ÷Áö ¾ÊÀº Ç¥Çö½Ä ¹è¿­"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: ³Ê¹« ¸¹Àº Ç׸ñ"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: ±ÕÇüÀÌ ¾È ÀâÈù ±×·ì"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: ¹Ì¸® º¸±â âÀÌ ÀÌ¹Ì Á¸ÀçÇÕ´Ï´Ù"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: ArabicÀº UTF-8 ÀÎÄÚµù ÇÊ¿ä, ':set encoding=utf-8' Çϼ¼¿ä"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Àû¾îµµ %d ÁÙÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Àû¾îµµ %d Ä­ÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: ¸ð¸£´Â ¿É¼Ç: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: ¼ýÀÚ°¡ ÇÊ¿ä: &%s = '%s'"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Å͹̳ΠÄÚµå ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Àü¿ª ¿É¼Ç °ª ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Áö¿ª ¿É¼Ç °ª ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- ¿É¼Ç ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp ¿¡·¯"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': %s¿¡ ´ëÇÑ ¸Â´Â ±ÛÀÚ°¡ ¾ø½À´Ï´Ù"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ¼¼¹ÌÄÝ·Ð µÚ¿¡ ±ÛÀÚ°¡ ´õ ÀÖÀ½: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"Cannot execute shell "
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"shell returned "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"Could not get security context for "
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"Could not set security context for "
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: path¿¡¼­ \"%s\" ÆÄÀÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: Çü½Ä ¹®ÀÚ¿­¿¡ %%%cÀÌ(°¡) ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Çü½Ä ¹®ÀÚ¿­¿¡ %%%cÀÌ(°¡) À߸øµÇ¾ú½À´Ï´Ù"
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: Çü½Ä ¹®ÀÚ¿­¿¡ ]°¡ ¾ø½À´Ï´Ù"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: Çü½Ä ¹®ÀÚ¿­¿¡ Áö¿øµÇÁö ¾Ê´Â %%%cÀÌ(°¡) ÀÖ½À´Ï´Ù"
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Çü½Ä ¹®ÀÚ¿­ ¼­µÎ¿¡ À߸øµÈ %%%cÀÌ(°¡) ÀÖ½À´Ï´Ù"
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Çü½Ä ¹®ÀÚ¿­¿¡ À߸øµÈ %%%cÀÌ(°¡) ÀÖ½À´Ï´Ù"
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat'ÀÌ ¾î¶² ÆÐÅϵµ Æ÷ÇÔÇϰí ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: ºüÁ³°Å³ª ºó µð·ºÅ丮 À̸§"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: ´õ ÀÌ»óÀÇ Ç׸ñÀÌ ¾ø½À´Ï´Ù"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d of %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (ÁÙÀ» Áö¿üÀ½)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: ÄüÇȽº ½ºÅÃÀÇ ¹Ù´ÚÀÔ´Ï´Ù"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: ÄüÇȽº ½ºÅÃÀÇ ²À´ë±âÀÔ´Ï´Ù"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "error list %d of %d; %d errors"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: ¾µ ¼ö ¾øÀ½, 'buftype' ¿É¼ÇÀÌ ¼³Á¤µÇ¾î ÀÖ½À´Ï´Ù"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: ÆÄÀÏ¸í ´©¶ô ȤÀº À߸øµÈ ÆÐÅÏ"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "\"%s\" ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: ¹öÆÛ°¡ ·ÎµåµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: StringÀ̳ª List°¡ ÀÖ¾î¾ß ÇÔ"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: %s%%[]¿¡ À߸øµÈ Ç׸ñ"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ µÚ¿¡ ]°¡ ¾ø½À´Ï´Ù"
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: ¸ÂÁö ¾Ê´Â %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: ¸ÂÁö ¾Ê´Â %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: ¸ÂÁö ¾Ê´Â %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z(´Â ¿©±â¿¡¼­ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 µîÀº ¿©±â¿¡¼­ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ µÚ¿¡ ]°¡ ¾ø½À´Ï´Ù"
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: ºó %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: ÆÐÅÏÀÌ ³Ê¹« ±é´Ï´Ù"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: \\z(°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: %s(°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: ¸ÂÁö ¾Ê´Â \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ µÚ¿¡ À߸øµÈ ¹®ÀÚ"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: %s{...}s°¡ ³Ê¹« ¸¹À½"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: Nested %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: Nested %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: \\_¸¦ Àß ¸ø »ç¿ë"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c µÚ¿¡ ¾Æ¹«°Íµµ ¾ø½À´Ï´Ù"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: ÀÌ»óÇÑ ÈÄÀ§ ÂüÁ¶"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z µÚ¿¡ ÀÌ»óÇÑ ¹®ÀÚ"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] µÚ¿¡ ÀÌ»óÇÑ ¹®ÀÚ"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% µÚ¿¡ ÀÌ»óÇÑ ¹®ÀÚ"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...}¿¡ ±¸¹® ¿¡·¯"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "¿ÜºÎ submatches:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr ""
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr ""
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr ""
-
-#: ../regexp_nfa.c:2042
-#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E50: \\z(°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr ""
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr ""
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr ""
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr ""
-
-#: ../regexp_nfa.c:6049
-#, fuzzy
-msgid "Could not open temporary log file for writing "
-msgstr "E828: ¾²±â À§ÇØ undoÀ» ¿­ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " ¼±ÅÃġȯ"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ¹Ù²Ù±â"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ¹Ý´ë"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ³¢¿ö³Ö±â"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (³¢¿ö³Ö±â)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (¹Ù²Ù±â)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (¼±ÅÃġȯ)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Çìºê·ç"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " ¾Æ¶óºñ¾Æ"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (¾ð¾î)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (ºÙÀ̱â)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ºñÁÖ¾ó"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ºñÁÖ¾ó ¶óÀÎ"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ºñÁÖ¾ó ºí·Ï"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " °í¸£±â"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ¶óÀÎ °í¸£±â"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ºí·Ï °í¸£±â"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "±â·ÏÁß"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: À߸øµÈ ã±â ¹®ÀÚ¿­: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: óÀ½±îÁö ¸Â´Â ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù: %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ³¡±îÁö ¸Â´Â ¹®ÀÚ¿­ÀÌ ¾ø½À´Ï´Ù: %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ';' µÚ¿¡´Â '?'³ª '/'°¡ ¿Í¾ß ÇÕ´Ï´Ù"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (ÀÌÀü¿¡ ¸Â¾Ò´ø ¸ñ·Ï Æ÷ÇÔ)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- Included files "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "not found "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "in path ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Already listed)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " ¸ø ã¾ÒÀ½"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "Æ÷ÇÔµÈ ÆÄÀÏ Ã£´Â Áß: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "Æ÷ÇÔµÈ ÆÄÀÏ %s ã´Â Áß"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: ¸Â´Â °Ô ÇöÀç ÁÙ¿¡ ÀÖ½À´Ï´Ù"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "¸ðµç Æ÷ÇÔµÈ ÆÄÀÏÀ» ã¾Ò½À´Ï´Ù"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "Æ÷ÇÔµÈ ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: Á¤ÀǸ¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: ÆÐÅÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Substitute "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: spell ÆÄÀÏ Çü½Ä ¿¡·¯"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: À߸° spell ÆÄÀÏ"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Trailing text in %s line %d: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Affix name too long in %s line %d: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: affix ÆÄÀÏ FOL, LOW ȤÀº UPP¿¡ Çü½Ä ¿¡·¯"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL, LOW ȤÀº UPPÀÇ ¹®ÀÚ°¡ ¹üÀ§¸¦ ¹þ¾î³²"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "´Ü¾î Æ®¸® ¾ÐÃàÁß..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: ¸ÂÃã¹ý °Ë»ç°¡ Ȱ¼ºÈ­µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr "°æ°í: ´Ü¾î ¸ñ·Ï \"%s.%s.spl\" ȤÀº \"%s.ascii.spl\"À» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "spell ÆÄÀÏ \"%s\"À»(¸¦) Àаí ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: spell ÆÄÀÏÀÌ ¾Æ´Ñ °Í °°½À´Ï´Ù"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: ¿À·¡µÈ spell ÆÄÀÏ, °»½ÅÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Spell ÆÄÀÏÀÌ »õ ¹öÁ¯ÀÇ Vim¿ëÀÔ´Ï´Ù"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: spell ÆÄÀÏ¿¡ Áö¿øµÇÁö ¾Ê´Â ¼½¼Ç"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "°æ°í: %s ¿µ¿ªÀº Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "affix ÆÄÀÏ %s Àд Áß"
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ÀÖ´Â ´Ü¾î º¯È¯ ½ÇÆÐ: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "%sÀÇ º¯È¯ÀÌ Áö¿øµÇÁö ¾Ê½À´Ï´Ù: %s¿¡¼­ %s·Î"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ FLAG¿¡ ´ëÇÑ À߸øµÈ °ª: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ Ç÷¡±×°¡ »ç¿ëµÈ ÈÄ FLAG: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"%s ¶óÀÎ %d¿¡ PFX µÚ¿¡ COMPOUNDFORBIDFLAGÀ» Á¤ÀÇÇÑ °ÍÀº À߸øµÈ °á°ú¸¦ ÃÊ·¡ÇÒ "
-"¼ö ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"%s ¶óÀÎ %d¿¡ PFX µÚ¿¡ COMPOUNDPERMITFLAGÀ» Á¤ÀÇÇÑ °ÍÀº À߸øµÈ °á°ú¸¦ ÃÊ·¡ÇÒ "
-"¼ö ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ COMPOUNDRULES °ª: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ COMPOUNDWORDMAX °ª: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ COMPOUNDMIN °ª: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ COMPOUNDSYLMAX °ª: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ CHECKCOMPOUNDPATTERN °ª: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ¿¬¼ÓµÈ affix ºí·Ï¿¡ ´Ù¸¥ °áÇÕ Ç÷¡±×: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ Áߺ¹µÈ affix: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"%s ¶óÀÎ %d¿¡ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST¿¡ ´ëÇØ¼­µµ "
-"affix°¡ »ç¿ëµÊ: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ Y³ª NÀÌ ±â´ëµÊ: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d°¡ ¸Á°¡Áø »óÅÂ: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s ¶óÀÎ %d¿¡ REP(SAL) Ä«¿îÆ®°¡ ±â´ëµÊ"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "%s ¶óÀÎ %d¿¡ MAP Ä«¿îÆ®°¡ ±â´ëµÊ"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s ¶óÀÎ %dÀÇ MAP¿¡ Áߺ¹µÈ ¹®ÀÚ"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ¸ð¸£´Â ȤÀº Áߺ¹µÈ Ç׸ñ: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s¿¡ FOL/LOW/UPPÀÌ ´©¶ôµÈ ¶óÀÎ"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "COMPOUNDSYLMAXÀÌ SYLLABLE¾øÀÌ »ç¿ëµÊ"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "postponed Á¢µÎ»ç°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "compound Ç÷¡±×°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "postponed Á¢µÎ»ç¿Í(³ª) compound Ç÷¡±×°¡ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "SOFO%s°¡ ´©¶ôµÈ ¶óÀÎÀÌ %s¿¡ ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "%s¿¡ SAL°ú SOFO ¶óÀÎÀÌ µÑ ´Ù ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ¼ýÀÚ°¡ ¾Æ´Ñ Ç÷¡±×: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ Ç÷¡±×: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "%s °ªÀÌ ´Ù¸¥ .aff ÆÄÀÏ¿¡¼­ »ç¿ëµÈ °Í°ú ´Ù¸¨´Ï´Ù"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "»çÀü ÆÄÀÏ %s Àд Áß ..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: %s¿¡ ´Ü¾î Ä«¿îÆ®°¡ ¾ø½À´Ï´Ù"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "¶óÀÎ %6d, ´Ü¾î %6d - %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ Áߺ¹µÈ ´Ü¾î: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ óÀ½ Áߺ¹µÈ ´Ü¾î: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d°³ÀÇ Áߺ¹µÈ ´Ü¾î°¡ %s¿¡ ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "¹«½ÃµÈ %d°³ÀÇ ¾Æ½ºÅ°¹®ÀÚ¿­ÀÌ ¾Æ´Ñ ´Ü¾î°¡ %s¿¡ ÀÖ½À´Ï´Ù"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "´Ü¾î ÆÄÀÏ %s Àд Áß ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "%s ¶óÀÎ %dÀÇ Áߺ¹µÈ /encoding= ¶óÀÎ ¹«½ÃµÊ: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s ¶óÀÎ %dÀÇ ´Ü¾î µÚÀÇ /encoding= ¶óÀÎ ¹«½ÃµÊ: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s ¶óÀÎ %dÀÇ Áߺ¹µÈ /regions= ¶óÀÎ ¹«½ÃµÊ: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ³Ê¹« ¸¹Àº ¿µ¿ª: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "%s ¶óÀÎ %dÀÇ / ¶óÀÎ ¹«½ÃµÊ: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ À߸øµÈ ¿µ¿ª ¹øÈ£: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s ¶óÀÎ %d¿¡ ¸ð¸£´Â Ç÷¡±×: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "¾Æ½ºÅ° ¹®ÀÚ¿­ÀÌ ¾Æ´Ñ %d°³ÀÇ ´Ü¾î°¡ ¹«½ÃµÇ¾ú½À´Ï´Ù"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "%d/%d ³ëµå°¡ ¾ÐÃàµÊ; %d (%d%%)°¡ ³²À½"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "¸ÂÃã¹ý ÆÄÀÏÀ» Àд Áß..."
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "soundfold ¼öÇàÁß..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "soundfold ¼öÇà ÈÄÀÇ ´Ü¾î ¼ö: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "ÃÑ ´Ü¾î ¼ö: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "%s Á¦¾È ÆÄÀÏÀ» ¾²´Â Áß ..."
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "ÃßÁ¤µÈ ·±Å¸ÀÓ ¸Þ¸ð¸® »ç¿ë·®: %d ¹ÙÀÌÆ®"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: »ý¼º ÆÄÀϸíÀº ¿µ¿ª À̸§°ú ´Þ¶ó¾ß ÇÕ´Ï´Ù"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ÃÖ´ë 8°³ÀÇ ¿µ¿ªÀÌ Áö¿øµË´Ï´Ù"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: %s¿¡ À߸øµÈ ¿µ¿ª"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "°æ°í: compound¿Í NOBREAK µÑ ´Ù ¸í½ÃµÊ"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "spell ÆÄÀÏ %s ¾²´Â Áß ..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "³¡!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile'¿¡ %<PRId64> Ç׸ñÀÌ ¾ø½À´Ï´Ù"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "%s¿¡¼­ ´Ü¾î »èÁ¦µÊ"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "%s¿¡ ´Ü¾î Ãß°¡µÊ"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: ´Ü¾î°¡ spell ÆÄÀÏ °£¿¡ ´Ù¸¨´Ï´Ù"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Á˼Û, Á¦¾ÈÇÒ °Ô ¾ø½À´Ï´Ù"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Á˼Û, %<PRId64>°³¸¸ Á¦¾È"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "Change \"%.*s\" to:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: öÀÚ°¡ ¹Ù²ïÀûÀÌ ¾ø½À´Ï´Ù"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: ãÀ» ¼ö ¾øÀ½: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: .sug ÆÄÀÏÀÌ ¾Æ´Ñ °Í °°À½: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: ¿À·¡µÈ .sug ÆÄÀÏ, °»½Å ÇÊ¿ä: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: .sug ÆÄÀÏÀÌ »õ ¹öÁ¯ÀÇ Vim¿ëÀÓ: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: .sug ÆÄÀÏÀÌ .spl ÆÄÀϰú ¸ÂÁö ¾ÊÀ½: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: .sug ÆÄÀÏ Àб⠿¡·¯: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: MAP Ç׸ñ¿¡ Áߺ¹µÈ ¹®ÀÚ"
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "ÀÌ ¹öÆÛ¿¡ ´ëÇØ Á¤ÀÇµÈ ±¸¹® Ç׸ñÀÌ ¾ø½À´Ï´Ù"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: À߸øµÈ ÀÎÀÚ: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: ÀÌ·± ±¸¹® Ŭ·¯½ºÅÍ´Â ¾ø½À´Ï´Ù: %s"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "C-Çü½Ä ÁÖ¼®¹®¿¡ µ¿±â¸ÂÃã"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "µ¿±â¸ÂÃã ¾øÀ½"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "syncing starts "
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " lines before top line"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Syntax sync Ç׸ñµé ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"syncing on items"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Syntax Ç׸ñ ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: ÀÌ·± ±¸¹® Ŭ·¯½ºÅÍ´Â ¾ø½À´Ï´Ù: %s"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "minimal "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "maximal "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; match "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr " line breaks"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: contains ÀÎÀÚ´Â ¿©±â¿¡ ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: À߸øµÈ cchar °ª"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: group[t]here´Â ¿©±â¿¡¼­ »ç¿ëµÉ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: %s¿¡ ´ëÇÑ region Ç׸ñÀ» ãÁö ¸øÇß½À´Ï´Ù"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: ÆÄÀÏÀ̸§ÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#: ../syntax.c:4221
-#, fuzzy
-msgid "E847: Too many syntax includes"
-msgstr "E77: ÆÄÀÏ À̸§ÀÌ ³Ê¹« ¸¹½À´Ï´Ù"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: ']' ´©¶ô: %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: '=' ´©¶ô: %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: ÃæºÐÄ¡ ¾ÊÀº ÀÎÀÚ: ±¸¹® ¿µ¿ª %s"
-
-#: ../syntax.c:4870
-#, fuzzy
-msgid "E848: Too many syntax clusters"
-msgstr "E391: ÀÌ·± ±¸¹® Ŭ·¯½ºÅÍ´Â ¾ø½À´Ï´Ù: %s"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: Ŭ·¯½ºÅͰ¡ ¸í½ÃµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ÆÐÅÏ ±¸ºÐÀÚ¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: ÆÐÅÏ µÚ¿¡ ¾²·¹±â: %s"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: syntax sync: ÁÙ ¿¬¼Ó ÆÐÅÏÀÌ µÎ ¹ø »ç¿ëµÇ¾ú½À´Ï´Ù"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: ºñÁ¤»óÀûÀÎ ÀÎÀÚ: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: ÀÌÄ÷ ±âÈ£°¡ ºüÁ³À½: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: ºó ÀÎÀÚ: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %sÀº(´Â) ¿©±â¿¡¼­ Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %sÀº(´Â) contains ¸ñ·ÏÀÇ Ã¹ ¹øÂ°¿©¾ß ÇÕ´Ï´Ù"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: ¸ð¸£´Â ±×·ì À̸§: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: À߸øµÈ :syntax ÇÏÀ§ ¸í·É: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: syncolor.vim ¹Ýº¹ ·Îµù"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: ÇÏÀ̶óÀÌÆ® ±×·ìÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ÃæºÐÄ¡ ¾ÊÀº ÀÎÀÚ: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: ³Ê¹« ¸¹Àº ÀÎÀÚ: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: groupÀÌ ¼³Á¤°ªÀÌ ÀÖ½À´Ï´Ù, highlight link ¹«½ÃµÊ"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: ¶æ¹ÛÀÇ ÀÌÄ÷ ±âÈ£: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: ÀÌÄ÷ ±âÈ£°¡ ºüÁ³À½: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: ÀÎÀÚ°¡ ºüÁ³À½: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: ºñÁ¤»óÀûÀÎ °ª: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: ¸ð¸£´Â FG »ö»ó"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: ¸ð¸£´Â BG »ö»ó"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: »ö À̸§À̳ª ¼ýÀÚ¸¦ ÀνÄÇÒ ¼ö ¾øÀ½: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Å͹̳ΠÄڵ尡 ³Ê¹« ±è: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: À߸øµÈ ÀÎÀÚ: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ³Ê¹« ¸¹Àº ´Ù¸¥ ÇÏÀ̶óÀÌÆ® ¼Ó¼ºÀÌ »ç¿ëµÇ°í ÀÖ½À´Ï´Ù"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: ±×·ì À̸§¿¡ Ãâ·ÂÇÒ ¼ö ¾ø´Â ¹®ÀÚ°¡ ÀÖ½À´Ï´Ù"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: ±×·ì À̸§¿¡ ÀÌ»óÇÑ ¹®ÀÚ"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr ""
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ÅÂ±× ½ºÅÃÀÇ ³¡ÀÔ´Ï´Ù"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: ÅÂ±× ½ºÅÃÀÇ Ã³À½ÀÔ´Ï´Ù"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: ù ¹øÂ° ¸Â´Â ÅÂ±× ÀÌÀüÀ¸·Î´Â °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: ű׸¦ ãÀ» ¼ö ¾øÀ½: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri kind tag"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "ÆÄÀÏ\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: ¸Â´Â űװ¡ Çϳª ¹Û¿¡ ¾ø½À´Ï´Ù"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ¸¶Áö¸· ¸Â´Â ÅÂ±× µÚ·Î´Â °¥ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "ÆÄÀÏ \"%s\"ÀÌ(°¡) Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "tag %d of %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " or more"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " Using tag with different case!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: ÆÄÀÏ \"%s\"ÀÌ(°¡) Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # TO tag FROM line in file/text"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "ÅÂ±× ÆÄÀÏ %s ã´Â Áß"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "ÅÂ±× ÆÄÀÏÀÇ ³Ê¹« ±ä ¶óÀÎÀ» ¹«½ÃÇÕ´Ï´Ù"
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: ÅÂ±× ÆÄÀÏ \"%s\"¿¡ Çü½Ä ¿¡·¯°¡ ÀÖ½À´Ï´Ù"
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "Before byte %<PRId64>"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: ÅÂ±× ÆÄÀÏÀÌ Á¤·ÄµÇ¾î ÀÖÁö ¾ÊÀ½: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: ÅÂ±× ÆÄÀÏÀÌ ¾ø½À´Ï´Ù"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: ÅÂ±× ÆÐÅÏÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ű׸¦ ãÀ» ¼ö ¾øÁö¸¸ À̰а°½À´Ï´Ù!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "Áߺ¹µÈ ÇÊµå ¸í: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' not known. Available builtin terminals are:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "defaulting to '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: termcap ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Å͹̳ΠÇ׸ñÀ» terminfo¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Å͹̳ΠÇ׸ñÀ» termcap¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap¿¡ \"%s\" Ç׸ñÀÌ ¾ø½À´Ï´Ù"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Å͹̳ÎÀÌ \"cm\" ±â´ÉÀ» Áö¿øÇØ¾ß ÇÕ´Ï´Ù"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Å͹̳ΠŰ ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "ºö: ÀÔ·Â Àд Áß ¿¡·¯, ³¡³»´ÂÁß...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: ÁÙ °¹¼ö°¡ ¸ð¸£´Â »çÀÌ¿¡ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: ¾²±â À§ÇØ undoÀ» ¿­ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: ±úÁø undo ÆÄÀÏ (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "'undodir'¿¡ ÀÖ´Â ¾î¶² µð·ºÅ丮¿¡µµ undo ÆÄÀÏÀ» ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "ÀÐÀ» ¼ö°¡ ¾ø¾î¼­ undo ÆÄÀÏ¿¡ µ¤¾î¾µ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "undo ÆÄÀÏÀÌ ¾Æ´Ï¾î¼­ µ¤¾î¾µ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "undoÇÒ ³»¿ëÀÌ ¾ø¾î¼­ undo ÆÄÀÏ ÀúÀåÀ» °Ç³Ê¶Ý´Ï´Ù"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "undo ÆÄÀÏ ¾²´Â Áß: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: undo ÆÄÀÏ ¾²±â ¿¡·¯: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "¼ÒÀ¯ÀÚ°¡ ´Þ¶ó¼­ undo ÆÄÀÏÀ» ÀÐÁö ¾Ê½À´Ï´Ù: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "undo ÆÄÀÏ Àд Áß: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: Àбâ À§ÇØ undo ÆÄÀÏÀ» ¿­ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: undo ÆÄÀÏÀÌ ¾Æ´Õ´Ï´Ù: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: ȣȯµÇÁö ¾Ê´Â undo ÆÄÀÏ: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "ÆÄÀÏ ³»¿ëÀÌ ¹Ù²î¾î¼­, undo Á¤º¸¸¦ »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "undo ÆÄÀÏ %sÀ»(¸¦) Àоîµé¿´½À´Ï´Ù"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "´õ ÀÌ»óÀÇ ¼öÁ¤ÀÌ ¾ø¾ú½À´Ï´Ù"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "´õ ÀÌ»óÀÇ ¼öÁ¤Àº ¾ø¾ú½À´Ï´Ù"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: Undo ¹øÈ£ %<PRId64>¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: À߸øµÈ ÁÙ ¹øÈ£"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "more line"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "more lines"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "line less"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "fewer lines"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "change"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "changes"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "before"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "after"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Ãë¼ÒÇÒ °Ô ¾ø½À´Ï´Ù"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr ""
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> seconds ago"
-
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undo µÚ¿¡ undojoinÀº ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: undo ¸ñ·ÏÀÌ ±úÁ³½À´Ï´Ù"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: undo ÁÙÀÌ ¾ø½À´Ï´Ù"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Æ÷ÇÔµÈ ÆÐÄ¡: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"º°µµÀÇ ÆÐÄ¡: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Modified by "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Compiled "
-
-#: ../version.c:649
-msgid "by "
-msgstr "by "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"Huge ¹öÁ¯ "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "GUI ¾øÀ½."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " ±â´É (+: Æ÷ÇÔµÊ, -: Æ÷ÇÔ ¾È µÊ):\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ½Ã½ºÅÛ vimrc ÆÄÀÏ: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " »ç¿ëÀÚ vimrc ÆÄÀÏ: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " »ç¿ëÀÚ µÎ ¹øÂ° vimrc ÆÄÀÏ: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " »ç¿ëÀÚ ¼¼ ¹øÂ° vimrc ÆÄÀÏ: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " »ç¿ëÀÚ exrc ÆÄÀÏ: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " »ç¿ëÀÚ µÎ ¹øÂ° exrc ÆÄÀÏ: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " fall-back for $VIM: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " f-b for $VIMRUNTIME: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "ÄÄÆÄÀÏ: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "¸µÅ©: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " µð¹ö±× ºôµå"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "ºö - Çâ»óµÈ Vi"
-
-#: ../version.c:769
-msgid "version "
-msgstr "ÆÇ "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "by Bram Moolenaar et al."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "ºöÀº ¼Ò½º°¡ ¿­·Á ÀÖ°í °øÂ¥·Î ¹èÆ÷µË´Ï´Ù"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "¿ì°£´Ù¿¡ »ç´Â °¡³­ÇÑ ¾ÆÀ̸¦ µµ¿ÍÁÖ¼¼¿ä!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é :help iccf<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "³¡³»·Á¸é :q<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "¿Â¶óÀÎ µµ¿ò¸»À» º¸·Á¸é :help<¿£ÅÍ> ¶Ç´Â <F1> ÀÔ·Â"
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "ÆÇ Á¤º¸¸¦ º¸·Á¸é :help version7<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Vi ȣȯ »óÅ·Π½ÇÇàÁßÀÔ´Ï´Ù"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "ºö ±âº»°ªÀ» »ç¿ëÇÏ·Á¸é :set nocp<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é :help cp-default<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "ºö °³¹ßÀ» ÈÄ¿øÇØ ÁÖ¼¼¿ä!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "ºö »ç¿ëÀÚ·Î µî·ÏÇϼ¼¿ä!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é :help sponsor<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é :help register<¿£ÅÍ> ÀÔ·Â"
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é ¸Þ´º µµ¿ò¸»->Sponsor/Register"
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "ÀÌ¹Ì ÇϳªÀÇ Ã¢¸¸ ÀÖ½À´Ï´Ù"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: ¹Ì¸® º¸±â âÀÌ ¾ø½À´Ï´Ù"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: À§ ¿ÞÂʰú ¾Æ·¡ ¿À¸¥ÂÊÀ» µ¿½Ã¿¡ ³ª´­ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ´Ù¸¥ âÀÌ ³ª´²Á³À» ¶§¿¡´Â ȸÀüÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: ¸¶Áö¸· âÀ» ´ÝÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: autocmd âÀ» ´ÝÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: âÀ» ´ÝÀ» ¼ö ¾øÀ½, autocmd ⸸ ³²À½"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: ´Ù¸¥ âÀÌ ¹Ù²î¾ú½À´Ï´Ù"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: Ä¿¼­ ¹Ø¿¡ ÆÄÀÏ À̸§ÀÌ ¾ø½À´Ï´Ù"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: ºó ºñ¹Ð¹øÈ£·Î bf_key_init() ÇÔ¼ö°¡ ºÒ·ÁÁ³½À´Ï´Ù"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Blowfish big/little endian use wrong"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: sha256 ½ÃÇèÀÌ ½ÇÆÐÇß½À´Ï´Ù."
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Blowfish ½ÃÇèÀÌ ½ÇÆÐÇß½À´Ï´Ù."
-
-#~ msgid "Patch file"
-#~ msgstr "ÆÐŰ ÆÄÀÏ"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "È®ÀÎ(&O)\n"
-#~ "Ãë¼Ò(&C)"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Vim ¼­¹ö¿¡ ¿¬°áµÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: %s(À¸)·Î º¸³¾ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: ¼­¹öÀÇ ÀÀ´äÀ» ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Ŭ¶óÀÌ¾ðÆ®·Î º¸³¾ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Save As"
-#~ msgstr "´Ù¸¥ À̸§À¸·Î ÀúÀå"
-
-#~ msgid "Edit File"
-#~ msgstr "ÆÄÀÏ °íÄ¡±â"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (¸ø ã¾ÒÀ½)"
-
-#~ msgid "Source Vim script"
-#~ msgstr "ºö ½ºÅ©¸³Æ® ·Îµå"
-
-#~ msgid "unknown"
-#~ msgstr "¸ð¸§"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "»õ â¿¡¼­ ÆÄÀÏ °íÄ¡±â"
-
-#~ msgid "Append File"
-#~ msgstr "ÆÄÀÏ Ãß°¡"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "â À§Ä¡: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "¸®µð·º¼Ç ÀúÀå"
-
-#~ msgid "Save View"
-#~ msgstr "º¸±â ÀúÀå"
-
-#~ msgid "Save Session"
-#~ msgstr "¼¼¼Ç ÀúÀå"
-
-#~ msgid "Save Setup"
-#~ msgstr "¼³Á¤ ÀúÀå"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #<´Â +eval ±â´ÉÀÌ Æ÷ÇԵǾî¾ß »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: ÀÌ ÆÇ¿¡´Â digraph°¡ ¾ø½À´Ï´Ù"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "Àº(´Â) ÀåÄ¡°¡ ¾Æ´Õ´Ï´Ù ('opendevice' ¿É¼ÇÀ¸·Î ¸·Èû)"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "Ç¥ÁØÀԷ¿¡¼­ Àд Áß..."
-
-#~ msgid "[crypted]"
-#~ msgstr "[¾Ïȣȭ µÇ¾ú½À´Ï´Ù]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: ÆÄÀÏÀÌ ¸ð¸£´Â ¹æ¹ýÀ¸·Î ¾ÏȣȭµÇ¾î ÀÖ½À´Ï´Ù"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans¿¡¼­´Â ¹Ù²îÁö ¾ÊÀº ¹öÆÛ¸¦ ¾µ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "NetBeans ¹öÆÛ¿¡ ´ëÇØ¼­´Â ºÎºÐ ÀúÀåÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "ÀåÄ¡ ¾²±â°¡ 'opendevice' ¿É¼ÇÀ¸·Î ¸·Èû"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: The resource fork will be lost (µ¤¾î¾²·Á¸é ! ´õÇϱâ)"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: GUI¸¦ ½ÃÀÛÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: \"%s\"¿¡¼­ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: ¾µ¸¸ÇÑ ±Û²ÃÀ» ãÀ» ¼ö ¾ø¾î¼­ GUI¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: 'guifontwide'°¡ ÀÌ»óÇÕ´Ï´Ù"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' °ªÀÌ ÀÌ»óÇÕ´Ï´Ù"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: »ö %sÀ»(¸¦) ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<¿­ ¼ö ¾øÀ½> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: ±Û²Ã %sÀ»(¸¦) ¾òÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: ÇöÀç µð·ºÅ丮·Î µ¹¾Æ°¥ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Pathname:"
-#~ msgstr "°æ·Î À̸§:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: ÇöÀç µð·ºÅ丮¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "OK"
-#~ msgstr "È®ÀÎ"
-
-#~ msgid "Cancel"
-#~ msgstr "Ãë¼Ò"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "½ºÅ©·Ñ¹Ù À§Á¬: ½æ ÇȽº¸ÊÀÇ Áö¿À¹ÌÆ®¸®¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù."
-
-#~ msgid "Vim dialog"
-#~ msgstr "ºö ´ëÈ­»óÀÚ"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr ""
-#~ "E232: ¸Þ½ÃÁö¿Í ÄÝ¹é ¸ðµÎ¸¦ »ç¿ëÇØ¼­´Â BalloonEvalÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Input _Methods"
-#~ msgstr "ÀÔ·Â ¹æ¹ý(_M)"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "ºö - ã¾Æ¼­ ¹Ù²Ù±â..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "ºö - ã±â..."
-
-#~ msgid "Find what:"
-#~ msgstr "¹«¾ó ãÀ»±î¿ä:"
-
-#~ msgid "Replace with:"
-#~ msgstr "¹Ù²Ü ¹®ÀÚ¿­:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "¶È°°Àº ³¹¸»¸¸"
-
-#~ msgid "Direction"
-#~ msgstr "¹æÇâ"
-
-#~ msgid "Up"
-#~ msgstr "À§·Î"
-
-#~ msgid "Down"
-#~ msgstr "¾Æ·¡·Î"
-
-#~ msgid "Find Next"
-#~ msgstr "´ÙÀ½ ã±â"
-
-#~ msgid "Replace"
-#~ msgstr "¹Ù²Ù±â"
-
-#~ msgid "Replace All"
-#~ msgstr "¸ðµÎ ¹Ù²Ù±â"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "ºö: ¼¼¼Ç °ü¸®ÀڷκÎÅÍ \"die\" ¿äûÀ» ¹Þ¾Ò½À´Ï´Ù\n"
-
-#~ msgid "Close"
-#~ msgstr "´Ý±â"
-
-#~ msgid "New tab"
-#~ msgstr "»õ ÅÇ"
-
-#~ msgid "Open Tab..."
-#~ msgstr "ÅÇ ¿­±â..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "ºö: ¸ÞÀΠâÀÌ Á×°Ô µÉ °ÍÀÔ´Ï´Ù\n"
-
-#~ msgid "&Filter"
-#~ msgstr "°Å¸£°³(&F)"
-
-#~ msgid "&Cancel"
-#~ msgstr "Ãë¼Ò(&C)"
-
-#~ msgid "Directories"
-#~ msgstr "µð·ºÅ丮"
-
-#~ msgid "Filter"
-#~ msgstr "°Å¸£°³"
-
-#~ msgid "&Help"
-#~ msgstr "µµ¿ò¸»(&H)"
-
-#~ msgid "Files"
-#~ msgstr "ÆÄÀÏ"
-
-#~ msgid "&OK"
-#~ msgstr "È®ÀÎ(&O)"
-
-#~ msgid "Selection"
-#~ msgstr "°í¸£±â"
-
-#~ msgid "Find &Next"
-#~ msgstr "´ÙÀ½ ã±â(&N)"
-
-#~ msgid "&Replace"
-#~ msgstr "¹Ù²Ù±â(&R)"
-
-#~ msgid "Replace &All"
-#~ msgstr "¸ðµÎ ¹Ù²Ù±â(&A)"
-
-#~ msgid "&Undo"
-#~ msgstr "Ãë¼Ò(&U)"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: â Á¦¸ñ \"%s\"À»(¸¦) ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Áö¿øµÇÁö ¾Ê´Â ÀÎÀÚ: \"-%s\": OLE ÆÇÀ» »ç¿ëÇϽʽÿÀ."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: MDI ÀÀ¿ëÇÁ·Î±×·¥ ¾È¿¡¼­ âÀ» ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Close tab"
-#~ msgstr "ÅÇ ´Ý±â"
-
-#~ msgid "Open tab..."
-#~ msgstr "ÅÇ ¿­±â..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "¹®ÀÚ¿­ ã±â ('\\'¸¦ ãÀ¸·Á¸é '\\\\' »ç¿ë)"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "¹®ÀÚ¿­ ã¾Æ ¹Ù²Ù±â ('\\'¸¦ ãÀ¸·Á¸é '\\\\' »ç¿ë)"
-
-#~ msgid "Not Used"
-#~ msgstr "»ç¿ë ¾ÊµÊ"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "µð·ºÅ丮\t*.nothing\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "ºö E458: »ö»ó¸Ê ¿£Æ®¸®¸¦ ÇÒ´çÇÒ ¼ö ¾ø½À´Ï´Ù, ¸î¸î »öÀÌ À߸øµÉ ¼ö ÀÖ½À´Ï´Ù"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: ´ÙÀ½ ±ÛÀÚ¼ÂÀÇ ±Û²ÃÀÌ ±Û²Ã¼Â %s¿¡ ¾ø½À´Ï´Ù:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: ±Û²Ã¼Â À̸§: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "±Û²Ã '%s'Àº(´Â) °íÁ¤³ÐÀ̰¡ ¾Æ´Õ´Ï´Ù"
-
-#~ msgid "E253: Fontset name: %s\n"
-#~ msgstr "E253: ±Û²Ã¼Â À̸§: %s\n"
-
-#~ msgid "Font0: %s\n"
-#~ msgstr "±Û²Ã0: %s\n"
-
-#~ msgid "Font1: %s\n"
-#~ msgstr "±Û²Ã1: %s\n"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0\n"
-#~ msgstr "±Û²Ã%<PRId64> ³Êºñ°¡ ±Û²Ã0ÀÇ µÎ¹è°¡ ¾Æ´Õ´Ï´Ù\n"
-
-#~ msgid "Font0 width: %<PRId64>\n"
-#~ msgstr "±Û²Ã0 ³Êºñ: %<PRId64>\n"
-
-#~ msgid ""
-#~ "Font1 width: %<PRId64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "±Û²Ã1 ³Êºñ: %<PRId64>\n"
-#~ "\n"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - ±Û²Ã ¼±Åñâ"
-
-#~ msgid "Name:"
-#~ msgstr "À̸§:"
-
-#~ msgid "Encoding:"
-#~ msgstr "ÀÎÄÚµù:"
-
-#~ msgid "Font:"
-#~ msgstr "±Û²Ã:"
-
-#~ msgid "Style:"
-#~ msgstr "½ºÅ¸ÀÏ:"
-
-#~ msgid "Size:"
-#~ msgstr "Å©±â:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: ÇÑ±Û ¿ÀÅ丶Ÿ ¿¡·¯"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat ¿¡·¯"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: cscope µ¥ÀÌÅͺ£À̽º¸¦ ¿­ ¼ö ¾øÀ½: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: cscope µ¥ÀÌÅͺ£À̽º Á¤º¸¸¦ ¾òÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "undo Á¤º¸¸¦ ÀúÀåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: ¹Ì¾ÈÇÕ´Ï´Ù, ÀÌ ¸í·ÉÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù, MzScheme ¶óÀ̺귯¸®¸¦ ·Îµù"
-#~ "ÇÒ ¼ö ¾ø½À´Ï´Ù."
-
-#~ msgid "invalid expression"
-#~ msgstr "À߸øµÈ Ç¥Çö½Ä"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "Ç¥Çö½ÄÀ» Áö¿øÇÏÁö ¾Êµµ·Ï ÄÄÆÄÀÏ µÇ¾ú½À´Ï´Ù"
-
-#~ msgid "unknown option"
-#~ msgstr "¸ð¸£´Â ¿É¼Ç"
-
-#~ msgid "window index is out of range"
-#~ msgstr "â ¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³µ½À´Ï´Ù"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "¹öÆÛ¸¦ ¿­ ¼ö ¾ø¾ú½À´Ï´Ù"
-
-#~ msgid "cannot delete line"
-#~ msgstr "ÁÙÀ» Áö¿ï ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "cannot replace line"
-#~ msgstr "ÁÙÀ» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "cannot insert line"
-#~ msgstr "ÁÙÀ» ³¢¿ö³ÖÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "¹®ÀÚ¿­Àº newlineÀ» Æ÷ÇÔÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Vim ¿¡·¯: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Vim ¿¡·¯"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "¹öÆÛ°¡ ÀÌ»óÇÕ´Ï´Ù"
-
-#~ msgid "window is invalid"
-#~ msgstr "âÀÌ ÀÌ»óÇÕ´Ï´Ù"
-
-#~ msgid "linenr out of range"
-#~ msgstr "ÁÙ ¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³µ½À´Ï´Ù"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "Vim sandbox¿¡¼­´Â Çã¿ëµÇÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: ÀÌ VimÀº :py3À» »ç¿ëÇÑ ÈÄ¿¡ :pythonÀ» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: ¹Ì¾ÈÇÕ´Ï´Ù, ÀÌ ¸í·ÉÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù, ÆÄÀ̽㠶óÀ̺귯¸®¸¦ ·Îµù"
-#~ "ÇÒ ¼ö ¾ø½À´Ï´Ù."
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: PythonÀ» Àç±ÍÈ£ÃâÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "OutputObject ¼Ó¼ºÀ» Áö¿ï ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace´Â Á¤¼ö¿©¾ß¸¸ ÇÕ´Ï´Ù"
-
-#~ msgid "invalid attribute"
-#~ msgstr "À߸øµÈ ¼Ó¼º"
-
-#~ msgid "<buffer object (deleted) at %p>"
-#~ msgstr "<%p¿¡ ¹öÆÛ °´Ã¼ (»èÁ¦µÊ)>"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: ÀÌ VimÀº :pythonÀ» »ç¿ëÇÑ ÈÄ¿¡ :py3À» »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: ¹Ì¾ÈÇÕ´Ï´Ù, ÀÌ ¸í·ÉÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù, ·çºñ ¶óÀ̺귯¸®¸¦ ·ÎµùÇÒ "
-#~ "¼ö ¾ø½À´Ï´Ù."
-
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: ¶æ¹ÛÀÇ return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: ¶æ¹ÛÀÇ next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: ¶æ¹ÛÀÇ break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: ¶æ¹ÛÀÇ redo"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: ó¸®¾ÊµÈ ¿¹¿Ü"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: ¸ð¸£´Â longjmp »óÅ %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Åä±Û ±¸Çö/Á¤ÀÇ"
-
-#~ msgid "Show base class of"
-#~ msgstr "...ÀÇ ±âº» Ŭ·¡½º º¸¿©ÁÖ±â"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "SNiFF+·Î ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù. ȯ°æÀ» È®ÀÎÇϽʽÿÀ (sniffemacs°¡ $PATH¿¡¼­ "
-#~ "ã¾ÆÁ®¾ß ÇÕ´Ï´Ù).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Àд Áß ¿¡·¯. ²÷±è"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ is currently "
-
-#~ msgid "not "
-#~ msgstr "not "
-
-#~ msgid "connected"
-#~ msgstr "connected"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: ¸ð¸£´Â SNiFF+ ¿äû: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: SNiFF+¿¡ ¿¬°á ¿¡·¯"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SniFF+°¡ ¿¬°áµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: SniFF+ ¹öÆÛ°¡ ¾Æ´Õ´Ï´Ù"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: ¾²´Â µµÁß ¿¡·¯. ²÷°å½À´Ï´Ù"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "À߸øµÈ ¹öÆÛ ¹øÈ£"
-
-#~ msgid "not implemented yet"
-#~ msgstr "¾ÆÁ÷ ±¸ÇöµÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "ÁÙÀ» ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "invalid mark name"
-#~ msgstr "À߸øµÈ ¸¶Å© À̸§"
-
-#~ msgid "mark not set"
-#~ msgstr "¸¶Å©°¡ ¼³Á¤µÇÁö ¾Ê¾Ò½À´Ï´Ù"
-
-#~ msgid "row %d column %d"
-#~ msgstr "Çà %d ¿­ %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "ÁÙÀ» ³¢¿ö³Ö°Å³ª ´õÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "line number out of range"
-#~ msgstr "ÁÙ ¹øÈ£°¡ ¹üÀ§¸¦ ¹þ¾î³µ½À´Ï´Ù"
-
-#~ msgid "unknown flag: "
-#~ msgstr "¸ð¸£´Â Ç÷¡±×: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "¸ð¸£´Â ºö ¿É¼Ç"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "Űº¸µå ÀÎÅÍ·´Æ®"
-
-#~ msgid "vim error"
-#~ msgstr "ºö ¿¡·¯"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "¹öÆÛ/â ¸í·ÉÀ» ¸¸µé ¼ö ¾ø½À´Ï´Ù: °´Ã¼°¡ Áö¿öÁý´Ï´Ù"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "ÄÝ¹é ¸í·ÉÀ» µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù: ¹öÆÛ/âÀÌ ÀÌ¹Ì Áö¿öÁ³½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: TCL ½É°¢ÇÑ ¿¡·¯: reflist°¡ ±úÁ³³ª!? ÀÌ ¹®Á¦¸¦ vim-dev@vim.org·Î ¾Ë·Á"
-#~ "ÁֽʽÿÀ"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr "ÄÝ¹é ¸í·ÉÀ» µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù: ¹öÆÛ/â ÂüÁ¶¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: ¹Ì¾ÈÇÕ´Ï´Ù, ÀÌ ¸í·ÉÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù, Tcl ¶óÀ̺귯¸®¸¦ ·ÎµùÇÒ "
-#~ "¼ö ¾ø½À´Ï´Ù."
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr ""
-#~ "E281: TCL ¿¡·¯: ³¡³»±â Äڵ尡 Á¤¼ö°¡ ¾Æ´Ñ°¡!? ÀÌ ¹®Á¦¸¦ vim-dev@vim.org·Î "
-#~ "¾Ë·ÁÁֽʽÿÀ"
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Á¾·á ÄÚµå %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "ÁÙÀ» ¾òÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "¸í·É ¼­¹ö À̸§À» µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: ´ë»óÇÁ·Î±×·¥À¸·Î ¸í·É º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: À߸øµÈ ¼­¹ö id »ç¿ëµÊ: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr "E251: ºö ÀνºÅϽº ·¹Áö½ºÆ®¸® ¼Ó¼ºÀÌ À߸øµÇ¾î ÀÖ½À´Ï´Ù. Áö¿ü½À´Ï´Ù!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "ÀÌ GUI´Â netbeans¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "ÀÌ ºöÀº diff ±â´É ¾øÀÌ ÄÄÆÄÀÏ µÇ¾ú½À´Ï´Ù."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "'-nb'´Â »ç¿ëÇÒ ¼ö ¾øÀ½: ÄÄÆÄÀÏÇÒ ¶§ Æ÷ÇÔµÇÁö ¾ÊÀ½\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: ¿¡·¯: NetBeans¿¡¼­ gvim ½ÃÀÛ ½ÇÆÐ\n"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tÀÌ gvim OLE¿¡ µî·Ï"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tgvimÀ» OLE¿¡¼­ µî·ÏÃë¼Ò"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tGUI·Î ½ÇÇà (\"gvim\"°ú °°À½)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f ȤÀº --nofork\tÆ÷±×¶ó¿îµå: GUI·Î ½ÃÀÛÇÒ ¶§ forkÇÏÁö ¸» °Í"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tâÀ» ¿­ ¶§ newcli »ç¿ëÇÏÁö ¾ÊÀ½"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <ÀåÄ¡>\t\tI/O¿¡ <ÀåÄ¡> »ç¿ë"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\t.gvimrc ´ë½Å <gvimrc>¸¦ »ç¿ë"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\t¾ÏȣȭµÈ ÆÄÀÏ °íÄ¡±â"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\tºöÀ» ƯÁ¤ X-¼­¹ö¿Í ¿¬°á"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tX ¼­¹ö¿¡ ¿¬°áÇÏÁö ¾ÊÀ½"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <files>\t°¡´ÉÇÏ¸é ºö ¼­¹ö¿¡¼­ <files> ÆíÁý"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <files> °°À½, ¼­¹ö°¡ ¾ø´Ù°í ºÒÆòÇÏÁö ¾ÊÀ½"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr "--remote-wait <files> --remote¿Í °°Áö¸¸ ´Ù °íÄ¥ ¶§±îÁö ±â´Ù¸³´Ï´Ù"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-wait-silent <files> °°À½, ¼­¹ö°¡ ¾ø´Ù°í ºÒÆòÇÏÁö ¾ÊÀ½"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <files> --remote¿Í °°Áö¸¸ ÆÄÀϺ°·Î ÅÇ ÆäÀÌ"
-#~ "Áö »ç¿ë"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <keys>\tºö ¼­¹ö·Î <keys>¸¦ º¸³»°í ³¡³»±â"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <expr>\tºö ¼­¹ö¿¡¼­ <expr> ½ÇÇàÇÏ°í °á°ú Ãâ·Â"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\t»ç¿ë °¡´ÉÇÑ ºö ¼­¹ö À̸§À» Ç¥½ÃÇÏ°í ³¡³»±â"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <name>\tºö ¼­¹ö <name>ÀÌ µÇ°Å³ª ¼­¹ö·Î º¸³»±â"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvimÀÌ ¾Ë°í ÀÖ´Â ÀÎÀÚ (¸ðƼÇÁ ÆÇ):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvimÀÌ ¾Ë°í ÀÖ´Â ÀÎÀÚ (neXtaw ÆÇ):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvimÀÌ ¾Ë°í ÀÖ´Â ÀÎÀÚ (¾ÆÅ׳ª ÆÇ):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\tºöÀ» <display>¿¡¼­ ½ÇÇà"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\t¾ÆÀÌÄÜ »óÅ·Πºö ½ÃÀÛ"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <color>\t¹ÙÅÁ »öÀ¸·Î <color> »ç¿ë (also: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr "-foreground <color>\tÀÏ¹Ý »ö¿¡ <color> »ç¿ë (also: -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\t\tÀÏ¹Ý ÅØ½ºÆ®¿¡ <font> »ç¿ë (also: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\t±½Àº ÅØ½ºÆ®¿¡ <font> »ç¿ë"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\t±â¿ïÀÓ ÅØ½ºÆ®¿¡ <font> »ç¿ë"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <geom>\tÃʱâ Áö¿À¹ÌÆ®¸®¿¡ <geom> »ç¿ë (also: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <width>\t°¡ÀåÀÚ¸® ³ÐÀÌ¿¡ <width> »ç¿ë (also: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr "-scrollbarwidth <width> ½ºÅ©·Ñ¹Ù ³ÐÀÌ¿¡ <width> »ç¿ë (also: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <height>\t¸Þ´º¹Ù ³ôÀÌ¿¡ <height> »ç¿ë (also: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\t¹ÝÀü ºñµð¿À »ç¿ë (also: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t¹ÝÀü ºñµð¿À »ç¿ë ¾È ÇÔ (also: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\t¸í½ÃµÈ ¸®¼Ò½º ¼³Á¤"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvimÀÌ ¾Ë°íÀÖ´Â ÀÎÀÚ (RISC OS ÆÇ):\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <¼ýÀÚ>\tÄ­¿¡¼­ â Ãʱ⠳ʺñ"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <¼ýÀÚ>\tÁÙ¿¡¼­ â Ãʱ⠳ôÀÌ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvimÀÌ ¾Ë°íÀÖ´Â ÀÎÀÚ (GTK+ ÆÇ):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\tºöÀ» <display>¿¡¼­ ½ÇÇà (also: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\t¸ÞÀΠâ ±¸ºÐÀ» À§ÇØ À¯ÀÏÇÑ ¿ªÇÒ ¼³Á¤"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tºöÀ» ´Ù¸¥ GTK À§Á¬ ¾È¿¡¼­ ¿­À½"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <parent title>\tVimÀ» ºÎ¸ð ÀÀ¿ë ÇÁ·Î±×·¥ ³»¿¡¼­ ¿­±â"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\t´Ù¸¥ win32 À§Á¬ ¾È¿¡¼­ Vim ¿­±â"
-
-#~ msgid "No display"
-#~ msgstr "µð½ºÇ÷¹À̰¡ ¾ø½À´Ï´Ù"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": º¸³»±â°¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": º¸³»±â ½ÇÆÐ. ·ÎÄÿ¡¼­ ½ÇÇàµË´Ï´Ù\n"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "µð½ºÇ÷¹ÀÌ ¾øÀ½: Ç¥Çö½Ä º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Ç¥Çö½Ä º¸³»±â°¡ ½ÇÆÐÇß½À´Ï´Ù.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: Á¤»óÀûÀÎ ÄÚµåÆäÀÌÁö°¡ ¾Æ´Õ´Ï´Ù"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: ÀÔ·Â ÄÜÅØ½ºÆ®¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: ÀÔ·Â ¹æ½ÄÀ» ¿­´Ù°¡ ½ÇÆÐÇß½À´Ï´Ù"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: °æ°í: IM¿¡ ÆÄ±« ÄݹéÀ» ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: ÀÔ·Â ¹æ½ÄÀÌ ¾î¶² Çü½Äµµ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: ÀÔ·Â ¹æ½ÄÀÌ ³» preedit Çü½ÄÀ» Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: ½º¿Ò ÆÄÀÏÀ» ¾ÏȣȭÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr ""
-#~ "E833: %sÀÌ(°¡) ¾ÏȣȭµÇ¾î ÀÖ´Â µ¥, ÀÌ VimÀº ¾Ïȣȭ¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "½º¿Ò ÆÄÀÏÀÌ ¾ÏȣȭµÊ: \"%s\""
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "»õ·Î¿î ¾ÏÈ£ ۸¦ ÀÔ·ÂÇß´Â µ¥, ÆÄÀÏÀ» ÀúÀåÇÏÁö ¾Ê¾Ò¾ú´Ù¸é,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "»õ·Î¿î ¾ÏÈ£ ۸¦ ÀÔ·ÂÇϼ¼¿ä."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "¾ÏÈ£ ۸¦ ¹Ù²Û ÈÄ¿¡ ÆÄÀÏÀ» ÀúÀåÇß¾ú´Ù¸é °°Àº Ű·Î ÅØ½ºÆ® ÆÄÀϰú"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "½º¿ÒÆÄÀÏÀ» ÀúÀåÇÏ·Á¸é ¿£Å͸¦ ´©¸£¼¼¿ä"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "ÅØ½ºÆ® ÆÄÀÏ¿¡ ½º¿ÒÆÄÀÏ¿¡¼­ °¡Á®¿Â ¾ÏÈ£ ۸¦ »ç¿ëÇÕ´Ï´Ù.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [ºö À̹ø ÆÇ¿¡¼­´Â »ç¿ëÇÒ ¼ö ¾øÀ½]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "ÀÌ ¸Þ´º¸¦ ¶¼¾î³¿"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "µð·ºÅ丮 ¼±Åà ´ëÈ­»óÀÚ"
-
-#~ msgid "Save File dialog"
-#~ msgstr "ÆÄÀÏ ÀúÀå ´ëÈ­»óÀÚ"
-
-#~ msgid "Open File dialog"
-#~ msgstr "ÆÄÀÏ ¿­±â ´ëÈ­»óÀÚ"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: ¹Ì¾ÈÇÕ´Ï´Ù, ÄÜ¼Ö »óÅ¿¡´Â ÆÄÀÏ ºê¶ó¿ìÀú°¡ ¾ø½À´Ï´Ù"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "ºö: ÆÄÀÏ º¸Á¸Áß...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "ºö: ²ø³µ½À´Ï´Ù.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "¿¡·¯: "
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: ÁÙÀÌ ³Ê¹« ±æ¾îÁ³½À´Ï´Ù"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: ³»ºÎ ¿¡·¯: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: ÀÌ»óÇÑ ¸¶¿ì½º¸ð¾ç"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "¾ÏÈ£ Ű ÀÔ·Â: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "°°Àº ۸¦ ´Ù½Ã ÀÔ·Â: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "۰¡ ¸ÂÁö ¾Ê½À´Ï´Ù!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Netbeans #2¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Netbeans¿¡ ¿¬°áÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: NetBeans ¿¬°á Á¤º¸ ÆÄÀÏÀÌ Á¢±Ù ¸ðµå°¡ À߸øµÊ: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "Netbeans ¼ÒÄÏ¿¡¼­ Àбâ"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: ¹öÆÛ %<PRId64>¿¡ ´ëÇÑ NetBeans ¿¬°áÀ» ÀÒ¾î¹ö·È½À´Ï´Ù"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: ÀÌ GUI´Â netbeans¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans°¡ ÀÌ¹Ì ¿¬°áµÇ¾î ÀÖ½À´Ï´Ù"
-
-#~ msgid "E505: "
-#~ msgstr "E505: "
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Eval ±â´ÉÀÌ ºüÁ®ÀÖ½À´Ï´Ù"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "freeing %<PRId64> lines"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: GUI¿¡¼­´Â termÀ» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: GUI¸¦ ½ÃÀÛÇÏ·Á¸é \":gui\"¸¦ »ç¿ëÇϽʽÿÀ"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: GTK+ 2 GUI¿¡¼­´Â ¹Ù²ð ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: À߸øµÈ ±Û²Ã(µé)"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: ±Û²Ã¼ÂÀ» °í¸¦ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: À߸øµÈ ±Û²Ã¼Â"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: ¿ÍÀÌµå ±Û²ÃÀ» °í¸¦ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: À߸øµÈ ¿ÍÀÌµå ±Û²Ã"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: ¸¶¿ì½º¸¦ Áö¿øÇÏÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "cannot open "
-#~ msgstr "cannot open "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "ºö: âÀ» ¿­ ¼ö ¾ø½À´Ï´Ù!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "¾Æ¹Ì°¡µµ½º 2.04³ª ´õ ³ôÀº ÆÇÀÌ ÇÊ¿äÇÕ´Ï´Ù\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Need %s version %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "NILÀ» ¿­ ¼ö ¾øÀ½:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Cannot create "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "ºöÀÌ %d °ªÀ¸·Î ³¡³À´Ï´Ù\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "ÄÜ¼Ö »óŸ¦ ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù ?!\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ÄܼÖÀÌ ¾Æ´Ñ°¡??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: -f ¿É¼ÇÀÌ »ç¿ëµÈ °æ¿ì ½©À» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Cannot execute "
-#~ msgstr "Cannot execute "
-
-#~ msgid "shell "
-#~ msgstr "shell "
-
-#~ msgid " returned\n"
-#~ msgstr " returned\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE°¡ ³Ê¹« ÀÛ½À´Ï´Ù."
-
-#~ msgid "I/O ERROR"
-#~ msgstr "I/O ¿¡·¯"
-
-#~ msgid "Message"
-#~ msgstr "¸Þ½ÃÁö"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns'ÀÌ 80ÀÌ ¾Æ´Ï¾î¼­, ¿ÜºÎ ¸í·ÉÀ» ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: ÇÁ¸°Å͸¦ °í¸£Áö ¸øÇß½À´Ï´Ù"
-
-#~ msgid "to %s on %s"
-#~ msgstr "to %s on %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: ¸ð¸£´Â ÇÁ¸°ÅÍ ±Û²Ã: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: Àμ⠿¡·¯: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "'%s' ÀμâÁß"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: À߸øµÈ ±ÛÀڼ À̸§ \"%s\"ÀÌ(°¡) ±Û²Ã À̸§ \"%s\"¿¡ ÀÖ½À´Ï´Ù"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: À߸øµÈ ±ÛÀÚ '%c'ÀÌ(°¡) ±Û²Ã À̸§ \"%s\"¿¡ ÀÖ½À´Ï´Ù"
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "ºö: °°Àº ½Ã±×³Î µÎ ¹ø, ³¡³À´Ï´Ù\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "ºö: %s ½Ã±×³ÎÀ» Àâ¾Ò½À´Ï´Ù\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "ºö: Á×À» ½Ã±×³ÎÀ» Àâ¾Ò½À´Ï´Ù\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "X µð½ºÇ÷¹À̸¦ ¿©´Â µ¥ %<PRId64> msecÀÌ °É·È½À´Ï´Ù"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ºö: X ¿¡·¯°¡ »ý°å½À´Ï´Ù\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "X µð½ºÇ÷¹ÀÌ ½ÃÇèÀÌ ½ÇÆÐÇß½À´Ï´Ù"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "X µð½ºÇ÷¹À̸¦ ¿­´Ù°¡ ½Ã°£ÀÌ ÃʰúµÇ¾ú½À´Ï´Ù"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "½© sh¸¦ ½ÇÇàÇÒ ¼ö ¾ø½À´Ï´Ù\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÆÄÀÌÇÁ¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé ¼ö ¾ø½À´Ï´Ù\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "¸í·ÉÀÌ ³¡¸¶ÃÄÁ³½À´Ï´Ù\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP°¡ ICE ¿¬°áÀ» ÀÒ¾î¹ö·È½À´Ï´Ù"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "X µð½ºÇ÷¹ÀÌ ¿­±â°¡ ½ÇÆÐÇß½À´Ï´Ù"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP°¡ save-yourself ¿äûÀ» ½ÇÇàÇϰí ÀÖ½À´Ï´Ù"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP°¡ ¿¬°áÀ» ¿©´Â ÁßÀÔ´Ï´Ù"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP°¡ ICE ¿¬°á °¨½Ã¸¦ ½ÇÆÐÇß½À´Ï´Ù"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection ½ÇÆÐ: %s"
-
-#~ msgid "At line"
-#~ msgstr "At line"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "vim32.dllÀ» ºÒ·¯ µéÀÏ ¼ö ¾ø½À´Ï´Ù!"
-
-#~ msgid "VIM Error"
-#~ msgstr "ºö ¿¡·¯"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "ÇÔ¼ö Æ÷ÀÎÅ͸¦ DLL·Î ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "½©ÀÌ %dÀ»(¸¦) µ¹·ÁÁÖ¾ú½À´Ï´Ù"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "ºö: %s À̺¥Æ®¸¦ Àâ¾Ò½À´Ï´Ù\n"
-
-#~ msgid "close"
-#~ msgstr "´Ý±â"
-
-#~ msgid "logoff"
-#~ msgstr "·Î±×¾Æ¿ô"
-
-#~ msgid "shutdown"
-#~ msgstr "¼Ë´Ù¿î"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: ¸í·ÉÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "VIMRUN.EXE¸¦ $PATH¿¡¼­ ãÀ» ¼ö ¾ø½À´Ï´Ù.\n"
-#~ "¿ÜºÎ ¸í·ÉÀÌ ³¡³­ µÚ ¸ØÃâ ¼ö ¾ø½À´Ï´Ù.\n"
-#~ "´Ù ¸¹Àº Á¤º¸¸¦ º¸½Ã·Á¸é :help win32-vimrunÀ» º¸½Ê½Ã¿À."
-
-#~ msgid "Vim Warning"
-#~ msgstr "ºö °æ°í"
-
-#~ msgid "Error file"
-#~ msgstr "¿¡·¯ ÆÄÀÏ"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "°æ°í: ´Ü¾î ¸ñ·Ï \"%s_%s.spl\" ȤÀº \"%s_ascii.spl\"À» ãÀ» ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "%sÀÇ º¯È¯ÀÌ Áö¿øµÇÁö ¾Ê½À´Ï´Ù"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: %s¿¡ ´ëÇÑ ÅÂ±× ÆÄÀÏ °æ·Î°¡ À߷ȽÀ´Ï´Ù\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "»õ ½©ÀÌ ½ÃÀ۵Ǿú½À´Ï´Ù\n"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "ºó °í¸£±â ´ë½Å CUT_BUFFER0À» »ç¿ëÇß½À´Ï´Ù"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Ãë¼Ò ºÒ°¡´É; ¾î·µç °è¼ÓÇÕ´Ï´Ù"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr ""
-#~ "E832: ¾ÏȣȭµÇÁö ¾ÊÀº ÆÄÀÏÀÌ ¾ÏȣȭµÈ undo ÆÄÀÏÀ» °¡Áö°í ÀÖ½À´Ï´Ù: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Undo ÆÄÀÏÀ» ÇØµ¶ÇÒ ¼ö ¾ø½À´Ï´Ù: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Undo ÆÄÀÏÀÌ ¾ÏȣȭµÇ¾ú½À´Ï´Ù: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16/32 ºñÆ® GUI ÆÇ"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 64ºñÆ® GUI ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32ºñÆ® GUI ¹öÁ¯"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " Win32s »óÅÂ"
-
-#~ msgid " with OLE support"
-#~ msgstr " OLE Áö¿ø"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 64ºñÆ® ÄÜ¼Ö ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32ºñÆ® ÄÜ¼Ö ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16ºñÆ® ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32ºñÆ® MS-DOS ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16ºñÆ® MS-DOS ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X (À¯´Ð½º) ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "RISC OS ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "OpenVMS ¹öÁ¯"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Big ¹öÁ¯ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Normal ¹öÁ¯ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Small ¹öÁ¯ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Tiny ¹öÁ¯ "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "GTK2-GNOME GUI."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "GTK2 GUI."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "X11-Motif GUI."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "X11-neXtaw GUI."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "X11-Athena GUI."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "Photon GUI."
-
-#~ msgid "with GUI."
-#~ msgstr "GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "Carbon GUI."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "Cocoa GUI."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "(Ŭ·¡½Ä) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ½Ã½ºÅÛ gvimrc ÆÄÀÏ: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " »ç¿ëÀÚ gvimrc ÆÄÀÏ: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "»ç¿ëÀÚ µÎ ¹øÂ° gvimrc ÆÄÀÏ: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "»ç¿ëÀÚ ¼¼ ¹øÂ° gvimrc ÆÄÀÏ: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ½Ã½ºÅÛ ¸Þ´º ÆÄÀÏ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "ÄÄÆÄÀÏ·¯: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é ¸Þ´º¿¡¼­ µµ¿ò¸»->°í¾Æ ¼±ÅÃ"
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "¸ðµå¾øÀÌ ¼öÇàÁßÀ̸ç, ÀÔ·ÂµÈ ¹®ÀÚ´Â »ðÀԵ˴ϴÙ"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "¸Þ´º¿¡¼­ ÆíÁý->Àü¿ª ¼³Á¤->»ðÀÔ ¸ðµå Åä±ÛÀ» ¼±ÅÃÇϽøé "
-
-#~ msgid " for two modes "
-#~ msgstr " µÎ ¸ðµå¸¦ »ç¿ëÇÒ ¼ö ÀÖ½À´Ï´Ù "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "¸Þ´º¿¡¼­ ÆíÁý->Àü¿ª ¼³Á¤->Vi ȣȯ Åä±ÛÀ» ¼±ÅÃÇϽøé "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " VimÀÌ ±âº»°ªÀ¸·Î µ¿ÀÛÇÕ´Ï´Ù "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "°æ°í: À©µµ¿ìÁî 95/98/ME¸¦ ã¾ÒÀ½"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "ÀÌ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸·Á¸é :help windows95<¿£ÅÍ> ÀÔ·Â"
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: %s ¶óÀ̺귯¸®¸¦ ·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "¹Ì¾ÈÇÕ´Ï´Ù, ÀÌ ¸í·ÉÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù, Perl ¶óÀ̺귯¸®¸¦ ·ÎµùÇÒ ¼ö ¾ø½À"
-#~ "´Ï´Ù."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr "E299: Safe ¸ðµâ¾øÀÌ´Â sandbox¿¡¼­ Perl evaluationÀÌ Á¦Çѵ˴ϴÙ"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "¿©·¯ ºöÀ¸·Î ÆíÁý(&M)"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "ÇϳªÀÇ ºöÀ¸·Î¸¸ ÆíÁý(&V)"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "ºöÀ¸·Î Diff"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "ºöÀ¸·Î ÆíÁý(&V)"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "ÇϳªÀÇ ºöÀ¸·Î¸¸ ÆíÁý - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "¼±ÅÃµÈ ÆÄÀÏ(µé)À» ºöÀ¸·Î ÆíÁý"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "ÇÁ·Î¼¼½º »ý¼º ¿¡·¯: gvimÀÌ path¿¡ ÀÖ´Â Áö È®ÀÎÇϼ¼¿ä!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "gvimext.dll ¿¡·¯"
-
-#~ msgid "Path length too long!"
-#~ msgstr "°æ·Î°¡ ³Ê¹« ±é´Ï´Ù"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: ¸ð¸£´Â ±Û²Ã¼Â: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: ¸ð¸£´Â ±Û²Ã: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: ±Û²Ã \"%s\"Àº(´Â) °íÁ¤³ÐÀ̰¡ ¾Æ´Õ´Ï´Ù"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: %s ¶óÀ̺귯¸® ÇÔ¼ö¸¦ ·ÎµåÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: Hebrew´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ÄÄÆÄÀÏ ¶§ Æ÷ÇÔµÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Farsi´Â »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ÄÄÆÄÀÏ ¶§ Æ÷ÇÔµÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: ArabicÀº »ç¿ëÇÒ ¼ö ¾ø½À´Ï´Ù: ÄÄÆÄÀÏ ¶§ Æ÷ÇÔµÇÁö ¾Ê¾Ò½À´Ï´Ù\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: \"%s\"Àº(´Â) µî·ÏµÈ ¼­¹ö¸íÀÌ ¾Æ´Õ´Ï´Ù"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: µð½ºÇ÷¹À̸¦ ¿­ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: À߸øµÈ Ç¥Çö½ÄÀÌ ¹Þ¾ÆÁ³½À´Ï´Ù"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: ¿µ¿ªÀÌ º¸È£µÇ°í À־ ¼öÁ¤ÇÒ ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans´Â Àбâ Àü¿ë ÆÄÀÏÀ» ¹Ù²Ü ¼ö ¾ø½À´Ï´Ù"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "\"%s\"¿¡ ´ëÇÑ ¾ÏÈ£ ۰¡ ÇÊ¿äÇÕ´Ï´Ù"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines()´Â ¹®ÀÚ¿­ ¸ñ·ÏÀÌ ÇÊ¿äÇÕ´Ï´Ù"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: ÆÄÀ̽ã: I/O °´Ã¼ ÃʱâÈ­Áß ¿¡·¯°¡ »ý°å½À´Ï´Ù"
-
-#~ msgid "no such buffer"
-#~ msgstr "±×·± ¹öÆÛ´Â ¾ø½À´Ï´Ù"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "Áö¿öÁø âÀ» ÂüÁ¶ÇÏ·Á°í ÇÏ¿´½À´Ï´Ù"
-
-#~ msgid "readonly attribute"
-#~ msgstr "Àбâ Àü¿ë ¼Ó¼º"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "ÆÛ¼­ À§Ä¡°¡ ¹öÆÛ ¹Û¿¡ ÀÖ½À´Ï´Ù"
-
-#~ msgid "<window object (deleted) at %p>"
-#~ msgstr "<%p¿¡ â °´Ã¼ (»èÁ¦µÊ)>"
-
-#~ msgid "<window object (unknown) at %p>"
-#~ msgstr "<%p¿¡ â °´Ã¼ (¸ð¸§)>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<â %d>"
-
-#~ msgid "no such window"
-#~ msgstr "±×·± âÀº ¾ø½À´Ï´Ù"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "Áö¿öÁø ¹öÆÛ¸¦ ÂüÁ¶ÇÏ·Á°í ÇÏ¿´½À´Ï´Ù"
diff --git a/src/nvim/po/nb.po b/src/nvim/po/nb.po
index ce635e098c..fefcf20b69 100644
--- a/src/nvim/po/nb.po
+++ b/src/nvim/po/nb.po
@@ -2699,11 +2699,6 @@ msgstr "E49: Ugyldig \"scroll\"-verdi"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4275,11 +4270,6 @@ msgstr "linje %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ugyldig registernavn: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Vedlikeholder for norsk oversettelse: Øyvind A. Holm <sunny@sunbase.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Avbryt: "
diff --git a/src/nvim/po/nl.po b/src/nvim/po/nl.po
index ea609c0f69..f2877903f2 100644
--- a/src/nvim/po/nl.po
+++ b/src/nvim/po/nl.po
@@ -2685,11 +2685,6 @@ msgstr "E49: ongeldige scroll-grootte"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4282,10 +4277,6 @@ msgstr "regel %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr ""
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Vertaald door: Erwin Poeze <erwin.poeze@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr ""
diff --git a/src/nvim/po/no.po b/src/nvim/po/no.po
index ce635e098c..fefcf20b69 100644
--- a/src/nvim/po/no.po
+++ b/src/nvim/po/no.po
@@ -2699,11 +2699,6 @@ msgstr "E49: Ugyldig \"scroll\"-verdi"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4275,11 +4270,6 @@ msgstr "linje %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ugyldig registernavn: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Vedlikeholder for norsk oversettelse: Øyvind A. Holm <sunny@sunbase.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Avbryt: "
diff --git a/src/nvim/po/pl.UTF-8.po b/src/nvim/po/pl.UTF-8.po
index 68cb9e72d5..0757afd3ae 100644
--- a/src/nvim/po/pl.UTF-8.po
+++ b/src/nvim/po/pl.UTF-8.po
@@ -2658,11 +2658,6 @@ msgstr "E49: Niewłaściwa wielkość przewinięcia"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4243,10 +4238,6 @@ msgstr "wiersz %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Niewłaściwa nazwa rejestru: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatów: Mikołaj Machowski <mikmach@wp.pl>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Przerwanie: "
diff --git a/src/nvim/po/pl.cp1250.po b/src/nvim/po/pl.cp1250.po
deleted file mode 100644
index 3fcdbfb87d..0000000000
--- a/src/nvim/po/pl.cp1250.po
+++ /dev/null
@@ -1,8264 +0,0 @@
-# translation of pl.po to Polish
-# Polish Translation for Vim
-#
-# updated 2013 for vim-7.4
-#
-# FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: pl\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2010-08-10 18:15+0200\n"
-"Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1250\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "nie mogê pobraæ wartoœci opcji"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "b³¹d wewnêtrzny: nieznany typ opcji"
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Lista lokacji]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Lista quickfix]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr "E855: Autokomendy spowodowa³y porzucenie komendy"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Nie mogê zarezerwowaæ bufora; zakoñczenie..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: Nie mogê zarezerwowaæ bufora; u¿ywam innego..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: Nie wy³adowano ¿adnego bufora"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: Nie skasowano ¿adnego bufora"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: Nie wyrzucono ¿adnego bufora"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "1 bufor wy³adowany"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "wy³adowano %d buforów"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "1 bufor skasowany"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "%d buforów skasowano"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "wyrzucono 1 bufor "
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "wyrzucono %d buforów"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: Nie mogê wy³adowaæ ostatniego bufora"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: Nie znaleziono zmienionych buforów"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: Nie ma wylistowanych buforów"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: Bufor \"%<PRId64>\" nie istnieje"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: Nie mogê przejœæ poza ostatni bufor"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: Nie mogê przejœæ przed pierwszy bufor"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: Nie zapisano zmian w buforze %<PRId64> (wymuœ przez !)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: OSTRZE¯ENIE: Przepe³nienie listy nazw plików"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: Nie znaleziono bufora %<PRId64>"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: Wielokrotne dopasowania dla %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: ¯aden bufor nie pasuje do %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "wiersz %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: Bufor o tej nazwie ju¿ istnieje"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [Zmieniony]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[Nie edytowany]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[Nowy Plik]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[B³¹d odczytu]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[RO]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[tylko odczyt]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 wiersz --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> wiersze --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "wiersz %<PRId64> z %<PRId64> --%d%%-- kol "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[Bez nazwy]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "pomoc"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[Pomoc]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Podgl¹d]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "Wszystko"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "Dó³"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "Góra"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# Lista buforów:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[Notka]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Znaki ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "Znaki dla %s:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " wiersz=%<PRId64> id=%d nazwa=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: Brak dwukropka"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: Niedozwolony tryb"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: oczekiwa³em na cyfrê"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: Niedozwolony procent"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: Nie mogê zró¿nicowaæ wiêcej ni¿ %<PRId64> buforów"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: Nie mogê otworzyæ lub zapisaæ plików tymczasowych"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: Nie mogê stworzyæ ró¿nic"
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: Nie mogê odczytaæ wyjœcia pliku ³aty"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: Nie mogê wczytaæ wyjœcia ró¿nicy"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Bie¿¹cy bufor nie jest w trybie ró¿nic"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ¯aden inny bufor w trybie diff nie jest modyfikowalny"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: Brak innego bufora w trybie ró¿nic"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr ""
-"E101: Wiêcej ni¿ jeden bufor w trybie ró¿nicowania, nie wiem którego u¿yæ"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Nie mogê znaleŸæ bufora \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Bufor \"%s\" nie jest w trybie ró¿nicowania"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: Nieoczekiwana zmiana bufora"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Escape jest niedozwolone w dwugrafie"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: Nie znaleziono pliku rozk³adu klawiszy"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: Zastosowano :loadkeymap w niewczytanym pliku"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: Pusty wpis keymap"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " Dope³nianie s³ów kluczowych (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X tryb (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " Dope³nianie pe³nych wierszy (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " Dope³nianie nazw plików (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Dope³nianie znaczników (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " Dope³nianie wzorców tropów (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " Dope³nianie definicji (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Dope³nianie ze s³owników (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Dope³nianie z tezaurusa (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " Dope³nianie wiersza poleceñ (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr "Dope³nianie zdefiniowane przez u¿ytkownika (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " Omni uzupe³nianie (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr "Propozycja pisowni (^L^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " Lokalne dope³nianie s³ów kluczowych (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Dobi³em do koñca akapitu"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: Funkcja uzupe³niania zmieni³a okno"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: Funkcja uzupe³nania usunê³a tekst"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "opcja 'dictionary' jest pusta"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "opcja 'thesaurus' jest pusta"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "Przegl¹dam s³ownik: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (wprowadzanie) Przewijanie (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (zamiana) Przewijanie (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "Przegl¹dam: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "Przegl¹dam znaczniki."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Dodajê"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- Szukam..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "Z powrotem na pierwotnym"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "Wyraz z innego wiersza"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "Jedyne dopasowanie"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "pasuje %d z %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "pasuje %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: Nieoczekiwane znaki w :let"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: Indeks listy poza zakresem: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Nieokreœlona zmienna: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: Brak ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: Argument %s musi byæ List¹"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Argument %s musi byæ List¹ lub S³ownikiem"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Nie mo¿na u¿yæ pustego klucza dla S³ownika"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: wymagana Lista"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: wymagany S³ownik"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Zbyt wiele argumentów dla funkcji: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Klucz nie istnieje w S³owniku: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Funkcja %s ju¿ istnieje; aby j¹ zamieniæ u¿yj !"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: istnieje ju¿ taki element S³ownika"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: wymagana Funcref"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Nie mo¿na u¿yæ [:] przy S³owniku"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: Z³y typ zmiennej dla %s="
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: Nieznana funkcja: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Niedozwolona nazwa zmiennej: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: U¿ycie Zmiennoprzecinkowej jako £añcucha"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Mniej celów ni¿ elementów Listy"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Wiêcej celów ni¿ elementów Listy"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "Podwójny ; w liœcie zmiennych"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: Nie mogê wypisaæ zmiennych dla %s"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Indeks mo¿e istnieæ tylko dla Listy lub S³ownika"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] musi byæ ostatnie"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] wymaga wartoœci listy"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: Lista ma wiêcej elementów ni¿ cel"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: Lista nie ma wystarczaj¹cej iloœci elementów"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Brak \"in\" po :for"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: Brak nawiasów: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Nie istnieje zmienna: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: zmienna zagnie¿d¿ona zbyt g³êboko dla (un)lock"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: Brak ':' po '?'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Listê mogê porównaæ tylko z List¹"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: Nieprawid³owa operacja dla Listy"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: S³ownik mogê porównaæ tylko ze S³ownikiem"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Nieprawid³owa operacja dla S³ownika"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Funcref mogê porównaæ tylko z Funcref"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Nieprawid³owa operacja dla Funcref"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Nie mogê u¿yæ '%' w Zmiennoprzecinkowej"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: Brak ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: Nie mo¿na zindeksowaæ Funcref"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: Brak nazwy opcji: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: Nieznana opcja: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: Brak cudzys³owu: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: Brak cudzys³owu: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: Brakuj¹cy przecinek w Liœcie: '%s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Brak zakoñczenia Listy ']': %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Brak dwukropka w S³owniku: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Powtórzony klucz w S³owniku: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Brakuj¹cy przecinek w S³owniku: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Brak koñca w S³owniku '}': %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: Zmienna zagnie¿d¿ona zbyt g³êboko by pokazaæ"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: Zbyt wiele argumentów dla funkcji %s"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: Zbyt wiele argumentów dla funkcji %s"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: Nieznana funkcja: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Za ma³o argumentów dla funkcji: %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: U¿ycie <SID> poza kontekstem skryptu: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Wywo³anie funkcji \"dict\" bez S³ownika: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: Wymagana Liczba lub Zmiennoprzecinkowa"
-
-#: ../eval.c:7503
-msgid "add() argument"
-msgstr "argument add()"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: Za du¿o argumentów"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() mo¿e byæ u¿yte tylko w trybie Wprowadzania"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "&Ok"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: Klucz ju¿ istnieje: %s"
-
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "argument extend()"
-
-#: ../eval.c:8915
-msgid "map() argument"
-msgstr "argument map()"
-
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr "argument filter()"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld wierszy: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: Nieznana funkcja: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "wywo³ano inputrestore() wiêcej razy ni¿ inputsave()"
-
-#: ../eval.c:10771
-msgid "insert() argument"
-msgstr "argument insert()"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: Zakres niedozwolony"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: Nieprawid³owy typ dla len()"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: Skok to zero"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: Pocz¹tek po koñcu"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<pusty>"
-
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr "argument remove()"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Za du¿o dowi¹zañ symbolicznych (pêtla?)"
-
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr "argument reverse()"
-
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr "argument sort()"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "argument add()"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(Niew³aœciwe)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: B³¹d zapisywania pliku tymczasowego"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: U¿ycie Zmiennoprzecinkowej jako Liczby"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: U¿ycie Funcref jako Liczby"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: U¿ycie Listy jako Liczby"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: U¿ycie S³ownika jako Liczby"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: U¿ycie Funcref jako £añcucha"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: U¿ycie Listy jako £añcucha"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: U¿ycie S³ownika jako £añcucha"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Nie mogê usun¹æ zmiennej %s"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Nazwa Funcref musi siê zaczynaæ wielk¹ liter¹: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Nazwa zmiennej jest w konflikcie z istniej¹c¹ funkcj¹: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: WartoϾ jest zablokowana: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "Nieznane"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: Nie mogê zmieniæ wartoœci %s"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: Zmienna zagnie¿d¿ona zbyt g³êboko by zrobiæ kopiê"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: Nieznana funkcja: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: Brak '(': %s"
-
-#: ../eval.c:17293
-msgid "E862: Cannot use g: here"
-msgstr "E862: Nie mo¿na tutaj u¿yæ g:"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: Niedozwolony argument: %s"
-
-#: ../eval.c:17323
-#, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E853: Powtórzona nazwa argumentu: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: Brak :endfunction"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: Nazwa funkcji jest w konflikcie ze zmienn¹: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: Nie mogê redefiniowaæ funkcji %s: jest w u¿yciu"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Nazwa funkcji nie pasuje do nazwy skryptu: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: Wymagana jest nazwa funkcji"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr ""
-"E128: Nazwa funkcji musi rozpoczynaæ siê wielk¹ liter¹ lub zawieraæ "
-"dwukropek: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr ""
-"E128: Nazwa funkcji musi rozpoczynaæ siê wielk¹ liter¹ lub zawieraæ "
-"dwukropek: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: Nie mogê skasowaæ funkcji %s: jest w u¿yciu"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: Zagnie¿d¿enie wywo³añ funkcji ponad 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "wywo³ujê %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "porzucono %s"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s zwraca #%<PRId64>"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s zwraca %s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "kontynuacja w %s"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return poza funkcj¹"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# zmienne globalne:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tOstatnie ustawienie przez "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "Brak starych plików"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, Hex %02x, Oktal %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, Hex %04x, Oktal %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, Hex %08x, Oktal %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: Przeniesienie wierszy na siebie samych"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "1 wiersz przeniesiony"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "%<PRId64> wiersze przeniesione"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "%<PRId64> wierszy przefiltrowanych"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: Autokomendy *Filter* nie mog¹ zmieniaæ bie¿¹cego bufora"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[Brak zapisu od czasu ostatniej zmiany]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s w wierszu: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: Zbyt wiele b³êdów; pomijam resztê pliku"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Wczytujê plik viminfo \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " informacja"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " zak³adki"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " stare pliki"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " NIE POWIOD£O SIÊ"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Plik viminfo jest niezapisywalny: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Nie mogê zapisaæ pliku viminfo %s!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "Zapisujê plik viminfo \"%s\""
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Ten plik viminfo zosta³ wygenerowany przez Vima %s.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Mo¿esz go ostro¿nie edytowaæ!\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# WartoϾ 'encoding' w czasie zapisu tego pliku\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "Niedopuszczalny pocz¹tkowy znak"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "Zapisaæ czêœciowo plik?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: Stosuj ! do zapisania czêœciowo bufora"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "Nadpisaæ istniej¹cy plik \"%s\"?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Plik wymiany \"%s\" istnieje, czy go nadpisaæ?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Plik wymiany istnieje: %s (wymuœ poprzez :silent!)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: Brak nazwy pliku dla bufora %<PRId64>"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: Plik niezapisany: Zapis jest wy³¹czony opcj¹ 'write'"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"opcja 'readonly' nastawiona dla \"%s\".\n"
-"Czy chcesz go pomimo tego zapisaæ?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"Prawa pliku \"%s\" s¹ tylko do odczytu.\n"
-"Mimo to byæ mo¿e uda siê zmieniæ ten plik.\n"
-"Chcesz spróbowaæ?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" jest tylko do odczytu (dodaj ! aby wymusiæ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Autokomendy nieoczekiwanie skasowa³y nowy bufor %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: nienumeryczny argument dla :z"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Komendy pow³oki s¹ niedozwolone w rvim"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Wzorce regularne nie mog¹ byæ rozgraniczane literami"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "zamieñ na %s (y/n/a/q/l/^E/^Y)?"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(Przerwane) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1 pasuje"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1 podstawienie "
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> dopasowañ"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> podstawieñ"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " w 1 wierszu"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " w %<PRId64> wierszach"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: Nie mogê wykonaæ :global rekursywnie"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: Brak wzorca regularnego w :global"
-
-# c-format
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "Wzorzec znaleziono w ka¿dym wierszu: %s"
-
-#: ../ex_cmds.c:4510
-#, c-format
-msgid "Pattern not found: %s"
-msgstr "Nie znaleziono wzorca: %s"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# Ostatni podstawiany ci¹g:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: Nie panikuj!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Przykro mi, brak '%s' pomocy dla %s"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Przykro mi, ale brak pomocy o %s"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Przykro mi, nie ma pliku pomocy \"%s\""
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: Nie jest katalogiem: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: Nie mogê otworzyæ %s do zapisu"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Nie mogê otworzyæ %s do odczytu"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: Mieszanka kodowañ w pliku pomocy w ramach jêzyka: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Powtórzony znacznik \"%s\" w pliku %s/%s"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: Nieznana komenda znaku: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: Brak nazwy znaku"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Zbyt wiele nazw znaków"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: Niew³aœciwy tekst znaku: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: Nieznany znak: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: Brak numeru znaku"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: Niew³aœciwa nazwa bufora: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: Niew³aœciwe ID znaku: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr "(nie wspomagane)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[Skasowano]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "Wchodzê w tryb odpluskwiania. WprowadŸ \"cont\" aby kontynuowaæ."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "wiersz %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "cmd: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "Punkt kontrolny w \"%s%s\" wiersz %<PRId64>"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: Nie znaleziono punktu kontrolnego: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "Nie okreœlono ¿adnych punktów kontrolnych"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s wiersz %<PRId64>"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Pierwsze u¿ycie \":profile start {fname}\""
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "Zachowaæ zmiany w \"%s\"?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "Bez Tytu³u"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Nie zapisano zmian w buforze \"%s\""
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "OSTRZE¯ENIE: Nieoczekiwane wejœcie w inny bufor (sprawdŸ autokomendy)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Tylko jeden plik w edycji"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: Nie mo¿na przejœæ przed pierwszy plik"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: Nie mo¿na przejœæ za ostatni plik"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: nie wspierany kompilator: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "Szukanie \"%s\" w \"%s\""
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "Szukanie \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "nie znaleziono w 'runtimepath': \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "Nie mo¿na wczytaæ katalogu: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "nie mog³em wczytaæ \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "wiersz: %<PRId64> nie mog³em wczytaæ \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "wczytywanie \"%s\""
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "wiersz %<PRId64>: wczytywanie \"%s\""
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "skoñczono wczytywanie %s"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "modeline"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd argument"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c argument"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "zmienna œrodowiskowa"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "obs³uga b³êdu"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: OSTRZE¯ENIE: Niew³aœciwy separator wierszy, pewnie brak ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: u¿yto :scriptencoding poza wczytywanym plikiem"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: u¿yto :finish poza wczytywanym plikiem"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Bie¿¹cy %sjêzyk: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Nie mogê ustawiæ jêzyka na \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Wchodzê w tryb Ex. WprowadŸ \"visual\" aby przejœæ do trybu Normal."
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: Na koñcu pliku"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: Komenda zbyt rekursywna"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Nie znaleziono wyj¹tku: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "Koniec wczytywanego pliku"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "Koniec funkcji"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr ""
-"E464: Niejednoznaczne zastosowanie komendy zdefiniowanej przez u¿ytkownika"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: Nie jest komend¹ edytora"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: Dano wsteczny zakres"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "Dano wsteczny zakres; zamiana jest mo¿liwa"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: Stosuj w lub w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: Przykro mi, ale ta komenda nie jest dostêpna w tej wersji"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Tylko pojedyncza nazwa pliku dozwolona"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "1 wiêcej plik do edycji. Mimo to wyjœæ?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "jeszcze %d plików do edycji. Mimo to wyjœæ?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: 1 wiêcej plik do edycji"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: jeszcze %<PRId64> plików do edycji"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: Komenda ju¿ istnieje; aby j¹ przedefiniowaæ stosuj !"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Nazwa Arg. Zak. GotowoϾ Definicja"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "Nie znaleziono komend zdefiniowanych przez u¿ytkownika"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: Nie okreœlono atrybutu"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: Niew³aœciwa iloœæ argumentów"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: Mno¿nik nie mo¿e byæ podany dwukrotnie"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: Niew³aœciwa domyœlna wartoœæ mno¿nika"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -complete wymaga argumentu"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Niew³aœciwy atrybut: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: Niew³aœciwa nazwa komendy"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr ""
-"E183: Komendy zdefiniowane przez u¿ytkownika musz¹ rozpoczynaæ siê du¿¹ "
-"liter¹"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: Nazwa zastrze¿ona, nie mo¿na jej u¿yæ w komendzie u¿ytkownika"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Nie ma takiej komendy u¿ytkownika: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Niew³aœciwa wartoœæ dope³niania: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: Argument depe³niania dozwolony wy³¹cznie dla dope³niania u¿ytkownika"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Dope³nianie u¿ytkownika wymaga funkcji jako argumentu"
-
-#: ../ex_docmd.c:5257
-#, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: Nie mogê znaleŸæ zestawu kolorów '%s'"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "Witaj u¿ytkowniku Vima!"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: Nie mogê zamkn¹æ ostatniej karty"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "Jest ju¿ tylko jedna karta"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Karta %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "Brak pliku wymiany"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr ""
-"E747: Nie mogê zmieniæ katalogu, bufor zosta³ zmodyfikowany (dodaj ! aby "
-"wymusiæ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: Nie ma poprzedniego katalogu"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: Nieznany"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize wymaga dwóch argumentów numerycznych"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr ""
-"E188: Pozyskiwanie pozycji okna nie jest zaimplementowane dla tego systemu"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos wymaga dwóch argumentów numerycznych"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: Nie mogê utworzyæ katalogu: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" istnieje (wymuœ poprzez !)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Nie mogê otworzyæ \"%s\" do zapisu"
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: Argument musi byæ liter¹ albo cudzys³owem w przód/ty³"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: Rekursywne zastosowanie :normal za g³êbokie"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: Brak nazwy zamiennego pliku do podstawienia pod '#'"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: brak nazwy pliku autokomend do podstawienia pod \"<afile>\""
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: brak numeru bufora autokomend do podstawienia pod \"<abuf>\""
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: brak nazwy dopasowania autokomend pod \"<amatch>\""
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: brak nazwy pliku :source do postawienia pod \"<sfile>\""
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: brak numeru linii by u¿yæ z \"<slnum>\""
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Pusta nazwa pliku dla '%' lub '#', dzia³a tylko z \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: Wynikiem jest pusty ci¹g"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: Nie mogê otworzyæ pliku viminfo do odczytu"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: Nie mo¿na ':throw' wyj¹tków z prefiksem 'Vim'"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Wyj¹tek: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Wyj¹tek zakoñczony: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "Wyj¹tek odrzucony: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, wiersz %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "Wyj¹tek przechwycony: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%s zosta³ zawieszony"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%s przywrócony"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%s odrzucony"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Wyj¹tek"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "B³¹d i przerwanie"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "B³¹d"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "Przerwanie"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: zbyt g³êbokie zagnie¿d¿enie :if"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif bez :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else bez :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif bez :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: wielokrotne :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif po :else"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: zbyt g³êbokie zagnie¿d¿enie :while/:for"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue bez :while lub :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break bez :while lub :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: U¿ycie :endfor z :while"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: U¿ycie :endwhile z :for"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: zbyt g³êbokie zagnie¿d¿enie :try"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch bez :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch za :finally"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally bez :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: wielokrotne :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry bez :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction poza funkcj¹"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Nie mo¿na teraz edytowaæ innego bufora"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Nie mo¿na teraz zmieniaæ informacji o buforze"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "nazwa znacznika"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " pokrewny plik\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "opcja 'history' jest zerowa"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s Historia (od najnowszych po najstarsze):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "Wiersz poleceñ"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "Szukany ci¹g"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "Wyra¿enie"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "Wiersz wprowadzeñ"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar przekracza d³ugoœæ polecenia"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Aktywny widok lub bufor skasowany"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr "E854: œcie¿ka za d³uga by uzupe³niæ"
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: Niew³aœciwy trop: '**[numer]' musi byæ na koñcu tropu lub po nim musi "
-"byæ '%s'."
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Nie mogê znaleŸæ katalogu \"%s\" w cdpath"
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Nie mogê znaleŸæ pliku \"%s\" w tropie"
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Katalogu \"%s\" nie ma wiêcej w cdpath"
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Pliku \"%s\" nie ma wiêcej w tropie"
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Autokomendy zmieni³y bufor lub jego nazwê"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "Niedopuszczalna nazwa pliku"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "jest katalogiem"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "nie jest plikiem"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[Nowy Plik]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[Nowy KATALOG]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Za du¿y plik]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[Nie dozwolono]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: Autokomendy *ReadPre zrobi³y plik nieodczytywalnym"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Autokomendy *ReadPre nie mog¹ zmieniaæ bie¿¹cego bufora"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: Wczytywanie ze stdin...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: Nie mo¿na otworzyæ pliku utworzonego przez przemianê!"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/socket]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[socket]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr "[specjalny znak]"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[brak CR]'"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[d³ugie wiersze rozdzielane]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[NIE przemienione]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[przemienione]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[B£¥D W PRZEMIANIE w linii %<PRId64>]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[NIEDOZWOLONY BAJT w wierszu %<PRId64>]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[B£ÊDY W ODCZYCIE]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "Nie mogê znaleŸæ pliku tymczasowego w celu przemiany"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "Nieudana przemiana z 'charconvert'"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "nie mogê odczytaæ wyjœcia z 'charconvert'"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: Brak pasuj¹cych autokomend dla bufora acwrite"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr ""
-"E203: Autokomendy skasowa³y lub wy³adowa³y bufor przeznaczony do zapisu"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Autokomenda zmieni³a liczbê wierszy w nieoczekiwany sposób"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "nie jest plikiem lub zapisywalnym przyrz¹dem"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "jest tylko do odczytu (wymuœ poprzez !)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Nie mogê zapisaæ do pliku zabezpieczenia (wymuœ przez !)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: B³¹d podczas zamykania pliku zabezpieczenia (wymuœ przez !)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Nie mogê odczytaæ pliku w celu zabezpieczenia (wymuœ przez !)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Nie mogê stworzyæ pliku zabezpieczenia (wymuœ przez !)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Nie mogê zrobiæ pliku zabezpieczenia (wymuœ przez !)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: Nie mogê znaleŸæ pliku tymczasowego do zapisania"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Nie mogê przemieniæ (u¿yj ! by zapisaæ bez przemiany)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: Nie mogê otworzyæ pod³¹czonego pliku do zapisu"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: Nie mogê otworzyæ pliku do zapisu"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Fsync nie powiód³ siê"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: Zamkniêcie siê nie powiod³o"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr ""
-"E513: B³¹d zapisu, przemiana siê nie powiod³a (opró¿nij 'fenc' aby wymusiæ)"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: B³¹d zapisu, przemiana siê nie powiod³a w wierszu %<PRId64> (opró¿nij "
-"'fenc' by wymusiæ)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: b³¹d w zapisie (mo¿e system plików jest przepe³niony?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " B£¥D W PRZEMIANIE"
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr " w wierszu %<PRId64>;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[Urz¹dzenie]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[Nowy]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " do³¹czono"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " zapisano"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Patchmode: nie mogê zapisaæ oryginalnego pliku"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: patchmode: nie mogê stworzyæ pustego oryginalnego pliku"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: Nie mogê skasowaæ pliku zabezpieczenia"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"OSTRZE¯ENIE: Oryginalny plik mo¿e zostaæ utracony lub uszkodzony\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "nie wychodŸ edytora, dopóki plik nie zosta³ poprawnie zapisany!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[format dos-a]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[format maca]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[format unixa]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 wiersz, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> wierszy, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 znak"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> znaków"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[Niekompletny ostatni wiersz]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "OSTRZE¯ENIE: Plik zmieni³ siê od czasu ostatniego odczytu!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "Czy naprawdê chcesz go zapisaæ"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: B³¹d zapisywania do \"%s\""
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: B³¹d w trakcie zamykania \"%s\""
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: B³¹d odczytu \"%s\""
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: Autokomenda FileChangedShell skasowa³a bufor"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Plik \"%s\" nie jest d³u¿ej dostêpny"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr ""
-"W12: OSTRZE¯ENIE: Plik \"%s\" zmieni³ siê od czasu rozpoczêcia edycji, bufor "
-"w Vimie równie¿ zosta³ zmieniony"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "Zobacz \":help W12\" dla dalszych informacji."
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: OSTRZE¯ENIE: Plik \"%s\" zmieni³ siê od czasu rozpoczêcia edycji"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "Zobacz \":help W11\" dla dalszych informacji."
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr ""
-"W16: OSTRZE¯ENIE: Tryb pliku \"%s\" zmieni³ siê od czasu rozpoczêcia edycji"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "Zobacz \":help W16\" dla dalszych informacji."
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: OSTRZE¯ENIE: Plik \"%s\" zosta³ stworzony po rozpoczêciu edycji"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "OSTRZE¯ENIE"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"&OK\n"
-"&Za³aduj Plik"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Nie mo¿na przygotowaæ prze³adowania \"%s\""
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: Nie mo¿na prze³adowaæ \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--Skasowano--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "auto-usuwanie autokomendy: %s <buffer=%d>"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: Nie ma takiej grupy: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: Niedopuszczalny znak po *: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: Nie ma takiego wydarzenia: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: Nie ma takiej grupy lub wydarzenia: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Autokomendy ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: niew³aœciwy numer bufora"
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Nie mo¿na wykonywaæ autokomend dla wydarzeñ ALL"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "Brak pasuj¹cych autokomend"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: zbyt g³êbokie zagnie¿d¿enie autokomend"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s Autokomend dla \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Wykonujê %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "autokomenda %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: Brak {."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: Brak }."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: Nie znaleziono zwiniêcia"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Nie mo¿na utworzyæ zwiniêcia przy bie¿¹cej 'foldmethod'"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Nie mo¿na skasowaæ zwiniêcia przy bie¿¹cej 'foldmethod'"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld wierszy zwiniêto "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Dodaj do bufora odczytu"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: rekursywne przyporz¹dkowanie"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: istnieje ju¿ globalny skrót dla %s"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: istnieje ju¿ globalne przyporz¹dkowanie dla %s"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: istnieje ju¿ skrót dla %s"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: istnieje ju¿ przyporz¹dkowanie dla %s"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "Nie znaleziono skrótu"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "Nie znaleziono przyporz¹dkowania"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: Niedopuszczalny tryb"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--Brak wierszy w buforze--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: Przerwanie komendy"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: wymagany argument"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: po \\ powinno byæ /, ? lub &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr ""
-"E11: Niedozwolone w oknie wiersza poleceñ; <CR> wykonuje, CTRL-C opuszcza"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: Komenda niedozwolona z exrc/vimrc w bie¿¹cym szukaniu katalogu lub "
-"znacznika"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: Brak :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: Brak :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: Brak :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: Brak :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile bez :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor bez :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: Plik istnieje (wymuœ poprzez !)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: Komenda nie powiod³a siê"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: B³¹d wewnêtrzny"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "Przerwane"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: Niew³aœciwy adres"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: Niew³aœciwy argument"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: Niew³aœciwy argument: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: Niew³aœciwe wyra¿enie: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: Niew³aœciwy zakres"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: Niew³aœciwa komenda"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" jest katalogiem"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Niew³aœciwa wielkoœæ przewiniêcia"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Wywo³anie z biblioteki nie powiod³o siê dla \"%s()\""
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: Zak³adka ma niew³aœciwy numer wiersza"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: Zak³adka nienastawiona"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: Nie mogê wykonaæ zmian, 'modifiable' jest wy³¹czone"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: Zbyt g³êbokie zagnie¿d¿enie skryptów"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: Brak pliku zamiany"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: Nie ma takiego skrótu"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: Niedozwolone !"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: GUI nie mo¿e byæ u¿yte: Nie w³¹czono podczas kompilacji"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: Brak takiej nazwy grupy podœwietlania: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: Nie wprowadzono jeszcze ¿adnego tekstu"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: Nie ma poprzedniego wiersza poleceñ"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: Nie ma takiego przyporz¹dkowania"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: Brak dopasowañ"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: Brak dopasowañ: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: Brak nazwy pliku"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: Brak poprzedniego podstawieniowego wyra¿enia regularnego"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: Brak poprzedniej komendy"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: Brak poprzedniego wyra¿enia regularnego"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: Zakres niedozwolony"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: Brak miejsca"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: Nie mogê stworzyæ pliku %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: Nie mogê pobraæ nazwy pliku tymczasowego"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: Nie mogê otworzyæ pliku %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: Nie mogê odczytaæ pliku %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Nie zapisano od ostatniej zmiany (wymuœ przez !)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Brak zapisu od czasu ostatniej zmiany]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: Zerowy argument"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: Oczekujê liczby"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: Nie mogê otworzyæ pliku b³êdów %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: Pamiêæ wyczerpana!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "Nie znaleziono wzorca"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: Nie znaleziono wzorca: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: Argument musi byæ dodatni"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Nie mo¿na przejœæ do poprzedniego katalogu"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: Brak B³êdów"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: Brak listy lokacji"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: Popsuty ci¹g wzorca"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: Zepsuty program wyra¿eñ regularnych"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: opcja 'readonly' jest ustawiona (wymuœ poprzez !)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Nie mogê zmieniæ zmiennej tylko do odczytu \"%s\""
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Nie mogê ustawiæ zmiennej w piaskownicy: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: B³¹d w trakcie czytania pliku b³êdów"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: Niedozwolone w piaskownicy"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: Niedozwolone w tym miejscu"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: Ustawianie trybu ekranu niewspomagane"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: Niew³aœciwa wielkoœæ przewiniêcia"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: opcja 'shell' jest pusta"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: Nie mog³em wczytaæ danych znaku!"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: B³¹d podczas zamykania pliku wymiany"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: stos znaczników jest pusty"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: Komenda jest zbyt skomplikowana"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Zbyt d³uga nazwa"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: Zbyt wiele ["
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: Zbyt wiele nazw plików"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: Nadstêpne znaczki"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: Nieznana zak³adka"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: Nie mog¹ rozwin¹æ znaków wieloznacznych"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' nie mo¿e byæ mniejsze ni¿ 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' nie mo¿e byæ mniejsze ni¿ 'winminwidth'"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: B³¹d w trakcie zapisu"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "Zerowy licznik"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: U¿ycie <SID> poza kontekstem skryptu"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: B³¹d wewnêtrzny: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Wzorzec u¿ywa wiêcej pamiêci ni¿ 'maxmempattern'"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: pusty bufor"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: Niew³aœciwy wzorzec wyszukiwania lub delimiter"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Plik jest za³adowany w innym buforze"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: Nie ustawiono opcji '%s'"
-
-#: ../globals.h:1111
-msgid "E850: Invalid register name"
-msgstr "E850: Niew³aœciwa nazwa rejestru"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "szukanie dobi³o GÓRY; kontynuacja od KOÑCA"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "szukanie dobi³o KOÑCA; kontynuacja od GÓRY"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: Brak dwukropka"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: Niedozwolona czêœæ"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: oczekiwa³em na cyfrê"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "Strona %d"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "Brak tekstu do drukowania"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Drukujê stronê %d (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Kopia %d z %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "Wydrukowano: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "Drukowanie odwo³ane"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Nie mo¿na zapisaæ do wyjœciowego pliku PostScriptu"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Nie mogê otworzyæ pliku \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Nie mo¿na odczytaæ pliku zasobów PostScriptu \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: plik \"%s\" nie jest plikiem zasobów PostScriptu"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: plik \"%s\" nie jest wspieranym plikiem zasobów PostScriptu"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" nieprawid³owa wersja pliku zasobów"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Niekompatybilne kodowanie wielobajtowe i zestaw znaków."
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset nie mo¿e byæ pusty przy kodowaniu wielobajtowym."
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Nie okreœlono domyœlnej czcionki dla drukowania wielobajtowego."
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Nie mo¿na otworzyæ pliku PostScript do wyjœcia"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Nie mogê otworzyæ pliku \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Nie mo¿na znaleŸæ pliku zasobów PostScriptu \"prolog.ps\""
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Nie mo¿na znaleŸæ pliku zasobów PostScriptu \"cidfont.ps\""
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Nie mo¿na znaleŸæ pliku zasobów PostScriptu \"%s.ps\""
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Nie mo¿na przekonwertowaæ by drukowaæ kodowanie \"%s\""
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "Przesy³am do drukarki..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Drukowanie pliku PostScript nie powiod³o siê"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "Zadanie drukowanie przes³ane."
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Dodaj now¹ bazê danych"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "Zapytane o wzorzec"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "Poka¿ ten komunikat"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "Zabij po³¹czenie"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "Ponów wszelkie po³¹czenia"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Poka¿ po³¹czenia"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Zastosowanie: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Ta komenda cscope nie wspomaga podzielenia okna.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Zastosowanie: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: nie znaleziono znacznika"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) b³¹d: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s nie jest katalogiem lub poprawn¹ baz¹ danych cscope"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Dodano bazê danych cscope %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: b³¹d odczytu po³¹czenia z cscope %<PRId64>"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: nieznany typ szukania cscope"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Nie mog³em stworzyæ potoku do cscope"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Nie mog³em utworzyæ rozwidlenia dla cscope"
-
-#: ../if_cscope.c:849
-msgid "cs_create_connection setpgid failed"
-msgstr "nie powiod³o siê setpgid cs_create_connection"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "wykonanie cs_create_connection nie powiod³o siê"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen dla to_fp nie powiod³o siê"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen dla fr_fp nie powiod³o siê"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Nie mog³em stworzyæ procesu cscope"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: brak po³¹czenia z cscope"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: nieprawid³owa flaga cscopequickfix %c dla %c"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: brak dopasowañ dla zapytania cscope %s o %s"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "komendy cscope:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (U¿ycie: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: znajdŸ funkcje wywo³uj¹ce tê funkcjê\n"
-" d: znajdŸ funkcje wywo³ywane przez tê funkcjê\n"
-" e: znajdŸ ten wzorzec egrep\n"
-" f: znajdŸ ten plik\n"
-" g: znajdŸ tê definicjê\n"
-" i: znajdŸ pliki w³¹czaj¹ce (#include) ten plik\n"
-" s: znajdŸ ten symbol C\n"
-" t: znajdŸ ten ³añcuch znaków\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: nie dodano duplikatu bazy danych cscope"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: nie ma po³¹czenia %s z cscope"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "po³¹czenie %s z cscope zosta³o zamkniête"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: b³¹d krytyczny w cs_manage_matches"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Znacznik cscope: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # wiersz"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "nazwa pliku / kontekst / wiersz\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: B³¹d cscope: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "Wszystkie bazy danych cscope prze³adowano"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "brak po³¹czeñ z cscope\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid nazwa bazy danych przedsionek tropu\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "Nieznany argument opcji"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "Zbyt wiele argumentów"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "Brak argumentu po"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "Œmiecie po argumencie opcji"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr ""
-"Zbyt wiele argumentów \"+komenda\", \"-c komenda\" lub \"--cmd komenda\""
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "Niew³aœciwy argument dla"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d plików do edycji\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "Próba ponownego otworzenia pliku skryptu: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "Nie mogê otworzyæ do odczytu: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "Nie mogê otworzyæ dla wyjœcia skryptu: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: OSTRZE¯ENIE: Wyjœcie nie jest terminalem\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: OSTRZE¯ENIE: Wejœcie nie pochodzi z terminala\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "linia poleceñ pre-vimrc"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Nie mogê czytaæ z \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"Dalsze informacje poprzez: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[plik ..] edytuj zadane pliki"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- czytaj tekst ze stdin"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t znacznik edytuj plik, w którym dany znacznik jest zdefiniowany"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] edytuj plik, zawieraj¹cy pierwszy b³¹d"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"u¿ycie:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [argumenty]"
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" lub:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"Argumenty:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tTylko nazwy plików po tym"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tNie rozwijaj znaków specjalnych"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tTryb vi (jak \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tTryb ex (jak \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\tUsprawniony tryb Ex"
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tCichy tryb (t³a) (tylko dla \"ex\")"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tTryb ró¿nic (jak \"vimdiff\")"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tTryb ³atwy (jak \"evim\", bez trybów)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tTryb wy³¹cznie do odczytu (jak \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tTryb ograniczenia (jak \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tModyfikacje (zapisywanie plików) niedozwolone"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tZakaz modyfikacji tekstu"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tTryb binarny"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tTryb lisp"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tB¹dŸ zgodny z Vi: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tB¹dŸ niezupe³nie zgodny z Vi: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][nazwap]\t\tGadatliwy [poziom N] [zapisuj wiadomoœci do nazwap]"
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tTryb odpluskwiania"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tZamiast pliku wymiany, u¿ywaj tylko pamiêci"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tWylicz pliki wymiany i zakoñcz"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (z nazw¹ pliku)\tOdtwórz za³aman¹ sesjê"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tTo¿same z -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\trozpocznij w trybie arabskim"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\trozpocznij w trybie hebrajskim"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\trozpocznij w trybie farsi"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tUstaw typ terminala na <terminal>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tU¿yj <vimrc> zamiast jakiegokolwiek .vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tNie ³aduj skryptów wtyczek"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tOtwórz N kart (domyœlnie: po jednej dla ka¿dego pliku)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tOtwórz N okien (domyœlnie: po jednym dla ka¿dego pliku)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\ttak samo jak -o tylko dziel okno pionowo"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tZacznij na koñcu pliku"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\tZacznij w wierszu <lnum>"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr ""
-"-cmd <command>\t\tWykonaj komendê <command> przed za³adowaniem "
-"jakiegokolwiek pliku vimrc"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr ""
-"-c <command>\t\tWykonaj komendê <command> po za³adowaniu pierwszego pliku"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <sesja>\t\tWczytaj plik <sesja> po za³adowaniu pierwszego pliku"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\tWczytuj komendy trybu normalnego z pliku <scriptin>"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr ""
-"-w <scriptout>\tDo³¹cz wszystkie wprowadzane komendy do pliku <scriptout>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr ""
-"-W <scriptout>\tZapisuj wszystkie wprowadzane komendy do pliku <scriptout>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-"--startuptime <plik>\n"
-"Zapisz wiadomoœci o d³ugoœci startu do <plik>"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tU¿ywaj <viminfo> zamiast .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h lub --help\twyœwietl Pomoc (czyli tê wiadomoœæ) i zakoñcz"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\twyœwietl informacjê o wersji i zakoñcz"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "Brak zak³adek"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: ¯adna zak³adka nie pasuje do \"%s\""
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"zak³. wiersz kol plik/tekst"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" skok wiersz kol plik/tekst"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"zmieñ wrsz. kol tekst"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Zak³adki w plikach:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Lista odniesieñ (pocz¹wszy od najnowszych):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Historia zak³adek w plikach (od najnowszych po najstarsze):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "Brak '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: blok nie by³ zablokowany"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: B³¹d w trakcie czytania pliku wymiany"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: B³¹d odczytu pliku wymiany"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: B³¹d szukania w pliku wymiany"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: B³¹d zapisu w pliku wymiany"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: Plik wymiany ju¿ istnieje (atak symlink?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: Nie otrzyma³em bloku nr 0?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: Nie otrzyma³em bloku nr 1?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: Nie otrzyma³em bloku nr 2?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: Ojej, zgubi³em plik wymiany!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: Nie mog³em zmieniæ nazwy pliku wymiany"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr ""
-"E303: Nie mogê otworzyæ pliku wymiany dla \"%s\"; odtworzenie niemo¿liwe"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block(): Nie otrzyma³em bloku 0??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: Nie znaleziono pliku wymiany dla %s"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "WprowadŸ numer pliku wymiany, którego u¿yæ (0 by wyjœæ): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: Nie mogê otworzyæ %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "Nie mogê odczytaæ bloku 0 z "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"Mo¿e nie wykonano zmian albo Vim nie zaktualizowa³ pliku wymiany."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " nie mo¿e byæ stosowany z t¹ wersj¹ Vima.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "U¿yj Vima w wersji 3.0.\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s nie wygl¹da na plik wymiany Vima"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " nie mo¿e byæ stosowany na tym komputerze.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "Ten plik zosta³ stworzony na "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"lub plik zosta³ uszkodzony."
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-" zosta³ uszkodzony (wielkoœæ strony jest mniejsza ni¿ najmniejsza wartoœæ).\n"
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "U¿ywam pliku wymiany \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "Oryginalny plik \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: OSTRZE¯ENIE: Oryginalny plik móg³ byæ zmieniony"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Nie mogê odczytaæ bloku 1 z %s"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???BRAKUJE WIELU WIERSZY"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???LICZNIK WIERSZY NIEZGODNY"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???PUSTY BLOK"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???BRAKUJE WIERSZY"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Niew³aœciwe ID bloku 1 (mo¿e %s nie jest plikiem .swp?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???BRAK BLOKU"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? od tego miejsca po ???KONIEC wiersze mog¹ byæ pomieszane"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? od tego miejsca po ???KONIEC wiersze mog¹ byæ w³o¿one/skasowane"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???KONIEC"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: Przerwanie odtwarzania"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: Wykryto b³êdy podczas odtwarzania; od których wierszy zacz¹æ ???"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "Zobacz \":help E312\" dla dalszych informacji."
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr ""
-"Odtwarzanie zakoñczono. Powinieneœ sprawdziæ czy wszystko jest w porz¹dku."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Mo¿esz chcieæ zapisaæ ten plik pod inn¹ nazw¹\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "i wykonaæ diff z oryginalnym plikiem aby sprawdziæ zmiany)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "Odzyskiwanie zakoñczone. Zawartoœæ bufora jest równa zawartoœci pliku."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"Mo¿esz teraz chcieæ usun¹æ plik .swp.\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "Znalezione pliki wymiany:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " W bie¿¹cym katalogu:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " U¿ywam podanej nazwy:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " W katalogu "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ¿aden --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " posiadany przez: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " data: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " data: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [po Vimie wersja 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [nie wygl¹da na plik wymiany Vima]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " nazwa pliku: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" zmieniono: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "TAK"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "nie"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" u¿ytkownik: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " nazwa hosta: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" nazwa hosta: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ID procesu: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (dalej dzia³a)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [nie do u¿ytku na tym komputerze]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [nieodczytywalny]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [nieotwieralny]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: Nie mogê zabezpieczyæ, bo brak pliku wymiany"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "Plik zabezpieczono"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: Nieudane zabezpieczenie"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: niew³aœciwy lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: nie znaleziono wiersza %<PRId64>"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: niepoprawne id wskaŸnika bloku 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx powinien byæ 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: Zaktualizowano zbyt wiele bloków?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: niepoprawne id wskaŸnika bloku 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "blok nr 1 skasowany?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: Nie mogê znaleŸæ wiersza %<PRId64>"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: niepoprawne id bloku odniesienia"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count wynosi zero"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: numer wiersza poza zakresem: %<PRId64> jest poza koñcem"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: liczba wierszy niepoprawna w bloku %<PRId64>"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "WielkoϾ stosu wzrasta"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: niepoprawne id bloku odniesienia 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Pêtla dowi¹zañ dla \"%s\""
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: UWAGA"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"Znalaz³em plik wymiany o nazwie \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "Podczas otwierania pliku \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " NOWSZE od pliku wymiany!\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) Pewnie inny program obrabia ten sam plik.\n"
-" Jeœli tak, b¹dŸ ostro¿ny, aby nie skoñczyæ z dwoma\n"
-" ró¿nymi wersjami tego samego pliku po zmianach.\n"
-
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr " Zakoñcz lub ostro¿nie kontynuuj.\n"
-
-#: ../memline.c:3246
-msgid "(2) An edit session for this file crashed.\n"
-msgstr "(2) Sesja edycji dla pliku za³ama³a siê.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " Jeœli tak, to u¿yj \":recover\" lub \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" aby odzyskaæ zmiany (zobacz \":help recovery)\").\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Jeœli ju¿ to zrobi³eœ, usuñ plik wymiany \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" aby unikn¹æ tej wiadomoœci.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "Plik wymiany \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ju¿ istnieje!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - UWAGA"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "Plik wymiany ju¿ istnieje!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&Otwórz Read-Only\n"
-"&Edytuj pomimo\n"
-"O&dtwórz\n"
-"&Zakoñcz\n"
-"&Porzuæ"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&Otwórz Read-Only\n"
-"&Edytuj pomimo\n"
-"O&dtwórz\n"
-"&Usuñ\n"
-"&Zakoñcz\n"
-"&Porzuæ"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: Znaleziono zbyt wiele plików wymiany"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: Brak pamiêci! (rezerwacja %<PRIu64> bajtów)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: Czêœæ tropu punktu menu nie okreœla podmenu"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: Menu istnieje tylko w innym trybie"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: Nie ma menu \"%s\""
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: Pusta nazwa menu"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: Trop menu nie mo¿e prowadziæ do podmenu"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: Nie wolno dodawaæ punktów menu wprost do paska menu"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: Separator nie mo¿e byæ czêœci¹ tropu menu"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- Menu ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: Trop menu musi prowadziæ do punktu menu"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: Nie znaleziono menu: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: Menu nie jest zdefiniowane dla trybu %s"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: Trop menu musi prowadziæ do podmenu"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: Nie znaleziono menu - sprawdŸ nazwy menu"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "Wykryto b³¹d podczas przetwarzania %s:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "wiersz %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Niew³aœciwa nazwa rejestru: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatów: Miko³aj Machowski <mikmach@wp.pl>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Przerwanie: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Naciœnij ENTER lub wprowadŸ komendê aby kontynuowaæ"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s wiersz %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- Wiêcej --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: ekran/strona/wiersz w dó³, b/u/k: do góry, q: zakoñcz"
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Pytanie"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"&Tak\n"
-"&Nie"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"&Tak\n"
-"&Nie\n"
-"&Zakoñcz"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"&Tak\n"
-"&Nie\n"
-"Zapisz &wszystkie\n"
-"&Odrzuæ wszystkie\n"
-"&Zakoñcz"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: Za ma³o argumentów dla printf()"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Spodziewany argument Zmiennoprzecinkowy w printf()"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: Za du¿o argumentów dla printf()"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: OSTRZE¯ENIE: Zmiany w pliku tylko do odczytu"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "Wpisz numer i <Enter> lub wybierz mysz¹ (pusta wartoœæ anuluje): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "Wpisz numer i <Enter> (puste anuluje): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "1 wiersz wiêcej"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "1 wiersz mniej"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "dodano %<PRId64> wierszy"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "usuniêto %<PRId64> wierszy"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (Przerwane)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Biiip!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "Wywo³ujê pow³okê do wykonania: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: Brak identyfikatora pod kursorem"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' jest pusta"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "OSTRZE¯ENIE: terminal nie wykonuje podœwietlania"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: Brak ci¹gu pod kursorem"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Nie mogê skasowaæ zwiniêcia z bie¿¹c¹ 'foldmethod'"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: lista zmian (changelist) jest pusta"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: Na pocz¹tku listy zmian"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: Na koñcu listy zmian"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "wprowadŸ :quit<Enter> zakoñczenie programu"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 wiersz %sed 1 raz"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 wiersz %sed %d razy"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> wierszy %sed 1 raz"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> wierszy %sed %d razy"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "%<PRId64> wierszy do wciêcia... "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "1 wiersz wciêty "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "%<PRId64> wierszy wciêtych "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: Brak poprzednio u¿ytego rejestru"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "nie mogê skopiowaæ, mimo to kasujê"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "1 wiersz zmieniono"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "%<PRId64> wierszy zmieniono"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "skopiowano blok 1 wiersza"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "1 wiersz skopiowano"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "%<PRId64> wierszy skopiowanych"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "%<PRId64> wierszy skopiowanych"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: Pusty rejestr %s"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- Rejestry ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "Niedozwolona nazwa rejestru"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# Rejestry:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: Nieznany typ rejestru %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> Kolumn; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Wybrano %s%<PRId64> z %<PRId64> Wierszy; %<PRId64> z %<PRId64> S³ów; "
-"%<PRId64> z %<PRId64> Bajtów"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Wybrano %s%<PRId64> z %<PRId64> Wierszy; %<PRId64> z %<PRId64> S³ów; "
-"%<PRId64> z %<PRId64> Znaków; %<PRId64> z %<PRId64> Bajtów"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Kol %s z %s; Wiersz %<PRId64> z %<PRId64>; S³owo %<PRId64> z %<PRId64>; Bajt "
-"%<PRId64> z %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Kol %s z %s; Wiersz %<PRId64> z %<PRId64>; S³owo %<PRId64> z %<PRId64>; Znak "
-"%<PRId64> z %<PRId64>; Bajt %<PRId64> z %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> dla BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=Strona %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "Dziêki za lot Vimem"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: Nieznana opcja"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: Opcja nie jest wspomagana"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: Niedozwolone w modeline"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr "E846: Kod klucza nie jest ustawiony"
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: Po = wymagany jest numer"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Nie znaleziono w termcap"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: Niedozwolony znak <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: Nie mogê ustawiæ 'term' na pusty ci¹g"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' i 'patchmode' s¹ to¿same"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: Konflikty wartoœci 'listchars'"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: Konflikty wartoœci 'fillchars'"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: Brak dwukropka"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: Ci¹g o zerowej d³ugoœci"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: Brak numeru po <%s>"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: Brak przecinka"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: Musi okreœlaæ wartoœæ '"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: zawiera niewyœwietlalny lub szeroki znak"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: Niedozwolony znak po <%c>"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: wymagany przecinek"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' musi byæ pusty lub zawieraæ %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: Niedomkniêty ci¹g wyra¿eñ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: zbyt wiele elementów"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: niezbalansowane grupy"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: okno podgl¹du ju¿ istnieje"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: Arabski wymaga UTF-8, zrób ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Potrzebujê przynajmniej %d wierszy"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Potrzebujê przynajmniej %d kolumn"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: Nieznana opcja: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: Wymagana Liczba: &%s = '%s'"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Kody terminala ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Globalne wartoœci opcji ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Lokalne wartoœci opcji ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Opcje ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: B£¥D get_varp"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': Brak pasuj¹cego znaku dla %s"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Dodatkowe znaki po œredniku: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"Nie mogê wykonaæ pow³oki "
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"pow³oka zwróci³a "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"Nie mogê uzyskaæ kontekstu bezpieczeñstwa dla"
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"Nie mo¿na uzyskaæ kontekstu bezpieczeñstwa dla"
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Nie mogê znaleŸæ pliku \"%s\" w tropie"
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: Zbyt wiele %%%c w ci¹gu formatuj¹cym"
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Nieoczekiwane %%%c w ci¹gu formatuj¹cym"
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: Brak ] w ci¹gu formatuj¹cym"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: Niewspomagane %%%c w ci¹gu formatuj¹cym"
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Niepoprawne %%%c w prefiksie ci¹gu formatuj¹cego"
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Niepoprawne %%%c w ci¹gu formatuj¹cym"
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' nie zawiera wzorca"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: Pusta nazwa katalogu lub jej brak"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: Nie ma wiêcej elementów"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d z %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (wiersz skasowany)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Na dole stosu quickfix"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Na górze stosu quickfix"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "lista b³êdów %d z %d; %d b³êdów"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: Nie mogê zapisaæ, opcja 'buftype' jest ustawiona"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: Brak nazwy pliku lub niew³aœciwa œcie¿ka"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "Nie mogê otworzyæ pliku \"%s\""
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: Bufor nie jest za³adowany"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: Oczekiwa³em na ³añcuch lub listê"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Niew³aœciwy element w %s%%[]"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Brak ] po %s["
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: Niesparowany %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: Niesparowany %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: Niesparowany %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( jest niedozwolone w tym miejscu"
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 i podobne s¹ niedozwolone w tym miejscu"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Brak ] po %s%%["
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Pusty %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: Zbyt d³ugi wzorzec"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Zbyt wiele \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Zbyt wiele %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: Niesparowany \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: niedozwolony znak po %s@"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Zbyt wiele z³o¿onych %s{...}"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: Zagnie¿d¿one %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: Zagnie¿d¿one %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: Niedozwolone u¿ycie \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c po niczym"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: Niew³aœciwe odwo³anie wsteczne"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: niedopuszczalny znak po \\z"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Niedozwolony znak po %s%%[dxouU]"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: Niedozwolony znak po %s%%"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: B³¹d sk³adni w %s{...}"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Zewnêtrzne poddopasowania:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-"E:864: \\%#= mo¿e byæ tylko przed 0, 1 lub 2. Zostanie u¿yty silnik "
-"automatyczny"
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (NFA) przedwczesny koniec wyra¿enia regularnego"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (wyra¿enie regularne NFA) Niepoprawnie umieszczone %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (NFA) Nieznany operator '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Nieznany operator '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (NFA) Nieznany operator '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-"E870: (wyra¿enie regularne NFA) B³¹d przy odczytywaniu limitów powtórzeñ"
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-"E871: (wyra¿enie regularne NFA) wielokrotne nie mo¿e byæ po wielokrotnym!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (wyra¿enie regularne NFA) Zbyt du¿o '('"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (wyra¿enie regularne NFA) Za du¿o \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (wyra¿enie regularne NFA) b³¹d poprawnego zakoñczenia"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (NFA) Nie mo¿na zdj¹æ elementu ze stosu!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (wyra¿enie regularne NFA) (w trakcie konwersji postfix do NFA), za "
-"wiele stanów na stosie"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (wyra¿enie regularne NFA) Nie ma miejsca na ca³e NFA "
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"Nie mo¿na otworzyæ do zapisu tymczasowego pliku, pokazujê na stderr... "
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(NFA) NIE MO¯NA OTWORZYÆ %s !"
-
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku logowania"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " V-ZAMIANA"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ZAMIANA"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " NEGATYW"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " WPROWADZANIE"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (wprowadzanie)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (zamiana)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (v-zamiana)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Hebrajski"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Arabski"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (jêzyk)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (wklejanie)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " WIZUALNY"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " WIZUALNY LINIOWY"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " WIZUALNY BLOKOWY"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ZAZNACZANIE"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ZAZNACZANIE LINIOWE"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ZAZNACZANIE BLOKOWE"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "zapis"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: Niew³aœciwy ci¹g do szukania: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: szukanie dobi³o GÓRY bez znalezienia: %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: szukanie dobi³o KOÑCA bez znalezienia : %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: Oczekujê '?' lub '/' po ';'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (zawiera poprzednio wymienione dopasowanie)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- Zawarte pliki "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "nie znaleziono"
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "w tropie ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Ju¿ wymienione)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " NIE ZNALEZIONO"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "Przegl¹d w³¹czonego pliku: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "Przeszukiwanie w³¹czonego pliku %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: Wzorzec pasuje w bie¿¹cym wierszu"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "Wszelkie w³¹czane pliki odnaleziono"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "Brak w³¹czanych plików"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: Nie znalaz³em definicji"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Nie znalaz³em wzorca"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Podstawienie "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# Ostatni %sWyszukiwany wzorzec:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: Nieprawid³owy format pliku sprawdzania pisowni"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: Obciêty plik sprawdzania pisowni"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Zbêdny tekst w %s wiersz %d: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Za d³uga nazwa afiksu w %s wiersz %d: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: B³¹d formatu w pliku afiksów FOL, LOW lub UPP"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Znak w FOL, LOW lub UPP jest poza zasiêgiem"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "Kompresja drzewa s³ów..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: Sprawdzanie pisowni nie jest w³¹czone"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-"Ostrze¿enie: Nie mogê znaleŸæ listy s³ów \"%s.%s.spl\" lub \"%s.ascii.spl\""
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "Odczytujê plik sprawdzania pisowni \"%s\""
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: To nie wygl¹da na plik sprawdzania pisowni"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Stary plik sprawdzania pisowni, wymagane uaktualnienie"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Plik sprawdzania pisowni dla nowszej wersji Vima"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: Niewspierana sekcja w pliku sprawdzania pisowni"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "Ostrze¿enie: region %s nie jest wspierany"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "Czytam plik afiksów %s ..."
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "Konwersja nie powiod³a siê dla wyrazu w %s wierszu %d: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "Konwersja w %s nie jest wspierana: od %s do %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "Nieprawid³owa wartoœæ FLAG w %s wierz %d: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG po u¿yciu flag w %s wiersz %d: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Definiowanie COMPOUNDFORBIDFLAG po PFX mo¿e skutkowaæ z³ym wynikiem w %s "
-"wiersz %d"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Definiowanie COMPOUNDPERMITFLAG po PFX mo¿e skutkowaæ z³ym wynikiem w %s "
-"wiersz %d"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "Z³a wartoœæ COMPOUNDRULES w %s wiersz %d: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "Z³a wartoœæ COMPOUNDWORDMAX w %s wiersz %d: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "Z³a wartoœæ COMPOUNDMIM w %s wiersz %d: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "Z³a wartoœæ COMPOUNDSYLMAX w %s wiersz %d: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "Z³a wartoœæ CHECKCOMPOUNDPATTERN w %s wiersz %d: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr "Ró¿ne flagi z³o¿eñ w kontynuowanym bloku afiksu w %s wiersz %d: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "Powtórzony afiks w %s wiersz %d: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w "
-"%s wiersz %d: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "Oczekiwano Y lub N w %s wierszu %d: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "B³êdny warunek w %s wiersz %d: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "Oczekiwano iloœci REP(SAL) w %s wierszu %d"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "Oczekiwano iloœci MAP w %s wierszu %d"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "Powtórzony znak w MAP w %s wierszu %d"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "Nieznany lub powtórzony element w %s wierszu %d: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Brak wiersza FOL/LOW/UPP w %s"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "COMPOUNDSYLMAX u¿yty bez SYLLABLE"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Zbyt wiele opóŸnionych prefiksów"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Zbyt wiele flag z³o¿eñ"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Zbyt wiele opóŸnionych prefiksów i/lub flag z³o¿eñ"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "Brak wiersza SOFO%s wiersz w %s"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "Wiersze SAL i SOFO w %s"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "Flaga nie jest liczb¹ w %s wiersz %d: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "Nieprawid³owa flaga w %s wiersz %d: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "Wartoœæ %s ró¿ni siê od tej u¿ytej w innym pliku .aff"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "Czytam plik s³ownika %s ..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: Brak iloœci s³ów w %s"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "wiersz %6d, s³owo %6d - %s"
-
-# c-format
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "Powtórzony wyraz w %s wierszu %d: %s"
-
-# c-format
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "Pierwszy powtórzony wyraz w %s wiersz %d: %s"
-
-# c-format
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d powtórzony(ch) wyraz(ów) w %s"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII w %s"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "Odczytujê plik wyrazów %s ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "Zignorowano powtórzony wiersz /encoding= w %s wierszu %d: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Zignorowano wiersz /encoding= po wyrazie w %s wierszu %d: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "Powtórzony wiersz /regions= zignorowano w %s wierszu %d: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "Za du¿o regionów w %s wiersz %d: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "wiersz / zignorowano w %s wierszu %d: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "Nieprawid³owy numer regionu w %s wierszu %d: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "Nieznane flagi w %s wiersz %d: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "Skompresowano %d z %d wêz³ów; pozostaje %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "Odczytujê plik sprawdzania pisowni..."
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "Wykonujê kompresjê dŸwiêkow¹..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "Liczba s³ów po kompresji dŸwiêkowej: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "Ca³kowita liczba s³ów: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "Zapisujê plik sugestii %s ..."
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "Oczekiwane zu¿ycie pamiêci: %d bajtów"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Nazwa pliku wynikowego nie mo¿e byæ nazw¹ regionu"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: Wspieram tylko 8 regionów"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: Nieprawid³owy region w %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "Ostrze¿enie: okreœlono zarówno z³o¿enia jak i NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "Zapisujê plik sprawdzania pisowni %s ..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Zrobione!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' nie posiada wpisów %<PRId64>"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Usuniêto s³owo z %s"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Dodano s³owo do %s"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: Znaki wyrazów ró¿ni¹ siê miêdzy plikami sprawdzania pisowni"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Przykro mi, brak podpowiedzi"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Przykro mi, tylko %<PRId64> podpowiedzi"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "Zmieñ \"%.*s\" na:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: Brak poprzednich podmian sprawdzania pisowni"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: Nie znaleziono: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: Ten plik nie wygl¹da na plik .sug: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Stary plik .sug, konieczne jest uaktualnienie: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: Plik .sug dla nowszej wersji Vima: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: Plik .sug nie pasuje do pliku .spl: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: B³¹d w czasie odczytu pliku .sug: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: Podwojony znak we wpisie MAP"
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Brak elementów sk³adni okreœlonych dla tego bufora"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: Niedozwolony argument: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Nie ma takiego klastra sk³adni: %s"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "synchronizacja komentarzy w stylu C"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "brak synchronizacji"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "pocz¹tek synchronizacji"
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " wierszy przed górn¹ lini¹"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Elementy synchronizacji sk³adni ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"synchronizujê na elementach"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Elementy sk³adni ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Nie ma takiego klastra sk³adni: %s"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "minimalnie "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "maksymalnie "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; pasuje "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr "znaków nowego wiersza"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: argument contains niedozwolony w tym miejscu"
-
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: Niew³aœciwa wartoœæ cchar"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: group[t]here niedozwolone w tym miejscu"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: Nie znalaz³em elementów regionu dla %s"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: Wymagana nazwa pliku"
-
-#: ../syntax.c:4221
-msgid "E847: Too many syntax includes"
-msgstr "E847: Za du¿o w³¹czonych sk³adni"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: Brak ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: Brak '=': %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Za ma³o argumentów: syntax region %s"
-
-#: ../syntax.c:4870
-msgid "E848: Too many syntax clusters"
-msgstr "E848: Za du¿o klastrów sk³adni"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: Brak specyfikacji klastra"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: Brak ogranicznika wzorca: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Œmieci po wzorcu: %s"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: syntax sync: wielokrotnie podane wzorce kontynuacji wiersza"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: Niedozwolone argumenty: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: Brak znaku równoœci: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: Pusty argument: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s jest niedozwolone w tym miejscu"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s musi byæ pierwsze w liœcie contains"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: Nieznana nazwa grupy: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: Niew³aœciwa podkomenda :syntax : %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-" WSZYTKO ILOŒÆ PASUJE NAJWOLN. ŒREDNIO NAZWA WZORZEC"
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: rekursywna pêtla wczytuj¹ca syncolor.vim"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: nie znaleziono grupy podœwietlania: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Zbyt ma³o argumentów: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Zbyt wiele argumentów: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: grupa ma ustawienia; zignorowane pod³¹czenie podœwietlania"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: nieoczekiwany znak równoœci: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: brak znaku równoœci: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: brak argumentu: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: Niedozwolona wartoϾ: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: Kolor FG nieznany"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: Kolor BG nieznany"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: Nazwa lub liczba koloru nierozpoznana: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: za d³ugi kod terminala: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: Niedozwolony argument: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: Zbyt wiele ró¿nych atrybutów podkreœlania w u¿yciu"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: Niedrukowalny znak w nazwie grupy"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: nieprawid³owy znak w nazwie grupy"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr "E849: Za du¿o grup podœwietlania i sk³adni"
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: na dole stosu znaczników"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: na górze stosu znaczników"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Nie mo¿na przejœæ przed pierwszy pasuj¹cy znacznik"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: nie znaleziono znacznika: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri rodzaj znacznik"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "plik\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Pasuje tylko jeden znacznik"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Nie mo¿na przejœæ za ostatni pasuj¹cy znacznik"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Plik \"%s\" nie istnieje"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "znacznik %d z %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " lub wiêcej"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " U¿ywam znacznika o odmiennej wielkoœci liter!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Plik \"%s\" nie istnieje"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # DO znacznik OD wiersza w pliku/tekœcie"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "Szukam w pliku znaczników %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: B³¹d formatu w pliku znaczników \"%s\""
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "Przed bajtem %<PRId64>"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Plik znaczników nieuporz¹dkowany: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: Brak pliku znaczników"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: Nie mogê znaleŸæ wzorca znacznika"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Nie znalaz³em znacznika - tylko zgadujê!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "Powtórzona nazwa pola: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' nieznany. Mo¿liwe typy wbudowanych terminali:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "domyœlnie jest '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: Nie mogê otworzyæ pliku termcap"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Nie ma opisu takiego terminala w terminfo"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Nie ma opisu takiego terminala w termcap"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Brak opisu \"%s\" w termcap"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: wymagana zdolnoϾ \"cm\" terminala"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Klawisze terminala ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: B³¹d podczas wczytywania wejœcia, koñczê...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Niespodziewana zmiana iloœci linii"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: Nie mogê otworzyæ do zapisu pliku undo: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: Uszkodzony plik undo (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "Nie mo¿na zapisaæ pliku undo w ¿adnym katalogu z 'undodir'"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Nie nadpiszê plikiem undo, nie mogê odczytaæ: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "Nie nadpiszê, to nie jest plik undo: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "Pomijam zapis pliku undo, nic do cofniêcia"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "Zapisujê plik undo: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: B³¹d zapisu w pliku undo: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "Nie wczytujê pliku undo, inny w³aœciciel: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "Wczytujê plik undo: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: Nie mogê otworzyæ pliku undo do odczytu: %s"
-
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: To nie jest plik undo: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: Niekompatybilny plik undo: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "Zawartoœæ pliku siê zmieni³a, nie mogê u¿yæ pliku undo"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "Skoñczono wczytywanie pliku undo %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "Ju¿ w miejscu ostatniej zmiany"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "Ju¿ w miejscu najnowszej zmiany"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: Nie znaleziono numeru cofniêcia %<PRId64>"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: niew³aœciwe numery wierszy"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "1 wiersz wiêcej"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "wiêcej wierszy"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "1 wiersz mniej"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "mniej wierszy"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "1 zmiana"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "zmiany"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "przed"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "za"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Nie ma zmian do cofniêcia"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr "liczba zmiany kiedy zapisano"
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> sekund temu"
-
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undojoin nie jest dozwolone po undo"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: uszkodzona lista cofania"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: brak wiersza cofania"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Zadane ³aty: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"Ekstra ³aty: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Zmieniony przez "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Skompilowany "
-
-#: ../version.c:649
-msgid "by "
-msgstr "przez "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"Olbrzymia wersja "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "bez GUI."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " Opcje w³¹czone (+) lub nie (-):\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " vimrc systemu: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " vimrc u¿ytkownika: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " 2-gi plik vimrc u¿ytkownika: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " 3-ci plik vimrc u¿ytkownika: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " exrc u¿ytkownika: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " 2-gi plik exrc u¿ytkownika: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " odwet dla $VIM-a: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr "f-b dla $VIMRUNTIME: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "Kompilacja: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Konsolidacja: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " KOMPILACJA DEBUG"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi rozbudowany"
-
-#: ../version.c:769
-msgid "version "
-msgstr "wersja "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "Autor: Bram Moolenaar i Inni."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim jest open source i rozprowadzany darmowo"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "Pomó¿ biednym dzieciom w Ugandzie!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "wprowadŸ :help iccf<Enter> dla informacji o tym "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "wprowadŸ :q<Enter> zakoñczenie programu "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "wprowadŸ :help<Enter> lub <F1> pomoc na bie¿¹co "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "wprowadŸ :help version7<Enter> dla informacji o wersji"
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Dzia³am w trybie zgodnoœci z Vi"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "wprowadŸ :set nocp<Enter> wartoœci domyœlne Vim-a"
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "wprowadŸ :help cp-default<Enter> dla informacji to tym "
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "Sponsoruj rozwój Vima!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "Zostañ zarejestrowanym u¿ytkownikiem Vima!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "wprowadŸ :help sponsor<Enter> dla informacji"
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "wprowadŸ :help register<Enter> dla informacji"
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "menu Pomoc->Sponsoruj/Zarejestruj siê dla informacji"
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "Ju¿ jest tylko jeden widok"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: Nie ma okna podgl¹du"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: Nie mogê rozdzieliæ lewo-górnego i prawo-dolnego jednoczeœnie"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: Nie mogê przekrêciæ, gdy inne okno jest rozdzielone"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: Nie mogê zamkn¹æ ostatniego okna"
-
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: Nie mo¿na zamkn¹æ okna autocmd"
-
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: Nie mo¿na zamkn¹æ okna, zosta³oby tylko okno autocmd"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: Inne okno zawiera zmiany"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: Brak nazwy pliku pod kursorem"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: bf_key_init() wywo³any z pustym has³em"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Blowfish u¿ywa b³êdnej kolejnoœci bajtów"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: test sha256 nie powiód³ siê"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: test Blowfisha nie powiód³ siê"
-
-#~ msgid "Patch file"
-#~ msgstr "Plik ³ata"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&OK\n"
-#~ "&Zakoñcz"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Brak po³¹czenia z serwerem Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Nie mogê wys³aæ do %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Nie mogê czytaæ odpowiedzi serwera"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Nie mogê wys³aæ do klienta"
-
-#~ msgid "Save As"
-#~ msgstr "Zapisz jako"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Wczytaj skrypt Vima"
-
-#~ msgid "Edit File"
-#~ msgstr "Edytuj Plik"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (NIE ZNALEZIONO)"
-
-#~ msgid "unknown"
-#~ msgstr "nieznany"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "Edytuj plik w nowym oknie"
-
-#~ msgid "Append File"
-#~ msgstr "Do³¹cz plik"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "Pozycja okna: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "Zapisz przekierowanie"
-
-#~ msgid "Save View"
-#~ msgstr "Zapisz widok"
-
-#~ msgid "Save Session"
-#~ msgstr "Zapisz sesjê"
-
-#~ msgid "Save Setup"
-#~ msgstr "Zapisz ustawienia"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< nie jest dostêpne bez w³aœciwoœci +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: Brak dwugrafów w tej wersji"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "jest urz¹dzeniem (wy³¹czonym w opcji 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "Wczytywanie ze stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[zakodowane]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Plik zaszyfrowano w nieznany sposób"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans nie pozwala na zapis niezmodyfikowanych buforów"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "Czêœciowy zapis niemo¿liwy dla buforów NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "zapisywanie do urz¹dzenia wy³¹czone w opcji 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Rozdzia³ zasobów zostanie utracony (wymuœ przez !)"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<nie mogê otworzyæ> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: nie mogê otrzymaæ czcionki %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: nie mogê powróciæ do bie¿¹cego katalogu"
-
-#~ msgid "Pathname:"
-#~ msgstr "Trop:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: nie mogê otrzymaæ bie¿¹cego katalogu"
-
-#~ msgid "OK"
-#~ msgstr "OK"
-
-#~ msgid "Cancel"
-#~ msgstr "Zakoñcz"
-
-#~ msgid "Vim dialog"
-#~ msgstr "VIM - Dialog"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr ""
-#~ "Scrollbar Widget: Nie mog³em otrzymaæ rozmiarów rysunku na przycisku."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: Nie mogê stworzyæ BalloonEval z powiadomieniem i wywo³aniem"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Nie mog³em stworzyæ nowego procesu dla GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Proces potomny nie móg³ uruchomiæ GUI"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Nie mogê odpaliæ GUI"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Nie mogê czytaæ z \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: Nie mo¿na uruchomiæ GUI, brak prawid³owej czcionki"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Niew³aœciwe 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Nieprawid³owa wartoœæ 'imactivatekey'"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Nie mogê zarezerwowaæ koloru %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Brak dopasowania przy kursorze, szukam dalej"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Input _Methods"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - Szukaj i Zamieñ..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - Szukaj..."
-
-#~ msgid "Find what:"
-#~ msgstr "ZnajdŸ:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Zamieñ na:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Dopasuj tylko ca³e wyrazy"
-
-#~ msgid "Match case"
-#~ msgstr "Dopasuj wielkoϾ liter"
-
-#~ msgid "Direction"
-#~ msgstr "Kierunek"
-
-#~ msgid "Up"
-#~ msgstr "W górê"
-
-#~ msgid "Down"
-#~ msgstr "W dó³"
-
-#~ msgid "Find Next"
-#~ msgstr "ZnajdŸ nastêpne"
-
-#~ msgid "Replace"
-#~ msgstr "Zamieñ"
-
-#~ msgid "Replace All"
-#~ msgstr "Zamieñ wszystkie"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: otrzymano ¿¹danie \"die\" od mened¿era sesji\n"
-
-#~ msgid "Close"
-#~ msgstr "Zamknij"
-
-#~ msgid "New tab"
-#~ msgstr "Nowa karta"
-
-#~ msgid "Open Tab..."
-#~ msgstr "Otwórz kartê..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: G³ówne okno nieoczekiwanie zniszczone\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&Filtr"
-
-#~ msgid "&Cancel"
-#~ msgstr "&Anuluj"
-
-#~ msgid "Directories"
-#~ msgstr "Katalogi"
-
-#~ msgid "Filter"
-#~ msgstr "Filtr"
-
-#~ msgid "&Help"
-#~ msgstr "&Pomoc"
-
-#~ msgid "Files"
-#~ msgstr "Pliki"
-
-#~ msgid "&OK"
-#~ msgstr "&OK"
-
-#~ msgid "Selection"
-#~ msgstr "Wybór"
-
-#~ msgid "Find &Next"
-#~ msgstr "ZnajdŸ &nastêpne"
-
-#~ msgid "&Replace"
-#~ msgstr "&Zamieñ"
-
-#~ msgid "Replace &All"
-#~ msgstr "Zamieñ &wszystko"
-
-#~ msgid "&Undo"
-#~ msgstr "&Cofnij"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Nie mogê znaleŸæ tytu³u okna \"%s\""
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Argument nie jest wspomagany: \"-%s\"; U¿ywaj wersji OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Nie mo¿na otworzyæ okna wewn¹trz aplikacji MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Zamknij kartê"
-
-#~ msgid "Open tab..."
-#~ msgstr "Otwórz kartê..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "ZnajdŸ ci¹g (u¿yj '\\\\' do szukania '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Szukanie i Zamiana (u¿yj '\\\\' do szukania '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Nie u¿ywany"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Katalog\t*.nic\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Nie mogê zarezerwowaæ mapy kolorów, pewne kolory mog¹ byæ "
-#~ "nieprawid³owe"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr ""
-#~ "E250: Brak czcionek dla nastêpuj¹cych zestawów znaków w zestawie czcionek "
-#~ "%s:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Nazwa zestawu czcionek: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Czcionka '%s' nie posiada znaków jednolitej szerokoœci"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Nazwa zestawu czcionek: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Font0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Font1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "Szerokoœæ font%<PRId64> nie jest podwójn¹ szerokoœci¹ font0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "SzerokoϾ font0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "SzerokoϾ font1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Nieprawid³owy opis czcionki"
-
-#~ msgid "&Dismiss"
-#~ msgstr "&Anuluj"
-
-#~ msgid "no specific match"
-#~ msgstr "brak okreœlonego dopasowania"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - wybór czcionki"
-
-#~ msgid "Name:"
-#~ msgstr "Nazwa:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Poka¿ wielkoœæ w punktach"
-
-#~ msgid "Encoding:"
-#~ msgstr "Kodowanie:"
-
-#~ msgid "Font:"
-#~ msgstr "Czcionka:"
-
-#~ msgid "Style:"
-#~ msgstr "Styl:"
-
-#~ msgid "Size:"
-#~ msgstr "WielkoϾ:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: B£¥D w automacie Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: b³¹d stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: nie mogê otworzyæ bazy danych cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: nie mogê uzyskaæ informacji z bazy danych cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Nie mo¿na wczytaæ biblioteki Lua."
-
-#~ msgid "cannot save undo information"
-#~ msgstr "nie mogê zachowaæ informacji cofania"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Przykro mi, ta komenda jest wy³¹czona, biblioteka MzScheme nie mo¿e "
-#~ "byæ za³adowana."
-
-#~ msgid "invalid expression"
-#~ msgstr "niepoprawne wyra¿enie"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "wyra¿enia wy³¹czone podczas kompilacji"
-
-#~ msgid "hidden option"
-#~ msgstr "ukryta opcja"
-
-#~ msgid "unknown option"
-#~ msgstr "nieznana opcja"
-
-#~ msgid "window index is out of range"
-#~ msgstr "indeks okna poza zakresem"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "nie mogê otworzyæ bufora"
-
-#~ msgid "cannot delete line"
-#~ msgstr "nie mogê skasowaæ wiersza"
-
-#~ msgid "cannot replace line"
-#~ msgstr "nie mogê zamieniæ wiersza"
-
-#~ msgid "cannot insert line"
-#~ msgstr "nie mogê wprowadziæ wiersza"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "ci¹g nie mo¿e zawieraæ znaków nowego wiersza"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "b³¹d przy konwersji wartoœci Scheme do Vima"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "B³¹d vima: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "B³¹d Vima"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "bufor jest niewa¿ny"
-
-#~ msgid "window is invalid"
-#~ msgstr "okno jest niewa¿ne"
-
-#~ msgid "linenr out of range"
-#~ msgstr "numer wiersza poza zakresem"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "Niedozwolone w piaskownicy Vima"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Przykro mi, ta komenda jest wy³¹czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Pythona"
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Nie mo¿na wywo³aæ Pythona rekursywnie"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ musi byæ reprezentacj¹ £añcucha"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Przykro mi, ta komenda jest wy³¹czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Ruby."
-
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: nieoczekiwany return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: nieoczekiwany next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: nieoczekiwany break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: nieoczekiwane redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: ponowna próba poza klauzul¹ ratunku"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: nieobs³ugiwany wyj¹tek"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Nieznany status longjmp %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Prze³¹cz miêdzy implementacj¹/okreœleniem"
-
-#~ msgid "Show base class of"
-#~ msgstr "Poka¿ bazê klasy"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Poka¿ przepisan¹ funkcjê cz³onow¹"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Pobieraj z pliku"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Pobieraj z projektu"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Pobieraj z wszystkich projektów"
-
-#~ msgid "Retrieve"
-#~ msgstr "Pobierz"
-
-#~ msgid "Show source of"
-#~ msgstr "Poka¿ Ÿród³o dla"
-
-#~ msgid "Find symbol"
-#~ msgstr "ZnajdŸ symbol"
-
-#~ msgid "Browse class"
-#~ msgstr "Przejrzyj klasê"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Poka¿ klasê w hierarchii"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Poka¿ klasê w ograniczonej hierarchii"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref odnosi siê do"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ma odniesienia od"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ma"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref u¿yte przez"
-
-#~ msgid "Show docu of"
-#~ msgstr "Poka¿ dokumentacjê dla"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Utwórz dokumentacjê dla"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Nie mogê pod³¹czyæ do SNiFF+. SprawdŸ œrodowisko (sniffemacs musi byæ "
-#~ "odnaleziony w $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: B³¹d podczas czytania. Roz³¹czenie"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ jest obecnie "
-
-#~ msgid "not "
-#~ msgstr "nie "
-
-#~ msgid "connected"
-#~ msgstr "pod³¹czony"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Nieznane zapytanie SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: B³¹d w trakcie pod³¹czania do SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ niepod³¹czony"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Nie jest buforem SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: B³¹d w trakcie zapisu. Roz³¹czony"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "niew³aœciwy numer bufora"
-
-#~ msgid "not implemented yet"
-#~ msgstr "obecnie nie zaimplementowano"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "nie mogê ustawiæ wiersza(y)"
-
-#~ msgid "invalid mark name"
-#~ msgstr "niepoprawna nazwa zak³adki"
-
-#~ msgid "mark not set"
-#~ msgstr "zak³adka nie ustawiona"
-
-#~ msgid "row %d column %d"
-#~ msgstr "wiersz %d kolumna %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "nie mogê wprowadziæ/do³¹czyæ wiersza"
-
-#~ msgid "line number out of range"
-#~ msgstr "numer wiersza poza zakresem"
-
-#~ msgid "unknown flag: "
-#~ msgstr "nieznana flaga: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "nieznane vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "przerwanie klawiatury"
-
-#~ msgid "vim error"
-#~ msgstr "b³¹d vima"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "nie mogê stworzyæ bufora/okna komendy: obiekt jest kasowany"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr ""
-#~ "nie mogê zarejestrowaæ wstecznego wywo³ania komendy: bufor/okno ju¿ "
-#~ "zosta³a skasowana"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: TCL FATALNY B£¥D: reflist zepsuta!? Proszê z³o¿yæ raport o tym na "
-#~ "vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "nie mogê zarejestrowaæ wstecznego wywo³ania komendy: brak odniesienia do "
-#~ "bufora/okna"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Przykro mi, ta komenda jest wy³¹czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Tcl."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: kod wyjœcia %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "nie mogê dostaæ wiersza"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Nie mogê zarejestrowaæ nazwy serwera komend"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Wys³anie komendy do programu docelowego nie powiod³o siê"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: U¿yto niew³aœciwego id serwera: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: wcielenia instancji rejestru Vima jest Ÿle sformowane. Skasowano!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans nie s¹ obs³ugiwane przez to GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "Ta wersja Vima nie by³a skompilowanego z opcj¹ ró¿nic (diff)."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "'-nb' - nie mo¿e byæ u¿yte: nie w³¹czone przy kompilacji\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: B³¹d: Nie mo¿na uruchomiæ gvim z NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "gdzie wielkoœæ znaków jest ignorowana dodaj na pocz¹tku / by flaga by³a "
-#~ "wielk¹ liter¹"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tZarejestruj tego gvima w OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tWyrejestruj gvima z OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tStartuj w GUI (tak jak \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f lub --nofork\tPierwszy plan: Nie wydzielaj przy odpalaniu GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tNie stosuj newcli do otwierania okien"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\tU¿ywaj <device> do I/O"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\tU¿yj <gvimrc> zamiast jakiegokolwiek .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tEdytuj zakodowane pliki"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\tPod³¹cz vima to danego X-serwera"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tNie ³¹cz z serwerem X"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <pliki>\tEdytuj pliki w serwerze Vima jeœli mo¿liwe"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <pliki> To samo, nie narzekaj jeœli nie ma serwera"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <pliki>\tTak jak --remote, lecz czekaj na pliki przed edycj¹"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <pliki> To samo, nie narzekaj jeœli nie ma serwera"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <pliki> tak jak --remote ale u¿ywa jednej "
-#~ "karty na plik"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <klawisze>\tWyœlij <klawisze> do serwera Vima i zakoñcz"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <wyr>\tWykonaj <wyra¿enie> w serwerze i wypisz wynik"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\tWymieñ nazwy dostêpnych serwerów Vima i zakoñcz"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <nazwa>\t\tOdsy³aj do/stañ siê serwerem Vim <nazwa>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja Motif):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja Athena):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\tZa³aduj vim na <display>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tZacznij Vim jako ikonê"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <kolor>\tU¿ywaj <kolor> dla t³a (równie¿: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <kolor>\tU¿ywaj <kolor> dla normalnego tekstu (równie¿: -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\t\tU¿ywaj <font> dla normalnego tekstu (równie¿: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\tU¿ywaj <font> dla wyt³uszczonego tekstu"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\tU¿ywaj <font> dla pochy³ego"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr ""
-#~ "-geometry <geom>\tU¿ywaj <geom> dla pocz¹tkowych rozmiarów (równie¿: -"
-#~ "geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <szer>\tU¿yj ramki o gruboœci <szer> (równie¿: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <szer> U¿ywaj przewijacza o szerokoœci <szer> (równie¿: -"
-#~ "sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr ""
-#~ "-menuheight <height>\tStosuj belkê menu o wysokoœci <height> (równie¿: -"
-#~ "mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tStosuj negatyw kolorów (równie¿: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tNie stosuj negatywu kolorów (równie¿: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\tUstaw okreœlony zasób"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja GTK+):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\tZastartuj vim na <display> (równie¿: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\tUstaw unikatow¹ rolê do identyfikacji g³ównego okna"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tOtwórz Vim wewn¹trz innego widgetu GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "-echo-wid\t\tGvim wypisze Window ID na wyjœcie standardowe"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <tytu³ rodzica>\tOtwórz Vima wewn¹trz rodzicielskiej aplikacji"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tOtwórz Vima wewn¹trz innego elementu win32"
-
-#~ msgid "No display"
-#~ msgstr "Brak display"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Wys³anie nie powiod³o siê.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Wys³anie nie powiod³o siê. Próbujê wykonaæ na miejscu\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "otworzono %d z %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Brak terminala: Wys³anie wyra¿enia nie powiod³o siê.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Wys³anie wyra¿enia nie powiod³o siê.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: To nie jest wa¿na strona kodowa"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Nie mogê nastawiæ wartoœci IC"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Nie mog³em stworzyæ kontekstu wprowadzeñ"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Nie mog³em otworzyæ sposobu wprowadzeñ"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: OSTRZE¯ENIE: Nie mog³em zlikwidowaæ wywo³ania dla IM"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: metoda wprowadzeñ nie wspomaga ¿adnego stylu"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: metoda wprowadzeñ nie wspomaga mojego typu preedit"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: B³¹d w czasie uaktualniania szyfrowania pliku wymiany"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s jest zaszyfrowany a ta wersja Vima nie wspiera szyfrowania"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Zaszyfrowany plik wymiany: \"%s\""
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "Jeœli podano nowy klucz szyfruj¹cy, ale nie zapisano pliku tekstowego,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "wprowadŸ nowy klucz szyfruj¹cy."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "Jeœli zapisano plik tekstowy po zmianie klucza szyfruj¹cego wciœnij Enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "aby u¿yæ tego samego klucza dla pliku tekstowego i wymiany"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "U¿ywam klucza szyfruj¹cego z pliku wymiany do pliku tekstowego.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [nie nadaje siê dla tej wersji Vima]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "Oderwij to menu"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Dialog wyboru katalogu"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Dialog zapisywania pliku"
-
-#~ msgid "Open File dialog"
-#~ msgstr "Dialog otwierania pliku"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: Przykro mi, nie ma przegl¹darki plików w trybie konsoli"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: zachowujê plik...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: Zakoñczono.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "B£¥D: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[bajtów] totalne alokacje-zwolnienia %<PRIu64>-%<PRIu64>, w u¿ytku "
-#~ "%<PRIu64>, maksymalne u¿ycie %<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[wywo³ania] wszystkich re/malloc()-ów %<PRIu64>, wszystkich free()-ów "
-#~ "%<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: Wiersz staje siê zbyt d³ugi"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Wewnêtrzny b³¹d: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Niedozwolony obrys myszki"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "WprowadŸ klucz do odkodowania: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "WprowadŸ ponownie ten sam klucz: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Klucze nie pasuj¹ do siebie!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Nie mo¿na po³¹czyæ z Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Nie mo¿na po³¹czyæ z Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: B³êdny tryb dostêpu pliku info po³¹czenia NetBeans: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "odczyt z gniazda Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Bufor %<PRId64> utraci³ po³¹czenie z NetBeans"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans nie s¹ obs³ugiwane przez to GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans ju¿ pod³¹czone"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s jest tylko do odczytu (dodaj ! aby wymusiæ)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Funkcjonalnoœæ eval nie jest dostêpna"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "zwalniam %<PRId64> wierszy"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: Nie mogê zmieniæ term w GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: U¿yj \":gui\" do odpalenia GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Nie mogê zmieniæ w GTK+2 GUI"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Niedozwolona czcionka/ki"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: nie mogê wybraæ zestawu czcionek"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Niedozwolony zestaw czcionek"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: nie mogê wybraæ szerokiej czcionki"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Niedozwolona szeroka czcionka"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Brak wspomagania myszki"
-
-#~ msgid "cannot open "
-#~ msgstr "nie mogê otworzyæ "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Nie mogê otworzyæ okna!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Potrzebujê Amigados w wersji 2.04 lub póŸniejsz¹\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Potrzebujê %s w wersji %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Nie mogê otworzyæ NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Nie mogê stworzyæ "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim koñczy pracê z %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "nie mogê zmieniæ trybu konsoli ?!\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: nie jest konsol¹??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Nie mogê wykonaæ pow³oki z opcj¹ -f"
-
-#~ msgid "Cannot execute "
-#~ msgstr "Nie mogê wykonaæ "
-
-#~ msgid "shell "
-#~ msgstr "pow³oka "
-
-#~ msgid " returned\n"
-#~ msgstr " zwróci³\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE zbyt niskie."
-
-#~ msgid "I/O ERROR"
-#~ msgstr "B£¥D I/O"
-
-#~ msgid "Message"
-#~ msgstr "WiadomoϾ"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' nie wynosi 80, nie mogê wykonaæ zewnêtrznych komend"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Wybór drukarki nie powiód³ siê"
-
-#~ msgid "to %s on %s"
-#~ msgstr "do %s z %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Nieznana czcionka drukarki: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: B³¹d drukarki: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "Wydrukowano '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr ""
-#~ "E244: Niedozwolona nazwa zestawu znaków \"%s\" w nazwie czcionki \"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Podwójny sygna³, wychodzê\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: Za³apa³ œmiertelny sygna³ %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: Za³apa³ œmiertelny sygna³\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "Otwieranie ekranu X trwa³o %<PRId64> msec"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Dosta³ b³¹d X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "Test ekranu X nie powiód³ siê"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Próba otwarcia ekranu X trwa³a zbyt d³ugo"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê wykonaæ pow³oki sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê stworzyæ potoków\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê rozdzieliæ siê\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Komenda zakoñczona\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP straci³ po³¹czenie ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Otwarcie ekranu X nie powiod³o siê"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP obs³uguje ¿¹danie samozapisu"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP otwiera po³¹czenie"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "Obserwacja po³¹czenia XSMP ICE nie powiod³a siê"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection nie powiod³o siê: %s"
-
-#~ msgid "At line"
-#~ msgstr "W wierszu"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Nie mogê za³adowaæ vim32.dll!"
-
-#~ msgid "VIM Error"
-#~ msgstr "B³¹d VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Nie zdo³a³em poprawiæ wskaŸników funkcji w DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "pow³oka zwróci³a %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: Za³apa³ wydarzenie %s\n"
-
-#~ msgid "close"
-#~ msgstr "zamknij"
-
-#~ msgid "logoff"
-#~ msgstr "wyloguj"
-
-#~ msgid "shutdown"
-#~ msgstr "zakoñcz"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Nie znaleziono komendy"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "VIMRUN.EXE nie znaleziono w twoim $PATH.\n"
-#~ "Zewnêtrzne komendy nie bêd¹ wstrzymane po wykonaniu.\n"
-#~ "Zobacz :help wim32-vimrun aby otrzymaæ wiêcej informacji."
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim Ostrze¿enie"
-
-#~ msgid "Error file"
-#~ msgstr "Plik b³êdu"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: B³¹d przy budowwaniu NFA z klas¹ ekwiwalencji"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr ""
-#~ "E878: (NFA) Nie mo¿na przydzieliæ pamiêci do przejœcia przez ga³êzie!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Ostrze¿enie: Nie mogê znaleŸæ listy s³ów \"%s_%s.spl\" lub \"%s_ascii.spl"
-#~ "\""
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "Konwersja w %s nie jest wspierana"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr ""
-#~ "E845: Nie wystarczaj¹ca iloœæ pamiêci, lista s³ów bêdzie niekompletna"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Trop szukania pliku znaczników obciêty dla %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "uruchomiono now¹ pow³okê\n"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "U¿ywam CUT_BUFFER0 zamiast pustego wyboru"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Cofniêcie niemo¿liwe; mimo to kontynuujê"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Nie zaszyfrowany plik ma zaszyfrowany plik undo: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Nie powiod³o siê odszyfrowywanie pliku undo: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Plik undo jest zaszyfrowany: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "16/32-bit wersja GUI dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "64 bitowa wersja GUI dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja GUI dla MS-Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " w trybie Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " ze wspomaganiem OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja na konsolê dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja na konsolê dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 bitowa wersja dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja dla MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 bitowa wersja dla MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Du¿a wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Normalna wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Ma³a wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Malutka wersja "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "z GTK2-GNOME GUI."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "z GTK2 GUI."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "z X11-Motif GUI."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "z X11-neXtaw GUI."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "z X11-Athena GUI."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "z Photon GUI."
-
-#~ msgid "with GUI."
-#~ msgstr "z GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "z Carbon GUI."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "z Cocoa GUI."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "z (klasycznym) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " gvimrc systemu: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc u¿ytkownika: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "2-gi plik gvimrc u¿ytkownika: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "3-ci plik gvimrc u¿ytkownika: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " systemowy plik menu: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "Kompilator: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "menu Pomoc->Sieroty dla informacji to tym "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Uruchomiony bez trybów, wpisany tekst jest wprowadzany"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "menu Edytuj->Ustawienia globalne->Tryb wstawiania"
-
-#~ msgid " for two modes "
-#~ msgstr " dla dwóch trybów "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "menu Edytuj->Ustawienia globalne->KompatybilnoϾ z Vi"
-
-#~ msgid " for Vim defaults "
-#~ msgstr " dla domyœlnych ustawieñ Vima "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "OSTRZE¯ENIE: wykryto Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "wprowadŸ :help windows95<Enter> dla informacji to tym "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Nie mog³em za³adowaæ biblioteki %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Przykro mi, ta komenda jest wy³¹czona: nie mog³em za³adowaæ biblioteki "
-#~ "Perla."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr "E299: wyliczenie Perla zabronione w piaskownicy bez modu³u Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Edytuj w &wielu Vimach"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Edytuj w pojedynczym &Vimie"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Diff z Vimem"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Edytuj w &Vimie"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Edytuj z istniej¹cym Vimem - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Edytuj wybrane pliki w Vimie"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "B³¹d tworzenia procesu: SprawdŸ czy gvim jest w twojej œcie¿ce!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "b³¹d gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "Za d³uga œcie¿ka!"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Nieznany zestaw czcionek: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Nieznana czcionka: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Czcionka \"%s\" nie ma sta³ej szerokoœci znaków"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Nie mo¿na za³adowaæ funkcji biblioteki %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E26: Hebrajski nie mo¿e byæ u¿yty: Nie w³¹czono podczas kompilacji\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Farsi nie mo¿e byæ u¿yty: Nie w³¹czono podczas kompilacji\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: Arabski nie mo¿e byæ u¿yty: Nie w³¹czono podczas kompilacji\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: brak zarejestrowanego serwera o nazwie \"%s\""
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: nie mogê otworzyæ ekranu"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Odebra³em niew³aœciwe wyra¿enie"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Region jest chroniony, nie mogê zmieniæ"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans nie zezwala na zmiany w plikach tylko do odczytu"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Potrzebujê klucza szyfrowania dla \"%s\""
-
-#~ msgid "empty keys are not allowed"
-#~ msgstr "puste klucze nie s¹ dozwolone"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "s³ownik jest zablokowany"
-
-#~ msgid "list is locked"
-#~ msgstr "lista jest zablokowana"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "nie powiod³o siê dodanie klucza '%s' do s³ownika"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "indeks musi byæ liczb¹ lub wycinkiem, nie %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "czeka³em na str() lub unicode(), a dosta³em %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "czeka³em na bytes() lub str(), a dosta³em %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "czeka³em na int(), long() lub coœ co mo¿na zmieniæ na long(), ale "
-#~ "dosta³em %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ "czeka³em na int() lub coœ co mo¿na zmieniæ na int(), ale dosta³em %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "wartoœæ zbyt du¿a by zmieœci³a siê w typie int C"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "wartoœæ jest zbyt ma³a by zmieœci³a siê w typie int C"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "liczba musi byæ wiêksza ni¿ zero"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "liczba musi byæ wiêksza lub mniejsza ni¿ zero"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "nie mogê skasowaæ atrybutów OutputObject"
-
-#~ msgid "invalid attribute: %s"
-#~ msgstr "niepoprawny atrybut: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: B³¹d w uruchomieniu obiektów I/O"
-
-#~ msgid "failed to change directory"
-#~ msgstr "nie powiod³a siê zmiana katalogu"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr ""
-#~ "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em krotkê o "
-#~ "wielkoœci %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "wewnêtrzny b³¹d: imp.find_module zwróci³ krotkê z NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "nie mogê usun¹æ atrybutów vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "nie mogê zmieniæ zablokowanego s³ownika"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "nie mogê ustawiæ atrybutu %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "hashtab zmieni³ siê w czasie iteracji"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "czeka³em na element sekwencyjny od d³ugoœci 2, a dosta³em sekwencjê o "
-#~ "d³ugoœci %d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "konstruktor listy nie akceptuje s³ów kluczowych jako argumentów"
-
-#~ msgid "list index out of range"
-#~ msgstr "indeks listy poza zakresem"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "b³¹d wewnêtrzny: nie powiod³o siê pobranie z listy Vima elementu %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "nie powiod³o siê dodanie elementu do listy"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "b³¹d wewnêtrzny: w liœcie Vima brak elementu %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "b³¹d wewnêtrzny: nie powiod³o siê dodanie elementu do listy"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "nie mogê usun¹æ atrybutów vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "nie mogê zmieniæ zablokowanej listy"
-
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "nie nazwana funkcja %s nie istnieje"
-
-#~ msgid "function %s does not exist"
-#~ msgstr "funkcja %s nie istnieje"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "konstruktor funkcji nie akceptuje s³ów kluczowych jako argumentów"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "nie mogê uruchomiæ funkcji %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "wyst¹pi³ problem w czasie zmiany okien"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "nie mogê wyzerowaæ opcji globalnej %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "nie mogê wyzerowaæ opcji %s, która nie ma wartoœci globalnej"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "próba odniesienia do skasowanej karty"
-
-#~ msgid "no such tab page"
-#~ msgstr "nie ma takiej karty"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "próba odniesienia do skasowanego okna"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "atrybut tylko do odczytu: bufor"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "pozycja kursora poza buforem"
-
-#~ msgid "no such window"
-#~ msgstr "nie ma takiego okna"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "próba odniesienia do skasowanego bufora"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "nie powiod³a siê zmiana nazwy bufora"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "nazwa zak³adki musi byæ pojedynczym znakiem"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.Buffer, a dosta³em %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "nie przeszed³em do bufora %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.Window, a dosta³em %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "nie znaleziono okna na bie¿¹cej karcie"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "nie przeszed³em do okreœlonego okna"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.TabPage, a dosta³em %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "nie przeszed³em do okreœlonej karty"
-
-#~ msgid "failed to run the code"
-#~ msgstr "uruchomienie kodu siê nie powiod³o"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: eval nie zwróci³o odpowiedniego obiektu pythona"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: Nie powiod³a siê konwersja obiektu pythona do wartoœci Vima"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "nie mo¿na konwertowaæ %s do s³ownika Vima"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "nie mo¿na konwertowaæ %s do struktury Vima"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "b³¹d wewnêtrzny: przekazano referencjê NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "b³¹d wewnêtrzny: b³êdny typ wartoœci"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Nie mogê ustawiæ haka œcie¿ki: sys.path_hooks nie jest list¹\n"
-#~ "Powinieneœ teraz wykonaæ nastêpuj¹ce czynnoœci:\n"
-#~ "- dodaæ vim.path_hook do sys.path_hooks\n"
-#~ "- dodaæ vim.VIM_SPECIAL_PATH do sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Nie mogê ustawiæ œcie¿ki: sys.path nie jest list¹\n"
-#~ "Powinno siê teraz dodaæ vim.VIM_SPECIAL_PATH do sys.path"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace musi byæ liczb¹ ca³kowit¹"
-
-#~ msgid "<buffer object (deleted) at %p>"
-#~ msgstr "<obiekt bufora (skasowany) w %p>"
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr ""
-#~ "E281: B£¥D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ "
-#~ "raport o tym na vim-dev@vim.org"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <number>\tPocz¹tkowa szerokoœæ okna w kolumnach"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <number>\tPocz¹tkowa wysokoœæ okna w wierszach"
-
-#~ msgid "E505: "
-#~ msgstr "E505: "
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla RISC OS"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines() wymaga listy ci¹gów"
-
-#~ msgid "<window object (deleted) at %p>"
-#~ msgstr "<obiekt okna (skasowany) w %p>"
-
-#~ msgid "<window object (unknown) at %p>"
-#~ msgstr "<obiekt okna (nieznany) w %p>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<okno %d>"
-
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <nazwa>\t\tU¿ywaj zasobów tak jak by Vim by³ <nazwa>"
-
-#~ msgid "\t\t\t (Unimplemented)\n"
-#~ msgstr "\t\t\t (Niezaimplementowane)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: argument containedin niedozwolony w tym miejscu"
-
-#~ msgid "Vim dialog..."
-#~ msgstr "Dialog Vima..."
-
-#~ msgid "Font Selection"
-#~ msgstr "Wybór czcionki"
-
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: styl nadpunktowy wymaga +fontset"
-
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: Twój GTK+ jest starszy ni¿ 1.2.3. Pole statusu wy³¹czono"
-
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: Serwer metod wprowadzeñ nie jest uruchomiony"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "z GTK-GNOME GUI."
-
-#~ msgid "with GTK GUI."
-#~ msgstr "z GTK GUI."
-
-#~ msgid "[NL found]"
-#~ msgstr "[znaleziono NL]"
-
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: wyczerpano maksymaln¹ liczbê po³¹czeñ cscope"
diff --git a/src/nvim/po/pl.po b/src/nvim/po/pl.po
deleted file mode 100644
index 2a2d12daac..0000000000
--- a/src/nvim/po/pl.po
+++ /dev/null
@@ -1,8264 +0,0 @@
-# translation of pl.po to Polish
-# Polish Translation for Vim
-#
-# updated 2013 for vim-7.4
-#
-# FIRST AUTHOR Marcin Dalecki <martin@dalecki.de>, 2000.
-# Mikolaj Machowski <mikmach@wp.pl>, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2013.
-msgid ""
-msgstr ""
-"Project-Id-Version: pl\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2010-08-10 18:15+0200\n"
-"Last-Translator: Mikolaj Machowski <mikmach@wp.pl>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=ISO-8859-2\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Lokalize 1.0\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "nie mogê pobraæ warto¶ci opcji"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "b³±d wewnêtrzny: nieznany typ opcji"
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Lista lokacji]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Lista quickfix]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr "E855: Autokomendy spowodowa³y porzucenie komendy"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Nie mogê zarezerwowaæ bufora; zakoñczenie..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: Nie mogê zarezerwowaæ bufora; u¿ywam innego..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: Nie wy³adowano ¿adnego bufora"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: Nie skasowano ¿adnego bufora"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: Nie wyrzucono ¿adnego bufora"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "1 bufor wy³adowany"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "wy³adowano %d buforów"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "1 bufor skasowany"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "%d buforów skasowano"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "wyrzucono 1 bufor "
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "wyrzucono %d buforów"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: Nie mogê wy³adowaæ ostatniego bufora"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: Nie znaleziono zmienionych buforów"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: Nie ma wylistowanych buforów"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: Bufor \"%<PRId64>\" nie istnieje"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: Nie mogê przej¶æ poza ostatni bufor"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: Nie mogê przej¶æ przed pierwszy bufor"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: Nie zapisano zmian w buforze %<PRId64> (wymu¶ przez !)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: OSTRZE¯ENIE: Przepe³nienie listy nazw plików"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: Nie znaleziono bufora %<PRId64>"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: Wielokrotne dopasowania dla %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: ¯aden bufor nie pasuje do %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "wiersz %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: Bufor o tej nazwie ju¿ istnieje"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [Zmieniony]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[Nie edytowany]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[Nowy Plik]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[B³±d odczytu]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[RO]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[tylko odczyt]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 wiersz --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> wiersze --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "wiersz %<PRId64> z %<PRId64> --%d%%-- kol "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[Bez nazwy]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "pomoc"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[Pomoc]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Podgl±d]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "Wszystko"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "Dó³"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "Góra"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# Lista buforów:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[Notka]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Znaki ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "Znaki dla %s:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " wiersz=%<PRId64> id=%d nazwa=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: Brak dwukropka"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: Niedozwolony tryb"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: oczekiwa³em na cyfrê"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: Niedozwolony procent"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: Nie mogê zró¿nicowaæ wiêcej ni¿ %<PRId64> buforów"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: Nie mogê otworzyæ lub zapisaæ plików tymczasowych"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: Nie mogê stworzyæ ró¿nic"
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: Nie mogê odczytaæ wyj¶cia pliku ³aty"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: Nie mogê wczytaæ wyj¶cia ró¿nicy"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Bie¿±cy bufor nie jest w trybie ró¿nic"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: ¯aden inny bufor w trybie diff nie jest modyfikowalny"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: Brak innego bufora w trybie ró¿nic"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr ""
-"E101: Wiêcej ni¿ jeden bufor w trybie ró¿nicowania, nie wiem którego u¿yæ"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Nie mogê znale¼æ bufora \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Bufor \"%s\" nie jest w trybie ró¿nicowania"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: Nieoczekiwana zmiana bufora"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Escape jest niedozwolone w dwugrafie"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: Nie znaleziono pliku rozk³adu klawiszy"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: Zastosowano :loadkeymap w niewczytanym pliku"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: Pusty wpis keymap"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " Dope³nianie s³ów kluczowych (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X tryb (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " Dope³nianie pe³nych wierszy (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " Dope³nianie nazw plików (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Dope³nianie znaczników (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " Dope³nianie wzorców tropów (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " Dope³nianie definicji (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Dope³nianie ze s³owników (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Dope³nianie z tezaurusa (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " Dope³nianie wiersza poleceñ (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr "Dope³nianie zdefiniowane przez u¿ytkownika (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " Omni uzupe³nianie (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr "Propozycja pisowni (^L^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " Lokalne dope³nianie s³ów kluczowych (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Dobi³em do koñca akapitu"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: Funkcja uzupe³niania zmieni³a okno"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: Funkcja uzupe³nania usunê³a tekst"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "opcja 'dictionary' jest pusta"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "opcja 'thesaurus' jest pusta"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "Przegl±dam s³ownik: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (wprowadzanie) Przewijanie (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (zamiana) Przewijanie (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "Przegl±dam: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "Przegl±dam znaczniki."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Dodajê"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- Szukam..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "Z powrotem na pierwotnym"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "Wyraz z innego wiersza"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "Jedyne dopasowanie"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "pasuje %d z %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "pasuje %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: Nieoczekiwane znaki w :let"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: Indeks listy poza zakresem: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Nieokre¶lona zmienna: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: Brak ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: Argument %s musi byæ List±"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Argument %s musi byæ List± lub S³ownikiem"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Nie mo¿na u¿yæ pustego klucza dla S³ownika"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: wymagana Lista"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: wymagany S³ownik"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Zbyt wiele argumentów dla funkcji: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Klucz nie istnieje w S³owniku: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Funkcja %s ju¿ istnieje; aby j± zamieniæ u¿yj !"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: istnieje ju¿ taki element S³ownika"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: wymagana Funcref"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Nie mo¿na u¿yæ [:] przy S³owniku"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: Z³y typ zmiennej dla %s="
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: Nieznana funkcja: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Niedozwolona nazwa zmiennej: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: U¿ycie Zmiennoprzecinkowej jako £añcucha"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Mniej celów ni¿ elementów Listy"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Wiêcej celów ni¿ elementów Listy"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "Podwójny ; w li¶cie zmiennych"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: Nie mogê wypisaæ zmiennych dla %s"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Indeks mo¿e istnieæ tylko dla Listy lub S³ownika"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] musi byæ ostatnie"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] wymaga warto¶ci listy"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: Lista ma wiêcej elementów ni¿ cel"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: Lista nie ma wystarczaj±cej ilo¶ci elementów"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Brak \"in\" po :for"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: Brak nawiasów: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Nie istnieje zmienna: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: zmienna zagnie¿d¿ona zbyt g³êboko dla (un)lock"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: Brak ':' po '?'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Listê mogê porównaæ tylko z List±"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: Nieprawid³owa operacja dla Listy"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: S³ownik mogê porównaæ tylko ze S³ownikiem"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Nieprawid³owa operacja dla S³ownika"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Funcref mogê porównaæ tylko z Funcref"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Nieprawid³owa operacja dla Funcref"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Nie mogê u¿yæ '%' w Zmiennoprzecinkowej"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: Brak ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: Nie mo¿na zindeksowaæ Funcref"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: Brak nazwy opcji: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: Nieznana opcja: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: Brak cudzys³owu: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: Brak cudzys³owu: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: Brakuj±cy przecinek w Li¶cie: '%s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Brak zakoñczenia Listy ']': %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Brak dwukropka w S³owniku: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Powtórzony klucz w S³owniku: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Brakuj±cy przecinek w S³owniku: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Brak koñca w S³owniku '}': %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: Zmienna zagnie¿d¿ona zbyt g³êboko by pokazaæ"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: Zbyt wiele argumentów dla funkcji %s"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: Zbyt wiele argumentów dla funkcji %s"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: Nieznana funkcja: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Za ma³o argumentów dla funkcji: %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: U¿ycie <SID> poza kontekstem skryptu: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Wywo³anie funkcji \"dict\" bez S³ownika: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: Wymagana Liczba lub Zmiennoprzecinkowa"
-
-#: ../eval.c:7503
-msgid "add() argument"
-msgstr "argument add()"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: Za du¿o argumentów"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() mo¿e byæ u¿yte tylko w trybie Wprowadzania"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "&Ok"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: Klucz ju¿ istnieje: %s"
-
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "argument extend()"
-
-#: ../eval.c:8915
-msgid "map() argument"
-msgstr "argument map()"
-
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr "argument filter()"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld wierszy: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: Nieznana funkcja: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "wywo³ano inputrestore() wiêcej razy ni¿ inputsave()"
-
-#: ../eval.c:10771
-msgid "insert() argument"
-msgstr "argument insert()"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: Zakres niedozwolony"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: Nieprawid³owy typ dla len()"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: Skok to zero"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: Pocz±tek po koñcu"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<pusty>"
-
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr "argument remove()"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Za du¿o dowi±zañ symbolicznych (pêtla?)"
-
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr "argument reverse()"
-
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr "argument sort()"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "argument add()"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Funkcja porównywania w sort nie powiod³a siê"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(Niew³a¶ciwe)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: B³±d zapisywania pliku tymczasowego"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: U¿ycie Zmiennoprzecinkowej jako Liczby"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: U¿ycie Funcref jako Liczby"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: U¿ycie Listy jako Liczby"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: U¿ycie S³ownika jako Liczby"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: U¿ycie Funcref jako £añcucha"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: U¿ycie Listy jako £añcucha"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: U¿ycie S³ownika jako £añcucha"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Nieprawid³owy typ zmiennej dla: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Nie mogê usun±æ zmiennej %s"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Nazwa Funcref musi siê zaczynaæ wielk± liter±: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Nazwa zmiennej jest w konflikcie z istniej±c± funkcj±: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: Warto¶æ jest zablokowana: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "Nieznane"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: Nie mogê zmieniæ warto¶ci %s"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: Zmienna zagnie¿d¿ona zbyt g³êboko by zrobiæ kopiê"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: Nieznana funkcja: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: Brak '(': %s"
-
-#: ../eval.c:17293
-msgid "E862: Cannot use g: here"
-msgstr "E862: Nie mo¿na tutaj u¿yæ g:"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: Niedozwolony argument: %s"
-
-#: ../eval.c:17323
-#, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E853: Powtórzona nazwa argumentu: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: Brak :endfunction"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: Nazwa funkcji jest w konflikcie ze zmienn±: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: Nie mogê redefiniowaæ funkcji %s: jest w u¿yciu"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Nazwa funkcji nie pasuje do nazwy skryptu: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: Wymagana jest nazwa funkcji"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr ""
-"E128: Nazwa funkcji musi rozpoczynaæ siê wielk± liter± lub zawieraæ "
-"dwukropek: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr ""
-"E128: Nazwa funkcji musi rozpoczynaæ siê wielk± liter± lub zawieraæ "
-"dwukropek: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: Nie mogê skasowaæ funkcji %s: jest w u¿yciu"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: Zagnie¿d¿enie wywo³añ funkcji ponad 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "wywo³ujê %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "porzucono %s"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s zwraca #%<PRId64>"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s zwraca %s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "kontynuacja w %s"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return poza funkcj±"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# zmienne globalne:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tOstatnie ustawienie przez "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "Brak starych plików"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, Hex %02x, Oktal %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, Hex %04x, Oktal %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, Hex %08x, Oktal %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: Przeniesienie wierszy na siebie samych"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "1 wiersz przeniesiony"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "%<PRId64> wiersze przeniesione"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "%<PRId64> wierszy przefiltrowanych"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: Autokomendy *Filter* nie mog± zmieniaæ bie¿±cego bufora"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[Brak zapisu od czasu ostatniej zmiany]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s w wierszu: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: Zbyt wiele b³êdów; pomijam resztê pliku"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Wczytujê plik viminfo \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " informacja"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " zak³adki"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " stare pliki"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " NIE POWIOD£O SIÊ"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Plik viminfo jest niezapisywalny: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Nie mogê zapisaæ pliku viminfo %s!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "Zapisujê plik viminfo \"%s\""
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Ten plik viminfo zosta³ wygenerowany przez Vima %s.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Mo¿esz go ostro¿nie edytowaæ!\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Warto¶æ 'encoding' w czasie zapisu tego pliku\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "Niedopuszczalny pocz±tkowy znak"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "Zapisaæ czê¶ciowo plik?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: Stosuj ! do zapisania czê¶ciowo bufora"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "Nadpisaæ istniej±cy plik \"%s\"?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Plik wymiany \"%s\" istnieje, czy go nadpisaæ?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Plik wymiany istnieje: %s (wymu¶ poprzez :silent!)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: Brak nazwy pliku dla bufora %<PRId64>"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: Plik niezapisany: Zapis jest wy³±czony opcj± 'write'"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"opcja 'readonly' nastawiona dla \"%s\".\n"
-"Czy chcesz go pomimo tego zapisaæ?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"Prawa pliku \"%s\" s± tylko do odczytu.\n"
-"Mimo to byæ mo¿e uda siê zmieniæ ten plik.\n"
-"Chcesz spróbowaæ?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: \"%s\" jest tylko do odczytu (dodaj ! aby wymusiæ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Autokomendy nieoczekiwanie skasowa³y nowy bufor %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: nienumeryczny argument dla :z"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Komendy pow³oki s± niedozwolone w rvim"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Wzorce regularne nie mog± byæ rozgraniczane literami"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "zamieñ na %s (y/n/a/q/l/^E/^Y)?"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(Przerwane) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1 pasuje"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1 podstawienie "
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> dopasowañ"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> podstawieñ"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " w 1 wierszu"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " w %<PRId64> wierszach"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: Nie mogê wykonaæ :global rekursywnie"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: Brak wzorca regularnego w :global"
-
-# c-format
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "Wzorzec znaleziono w ka¿dym wierszu: %s"
-
-#: ../ex_cmds.c:4510
-#, c-format
-msgid "Pattern not found: %s"
-msgstr "Nie znaleziono wzorca: %s"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# Ostatni podstawiany ci±g:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: Nie panikuj!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Przykro mi, brak '%s' pomocy dla %s"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Przykro mi, ale brak pomocy o %s"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Przykro mi, nie ma pliku pomocy \"%s\""
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: Nie jest katalogiem: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: Nie mogê otworzyæ %s do zapisu"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Nie mogê otworzyæ %s do odczytu"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: Mieszanka kodowañ w pliku pomocy w ramach jêzyka: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Powtórzony znacznik \"%s\" w pliku %s/%s"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: Nieznana komenda znaku: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: Brak nazwy znaku"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Zbyt wiele nazw znaków"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: Niew³a¶ciwy tekst znaku: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: Nieznany znak: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: Brak numeru znaku"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: Niew³a¶ciwa nazwa bufora: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: Niew³a¶ciwe ID znaku: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr "(nie wspomagane)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[Skasowano]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "Wchodzê w tryb odpluskwiania. Wprowad¼ \"cont\" aby kontynuowaæ."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "wiersz %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "cmd: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "Punkt kontrolny w \"%s%s\" wiersz %<PRId64>"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: Nie znaleziono punktu kontrolnego: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "Nie okre¶lono ¿adnych punktów kontrolnych"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s wiersz %<PRId64>"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Pierwsze u¿ycie \":profile start {fname}\""
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "Zachowaæ zmiany w \"%s\"?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "Bez Tytu³u"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Nie zapisano zmian w buforze \"%s\""
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "OSTRZE¯ENIE: Nieoczekiwane wej¶cie w inny bufor (sprawd¼ autokomendy)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Tylko jeden plik w edycji"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: Nie mo¿na przej¶æ przed pierwszy plik"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: Nie mo¿na przej¶æ za ostatni plik"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: nie wspierany kompilator: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "Szukanie \"%s\" w \"%s\""
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "Szukanie \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "nie znaleziono w 'runtimepath': \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "Nie mo¿na wczytaæ katalogu: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "nie mog³em wczytaæ \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "wiersz: %<PRId64> nie mog³em wczytaæ \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "wczytywanie \"%s\""
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "wiersz %<PRId64>: wczytywanie \"%s\""
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "skoñczono wczytywanie %s"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "modeline"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd argument"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c argument"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "zmienna ¶rodowiskowa"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "obs³uga b³êdu"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: OSTRZE¯ENIE: Niew³a¶ciwy separator wierszy, pewnie brak ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: u¿yto :scriptencoding poza wczytywanym plikiem"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: u¿yto :finish poza wczytywanym plikiem"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Bie¿±cy %sjêzyk: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Nie mogê ustawiæ jêzyka na \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Wchodzê w tryb Ex. Wprowad¼ \"visual\" aby przej¶æ do trybu Normal."
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: Na koñcu pliku"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: Komenda zbyt rekursywna"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Nie znaleziono wyj±tku: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "Koniec wczytywanego pliku"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "Koniec funkcji"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr ""
-"E464: Niejednoznaczne zastosowanie komendy zdefiniowanej przez u¿ytkownika"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: Nie jest komend± edytora"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: Dano wsteczny zakres"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "Dano wsteczny zakres; zamiana jest mo¿liwa"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: Stosuj w lub w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: Przykro mi, ale ta komenda nie jest dostêpna w tej wersji"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Tylko pojedyncza nazwa pliku dozwolona"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "1 wiêcej plik do edycji. Mimo to wyj¶æ?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "jeszcze %d plików do edycji. Mimo to wyj¶æ?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: 1 wiêcej plik do edycji"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: jeszcze %<PRId64> plików do edycji"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: Komenda ju¿ istnieje; aby j± przedefiniowaæ stosuj !"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Nazwa Arg. Zak. Gotowo¶æ Definicja"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "Nie znaleziono komend zdefiniowanych przez u¿ytkownika"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: Nie okre¶lono atrybutu"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: Niew³a¶ciwa ilo¶æ argumentów"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: Mno¿nik nie mo¿e byæ podany dwukrotnie"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: Niew³a¶ciwa domy¶lna warto¶æ mno¿nika"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -complete wymaga argumentu"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Niew³a¶ciwy atrybut: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: Niew³a¶ciwa nazwa komendy"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr ""
-"E183: Komendy zdefiniowane przez u¿ytkownika musz± rozpoczynaæ siê du¿± "
-"liter±"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E841: Nazwa zastrze¿ona, nie mo¿na jej u¿yæ w komendzie u¿ytkownika"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Nie ma takiej komendy u¿ytkownika: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Niew³a¶ciwa warto¶æ dope³niania: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: Argument depe³niania dozwolony wy³±cznie dla dope³niania u¿ytkownika"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Dope³nianie u¿ytkownika wymaga funkcji jako argumentu"
-
-#: ../ex_docmd.c:5257
-#, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: Nie mogê znale¼æ zestawu kolorów '%s'"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "Witaj u¿ytkowniku Vima!"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: Nie mogê zamkn±æ ostatniej karty"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "Jest ju¿ tylko jedna karta"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Karta %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "Brak pliku wymiany"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr ""
-"E747: Nie mogê zmieniæ katalogu, bufor zosta³ zmodyfikowany (dodaj ! aby "
-"wymusiæ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: Nie ma poprzedniego katalogu"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: Nieznany"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize wymaga dwóch argumentów numerycznych"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr ""
-"E188: Pozyskiwanie pozycji okna nie jest zaimplementowane dla tego systemu"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos wymaga dwóch argumentów numerycznych"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: Nie mogê utworzyæ katalogu: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" istnieje (wymu¶ poprzez !)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Nie mogê otworzyæ \"%s\" do zapisu"
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: Argument musi byæ liter± albo cudzys³owem w przód/ty³"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: Rekursywne zastosowanie :normal za g³êbokie"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: Brak nazwy zamiennego pliku do podstawienia pod '#'"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: brak nazwy pliku autokomend do podstawienia pod \"<afile>\""
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: brak numeru bufora autokomend do podstawienia pod \"<abuf>\""
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: brak nazwy dopasowania autokomend pod \"<amatch>\""
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: brak nazwy pliku :source do postawienia pod \"<sfile>\""
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: brak numeru linii by u¿yæ z \"<slnum>\""
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Pusta nazwa pliku dla '%' lub '#', dzia³a tylko z \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: Wynikiem jest pusty ci±g"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: Nie mogê otworzyæ pliku viminfo do odczytu"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: Nie mo¿na ':throw' wyj±tków z prefiksem 'Vim'"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Wyj±tek: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Wyj±tek zakoñczony: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "Wyj±tek odrzucony: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, wiersz %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "Wyj±tek przechwycony: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%s zosta³ zawieszony"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%s przywrócony"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%s odrzucony"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Wyj±tek"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "B³±d i przerwanie"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "B³±d"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "Przerwanie"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: zbyt g³êbokie zagnie¿d¿enie :if"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif bez :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else bez :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif bez :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: wielokrotne :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif po :else"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: zbyt g³êbokie zagnie¿d¿enie :while/:for"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue bez :while lub :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break bez :while lub :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: U¿ycie :endfor z :while"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: U¿ycie :endwhile z :for"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: zbyt g³êbokie zagnie¿d¿enie :try"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch bez :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch za :finally"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally bez :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: wielokrotne :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry bez :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction poza funkcj±"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Nie mo¿na teraz edytowaæ innego bufora"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Nie mo¿na teraz zmieniaæ informacji o buforze"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "nazwa znacznika"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " pokrewny plik\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "opcja 'history' jest zerowa"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s Historia (od najnowszych po najstarsze):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "Wiersz poleceñ"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "Szukany ci±g"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "Wyra¿enie"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "Wiersz wprowadzeñ"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar przekracza d³ugo¶æ polecenia"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Aktywny widok lub bufor skasowany"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr "E854: ¶cie¿ka za d³uga by uzupe³niæ"
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: Niew³a¶ciwy trop: '**[numer]' musi byæ na koñcu tropu lub po nim musi "
-"byæ '%s'."
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Nie mogê znale¼æ katalogu \"%s\" w cdpath"
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Nie mogê znale¼æ pliku \"%s\" w tropie"
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Katalogu \"%s\" nie ma wiêcej w cdpath"
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Pliku \"%s\" nie ma wiêcej w tropie"
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Autokomendy zmieni³y bufor lub jego nazwê"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "Niedopuszczalna nazwa pliku"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "jest katalogiem"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "nie jest plikiem"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[Nowy Plik]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[Nowy KATALOG]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Za du¿y plik]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[Nie dozwolono]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: Autokomendy *ReadPre zrobi³y plik nieodczytywalnym"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Autokomendy *ReadPre nie mog± zmieniaæ bie¿±cego bufora"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: Wczytywanie ze stdin...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: Nie mo¿na otworzyæ pliku utworzonego przez przemianê!"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/socket]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[socket]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr "[specjalny znak]"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[brak CR]'"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[d³ugie wiersze rozdzielane]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[NIE przemienione]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[przemienione]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[B£¡D W PRZEMIANIE w linii %<PRId64>]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[NIEDOZWOLONY BAJT w wierszu %<PRId64>]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[B£ÊDY W ODCZYCIE]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "Nie mogê znale¼æ pliku tymczasowego w celu przemiany"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "Nieudana przemiana z 'charconvert'"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "nie mogê odczytaæ wyj¶cia z 'charconvert'"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: Brak pasuj±cych autokomend dla bufora acwrite"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr ""
-"E203: Autokomendy skasowa³y lub wy³adowa³y bufor przeznaczony do zapisu"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Autokomenda zmieni³a liczbê wierszy w nieoczekiwany sposób"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "nie jest plikiem lub zapisywalnym przyrz±dem"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "jest tylko do odczytu (wymu¶ poprzez !)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Nie mogê zapisaæ do pliku zabezpieczenia (wymu¶ przez !)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: B³±d podczas zamykania pliku zabezpieczenia (wymu¶ przez !)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: Nie mogê odczytaæ pliku w celu zabezpieczenia (wymu¶ przez !)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Nie mogê stworzyæ pliku zabezpieczenia (wymu¶ przez !)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Nie mogê zrobiæ pliku zabezpieczenia (wymu¶ przez !)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: Nie mogê znale¼æ pliku tymczasowego do zapisania"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Nie mogê przemieniæ (u¿yj ! by zapisaæ bez przemiany)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: Nie mogê otworzyæ pod³±czonego pliku do zapisu"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: Nie mogê otworzyæ pliku do zapisu"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Fsync nie powiód³ siê"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: Zamkniêcie siê nie powiod³o"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr ""
-"E513: B³±d zapisu, przemiana siê nie powiod³a (opró¿nij 'fenc' aby wymusiæ)"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: B³±d zapisu, przemiana siê nie powiod³a w wierszu %<PRId64> (opró¿nij "
-"'fenc' by wymusiæ)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: b³±d w zapisie (mo¿e system plików jest przepe³niony?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " B£¡D W PRZEMIANIE"
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr " w wierszu %<PRId64>;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[Urz±dzenie]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[Nowy]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " do³±czono"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " zapisano"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Patchmode: nie mogê zapisaæ oryginalnego pliku"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: patchmode: nie mogê stworzyæ pustego oryginalnego pliku"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: Nie mogê skasowaæ pliku zabezpieczenia"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"OSTRZE¯ENIE: Oryginalny plik mo¿e zostaæ utracony lub uszkodzony\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "nie wychod¼ edytora, dopóki plik nie zosta³ poprawnie zapisany!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[format dos-a]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[format maca]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[format unixa]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 wiersz, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> wierszy, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 znak"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> znaków"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[Niekompletny ostatni wiersz]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "OSTRZE¯ENIE: Plik zmieni³ siê od czasu ostatniego odczytu!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "Czy naprawdê chcesz go zapisaæ"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: B³±d zapisywania do \"%s\""
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: B³±d w trakcie zamykania \"%s\""
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: B³±d odczytu \"%s\""
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: Autokomenda FileChangedShell skasowa³a bufor"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Plik \"%s\" nie jest d³u¿ej dostêpny"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr ""
-"W12: OSTRZE¯ENIE: Plik \"%s\" zmieni³ siê od czasu rozpoczêcia edycji, bufor "
-"w Vimie równie¿ zosta³ zmieniony"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "Zobacz \":help W12\" dla dalszych informacji."
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: OSTRZE¯ENIE: Plik \"%s\" zmieni³ siê od czasu rozpoczêcia edycji"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "Zobacz \":help W11\" dla dalszych informacji."
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr ""
-"W16: OSTRZE¯ENIE: Tryb pliku \"%s\" zmieni³ siê od czasu rozpoczêcia edycji"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "Zobacz \":help W16\" dla dalszych informacji."
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: OSTRZE¯ENIE: Plik \"%s\" zosta³ stworzony po rozpoczêciu edycji"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "OSTRZE¯ENIE"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"&OK\n"
-"&Za³aduj Plik"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Nie mo¿na przygotowaæ prze³adowania \"%s\""
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: Nie mo¿na prze³adowaæ \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--Skasowano--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "auto-usuwanie autokomendy: %s <buffer=%d>"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: Nie ma takiej grupy: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: Niedopuszczalny znak po *: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: Nie ma takiego wydarzenia: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: Nie ma takiej grupy lub wydarzenia: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Autokomendy ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: niew³a¶ciwy numer bufora"
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Nie mo¿na wykonywaæ autokomend dla wydarzeñ ALL"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "Brak pasuj±cych autokomend"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: zbyt g³êbokie zagnie¿d¿enie autokomend"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s Autokomend dla \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Wykonujê %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "autokomenda %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: Brak {."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: Brak }."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: Nie znaleziono zwiniêcia"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Nie mo¿na utworzyæ zwiniêcia przy bie¿±cej 'foldmethod'"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Nie mo¿na skasowaæ zwiniêcia przy bie¿±cej 'foldmethod'"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld wierszy zwiniêto "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Dodaj do bufora odczytu"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: rekursywne przyporz±dkowanie"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: istnieje ju¿ globalny skrót dla %s"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: istnieje ju¿ globalne przyporz±dkowanie dla %s"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: istnieje ju¿ skrót dla %s"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: istnieje ju¿ przyporz±dkowanie dla %s"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "Nie znaleziono skrótu"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "Nie znaleziono przyporz±dkowania"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: Niedopuszczalny tryb"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--Brak wierszy w buforze--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: Przerwanie komendy"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: wymagany argument"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: po \\ powinno byæ /, ? lub &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr ""
-"E11: Niedozwolone w oknie wiersza poleceñ; <CR> wykonuje, CTRL-C opuszcza"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: Komenda niedozwolona z exrc/vimrc w bie¿±cym szukaniu katalogu lub "
-"znacznika"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: Brak :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: Brak :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: Brak :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: Brak :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile bez :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor bez :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: Plik istnieje (wymu¶ poprzez !)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: Komenda nie powiod³a siê"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: B³±d wewnêtrzny"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "Przerwane"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: Niew³a¶ciwy adres"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: Niew³a¶ciwy argument"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: Niew³a¶ciwy argument: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: Niew³a¶ciwe wyra¿enie: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: Niew³a¶ciwy zakres"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: Niew³a¶ciwa komenda"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" jest katalogiem"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Niew³a¶ciwa wielko¶æ przewiniêcia"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Wywo³anie z biblioteki nie powiod³o siê dla \"%s()\""
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: Zak³adka ma niew³a¶ciwy numer wiersza"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: Zak³adka nienastawiona"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: Nie mogê wykonaæ zmian, 'modifiable' jest wy³±czone"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: Zbyt g³êbokie zagnie¿d¿enie skryptów"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: Brak pliku zamiany"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: Nie ma takiego skrótu"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: Niedozwolone !"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: GUI nie mo¿e byæ u¿yte: Nie w³±czono podczas kompilacji"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: Brak takiej nazwy grupy pod¶wietlania: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: Nie wprowadzono jeszcze ¿adnego tekstu"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: Nie ma poprzedniego wiersza poleceñ"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: Nie ma takiego przyporz±dkowania"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: Brak dopasowañ"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: Brak dopasowañ: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: Brak nazwy pliku"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: Brak poprzedniego podstawieniowego wyra¿enia regularnego"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: Brak poprzedniej komendy"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: Brak poprzedniego wyra¿enia regularnego"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: Zakres niedozwolony"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: Brak miejsca"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: Nie mogê stworzyæ pliku %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: Nie mogê pobraæ nazwy pliku tymczasowego"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: Nie mogê otworzyæ pliku %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: Nie mogê odczytaæ pliku %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Nie zapisano od ostatniej zmiany (wymu¶ przez !)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Brak zapisu od czasu ostatniej zmiany]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: Zerowy argument"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: Oczekujê liczby"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: Nie mogê otworzyæ pliku b³êdów %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: Pamiêæ wyczerpana!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "Nie znaleziono wzorca"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: Nie znaleziono wzorca: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: Argument musi byæ dodatni"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Nie mo¿na przej¶æ do poprzedniego katalogu"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: Brak B³êdów"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: Brak listy lokacji"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: Popsuty ci±g wzorca"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: Zepsuty program wyra¿eñ regularnych"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: opcja 'readonly' jest ustawiona (wymu¶ poprzez !)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Nie mogê zmieniæ zmiennej tylko do odczytu \"%s\""
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Nie mogê ustawiæ zmiennej w piaskownicy: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: B³±d w trakcie czytania pliku b³êdów"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: Niedozwolone w piaskownicy"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: Niedozwolone w tym miejscu"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: Ustawianie trybu ekranu niewspomagane"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: Niew³a¶ciwa wielko¶æ przewiniêcia"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: opcja 'shell' jest pusta"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: Nie mog³em wczytaæ danych znaku!"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: B³±d podczas zamykania pliku wymiany"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: stos znaczników jest pusty"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: Komenda jest zbyt skomplikowana"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Zbyt d³uga nazwa"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: Zbyt wiele ["
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: Zbyt wiele nazw plików"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: Nadstêpne znaczki"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: Nieznana zak³adka"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: Nie mog± rozwin±æ znaków wieloznacznych"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' nie mo¿e byæ mniejsze ni¿ 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' nie mo¿e byæ mniejsze ni¿ 'winminwidth'"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: B³±d w trakcie zapisu"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "Zerowy licznik"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: U¿ycie <SID> poza kontekstem skryptu"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: B³±d wewnêtrzny: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Wzorzec u¿ywa wiêcej pamiêci ni¿ 'maxmempattern'"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: pusty bufor"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: Niew³a¶ciwy wzorzec wyszukiwania lub delimiter"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Plik jest za³adowany w innym buforze"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: Nie ustawiono opcji '%s'"
-
-#: ../globals.h:1111
-msgid "E850: Invalid register name"
-msgstr "E850: Niew³a¶ciwa nazwa rejestru"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "szukanie dobi³o GÓRY; kontynuacja od KOÑCA"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "szukanie dobi³o KOÑCA; kontynuacja od GÓRY"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: Brak dwukropka"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: Niedozwolona czê¶æ"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: oczekiwa³em na cyfrê"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "Strona %d"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "Brak tekstu do drukowania"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Drukujê stronê %d (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Kopia %d z %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "Wydrukowano: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "Drukowanie odwo³ane"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Nie mo¿na zapisaæ do wyj¶ciowego pliku PostScriptu"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Nie mogê otworzyæ pliku \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Nie mo¿na odczytaæ pliku zasobów PostScriptu \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: plik \"%s\" nie jest plikiem zasobów PostScriptu"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: plik \"%s\" nie jest wspieranym plikiem zasobów PostScriptu"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" nieprawid³owa wersja pliku zasobów"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Niekompatybilne kodowanie wielobajtowe i zestaw znaków."
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset nie mo¿e byæ pusty przy kodowaniu wielobajtowym."
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Nie okre¶lono domy¶lnej czcionki dla drukowania wielobajtowego."
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Nie mo¿na otworzyæ pliku PostScript do wyj¶cia"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Nie mogê otworzyæ pliku \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Nie mo¿na znale¼æ pliku zasobów PostScriptu \"prolog.ps\""
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Nie mo¿na znale¼æ pliku zasobów PostScriptu \"cidfont.ps\""
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Nie mo¿na znale¼æ pliku zasobów PostScriptu \"%s.ps\""
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Nie mo¿na przekonwertowaæ by drukowaæ kodowanie \"%s\""
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "Przesy³am do drukarki..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Drukowanie pliku PostScript nie powiod³o siê"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "Zadanie drukowanie przes³ane."
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Dodaj now± bazê danych"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "Zapytane o wzorzec"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "Poka¿ ten komunikat"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "Zabij po³±czenie"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "Ponów wszelkie po³±czenia"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Poka¿ po³±czenia"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Zastosowanie: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Ta komenda cscope nie wspomaga podzielenia okna.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Zastosowanie: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: nie znaleziono znacznika"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) b³±d: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s nie jest katalogiem lub poprawn± baz± danych cscope"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Dodano bazê danych cscope %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: b³±d odczytu po³±czenia z cscope %<PRId64>"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: nieznany typ szukania cscope"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Nie mog³em stworzyæ potoku do cscope"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Nie mog³em utworzyæ rozwidlenia dla cscope"
-
-#: ../if_cscope.c:849
-msgid "cs_create_connection setpgid failed"
-msgstr "nie powiod³o siê setpgid cs_create_connection"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "wykonanie cs_create_connection nie powiod³o siê"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen dla to_fp nie powiod³o siê"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen dla fr_fp nie powiod³o siê"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Nie mog³em stworzyæ procesu cscope"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: brak po³±czenia z cscope"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: nieprawid³owa flaga cscopequickfix %c dla %c"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: brak dopasowañ dla zapytania cscope %s o %s"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "komendy cscope:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (U¿ycie: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: znajd¼ funkcje wywo³uj±ce tê funkcjê\n"
-" d: znajd¼ funkcje wywo³ywane przez tê funkcjê\n"
-" e: znajd¼ ten wzorzec egrep\n"
-" f: znajd¼ ten plik\n"
-" g: znajd¼ tê definicjê\n"
-" i: znajd¼ pliki w³±czaj±ce (#include) ten plik\n"
-" s: znajd¼ ten symbol C\n"
-" t: znajd¼ ten ³añcuch znaków\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: nie dodano duplikatu bazy danych cscope"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: nie ma po³±czenia %s z cscope"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "po³±czenie %s z cscope zosta³o zamkniête"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: b³±d krytyczny w cs_manage_matches"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Znacznik cscope: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # wiersz"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "nazwa pliku / kontekst / wiersz\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: B³±d cscope: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "Wszystkie bazy danych cscope prze³adowano"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "brak po³±czeñ z cscope\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid nazwa bazy danych przedsionek tropu\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "Nieznany argument opcji"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "Zbyt wiele argumentów"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "Brak argumentu po"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "¦miecie po argumencie opcji"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr ""
-"Zbyt wiele argumentów \"+komenda\", \"-c komenda\" lub \"--cmd komenda\""
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "Niew³a¶ciwy argument dla"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d plików do edycji\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "Próba ponownego otworzenia pliku skryptu: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "Nie mogê otworzyæ do odczytu: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "Nie mogê otworzyæ dla wyj¶cia skryptu: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: OSTRZE¯ENIE: Wyj¶cie nie jest terminalem\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: OSTRZE¯ENIE: Wej¶cie nie pochodzi z terminala\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "linia poleceñ pre-vimrc"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Nie mogê czytaæ z \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"Dalsze informacje poprzez: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[plik ..] edytuj zadane pliki"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- czytaj tekst ze stdin"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t znacznik edytuj plik, w którym dany znacznik jest zdefiniowany"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] edytuj plik, zawieraj±cy pierwszy b³±d"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"u¿ycie:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [argumenty]"
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" lub:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"Argumenty:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tTylko nazwy plików po tym"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tNie rozwijaj znaków specjalnych"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tTryb vi (jak \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tTryb ex (jak \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\tUsprawniony tryb Ex"
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tCichy tryb (t³a) (tylko dla \"ex\")"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tTryb ró¿nic (jak \"vimdiff\")"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tTryb ³atwy (jak \"evim\", bez trybów)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tTryb wy³±cznie do odczytu (jak \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tTryb ograniczenia (jak \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tModyfikacje (zapisywanie plików) niedozwolone"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tZakaz modyfikacji tekstu"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tTryb binarny"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tTryb lisp"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tB±d¼ zgodny z Vi: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tB±d¼ niezupe³nie zgodny z Vi: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][nazwap]\t\tGadatliwy [poziom N] [zapisuj wiadomo¶ci do nazwap]"
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tTryb odpluskwiania"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tZamiast pliku wymiany, u¿ywaj tylko pamiêci"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tWylicz pliki wymiany i zakoñcz"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (z nazw± pliku)\tOdtwórz za³aman± sesjê"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tTo¿same z -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\trozpocznij w trybie arabskim"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\trozpocznij w trybie hebrajskim"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\trozpocznij w trybie farsi"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tUstaw typ terminala na <terminal>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tU¿yj <vimrc> zamiast jakiegokolwiek .vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tNie ³aduj skryptów wtyczek"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tOtwórz N kart (domy¶lnie: po jednej dla ka¿dego pliku)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tOtwórz N okien (domy¶lnie: po jednym dla ka¿dego pliku)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\ttak samo jak -o tylko dziel okno pionowo"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tZacznij na koñcu pliku"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\tZacznij w wierszu <lnum>"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr ""
-"-cmd <command>\t\tWykonaj komendê <command> przed za³adowaniem "
-"jakiegokolwiek pliku vimrc"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr ""
-"-c <command>\t\tWykonaj komendê <command> po za³adowaniu pierwszego pliku"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <sesja>\t\tWczytaj plik <sesja> po za³adowaniu pierwszego pliku"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\tWczytuj komendy trybu normalnego z pliku <scriptin>"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr ""
-"-w <scriptout>\tDo³±cz wszystkie wprowadzane komendy do pliku <scriptout>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr ""
-"-W <scriptout>\tZapisuj wszystkie wprowadzane komendy do pliku <scriptout>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-"--startuptime <plik>\n"
-"Zapisz wiadomo¶ci o d³ugo¶ci startu do <plik>"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tU¿ywaj <viminfo> zamiast .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h lub --help\twy¶wietl Pomoc (czyli tê wiadomo¶æ) i zakoñcz"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\twy¶wietl informacjê o wersji i zakoñcz"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "Brak zak³adek"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: ¯adna zak³adka nie pasuje do \"%s\""
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"zak³. wiersz kol plik/tekst"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" skok wiersz kol plik/tekst"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"zmieñ wrsz. kol tekst"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Zak³adki w plikach:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Lista odniesieñ (pocz±wszy od najnowszych):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Historia zak³adek w plikach (od najnowszych po najstarsze):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "Brak '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: blok nie by³ zablokowany"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: B³±d w trakcie czytania pliku wymiany"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: B³±d odczytu pliku wymiany"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: B³±d szukania w pliku wymiany"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: B³±d zapisu w pliku wymiany"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: Plik wymiany ju¿ istnieje (atak symlink?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: Nie otrzyma³em bloku nr 0?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: Nie otrzyma³em bloku nr 1?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: Nie otrzyma³em bloku nr 2?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: Ojej, zgubi³em plik wymiany!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: Nie mog³em zmieniæ nazwy pliku wymiany"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr ""
-"E303: Nie mogê otworzyæ pliku wymiany dla \"%s\"; odtworzenie niemo¿liwe"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block(): Nie otrzyma³em bloku 0??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: Nie znaleziono pliku wymiany dla %s"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "Wprowad¼ numer pliku wymiany, którego u¿yæ (0 by wyj¶æ): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: Nie mogê otworzyæ %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "Nie mogê odczytaæ bloku 0 z "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"Mo¿e nie wykonano zmian albo Vim nie zaktualizowa³ pliku wymiany."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " nie mo¿e byæ stosowany z t± wersj± Vima.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "U¿yj Vima w wersji 3.0.\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s nie wygl±da na plik wymiany Vima"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " nie mo¿e byæ stosowany na tym komputerze.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "Ten plik zosta³ stworzony na "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"lub plik zosta³ uszkodzony."
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-" zosta³ uszkodzony (wielko¶æ strony jest mniejsza ni¿ najmniejsza warto¶æ).\n"
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "U¿ywam pliku wymiany \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "Oryginalny plik \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: OSTRZE¯ENIE: Oryginalny plik móg³ byæ zmieniony"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Nie mogê odczytaæ bloku 1 z %s"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???BRAKUJE WIELU WIERSZY"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???LICZNIK WIERSZY NIEZGODNY"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???PUSTY BLOK"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???BRAKUJE WIERSZY"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Niew³a¶ciwe ID bloku 1 (mo¿e %s nie jest plikiem .swp?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???BRAK BLOKU"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? od tego miejsca po ???KONIEC wiersze mog± byæ pomieszane"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? od tego miejsca po ???KONIEC wiersze mog± byæ w³o¿one/skasowane"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???KONIEC"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: Przerwanie odtwarzania"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: Wykryto b³êdy podczas odtwarzania; od których wierszy zacz±æ ???"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "Zobacz \":help E312\" dla dalszych informacji."
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr ""
-"Odtwarzanie zakoñczono. Powiniene¶ sprawdziæ czy wszystko jest w porz±dku."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Mo¿esz chcieæ zapisaæ ten plik pod inn± nazw±\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "i wykonaæ diff z oryginalnym plikiem aby sprawdziæ zmiany)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "Odzyskiwanie zakoñczone. Zawarto¶æ bufora jest równa zawarto¶ci pliku."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"Mo¿esz teraz chcieæ usun±æ plik .swp.\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "Znalezione pliki wymiany:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " W bie¿±cym katalogu:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " U¿ywam podanej nazwy:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " W katalogu "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ¿aden --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " posiadany przez: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " data: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " data: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [po Vimie wersja 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [nie wygl±da na plik wymiany Vima]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " nazwa pliku: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" zmieniono: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "TAK"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "nie"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" u¿ytkownik: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " nazwa hosta: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" nazwa hosta: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ID procesu: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (dalej dzia³a)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [nie do u¿ytku na tym komputerze]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [nieodczytywalny]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [nieotwieralny]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: Nie mogê zabezpieczyæ, bo brak pliku wymiany"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "Plik zabezpieczono"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: Nieudane zabezpieczenie"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: niew³a¶ciwy lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: nie znaleziono wiersza %<PRId64>"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: niepoprawne id wska¼nika bloku 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx powinien byæ 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: Zaktualizowano zbyt wiele bloków?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: niepoprawne id wska¼nika bloku 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "blok nr 1 skasowany?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: Nie mogê znale¼æ wiersza %<PRId64>"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: niepoprawne id bloku odniesienia"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count wynosi zero"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: numer wiersza poza zakresem: %<PRId64> jest poza koñcem"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: liczba wierszy niepoprawna w bloku %<PRId64>"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "Wielko¶æ stosu wzrasta"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: niepoprawne id bloku odniesienia 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Pêtla dowi±zañ dla \"%s\""
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: UWAGA"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"Znalaz³em plik wymiany o nazwie \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "Podczas otwierania pliku \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " NOWSZE od pliku wymiany!\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) Pewnie inny program obrabia ten sam plik.\n"
-" Je¶li tak, b±d¼ ostro¿ny, aby nie skoñczyæ z dwoma\n"
-" ró¿nymi wersjami tego samego pliku po zmianach.\n"
-
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr " Zakoñcz lub ostro¿nie kontynuuj.\n"
-
-#: ../memline.c:3246
-msgid "(2) An edit session for this file crashed.\n"
-msgstr "(2) Sesja edycji dla pliku za³ama³a siê.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " Je¶li tak, to u¿yj \":recover\" lub \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" aby odzyskaæ zmiany (zobacz \":help recovery)\").\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Je¶li ju¿ to zrobi³e¶, usuñ plik wymiany \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" aby unikn±æ tej wiadomo¶ci.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "Plik wymiany \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ju¿ istnieje!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - UWAGA"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "Plik wymiany ju¿ istnieje!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&Otwórz Read-Only\n"
-"&Edytuj pomimo\n"
-"O&dtwórz\n"
-"&Zakoñcz\n"
-"&Porzuæ"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&Otwórz Read-Only\n"
-"&Edytuj pomimo\n"
-"O&dtwórz\n"
-"&Usuñ\n"
-"&Zakoñcz\n"
-"&Porzuæ"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: Znaleziono zbyt wiele plików wymiany"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: Brak pamiêci! (rezerwacja %<PRIu64> bajtów)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: Czê¶æ tropu punktu menu nie okre¶la podmenu"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: Menu istnieje tylko w innym trybie"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: Nie ma menu \"%s\""
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: Pusta nazwa menu"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: Trop menu nie mo¿e prowadziæ do podmenu"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: Nie wolno dodawaæ punktów menu wprost do paska menu"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: Separator nie mo¿e byæ czê¶ci± tropu menu"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- Menu ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: Trop menu musi prowadziæ do punktu menu"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: Nie znaleziono menu: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: Menu nie jest zdefiniowane dla trybu %s"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: Trop menu musi prowadziæ do podmenu"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: Nie znaleziono menu - sprawd¼ nazwy menu"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "Wykryto b³±d podczas przetwarzania %s:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "wiersz %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Niew³a¶ciwa nazwa rejestru: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Opiekun komunikatów: Miko³aj Machowski <mikmach@wp.pl>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Przerwanie: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Naci¶nij ENTER lub wprowad¼ komendê aby kontynuowaæ"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s wiersz %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- Wiêcej --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: ekran/strona/wiersz w dó³, b/u/k: do góry, q: zakoñcz"
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Pytanie"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"&Tak\n"
-"&Nie"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"&Tak\n"
-"&Nie\n"
-"&Zakoñcz"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"&Tak\n"
-"&Nie\n"
-"Zapisz &wszystkie\n"
-"&Odrzuæ wszystkie\n"
-"&Zakoñcz"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: Za ma³o argumentów dla printf()"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Spodziewany argument Zmiennoprzecinkowy w printf()"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: Za du¿o argumentów dla printf()"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: OSTRZE¯ENIE: Zmiany w pliku tylko do odczytu"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "Wpisz numer i <Enter> lub wybierz mysz± (pusta warto¶æ anuluje): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "Wpisz numer i <Enter> (puste anuluje): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "1 wiersz wiêcej"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "1 wiersz mniej"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "dodano %<PRId64> wierszy"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "usuniêto %<PRId64> wierszy"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (Przerwane)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Biiip!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "Wywo³ujê pow³okê do wykonania: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: Brak identyfikatora pod kursorem"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' jest pusta"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "OSTRZE¯ENIE: terminal nie wykonuje pod¶wietlania"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: Brak ci±gu pod kursorem"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Nie mogê skasowaæ zwiniêcia z bie¿±c± 'foldmethod'"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: lista zmian (changelist) jest pusta"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: Na pocz±tku listy zmian"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: Na koñcu listy zmian"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "wprowad¼ :quit<Enter> zakoñczenie programu"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 wiersz %sed 1 raz"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 wiersz %sed %d razy"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> wierszy %sed 1 raz"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> wierszy %sed %d razy"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "%<PRId64> wierszy do wciêcia... "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "1 wiersz wciêty "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "%<PRId64> wierszy wciêtych "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: Brak poprzednio u¿ytego rejestru"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "nie mogê skopiowaæ, mimo to kasujê"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "1 wiersz zmieniono"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "%<PRId64> wierszy zmieniono"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "skopiowano blok 1 wiersza"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "1 wiersz skopiowano"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "%<PRId64> wierszy skopiowanych"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "%<PRId64> wierszy skopiowanych"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: Pusty rejestr %s"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- Rejestry ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "Niedozwolona nazwa rejestru"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# Rejestry:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: Nieznany typ rejestru %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> Kolumn; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Wybrano %s%<PRId64> z %<PRId64> Wierszy; %<PRId64> z %<PRId64> S³ów; "
-"%<PRId64> z %<PRId64> Bajtów"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Wybrano %s%<PRId64> z %<PRId64> Wierszy; %<PRId64> z %<PRId64> S³ów; "
-"%<PRId64> z %<PRId64> Znaków; %<PRId64> z %<PRId64> Bajtów"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Kol %s z %s; Wiersz %<PRId64> z %<PRId64>; S³owo %<PRId64> z %<PRId64>; Bajt "
-"%<PRId64> z %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Kol %s z %s; Wiersz %<PRId64> z %<PRId64>; S³owo %<PRId64> z %<PRId64>; Znak "
-"%<PRId64> z %<PRId64>; Bajt %<PRId64> z %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> dla BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=Strona %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "Dziêki za lot Vimem"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: Nieznana opcja"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: Opcja nie jest wspomagana"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: Niedozwolone w modeline"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr "E846: Kod klucza nie jest ustawiony"
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: Po = wymagany jest numer"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Nie znaleziono w termcap"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: Niedozwolony znak <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: Nie mogê ustawiæ 'term' na pusty ci±g"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' i 'patchmode' s± to¿same"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: Konflikty warto¶ci 'listchars'"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: Konflikty warto¶ci 'fillchars'"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: Brak dwukropka"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: Ci±g o zerowej d³ugo¶ci"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: Brak numeru po <%s>"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: Brak przecinka"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: Musi okre¶laæ warto¶æ '"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: zawiera niewy¶wietlalny lub szeroki znak"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: Niedozwolony znak po <%c>"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: wymagany przecinek"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' musi byæ pusty lub zawieraæ %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: Niedomkniêty ci±g wyra¿eñ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: zbyt wiele elementów"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: niezbalansowane grupy"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: okno podgl±du ju¿ istnieje"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: Arabski wymaga UTF-8, zrób ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Potrzebujê przynajmniej %d wierszy"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Potrzebujê przynajmniej %d kolumn"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: Nieznana opcja: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: Wymagana Liczba: &%s = '%s'"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Kody terminala ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Globalne warto¶ci opcji ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Lokalne warto¶ci opcji ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Opcje ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: B£¡D get_varp"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': Brak pasuj±cego znaku dla %s"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Dodatkowe znaki po ¶redniku: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"Nie mogê wykonaæ pow³oki "
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"pow³oka zwróci³a "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"Nie mogê uzyskaæ kontekstu bezpieczeñstwa dla"
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"Nie mo¿na uzyskaæ kontekstu bezpieczeñstwa dla"
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Nie mogê znale¼æ pliku \"%s\" w tropie"
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: Zbyt wiele %%%c w ci±gu formatuj±cym"
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Nieoczekiwane %%%c w ci±gu formatuj±cym"
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: Brak ] w ci±gu formatuj±cym"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: Niewspomagane %%%c w ci±gu formatuj±cym"
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Niepoprawne %%%c w prefiksie ci±gu formatuj±cego"
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Niepoprawne %%%c w ci±gu formatuj±cym"
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' nie zawiera wzorca"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: Pusta nazwa katalogu lub jej brak"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: Nie ma wiêcej elementów"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d z %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (wiersz skasowany)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Na dole stosu quickfix"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Na górze stosu quickfix"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "lista b³êdów %d z %d; %d b³êdów"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: Nie mogê zapisaæ, opcja 'buftype' jest ustawiona"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: Brak nazwy pliku lub niew³a¶ciwa ¶cie¿ka"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "Nie mogê otworzyæ pliku \"%s\""
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: Bufor nie jest za³adowany"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: Oczekiwa³em na ³añcuch lub listê"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Niew³a¶ciwy element w %s%%[]"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Brak ] po %s["
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: Niesparowany %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: Niesparowany %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: Niesparowany %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( jest niedozwolone w tym miejscu"
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 i podobne s± niedozwolone w tym miejscu"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Brak ] po %s%%["
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Pusty %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: Zbyt d³ugi wzorzec"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Zbyt wiele \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Zbyt wiele %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: Niesparowany \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: niedozwolony znak po %s@"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Zbyt wiele z³o¿onych %s{...}"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: Zagnie¿d¿one %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: Zagnie¿d¿one %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: Niedozwolone u¿ycie \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c po niczym"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: Niew³a¶ciwe odwo³anie wsteczne"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: niedopuszczalny znak po \\z"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Niedozwolony znak po %s%%[dxouU]"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: Niedozwolony znak po %s%%"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: B³±d sk³adni w %s{...}"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Zewnêtrzne poddopasowania:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-"E:864: \\%#= mo¿e byæ tylko przed 0, 1 lub 2. Zostanie u¿yty silnik "
-"automatyczny"
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (NFA) przedwczesny koniec wyra¿enia regularnego"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (wyra¿enie regularne NFA) Niepoprawnie umieszczone %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (NFA) Nieznany operator '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Nieznany operator '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (NFA) Nieznany operator '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-"E870: (wyra¿enie regularne NFA) B³±d przy odczytywaniu limitów powtórzeñ"
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-"E871: (wyra¿enie regularne NFA) wielokrotne nie mo¿e byæ po wielokrotnym!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (wyra¿enie regularne NFA) Zbyt du¿o '('"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (wyra¿enie regularne NFA) Za du¿o \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (wyra¿enie regularne NFA) b³±d poprawnego zakoñczenia"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (NFA) Nie mo¿na zdj±æ elementu ze stosu!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (wyra¿enie regularne NFA) (w trakcie konwersji postfix do NFA), za "
-"wiele stanów na stosie"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (wyra¿enie regularne NFA) Nie ma miejsca na ca³e NFA "
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"Nie mo¿na otworzyæ do zapisu tymczasowego pliku, pokazujê na stderr... "
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(NFA) NIE MO¯NA OTWORZYÆ %s !"
-
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "Nie mo¿na otworzyæ do zapisu tymczasowego pliku logowania"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " V-ZAMIANA"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ZAMIANA"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " NEGATYW"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " WPROWADZANIE"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (wprowadzanie)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (zamiana)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (v-zamiana)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Hebrajski"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Arabski"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (jêzyk)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (wklejanie)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " WIZUALNY"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " WIZUALNY LINIOWY"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " WIZUALNY BLOKOWY"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ZAZNACZANIE"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ZAZNACZANIE LINIOWE"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ZAZNACZANIE BLOKOWE"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "zapis"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: Niew³a¶ciwy ci±g do szukania: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: szukanie dobi³o GÓRY bez znalezienia: %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: szukanie dobi³o KOÑCA bez znalezienia : %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: Oczekujê '?' lub '/' po ';'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (zawiera poprzednio wymienione dopasowanie)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- Zawarte pliki "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "nie znaleziono"
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "w tropie ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Ju¿ wymienione)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " NIE ZNALEZIONO"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "Przegl±d w³±czonego pliku: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "Przeszukiwanie w³±czonego pliku %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: Wzorzec pasuje w bie¿±cym wierszu"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "Wszelkie w³±czane pliki odnaleziono"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "Brak w³±czanych plików"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: Nie znalaz³em definicji"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Nie znalaz³em wzorca"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Podstawienie "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# Ostatni %sWyszukiwany wzorzec:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: Nieprawid³owy format pliku sprawdzania pisowni"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: Obciêty plik sprawdzania pisowni"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Zbêdny tekst w %s wiersz %d: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Za d³uga nazwa afiksu w %s wiersz %d: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: B³±d formatu w pliku afiksów FOL, LOW lub UPP"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Znak w FOL, LOW lub UPP jest poza zasiêgiem"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "Kompresja drzewa s³ów..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: Sprawdzanie pisowni nie jest w³±czone"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-"Ostrze¿enie: Nie mogê znale¼æ listy s³ów \"%s.%s.spl\" lub \"%s.ascii.spl\""
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "Odczytujê plik sprawdzania pisowni \"%s\""
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: To nie wygl±da na plik sprawdzania pisowni"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Stary plik sprawdzania pisowni, wymagane uaktualnienie"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Plik sprawdzania pisowni dla nowszej wersji Vima"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: Niewspierana sekcja w pliku sprawdzania pisowni"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "Ostrze¿enie: region %s nie jest wspierany"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "Czytam plik afiksów %s ..."
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "Konwersja nie powiod³a siê dla wyrazu w %s wierszu %d: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "Konwersja w %s nie jest wspierana: od %s do %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "Nieprawid³owa warto¶æ FLAG w %s wierz %d: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG po u¿yciu flag w %s wiersz %d: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Definiowanie COMPOUNDFORBIDFLAG po PFX mo¿e skutkowaæ z³ym wynikiem w %s "
-"wiersz %d"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Definiowanie COMPOUNDPERMITFLAG po PFX mo¿e skutkowaæ z³ym wynikiem w %s "
-"wiersz %d"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "Z³a warto¶æ COMPOUNDRULES w %s wiersz %d: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "Z³a warto¶æ COMPOUNDWORDMAX w %s wiersz %d: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "Z³a warto¶æ COMPOUNDMIM w %s wiersz %d: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "Z³a warto¶æ COMPOUNDSYLMAX w %s wiersz %d: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "Z³a warto¶æ CHECKCOMPOUNDPATTERN w %s wiersz %d: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr "Ró¿ne flagi z³o¿eñ w kontynuowanym bloku afiksu w %s wiersz %d: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "Powtórzony afiks w %s wiersz %d: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"Afiks u¿yty tak¿e dla BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST w "
-"%s wiersz %d: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "Oczekiwano Y lub N w %s wierszu %d: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "B³êdny warunek w %s wiersz %d: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "Oczekiwano ilo¶ci REP(SAL) w %s wierszu %d"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "Oczekiwano ilo¶ci MAP w %s wierszu %d"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "Powtórzony znak w MAP w %s wierszu %d"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "Nieznany lub powtórzony element w %s wierszu %d: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Brak wiersza FOL/LOW/UPP w %s"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "COMPOUNDSYLMAX u¿yty bez SYLLABLE"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Zbyt wiele opó¼nionych prefiksów"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Zbyt wiele flag z³o¿eñ"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Zbyt wiele opó¼nionych prefiksów i/lub flag z³o¿eñ"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "Brak wiersza SOFO%s wiersz w %s"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "Wiersze SAL i SOFO w %s"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "Flaga nie jest liczb± w %s wiersz %d: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "Nieprawid³owa flaga w %s wiersz %d: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "Warto¶æ %s ró¿ni siê od tej u¿ytej w innym pliku .aff"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "Czytam plik s³ownika %s ..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: Brak ilo¶ci s³ów w %s"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "wiersz %6d, s³owo %6d - %s"
-
-# c-format
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "Powtórzony wyraz w %s wierszu %d: %s"
-
-# c-format
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "Pierwszy powtórzony wyraz w %s wiersz %d: %s"
-
-# c-format
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d powtórzony(ch) wyraz(ów) w %s"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII w %s"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "Odczytujê plik wyrazów %s ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "Zignorowano powtórzony wiersz /encoding= w %s wierszu %d: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Zignorowano wiersz /encoding= po wyrazie w %s wierszu %d: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "Powtórzony wiersz /regions= zignorowano w %s wierszu %d: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "Za du¿o regionów w %s wiersz %d: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "wiersz / zignorowano w %s wierszu %d: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "Nieprawid³owy numer regionu w %s wierszu %d: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "Nieznane flagi w %s wiersz %d: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "Zignorowa³em %d s³ów ze znakami nie ASCII"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "Skompresowano %d z %d wêz³ów; pozostaje %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "Odczytujê plik sprawdzania pisowni..."
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "Wykonujê kompresjê d¼wiêkow±..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "Liczba s³ów po kompresji d¼wiêkowej: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "Ca³kowita liczba s³ów: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "Zapisujê plik sugestii %s ..."
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "Oczekiwane zu¿ycie pamiêci: %d bajtów"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Nazwa pliku wynikowego nie mo¿e byæ nazw± regionu"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: Wspieram tylko 8 regionów"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: Nieprawid³owy region w %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "Ostrze¿enie: okre¶lono zarówno z³o¿enia jak i NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "Zapisujê plik sprawdzania pisowni %s ..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Zrobione!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' nie posiada wpisów %<PRId64>"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Usuniêto s³owo z %s"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Dodano s³owo do %s"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: Znaki wyrazów ró¿ni± siê miêdzy plikami sprawdzania pisowni"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Przykro mi, brak podpowiedzi"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Przykro mi, tylko %<PRId64> podpowiedzi"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "Zmieñ \"%.*s\" na:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: Brak poprzednich podmian sprawdzania pisowni"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: Nie znaleziono: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: Ten plik nie wygl±da na plik .sug: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Stary plik .sug, konieczne jest uaktualnienie: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: Plik .sug dla nowszej wersji Vima: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: Plik .sug nie pasuje do pliku .spl: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: B³±d w czasie odczytu pliku .sug: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: Podwojony znak we wpisie MAP"
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Brak elementów sk³adni okre¶lonych dla tego bufora"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: Niedozwolony argument: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Nie ma takiego klastra sk³adni: %s"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "synchronizacja komentarzy w stylu C"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "brak synchronizacji"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "pocz±tek synchronizacji"
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " wierszy przed górn± lini±"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Elementy synchronizacji sk³adni ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"synchronizujê na elementach"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Elementy sk³adni ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Nie ma takiego klastra sk³adni: %s"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "minimalnie "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "maksymalnie "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; pasuje "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr "znaków nowego wiersza"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: argument contains niedozwolony w tym miejscu"
-
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: Niew³a¶ciwa warto¶æ cchar"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: group[t]here niedozwolone w tym miejscu"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: Nie znalaz³em elementów regionu dla %s"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: Wymagana nazwa pliku"
-
-#: ../syntax.c:4221
-msgid "E847: Too many syntax includes"
-msgstr "E847: Za du¿o w³±czonych sk³adni"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: Brak ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: Brak '=': %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Za ma³o argumentów: syntax region %s"
-
-#: ../syntax.c:4870
-msgid "E848: Too many syntax clusters"
-msgstr "E848: Za du¿o klastrów sk³adni"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: Brak specyfikacji klastra"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: Brak ogranicznika wzorca: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: ¦mieci po wzorcu: %s"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: syntax sync: wielokrotnie podane wzorce kontynuacji wiersza"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: Niedozwolone argumenty: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: Brak znaku równo¶ci: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: Pusty argument: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s jest niedozwolone w tym miejscu"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s musi byæ pierwsze w li¶cie contains"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: Nieznana nazwa grupy: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: Niew³a¶ciwa podkomenda :syntax : %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-" WSZYTKO ILO¦Æ PASUJE NAJWOLN. ¦REDNIO NAZWA WZORZEC"
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: rekursywna pêtla wczytuj±ca syncolor.vim"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: nie znaleziono grupy pod¶wietlania: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Zbyt ma³o argumentów: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Zbyt wiele argumentów: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: grupa ma ustawienia; zignorowane pod³±czenie pod¶wietlania"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: nieoczekiwany znak równo¶ci: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: brak znaku równo¶ci: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: brak argumentu: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: Niedozwolona warto¶æ: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: Kolor FG nieznany"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: Kolor BG nieznany"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: Nazwa lub liczba koloru nierozpoznana: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: za d³ugi kod terminala: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: Niedozwolony argument: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: Zbyt wiele ró¿nych atrybutów podkre¶lania w u¿yciu"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: Niedrukowalny znak w nazwie grupy"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: nieprawid³owy znak w nazwie grupy"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr "E849: Za du¿o grup pod¶wietlania i sk³adni"
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: na dole stosu znaczników"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: na górze stosu znaczników"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Nie mo¿na przej¶æ przed pierwszy pasuj±cy znacznik"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: nie znaleziono znacznika: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri rodzaj znacznik"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "plik\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Pasuje tylko jeden znacznik"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Nie mo¿na przej¶æ za ostatni pasuj±cy znacznik"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Plik \"%s\" nie istnieje"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "znacznik %d z %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " lub wiêcej"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " U¿ywam znacznika o odmiennej wielko¶ci liter!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Plik \"%s\" nie istnieje"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # DO znacznik OD wiersza w pliku/tek¶cie"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "Szukam w pliku znaczników %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "Ignorujê d³ugie wiersze w pliku znaczników"
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: B³±d formatu w pliku znaczników \"%s\""
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "Przed bajtem %<PRId64>"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Plik znaczników nieuporz±dkowany: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: Brak pliku znaczników"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: Nie mogê znale¼æ wzorca znacznika"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Nie znalaz³em znacznika - tylko zgadujê!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "Powtórzona nazwa pola: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' nieznany. Mo¿liwe typy wbudowanych terminali:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "domy¶lnie jest '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: Nie mogê otworzyæ pliku termcap"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Nie ma opisu takiego terminala w terminfo"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Nie ma opisu takiego terminala w termcap"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Brak opisu \"%s\" w termcap"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: wymagana zdolno¶æ \"cm\" terminala"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Klawisze terminala ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: B³±d podczas wczytywania wej¶cia, koñczê...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Niespodziewana zmiana ilo¶ci linii"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: Nie mogê otworzyæ do zapisu pliku undo: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: Uszkodzony plik undo (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "Nie mo¿na zapisaæ pliku undo w ¿adnym katalogu z 'undodir'"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Nie nadpiszê plikiem undo, nie mogê odczytaæ: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "Nie nadpiszê, to nie jest plik undo: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "Pomijam zapis pliku undo, nic do cofniêcia"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "Zapisujê plik undo: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: B³±d zapisu w pliku undo: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "Nie wczytujê pliku undo, inny w³a¶ciciel: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "Wczytujê plik undo: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: Nie mogê otworzyæ pliku undo do odczytu: %s"
-
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: To nie jest plik undo: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: Niekompatybilny plik undo: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "Zawarto¶æ pliku siê zmieni³a, nie mogê u¿yæ pliku undo"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "Skoñczono wczytywanie pliku undo %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "Ju¿ w miejscu ostatniej zmiany"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "Ju¿ w miejscu najnowszej zmiany"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: Nie znaleziono numeru cofniêcia %<PRId64>"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: niew³a¶ciwe numery wierszy"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "1 wiersz wiêcej"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "wiêcej wierszy"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "1 wiersz mniej"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "mniej wierszy"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "1 zmiana"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "zmiany"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "przed"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "za"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Nie ma zmian do cofniêcia"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr "liczba zmiany kiedy zapisano"
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> sekund temu"
-
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: undojoin nie jest dozwolone po undo"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: uszkodzona lista cofania"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: brak wiersza cofania"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Zadane ³aty: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"Ekstra ³aty: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Zmieniony przez "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Skompilowany "
-
-#: ../version.c:649
-msgid "by "
-msgstr "przez "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"Olbrzymia wersja "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "bez GUI."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " Opcje w³±czone (+) lub nie (-):\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " vimrc systemu: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " vimrc u¿ytkownika: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " 2-gi plik vimrc u¿ytkownika: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " 3-ci plik vimrc u¿ytkownika: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " exrc u¿ytkownika: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " 2-gi plik exrc u¿ytkownika: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " odwet dla $VIM-a: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr "f-b dla $VIMRUNTIME: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "Kompilacja: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Konsolidacja: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " KOMPILACJA DEBUG"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi rozbudowany"
-
-#: ../version.c:769
-msgid "version "
-msgstr "wersja "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "Autor: Bram Moolenaar i Inni."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim jest open source i rozprowadzany darmowo"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "Pomó¿ biednym dzieciom w Ugandzie!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "wprowad¼ :help iccf<Enter> dla informacji o tym "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "wprowad¼ :q<Enter> zakoñczenie programu "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "wprowad¼ :help<Enter> lub <F1> pomoc na bie¿±co "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "wprowad¼ :help version7<Enter> dla informacji o wersji"
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Dzia³am w trybie zgodno¶ci z Vi"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "wprowad¼ :set nocp<Enter> warto¶ci domy¶lne Vim-a"
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "wprowad¼ :help cp-default<Enter> dla informacji to tym "
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "Sponsoruj rozwój Vima!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "Zostañ zarejestrowanym u¿ytkownikiem Vima!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "wprowad¼ :help sponsor<Enter> dla informacji"
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "wprowad¼ :help register<Enter> dla informacji"
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "menu Pomoc->Sponsoruj/Zarejestruj siê dla informacji"
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "Ju¿ jest tylko jeden widok"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: Nie ma okna podgl±du"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: Nie mogê rozdzieliæ lewo-górnego i prawo-dolnego jednocze¶nie"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: Nie mogê przekrêciæ, gdy inne okno jest rozdzielone"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: Nie mogê zamkn±æ ostatniego okna"
-
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: Nie mo¿na zamkn±æ okna autocmd"
-
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: Nie mo¿na zamkn±æ okna, zosta³oby tylko okno autocmd"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: Inne okno zawiera zmiany"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: Brak nazwy pliku pod kursorem"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: bf_key_init() wywo³any z pustym has³em"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Blowfish u¿ywa b³êdnej kolejno¶ci bajtów"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: test sha256 nie powiód³ siê"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: test Blowfisha nie powiód³ siê"
-
-#~ msgid "Patch file"
-#~ msgstr "Plik ³ata"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&OK\n"
-#~ "&Zakoñcz"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Brak po³±czenia z serwerem Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Nie mogê wys³aæ do %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Nie mogê czytaæ odpowiedzi serwera"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Nie mogê wys³aæ do klienta"
-
-#~ msgid "Save As"
-#~ msgstr "Zapisz jako"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Wczytaj skrypt Vima"
-
-#~ msgid "Edit File"
-#~ msgstr "Edytuj Plik"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (NIE ZNALEZIONO)"
-
-#~ msgid "unknown"
-#~ msgstr "nieznany"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "Edytuj plik w nowym oknie"
-
-#~ msgid "Append File"
-#~ msgstr "Do³±cz plik"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "Pozycja okna: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "Zapisz przekierowanie"
-
-#~ msgid "Save View"
-#~ msgstr "Zapisz widok"
-
-#~ msgid "Save Session"
-#~ msgstr "Zapisz sesjê"
-
-#~ msgid "Save Setup"
-#~ msgstr "Zapisz ustawienia"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< nie jest dostêpne bez w³a¶ciwo¶ci +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: Brak dwugrafów w tej wersji"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "jest urz±dzeniem (wy³±czonym w opcji 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "Wczytywanie ze stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[zakodowane]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Plik zaszyfrowano w nieznany sposób"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans nie pozwala na zapis niezmodyfikowanych buforów"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "Czê¶ciowy zapis niemo¿liwy dla buforów NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "zapisywanie do urz±dzenia wy³±czone w opcji 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Rozdzia³ zasobów zostanie utracony (wymu¶ przez !)"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<nie mogê otworzyæ> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: nie mogê otrzymaæ czcionki %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: nie mogê powróciæ do bie¿±cego katalogu"
-
-#~ msgid "Pathname:"
-#~ msgstr "Trop:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: nie mogê otrzymaæ bie¿±cego katalogu"
-
-#~ msgid "OK"
-#~ msgstr "OK"
-
-#~ msgid "Cancel"
-#~ msgstr "Zakoñcz"
-
-#~ msgid "Vim dialog"
-#~ msgstr "VIM - Dialog"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr ""
-#~ "Scrollbar Widget: Nie mog³em otrzymaæ rozmiarów rysunku na przycisku."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: Nie mogê stworzyæ BalloonEval z powiadomieniem i wywo³aniem"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Nie mog³em stworzyæ nowego procesu dla GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Proces potomny nie móg³ uruchomiæ GUI"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Nie mogê odpaliæ GUI"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Nie mogê czytaæ z \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: Nie mo¿na uruchomiæ GUI, brak prawid³owej czcionki"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Niew³a¶ciwe 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Nieprawid³owa warto¶æ 'imactivatekey'"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Nie mogê zarezerwowaæ koloru %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Brak dopasowania przy kursorze, szukam dalej"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Input _Methods"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - Szukaj i Zamieñ..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - Szukaj..."
-
-#~ msgid "Find what:"
-#~ msgstr "Znajd¼:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Zamieñ na:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Dopasuj tylko ca³e wyrazy"
-
-#~ msgid "Match case"
-#~ msgstr "Dopasuj wielko¶æ liter"
-
-#~ msgid "Direction"
-#~ msgstr "Kierunek"
-
-#~ msgid "Up"
-#~ msgstr "W górê"
-
-#~ msgid "Down"
-#~ msgstr "W dó³"
-
-#~ msgid "Find Next"
-#~ msgstr "Znajd¼ nastêpne"
-
-#~ msgid "Replace"
-#~ msgstr "Zamieñ"
-
-#~ msgid "Replace All"
-#~ msgstr "Zamieñ wszystkie"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: otrzymano ¿±danie \"die\" od mened¿era sesji\n"
-
-#~ msgid "Close"
-#~ msgstr "Zamknij"
-
-#~ msgid "New tab"
-#~ msgstr "Nowa karta"
-
-#~ msgid "Open Tab..."
-#~ msgstr "Otwórz kartê..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: G³ówne okno nieoczekiwanie zniszczone\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&Filtr"
-
-#~ msgid "&Cancel"
-#~ msgstr "&Anuluj"
-
-#~ msgid "Directories"
-#~ msgstr "Katalogi"
-
-#~ msgid "Filter"
-#~ msgstr "Filtr"
-
-#~ msgid "&Help"
-#~ msgstr "&Pomoc"
-
-#~ msgid "Files"
-#~ msgstr "Pliki"
-
-#~ msgid "&OK"
-#~ msgstr "&OK"
-
-#~ msgid "Selection"
-#~ msgstr "Wybór"
-
-#~ msgid "Find &Next"
-#~ msgstr "Znajd¼ &nastêpne"
-
-#~ msgid "&Replace"
-#~ msgstr "&Zamieñ"
-
-#~ msgid "Replace &All"
-#~ msgstr "Zamieñ &wszystko"
-
-#~ msgid "&Undo"
-#~ msgstr "&Cofnij"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Nie mogê znale¼æ tytu³u okna \"%s\""
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Argument nie jest wspomagany: \"-%s\"; U¿ywaj wersji OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Nie mo¿na otworzyæ okna wewn±trz aplikacji MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Zamknij kartê"
-
-#~ msgid "Open tab..."
-#~ msgstr "Otwórz kartê..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "Znajd¼ ci±g (u¿yj '\\\\' do szukania '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Szukanie i Zamiana (u¿yj '\\\\' do szukania '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Nie u¿ywany"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Katalog\t*.nic\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Nie mogê zarezerwowaæ mapy kolorów, pewne kolory mog± byæ "
-#~ "nieprawid³owe"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr ""
-#~ "E250: Brak czcionek dla nastêpuj±cych zestawów znaków w zestawie czcionek "
-#~ "%s:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Nazwa zestawu czcionek: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Czcionka '%s' nie posiada znaków jednolitej szeroko¶ci"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Nazwa zestawu czcionek: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Font0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Font1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "Szeroko¶æ font%<PRId64> nie jest podwójn± szeroko¶ci± font0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "Szeroko¶æ font0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "Szeroko¶æ font1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Nieprawid³owy opis czcionki"
-
-#~ msgid "&Dismiss"
-#~ msgstr "&Anuluj"
-
-#~ msgid "no specific match"
-#~ msgstr "brak okre¶lonego dopasowania"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - wybór czcionki"
-
-#~ msgid "Name:"
-#~ msgstr "Nazwa:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Poka¿ wielko¶æ w punktach"
-
-#~ msgid "Encoding:"
-#~ msgstr "Kodowanie:"
-
-#~ msgid "Font:"
-#~ msgstr "Czcionka:"
-
-#~ msgid "Style:"
-#~ msgstr "Styl:"
-
-#~ msgid "Size:"
-#~ msgstr "Wielko¶æ:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: B£¡D w automacie Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: b³±d stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: nie mogê otworzyæ bazy danych cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: nie mogê uzyskaæ informacji z bazy danych cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Nie mo¿na wczytaæ biblioteki Lua."
-
-#~ msgid "cannot save undo information"
-#~ msgstr "nie mogê zachowaæ informacji cofania"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Przykro mi, ta komenda jest wy³±czona, biblioteka MzScheme nie mo¿e "
-#~ "byæ za³adowana."
-
-#~ msgid "invalid expression"
-#~ msgstr "niepoprawne wyra¿enie"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "wyra¿enia wy³±czone podczas kompilacji"
-
-#~ msgid "hidden option"
-#~ msgstr "ukryta opcja"
-
-#~ msgid "unknown option"
-#~ msgstr "nieznana opcja"
-
-#~ msgid "window index is out of range"
-#~ msgstr "indeks okna poza zakresem"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "nie mogê otworzyæ bufora"
-
-#~ msgid "cannot delete line"
-#~ msgstr "nie mogê skasowaæ wiersza"
-
-#~ msgid "cannot replace line"
-#~ msgstr "nie mogê zamieniæ wiersza"
-
-#~ msgid "cannot insert line"
-#~ msgstr "nie mogê wprowadziæ wiersza"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "ci±g nie mo¿e zawieraæ znaków nowego wiersza"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "b³±d przy konwersji warto¶ci Scheme do Vima"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "B³±d vima: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "B³±d Vima"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "bufor jest niewa¿ny"
-
-#~ msgid "window is invalid"
-#~ msgstr "okno jest niewa¿ne"
-
-#~ msgid "linenr out of range"
-#~ msgstr "numer wiersza poza zakresem"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "Niedozwolone w piaskownicy Vima"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Przykro mi, ta komenda jest wy³±czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Pythona"
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: nie mo¿na u¿ywaæ :py i :py3 w czasie jednej sesji"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Nie mo¿na wywo³aæ Pythona rekursywnie"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ musi byæ reprezentacj± £añcucha"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Przykro mi, ta komenda jest wy³±czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Ruby."
-
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: nieoczekiwany return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: nieoczekiwany next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: nieoczekiwany break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: nieoczekiwane redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: ponowna próba poza klauzul± ratunku"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: nieobs³ugiwany wyj±tek"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Nieznany status longjmp %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Prze³±cz miêdzy implementacj±/okre¶leniem"
-
-#~ msgid "Show base class of"
-#~ msgstr "Poka¿ bazê klasy"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Poka¿ przepisan± funkcjê cz³onow±"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Pobieraj z pliku"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Pobieraj z projektu"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Pobieraj z wszystkich projektów"
-
-#~ msgid "Retrieve"
-#~ msgstr "Pobierz"
-
-#~ msgid "Show source of"
-#~ msgstr "Poka¿ ¼ród³o dla"
-
-#~ msgid "Find symbol"
-#~ msgstr "Znajd¼ symbol"
-
-#~ msgid "Browse class"
-#~ msgstr "Przejrzyj klasê"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Poka¿ klasê w hierarchii"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Poka¿ klasê w ograniczonej hierarchii"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref odnosi siê do"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ma odniesienia od"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ma"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref u¿yte przez"
-
-#~ msgid "Show docu of"
-#~ msgstr "Poka¿ dokumentacjê dla"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Utwórz dokumentacjê dla"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Nie mogê pod³±czyæ do SNiFF+. Sprawd¼ ¶rodowisko (sniffemacs musi byæ "
-#~ "odnaleziony w $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: B³±d podczas czytania. Roz³±czenie"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ jest obecnie "
-
-#~ msgid "not "
-#~ msgstr "nie "
-
-#~ msgid "connected"
-#~ msgstr "pod³±czony"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Nieznane zapytanie SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: B³±d w trakcie pod³±czania do SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ niepod³±czony"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Nie jest buforem SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: B³±d w trakcie zapisu. Roz³±czony"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "niew³a¶ciwy numer bufora"
-
-#~ msgid "not implemented yet"
-#~ msgstr "obecnie nie zaimplementowano"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "nie mogê ustawiæ wiersza(y)"
-
-#~ msgid "invalid mark name"
-#~ msgstr "niepoprawna nazwa zak³adki"
-
-#~ msgid "mark not set"
-#~ msgstr "zak³adka nie ustawiona"
-
-#~ msgid "row %d column %d"
-#~ msgstr "wiersz %d kolumna %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "nie mogê wprowadziæ/do³±czyæ wiersza"
-
-#~ msgid "line number out of range"
-#~ msgstr "numer wiersza poza zakresem"
-
-#~ msgid "unknown flag: "
-#~ msgstr "nieznana flaga: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "nieznane vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "przerwanie klawiatury"
-
-#~ msgid "vim error"
-#~ msgstr "b³±d vima"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "nie mogê stworzyæ bufora/okna komendy: obiekt jest kasowany"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr ""
-#~ "nie mogê zarejestrowaæ wstecznego wywo³ania komendy: bufor/okno ju¿ "
-#~ "zosta³a skasowana"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: TCL FATALNY B£¡D: reflist zepsuta!? Proszê z³o¿yæ raport o tym na "
-#~ "vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "nie mogê zarejestrowaæ wstecznego wywo³ania komendy: brak odniesienia do "
-#~ "bufora/okna"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Przykro mi, ta komenda jest wy³±czona, bo nie mo¿na za³adowaæ "
-#~ "biblioteki Tcl."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: kod wyj¶cia %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "nie mogê dostaæ wiersza"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Nie mogê zarejestrowaæ nazwy serwera komend"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Wys³anie komendy do programu docelowego nie powiod³o siê"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: U¿yto niew³a¶ciwego id serwera: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: wcielenia instancji rejestru Vima jest ¼le sformowane. Skasowano!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans nie s± obs³ugiwane przez to GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "Ta wersja Vima nie by³a skompilowanego z opcj± ró¿nic (diff)."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "'-nb' - nie mo¿e byæ u¿yte: nie w³±czone przy kompilacji\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: B³±d: Nie mo¿na uruchomiæ gvim z NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "gdzie wielko¶æ znaków jest ignorowana dodaj na pocz±tku / by flaga by³a "
-#~ "wielk± liter±"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tZarejestruj tego gvima w OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tWyrejestruj gvima z OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tStartuj w GUI (tak jak \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f lub --nofork\tPierwszy plan: Nie wydzielaj przy odpalaniu GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tNie stosuj newcli do otwierania okien"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\tU¿ywaj <device> do I/O"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\tU¿yj <gvimrc> zamiast jakiegokolwiek .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tEdytuj zakodowane pliki"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\tPod³±cz vima to danego X-serwera"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tNie ³±cz z serwerem X"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <pliki>\tEdytuj pliki w serwerze Vima je¶li mo¿liwe"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <pliki> To samo, nie narzekaj je¶li nie ma serwera"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <pliki>\tTak jak --remote, lecz czekaj na pliki przed edycj±"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <pliki> To samo, nie narzekaj je¶li nie ma serwera"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <pliki> tak jak --remote ale u¿ywa jednej "
-#~ "karty na plik"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <klawisze>\tWy¶lij <klawisze> do serwera Vima i zakoñcz"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <wyr>\tWykonaj <wyra¿enie> w serwerze i wypisz wynik"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\tWymieñ nazwy dostêpnych serwerów Vima i zakoñcz"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <nazwa>\t\tOdsy³aj do/stañ siê serwerem Vim <nazwa>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja Motif):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja Athena):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\tZa³aduj vim na <display>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tZacznij Vim jako ikonê"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <kolor>\tU¿ywaj <kolor> dla t³a (równie¿: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <kolor>\tU¿ywaj <kolor> dla normalnego tekstu (równie¿: -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\t\tU¿ywaj <font> dla normalnego tekstu (równie¿: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\tU¿ywaj <font> dla wyt³uszczonego tekstu"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\tU¿ywaj <font> dla pochy³ego"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr ""
-#~ "-geometry <geom>\tU¿ywaj <geom> dla pocz±tkowych rozmiarów (równie¿: -"
-#~ "geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <szer>\tU¿yj ramki o grubo¶ci <szer> (równie¿: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <szer> U¿ywaj przewijacza o szeroko¶ci <szer> (równie¿: -"
-#~ "sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr ""
-#~ "-menuheight <height>\tStosuj belkê menu o wysoko¶ci <height> (równie¿: -"
-#~ "mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tStosuj negatyw kolorów (równie¿: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tNie stosuj negatywu kolorów (równie¿: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\tUstaw okre¶lony zasób"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja GTK+):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\tZastartuj vim na <display> (równie¿: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\tUstaw unikatow± rolê do identyfikacji g³ównego okna"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tOtwórz Vim wewn±trz innego widgetu GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "-echo-wid\t\tGvim wypisze Window ID na wyj¶cie standardowe"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <tytu³ rodzica>\tOtwórz Vima wewn±trz rodzicielskiej aplikacji"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tOtwórz Vima wewn±trz innego elementu win32"
-
-#~ msgid "No display"
-#~ msgstr "Brak display"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Wys³anie nie powiod³o siê.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Wys³anie nie powiod³o siê. Próbujê wykonaæ na miejscu\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "otworzono %d z %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Brak terminala: Wys³anie wyra¿enia nie powiod³o siê.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Wys³anie wyra¿enia nie powiod³o siê.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: To nie jest wa¿na strona kodowa"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Nie mogê nastawiæ warto¶ci IC"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Nie mog³em stworzyæ kontekstu wprowadzeñ"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Nie mog³em otworzyæ sposobu wprowadzeñ"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: OSTRZE¯ENIE: Nie mog³em zlikwidowaæ wywo³ania dla IM"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: metoda wprowadzeñ nie wspomaga ¿adnego stylu"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: metoda wprowadzeñ nie wspomaga mojego typu preedit"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: B³±d w czasie uaktualniania szyfrowania pliku wymiany"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s jest zaszyfrowany a ta wersja Vima nie wspiera szyfrowania"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Zaszyfrowany plik wymiany: \"%s\""
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "Je¶li podano nowy klucz szyfruj±cy, ale nie zapisano pliku tekstowego,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "wprowad¼ nowy klucz szyfruj±cy."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "Je¶li zapisano plik tekstowy po zmianie klucza szyfruj±cego wci¶nij Enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "aby u¿yæ tego samego klucza dla pliku tekstowego i wymiany"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "U¿ywam klucza szyfruj±cego z pliku wymiany do pliku tekstowego.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [nie nadaje siê dla tej wersji Vima]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "Oderwij to menu"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Dialog wyboru katalogu"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Dialog zapisywania pliku"
-
-#~ msgid "Open File dialog"
-#~ msgstr "Dialog otwierania pliku"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: Przykro mi, nie ma przegl±darki plików w trybie konsoli"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: zachowujê plik...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: Zakoñczono.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "B£¡D: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[bajtów] totalne alokacje-zwolnienia %<PRIu64>-%<PRIu64>, w u¿ytku "
-#~ "%<PRIu64>, maksymalne u¿ycie %<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[wywo³ania] wszystkich re/malloc()-ów %<PRIu64>, wszystkich free()-ów "
-#~ "%<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: Wiersz staje siê zbyt d³ugi"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Wewnêtrzny b³±d: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Niedozwolony obrys myszki"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "Wprowad¼ klucz do odkodowania: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "Wprowad¼ ponownie ten sam klucz: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Klucze nie pasuj± do siebie!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Nie mo¿na po³±czyæ z Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Nie mo¿na po³±czyæ z Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: B³êdny tryb dostêpu pliku info po³±czenia NetBeans: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "odczyt z gniazda Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Bufor %<PRId64> utraci³ po³±czenie z NetBeans"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans nie s± obs³ugiwane przez to GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans ju¿ pod³±czone"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s jest tylko do odczytu (dodaj ! aby wymusiæ)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Funkcjonalno¶æ eval nie jest dostêpna"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "zwalniam %<PRId64> wierszy"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: Nie mogê zmieniæ term w GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: U¿yj \":gui\" do odpalenia GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Nie mogê zmieniæ w GTK+2 GUI"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Niedozwolona czcionka/ki"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: nie mogê wybraæ zestawu czcionek"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Niedozwolony zestaw czcionek"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: nie mogê wybraæ szerokiej czcionki"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Niedozwolona szeroka czcionka"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Brak wspomagania myszki"
-
-#~ msgid "cannot open "
-#~ msgstr "nie mogê otworzyæ "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Nie mogê otworzyæ okna!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Potrzebujê Amigados w wersji 2.04 lub pó¼niejsz±\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Potrzebujê %s w wersji %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Nie mogê otworzyæ NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Nie mogê stworzyæ "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim koñczy pracê z %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "nie mogê zmieniæ trybu konsoli ?!\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: nie jest konsol±??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Nie mogê wykonaæ pow³oki z opcj± -f"
-
-#~ msgid "Cannot execute "
-#~ msgstr "Nie mogê wykonaæ "
-
-#~ msgid "shell "
-#~ msgstr "pow³oka "
-
-#~ msgid " returned\n"
-#~ msgstr " zwróci³\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE zbyt niskie."
-
-#~ msgid "I/O ERROR"
-#~ msgstr "B£¡D I/O"
-
-#~ msgid "Message"
-#~ msgstr "Wiadomo¶æ"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' nie wynosi 80, nie mogê wykonaæ zewnêtrznych komend"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Wybór drukarki nie powiód³ siê"
-
-#~ msgid "to %s on %s"
-#~ msgstr "do %s z %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Nieznana czcionka drukarki: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: B³±d drukarki: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "Wydrukowano '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr ""
-#~ "E244: Niedozwolona nazwa zestawu znaków \"%s\" w nazwie czcionki \"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Podwójny sygna³, wychodzê\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: Za³apa³ ¶miertelny sygna³ %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: Za³apa³ ¶miertelny sygna³\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "Otwieranie ekranu X trwa³o %<PRId64> msec"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Dosta³ b³±d X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "Test ekranu X nie powiód³ siê"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Próba otwarcia ekranu X trwa³a zbyt d³ugo"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê wykonaæ pow³oki sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê stworzyæ potoków\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Nie mogê rozdzieliæ siê\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Komenda zakoñczona\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP straci³ po³±czenie ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Otwarcie ekranu X nie powiod³o siê"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP obs³uguje ¿±danie samozapisu"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP otwiera po³±czenie"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "Obserwacja po³±czenia XSMP ICE nie powiod³a siê"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection nie powiod³o siê: %s"
-
-#~ msgid "At line"
-#~ msgstr "W wierszu"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Nie mogê za³adowaæ vim32.dll!"
-
-#~ msgid "VIM Error"
-#~ msgstr "B³±d VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Nie zdo³a³em poprawiæ wska¼ników funkcji w DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "pow³oka zwróci³a %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: Za³apa³ wydarzenie %s\n"
-
-#~ msgid "close"
-#~ msgstr "zamknij"
-
-#~ msgid "logoff"
-#~ msgstr "wyloguj"
-
-#~ msgid "shutdown"
-#~ msgstr "zakoñcz"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Nie znaleziono komendy"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "VIMRUN.EXE nie znaleziono w twoim $PATH.\n"
-#~ "Zewnêtrzne komendy nie bêd± wstrzymane po wykonaniu.\n"
-#~ "Zobacz :help wim32-vimrun aby otrzymaæ wiêcej informacji."
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim Ostrze¿enie"
-
-#~ msgid "Error file"
-#~ msgstr "Plik b³êdu"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: B³±d przy budowwaniu NFA z klas± ekwiwalencji"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr ""
-#~ "E878: (NFA) Nie mo¿na przydzieliæ pamiêci do przej¶cia przez ga³êzie!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Ostrze¿enie: Nie mogê znale¼æ listy s³ów \"%s_%s.spl\" lub \"%s_ascii.spl"
-#~ "\""
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "Konwersja w %s nie jest wspierana"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr ""
-#~ "E845: Nie wystarczaj±ca ilo¶æ pamiêci, lista s³ów bêdzie niekompletna"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Trop szukania pliku znaczników obciêty dla %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "uruchomiono now± pow³okê\n"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "U¿ywam CUT_BUFFER0 zamiast pustego wyboru"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Cofniêcie niemo¿liwe; mimo to kontynuujê"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Nie zaszyfrowany plik ma zaszyfrowany plik undo: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Nie powiod³o siê odszyfrowywanie pliku undo: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Plik undo jest zaszyfrowany: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "16/32-bit wersja GUI dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "64 bitowa wersja GUI dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja GUI dla MS-Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " w trybie Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " ze wspomaganiem OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja na konsolê dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja na konsolê dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 bitowa wersja dla MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 bitowa wersja dla MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 bitowa wersja dla MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Du¿a wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Normalna wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Ma³a wersja "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Malutka wersja "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "z GTK2-GNOME GUI."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "z GTK2 GUI."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "z X11-Motif GUI."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "z X11-neXtaw GUI."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "z X11-Athena GUI."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "z Photon GUI."
-
-#~ msgid "with GUI."
-#~ msgstr "z GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "z Carbon GUI."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "z Cocoa GUI."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "z (klasycznym) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " gvimrc systemu: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc u¿ytkownika: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "2-gi plik gvimrc u¿ytkownika: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "3-ci plik gvimrc u¿ytkownika: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " systemowy plik menu: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "Kompilator: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "menu Pomoc->Sieroty dla informacji to tym "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Uruchomiony bez trybów, wpisany tekst jest wprowadzany"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "menu Edytuj->Ustawienia globalne->Tryb wstawiania"
-
-#~ msgid " for two modes "
-#~ msgstr " dla dwóch trybów "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "menu Edytuj->Ustawienia globalne->Kompatybilno¶æ z Vi"
-
-#~ msgid " for Vim defaults "
-#~ msgstr " dla domy¶lnych ustawieñ Vima "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "OSTRZE¯ENIE: wykryto Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "wprowad¼ :help windows95<Enter> dla informacji to tym "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Nie mog³em za³adowaæ biblioteki %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Przykro mi, ta komenda jest wy³±czona: nie mog³em za³adowaæ biblioteki "
-#~ "Perla."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr "E299: wyliczenie Perla zabronione w piaskownicy bez modu³u Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Edytuj w &wielu Vimach"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Edytuj w pojedynczym &Vimie"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Diff z Vimem"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Edytuj w &Vimie"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Edytuj z istniej±cym Vimem - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Edytuj wybrane pliki w Vimie"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "B³±d tworzenia procesu: Sprawd¼ czy gvim jest w twojej ¶cie¿ce!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "b³±d gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "Za d³uga ¶cie¿ka!"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Nieznany zestaw czcionek: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Nieznana czcionka: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Czcionka \"%s\" nie ma sta³ej szeroko¶ci znaków"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Nie mo¿na za³adowaæ funkcji biblioteki %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E26: Hebrajski nie mo¿e byæ u¿yty: Nie w³±czono podczas kompilacji\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Farsi nie mo¿e byæ u¿yty: Nie w³±czono podczas kompilacji\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: Arabski nie mo¿e byæ u¿yty: Nie w³±czono podczas kompilacji\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: brak zarejestrowanego serwera o nazwie \"%s\""
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: nie mogê otworzyæ ekranu"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Odebra³em niew³a¶ciwe wyra¿enie"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Region jest chroniony, nie mogê zmieniæ"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans nie zezwala na zmiany w plikach tylko do odczytu"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Potrzebujê klucza szyfrowania dla \"%s\""
-
-#~ msgid "empty keys are not allowed"
-#~ msgstr "puste klucze nie s± dozwolone"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "s³ownik jest zablokowany"
-
-#~ msgid "list is locked"
-#~ msgstr "lista jest zablokowana"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "nie powiod³o siê dodanie klucza '%s' do s³ownika"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "indeks musi byæ liczb± lub wycinkiem, nie %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "czeka³em na str() lub unicode(), a dosta³em %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "czeka³em na bytes() lub str(), a dosta³em %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "czeka³em na int(), long() lub co¶ co mo¿na zmieniæ na long(), ale "
-#~ "dosta³em %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ "czeka³em na int() lub co¶ co mo¿na zmieniæ na int(), ale dosta³em %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "warto¶æ zbyt du¿a by zmie¶ci³a siê w typie int C"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "warto¶æ jest zbyt ma³a by zmie¶ci³a siê w typie int C"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "liczba musi byæ wiêksza ni¿ zero"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "liczba musi byæ wiêksza lub mniejsza ni¿ zero"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "nie mogê skasowaæ atrybutów OutputObject"
-
-#~ msgid "invalid attribute: %s"
-#~ msgstr "niepoprawny atrybut: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: B³±d w uruchomieniu obiektów I/O"
-
-#~ msgid "failed to change directory"
-#~ msgstr "nie powiod³a siê zmiana katalogu"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr ""
-#~ "czeka³em na 3-krotkê jako wynik imp.find_module(), a dosta³em krotkê o "
-#~ "wielko¶ci %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "wewnêtrzny b³±d: imp.find_module zwróci³ krotkê z NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "nie mogê usun±æ atrybutów vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "nie mogê zmieniæ zablokowanego s³ownika"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "nie mogê ustawiæ atrybutu %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "hashtab zmieni³ siê w czasie iteracji"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "czeka³em na element sekwencyjny od d³ugo¶ci 2, a dosta³em sekwencjê o "
-#~ "d³ugo¶ci %d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "konstruktor listy nie akceptuje s³ów kluczowych jako argumentów"
-
-#~ msgid "list index out of range"
-#~ msgstr "indeks listy poza zakresem"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "b³±d wewnêtrzny: nie powiod³o siê pobranie z listy Vima elementu %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "nie powiod³o siê dodanie elementu do listy"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "b³±d wewnêtrzny: w li¶cie Vima brak elementu %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "b³±d wewnêtrzny: nie powiod³o siê dodanie elementu do listy"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "nie mogê usun±æ atrybutów vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "nie mogê zmieniæ zablokowanej listy"
-
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "nie nazwana funkcja %s nie istnieje"
-
-#~ msgid "function %s does not exist"
-#~ msgstr "funkcja %s nie istnieje"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "konstruktor funkcji nie akceptuje s³ów kluczowych jako argumentów"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "nie mogê uruchomiæ funkcji %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "wyst±pi³ problem w czasie zmiany okien"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "nie mogê wyzerowaæ opcji globalnej %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "nie mogê wyzerowaæ opcji %s, która nie ma warto¶ci globalnej"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "próba odniesienia do skasowanej karty"
-
-#~ msgid "no such tab page"
-#~ msgstr "nie ma takiej karty"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "próba odniesienia do skasowanego okna"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "atrybut tylko do odczytu: bufor"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "pozycja kursora poza buforem"
-
-#~ msgid "no such window"
-#~ msgstr "nie ma takiego okna"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "próba odniesienia do skasowanego bufora"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "nie powiod³a siê zmiana nazwy bufora"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "nazwa zak³adki musi byæ pojedynczym znakiem"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.Buffer, a dosta³em %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "nie przeszed³em do bufora %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.Window, a dosta³em %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "nie znaleziono okna na bie¿±cej karcie"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "nie przeszed³em do okre¶lonego okna"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "oczekiwa³em na obiekt vim.TabPage, a dosta³em %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "nie przeszed³em do okre¶lonej karty"
-
-#~ msgid "failed to run the code"
-#~ msgstr "uruchomienie kodu siê nie powiod³o"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: eval nie zwróci³o odpowiedniego obiektu pythona"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: Nie powiod³a siê konwersja obiektu pythona do warto¶ci Vima"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "nie mo¿na konwertowaæ %s do s³ownika Vima"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "nie mo¿na konwertowaæ %s do struktury Vima"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "b³±d wewnêtrzny: przekazano referencjê NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "b³±d wewnêtrzny: b³êdny typ warto¶ci"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Nie mogê ustawiæ haka ¶cie¿ki: sys.path_hooks nie jest list±\n"
-#~ "Powiniene¶ teraz wykonaæ nastêpuj±ce czynno¶ci:\n"
-#~ "- dodaæ vim.path_hook do sys.path_hooks\n"
-#~ "- dodaæ vim.VIM_SPECIAL_PATH do sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Nie mogê ustawiæ ¶cie¿ki: sys.path nie jest list±\n"
-#~ "Powinno siê teraz dodaæ vim.VIM_SPECIAL_PATH do sys.path"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace musi byæ liczb± ca³kowit±"
-
-#~ msgid "<buffer object (deleted) at %p>"
-#~ msgstr "<obiekt bufora (skasowany) w %p>"
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr ""
-#~ "E281: B£¡D TCL: kod zakoñczeniowy nie jest ca³kowity!? Proszê z³o¿yæ "
-#~ "raport o tym na vim-dev@vim.org"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Argumenty rozpoznawane przez gvim (wersja RISC OS):\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <number>\tPocz±tkowa szeroko¶æ okna w kolumnach"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <number>\tPocz±tkowa wysoko¶æ okna w wierszach"
-
-#~ msgid "E505: "
-#~ msgstr "E505: "
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "wersja dla RISC OS"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines() wymaga listy ci±gów"
-
-#~ msgid "<window object (deleted) at %p>"
-#~ msgstr "<obiekt okna (skasowany) w %p>"
-
-#~ msgid "<window object (unknown) at %p>"
-#~ msgstr "<obiekt okna (nieznany) w %p>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<okno %d>"
-
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <nazwa>\t\tU¿ywaj zasobów tak jak by Vim by³ <nazwa>"
-
-#~ msgid "\t\t\t (Unimplemented)\n"
-#~ msgstr "\t\t\t (Niezaimplementowane)\n"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: argument containedin niedozwolony w tym miejscu"
-
-#~ msgid "Vim dialog..."
-#~ msgstr "Dialog Vima..."
-
-#~ msgid "Font Selection"
-#~ msgstr "Wybór czcionki"
-
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: styl nadpunktowy wymaga +fontset"
-
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: Twój GTK+ jest starszy ni¿ 1.2.3. Pole statusu wy³±czono"
-
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: Serwer metod wprowadzeñ nie jest uruchomiony"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "z GTK-GNOME GUI."
-
-#~ msgid "with GTK GUI."
-#~ msgstr "z GTK GUI."
-
-#~ msgid "[NL found]"
-#~ msgstr "[znaleziono NL]"
-
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: wyczerpano maksymaln± liczbê po³±czeñ cscope"
diff --git a/src/nvim/po/pt_BR.po b/src/nvim/po/pt_BR.po
index 60c11d4b5a..05986cf097 100644
--- a/src/nvim/po/pt_BR.po
+++ b/src/nvim/po/pt_BR.po
@@ -2478,11 +2478,6 @@ msgstr "E900: Id do job é inválido"
msgid "E901: Job table is full"
msgstr "E901: Tabela de jobs está cheia"
-#: ../globals.h:1021
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr "E902: \"%s\" não é um executável"
-
#: ../globals.h:1023
#, c-format
msgid "E364: Library call failed for \"%s()\""
diff --git a/src/nvim/po/ru.cp1251.po b/src/nvim/po/ru.cp1251.po
deleted file mode 100644
index 29e8c83ee6..0000000000
--- a/src/nvim/po/ru.cp1251.po
+++ /dev/null
@@ -1,8282 +0,0 @@
-# Russian translation for Vim
-#
-# Îá óñëîâèÿõ èñïîëüçîâàíèÿ ÷èòàéòå â ðåäàêòîðå Vim ":help uganda"
-#
-# vassily "vr" ragosin <vrr@users.sourceforge.net>, 2004
-# Sergey Alyoshin <alyoshin.s@gmail.com>, 2013
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: vim_ru\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2014-10-10 12:00+0400\n"
-"Last-Translator: Sergey Alyoshin <alyoshin.s@gmail.com>\n"
-"Language-Team: \n"
-"Language: Russian\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1251\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "Íåâîçìîæíî ïîëó÷èòü çíà÷åíèå îïöèè"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "Âíóòðåííÿÿ îøèáêà: íåèçâåñòíûé òèï îïöèè"
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Ñïèñîê ðàñïîëîæåíèé]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Ñïèñîê áûñòðûõ èñïðàâëåíèé]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr "E855: Àâòîêîìàíäû âûçâàëè ïðåêðàùåíèå êîìàíäû"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Íåâîçìîæíî âûäåëèòü ïàìÿòü äàæå äëÿ îäíîãî áóôåðà, âûõîä..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: Íåâîçìîæíî âûäåëèòü ïàìÿòü äëÿ áóôåðà, èñïîëüçóåì äðóãîé áóôåð..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: Íè îäèí áóôåð íå áûë âûãðóæåí èç ïàìÿòè"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: Íè îäèí áóôåð íå áûë óäàë¸í"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: Íè îäèí áóôåð íå áûë î÷èùåí"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "Îäèí áóôåð âûãðóæåí èç ïàìÿòè"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "Âñåãî âûãðóæåíî áóôåðîâ èç ïàìÿòè: %d"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "Îäèí áóôåð óäàë¸í"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "Âñåãî óäàëåíî áóôåðîâ: %d"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "Îäèí áóôåð î÷èùåí"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "Âñåãî î÷èùåíî áóôåðîâ: %d"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: Íåâîçìîæíî âûãðóçèòü èç ïàìÿòè ïîñëåäíèé áóôåð"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: Èçìåí¸ííûõ áóôåðîâ íå îáíàðóæåíî"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: Áóôåðû â ñïèñêå îòñóòñòâóþò"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: Áóôåð %<PRId64> íå ñóùåñòâóåò"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: Ýòî ïîñëåäíèé áóôåð"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: Ýòî ïåðâûé áóôåð"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr ""
-"E89: Èçìåíåíèÿ â áóôåðå %<PRId64> íå ñîõðàíåíû (äîáàâüòå !, ÷òîáû îáîéòè "
-"ïðîâåðêó)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: Ïðåäóïðåæäåíèå: ïåðåïîëíåíèå ñïèñêà èì¸í ôàéëîâ"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: Áóôåð %<PRId64> íå íàéäåí"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: Íåñêîëüêî ñîîòâåòñòâèé äëÿ %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: Íåò ñîîòâåòñòâóþùåãî %s áóôåðà"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "ñòðîêà %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: Áóôåð ñ òàêèì èìåíåì óæå ñóùåñòâóåò"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [Èçìåí¸í]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[Íå ðåäàêòèðîâàëñÿ]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[Íîâûé ôàéë]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[Îøèáêè ÷òåíèÿ]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[Ò×]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[òîëüêî äëÿ ÷òåíèÿ]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "Îäíà ñòðîêà --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> ñòð. --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "ñòð. %<PRId64> èç %<PRId64> --%d%%-- êîë. "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[Íåò èìåíè]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "ñïðàâêà"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[Ñïðàâêà]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Ïðåäïðîñìîòð]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "Âåñü"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "Âíèçó"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "Íàâåðõó"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# Ñïèñîê áóôåðîâ:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[Âðåìåííûé]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Çíà÷êè ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "Çíà÷êè äëÿ %s:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ñòðîêà=%<PRId64> id=%d èìÿ=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: Ïðîïóùåíî äâîåòî÷èå"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: Íåäîïóñòèìûé ðåæèì"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: Òðåáóåòñÿ ââåñòè öèôðó"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: Íåäîïóñòèìîå çíà÷åíèå ïðîöåíòîâ"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: Ñëåäèòü çà îòëè÷èÿìè ìîæíî íå áîëåå ÷åì â %<PRId64> áóôåðàõ"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: Íåâîçìîæíî ïðî÷èòàòü èëè çàïèñàòü âðåìåííûå ôàéëû"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: Íåâîçìîæíî ñîçäàòü ôàéëû îòëè÷èé"
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: Íåâîçìîæíî ïðî÷èòàòü âûâîä patch"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: Íåâîçìîæíî ïðî÷èòàòü âûâîä diff"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Àêòèâíûé áóôåð íå íàõîäèòñÿ â ðåæèìå îòëè÷èé"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: Áîëüøå íåò èçìåíÿåìûõ áóôåðîâ â ðåæèìå îòëè÷èé"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: Áîëüøå íåò áóôåðîâ â ðåæèìå îòëè÷èé"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr "E101:  ðåæèìå îòëè÷èé áîëåå äâóõ áóôåðîâ, íå ìîãó âûáðàòü"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Íå ìîãó íàéòè áóôåð \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Áóôåð \"%s\" íå íàõîäèòñÿ â ðåæèìå îòëè÷èé"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: Áóôåð íåîæèäàííî èçìåíèëñÿ"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Ýêðàíèðóþùèé ñèìâîë Escape íåëüçÿ èñïîëüçîâàòü â äèãðàôå"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: Ôàéë ñ ðàñêëàäêîé êëàâèàòóðû íå íàéäåí"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: Êîìàíäà :loadkeymap ïðèìåíåíà âíå ôàéëà ñöåíàðèÿ"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: ïóñòàÿ çàïèñü ðàñêëàäêè êëàâèàòóðû"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " Àâòîäîïîëíåíèå êëþ÷åâîãî ñëîâà (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " Ðåæèì ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " Àâòîäîïîëíåíèå öåëîé ñòðîêè (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " Àâòîäîïîëíåíèå èìåíè ôàéëà (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Àâòîäîïîëíåíèå ìåòêè (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " Àâòîäîïîëíåíèå øàáëîíà ïóòè (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " Àâòîäîïîëíåíèå îïðåäåëåíèÿ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Àâòîäîïîëíåíèå ïî ñëîâàðþ (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Àâòîäîïîëíåíèå ñèíîíèìîâ (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " Àâòîäîïîëíåíèå êîìàíäíîé ñòðîêè (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " Ïîëüçîâàòåëüñêîå àâòîäîïîëíåíèå (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " Omni-äîïîëíåíèå (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Ïðåäëîæåíèå èñïðàâëåíèÿ ïðàâîïèñàíèÿ (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " Ìåñòíîå àâòîäîïîëíåíèå êëþ÷åâîãî ñëîâà (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Êîíåö àáçàöà"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: Ôóíêöèÿ àâòîäîïîëíåíèÿ èçìåíèëà îêíî"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: Ôóíêöèÿ àâòîäîïîëíåíèÿ óäàëèëà òåêñò"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "Íå çàäàíî çíà÷åíèå îïöèè 'dictionary'"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "Íå çàäàíî çíà÷åíèå îïöèè 'thesaurus'"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "Ïðîñìîòð ñëîâàðÿ: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (âñòàâêà) Ïðîêðóòêà (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (çàìåíà) Ïðîêðóòêà (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "Ïðîñìîòð: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "Âûïîëíÿåòñÿ ïîèñê ñðåäè ìåòîê."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Äîáàâëåíèå"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- Ïîèñê..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "Èñõîäíîå ñëîâî"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "Ñëîâî èç äðóãîé ñòðîêè"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "Åäèíñòâåííîå ñîîòâåòñòâèå"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "ñîîòâåòñòâèå %d èç %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "ñîîòâåòñòâèå %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: Íåîæèäàííûå ñèìâîëû â :let"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: Èíäåêñ ñïèñêà çà ïðåäåëàìè äèàïàçîíà: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Íåîïðåäåë¸ííàÿ ïåðåìåííàÿ: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: Ïðîïóùåíà ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: Ïàðàìåòð %s äîëæåí áûòü ñïèñêîì"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Ïàðàìåòð %s äîëæåí áûòü ñïèñêîì èëè ñëîâàð¸ì"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Íåâîçìîæíî èñïîëüçîâàòü ïóñòîé êëþ÷ äëÿ ñëîâàðÿ"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: Òðåáóåòñÿ ñïèñîê"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: Òðåáóåòñÿ ñëîâàðü"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Íåò êëþ÷à â ñëîâàðå: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Ôóíêöèÿ %s óæå ñóùåñòâóåò. Äîáàâüòå !, ÷òîáû çàìåíèòü å¸."
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: Çàïèñü óæå ñóùåñòâóåò â ñëîâàðå"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: Òðåáóåòñÿ ññûëêà íà ôóíêöèþ"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Íåâîçìîæíî èñïîëüçîâàòü [:] ñî ñëîâàð¸ì"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: Íåïðàâèëüíûé òèï ïåðåìåííîé äëÿ %s="
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Íåäîïóñòèìîå èìÿ ïåðåìåííîé: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: Èñïîëüçîâàíèå ÷èñëà ñ ïëàâàþùåé òî÷êîé êàê ñòðîêè"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Öåëåé ìåíüøå ÷åì ýëåìåíòîâ ñïèñêà"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Öåëåé áîëüøå ÷åì ýëåìåíòîâ ñïèñêà"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "Äâîéíàÿ ; â ñïèñêå ïåðåìåííûõ"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: Íåâîçìîæíî îòîáðàçèòü ïåðåìåííûå äëÿ %s"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Èíäåêñèðîâàíèå âîçìîæíî òîëüêî ñïèñêà èëè ñëîâàðÿ"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] äîëæíî áûòü ïîñëåäíèì"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] òðåáóåò çíà÷åíèåì ñïèñîê"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: Ýëåìåíòîâ ñïèñêà-çíà÷åíèÿ áîëüøå ÷åì â öåëè"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: Ñïèñîê-çíà÷åíèå íå ñîäåðæèò äîñòàòî÷íî ýëåìåíòîâ"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Ïðîïóùåíî \"in\" ïîñëå :for"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: Ïðîïóùåíû ñêîáêè: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Íåò òàêîé ïåðåìåííîé: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ (ðàç)áëîêèðîâêè"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: Ïðîïóùåíî ':' ïîñëå '?'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Ñïèñîê ìîæíî ñðàâíèâàòü òîëüêî ñî ñïèñêîì"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ñïèñêîâ"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Ñëîâàðü ìîæíî ñðàâíèâàòü òîëüêî ñî ñëîâàð¸ì"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ñëîâàðÿ"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Ññûëêó íà ôóíêöèþ ìîæíî ñðàâíèâàòü òîëüêî ñ ññûëêîé íà ôóíêöèþ"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Íåäîïóñòèìàÿ îïåðàöèÿ äëÿ ññûëêè íà ôóíêöèþ"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Íåâîçìîæíî èñïîëüçîâàòü '%' ñ ÷èñëîì ñ ïëàâàþùåé òî÷êîé"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: Ïðîïóùåíà ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: Íåâîçìîæíî èíäåêñèðîâàòü ññûëêó íà ôóíêöèþ"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: Íå óêàçàíî èìÿ îïöèè: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: Íåèçâåñòíàÿ îïöèÿ: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: Ïðîïóùåíà êàâû÷êà: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: Ïðîïóùåíà êàâû÷êà: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: Ïðîïóùåíà çàïÿòàÿ â ñïèñêå: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Ïðîïóùåíî îêîí÷àíèå ñïèñêà ']': %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Ïðîïóùåíî äâîåòî÷èå â ñëîâàðå: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Ïîâòîð êëþ÷à â ñëîâàðå: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Ïðîïóùåíà çàïÿòàÿ â ñëîâàðå: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Ïðîïóùåíî îêîí÷àíèå ñëîâàðÿ '}': %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ îòîáðàæåíèÿ"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: Ïàðàìåòðû äëÿ ôóíêöèè %s çàäàíû íåâåðíî"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Íåäîñòàòî÷íî ïàðàìåòðîâ äëÿ ôóíêöèè %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: <SID> èñïîëüçóåòñÿ âíå ñöåíàðèÿ: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Âûçîâ ôóíêöèè dict áåç ñëîâàðÿ: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: Òðåáóåòñÿ öåëîå ÷èñëî èëè ñ ïëàâàþùåé òî÷êîé"
-
-#: ../eval.c:7503
-msgid "add() argument"
-msgstr "ïàðàìåòðà add()"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: Ñëèøêîì ìíîãî ïàðàìåòðîâ"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() ìîæåò èñïîëüçîâàòüñÿ òîëüêî â ðåæèìå Âñòàâêè"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "&Ok"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: Êëþ÷ óæå ñóùåñòâóåò: %s"
-
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "ïàðàìåòðà extend()"
-
-#: ../eval.c:8915
-msgid "map() argument"
-msgstr "ïàðàìåòðà map()"
-
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr "ïàðàìåòðà filter()"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ñòðîê: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: Íåèçâåñòíàÿ ôóíêöèÿ: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "Ôóíêöèÿ inputrestore() âûçûâàåòñÿ ÷àùå, ÷åì ôóíêöèÿ inputsave()"
-
-#: ../eval.c:10771
-msgid "insert() argument"
-msgstr "ïàðàìåòðà insert()"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: Äèàïàçîí íå äîïóñêàåòñÿ"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: Íåïðàâèëüíûå òèï äëÿ len()"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: Íóëåâîé øàã"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: Íà÷àëî ïîñëå êîíöà"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<ïóñòî>"
-
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr "ïàðàìåòðà remove()"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Ñëèøêîì ìíîãî ñèìâîëè÷åñêèõ ññûëîê (öèêë?)"
-
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr "ïàðàìåòðà reverse()"
-
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr "ïàðàìåòðà sort()"
-
-#: ../eval.c:13721
-msgid "uniq() argument"
-msgstr "ïàðàìåòðà uniq()"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Íåóäà÷íîå çàâåðøåíèå ôóíêöèè ñðàâíåíèÿ ïðè ñîðòèðîâêå"
-
-#: ../eval.c:13806
-msgid "E882: Uniq compare function failed"
-msgstr ""
-"E882: Íåóäà÷íîå çàâåðøåíèå ôóíêöèè ñðàâíåíèÿ ïðè ïðîâåðêå åäèíñòâåííîñòè"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(Íåïðàâèëüíî)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: Îøèáêà çàïèñè âî âðåìåííûé ôàéë"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: Èñïîëüçîâàíèå ÷èñëà ñ ïëàâàþùåé òî÷êîé êàê öåëîãî"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: Èñïîëüçîâàíèå ññûëêè íà ôóíêöèþ êàê ÷èñëà"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: Èñïîëüçîâàíèå ñïèñêà êàê ÷èñëà"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Èñïîëüçîâàíèå ñëîâàðÿ êàê ÷èñëà"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: Èñïîëüçîâàíèå ññûëêè íà ôóíêöèþ êàê ñòðîêè"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: Èñïîëüçîâàíèå ñïèñêà êàê ñòðîêè"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: Èñïîëüçîâàíèå ñëîâàðÿ êàê ñòðîêè"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Íåñîîòâåòñòâèå òèïà ïåðåìåííîé äëÿ: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Íåâîçìîæíî óäàëèòü ïåðåìåííóþ %s"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr ""
-"E704: Èìÿ ïåðåìåííîé ññûëêè íà ôóíêöèþ äîëæíî íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû: "
-"%s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Èìÿ ïåðåìåííîé êîíôëèêòóåò ñ ñóùåñòâóþùåé ôóíêöèåé: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: Çíà÷åíèå %s çàáëîêèðîâàíî"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "Íåèçâåñòíî"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: Íåâîçìîæíî èçìåíèòü çíà÷åíèå %s"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: Ñëèøêîì ãëóáîêî âëîæåííûå ïåðåìåííûå äëÿ êîïèðîâàíèÿ"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: Íåîïðåäåë¸ííàÿ ôóíêöèÿ: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: Ïðîïóùåíà '(': %s"
-
-#: ../eval.c:17293
-msgid "E862: Cannot use g: here"
-msgstr "E862: Çäåñü íåâîçìîæíî èñïîëüçîâàòü g:"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: Íåäîïóñòèìûé ïàðàìåòð: %s"
-
-#: ../eval.c:17323
-#, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E853: Ïîâòîðÿþùååñÿ èìÿ ïàðàìåòðà: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: Ïðîïóùåíà êîìàíäà :endfunction"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: Èìÿ ôóíêöèè êîíôëèêòóåò ñ ïåðåìåííîé: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: Íåâîçìîæíî ïåðåîïðåäåëèòü ôóíêöèþ %s, îíà èñïîëüçóåòñÿ"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Èìÿ ôóíêöèè íå ñîîòâåòñòâóåò èìåíè ôàéëà ñöåíàðèÿ: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: Òðåáóåòñÿ èìÿ ôóíêöèè"
-
-#: ../eval.c:17824
-#, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: Èìÿ ôóíêöèè äîëæíî íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû èëè \"s:\": %s"
-
-#: ../eval.c:17833
-#, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E884: Èìÿ ôóíêöèè íå ìîæåò ñîäåðæàòü äâîåòî÷èå: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: Íåâîçìîæíî óäàëèòü ôóíêöèþ %s, îíà èñïîëüçóåòñÿ"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: Ãëóáèíà âûçîâà ôóíêöèè áîëüøå, ÷åì çíà÷åíèå 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "âûçîâ %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ïðåðâàíà"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s âîçâðàùàåò #%<PRId64>"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s âîçâðàùàåò %s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "ïðîäîëæåíèå â %s"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: êîìàíäà :return âíå ôóíêöèè"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# ãëîáàëüíûå ïåðåìåííûå:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t ïîñëåäíèé ðàç îïöèÿ èçìåíåíà â "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "Íåò ñòàðûõ ôàéëîâ"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, Hex %02x, Octal %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, Hex %04x, Octal %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, Hex %08x, Octal %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: Ñòðîêè ïåðåìåùàþòñÿ ñàìè íà ñåáÿ"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "Ïåðåìåùåíà îäíà ñòðîêà"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "Ïåðåìåùåíî ñòðîê: %<PRId64>"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "Ïðîïóùåíî ÷åðåç ôèëüòð ñòðîê: %<PRId64>"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: Àâòîêîìàíäû *Filter* íå äîëæíû èçìåíÿòü àêòèâíûé áóôåð"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[Èçìåíåíèÿ íå ñîõðàíåíû]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s â ñòðîêå: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr ""
-"E136: viminfo: Ñëèøêîì ìíîãî îøèáîê, îñòàëüíàÿ ÷àñòü ôàéëà áóäåò ïðîïóùåíà"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "×òåíèå ôàéëà viminfo \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " èíôî"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " îòìåòîê"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " ñòàðûõ ôàéëîâ"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ÍÅÓÄÀ×ÍÎ"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Ïðàâà íà çàïèñü ôàéëà viminfo îòñóòñòâóþò: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Íåâîçìîæíî çàïèñàòü ôàéë viminfo %s!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "Çàïèñü ôàéëà viminfo \"%s\""
-
-#, c-format
-msgid "E886: Can't rename viminfo file to %s!"
-msgstr "E886: Íåâîçìîæíî ïåðåèìåíîâàòü ôàéë viminfo â %s!"
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Ýòîò ôàéë viminfo àâòîìàòè÷åñêè ñîçäàí Vim %s.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Åãî ìîæíî (îñòîðîæíî!) ðåäàêòèðîâàòü.\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Çíà÷åíèå îïöèè 'encoding' â ìîìåíò çàïèñè ôàéëà\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "Íåäîïóñòèìûé íà÷àëüíûé ñèìâîë"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "Çàïèñàòü ôàéë ÷àñòè÷íî?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: Äëÿ çàïèñè ÷àñòè áóôåðà èñïîëüçóéòå !"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "Ïåðåçàïèñàòü ñóùåñòâóþùèé ôàéë \"%s\"?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Ñâîï-ôàéë \"%s\" ñóùåñòâóåò, ïåðåçàïèñàòü?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Ñâîï-ôàéë ñóùåñòâóåò: %s (:silent! ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: Áóôåð %<PRId64> íå ñâÿçàí ñ èìåíåì ôàéëà"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: Ôàéë íå ñîõðàí¸í: çàïèñü îòêëþ÷åíà îïöèåé 'write'"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"Äëÿ \"%s\" âêëþ÷åíà îïöèÿ 'readonly'.\n"
-"Çàïèñàòü?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"Ôàéë \"%s\" èìååò ðåæèì äîñòóïà òîëüêî äëÿ ÷òåíèÿ.\n"
-"Íî, âîçìîæíî, ôàéë óäàñòñÿ çàïèñàòü.\n"
-"Õîòèòå ïîïðîáîâàòü?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr ""
-"E505: \"%s\" îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Àâòîêîìàíäû íåîæèäàííî óáèëè íîâûé áóôåð %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: Ïàðàìåòð êîìàíäû :z äîëæåí áûòü ÷èñëîì"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Èñïîëüçîâàíèå êîìàíä îáîëî÷êè íå äîïóñêàåòñÿ â rvim."
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Ðåãóëÿðíûå âûðàæåíèÿ íå ìîãóò ðàçäåëÿòüñÿ áóêâàìè"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "çàìåíèòü íà %s? (y/n/a/q/l/^E/^Y)"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(Ïðåðâàíî)"
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "Îäíî ñîîòâåòñòâèå"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "Îäíà çàìåíà"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> ñîîòâåòñòâèé"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> çàìåí"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " â îäíîé ñòðîêå"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " â %<PRId64> ñòð."
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: Êîìàíäà :global íå ìîæåò áûòü ðåêóðñèâíîé"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: Â êîìàíäå :global ïðîïóùåíî ðåãóëÿðíîå âûðàæåíèå"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "Ñîîòâåòñòâèå øàáëîíó íàéäåíî íà êàæäîé ñòðîêå: %s"
-
-#: ../ex_cmds.c:4510
-#, c-format
-msgid "Pattern not found: %s"
-msgstr "Øàáëîí íå íàéäåí: %s"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# Ïîñëåäíÿÿ ñòðîêà äëÿ çàìåíû:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: Ñïîêîéñòâèå, òîëüêî ñïîêîéñòâèå!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Ê ñîæàëåíèþ, ñïðàâêà '%s' äëÿ %s îòñóòñòâóåò"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Ê ñîæàëåíèþ ñïðàâêà äëÿ %s îòñóòñòâóåò"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Èçâèíèòå, ôàéë ñïðàâêè \"%s\" íå íàéäåí"
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: %s íå ÿâëÿåòñÿ êàòàëîãîì"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: Íåâîçìîæíî îòêðûòü %s äëÿ çàïèñè"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Íåâîçìîæíî îòêðûòü %s äëÿ ÷òåíèÿ"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: Ôàéëû ñïðàâêè èñïîëüçóþò ðàçíûå êîäèðîâêè äëÿ îäíîãî ÿçûêà: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Ïîâòîðÿþùàÿñÿ ìåòêà \"%s\" â ôàéëå %s/%s"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: Íåèçâåñòíàÿ êîìàíäà çíà÷êà %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: Ïðîïóùåíî èìÿ çíà÷êà"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Îïðåäåëåíî ñëèøêîì ìíîãî çíà÷êîâ"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: Íåïðàâèëüíûé òåêñò çíà÷êà: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: Íåèçâåñòíûé çíà÷îê: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: Ïðîïóùåí íîìåð çíà÷êà"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: Íåïðàâèëüíîå èìÿ áóôåðà: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: Íåïðàâèëüíûé ID çíà÷êà: %<PRId64>"
-
-#, c-format
-msgid "E885: Not possible to change sign %s"
-msgstr "E885: Íåâîçìîæíî èçìåíèòü çíà÷îê %s"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (íå ïîääåðæèâàåòñÿ)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[Óäàëåíî]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "Âêëþ÷¸í ðåæèì îòëàäêè. Äëÿ ïðîäîëæåíèÿ íàáåðèòå \"cont\""
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "ñòðîêà %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "êîìàíäà: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "Òî÷êà îñòàíîâêè â \"%s%s\" ñòð. %<PRId64>"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: Òî÷êà îñòàíîâêè íå íàéäåíà: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "Òî÷êè îñòàíîâêè íå îïðåäåëåíû"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s ñòð. %<PRId64>"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Ïåðâîå èñïîëüçîâàíèå \":profile start {èìÿ-ôàéëà}\""
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "Ñîõðàíèòü èçìåíåíèÿ â \"%s\"?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "Áåç èìåíè"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Íåñîõðàí¸ííûå èçìåíåíèÿ â áóôåðå \"%s\""
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr ""
-"Ïðåäóïðåæäåíèå: Íåîæèäàííûé ïåðåõîä â äðóãîé áóôåð (ïðîâåðüòå àâòîêîìàíäû)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Äëÿ ðåäàêòèðîâàíèÿ äîñòóïåí òîëüêî îäèí ôàéë"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: Ýòî ïåðâûé ôàéë"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: Ýòî ïîñëåäíèé ôàéë"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: Êîìïèëÿòîð íå ïîääåðæèâàåòñÿ: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "Ïîèñê \"%s\" â \"%s\""
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "Ïîèñê \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "íå íàéäåíî â 'runtimepath': \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "Íåëüçÿ ñ÷èòàòü êàòàëîã: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "íåâîçìîæíî ñ÷èòàòü \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "ñòðîêà %<PRId64>: íåâîçìîæíî ñ÷èòàòü \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "ñ÷èòûâàíèå ñöåíàðèÿ \"%s\""
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "ñòðîêà %<PRId64>: ñ÷èòûâàíèå \"%s\""
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "ñ÷èòûâàíèå ñöåíàðèÿ %s çàâåðøåíî"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "ðåæèìíàÿ ñòðîêà"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd ïàðàìåòð"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c ïàðàìåòð"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "ïåðåìåííàÿ îêðóæåíèÿ"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "îáðàáîò÷èê îøèáêè"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr ""
-"W15: Ïðåäóïðåæäåíèå: íåïðàâèëüíûé ðàçäåëèòåëü ñòðîêè. Âîçìîæíî ïðîïóùåíî ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: Êîìàíäà :scriptencoding èñïîëüçóåòñÿ âíå ôàéëà ñöåíàðèÿ"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: Êîìàíäà :finish èñïîëüçóåòñÿ âíå ôàéëà ñöåíàðèÿ"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Àêòèâíûé %sÿçûê: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Íåâîçìîæíî ñìåíèòü ÿçûê íà \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Ïåðåõîä â ðåæèì Ex. Äëÿ ïåðåõîäà â Îáû÷íûé ðåæèì íàáåðèòå \"visual\""
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: Â êîíöå ôàéëà"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: Ñëèøêîì ðåêóðñèâíàÿ êîìàíäà"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Èñêëþ÷èòåëüíàÿ ñèòóàöèÿ íå îáðàáîòàíà: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "Êîíåö ñ÷èòàííîãî ôàéëà"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "Êîíåö ôóíêöèè"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: Íåîäíîçíà÷íîå èñïîëüçîâàíèå êîìàíäû ïîëüçîâàòåëÿ"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: Ýòî íå êîìàíäà ðåäàêòîðà"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: Çàäàí îáðàòíûé äèàïàçîí"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "Çàäàí îáðàòíûé äèàïàçîí, ìåíÿåì ãðàíèöû ìåñòàìè"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: Èñïîëüçóéòå w èëè w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: Èçâèíèòå, ýòà êîìàíäà íåäîñòóïíà â äàííîé âåðñèè"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Ðàçðåøåíî èñïîëüçîâàòü òîëüêî îäíî èìÿ ôàéëà"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "1 ôàéë îæèäàåò ðåäàêòèðîâàíèÿ. Âûéòè?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "Åñòü íåîòðåäàêòèðîâàííûå ôàéëû (%d). Âûéòè?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: 1 ôàéë îæèäàåò ðåäàêòèðîâàíèÿ."
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: Åñòü íåîòðåäàêòèðîâàííûå ôàéëû (%<PRId64>)."
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: Êîìàíäà óæå ñóùåñòâóåò. Äîáàâüòå ! äëÿ çàìåíû."
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Èìÿ Ïàðàì. Äèàï. Äîïîëí. Îïðåäåëåíèå"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "Êîìàíäû, îïðåäåë¸ííûå ïîëüçîâàòåëåì, íå îáíàðóæåíû."
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: Ïàðàìåòð íå çàäàí"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: Íåïðàâèëüíîå êîëè÷åñòâî ïàðàìåòðîâ"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ×èñëî-ïðèñòàâêó íåëüçÿ óêàçûâàòü äâàæäû"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: Íåïðàâèëüíîå çíà÷åíèå ÷èñëà-ïðèñòàâêè ïî óìîë÷àíèþ"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: Äëÿ -complete òðåáóåòñÿ óêàçàòü ïàðàìåòð"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Íåïðàâèëüíûé àòðèáóò: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: Íåïðàâèëüíîå èìÿ êîìàíäû"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Êîìàíäà ïîëüçîâàòåëÿ äîëæíà íà÷èíàòüñÿ ñ çàãëàâíîé áóêâû"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr ""
-"E841: Çàðåçåðâèðîâàííîå èìÿ íå ìîæåò èñïîëüçîâàòüñÿ äëÿ êîìàíä ïîëüçîâàòåëÿ"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Íåò òàêîé êîìàíäû ïîëüçîâàòåëÿ: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Íåïðàâèëüíîå çíà÷åíèå äîïîëíåíèÿ: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr ""
-"E468: Ïàðàìåòð àâòîäîïîëíåíèÿ ìîæíî èñïîëüçîâàòü òîëüêî ñ îñîáûì äîïîëíåíèåì"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Îñîáîå äîïîëíåíèå òðåáóåò óêàçàíèÿ ïàðàìåòðà ôóíêöèè"
-
-#: ../ex_docmd.c:5257
-#, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: Íåâîçìîæíî íàéòè öâåòîâóþ ñõåìó '%s'"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "Ïðèâåòñòâóåì âàñ, ïîëüçîâàòåëü Vim!"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: Íåëüçÿ çàêðûòü ïîñëåäíþþ âêëàäêó"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "Íà ýêðàíå âñåãî îäíà âêëàäêà"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Âêëàäêà %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "Áåç ñâîï-ôàéëà"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr ""
-"E747: Ñìåíà êàòàëîãà íåâîçìîæíà, áóôåð èçìåí¸í (äîáàâüòå !, ÷òîáû îáîéòè "
-"ïðîâåðêó)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: Íåò ïðåäûäóùåãî êàòàëîãà"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: Íåèçâåñòíî"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: Êîìàíäà :winsize òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: Â äàííîé ñèñòåìå îïðåäåëåíèå ïîëîæåíèÿ îêíà íå ðàáîòàåò"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: Êîìàíäà :winpos òðåáóåò óêàçàíèÿ äâóõ ÷èñëîâûõ ïàðàìåòðîâ"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: Íåâîçìîæíî ñîçäàòü êàòàëîã: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ñóùåñòâóåò (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Íåâîçìîæíî îòêðûòü äëÿ çàïèñè \"%s\""
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: Ïàðàìåòð äîëæåí áûòü ïðÿìîé/îáðàòíîé êàâû÷êîé èëè áóêâîé"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: Ñëèøêîì ãëóáîêàÿ ðåêóðñèÿ ïðè èñïîëüçîâàíèè êîìàíäû :normal"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: Íåò ñîñåäíåãî èìåíè ôàéëà äëÿ çàìåíû '#'"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: Íåò àâòîêîìàíäíîãî èìåíè ôàéëà äëÿ çàìåíû \"<afile>\""
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: Íåò àâòîêîìàíäíîãî íîìåðà áóôåðà äëÿ çàìåíû \"<abuf>\""
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: Íåò àâòîêîìàíäíîãî èìåíè ñîîòâåòñòâèÿ äëÿ çàìåíû \"<amatch>\""
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Íåò èìåíè ôàéëà :source äëÿ çàìåíû \"<sfile>\""
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: Íåò íîìåðà ñòðîêè äëÿ èñïîëüçîâàíèÿ \"<slnum>\""
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Ïóñòîå èìÿ ôàéëà äëÿ '%' èëè '#', âîçìîæíî òîëüêî c \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: Ðåçóëüòàòîì âûðàæåíèÿ ÿâëÿåòñÿ ïóñòàÿ ñòðîêà"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: Íåâîçìîæíî îòêðûòü ôàéë viminfo äëÿ ÷òåíèÿ"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr ""
-"E608: Íåâîçìîæíî âûïîëíèòü êîìàíäó :throw äëÿ èñêëþ÷åíèé ñ ïðèñòàâêîé 'Vim'"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Èñêëþ÷èòåëüíàÿ ñèòóàöèÿ: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Çàâåðøåíà îáðàáîòêà èñêëþ÷èòåëüíîé ñèòóàöèè: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "Èñêëþ÷èòåëüíàÿ ñèòóàöèÿ ïðîèãíîðèðîâàíà: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, ñòðîêà %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "Îáðàáîòêà èñêëþ÷èòåëüíîé ñèòóàöèè: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%s âûïîëíÿåò îæèäàíèå"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%s âîçîáíîâëåíî"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%s ïðîïóùåíî"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Èñêëþ÷èòåëüíàÿ ñèòóàöèÿ"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "Îøèáêà è ïðåðûâàíèå"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "Îøèáêà"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "Ïðåðûâàíèå"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: Ñëèøêîì ãëóáîêî âëîæåííûé :if"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif áåç :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else áåç :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif áåç :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: Îáíàðóæåíî íåñêîëüêî :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif ïîñëå :else"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: Ñëèøêîì ãëóáîêîå âëîæåíèå :while èëè :for"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue áåç :while èëè :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break áåç :while èëè :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: Èñïîëüçîâàíèå :endfor ñ :while"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: Èñïîëüçîâàíèå :endwhile ñ :for"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: Ñëèøêîì ãëóáîêî âëîæåííûé :try"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch áåç :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch áåç :finally"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally áåç :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: Îáíàðóæåíî íåñêîëüêî :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry áåç :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: Êîìàíäà :endfunction ìîæåò èñïîëüçîâàòüñÿ òîëüêî âíóòðè ôóíêöèè"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Ñåé÷àñ íå äîïóñêàåòñÿ ðåäàêòèðîâàíèå äðóãîãî áóôåðà"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Ñåé÷àñ íå äîïóñêàåòñÿ èçìåíåíèå èíôîðìàöèè î áóôåðå"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "èìÿ ìåòêè"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " òèï ôàéëà\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "çíà÷åíèå îïöèè 'history' ðàâíî íóëþ"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s, èñòîðèÿ (íà÷èíàÿ îò ñâåæåãî ê ñòàðîìó):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "Êîìàíäíàÿ ñòðîêà"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "Ñòðîêà ïîèñêà"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "Âûðàæåíèå"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "Ñòðîêà ââîäà"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar áîëüøå äëèíû êîìàíäû"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Óäàëåíî àêòèâíîå îêíî èëè áóôåð"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr "E854: ñëèøêîì áîëüøîé ïóòü äëÿ àâòîäîïîëíåíèÿ"
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: Íåïðàâèëüíî çàäàí ïóòü: '**[÷èñëî]' äîëæíî áûòü ëèáî â êîíöå ïóòè, "
-"ëèáî çà íèì äîëæíî ñëåäîâàòü '%s'"
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Êàòàëîã \"%s\" íå íàéäåí â ïóòè äëÿ ñìåíû êàòàëîãà"
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Ôàéë \"%s\" â èçâåñòíûõ êàòàëîãàõ íå íàéäåí"
-
-msgid "List or number required"
-msgstr "Òðåáóåòñÿ ñïèñîê èëè ÷èñëî"
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Â ïóòè ñìåíû êàòàëîãà áîëüøå íåò êàòàëîãîâ \"%s\""
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Â èçâåñòíûõ êàòàëîãàõ áîëüøå íåò ôàéëîâ \"%s\""
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Àâòîêîìàíäû èçìåíèëè áóôåð èëè èìÿ áóôåðà"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "Íåäîïóñòèìîå èìÿ ôàéëà"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "ÿâëÿåòñÿ êàòàëîãîì"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "íå ÿâëÿåòñÿ ôàéëîì"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[Íîâûé ôàéë]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[Íîâûé ÊÀÒÀËÎÃ]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Ôàéë ñëèøêîì áîëüøîé]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[Äîñòóï çàïðåù¸í]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200:  ðåçóëüòàòå âûïîëíåíèÿ àâòîêîìàíä *ReadPre ôàéë ñòàë íå÷èòàåìûì"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Àâòîêîìàíäû *ReadPre íå äîëæíû èçìåíÿòü àêòèâíûé áóôåð"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: ×òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202:  ðåçóëüòàòå ïðåîáðàçîâàíèÿ ôàéë ñòàë íå÷èòàåìûì!"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/ãíåçäî]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[ãíåçäî]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr "[ñïåöèàëüíûé ñèìâîëüíûé]"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[ïðîïóùåíû ñèìâîëû CR]"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[äëèííûå ñòðîêè ðàçáèòû]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[ÁÅÇ ïðåîáðàçîâàíèé]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[ïåðåêîäèðîâàíî]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[ÎØÈÁÊÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß â ñòðîêå %<PRId64>]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[ÍÅÄÎÏÓÑÒÈÌÛÉ ÁÀÉÒ â ñòðîêå %<PRId64>]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[ÎØÈÁÊÈ ×ÒÅÍÈß]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "Âðåìåííûé ôàéë äëÿ ïåðåêîäèðîâàíèÿ íå íàéäåí"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "Ïðåîáðàçîâàíèå ñ ïîìîùüþ 'charconvert' íå âûïîëíåíî"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "íåâîçìîæíî ïðî÷èòàòü âûâîä 'charconvert'"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: Íåò ïîäõîäÿùèõ àâòîêîìàíä äëÿ áóôåðà acwrite"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr ""
-"E203: Áóôåð, êîòîðûé òðåáîâàëîñü çàïèñàòü, óäàë¸í èëè âûãðóæåí àâòîêîìàíäîé"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Êîëè÷åñòâî ñòðîê èçìåíåíî àâòîêîìàíäîé íåîæèäàííûì îáðàçîì"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "íå ÿâëÿåòñÿ ôàéëîì èëè óñòðîéñòâîì, äîñòóïíûì äëÿ çàïèñè"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr ""
-"E506: Çàïèñü â ðåçåðâíûé ôàéë íåâîçìîæíà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr ""
-"E507: Îøèáêà çàêðûòèÿ ðåçåðâíîãî ôàéëà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr ""
-"E508: Íåâîçìîæíî ïðî÷èòàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr ""
-"E509: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr ""
-"E510: Íåâîçìîæíî ñîçäàòü ðåçåðâíûé ôàéë (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: Âðåìåííûé ôàéë äëÿ çàïèñè íå íàéäåí"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr ""
-"E213: Ïåðåêîäèðîâêà íåâîçìîæíà (äîáàâüòå ! äëÿ çàïèñè áåç ïåðåêîäèðîâêè)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: Íåâîçìîæíî îòêðûòü ñâÿçàííûé ôàéë äëÿ çàïèñè"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: Íåâîçìîæíî îòêðûòü ôàéë äëÿ çàïèñè"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Íå óäàëîñü âûïîëíèòü ôóíêöèþ fsync()"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: Îïåðàöèÿ çàêðûòèÿ íå óäàëàñü"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr ""
-"E513: Îøèáêà çàïèñè, ïðåîáðàçîâàíèå íå óäàëîñü (î÷èñòèòå 'fenc', ÷òîáû "
-"îáîéòè)"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: Îøèáêà çàïèñè, ïðåîáðàçîâàíèå íå óäàëîñü íà ñòðîêå %<PRId64> (î÷èñòèòå "
-"'fenc', ÷òîáû îáîéòè)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: Îøèáêà çàïèñè (íåò ñâîáîäíîãî ìåñòà?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " ÎØÈÁÊÀ ÏÐÅÎÁÐÀÇÎÂÀÍÈß"
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr " íà ñòðîêå %<PRId64>;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[Óñòðîéñòâî]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[Íîâûé]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [ä]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " äîáàâëåíî"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [ç]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " çàïèñàíî"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Ðåæèì çàïëàòêè: íåâîçìîæíî ñîõðàíåíèå èñõîäíîãî ôàéëà"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr ""
-"E206: Ðåæèì çàïëàòêè: íåâîçìîæíî ñìåíèòü ïàðàìåòðû ïóñòîãî èñõîäíîãî ôàéëà"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: Íåâîçìîæíî óäàëèòü ðåçåðâíûé ôàéë"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ: Èñõîäíûé ôàéë ìîæåò áûòü óòðà÷åí èëè ïîâðåæä¸í\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "íå âûõîäèòå èç ðåäàêòîðà, ïîêà ôàéë íå áóäåò óñïåøíî çàïèñàí!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[ôîðìàò dos]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[ôîðìàò mac]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[ôîðìàò unix]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 ñòðîêà, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "ñòðîê: %<PRId64>, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 ñèìâîë"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "ñèìâîëîâ: %<PRId64>"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[Íåçàâåðø¸ííàÿ ïîñëåäíÿÿ ñòðîêà]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ: Ôàéë èçìåí¸í ñ ìîìåíòà ÷òåíèÿ!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "Ñåðü¸çíî õîòèòå çàïèñàòü â ýòîò ôàéë"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: Îøèáêà çàïèñè â \"%s\""
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: Îøèáêà çàêðûòèÿ \"%s\""
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: Îøèáêà ÷òåíèÿ \"%s\""
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: Áóôåð óäàë¸í ïðè âûïîëíåíèè àâòîêîìàíäû FileChangedShell"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Ôàéë \"%s\" áîëüøå íå äîñòóïåí"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr ""
-"W12: Ïðåäóïðåæäåíèå: ôàéë \"%s\" è áóôåð Vim áûëè èçìåíåíû íåçàâèñèìî äðóã "
-"îò äðóãà"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "Ñì. \":help W12\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr ""
-"W11: Ïðåäóïðåæäåíèå: ôàéë \"%s\" áûë èçìåí¸í ïîñëå íà÷àëà ðåäàêòèðîâàíèÿ"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "Ñì. \":help W11\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr ""
-"W16: Ïðåäóïðåæäåíèå: ðåæèì äîñòóïà ê ôàéëó \"%s\" áûë èçìåí¸í ïîñëå íà÷àëà "
-"ðåäàêòèðîâàíèÿ"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "Ñì. \":help W16\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr ""
-"W13: Ïðåäóïðåæäåíèå: ôàéë \"%s\" áûë ñîçäàí ïîñëå íà÷àëà ðåäàêòèðîâàíèÿ"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "Ïðåäóïðåæäåíèå"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"&OK\n"
-"&L Çàãðóçèòü ôàéë"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Íåâîçìîæíî ïîäãîòîâèòüñÿ ê ïåðåçàãðóçêå \"%s\""
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: Íåâîçìîæíî âûïîëíèòü ïåðåçàãðóçêó \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--Óäàëåíî--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "àâòî-óäàëåíèå àâòîêîìàíäû: %s <áóôôåð=%d>"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: Ãðóïïà \"%s\" íå ñóùåñòâóåò"
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: Íåäîïóñòèìûå ñèìâîëû ïîñëå *: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: Íåñóùåñòâóþùåå ñîáûòèå: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: Íåñóùåñòâóþùàÿ ãðóïïà èëè ñîáûòèå: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Àâòîêîìàíäû ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: íåïðàâèëüíûé íîìåð áóôåðà "
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Íåâîçìîæíî âûïîëíèòü àâòîêîìàíäû äëÿ ÂÑÅÕ ñîáûòèé"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "Íåò ïîäõîäÿùèõ àâòîêîìàíä"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: ñëèøêîì ãëóáîêî âëîæåííûå àâòîêîìàíäû"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s Àâòîêîìàíäû äëÿ \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Âûïîëíåíèå %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "àâòîêîìàíäà %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: Ïðîïóùåíà {."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: Ïðîïóùåíà }."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: Ñêëàäîê íå îáíàðóæåíî"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr ""
-"E350: Ñêëàäêà íå ìîæåò áûòü ñîçäàíà ñ òåêóùèì çíà÷åíèåì îïöèè 'foldmethod'"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr ""
-"E351: Ñêëàäêà íå ìîæåò áûòü óäàëåíà ñ òåêóùèì çíà÷åíèåì îïöèè 'foldmethod'"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--%3ld ñòðîê â ñêëàäêå"
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Äîáàâëåíèå â áóôåð ÷òåíèÿ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: Ðåêóðñèâíàÿ ïðèâÿçêà"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: Óæå åñòü ãëîáàëüíîå ñîêðàùåíèå äëÿ %s"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: Óæå åñòü ãëîáàëüíàÿ ïðèâÿçêà äëÿ %s"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: Óæå åñòü ñîêðàùåíèå äëÿ %s"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: Óæå åñòü ïðèâÿçêà äëÿ %s"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "Ñîêðàùåíèÿ íå íàéäåíû"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "Ïðèâÿçêè íå íàéäåíû"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: íåäîïóñòèìûé ðåæèì"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "-- Íåò ñòðîê â áóôåðå --"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: Âûïîëíåíèå êîìàíäû ïðåðâàíî"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: Òðåáóåòñÿ óêàçàòü ïàðàìåòð"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: Ïîñëå \\ äîëæåí èäòè ñèìâîë /, ? èëè &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr ""
-"E11: Íåäîïóñòèìî â îêíå êîìàíäíîé ñòðîêè; <CR> âûïîëíåíèå, CTRL-C âûõîä"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: Êîìàíäà íå äîïóñêàåòñÿ â exrc/vimrc â òåêóùåì êàòàëîãå èëè ïîèñêå ìåòîê"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: Îòñóòñòâóåò êîìàíäà :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: Îòñóòñòâóåò êîìàíäà :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: Îòñóòñòâóåò êîìàíäà :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: Îòñóòñòâóåò êîìàíäà :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: Êîìàíäà :endwhile áåç ïàðíîé êîìàíäû :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor áåç :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: Ôàéë ñóùåñòâóåò (äîáàâüòå !, ÷òîáû ïåðåçàïèñàòü)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: Íå óäàëîñü âûïîëíèòü êîìàíäó"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: Âíóòðåííÿÿ îøèáêà"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "Ïðåðâàíî"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: Íåäîïóñòèìûé àäðåñ"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: Íåäîïóñòèìûé ïàðàìåòð"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: Íåäîïóñòèìûé ïàðàìåòð: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: Íåäîïóñòèìîå âûðàæåíèå: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: Íåäîïóñòèìûé äèàïàçîí"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: Íåäîïóñòèìàÿ êîìàíäà"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ÿâëÿåòñÿ êàòàëîãîì"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Íåäîïóñòèìûé ðàçìåð ïðîêðóòêè"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Íåóäà÷íûé âûçîâ ôóíêöèè \"%s()\" èç áèáëèîòåêè"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: Îòìåòêà óêàçûâàåò íà íåïðàâèëüíûé íîìåð ñòðîêè"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: Îòìåòêà íå îïðåäåëåíà"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: Èçìåíåíèÿ íåâîçìîæíû, òàê êàê îòêëþ÷åíà îïöèÿ 'modifiable'"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: Ñëèøêîì ãëóáîêî âëîæåííûå ñöåíàðèè"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: Ñîñåäíèé ôàéë íå ñóùåñòâóåò"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: Íåò òàêîãî ñîêðàùåíèÿ"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ! íå äîïóñêàåòñÿ"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr ""
-"E25: Âîçìîæíîñòü èñïîëüçîâàíèÿ ãðàôè÷åñêîãî èíòåðôåéñà âûêëþ÷åíà ïðè "
-"êîìïèëÿöèè"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: Ãðóïïà ïîäñâåòêè ñèíòàêñèñà %s íå ñóùåñòâóåò"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: Ïîêà íåò âñòàâëåííîãî òåêñòà"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: Ïðåäûäóùåé êîìàíäíîé ñòðîêè íåò"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: Òàêîé ïðèâÿçêè íå ñóùåñòâóåò"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: Íåò ñîîòâåòñòâèÿ"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: Íåò ñîîòâåòñòâèÿ: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: Íåò èìåíè ôàéëà"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: Íåò ïðåäûäóùåãî ðåãóëÿðíîãî âûðàæåíèÿ äëÿ çàìåíû"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: Íåò ïðåäûäóùåé êîìàíäû"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: Íåò ïðåäûäóùåãî ðåãóëÿðíîãî âûðàæåíèÿ"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: Èñïîëüçîâàíèå äèàïàçîíà íå äîïóñêàåòñÿ"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: Íåäîñòàòî÷íî ìåñòà"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: Íåâîçìîæíî ñîçäàòü ôàéë %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: Íåâîçìîæíî ïîëó÷èòü èìÿ âðåìåííîãî ôàéëà"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: Íåâîçìîæíî îòêðûòü ôàéë %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: Íåâîçìîæíî ïðî÷èòàòü ôàéë %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Èçìåíåíèÿ íå ñîõðàíåíû (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Èçìåíåíèÿ íå ñîõðàíåíû]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: Íóëåâîé ïàðàìåòð"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: Òðåáóåòñÿ ÷èñëî"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: Íå óäàëîñü îòêðûòü ôàéë îøèáîê %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: Íå õâàòàåò ïàìÿòè!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "Øàáëîí íå íàéäåí"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: Øàáëîí íå íàéäåí: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: Ïàðàìåòð äîëæåí áûòü ïîëîæèòåëüíûì ÷èñëîì"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Âîçâðàò â ïðåäûäóùèé êàòàëîã íåâîçìîæåí"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: Íåò îøèáîê"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: Íåò ñïèñêà ðàñïîëîæåíèé"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: Ïîâðåæäåíà ñòðîêà ñîîòâåòñòâèÿ"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: Ïðîãðàììà îáðàáîòêè ðåãóëÿðíûõ âûðàæåíèé ïîâðåæäåíà"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: Âêëþ÷åíà îïöèÿ 'readonly' (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Íåâîçìîæíî èçìåíèòü ïåðåìåííóþ òîëüêî äëÿ ÷òåíèÿ \"%s\""
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Íåâîçìîæíî èçìåíèòü ïåðåìåííóþ â ïåñî÷íèöå: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: Îøèáêà ïðè ÷òåíèè ôàéëà îøèáîê"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: Íå äîïóñêàåòñÿ â ïåñî÷íèöå"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: Çäåñü íå ðàçðåøåíî"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: Äàííûé ðåæèì ýêðàíà íå ïîääåðæèâàåòñÿ"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: Íåäîïóñòèìûé ðàçìåð ïðîêðóòêè"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: Çíà÷åíèåì îïöèè 'shell' ÿâëÿåòñÿ ïóñòàÿ ñòðîêà"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: Íåâîçìîæíî ïðî÷èòàòü äàííûå î çíà÷êàõ!"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: Îøèáêà çàêðûòèÿ ñâîï-ôàéëà"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: Ñòåê ìåòîê ïóñòîé"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: Ñëèøêîì ñëîæíàÿ êîìàíäà"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Ñëèøêîì äëèííîå èìÿ"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: Ñëèøêîì ìíîãî ñèìâîëîâ ["
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: Ñëèøêîì ìíîãî èì¸í ôàéëîâ"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: Ëèøíèå ñèìâîëû íà õâîñòå"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: Íåèçâåñòíàÿ îòìåòêà"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: Íåâîçìîæíî âûïîëíèòü ïîäñòàíîâêó ïî ìàñêå"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr ""
-"E591: Çíà÷åíèå îïöèè 'winheight' íå ìîæåò áûòü ìåíüøå çíà÷åíèÿ 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr ""
-"E592: Çíà÷åíèå îïöèè 'winwidth' íå ìîæåò áûòü ìåíüøå çíà÷åíèÿ 'winminwidth'"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: Îøèáêà ïðè çàïèñè"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "Íóëåâîå çíà÷åíèå ñ÷¸ò÷èêà"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: Èñïîëüçîâàíèå <SID> âíå êîíòåêñòà ñöåíàðèÿ"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: Âíóòðåííÿÿ îøèáêà: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Øàáëîí èñïîëüçóåò áîëüøå ïàìÿòè ÷åì 'maxmempattern'"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: Ïóñòîé áóôåð"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: Íåïðàâèëüíàÿ ñòðîêà ïîèñêà èëè ðàçäåëèòåëü"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ôàéë çàãðóæåí â äðóãîì áóôåðå"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: Îïöèÿ '%s' íå óñòàíîâëåíà"
-
-#: ../globals.h:1111
-msgid "E850: Invalid register name"
-msgstr "E850: Íåäîïóñòèìîå èìÿ ðåãèñòðà"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "Ïîèñê áóäåò ïðîäîëæåí ñ ÊÎÍÖÀ äîêóìåíòà"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "Ïîèñê áóäåò ïðîäîëæåí ñ ÍÀ×ÀËÀ äîêóìåíòà"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: Ïðîïóùåíî äâîåòî÷èå"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: Íåäîïóñòèìûé êîìïîíåíò"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: Òðåáóåòñÿ óêàçàòü öèôðó"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "Ñòðàíèöà %d"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "Ïå÷àòàòü íå÷åãî"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Ïå÷àòü ñòð. %d (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Êîïèÿ %d èç %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "Íàïå÷àòàíî: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "Ïå÷àòü ïðåêðàùåíà"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Îøèáêà çàïèñè â ôàéë PostScript"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Íåâîçìîæíî ïðî÷èòàòü ôàéë ðåñóðñîâ PostScript \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Ôàéë \"%s\" íå ÿâëÿåòñÿ ôàéëîì ðåñóðñîâ PostScript"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Ôàéë \"%s\" íå ÿâëÿåòñÿ äîïóñòèìûì ôàéëîì ðåñóðñîâ PostScript"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Ôàéë ðåñóðñîâ \"%s\" íåèçâåñòíîé âåðñèè"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Íåñîâìåñòèìûå ìíîãîáàéòîâàÿ êîäèðîâêà è íàáîð ñèìâîëîâ."
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset íå ìîæåò áûòü ïóñòûì ïðè ìíîãîáàéòîâîé êîäèðîâêå."
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Íåò îïðåäåëåíèÿ øðèôòà ïî óìîë÷àíèþ äëÿ ìíîãîáàéòîâîé ïå÷àòè."
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Íåâîçìîæíî îòêðûòü ôàéë PostScript"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"prolog.ps\" íå íàéäåí"
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"cidfont.ps\" íå íàéäåí"
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Ôàéë ðåñóðñîâ PostScript \"%s.ps\" íå íàéäåí"
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Íåâîçìîæíî ïðåîáðàçîâàòü â êîäèðîâêó ïå÷àòü \"%s\""
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "Îòïðàâêà íà ïå÷àòü..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Íå óäàëîñü âûïîëíèòü ïå÷àòü ôàéëà PostScript"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "Çàäàíèå íà ïå÷àòü îòïðàâëåíî."
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Äîáàâèòü íîâóþ áàçó äàííûõ"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "Çàïðîñ ïî øàáëîíó"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "Ïîêàçàòü ýòî ñîîáùåíèå"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "Óáèòü ñîåäèíåíèå"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "Çàíîâî èíèöèàëèçèðîâàòü âñå ñîåäèíåíèÿ"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Ïîêàçàòü ñîåäèíåíèÿ"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Èñïîëüçîâàíèå: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Ýòà êîìàíäà cscope íå ïîääåðæèâàåò ðàçäåëåíèå îêíà.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Èñïîëüçîâàíèå: cstag <èìÿ>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ìåòêà íå íàéäåíà"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: Îøèáêà stat(%s): %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s íå ÿâëÿåòñÿ êàòàëîãîì èëè èìåíåì áàçû cscope"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Äîáàâëåíà áàçà äàííûõ cscope %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: Îøèáêà ïîëó÷åíèÿ èíôîðìàöèè îò ñîåäèíåíèÿ cscope %<PRId64>"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: Íåèçâåñòíûé òèï ïîèñêà cscope"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Íåâîçìîæíî ñîçäàòü òðóáó äëÿ cscope"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Íåâîçìîæíî âûïîëíèòü fork() äëÿ cscope"
-
-#: ../if_cscope.c:849
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü setpgid"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü exec"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü fdopen äëÿ to_fp"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: íå óäàëîñü âûïîëíèòü fdopen äëÿ fr_fp"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Íå óäàëîñü çàïóñòèòü ïðîöåññ cscope"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: Ñîåäèíåíèé ñ cscope íå ñîçäàíî"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: Íåïðàâèëüíûé ôëàã cscopequickfix %c äëÿ %c"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: Íå íàéäåíî ñîîòâåòñòâèé ïî çàïðîñó cscope %s äëÿ %s"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "Êîìàíäû cscope:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (èñïîëüçîâàíèå: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: Íàéòè ôóíêöèè âûçûâàþùèå ýòó ôóíêöèþ\n"
-" d: Íàéòè ôóíêöèè âûçûâàåìûå ýòîé ôóíêöèåé\n"
-" e: Íàéòè ýòîò øàáëîí egrep\n"
-" f: Íàéòè ýòîò ôàéë\n"
-" g: Íàéòè ýòî îïðåäåëåíèå\n"
-" i: Íàéòè ôàéëû âêëþ÷àþùèå (#include) ýòîò ôàéë\n"
-" s: Íàéòè ýòîò C-ñèìâîë\n"
-" t: Íàéòè ýòó òåêñòîâóþ ñòðîêó\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: Äàííàÿ áàçà äàííûõ cscope óæå ïîäñîåäèíåíà"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: Ñîåäèíåíèå ñ cscope %s íå îáíàðóæåíî"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "ñîåäèíåíèå ñ cscope %s çàêðûòî"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: Êðèòè÷åñêàÿ îøèáêà â cs_manage_matches"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Ìåòêà cscope: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ñòðîêà"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "èìÿ ôàéëà / êîíòåêñò / ñòðîêà\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Îøèáêà cscope: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "Ïåðåçàãðóçêà âñåõ áàç äàííûõ cscope"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "ñîåäèíåíèÿ ñ cscope îòñóòñòâóþò\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid áàçà äàííûõ íà÷àëüíûé ïóòü\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "Íåèçâåñòíûé íåîáÿçàòåëüíûé ïàðàìåòð"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "Ñëèøêîì ìíîãî ïàðàìåòðîâ ðåäàêòèðîâàíèÿ"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "Ïðîïóùåí ïàðàìåòð ïîñëå"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "Ìóñîð ïîñëå íåîáÿçàòåëüíîãî ïàðàìåòðà"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr ""
-"Ñëèøêîì ìíîãî ïàðàìåòðîâ \"+êîìàíäà\", \"-c êîìàíäà\" èëè \"--cmd êîìàíäà\""
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "Íåäîïóñòèìûé ïàðàìåòð äëÿ"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "Ôàéëîâ äëÿ ðåäàêòèðîâàíèÿ: %d\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "Ïîïûòêà ïîâòîðíîãî îòêðûòèÿ ôàéëà ñöåíàðèÿ: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "Íåâîçìîæíî îòêðûòü äëÿ ÷òåíèÿ: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "Íåâîçìîæíî îòêðûòü äëÿ âûâîäà ñöåíàðèÿ: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: Ïðåäóïðåæäåíèå: Âûâîä îñóùåñòâëÿåòñÿ íå íà òåðìèíàë\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: Ïðåäóïðåæäåíèå: Ââîä ïðîèñõîäèò íå ñ òåðìèíàëà\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "êîìàíäíàÿ ñòðîêà ïåðåä âûïîëíåíèåì vimrc"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Íåâîçìîæíî âûïîëíèòü ÷òåíèå èç \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"Äîïîëíèòåëüíàÿ èíôîðìàöèÿ: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[ôàéë ..] ðåäàêòèðîâàíèå óêàçàííûõ ôàéëîâ"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- ÷òåíèå òåêñòà èç ïîòîêà ââîäà stdin"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t ìåòêà ðåäàêòèðîâàíèå ôàéëà ñ óêàçàííîé ìåòêîé"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr ""
-"-q [ôàéë-îøèáîê]\n"
-"\t\t\t\t ðåäàêòèðîâàíèå ôàéëà ñ ïåðâîé îøèáêîé"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Èñïîëüçîâàíèå:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [ïàðàìåòðû] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" èëè:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"Ïàðàìåòðû:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tÄàëåå óêàçûâàþòñÿ òîëüêî èìåíà ôàéëîâ"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tÍå âûïîëíÿòü ïîäñòàíîâêó ïî ìàñêå"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tÐåæèì Vi (êàê \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tÐåæèì Ex (êàê \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\tÓëó÷øåííûé ðåæèì Ex"
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tÒèõèé (ïàêåòíûé) ðåæèì (òîëüêî äëÿ \"ex\")"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tÐåæèì îòëè÷èé (êàê \"vimdiff\")"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tÏðîñòîé ðåæèì (êàê \"evim\", áåçðåæèìíûé)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÒîëüêî äëÿ ÷òåíèÿ (êàê \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÎãðàíè÷åííûé ðåæèì (êàê \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tÁåç âîçìîæíîñòè ñîõðàíåíèÿ èçìåíåíèé (çàïèñè ôàéëîâ)"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÁåç âîçìîæíîñòè âíåñåíèÿ èçìåíåíèé â òåêñò"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÄâîè÷íûé ðåæèì"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tÐåæèì Lisp"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tÐåæèì ñîâìåñòèìîñòè ñ Vi: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tÐåæèì íåïîëíîé ñîâìåñòèìîñòè ñ Vi: 'nocompatible'"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr ""
-"-V[N][ôàéë]\t\tÂûâîäèòü äîïîëíèòåëüíûå ñîîáùåíèÿ\n"
-"\t\t\t\t[óðîâåíü N] [çàïèñûâàòü â ôàéë]"
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tÐåæèì îòëàäêè"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tÁåç ñâîï-ôàéëà, èñïîëüçóåòñÿ òîëüêî ïàìÿòü"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tÂûâåñòè ñïèñîê ñâîï-ôàéëîâ è çàâåðøèòü ðàáîòó"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (ñ èìåíåì ôàéëà)\tÂîññòàíîâèòü àâàðèéíî çàâåðø¸ííûé ñåàíñ"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tÒî æå, ÷òî è -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tÇàïóñê â Àðàáñêîì ðåæèìå"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tÇàïóñê â ðåæèìå \"Èâðèò\""
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tÇàïóñê â ðåæèìå \"Ôàðñè\""
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <òåðìèíàë>\tÍàçíà÷èòü óêàçàííûé òèï <òåðìèíàëà>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tÈñïîëüçîâàòü <vimrc> âìåñòî ëþáûõ ôàéëîâ .vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tÍå çàãðóæàòü ñöåíàðèè ìîäóëåé"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr ""
-"-p[N]\t\tÎòêðûòü N âêëàäîê (ïî óìîë÷àíèþ: ïî îäíîé\n"
-"\t\t\t\tíà êàæäûé ôàéë)"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr ""
-"-o[N]\t\tÎòêðûòü N îêîí (ïî óìîë÷àíèþ: ïî îäíîìó\n"
-"\t\t\t\tíà êàæäûé ôàéë)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\tÒî æå, ÷òî è -o, íî ñ âåðòèêàëüíûì ðàçäåëåíèåì îêîí"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tÍà÷àòü ðåäàêòèðîâàíèå â êîíöå ôàéëà"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\tÍà÷àòü ðåäàêòèðîâàíèå â ñòðîêå ñ íîìåðîì <lnum>"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <êîìàíäà>\tÂûïîëíèòü <êîìàíäó> ïåðåä çàãðóçêîé ôàéëà vimrc"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <êîìàíäà>\t\tÂûïîëíèòü <êîìàíäó> ïîñëå çàãðóçêè ïåðâîãî ôàéëà"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr ""
-"-S <ñåàíñ>\t\tÏðî÷èòàòü ñöåíàðèé <ñåàíñà> ïîñëå çàãðóçêè\n"
-"\t\t\t\tïåðâîãî ôàéëà"
-
-# \n\t\t.. äëÿ óìåùåíèÿ â 80 ñòîëáöîâ
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr ""
-"-s <ñöåíàðèé>\tÏðî÷èòàòü êîìàíäû Îáû÷íîãî ðåæèìà èç\n"
-"\t\t\t\tôàéëà <ñöåíàðèÿ>"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <ñöåíàðèé>\tÄîáàâëÿòü âñå ââåä¸ííûå êîìàíäû â ôàéë <ñöåíàðèÿ>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <ñöåíàðèé>\tÇàïèñàòü âñå ââåä¸ííûå êîìàíäû â ôàéë <ñöåíàðèÿ>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr "--startuptime <ôàéë>\tÇàïèñàòü âðåìåííóþ ìåòêó î çàïóñêå â <ôàéë>"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tÈñïîëüçîâàòü âìåñòî .viminfo ôàéë <viminfo>"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h èëè --help\tÂûâåñòè ñïðàâêó (ýòî ñîîáùåíèå) è çàâåðøèòü ðàáîòó"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tÂûâåñòè èíôîðìàöèþ î âåðñèè Vim è çàâåðøèòü ðàáîòó"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "Íåò óñòàíîâëåííûõ îòìåòîê"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: Íåò îòìåòîê, ñîâïàäàþùèõ ñ \"%s\""
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"îòìåò ñòð êîë ôàéë/òåêñò"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-"ïðûæîê ñòð êîë ôàéë/òåêñò"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"èçìåí. ñòð êîë òåêñò"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Ãëîáàëüíûå îòìåòêè:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Ñïèñîê ïðûæêîâ (ñíà÷àëà áîëåå ñâåæèå):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Èñòîðèÿ ìåñòíûõ îòìåòîê (îò áîëåå ñâåæèõ ê ñòàðûì):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "Ïðîïóùåíà '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: Áëîê íå çàáëîêèðîâàí"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: Îøèáêà ïîèñêà ïðè ÷òåíèè ñâîï-ôàéëà"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: Îøèáêà ÷òåíèÿ ñâîï-ôàéëà"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: Îøèáêà ïîèñêà ïðè çàïèñè ñâîï-ôàéëà"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: Îøèáêà ïðè çàïèñè ñâîï-ôàéëà"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr ""
-"E300: Ñâîï-ôàéë óæå ñóùåñòâóåò (àòàêà ñ èñïîëüçîâàíèåì ñèìâîëüíîé ññûëêè?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: Íå ïîëó÷åí áëîê íîìåð 0?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: Íå ïîëó÷åí áëîê íîìåð 1?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: Íå ïîëó÷åí áëîê íîìåð 2?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: Îé, ïîòåðÿëñÿ ñâîï-ôàéë!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: Íåâîçìîæíî ïåðåèìåíîâàòü ñâîï-ôàéë"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr ""
-"E303: Íå óäàëîñü îòêðûòü ñâîï-ôàéë äëÿ \"%s\", âîññòàíîâëåíèå íåâîçìîæíî"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): Íå ïîëó÷åí áëîê 0??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: Ñâîï-ôàéë äëÿ %s íå íàéäåí"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr ""
-"Ââåäèòå íîìåð ñâîï-ôàéëà, êîòîðûé ñëåäóåò èñïîëüçîâàòü (0 äëÿ âûõîäà): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: Íå ìîãó îòêðûòü %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "Íåâîçìîæíî ïðî÷èòàòü áëîê 0 èç "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"Íåò èçìåíåíèé, èëè Vim íå ñìîã îáíîâèòü ñâîï-ôàéë"
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " íåëüçÿ èñïîëüçîâàòü â äàííîé âåðñèè Vim.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "Èñïîëüçóéòå Vim âåðñèè 3.0.\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s íå ÿâëÿåòñÿ ñâîï-ôàéëîì Vim"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " íåëüçÿ èñïîëüçîâàòü íà ýòîì êîìïüþòåðå.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "Ôàéë áûë ñîçäàí "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"ëèáî ôàéë áûë ïîâðåæä¸í."
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr " áûë ïîâðåæä¸í (ðàçìåð ñòðàíèöû ìåíüøå ìèíèìàëüíîãî çíà÷åíèÿ).\n"
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "Èñïîëüçóåòñÿ ñâîï-ôàéë \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "Èñõîäíûé ôàéë \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: Ïðåäóïðåæäåíèå: èñõîäíûé ôàéë ìîã áûòü èçìåí¸í"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Íåâîçìîæíî ïðî÷èòàòü áëîê 1 èç %s"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???ÎÒÑÓÒÑÒÂÓÅÒ ÌÍÎÃÎ ÑÒÐÎÊ"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???ÍÅÏÐÀÂÈËÜÍÎÅ ÇÍÀ×ÅÍÈÅ ÑרÒ×ÈÊÀ ÑÒÐÎÊ"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???ÏÓÑÒÎÉ ÁËÎÊ"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???ÎÒÑÓÒÑÒÂÓÞÒ ÑÒÐÎÊÈ"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: Íåïðàâèëüíûé áëîê 1 ID (%s íå ÿâëÿåòñÿ ôàéëîì .swp?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???ÏÐÎÏÓÙÅÍ ÁËÎÊ"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "???ñòðîêè ìîãóò áûòü èñïîð÷åíû îòñþäà äî ???ÊÎÍÖÀ"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "???ñòðîêè ìîãëè áûòü âñòàâëåíû èëè óäàëåíû îòñþäà äî ???ÊÎÍÖÀ"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???ÊÎÍÅÖ"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: Âîññòàíîâëåíèå ïðåðâàíî"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr ""
-"E312: Âî âðåìÿ âîññòàíîâëåíèÿ îáíàðóæåíû îøèáêè; ñì. ñòðîêè, íà÷èíàþùèåñÿ "
-"ñ ???"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "Ñì. \":help E312\" äëÿ äîïîëíèòåëüíîé èíôîðìàöèè."
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "Âîññòàíîâëåíèå çàâåðøåíî. Ïðîâåðüòå, âñ¸ ëè â ïîðÿäêå."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Ìîæåòå çàïèñàòü ôàéë ïîä äðóãèì èìåíåì è ñðàâíèòü åãî ñ èñõîäíûì\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "ôàéëîì ïðè ïîìîùè ïðîãðàììû diff)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "Âîññòàíîâëåíèå çàâåðøåíî. Ñîäåðæèìîå áóôåðîâ è ôàéëîâ ýêâèâàëåíòíî."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"Âåðîÿòíî, ñåé÷àñ âû çàõîòèòå óäàëèòü ôàéë .swp.\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "Îáíàðóæåíû ñâîï-ôàéëû:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " Â òåêóùåì êàòàëîãå:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " Ñ óêàçàííûì èìåíåì:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " Â êàòàëîãå "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- íåò --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " âëàäåëåö: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " äàòà: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " äàòà: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [îò Vim âåðñèè 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [íå ÿâëÿåòñÿ ñâîï-ôàéëîì Vim]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " èìÿ ôàéëà: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" èçìåí¸í: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "ÄÀ"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "íåò"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" ïîëüçîâàòåëü: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " êîìïüþòåð: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" êîìïüþòåð: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ïðîöåññ: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (åù¸ âûïîëíÿåòñÿ)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [íå ïðèãîäåí äëÿ èñïîëüçîâàíèÿ íà ýòîì êîìïüþòåðå]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [íå ÷èòàåòñÿ]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [íå îòêðûâàåòñÿ]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: Íåâîçìîæíî îáíîâèòü ñâîï-ôàéë, ïîñêîëüêó îí íå îáíàðóæåí"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "Ñâîï-ôàéë îáíîâë¸í"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: Íåóäà÷íàÿ ïîïûòêà îáíîâëåíèÿ ñâîï-ôàéëà"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: íåïðàâèëüíîå çíà÷åíèå lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: íåâîçìîæíî íàéòè ñòðîêó %<PRId64>"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "çíà÷åíèå stack_idx äîëæíî áûòü ðàâíî 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: Îáíîâëåíî ñëèøêîì ìíîãî áëîêîâ?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "óäàë¸í áëîê 1?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: Ñòðîêà %<PRId64> íå îáíàðóæåíà"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "çíà÷åíèå pe_line_count ðàâíî íóëþ"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: Íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà: %<PRId64>"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: Íåïðàâèëüíîå çíà÷åíèå ñ÷¸ò÷èêà ñòðîê â áëîêå %<PRId64>"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "Ðàçìåð ñòåêà óâåëè÷åí"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: Íåïðàâèëüíîå çíà÷åíèå óêàçàòåëÿ áëîêà 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Ïåòëÿ ñèìâîëüíûõ ññûëîê äëÿ \"%s\""
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ÂÍÈÌÀÍÈÅ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"Îáíàðóæåí ñâîï-ôàéë ñ èìåíåì \""
-
-# Ñ ìàëåíüêîé áóêâû, ÷òîáû ñîîòâåòñòâîâàëî ïî ñòèëþ ñîñåäíèì ñîîáùåíèÿì.
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "ïðè îòêðûòèè ôàéëà: \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " Áîëåå ÑÂÅÆÈÉ, ÷åì ñâîï-ôàéë!\n"
-
-#: ../memline.c:3244
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) Âîçìîæíî, ðåäàêòèðîâàíèå ýòîãî æå ôàéëà âûïîëíÿåòñÿ â äðóãîé ïðîãðàììå.\n"
-" Åñëè ýòî òàê, òî áóäüòå âíèìàòåëüíû ïðè âíåñåíèè èçìåíåíèé, ÷òîáû\n"
-" ó âàñ íå ïîÿâèëîñü äâà ðàçíûõ âàðèàíòà îäíîãî è òîãî æå ôàéëà."
-
-# Ñîîáùåíèå ðàçäåëåíî, " \n" äîáàâëåíî ò.ê. ñòðîêà íå ïîìåùàåòñÿ.
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr ""
-" \n"
-" Çàâåðøèòå ðàáîòó èëè ïðîäîëæàéòå ñ îñòîðîæíîñòüþ.\n"
-
-#: ../memline.c:3246
-msgid "(2) An edit session for this file crashed.\n"
-msgstr "(2) Ñåàíñ ðåäàêòèðîâàíèÿ ýòîãî ôàéëà çàâåðø¸í àâàðèéíî.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr "  ýòîì ñëó÷àå, èñïîëüçóéòå êîìàíäó \":recover\" èëè \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" äëÿ âîññòàíîâëåíèÿ èçìåíåíèé (ñì. \":help recovery\").\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Åñëè âû óæå âûïîëíÿëè ýòó îïåðàöèþ, óäàëèòå ñâîï-ôàéë \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" ÷òîáû èçáåæàòü ïîÿâëåíèÿ ýòîãî ñîîáùåíèÿ â áóäóùåì.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "Ñâîï-ôàéë \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" óæå ñóùåñòâóåò!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM — ÂÍÈÌÀÍÈÅ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "Ñâîï-ôàéë óæå ñóùåñòâóåò!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&O Îòêðûòü äëÿ ÷òåíèÿ\n"
-"&E Ðåäàêòèðîâàòü\n"
-"&R Âîññòàíîâèòü\n"
-"&Q Âûõîä\n"
-"&A Ïðåðâàòü"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&O Îòêðûòü äëÿ ÷òåíèÿ\n"
-"&E Ðåäàêòèðîâàòü\n"
-"&R Âîññòàíîâèòü\n"
-"&D Óäàëèòü\n"
-"&Q Âûõîä\n"
-"&A Ïðåðâàòü"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: Îáíàðóæåíî ñëèøêîì ìíîãî ñâîï-ôàéëîâ"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: Íå õâàòàåò ïàìÿòè! (âûäåëÿåòñÿ %<PRIu64> áàéò)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: Êîìïîíåíò ïóòè ê ýëåìåíòó ìåíþ íå ÿâëÿåòñÿ ïîäìåíþ"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: Ìåíþ â ýòîì ðåæèìå íå ñóùåñòâóåò"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: Íåò ìåíþ %s"
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: Ïóñòîå èìÿ ìåíþ"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: Ïóòü ê ìåíþ íå äîëæåí âåñòè ê ïîäìåíþ"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: Ýëåìåíòû ìåíþ íåëüçÿ äîáàâëÿòü íåïîñðåäñòâåííî â ïîëîñêó ìåíþ"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: Ðàçäåëèòåëè íå ìîãóò áûòü êîìïîíåíòîì ïóòè ê ìåíþ"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- Ìåíþ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: Ïóòü ê ìåíþ äîëæåí âåñòè ê ýëåìåíòó ìåíþ"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: Ìåíþ íå íàéäåíî: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: Ìåíþ íå îïðåäåëåíî äëÿ ðåæèìà %s"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: Ïóòü ê ìåíþ äîëæåí âåñòè ê ïîäìåíþ"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: Ìåíþ íå íàéäåíî — ïðîâåðüòå èìåíà ìåíþ"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "Îáíàðóæåíà îøèáêà ïðè îáðàáîòêå %s:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "ñòðîêà %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Íåäîïóñòèìîå èìÿ ðåãèñòðà: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Ïåðåâîä ñîîáùåíèé íà ðóññêèé ÿçûê: Âàñèëèé Ðàãîçèí <vrr@users.sourceforge."
-"net>, Ñåðãåé Àë¸øèí <alyoshin.s@gmail.com>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Ïðåðûâàíèå: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Íàæìèòå ENTER èëè ââåäèòå êîìàíäó äëÿ ïðîäîëæåíèÿ"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s ñòðîêà %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- Ïðîäîëæåíèå ñëåäóåò --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " SPACE/d/j: ýêðàí/ñòðàíèöà/ñòðîêà âíèç, b/u/k: ââåðõ, q: âûõîä "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Âîïðîñ"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"&Y Äà\n"
-"&N Íåò"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"&Äà\n"
-"&Íåò\n"
-"Î&òìåíà"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"&Y Äà\n"
-"&N Íåò\n"
-"&A Ñîõðàíèòü âñå\n"
-"&D Ïîòåðÿòü âñå\n"
-"&C Îòìåíà"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: Íåäîñòàòî÷íî ïàðàìåòðîâ äëÿ printf()"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Îæèäàëñÿ ïàðàìåòð òèïà ñ ïëàâàþùåé òî÷êîé äëÿ printf()"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: Ñëèøêîì ìíîãî ïàðàìåòðîâ äëÿ printf()"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: Ïðåäóïðåæäåíèå: Èçìåíåíèå ôàéëà ñ ïðàâàìè òîëüêî äëÿ ÷òåíèÿ"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "Ââåäèòå íîìåð è <Enter> èëè ù¸ëêíèòå ìûøüþ (ïóñòî äëÿ îòìåíû): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "Ââåäèòå íîìåð è <Enter> (ïóñòî äëÿ îòìåíû): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "Äîáàâëåíà îäíà ñòðîêà"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "Óáðàíà îäíà ñòðîêà"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "Äîáàâëåíî ñòðîê: %<PRId64>"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "Óáðàíî ñòðîê: %<PRId64>"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (Ïðåðâàíî)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Áè-áè!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "Âûçîâ îáîëî÷êè äëÿ èñïîëíåíèÿ: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: Íåò èìåíè â ïîçèöèè êóðñîðà"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: Çíà÷åíèåì îïöèè 'operatorfunc' ÿâëÿåòñÿ ïóñòàÿ ñòðîêà"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "Ïðåäóïðåæäåíèå: òåðìèíàë íå ìîæåò âûïîëíÿòü ïîäñâåòêó"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: Íåò ñòðîêè â ïîçèöèè êóðñîðà"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr ""
-"E352: Íåâîçìîæíî ñòåðåòü ñêëàäêè ñ òåêóùèì çíà÷åíèåì îïöèè 'foldmethod'"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: Ñïèñîê èçìåíåíèé ïóñòîé"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662:  íà÷àëå ñïèñêà èçìåíåíèé"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: Â êîíöå ñïèñêà èçìåíåíèé"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "Ââåäèòå :quit<Enter> äëÿ âûõîäà èç Vim"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "Èçìåíåíû îòñòóïû â 1 ñòðîêå (%s 1 ðàç)"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "Èçìåíåíû îòñòóïû â 1 ñòðîêå (%s %d ðàç)"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "Èçìåíåíû îòñòóïû, %<PRId64> ñòðîê (%s 1 ðàç)"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "Èçìåíåíû îòñòóïû, %<PRId64> ñòðîê (%s %d ðàç)"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "Èçìåíÿþòñÿ îòñòóïû ñòðîêàõ (%<PRId64>)..."
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "Èçìåí¸í îòñòóï â îäíîé ñòðîêå "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "Èçìåíåíû îòñòóïû â ñòðîêàõ (%<PRId64>) "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: Íåò ïðåäûäóùåãî èñïîëüçîâàííîãî ðåãèñòðà"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "ñêîïèðîâàòü íå óäàëîñü, óäàëåíèå âûïîëíåíî"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "èçìåíåíà 1 ñòðîêà"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "èçìåíåíî ñòðîê: %<PRId64>"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "ñêîïèðîâàí áëîê èç îäíîé ñòðîêè"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "ñêîïèðîâàíà îäíà ñòðîêà"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "ñêîïèðîâàí áëîê èç ñòðîê: %<PRId64>"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "ñêîïèðîâàíî ñòðîê: %<PRId64>"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353:  ðåãèñòðå %s íè÷åãî íåò"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- Ðåãèñòðû ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "Íåäîïóñòèìîå èìÿ ðåãèñòðà"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# Ðåãèñòðû:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: Íåèçâåñòíûé òèï ðåãèñòðà %d"
-
-msgid ""
-"E883: search pattern and expression register may not contain two or more "
-"lines"
-msgstr ""
-"E883: øàáëîí ïîèñêà è ðåãèñòð âûðàæåíèÿ íå ìîãóò ñîäåðæàòü äâóõ èëè áîëåå "
-"ñòðîê"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "Êîëîíîê: %<PRId64>; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Âûäåëåíî %s%<PRId64> èç %<PRId64> ñòðîê; %<PRId64> èç %<PRId64> ñëîâ; "
-"%<PRId64> èç %<PRId64> áàéò"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Âûäåëåíî %s%<PRId64> èç %<PRId64> ñòð.; %<PRId64> èç %<PRId64> ñëîâ; "
-"%<PRId64> èç %<PRId64> ñèìâ.; %<PRId64> èç %<PRId64> áàéò"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Êîë. %s èç %s; ñòð. %<PRId64> èç %<PRId64>; ñë. %<PRId64> èç %<PRId64>; áàéò "
-"%<PRId64> èç %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Êîë. %s èç %s; ñòð. %<PRId64> èç %<PRId64>; ñë. %<PRId64> èç %<PRId64>; "
-"ñèìâ. %<PRId64> èç %<PRId64>; áàéò %<PRId64> èç %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> ñ ó÷¸òîì BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=Ñòð. %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "Áëàãîäàðèì çà èñïîëüçîâàíèå Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: Íåèçâåñòíàÿ îïöèÿ"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: Îïöèÿ íå ïîääåðæèâàåòñÿ"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: Íå äîïóñêàåòñÿ â ðåæèìíîé ñòðîêå"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr "E846: Êîä êëàâèøè íå óñòàíîâëåí"
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: Ïîñëå = òðåáóåòñÿ óêàçàòü ÷èñëî"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Íå îáíàðóæåíî â termcap"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: Íåäîïóñòèìûé ñèìâîë <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: Çíà÷åíèå îïöèè 'term' íå ìîæåò áûòü ïóñòîé ñòðîêîé"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: Çíà÷åíèÿ îïöèé 'backupext' è 'patchmode' ðàâíû"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: Êîíôëèêòóåò ñî çíà÷åíèåì 'listchars'"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: Êîíôëèêòóåò ñî çíà÷åíèåì 'fillchars'"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: Ïðîïóùåíî äâîåòî÷èå"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: Ñòðîêà ñ íóëåâîé äëèíîé"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: Ïðîïóùåíî ÷èñëî ïîñëå <%s>"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: Ïðîïóùåíà çàïÿòàÿ"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: Íåîáõîäèìî óêàçàòü çíà÷åíèå äëÿ '"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: Ñîäåðæèò íåïå÷àòíûé ñèìâîë èëè ñèìâîë äâîéíîé øèðèíû"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: Íåïðàâèëüíûé ñèìâîë ïîñëå <%c>"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: Òðåáóåòñÿ çàïÿòàÿ"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr ""
-"E537: Çíà÷åíèå îïöèÿ 'commentstring' äîëæíî áûòü ïóñòîé ñòðîêîé èëè "
-"ñîäåðæàòü %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: Íåçàêðûòàÿ ïîñëåäîâàòåëüíîñòü âûðàæåíèÿ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: Ñëèøêîì ìíîãî ýëåìåíòîâ"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: Íåñáàëàíñèðîâàííûå ãðóïïû"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: Îêíî ïðåäïðîñìîòðà óæå åñòü"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr ""
-"W17: Àðàáñêèé òðåáóåò èñïîëüçîâàíèÿ UTF-8, ââåäèòå ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Íóæíî õîòÿ áû %d ñòðîê"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Íóæíî õîòÿ áû %d êîëîíîê"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: Íåèçâåñòíàÿ îïöèÿ: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: Òðåáóåòñÿ óêàçàòü ÷èñëî: &%s = '%s'"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Òåðìèíàëüíûå êîäû ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Ãëîáàëüíûå çíà÷åíèÿ îïöèé ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Ìåñòíûå çíà÷åíèÿ îïöèé ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Îïöèè ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: ÎØÈÁÊÀ get_varp"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': Íåò ñîîòâåòñòâóþùåãî ñèìâîëà äëÿ %s"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Ëèøíèå ñèìâîëû ïîñëå òî÷êè ñ çàïÿòîé: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"Íåâîçìîæíî çàïóñòèòü îáîëî÷êó "
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"Îáîëî÷êà çàâåðøèëà ðàáîòó "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"Íåâîçìîæíî ïîëó÷èòü êîíòåêñò áåçîïàñíîñòè äëÿ "
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"Íåâîçìîæíî óñòàíîâèòü êîíòåêñò áåçîïàñíîñòè äëÿ "
-
-msgid "Could not set security context "
-msgstr "Íåâîçìîæíî óñòàíîâèòü êîíòåêñò áåçîïàñíîñòè "
-
-msgid " for "
-msgstr " äëÿ "
-
-#. no enough size OR unexpected error
-msgid "Could not get security context "
-msgstr "Íåâîçìîæíî ïîëó÷èòü êîíòåêñò áåçîïàñíîñòè "
-
-msgid ". Removing it!\n"
-msgstr ". Áóäåò óäàë¸í!\n"
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Ôàéë \"%s\" íå íàéäåí ïî èçâåñòíûì ïóòÿì"
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: Â ñòðîêå ôîðìàòà ñëèøêîì ìíîãî %%%c"
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Íåîæèäàííûé ýëåìåíò %%%c â ñòðîêå ôîðìàòà"
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: Â ñòðîêå ôîðìàòà ïðîïóùåíà ]"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: %%%c íå ïîääåðæèâàåòñÿ â ñòðîêå ôîðìàòà"
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Íåäîïóñòèìûé %%%c â ïðèñòàâêå â ñòðîêå ôîðìàòà"
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Íåäîïóñòèìûé %%%c â ñòðîêå ôîðìàòà"
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378:  çíà÷åíèè îïöèè 'errorformat' îòñóòñòâóåò øàáëîí"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: Èìÿ êàòàëîãà íå çàäàíî èëè ðàâíî ïóñòîé ñòðîêå"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: Áîëüøå íåò ýëåìåíòîâ"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d èç %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (ñòðîêà óäàëåíà)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Âíèçó ñòåêà áûñòðûõ èñïðàâëåíèé"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Íàâåðõó ñòåêà áûñòðûõ èñïðàâëåíèé"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "ñïèñîê îøèáîê %d èç %d; %d îøèáîê"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr ""
-"E382: Çàïèñü íåâîçìîæíà, çíà÷åíèå îïöèè 'buftype' íå ÿâëÿåòñÿ ïóñòîé ñòðîêîé"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: Íåò èìåíè ôàéëà èëè íåïðàâèëüíûé øàáëîí"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "Íåâîçìîæíî îòêðûòü ôàéë \"%s\""
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: Áóôåð íå âûãðóæåí"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: Òðåáóåòñÿ ñòðîêà èëè ñïèñîê"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Íåäîïóñòèìûé ýëåìåíò â %s%%[]"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Ïðîïóùåíà ] ïîñëå %s["
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: Íåò ïàðû äëÿ %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: Íåò ïàðû äëÿ %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: Íåò ïàðû äëÿ %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( íå ìîæåò áûòü èñïîëüçîâàíî çäåñü"
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 è ò.ï. íå ìîãóò áûòü èñïîëüçîâàíû çäåñü"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Ïðîïóùåíà ] ïîñëå %s%%["
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: Ïóñòîå %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: Ñëèøêîì äëèííûé øàáëîí"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Ñëèøêîì ìíîãî \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Ñëèøêîì ìíîãî %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: Íåò ïàðû äëÿ \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: Íåäîïóñòèìûé ñèìâîë ïîñëå %s@"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Ñëèøêîì ìíîãî ñëîæíûõ êîíñòðóêöèé %s{...}"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: Âëîæåííûå %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: Âëîæåííûå %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: Íåäîïóñòèìîå èñïîëüçîâàíèå \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c íè çà ÷åì íå ñëåäóåò"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: Íåäîïóñòèìàÿ îáðàòíàÿ ññûëêà"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: Íåäîïóñòèìûé ñèìâîë ïîñëå \\z"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Íåäîïóñòèìûé ñèìâîë ïîñëå %s%%[dxouU]"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: Íåäîïóñòèìûé ñèìâîë ïîñëå %s%%"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: Ñèíòàêñè÷åñêàÿ îøèáêà â %s{...}"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Âíåøíèå ïîäñîîòâåòñòâèÿ:\n"
-
-#, c-format
-msgid "E888: (NFA regexp) cannot repeat %s"
-msgstr "E888: (ðåã. âûðàæåíèå ÍÊÀ) íåâîçìîæíî ïîâòîðèòü %s"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-"E864: ïîñëå \\%#= ìîæåò áûòü òîëüêî 0, 1 èëè 2. Áóäåò èñïîëüçîâàòüñÿ "
-"àâòîìàòè÷åñêàÿ ìàøèíà"
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (ÍÊÀ) íåîæèäàííûé êîíåö ðåãóëÿðíîãî âûðàæåíèÿ"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (ðåã. âûðàæåíèå ÍÊÀ) íåîæèäàííûé %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (ÍÊÀ) íåèçâåñòíûé îïåðàòîð '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (ÍÊÀ) íåèçâåñòíûé îïåðàòîð '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (ÍÊÀ) íåèçâåñòíûé îïåðàòîð '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr "E870: (ðåã. âûðàæåíèå ÍÊÀ) îøèáêà ïðè ÷òåíèè ãðàíèö ïîâòîðåíèÿ"
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr "E871: (ðåã. âûðàæåíèå ÍÊÀ) ìíîæåñòâî íå ìîæåò ñëåäîâàòü çà ìíîæåñòâîì!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (ðåã. âûðàæåíèå ÍÊÀ) ñëèøêîì ìíîãî '('"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (ðåã. âûðàæåíèå ÍÊÀ) ñëèøêîì ìíîãî \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (ðåã. âûðàæåíèå ÍÊÀ) îøèáêà êîððåêòíîãî çàâåðøåíèÿ"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (ðåã. âûðàæåíèå ÍÊÀ) íåâîçìîæíî âçÿòü èç ñòåêà!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (ðåã. âûðàæåíèå ÍÊÀ) â ñòåêå îñòàëîñü ñëèøêîì ìíîãî ñîñòîÿíèé (ïðè "
-"ïðåîáðàçîâàíèè èç postfix â ÍÊÀ)"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (ðåã. âûðàæåíèå ÍÊÀ) íåäîñòàòî÷íî ìåñòà äëÿ õðàíåíèÿ âñåãî ÍÊÀ"
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"Íåâîçìîæíî îòêðûòü ôàéë âðåìåííîãî æóðíàëà äëÿ çàïèñè, âûâîä íà stderr..."
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(ÍÊÀ) íåâîçìîæíî îòêðûòü %s!"
-
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "Íåâîçìîæíî îòêðûòü ôàéë âðåìåííîãî æóðíàëà äëÿ çàïèñè"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " ÂÈÐÒÓÀËÜÍÀß ÇÀÌÅÍÀ"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ÇÀÌÅÍÀ"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ÎÁÐÀÒÍÀß"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ÂÑÒÀÂÊÀ"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (âñòàâêà)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (çàìåíà)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (âèðòóàëüíàÿ çàìåíà)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Èâðèò"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Àðàáñêèé"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (ÿçûê)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (âêëåéêà)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ÂÈÇÓÀËÜÍÛÉ ÐÅÆÈÌ"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ÂÈÇÓÀËÜÍÀß ÑÒÐÎÊÀ"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ÂÈÇÓÀËÜÍÛÉ ÁËÎÊ"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ÂÛÄÅËÅÍÈÅ"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ÂÛÄÅËÅÍÈÅ ÑÒÐÎÊÈ"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ÂÛÄÅËÅÍÈÅ ÁËÎÊÀ"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "çàïèñü"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: Íåïðàâèëüíàÿ ñòðîêà ïîèñêà: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: Ïîèñê çàêîí÷åí â ÍÀ×ÀËÅ äîêóìåíòà; %s íå íàéäåíî"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: Ïîèñê çàêîí÷åí â ÊÎÍÖÅ äîêóìåíòà; %s íå íàéäåíî"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: Ïîñëå ';' îæèäàåòñÿ ââîä '?' èëè '/'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (âêëþ÷àåò ðàííåå ïîêàçàííûå ñîîòâåòñòâèÿ)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- Âêëþ÷¸ííûå ôàéëû "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "íå íàéäåíî "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "ïî ïóòè ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Óæå ïîêàçàíî)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " ÍÅ ÍÀÉÄÅÍÎ"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "Ïðîñìîòð âêëþ÷¸ííûõ ôàéëîâ: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "Ïîèñê âêëþ÷¸ííîãî ôàéëà %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: Ñîîòâåòñòâèå â òåêóùåé ñòðîêå"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "Íàéäåíû âñå âêëþ÷¸ííûå ôàéëû"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "Âêëþ÷¸ííûõ ôàéëîâ íåò"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: Îïðåäåëåíèå íå íàéäåíî"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Øàáëîí íå íàéäåí"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Çàìåíà "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# Ïîñëåäíèé %sØàáëîí ïîèñêà:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: Îøèáêà ôîðìàòà â ôàéëå ïðàâîïèñàíèÿ"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: Ôàéë ïðàâîïèñàíèÿ îáðåçàí"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Ëèøíèé òåêñò íà õâîñòå â %s ñòð. %d: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Èìÿ àôôèêñà ñëèøêîì äëèííîå â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: Îøèáêà ôîðìàòà â ôàéëå àôôèêñîâ FOL, LOW èëè UPP"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Ñèìâîëû â FOL, LOW èëè UPP çà ïðåäåëàìè äèàïàçîíà"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "Ñæàòèå äåðåâà ñëîâ..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: Ïðîâåðêà ïðàâîïèñàíèÿ âûêëþ÷åíà"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-"Ïðåäóïðåæäåíèå: Íåâîçìîæíî íàéòè ñïèñîê ñëîâ \"%s.%s.spl\" èëè \"%s.ascii.spl"
-"\""
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "×òåíèå ôàéëà ïðàâîïèñàíèÿ \"%s\""
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: Ýòî íå ïîõîæå íà ôàéë ïðàâîïèñàíèÿ"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Ñòàðûé ôàéë ïðàâîïèñàíèÿ, òðåáóåòñÿ åãî îáíîâëåíèå"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Ôàéë ïðàâîïèñàíèÿ ïðåäíàçíà÷åí äëÿ áîëåå íîâîé âåðñèè Vim"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: Íåïîääåðæèâàåìûé ðàçäåë â ôàéëå ïðàâîïèñàíèÿ"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "Ïðåäóïðåæäåíèå: ðåãèîí %s íå ïîääåðæèâàåòñÿ"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "×òåíèå ôàéëà àôôèêñîâ %s ..."
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "Íå óäàëîñü ïðåîáðàçîâàòü ñëîâî â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "Ïðåîáðàçîâàíèå â %s íå ïîääåðæèâàåòñÿ: èç %s â %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå FLAG â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG ïîñëå èñïîëüçîâàíèÿ ôëàãîâ â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Îïðåäåëåíèå COMPOUNDFORBIDFLAG ïîñëå ýëåìåíòà PFX ìîæåò äàòü íåïðàâèëüíûå "
-"ðåçóëüòàòû â %s, ñòðîêà %d"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Îïðåäåëåíèå COMPOUNDPERMITFLAG ïîñëå ýëåìåíòà PFX ìîæåò äàòü íåïðàâèëüíûå "
-"ðåçóëüòàòû â %s, ñòðîêà %d"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDRULES â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDWORDMAX â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDMIN â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå COMPOUNDSYLMAX â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "Íåïðàâèëüíîå çíà÷åíèå CHECKCOMPOUNDPATTERN â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-"Äðóãîé îáúåäèíÿþùèé ôëàã â ïðîäîëæàþùåì áëîêå àôôèêñà â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "Ïîâòîðÿþùèéñÿ àôôèêñ â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"Àôôèêñ òàêæå èñïîëüçóåòñÿ äëÿ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
-"NOSUGGEST â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "Îæèäàëîñü Y èëè N â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "Íàðóøåííîå óñëîâèå â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "Îæèäàëñÿ ñ÷¸ò÷èê REP(SAL) â %s, ñòðîêà %d"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "Îæèäàëñÿ ñ÷¸ò÷èê MAP â %s, ñòðîêà %d"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "Ïîâòîðÿþùèéñÿ ñèìâîë â MAP â %s, ñòðîêà %d"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "Íåðàñïîçíàííûé èëè ïîâòîðÿþùèéñÿ ýëåìåíò â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Ïðîïóùåíà ñòðîêà FOL/LOW/UPP â %s"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "COMPOUNDSYLMAX èñïîëüçóåòñÿ áåç SYLLABLE"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Ñëèøêîì ìíîãî îòëîæåííûõ ïðåôèêñîâ"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Ñëèøêîì ìíîãî ñîñòàâíûõ ôëàãîâ"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Ñëèøêîì ìíîãî îòëîæåííûõ ïðåôèêñîâ è/èëè ñîñòàâíûõ ôëàãîâ"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "Ïðîïóùåíà ñòðîêà SOFO%s â %s"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "Îáå ñòðîêè SAL è SOFO â %s"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "Ôëàã íå ÿâëÿåòñÿ ÷èñëîì â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "Íåäîïóñòèìûé ôëàã â %s íà ñòðîêå %d: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "%s èìååò äðóãîå çíà÷åíèå, ÷åì â ôàéëå .aff"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "×òåíèå ôàéëà ñëîâàðÿ %s ..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: Êîëè÷åñòâî ñëîâ íå óêàçàíî â %s"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "ñòðîêà %6d, ñëîâî %6d — %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "Ïîâòîð ñëîâà â %s íà ñòðîêå %d: %s "
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "Ïåðâûé ïîâòîð ñëîâà â %s íà ñòðîêå %d: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d ïîâòîðÿþùèõñÿ ñëîâ â %s"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "Ïðîïóùåíî %d ñëîâ ñ íå ASCII ñèìâîëàìè â %s"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "×òåíèå ôàéëà ñëîâ %s ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "Ïðîèãíîðèðîâàíà ïîâòîðÿþùàÿñÿ ñòðîêà /encoding= â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Ïðîèãíîðèðîâàíà ñòðîêà /encoding= ïîñëå ñëîâà â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "Ïðîïóñêàåòñÿ ïîâòîð ñòðîêè /regions= â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "Ñëèøêîì ìíîãî ðåãèîíîâ â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "/ ñòðîêà ïðîïóñêàåòñÿ â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "Íåäîïóñòèìûé íîìåð ðåãèîíà â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "Íåðàñïîçíàííûå ôëàãè â %s, ñòðîêà %d: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "Ïðîïóùåíî %d ñëîâ ñ íå ASCII ñèìâîëàìè"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "Ñæàòî %d èç %d óçëîâ; îñòàëîñü %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "×òåíèå çàïèñàííîãî ôàéëà ïðàâîïèñàíèÿ..."
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "Âûïîëíåíèå çâóêîâîé ñâ¸ðòêè..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "Êîëè÷åñòâî ñëîâ ïîñëå çâóêîâîé ñâ¸ðòêè: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "Îáùåå êîëè÷åñòâî ñëîâ: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "Çàïèñü ôàéëà ïðåäëîæåíèÿ èñïðàâëåíèé ïðàâîïèñàíèÿ %s"
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "Îöåíêà èñïîëüçîâàíèÿ ïàìÿòè ïðè âûïîëíåíèè: %d áàéò"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Èìÿ âûõîäíîãî ôàéëà íå äîëæíî ñîäåðæàòü íàçâàíèÿ ðåãèîíà"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: Ïîääåðæèâàåòñÿ íå áîëåå 8-ìè ðåãèîíîâ"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: Íåäîïóñòèìûé ðåãèîí â %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "Ïðåäóïðåæäåíèå: îáà ñîñòàâíûå è óêàçàíî NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "Çàïèñü ôàéëà ïðàâîïèñàíèÿ %s ..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Çàâåðøåíî!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' íå ñîäåðæèò %<PRId64> ýëåìåíòîâ"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Ñëîâî óäàëåíî èç %s"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Ñëîâî äîáàâëåíî â %s"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: Ñèìâîëû ñëîâ îòëè÷àþòñÿ â ôàéëàõ ïðàâîïèñàíèÿ"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Èçâèíèòå, íåò ïðåäïîëîæåíèé"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Èçâèíèòå, òîëüêî %<PRId64> ïðåäïîëîæåíèé"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "Çàìåíèòü \"%.*s\" íà:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: Íåò ïðåäûäóùåé çàìåíû ïðàâîïèñàíèÿ"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: Íå íàéäåíî: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: Ýòî íå ïîõîæå íà ôàéë .sug: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Ñòàðûé ôàéë .sug, òðåáóåò îáíîâëåíèÿ: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: Ôàéë .sug äëÿ áîëåå íîâîé âåðñèè Vim: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: Ôàéë .sug íå ñîîòâåòñòâóåò ôàéëó .spl: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: Îøèáêà ïðè ÷òåíèè ôàéëà .sug: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: Ïîâòîðÿþùèéñÿ ñèìâîë â ýëåìåíòå MAP"
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Ñèíòàêñè÷åñêèå ýëåìåíòû äëÿ äàííîãî áóôåðà íå îïðåäåëåíû"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: Íåäîïóñòèìûé ïàðàìåòð: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Ñèíòàêñè÷åñêèé êëàñòåð %s íå íàéäåí"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "Ñèíõðîíèçàöèÿ ïî êîììåíòàðèÿì â ñòèëå ÿçûêà C"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "áåç ñèíõðîíèçàöèè"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "ñèíõðîíèçàöèÿ íà÷àòà "
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " ñòðîê ïåðåä âåðõíåé ñòðîêîé"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Ýëåìåíòû ñèíõðîíèçàöèè ñèíòàêñèñà ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"ñèíõðîíèçàöèÿ ïî ýëåìåíòàì"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Ñèíòàêñè÷åñêèå ýëåìåíòû ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Ñèíòàêñè÷åñêèé êëàñòåð %s íå íàéäåí"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "ìèíèìóì "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "ìàêñèìóì "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; ñîîòâåòñòâèå "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr " ïåðåíîñîâ ñòðîê"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: Çäåñü íåëüçÿ èñïîëüçîâàòü ïàðàìåòð contains"
-
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: Íåäîïóñòèìîå çíà÷åíèå cchar"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: Çäåñü íåëüçÿ èñïîëüçîâàòü group[t]here"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: Ýëåìåíò îáëàñòè äëÿ %s íå íàéäåí"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: Òðåáóåòñÿ óêàçàòü èìÿ ôàéëà"
-
-#: ../syntax.c:4221
-msgid "E847: Too many syntax includes"
-msgstr "E847: Ñëèøêîì ìíîãî ñèíòàêñè÷åñêèõ âêëþ÷åíèé"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: Ïðîïóùåíî ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: Ïðîïóùåíî '=': %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Íå õâàòàåò ïàðàìåòðîâ: ñèíòàêñè÷åñêèé ðåãèîí %s"
-
-#: ../syntax.c:4870
-msgid "E848: Too many syntax clusters"
-msgstr "E848: Ñëèøêîì ìíîãî ñèíòàêñè÷åñêèõ êëàñòåðîâ"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: Êëàñòåð íå óêàçàí"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: Íå íàéäåí ðàçäåëèòåëü øàáëîíîâ: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Ìóñîð ïîñëå øàáëîíà: %s"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr ""
-"E403: Ñèíõðîíèçàöèÿ ñèíòàêñèñà: øàáëîí ïðîäîëæåíèé ñòðîêè óêàçàí äâàæäû"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: Íåäîïóñòèìûå ïàðàìåòðû: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: Ïðîïóùåí çíàê ðàâåíñòâà: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: Ïóñòîé ïàðàìåòð: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s íå äîïóñêàåòñÿ â ýòîì ìåñòå"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s äîëæíî áûòü ïåðâûì â ñïèñêå contains"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: Íåèçâåñòíàÿ ãðóïïà: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: Íåïðàâèëüíàÿ ïîäêîìàíäà :syntax: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-" ÂÑÅÃÎ ÊÎË. ÑÎÎÒÂ. ÎÒÑÒÀÞÙÈÉ ÑÐÅÄÍÈÉ ÈÌß ØÀÁËÎÍ"
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: Ðåêóðñèâíàÿ ïåòëÿ ïðè çàãðóçêå syncolor.vim"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: Ãðóïïà ïîäñâåòêè ñèíòàêñèñà %s íå íàéäåíà"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Íå õâàòàåò ïàðàìåòðîâ: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Ñëèøêîì ìíîãî ïàðàìåòðîâ: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Ó ãðóïïû åñòü íàñòðîéêè, ïðîïóñêàåòñÿ highlight link"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: Íåîæèäàííûé çíàê ðàâåíñòâà: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: Ïðîïóùåí çíàê ðàâåíñòâà: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: Ïðîïóùåí ïàðàìåòð: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: Íåäîïóñòèìîå çíà÷åíèå: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: Íåèçâåñòíûé öâåò òåêñòà"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: Íåèçâåñòíûé öâåò ôîíà"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: Èìÿ èëè íîìåð öâåòà íå èçâåñòíî: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Ñëèøêîì äëèííûé êîä òåðìèíàëà: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: Íåäîïóñòèìûé ïàðàìåòð: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: Èñïîëüçóåòñÿ ñëèøêîì ìíîãî ðàçíûõ àòðèáóòîâ ïîäñâåòêè ñèíòàêñèñà"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: Íåïå÷àòíûé ñèìâîë â èìåíè ãðóïïû"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: Íåäîïóñòèìûé ñèìâîë â èìåíè ãðóïïû"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr "E849: Ñëèøêîì ìíîãî ãðóïï ïîäñâåòêè è ñèíòàêñèñà"
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: Âíèçó ñòåêà ìåòîê"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: Íàâåðõó ñòåêà ìåòîê"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Íåâîçìîæíî ïåðåéòè â ïîçèöèþ äî ïåðâîé ñîâïàäàþùåé ìåòêè"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: Ìåòêà íå íàéäåíà: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # ïðè òèï ìåòêà"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "ôàéë\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Åñòü òîëüêî îäíà ñîâïàäàþùàÿ ìåòêà"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Íåâîçìîæíî ïåðåéòè â ïîçèöèþ çà ïîñëåäíåé ñîâïàäàþùåé ìåòêîé"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Ôàéë \"%s\" íå ñóùåñòâóåò"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "ìåòêà %d èç %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " è áîëåå"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " Èñïîëüçóåòñÿ ìåòêà ñ ñèìâîëàìè â äðóãîì ðåãèñòðå!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Ôàéë \"%s\" íå ñóùåñòâóåò"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # Ê ìåòêå ÎÒ ñòð. â ôàéëå/òåêñòå"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "Ïîèñê â ôàéëå ìåòîê %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "Èãíîðèðîâàíèå äëèííîé ñòðîêè â ôàéëå tags"
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Îøèáêà ôîðìàòà â ôàéëå ìåòîê \"%s\""
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "Ïåðåä áàéòîì %<PRId64>"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Ôàéë ìåòîê íå îòñîðòèðîâàí: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: Ôàéë ìåòîê íå îáíàðóæåí"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: Íå íàéäåí øàáëîí ìåòêè"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Ìåòêà íå íàéäåíà, ïûòàåìñÿ óãàäàòü!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "Ïîâòîðÿþùååñÿ èìÿ ïîëÿ: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' íå èçâåñòåí. Äîñòóïíû âñòðîåííûå òåðìèíàëû:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "ïî óìîë÷àíèþ '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: Íåâîçìîæíî îòêðûòü ôàéë termcap"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Â terminfo íåò çàïèñè îá ýòîì òåðìèíàëå"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Â termcap íåò çàïèñè îá ýòîì òåðìèíàëå"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Â termcap íåò çàïèñè \"%s\""
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Òðåáóåòñÿ ñïîñîáíîñòü òåðìèíàëà \"cm\""
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Êíîïêè òåðìèíàëà ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: Îøèáêà ÷òåíèÿ ââîäà, âûõîä...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: Íåîæèäàííî èçìåíèëñÿ ñ÷¸ò÷èê ñòðîê"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: Íåâîçìîæíî îòêðûòü ôàéë îòìåí äëÿ çàïèñè: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: Ôàéë îòìåí ïîâðåæä¸í (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "Íåâîçìîæíî çàïèñàòü ôàéë îòìåí â êàêîì-ëèáî êàòàëîãå èç 'undodir'"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Ôàéë îòìåí íå ïåðåçàïèñàí, íåâîçìîæíî ïðî÷èòàòü: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "Ïåðåçàïèñü íå âûïîëíåíà, ýòî íå ôàéë îòìåí: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "Ïðîïóùåíà çàïèñü ôàéëà îòìåí, íå÷åãî îòìåíÿòü"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "Çàïèñü ôàéëà îòìåí: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: Îøèáêà ïðè çàïèñè ôàéëà îòìåí: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "Ôàéë îòìåí íå ïðî÷èòàí, äðóãîé âëàäåëåö: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "×òåíèå ôàéëà îòìåí: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: Íåâîçìîæíî îòêðûòü ôàéë îòìåí äëÿ ÷òåíèÿ: %s"
-
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: Ýòî íå ôàéë îòìåí: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: Íåñîâìåñòèìûé ôàéë îòìåí: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "Èçìåíèëîñü ñîäåðæèìîå ôàéëà, íåâîçìîæíî èñïîëüçîâàòü èíôîðìàöèþ îòìåí"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "Çàâåðøåíî ÷òåíèå ôàéëà îòìåí %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "Óæå íà ñàìîì ïåðâîì èçìåíåíèè"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "Óæå íà ñàìîì ïîñëåäíåì èçìåíåíèè"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: Íå íàéäåíà îòìåíà íîìåð %<PRId64>"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: íåïðàâèëüíûå íîìåðà ñòðîê"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "ñòð. äîáàâëåíà"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "ñòð. äîáàâëåíî"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "ñòð. óäàëåíà"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "ñòð. óäàëåíî"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "èçì."
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "èçì."
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "ïåðåä"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "ïîñëå"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Íå÷åãî îòìåíÿòü"
-
-# Çàãîëîâîê òàáëèöû :undolist
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr " íîìåð èçìåí. êîãäà ñîõðàíåíî"
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> ñ íàçàä"
-
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: Îáúåäèíåíèå îòìåí íå äîïóñêàåòñÿ ïîñëå îòìåíû"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: Ïîâðåæä¸í ñïèñîê îòìåíû"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: Ïîòåðÿíà ñòðîêà îòìåíû"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Çàïëàòêè: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"Äîïîëíèòåëüíûå çàïëàòêè: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Ñ èçìåíåíèÿìè, âíåñ¸ííûìè "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Ñêîìïèëèðîâàí "
-
-#: ../version.c:649
-msgid "by "
-msgstr " "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"Îãðîìíàÿ âåðñèÿ "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "áåç ãðàôè÷åñêîãî èíòåðôåéñà."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " Âêëþ÷¸ííûå (+) è îòêëþ÷¸ííûå (-) îñîáåííîñòè:\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " îáùåñèñòåìíûé ôàéë vimrc: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " ïîëüçîâàòåëüñêèé ôàéë vimrc: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " âòîðîé ïîëüçîâàòåëüñêèé ôàéë vimrc: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " òðåòèé ïîëüçîâàòåëüñêèé ôàéë vimrc: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " ïîëüçîâàòåëüñêèé ôàéë exrc: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " âòîðîé ïîëüçîâàòåëüñêèé ôàéë exrc: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " çíà÷åíèå $VIM ïî óìîë÷àíèþ: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " çíà÷åíèå $VIMRUNTIME ïî óìîë÷àíèþ: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "Ïàðàìåòðû êîìïèëÿöèè: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Ñáîðêà: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " ÎÒËÀÄÎ×ÍÀß ÑÁÎÐÊÀ"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM — Vi IMproved (óëó÷øåííûé Vi)"
-
-#: ../version.c:769
-msgid "version "
-msgstr "âåðñèÿ "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "Áðàì Ìîîëåíààð è äðóãèå"
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim ýòî ñâîáîäíî ðàñïðîñòðàíÿåìàÿ ïðîãðàììà ñ îòêðûòûì êîäîì"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "Áåäíûì äåòÿì â Óãàíäå íóæíà âàøà ïîìîùü!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "íàáåðèòå :help iccf<Enter> äëÿ äîïîëíèòåëüíîé èíôîðìàöèè"
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "íàáåðèòå :q<Enter> ÷òîáû âûéòè èç ïðîãðàììû "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "íàáåðèòå :help<Enter> èëè <F1> äëÿ ïîëó÷åíèÿ ñïðàâêè "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "íàáåðèòå :help version7<Enter> ÷òîáû óçíàòü îá ýòîé âåðñèè "
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Ðàáîòà â Vi-ñîâìåñòèìîì ðåæèìå"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "íàáåðèòå :set nocp<Enter> äëÿ ïåðåõîäà â ðåæèì Vim "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "íàáåðèòå :help cp-default<Enter> äëÿ äîïîëíèòåëüíîé èíôîðìàöèè"
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "Ïîìîãèòå â ðàçðàáîòêå Vim!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "Ñòàíüòå çàðåãèñòðèðîâàííûì ïîëüçîâàòåëåì Vim!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "íàáåðèòå :help sponsor<Enter> äëÿ ïîëó÷åíèÿ èíôîðìàöèè "
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "íàáåðèòå :help register<Enter> äëÿ ïîëó÷åíèÿ èíôîðìàöèè "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "ìåíþ Ñïðàâêà->Ïîìîùü/Ðåãèñòðàöèÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè "
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "Íà ýêðàíå âñåãî îäíî îêíî"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: Îêíî ïðåäïðîñìîòðà îòñóòñòâóåò"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: Îêíî íå ìîæåò áûòü îäíîâðåìåííî ñëåâà ââåðõó è ñïðàâà âíèçó"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: Íåâîçìîæíî ïîìåíÿòü ìåñòàìè, ïîêà äðóãîå îêíî ðàçäåëåíî"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: Íåëüçÿ çàêðûòü ïîñëåäíåå îêíî"
-
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: Íåëüçÿ çàêðûòü îêíî àâòîêîìàíä"
-
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: Íåëüçÿ çàêðûòü îêíî, îñòàíåòñÿ òîëüêî îêíî àâòîêîìàíä"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445:  äðóãîì îêíå åñòü íåñîõðàí¸ííûå èçìåíåíèÿ"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: Íåò èìåíè ôàéëà â ïîçèöèè êóðñîðà"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: bf_key_init() âûçâàí ñ ïóñòûì ïàðîëåì"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr ""
-#~ "E817: Íåïðàâèëüíîå èñïîëüçîâàíèå îáðàòíîãî/ïðÿìîãî ïîðÿäêà áàéò â Blowfish"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: Íå óäàëîñü âûïîëíèòü òåñò sha256"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Íå óäàëîñü âûïîëíèòü òåñò Blowfish"
-
-#~ msgid "Patch file"
-#~ msgstr "Ôàéë-çàïëàòêà"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&OK\n"
-#~ "&C Îòìåíà"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Íåò ñâÿçè ñ ñåðâåðîì Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Íå ìîãó îòïðàâèòü ñîîáùåíèå äëÿ %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Ñåðâåð íå îòâå÷àåò"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Íå ìîãó îòâåòèòü êëèåíòó"
-
-#~ msgid "Save As"
-#~ msgstr "Ñîõðàíèòü êàê"
-
-#~ msgid "Edit File"
-#~ msgstr "Ðåäàêòèðîâàíèå ôàéëà"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (ÍÅ ÍÀÉÄÅÍÎ)"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Âûïîëíèòü ñöåíàðèé Vim"
-
-#~ msgid "unknown"
-#~ msgstr "íåèçâåñòíî"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "Ðåäàêòèðîâàòü ôàéë â íîâîì îêíå"
-
-#~ msgid "Append File"
-#~ msgstr "Äîáàâèòü ôàéë"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "Ïîëîæåíèå îêíà: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "Ïåðåíàïðàâëåíèå çàïèñè"
-
-#~ msgid "Save View"
-#~ msgstr "Ñîõðàíåíèå âèäà"
-
-#~ msgid "Save Session"
-#~ msgstr "Ñîõðàíåíèå ñåàíñà"
-
-#~ msgid "Save Setup"
-#~ msgstr "Ñîõðàíåíèå íàñòðîåê"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< íå äîñòóïíî áåç îñîáåííîñòè +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: Â ýòîé âåðñèè äèãðàôû íå ðàáîòàþò"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "ÿâëÿåòñÿ óñòðîéñòâîì (îòêëþ÷åíî ïðè îïöèè 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "×òåíèå èç ñòàíäàðòíîãî ïîòîêà ââîäà stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[çàøèôðîâàíî]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Ôàéë çàøèôðîâàí íåèçâåñòíûì ìåòîäîì"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans íå ïîçâîëÿåò âûïîëíÿòü çàïèñü íåèçìåí¸ííûõ áóôåðîâ"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "×àñòè÷íàÿ çàïèñü áóôåðîâ NetBeans íå äîïóñêàåòñÿ"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "çàïèñü â óñòðîéñòâî îòêëþ÷åíà ïðè îïöèè 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr ""
-#~ "E460: Âåòâü ðåñóðñà áóäåò ïîòåðÿíà (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Íåâîçìîæíî ñîçäàòü íîâûé ïðîöåññ äëÿ ãðàô. èíòåðôåéñà"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Ïðîöåññó-ïîòîìêó íå óäàëîñü çàïóñòèòü ãðàô. èíòåðôåéñ"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Íåâîçìîæíî ïåðåéòè â ðåæèì ãðàôè÷åñêîãî èíòåðôåéñà"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Íåâîçìîæíî âûïîëíèòü ÷òåíèå \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr ""
-#~ "E665: Íåâîçìîæíî ïåðåéòè â ðåæèì ãðàô. èíòåðôåéñà, íåïðàâèëüíî çàäàíû "
-#~ "øðèôòû"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Íåïðàâèëüíîå çíà÷åíèå îïöèè 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Íåïðàâèëüíîå çíà÷åíèå îïöèè 'imactivatekey'"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Íåâîçìîæíî íàçíà÷èòü öâåò %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Íåò ñîâïàäåíèÿ ïîä êóðñîðîì, ïîèñê ñëåäóþùåãî"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<íåëüçÿ îòêðûòü> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: øðèôò %s íå íàéäåí"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: âîçâðàò â òåêóùèé êàòàëîã íåâîçìîæåí"
-
-#~ msgid "Pathname:"
-#~ msgstr "Ïóòü ê ôàéëó:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: íå ìîãó íàéòè òåêóùèé êàòàëîã"
-
-#~ msgid "OK"
-#~ msgstr "Äà"
-
-#~ msgid "Cancel"
-#~ msgstr "Îòìåíà"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "Ïîëîñà ïðîêðóòêè: íå ìîãó îïðåäåëèòü ãåîìåòðèþ ïîëçóíêà"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Äèàëîãîâîå îêíî Vim"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr ""
-#~ "E232: \"Ïóçûðü\" äëÿ âû÷èñëåíèé, âêëþ÷àþùèé è ñîîáùåíèå, è îáðàòíûé "
-#~ "âûçîâ, íå ìîæåò áûòü ñîçäàí"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Ìåòîäû Ââîäà"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM — Ïîèñê è çàìåíà..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM — Ïîèñê..."
-
-#~ msgid "Find what:"
-#~ msgstr "×òî èùåì:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Íà ÷òî çàìåíÿåì:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Òîëüêî òî÷íûå ñîîòâåòñòâèÿ"
-
-#~ msgid "Match case"
-#~ msgstr "Ðåãèñòðîçàâèñèìûå ñîîòâåòñòâèÿ"
-
-#~ msgid "Direction"
-#~ msgstr "Íàïðàâëåíèå"
-
-#~ msgid "Up"
-#~ msgstr "Ââåðõ"
-
-#~ msgid "Down"
-#~ msgstr "Âíèç"
-
-#~ msgid "Find Next"
-#~ msgstr "Íàéòè ñëåäóþùåå"
-
-#~ msgid "Replace"
-#~ msgstr "Çàìåíà"
-
-#~ msgid "Replace All"
-#~ msgstr "Çàìåíèòü âñå"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: Ïîëó÷åí çàïðîñ íà ïðåêðàùåíèå ðàáîòû îò äèñïåò÷åðà ñåàíñîâ\n"
-
-#~ msgid "Close"
-#~ msgstr "Çàêðûòü"
-
-#~ msgid "New tab"
-#~ msgstr "Íîâàÿ âêëàäêà"
-
-#~ msgid "Open Tab..."
-#~ msgstr "Îòêðûòü âêëàäêó..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: Îñíîâíîå îêíî áûëî íåîæèäàííî çàêðûòî\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&Ôèëüòð"
-
-#~ msgid "&Cancel"
-#~ msgstr "Î&òìåíà"
-
-#~ msgid "Directories"
-#~ msgstr "Êàòàëîãè"
-
-#~ msgid "Filter"
-#~ msgstr "Ôèëüòð"
-
-#~ msgid "&Help"
-#~ msgstr "&Ñïðàâêà"
-
-#~ msgid "Files"
-#~ msgstr "Ôàéëû"
-
-#~ msgid "&OK"
-#~ msgstr "&Äà"
-
-#~ msgid "Selection"
-#~ msgstr "Âûäåëåíèå"
-
-#~ msgid "Find &Next"
-#~ msgstr "Íàéòè &ñëåäóþùåå"
-
-#~ msgid "&Replace"
-#~ msgstr "Çà&ìåíà"
-
-#~ msgid "Replace &All"
-#~ msgstr "Çàìåíèòü &âñå"
-
-#~ msgid "&Undo"
-#~ msgstr "Î&òìåíà"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Îêíî ñ çàãîëîâêîì \"%s\" íå îáíàðóæåíî"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Ïàðàìåòð íå ïîääåðæèâàåòñÿ: \"-%s\"; èñïîëüçóéòå âåðñèþ OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Íåâîçìîæíî îòêðûòü îêíî âíóòðè ïðèëîæåíèÿ MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Çàêðûòü âêëàäêó"
-
-#~ msgid "Open tab..."
-#~ msgstr "Îòêðûòü âêëàäêó..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "Ïîèñê ñòðîêè (èñïîëüçóéòå '\\\\' äëÿ ïîèñêà '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Ïîèñê è çàìåíà (èñïîëüçóéòå '\\\\' äëÿ ïîèñêà '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Íå èñïîëüçóåòñÿ"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Êàòàëîã\t*.íè÷åãî\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Íåâîçìîæíî âûäåëèòü çàïèñü â òàáëèöå öâåòà, íåêîòîðûå öâåòà "
-#~ "ìîãóò îòîáðàæàòüñÿ íåïðàâèëüíî"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr ""
-#~ "E250: Â íàáîðå øðèôòîâ %s îòñóòñòâóþò øðèôòû äëÿ ñëåäóþùèõ êîäèðîâîê:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Íàáîð øðèôòîâ: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Øðèôò '%s' íå ÿâëÿåòñÿ ìîíîøèðèííûì"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Íàáîð øðèôòîâ: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Font0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Font1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr ""
-#~ "Øèðèíà øðèôòà font%<PRId64> äîëæíà áûòü âäâîå áîëüøå øèðèíû øðèôòà font0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "Øèðèíà øðèôòà font0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "Øèðèíà øðèôòà font1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Íåïðàâèëüíîå îïðåäåëåíèå øðèôòà"
-
-#~ msgid "&Dismiss"
-#~ msgstr "Î&òêëîíèòü"
-
-#~ msgid "no specific match"
-#~ msgstr "íåò ñïåöèàëüíîãî ñîâïàäåíèÿ"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim — Âûáîð øðèôòà"
-
-#~ msgid "Name:"
-#~ msgstr "Íàçâàíèå:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Ïîêàçûâàòü ðàçìåð â ïóíêòàõ"
-
-#~ msgid "Encoding:"
-#~ msgstr "Êîäèðîâêà:"
-
-#~ msgid "Font:"
-#~ msgstr "Øðèôò:"
-
-#~ msgid "Style:"
-#~ msgstr "Ñòèëü:"
-
-#~ msgid "Size:"
-#~ msgstr "Ðàçìåð:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: ÎØÈÁÊÀ àâòîìàòèêè Õàíãûë"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: Îøèáêà stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: Íåâîçìîæíî îòêðûòü áàçó äàííûõ cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: Èíôîðìàöèÿ î áàçå äàííûõ cscope íå äîñòóïíà"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Áèáëèîòåêà Lua íå ìîæåò áûòü çàãðóæåíà."
-
-#~ msgid "cannot save undo information"
-#~ msgstr "íåâîçìîæíî ñîõðàíèòü èíôîðìàöèþ îá îòìåíå îïåðàöèè"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà "
-#~ "áèáëèîòåêà MzScheme"
-
-#~ msgid "invalid expression"
-#~ msgstr "íåïðàâèëüíîå âûðàæåíèå"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "âûðàæåíèÿ îòêëþ÷åíû ïðè êîìïèëÿöèè"
-
-#~ msgid "hidden option"
-#~ msgstr "ñêðûòàÿ îïöèÿ"
-
-#~ msgid "unknown option"
-#~ msgstr "íåèçâåñòíàÿ îïöèÿ"
-
-#~ msgid "window index is out of range"
-#~ msgstr "èíäåêñ îêíà çà ïðåäåëàìè äèàïàçîíà"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "íåâîçìîæíî îòêðûòü áóôåð"
-
-#~ msgid "cannot delete line"
-#~ msgstr "íåâîçìîæíî óäàëèòü ñòðîêó"
-
-#~ msgid "cannot replace line"
-#~ msgstr "íåâîçìîæíî çàìåíèòü ñòðîêó"
-
-#~ msgid "cannot insert line"
-#~ msgstr "íåâîçìîæíî âñòàâèòü ñòðîêó"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "ñòðîêà íå ìîæåò ñîäåðæàòü ñèìâîë íîâîé ñòðîêè"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "íåâîçìîæíî ïðåîáðàçîâàòü çíà÷åíèÿ Scheme â Vim"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "îøèáêà Vim: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "îøèáêà Vim"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "íåïðàâèëüíûé áóôåð"
-
-#~ msgid "window is invalid"
-#~ msgstr "íåïðàâèëüíîå îêíî"
-
-#~ msgid "linenr out of range"
-#~ msgstr "íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "íå äîïóñêàåòñÿ â ïåñî÷íèöå Vim"
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr ""
-#~ "E836: Äàííûé Vim íå ìîæåò âûïîëíèòü :python ïîñëå èñïîëüçîâàíèÿ :py3"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà "
-#~ "áèáëèîòåêà Python"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Íåâîçìîæíî âûïîëíèòü ðåêóðñèâíûé âûçîâ Python"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr ""
-#~ "E837: Äàííûé Vim íå ìîæåò âûïîëíèòü :py3 ïîñëå èñïîëüçîâàíèÿ :python"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ äîëæåí áûòü ýêçåìïëÿðîì èëè ñòðîêîé"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà "
-#~ "áèáëèîòåêà Ruby"
-
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: Íåîæèäàííûé return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: Íåîæèäàííûé next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: Íåîæèäàííûé break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: Íåîæèäàííûé redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: retry âíå îïåðàòîðà rescue"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: Íåîáðàáîòàííîå èñêëþ÷åíèå"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Íåèçâåñòíîå ñîñòîÿíèå longjmp %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Ïåðåêëþ÷åíèå ìåæäó ðåàëèçàöèåé/îïðåäåëåíèåì"
-
-#~ msgid "Show base class of"
-#~ msgstr "Ïîêàçàòü îñíîâíîé êëàññ"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Ïîêàçàòü ïåðåãðóæåííûå ôóíêöèè"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Ïîëó÷èòü èç ôàéëà"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Ïîëó÷èòü èç ïðîåêòà"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Ïîëó÷èòü èç âñåõ ïðîåêòîâ"
-
-#~ msgid "Retrieve"
-#~ msgstr "Ïîëó÷èòü"
-
-#~ msgid "Show source of"
-#~ msgstr "Ïîêàçàòü èñõîäíûé êîä"
-
-#~ msgid "Find symbol"
-#~ msgstr "Íàéòè ñèìâîë"
-
-#~ msgid "Browse class"
-#~ msgstr "Ïðîñìîòð êëàññà"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Ïîêàçàòü êëàññ â èåðàðõèè"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Ïîêàçàòü êëàññ â îãðàíè÷åííîé èåðàðõèè"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref ññûëàåòñÿ íà"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Ññûëêà íà xref èç"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref èìååò"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref èñïîëüçóåòñÿ"
-
-#~ msgid "Show docu of"
-#~ msgstr "Ïîêàçàòü docu"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Ñîçäàòü docu"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Íåâîçìîæíî ïîäñîåäèíèòüñÿ ê SNiFF+. Ïðîâåðüòå íàñòðîéêè îêðóæåíèÿ."
-#~ "(sniffemacs äîëæíû áûòü óêàçàíû â ïåðåìåííîé $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Îøèáêà âî âðåìÿ ÷òåíèÿ. Îòñîåäèíåíèå"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "Â íàñòîÿùèé ìîìåíò SNiFF+ "
-
-#~ msgid "not "
-#~ msgstr "íå "
-
-#~ msgid "connected"
-#~ msgstr "ïîäñîåäèí¸í"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Íåèçâåñòíûé çàïðîñ SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Îøèáêà ñîåäèíåíèÿ ñî SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ íå ïîäñîåäèí¸í"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Ýòî íå áóôåð SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: Îøèáêà âî âðåìÿ çàïèñè. Îòñîåäèíåíèå"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "íåïðàâèëüíûé íîìåð áóôåðà"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ïîêà íå ðåàëèçîâàíî"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "íåâîçìîæíî íàçíà÷èòü ñòðîêó èëè ñòðîêè"
-
-#~ msgid "invalid mark name"
-#~ msgstr "íåïðàâèëüíîå èìÿ îòìåòêè"
-
-#~ msgid "mark not set"
-#~ msgstr "îòìåòêà íå óñòàíîâëåíà"
-
-#~ msgid "row %d column %d"
-#~ msgstr "ðÿä %d êîëîíêà %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "íåâîçìîæíî âñòàâèòü èëè äîáàâèòü ñòðîêó"
-
-#~ msgid "line number out of range"
-#~ msgstr "íîìåð ñòðîêè çà ïðåäåëàìè äèàïàçîíà"
-
-#~ msgid "unknown flag: "
-#~ msgstr "íåèçâåñòíûé ôëàã: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "íåèçâåñòíàÿ vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "êëàâèàòóðíîå ïðåðûâàíèå"
-
-#~ msgid "vim error"
-#~ msgstr "îøèáêà VIM"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr ""
-#~ "íåâîçìîæíî ñîçäàòü êîìàíäó áóôåðà èëè îêíà: îáúåêò â ïðîöåññå óäàëåíèÿ"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr ""
-#~ "íåâîçìîæíî çàðåãèñòðèðîâàòü êîìàíäó ñ îáðàòíûì âûçîâîì: áóôåð èëè îêíî â "
-#~ "ïðîöåññå óäàëåíèÿ"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: ÊÐÈÒÈ×ÅÑÊÀß ÎØÈÁÊÀ TCL: ïîâðåæä¸í ñïèñîê ññûëîê?! Ñîîáùèòå îá ýòîì "
-#~ "ïî àäðåñó vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "íåâîçìîæíî çàðåãèñòðèðîâàòü êîìàíäó ñ îáðàòíûì âûçîâîì: ññûëêà íà áóôåð "
-#~ "èëè îêíî íå îáíàðóæåíà"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåíà "
-#~ "áèáëèîòåêà Tcl"
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Êîä âûõîäà %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "íåâîçìîæíî ïîëó÷èòü ñòðîêó"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Íåâîçìîæíî çàðåãèñòðèðîâàòü èìÿ ñåðâåðà êîìàíä"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Íå óäàëàñü îòïðàâêà êîìàíäû â äðóãóþ ïðîãðàììó"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: Èñïîëüçóåòñÿ íåïðàâèëüíûé id ñåðâåðà: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: Íåïðàâèëüíî ñôîðìèðîâàíî çíà÷åíèå äàííîãî ïðîöåññà VIM â ðååñòðå. "
-#~ "Óäàëåíî!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "NetBeans íå ïîääåðæèâàåòñÿ ñ ýòèì ãðàôè÷åñêèì èíòåðôåéñîì\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr ""
-#~ "Äàííûé Vim áûë ñêîìïèëèðîâàí ñ âûêëþ÷åííîé îñîáåííîñòüþ ïðîñìîòðà îòëè÷èé"
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "Íåâîçìîæíî èñïîëüçîâàòü '-nb': íå âêëþ÷åíî ïðè êîìïèëÿöèè\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: Îøèáêà: Íå óäàëîñü çàïóñòèòü gvim èç NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "Åñëè ðåãèñòð èãíîðèðóåòñÿ, äîáàâüòå ïåðåä ôëàãîì / äëÿ âåðõíåãî ðåãèñòðà"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tÇàðåãèñòðèðîâàòü ýòîò gvim äëÿ OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tÎòêëþ÷èòü ðåãèñòðàöèþ äàííîãî gvim äëÿ OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tÇàïóñòèòü ñ ãðàôè÷åñêèì èíòåðôåéñîì (êàê \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr ""
-#~ "-f èëè --nofork\t àêòèâíîé çàäà÷å: Íå âûïîëíÿòü fork ïðè çàïóñêå GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tÍå èñïîëüçîâàòü newcli äëÿ îòêðûòèÿ îêíà"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <óñòðîéñòâî>\t\tÈñïîëüçîâàòü äëÿ I/O óêàçàííîå <óñòðîéñòâî>"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\tÈñïîëüçîâàòü <gvimrc> âìåñòî ëþáûõ ôàéëîâ .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tÐåäàêòèðîâàíèå çàøèôðîâàííûõ ôàéëîâ"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <ýêðàí>\tÏîäñîåäèíèòü VIM ê óêàçàííîìó X-ñåðâåðó"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tÍå âûïîëíÿòü ñîåäèíåíèå ñ ñåðâåðîì X"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr ""
-#~ "--remote <ôàéëû>\tÏî âîçìîæíîñòè ðåäàêòèðîâàòü <ôàéëû> íà ñåðâåðå Vim"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <ôàéëû> Òî æå, íî áåç æàëîá íà îòñóòñòâèå ñåðâåðà"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <ôàéëû> Òî æå, ÷òî è --remote, íî ñ îæèäàíèåì çàâåðøåíèÿ"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <ôàéëû> Òî æå, íî áåç æàëîá íà îòñóòñòâèå ñåðâåðà"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <ôàéëû> Òî æå, ÷òî è --remote, íî ñ "
-#~ "âêëàäêàìè"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <êíîïêè>\tÎòïðàâèòü <êíîïêè> íà ñåðâåð Vim è âûéòè"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr ""
-#~ "--remote-expr <âûðàæ>\tÂû÷èñëèòü <âûðàæ> íà ñåðâåðå Vim è íàïå÷àòàòü"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr ""
-#~ "--serverlist\t\tÏîêàçàòü ñïèñîê èì¸í ñåðâåðîâ Vim è çàâåðøèòü ðàáîòó"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr ""
-#~ "--servername <èìÿ>\tÎòïðàâèòü íà/ñòàòü ñåðâåðîì Vim ñ óêàçàííûì <èìåíåì>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ïàðàìåòðû äëÿ gvim (âåðñèÿ Motif):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ïàðàìåòðû äëÿ gvim (âåðñèÿ neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ïàðàìåòðû äëÿ gvim (âåðñèÿ Athena):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <äèñïëåé>\tÇàïóñòèòü VIM íà óêàçàííîì <äèñïëåå>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tÇàïóñòèòü VIM â ñâ¸ðíóòîì âèäå"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr ""
-#~ "-background <öâåò>\tÈñïîëüçîâàòü óêàçàííûé <öâåò> äëÿ ôîíà (òàêæå: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <öâåò>\tÈñïîëüçîâàòü <öâåò> äëÿ îáû÷íîãî òåêñòà (òàêæå: -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr ""
-#~ "-font <øðèôò>\t\tÈñïîëüçîâàòü <øðèôò> äëÿ îáû÷íîãî òåêñòà (òàêæå: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <øðèôò>\tÈñïîëüçîâàòü <øðèôò> äëÿ æèðíîãî òåêñòà"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <øðèôò>\tÈñïîëüçîâàòü <øðèôò> äëÿ íàêëîííîãî òåêñòà"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr ""
-#~ "-geometry <ãåîìåòðèÿ>\tÈñïîëüçîâàòü íà÷àëüíóþ <ãåîìåòðèþ> (òàêæå: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <øèðèíà>\tÈñïîëüçîâàòü <øèðèíó> áîðäþðà (òàêæå: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <øèðèíà> Èñïîëüçîâàòü øèðèíó ïîëîñû ïðîêðóòêè (òàêæå: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <âûñîòà>\tÈñïîëüçîâàòü <âûñîòó> ìåíþ (òàêæå: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tÈñïîëüçîâàòü èíâåðñíûé âèäåîðåæèì (òàêæå: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tÍå èñïîëüçîâàòü èíâåðñíûé âèäåîðåæèì (òàêæå: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <ðåñóðñ>\tÓñòàíîâèòü óêàçàííûé <ðåñóðñ>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ïàðàìåòðû äëÿ gvim (âåðñèÿ GTK+):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr ""
-#~ "-display <äèñïëåé>\tÇàïóñòèòü VIM íà óêàçàííîì <äèñïëåå> (òàêæå: --"
-#~ "display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr ""
-#~ "--role <ðîëü>\tÓñòàíîâèòü óíèêàëüíóþ <ðîëü> äëÿ èäåíòèôèêàöèè ãëàâíîãî "
-#~ "îêíà"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tÎòêðûòü Vim âíóòðè äðóãîãî êîìïîíåíòà GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr ""
-#~ "--echo-wid\t\tÂûâåñòè Window ID äëÿ gvim íà ñòàíäàðòíûé ïîòîê âûâîäà"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <çàãîëîâîê ðîäèòåëÿ>\tÎòêðûòü Vim â ðîäèòåëüñêîì ïðèëîæåíèè"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tÎòêðûòü Vim âíóòðè äðóãîãî êîìïîíåíòà win32"
-
-#~ msgid "No display"
-#~ msgstr "Íåò äèñïëåÿ"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Îòïðàâêà íå óäàëàñü.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Îòïðàâêà íå óäàëàñü. Ïîïûòêà ìåñòíîãî âûïîëíåíèÿ\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "îòðåäàêòèðîâàíî %d èç %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Íåò äèñïëåÿ: îòïðàâêà âûðàæåíèÿ íå óäàëàñü.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": Îòïðàâêà âûðàæåíèÿ íå óäàëàñü.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: Íåäîïóñòèìîå èìÿ êîäèðîâêè"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Íåâîçìîæíî íàçíà÷èòü çíà÷åíèÿ êîíòåêñòà ââîäà"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Íåâîçìîæíî ñîçäàòü êîíòåêñò ââîäà"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Íåóäà÷íàÿ ïîïûòêà îòêðûòü ìåòîä ââîäà"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr ""
-#~ "E287: Ïðåäóïðåæäåíèå: íåâîçìîæíî íàçíà÷èòü îáð. âûçîâ óíè÷òîæåíèÿ ìåòîäà "
-#~ "ââîäà"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: Ìåòîä ââîäà íå ïîääåðæèâàåò ñòèëè"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr ""
-#~ "E289: Ìåòîä ââîäà íå ïîääåðæèâàåò ìîé òèï ïðåäâàðèòåëüíîãî ðåäàêòèðîâàíèÿ"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: Îøèáêà ïðè îáíîâëåíèè øèôðîâàíèÿ ñâîï-ôàéëà"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s çàøèôðîâàí, à ýòà âåðñèÿ Vim íå ïîääåðæèâàåò øèôðîâàíèå"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Ñâîï-ôàéë çàøèôðîâàí: \"%s\""
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "Åñëè âû ââåëè íîâûé ïàðîëü äëÿ øèôðîâàíèÿ, íî íå çàïèñàëè òåêñòîâûé ôàéë,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "òî ââåäèòå íîâûé ïàðîëü äëÿ øèôðîâàíèÿ."
-
-# Ïåðåâîä ñîîáùåíèÿ ðàçäåë¸í íà äâå ÷àñòè, ÷àñòü ïåðâàÿ
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "Åñëè âû çàïèñàëè òåêñòîâûé ôàéë ïîñëå èçìåíåíèÿ ïàðîëÿ øèôðîâàíèÿ, òî "
-#~ "íàæìèòå"
-
-# Ïåðåâîä ñîîáùåíèÿ ðàçäåë¸í íà äâå ÷àñòè, ÷àñòü âòîðàÿ
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "Enter äëÿ èñïîëüçîâàíèÿ îäíîãî êëþ÷à äëÿ òåêñòîâîãî ôàéëà è ñâîï-ôàéëà"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr ""
-#~ "Èñïîëüçîâàíèå êëþ÷à øèôðîâàíèÿ èç ñâîï-ôàéëà äëÿ òåêñòîâîãî ôàéëà.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [íå ïðèãîäåí äëÿ èñïîëüçîâàíèÿ ñ äàííîé âåðñèåé Vim]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "Îòîðâàòü ýòî ìåíþ"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Âûáîð êàòàëîãà"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Ñîõðàíåíèå ôàéëà"
-
-#~ msgid "Open File dialog"
-#~ msgstr "Îòêðûòèå ôàéëà"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr ""
-#~ "E338: Èçâèíèòå, íî â êîíñîëüíîì ðåæèìå íåò ïðîâîäíèêà ïî ôàéëîâîé ñèñòåìå"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: ñîõðàíåíèå ôàéëîâ...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: Ãîòîâî.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "ÎØÈÁÊÀ: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[áàéò] âñåãî âûäåë.-îñâîá. %<PRIu64>-%<PRIu64>, èñïîëüç. %<PRIu64>, ìàêñ. "
-#~ "èñïîëüç. %<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[âûçîâû] re/malloc() âñåãî %<PRIu64>, free() âñåãî %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: Ñòðîêà ñòàíîâèòñÿ ñëèøêîì äëèííîé"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Âíóòðåííÿÿ îøèáêà: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Íåäîïóñòèìàÿ ôîðìà êóðñîðà"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "Ââåäèòå ïàðîëü äëÿ øèôðîâàíèÿ: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "Ïîâòîðèòå ââîä ïàðîëÿ: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Ââåä¸ííûå ïàðîëè íå ñîâïàäàþò!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ NetBeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Íåâîçìîæíî ñîåäèíèòüñÿ ñ NetBeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: Íåïðàâèëüíûé ðåæèì äîñòóïà ê èíôîðìàöèè î ñîåäèíåíèè ñ NetBeans: "
-#~ "\"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "÷òåíèå èç ãíåçäà NetBeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Ïîòåðÿíî ñîåäèíåíèå ñ NetBeans äëÿ áóôåðà %<PRId64>"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: NetBeans íå ïîääåðæèâàåòñÿ ñ ýòèì ãðàôè÷åñêèì èíòåðôåéñîì"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: óæå ñîåäèí¸í ñ NetBeans"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr ""
-#~ "E505: %s îòêðûò òîëüêî äëÿ ÷òåíèÿ (äîáàâüòå !, ÷òîáû îáîéòè ïðîâåðêó)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: eval íå äîñòóïíà"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "î÷èùåíî ñòðîê: %<PRId64>"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530:  ãðàôè÷åñêîì èíòåðôåéñå èçìåíÿòü òåðìèíàë íåâîçìîæíî"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: Äëÿ çàïóñêà ãðàôè÷åñêîãî èíòåðôåéñà èñïîëüçóéòå \":gui\""
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Íå ìîæåò áûòü èçìåíåíî â ãðàôè÷åñêîì èíòåðôåéñå GTK+ 2"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Íåïðàâèëüíûå øðèôòû"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: Íåâîçìîæíî âûáðàòü øðèôòîâîé íàáîð"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Íåïðàâèëüíûé øðèôòîâîé íàáîð"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: Íåâîçìîæíî âûáðàòü øðèôò ñ ñèìâîëàìè äâîéíîé øèðèíû"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Íåïðàâèëüíûé øðèôò ñ ñèìâîëàìè äâîéíîé øèðèíû"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Ìûøü íå ïîääåðæèâàåòñÿ"
-
-#~ msgid "cannot open "
-#~ msgstr "íåâîçìîæíî îòêðûòü "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Íåâîçìîæíî îòêðûòü îêíî!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Íåîáõîäèìà Amigados âåðñèè 2.04 èëè áîëåå ïîçäíåé\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Íåîáõîäèìà %s âåðñèè %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Íåâîçìîæíî îòêðûòü NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Íåâîçìîæíî ñîçäàòü "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Ïðåêðàùåíèå ðàáîòû Vim ñ êîäîì %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "íåâîçìîæíî ñìåíèòü ðåæèì êîíñîëè?!\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: íå â êîíñîëè??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Íåâîçìîæíî âûïîëíèòü îáîëî÷êó ñ ïàðàìåòðîì -f"
-
-#~ msgid "Cannot execute "
-#~ msgstr "Íåâîçìîæíî âûïîëíèòü "
-
-#~ msgid "shell "
-#~ msgstr "îáîëî÷êà "
-
-#~ msgid " returned\n"
-#~ msgstr " çàâåðøèëà ðàáîòó\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ñëèøêîì ìàëàÿ âåëè÷èíà ANCHOR_BUF_SIZE."
-
-#~ msgid "I/O ERROR"
-#~ msgstr "ÎØÈÁÊÀ ÂÂÎÄÀ/ÂÛÂÎÄÀ"
-
-#~ msgid "Message"
-#~ msgstr "Ñîîáùåíèå"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr ""
-#~ "Çíà÷åíèå îïöèè 'columns' íå ðàâíî 80, âíåøíèå ïðîãðàììû íå âûïîëíÿþòñÿ"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Íåóäà÷íîå çàâåðøåíèå âûáîðà ïðèíòåðà"
-
-#~ msgid "to %s on %s"
-#~ msgstr "â %s íà %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Íåèçâåñòíûé øðèôò ïðèíòåðà: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: Îøèáêà ïå÷àòè: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "Ïå÷àòü '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: Íåäîïóñòèìîå èìÿ êîäèðîâêè \"%s\" â èìåíè øðèôòà \"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Íåäîïóñòèìûé ñèìâîë '%c' â èìåíè øðèôòà \"%s\""
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Äâîéíîé ñèãíàë, çàâåðøåíèå ðàáîòû\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: Ïîëó÷åí óáèéñòâåííûé ñèãíàë %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: Ïîëó÷åí óáèéñòâåííûé ñèãíàë\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "Îòêðûòèå äèñïëåÿ X çàíÿëî %<PRId64> msec"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Îøèáêà X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "Ïðîâåðêà äèñïëåÿ X çàâåðøåíà íåóäà÷íî"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Îòêðûòèå äèñïëåÿ X íå âûïîëíåíî â îòâåä¸ííîå âðåìÿ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íåâîçìîæíî çàïóñòèòü îáîëî÷êó sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íåâîçìîæíî ñîçäàòü òðóáû\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íåâîçìîæíî âûïîëíèòü fork()\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Âûïîëíåíèå êîìàíäû ïðåðâàíî\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP óòåðÿíî ñîåäèíåíèå ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Íåóäà÷íîå îòêðûòèå äèñïëåÿ X"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP îáðàáàòûâàåò çàïðîñ ñàìîñîõðàíåíèÿ"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP îòêðûâàåò ñîåäèíåíèå"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ïîòåðÿíî ñëåæåíèå çà ñîåäèíåíèåì ICE"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP íåóäà÷íî âûïîëíåíî SmcOpenConnection: %s"
-
-#~ msgid "At line"
-#~ msgstr "Â ñòðîêå"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Íåâîçìîæíî çàãðóçèòü vim32.dll!"
-
-#~ msgid "VIM Error"
-#~ msgstr "Îøèáêà VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Íåâîçìîæíî èñïðàâèòü óêàçàòåëè ôóíêöèé äëÿ DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "çàâåðøåíèå ðàáîòû îáîëî÷êè ñ êîäîì %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: Ïåðåõâà÷åíî ñîáûòèå %s\n"
-
-#~ msgid "close"
-#~ msgstr "çàêðûòèå"
-
-#~ msgid "logoff"
-#~ msgstr "îòêëþ÷åíèå"
-
-#~ msgid "shutdown"
-#~ msgstr "çàâåðøåíèå"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Êîìàíäà íå íàéäåíà"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "VIMRUN.EXE íå íàéäåí â ïóòè, çàäàííîì â $PATH.\n"
-#~ "Âíåøíèå êîìàíäû íå áóäóò îñòàíàâëèâàòüñÿ ïîñëå âûïîëíåíèÿ.\n"
-#~ "Äîïîëíèòåëüíàÿ èíôîðìàöèÿ â :help win32-vimrun"
-
-#~ msgid "Vim Warning"
-#~ msgstr "Ïðåäóïðåæäåíèå Vim"
-
-#~ msgid "Error file"
-#~ msgstr "Ôàéë îøèáîê"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: îøèáêà ïðè ñîçäàíèè ÍÊÀ ñ êëàññîì ýêâèâàëåíòíîñòè!"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (ÍÊÀ) íåâîçìîæíî âûäåëèòü ïàìÿòü äëÿ ïðîõîäà âåòâè!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Ïðåäóïðåæäåíèå: Íåâîçìîæíî íàéòè ñïèñîê ñëîâ \"%s_%s.spl\" èëè \"%s_ascii."
-#~ "spl\""
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "Ïðåîáðàçîâàíèå â %s íå ïîääåðæèâàåòñÿ"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: Íåäîñòàòî÷íî îïåðàòèâíîé ïàìÿòè, ñïèñîê ñëîâ áóäåò íå ïîëîí"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Ïóòü ê ôàéëó ìåòîê %s îáðåçàí\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "çàïóñê íîâîé îáîëî÷êè\n"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "Âìåñòî ïóñòîãî âûäåëåíèÿ èñïîëüçóåòñÿ CUT_BUFFER0"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Îòìåíà íåâîçìîæíà; ïðîäîëæàòü âûïîëíåíèå"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Íå çàøèôðîâàííûé ôàéë èìååò çàøèôðîâàííûé ôàéë îòìåí: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Íå óäàëîñü äåøèôðîâàòü ôàéë îòìåí: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Ôàéë îòìåí çàøèôðîâàí: %s"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ ñ ãðàôè÷åñêèì èíòåðôåéñîì äëÿ MS-Windows 16/32 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ ñ ãðàôè÷åñêèì èíòåðôåéñîì äëÿ MS-Windows 64 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ ñ ãðàôè÷åñêèì èíòåðôåéñîì äëÿ MS-Windows 32 áèò"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " â ðåæèìå Win32"
-
-#~ msgid " with OLE support"
-#~ msgstr " ñ ïîääåðæêîé OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Êîíñîëüíàÿ âåðñèÿ äëÿ MS-Windows 64 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Êîíñîëüíàÿ âåðñèÿ äëÿ MS-Windows 32 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MS-Windows 16 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MS-DOS 32 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MS-DOS 16 áèò"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ äëÿ OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Áîëüøàÿ âåðñèÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Îáû÷íàÿ âåðñèÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Ìàëàÿ âåðñèÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñèÿ \"Êðîõà\" "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK2-GNOME."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì GTK2."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì X11-Motif."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì X11-neXtaw."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì X11-Athena."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì Photon."
-
-#~ msgid "with GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì Carbon."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "ñ ãðàôè÷åñêèì èíòåðôåéñîì Cocoa."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "ñ êëàññè÷åñêèì ãðàôè÷åñêèì èíòåðôåéñîì."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " îáùåñèñòåìíûé ôàéë gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " ïîëüçîâàòåëüñêèé ôàéë gvimrc: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr " âòîðîé ïîëüçîâàòåëüñêèé ôàéë gvimrc: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr " òðåòèé ïîëüçîâàòåëüñêèé ôàéë gvimrc: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " îáùåñèñòåìíûé ôàéë ìåíþ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "Êîìïèëÿòîð: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "ìåíþ Ñïðàâêà->Ñèðîòû äëÿ ïîëó÷åíèÿ èíôîðìàöèè "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Áåçðåæèìíàÿ ðàáîòà, âñòàâêà ââåä¸ííîãî òåêñòà"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr ""
-#~ "ìåíþ Ïðàâêà->Ãëîáàëüíûå íàñòðîéêè->Ðåæèì Âñòàâêè "
-
-#~ msgid " for two modes "
-#~ msgstr " äëÿ äâóõ ðåæèìîâ "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr ""
-#~ "ìåíþ Ïðàâêà->Ãëîáàëüíûå íàñòðîéêè->Ñîâìåñòèìîñòü ñ Vi "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " äëÿ ïåðåõîäà â ðåæèì Vim "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "ÏÐÅÄÓÏÐÅÆÄÅÍÈÅ: îáíàðóæåíà Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "íàáåðèòå :help windows95<Enter> äëÿ ïîëó÷åíèÿ èíôîðìàöèè "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Íåâîçìîæíî çàãðóçèòü áèáëèîòåêó %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Èçâèíèòå, äàííàÿ êîìàíäà îòêëþ÷åíà: íåâîçìîæíî çàãðóçèòü áèáëèîòåêó Perl"
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: Íå äîïóñêàåòñÿ âû÷èñëåíèå Perl â ïåñî÷íèöå áåç ìîäóëÿ áåçîïàñíîñòè"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Ðåäàêòèðîâàòü â &ðàçíûõ Vim-àõ"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Ðåäàêòèðîâàòü â &îäíîì Vim"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Ñðàâíèòü ñ ïîìîùüþ Vim"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Ðå&äàêòèðîâàòü ñ ïîìîùüþ Vim"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Ðåäàêòèðîâàòü â çàïóùåííîì Vim — "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Ðåäàêòèðîâàòü âûäåëåííûå ôàéëû ñ ïîìîùüþ Vim"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "Îøèáêà ñîçäàíèÿ ïðîöåññà: ïðîâåðüòå äîñòóïíîñòü gvim â ïóòè!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "îøèáêà gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "Ñëèøêîì äëèííûé ïóòü!"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Íåèçâåñòíûé øðèôòîâîé íàáîð: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Íåèçâåñòíûé øðèôò: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Øðèôò \"%s\" íå ÿâëÿåòñÿ ìîíîøèðèííûì"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Íå óäàëîñü çàãðóçèòü ôóíêöèþ %s èç áèáëèîòåêè"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: Èâðèò âûêëþ÷åí ïðè êîìïèëÿöèè\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Ôàðñè âûêëþ÷åíî ïðè êîìïèëÿöèè\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: Àðàáñêèé âûêëþ÷åí ïðè êîìïèëÿöèè\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: Ñåðâåð \"%s\" íå çàðåãèñòðèðîâàí"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: Íåâîçìîæíî îòêðûòü äèñïëåé"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Ïîëó÷åíî íåäîïóñòèìîå âûðàæåíèå"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Íåâîçìîæíî èçìåíèòü îõðàíÿåìóþ îáëàñòü"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans íå äîïóñêàåò èçìåíåíèé â ôàéëàõ òîëüêî äëÿ ÷òåíèÿ"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Òðåáóåòñÿ êëþ÷ øèôðîâàíèÿ äëÿ \"%s\""
-
-#~ msgid "empty keys are not allowed"
-#~ msgstr "Ïóñòûå êëþ÷è íå äîïóñòèìû"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "Ñëîâàðü çàáëîêèðîâàí"
-
-#~ msgid "list is locked"
-#~ msgstr "Ñïèñîê çàáëîêèðîâàí"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "Íåâîçìîæíî äîáàâèòü êëþ÷ '%s' ê ñëîâàðþ"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "Èíäåêñ äîëæåí áûòü öåëûì ÷èñëîì èëè âûáîðêîé, à íå %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "Îæèäàëñÿ ýêçåìïëÿð str() èëè unicode(), íî ïîëó÷åí %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "Îæèäàëñÿ ýêçåìïëÿð bytes() èëè str(), íî ïîëó÷åí %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "Îæèäàëîñü int(), long() èëè ÷òî-òî ïðèâîäèìîå ê long(), íî ïîëó÷åíî %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr "Îæèäàëîñü int() èëè ÷òî-òî ïðèâîäèìîå ê int(), íî ïîëó÷åíî %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "Çíà÷åíèå ñëèøêîì âåëèêî äëÿ öåëî÷èñëåííîãî òèïà C"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "Çíà÷åíèå ñëèøêîì ìàëî äëÿ öåëî÷èñëåííîãî òèïà C"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "Íîìåð äîëæåí áûòü áîëüøå íóëÿ"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "Íîìåð äîëæåí áûòü áîëüøå èëè ðàâåí íóëþ"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "Íåâîçìîæíî óäàëèòü àòðèáóòû OutputObject"
-
-#~ msgid "invalid attribute: %s"
-#~ msgstr "Íåïðàâèëüíûé àòðèáóò: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: Îøèáêà èíèöèàëèçàöèè îáúåêòîâ I/O"
-
-#~ msgid "failed to change directory"
-#~ msgstr "Íåâîçìîæíî ñìåíèòü êàòàëîã"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "Îæèäàëñÿ 3-êîðòåæ êàê ðåçóëüòàò imp.find_module(), íî ïîëó÷åí %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr ""
-#~ "Îæèäàëñÿ 3-êîðòåæ êàê ðåçóëüòàò imp.find_module(), íî ïîëó÷åí êîðòåæ ñ "
-#~ "ðàçìåðîì %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: imp.find_module âîçâðàòèë "
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "Íåâîçìîæíî óäàëèòü àòðèáóòû vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "Íåâîçìîæíî èçìåíèòü ôèêñèðîâàííûé ñëîâàðü"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "Íåâîçìîæíî óñòàíîâèòü àòðèáóò %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "Õýø-òàáëèöà èçìåíèëàñü ïðè èòåðàöèè"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "Îæèäàëñÿ ýëåìåíò-ïîñëåäîâàòåëüíîñòü ðàçìåðà 2, à ðàçìåð ïîëó÷åííîé "
-#~ "ïîñëåäîâàòåëüíîñòè %d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "Êîíñòðóêòîð ñïèñêà íå äîïóñêàåò êëþ÷åâûå ñëîâà êàê àðãóìåíòû"
-
-#~ msgid "list index out of range"
-#~ msgstr "Èíäåêñ ñïèñêà çà ïðåäåëàìè äèàïàçîíà"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: íå óäàëîñü ïîëó÷èòü ýëåìåíò VIM-ñïèñêà %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "Íåâîçìîæíî äîáàâèòü ýëåìåíò â ñïèñîê"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: íåò ýëåìåíòà VIM-ñïèñêà %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: íå óäàëîñü äîáàâèòü ýëåìåíò â ñïèñîê"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "Íåâîçìîæíî óäàëèòü àòðèáóòû vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "Íåâîçìîæíî èçìåíèòü ôèêñèðîâàííûé ñïèñîê"
-
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "Íå ñóùåñòâóåò áåçûìÿííîé ôóíêöèè %s"
-
-#~ msgid "function %s does not exist"
-#~ msgstr "Ôóíêöèÿ %s íå ñóùåñòâóåò"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "Êîíñòðóêòîð ôóíêöèè íå äîïóñêàåò êëþ÷åâûå ñëîâà êàê àðãóìåíòû"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "Íåâîçìîæíî âûïîëíèòü ôóíêöèþ %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "Ïðîáëåìà ïðè ïåðåêëþ÷åíèè îêîí"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "Íåâîçìîæíî ñáðîñèòü ãëîáàëüíóþ îïöèþ %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "Íåâîçìîæíî ñáðîñèòü îïöèþ %s áåç ãëîáàëüíîãî çíà÷åíèÿ"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "Ïîïûòêà ñîñëàòüñÿ íà óäàë¸ííóþ âêëàäêó"
-
-#~ msgid "no such tab page"
-#~ msgstr "Íåò òàêîé âêëàäêè"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "Ïîïûòêà ñîñëàòüñÿ íà çàêðûòîå îêíî"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "Àòðèáóò òîëüêî äëÿ ÷òåíèÿ: áóôåð"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "Ïîçèöèÿ êóðñîðà íàõîäèòñÿ âíå áóôåðà"
-
-#~ msgid "no such window"
-#~ msgstr "Íåò òàêîãî îêíà"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "Ïîïûòêà ñîñëàòüñÿ íà óíè÷òîæåííûé áóôåð"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "Íåâîçìîæíî ïåðåèìåíîâàòü áóôåð"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "Íàçâàíèå îòìåòêè äîëæíî áûòü îäíèì ñèìâîëîì"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "Îæèäàëñÿ îáúåêò vim.Buffer, íî ïîëó÷åí %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "Íåâîçìîæíî ïåðåêëþ÷èòüñÿ íà áóôåð %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "Îæèäàëñÿ îáúåêò vim.Window, íî ïîëó÷åí %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "Íåâîçìîæíî íàéòè îêíî â òåêóùåé âêëàäêå"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "Íåâîçìîæíî ïåðåêëþ÷èòüñÿ íà óêàçàííîå îêíî"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "Îæèäàëñÿ îáúåêò vim.TabPage, íî ïîëó÷åí %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "Íåâîçìîæíî ïåðåêëþ÷èòüñÿ íà óêàçàííóþ âêëàäêó"
-
-#~ msgid "failed to run the code"
-#~ msgstr "Íåâîçìîæíî âûïîëíèòü êîä"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Eval íå âîçâðàòèë äîïóñòèìîãî îáúåêòà Python"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr ""
-#~ "E859: Íå óäàëîñü ïðåîáðàçîâàòü âîçâðàù¸ííûé îáúåêò Python â çíà÷åíèå VIM"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "Íåâîçìîæíî ïðåîáðàçîâàòü %s â ñëîâàðü VIM"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "Íåâîçìîæíî ïðåîáðàçîâàòü %s â ñòðóêòóðó VIM"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: ïåðåäàíà ññûëêà íà NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "Âíóòðåííÿÿ îøèáêà: íåïðàâèëüíûé òèï çíà÷åíèÿ"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Îøèáêà ïðè óñòàíîâêå ïåðåõâàò÷èêà ïóòè: sys.path_hooks íå ÿâëÿåòñÿ "
-#~ "ñïèñêîì\n"
-#~ "Ñëåäóåò ñäåëàòü ñëåäóþùåå:\n"
-#~ "— Äîáàâèòü vim.path_hook â sys.path_hooks\n"
-#~ "— Äîáàâèòü vim.VIM_SPECIAL_PATH â sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Îøèáêà ïðè óñòàíîâêå ïóòè: sys.path íå ÿâëÿåòñÿ ñïèñêîì\n"
-#~ "Ñëåäóåò äîáàâèòü vim.VIM_SPECIAL_PATH â sys.path"
-
-#~ msgid ""
-#~ "E887: Sorry, this command is disabled, the Python's site module could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E887: Ê ñîæàëåíèþ ýòà êîìàíäà íå ðàáîòàåò, ïîñêîëüêó íå çàãðóæåí ìîäóëü "
-#~ "Python site."
diff --git a/src/nvim/po/ru.po b/src/nvim/po/ru.po
index c8146e8c47..a4668743ba 100644
--- a/src/nvim/po/ru.po
+++ b/src/nvim/po/ru.po
@@ -2676,11 +2676,6 @@ msgstr "E49: ÐедопуÑтимый размер прокрутки"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4281,12 +4276,6 @@ msgstr "Ñтрока %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: ÐедопуÑтимое Ð¸Ð¼Ñ Ñ€ÐµÐ³Ð¸Ñтра: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Перевод Ñообщений на руÑÑкий Ñзык: ВаÑилий Рагозин <vrr@users.sourceforge."
-"net>, Сергей Ðлёшин <alyoshin.s@gmail.com>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Прерывание: "
diff --git a/src/nvim/po/sjiscorr.c b/src/nvim/po/sjiscorr.c
deleted file mode 100644
index ebcbe16dee..0000000000
--- a/src/nvim/po/sjiscorr.c
+++ /dev/null
@@ -1,45 +0,0 @@
-// Simplistic program to correct SJIS inside strings.
-// When a trail byte is a backslash it needs to be doubled.
-// Public domain.
-
-#include <stdio.h>
-#include <string.h>
-
-int main(int argc, char **argv)
-{
- char buffer[BUFSIZ];
- char *p;
-
- while (fgets(buffer, BUFSIZ, stdin) != NULL)
- {
- for (p = buffer; *p != 0; p++)
- {
- if (strncmp(p, "charset=utf-8", 13) == 0)
- {
- fputs("charset=cp932", stdout);
- p += 12;
- }
- else if (strncmp(p, "# Original translations", 23) == 0)
- {
- fputs("# generated from ja.po, DO NOT EDIT", stdout);
- while (p[1] != '\n')
- ++p;
- }
- else if (*(unsigned char *)p == 0x81 && p[1] == '_')
- {
- putchar('\\');
- ++p;
- }
- else
- {
- if (*p & 0x80)
- {
- putchar(*p++);
- if (*p == '\\')
- putchar(*p);
- }
- putchar(*p);
- }
- }
- }
-}
diff --git a/src/nvim/po/sk.cp1250.po b/src/nvim/po/sk.cp1250.po
index e3b7508cdc..4b1e64bd02 100644
--- a/src/nvim/po/sk.cp1250.po
+++ b/src/nvim/po/sk.cp1250.po
@@ -2689,11 +2689,6 @@ msgstr "E49: Chybná hodnota ve¾kosti rolovania"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4273,10 +4268,6 @@ msgstr "riadok %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nie je prístupné meno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Správca prekladu: Lubomir Host <rajo@platon.sk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Prerušenie: "
diff --git a/src/nvim/po/sk.po b/src/nvim/po/sk.po
index 53f8a7b911..e48a5de927 100644
--- a/src/nvim/po/sk.po
+++ b/src/nvim/po/sk.po
@@ -2689,11 +2689,6 @@ msgstr "E49: Chybná hodnota veµkosti rolovania"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4273,10 +4268,6 @@ msgstr "riadok %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: '%s' nie je prístupné meno registru"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Správca prekladu: Lubomir Host <rajo@platon.sk>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Preru¹enie: "
diff --git a/src/nvim/po/sv.po b/src/nvim/po/sv.po
index eedaecd1e7..f27ffa0dd4 100644
--- a/src/nvim/po/sv.po
+++ b/src/nvim/po/sv.po
@@ -4742,11 +4742,6 @@ msgstr "E900: Ogiltigt jobb-id"
msgid "E901: Job table is full"
msgstr "E901: Jobbtabellen är full"
-#: ../globals.h:1008
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr "E902: \"%s\" är inte körbar"
-
#: ../globals.h:1009
#, c-format
msgid "E364: Library call failed for \"%s()\""
diff --git a/src/nvim/po/uk.cp1251.po b/src/nvim/po/uk.cp1251.po
deleted file mode 100644
index 2c6f3423ae..0000000000
--- a/src/nvim/po/uk.cp1251.po
+++ /dev/null
@@ -1,8388 +0,0 @@
-#
-# Ukrainian Vim translation [uk]
-#
-# Copyright (C) 2001 Bohdan Vlasyuk <bohdan@vstu.edu.ua>
-# Bohdan donated this work to be distributed with Vim under the Vim license.
-#
-# Thanks to:
-# Dmytro Kovalov <dmytro.kovalov@nssmb.com> for useful suggestions
-# Dmytro O. Redchuk <dor@kiev-online.net> for viminfo bug
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: vim 7.4\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2010-06-18 21:53+0300\n"
-"Last-Translator: Àíàòîë³é Ñàõí³ê <sakhnik@gmail.com>\n"
-"Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=cp1251\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "íå âäàëîñÿ îòðèìàòè çíà÷åííÿ îïö³¿"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "âíóòð³øíÿ ïîìèëêà: íåâ³äîìèé òèï îïö³¿"
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Ñïèñîê ì³ñöü]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Ñïèñîê âèïðàâëåíü]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr "E855: Àâòîêîìàíäè ïðèçâåëè äî ñêàñóâàííÿ êîìàíäè"
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: Íåìຠìîæëèâîñò³ ðîçì³ñòèòè õî÷ îäèí áóôåð, çàâåðøåííÿ ðîáîòè..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: Íåìຠìîæëèâîñò³ ðîçì³ñòèòè áóôåð, áóäå âèêîðèñòàíî ³íøèé..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: Æîäåí ç áóôåð³â íå áóâ âèâàíòàæåíèé"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: Æîäåí ç áóôåð³â íå çíèùåíî"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: Æîäåí ç áóôåð³â íå âèòåðòî"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "Âèâàíòàæåíî îäèí áóôåð"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "Âèâàíòàæåíî %d áóôåðè(³â)"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "Çíèùåíî îäèí áóôåð"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "Çíèùåíî %d áóôåðè(³â)"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "Âèòåðòî îäèí áóôåð"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "Âèòåðòî %d áóôåðè(³â)"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: Íå ìîæó âèâàíòàæèòè îñòàíí³é áóôåð"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: Æîäåí áóôåð íå çì³íåíî"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: Ó ñïèñêó íåìຠáóôåð³â"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: Áóôåðà %<PRId64> íåìàº"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: Öå âæå îñòàíí³é áóôåð"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: Öå âæå íàéïåðøèé áóôåð"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: Áóôåð %<PRId64> ìຠçì³íè (! ùîá íå çâàæàòè)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: Îáåðåæíî: Ñïèñîê íàçâ ôàéë³â ïåðåïîâíåíî"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: Áóôåð %<PRId64> íå çíàéäåíî"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: Çíàéäåíî ê³ëüêà çá³ã³â ç %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: Íå çíàéäåíî áóôåð, ñõîæèé íà %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "ðÿäîê %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: Áóôåð ç òàêîþ íàçâîþ âæå ³ñíóº"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [Çì³íåíî]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[Íå ðåäàãîâàíî]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[Íîâèé ôàéë]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[Ïîìèëêè ÷èòàííÿ]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[RO]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[ëèøå ÷èòàòè]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "îäèí ðÿäîê --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> ðÿäêè(³â) --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "ðÿäîê %<PRId64> ç %<PRId64> --%d%%-- êîëîíêà "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[Áåç íàçâè]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "äîïîìîãà"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[Äîïîìîãà]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Ïåðåãëÿä]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "Óñå"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "Çíèçó"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "Âãîð³"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# Ñïèñîê áóôåð³â:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr "[Ç íóëÿ]"
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Ïîçíà÷êè ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "Ïîçíà÷êè äëÿ %s:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ðÿäîê=%<PRId64> id=%d íàçâà=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: Ïðîïóùåíî äâîêðàïêó"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: Íåïðàâèëüíèé ðåæèì"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: Ïîòð³áíà öèôðà"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: Íåïðàâèëüíèé â³äñîòîê"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: Íå ìîæíà ïîð³âíþâàòè ïîíàä %<PRId64> áóôåðè(³â)"
-
-#: ../diff.c:753
-msgid "E810: Cannot read or write temp files"
-msgstr "E810: Íå ìîæíà ÷èòàòè ÷è çàïèñóâàòè òèì÷àñîâ³ ôàéëè"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: Íå âäàëîñÿ ñòâîðèòè ïîð³âíÿííÿ"
-
-#: ../diff.c:966
-msgid "E816: Cannot read patch output"
-msgstr "E816: Íå âäàëîñÿ ïðî÷èòàòè ðåçóëüòàò patch"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: Íå âäàëîñÿ ïðî÷èòàòè ðåçóëüòàò diff"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: Öåé áóôåð íå â ðåæèì³ ïîð³âíÿííÿ"
-
-#: ../diff.c:2100
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E793: Íåìຠá³ëüøå ìîäèô³êîâíèõ áóôåð³â â ðåæèì³ ïîð³âíÿííÿ"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: Íåìຠ³íøèõ áóôåð³â â ðåæèì³ ïîð³âíÿííÿ"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr ""
-"E101: Ïîíàä äâà áóôåðè ó ðåæèì³ ïîð³âíÿííÿ, íå çðîçóì³ëî, êîòðèé ³ç íèõ "
-"âèêîðèñòàòè"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: Íå âäàëîñÿ çíàéòè áóôåð «%s»"
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: Áóôåð «%s» íå â ðåæèì³ ïîð³âíÿííÿ"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: Áóôåð íåñïîä³âàíî çì³íèâñÿ"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: Ó äèãðàôàõ íå ìîæå ì³ñòèòèñÿ escape"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: Íå çíàéäåíî ôàéë ðîçêëàäêè"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: :loadkeymap âèêîðèñòàíî íå ó ôàéë³ êîìàíä"
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr "E791: Åëåìåíò ðîçêëàäêè ïîðîæí³é"
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " Äîïîâíåííÿ êëþ÷îâèõ ñë³â (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " Ðåæèì ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " Äîïîâíåííÿ óñüîãî ðÿäêà (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " Äîïîâíåííÿ íàçâè ôàéëó (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Äîïîâíåííÿ òå´³â (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " Äîïîâíåííÿ øëÿõó çà çðàçêîì (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " Äîïîâíåííÿ âèçíà÷åííÿ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Äîïîâíåííÿ ç³ ñëîâíèêà (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Äîïîâíåííÿ ç òåçàóðóñó (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " Äîïîâíåííÿ êîìàíä (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " Êîðèñòóâàöüêå äîïîâíåííÿ (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " Êì³òëèâå äîïîâíåííÿ (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " Îðôîãðàô³÷íà ï³äêàçêà (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " Äîïîâíåííÿ ì³ñöåâèõ êëþ÷îâèõ ñë³â (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Òðàïèâñÿ ê³íåöü ïàðàãðàôà"
-
-# msgstr "E443: "
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr "E839: Ôóíêö³ÿ äîïîâíåííÿ çì³íèëà â³êíî"
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr "E840: Ôóíêö³ÿ äîïîâíåííÿ çíèùèëà òåêñò"
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "Îïö³ÿ 'dictionary' ïîðîæíÿ"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "Îïö³ÿ 'thesaurus' ïîðîæíÿ"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "Ñêàíóºòüñÿ ñëîâíèê: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (âñòàâêà) Ïðîãîðíóòè (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (çàì³íà) Ïðîãîðíóòè (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "Ïîøóê ó: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "Ïîøóê ñåðåä òå´³â."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Äîäàºòüñÿ"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- Ïîøóê..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "Ïî÷àòêîâèé âàð³àíò"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "Ñëîâî ç ³íøîãî ðÿäêà"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "ªäèíèé çá³ã"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "çá³ã %d ç %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "çá³ã %d"
-
-# msgstr "E17: "
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: Íåî÷³êóâàí³ ñèìâîëè ó :let"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: ²íäåêñ ñïèñêó ïîçà ìåæàìè: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: Íåâèçíà÷åíà çì³ííà: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: Áðàêóº ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: Àðãóìåíò ó %s ìຠáóòè ñïèñêîì"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: Àðãóìåíò ó %s ìຠáóòè ñïèñêîì ÷è ñëîâíèêîì"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Êëþ÷ ñëîâíèêà íå ìîæå áóòè ïîðîæí³ì"
-
-# msgstr "E396: "
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: Ïîòð³áåí ñïèñîê"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: Ïîòð³áåí ñëîâíèê"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: Çàáàãàòî àðãóìåíò³â äëÿ ôóíêö³¿: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Íåìຠòàêîãî êëþ÷à ó ñëîâíèêó: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: Ôóíêö³ÿ %s óæå ³ñíóº, ! ùîá çàì³íèòè"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: Çàïèñ ó ñëîâíèêó âæå ³ñíóº"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: Òðåáà ïîñèëàííÿ íà ôóíêö³þ"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: Íå ìîæíà âèêîðèñòàòè [:] ç³ ñëîâíèêîì"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: Íåïðàâèëüíèé òèï çì³ííî¿ äëÿ %s="
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: Íåâ³äîìà ôóíêö³ÿ: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: Íåïðèïóñòèìà íàçâà çì³ííî¿: %s"
-
-# msgstr "E373: "
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr "E806: Float âæèòî ÿê String"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Ö³ëåé ìåíøå, í³æ åëåìåíò³â ñïèñêó"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Ö³ëåé á³ëüøå, í³æ åëåìåíò³â ñïèñêó"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "Äðóãà ; ó ñïèñêó çì³ííèõ"
-
-# msgstr "E235: "
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: Íå ìîæíà ïåðåðàõóâàòè çì³íí³ ó %s"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: ²íäåêñíèé äîñòóï ìîæå áóòè ò³ëüêè äî ñïèñêó ÷è ñëîâíèêà"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] ìຠáóòè îñòàííüîþ"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] âèìàãຠñïèñîê"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: Ñïèñîê ìຠá³ëüøå åëåìåíò³â, í³æ ö³ëü"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: Ñïèñîê ìຠíåäîñòàòíüî åëåìåíò³â"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: Ïðîïóùåíî «in» ï³ñëÿ :for"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: Ïðîïóùåíî äóæêè: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Çì³ííî¿ íåìàº: «%s»"
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: Çì³ííà ìຠçàáàãàòî âêëàäåíü ùîá áóòè çà-/â³äêðèòîþ."
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: Áðàêóº ':' ï³ñëÿ '?'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Ñïèñîê ìîæíà ïîð³âíÿòè ò³ëüêè ç³ ñïèñêîì"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: Íåêîðåêòíà îïåðàö³ÿ íàä ñïèñêîì"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Ñëîâíèê ìîæíà ïîð³âíÿòè ò³ëüêè ³ç ñëîâíèêîì"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: Íåêîðåêòíà îïåðàö³ÿ íàä ñëîâíèêîì"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Ôóíêö³þ ìîæíà ïîð³âíÿòè ò³ëüêè ç ôóíêö³ºþ"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: Íåêîðåêòíà îïåðàö³ÿ íàä ôóíêö³ºþ"
-
-#: ../eval.c:4277
-msgid "E804: Cannot use '%' with Float"
-msgstr "E804: Íå ìîæíà âèêîíàòè '%' íàä Float"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: Ïðîïóùåíî ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: Ôóíêö³ÿ íå ìຠ³íäåêñàö³¿"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: Áðàêóº íàçâè îïö³¿: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: Íåâ³äîìà îïö³ÿ: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: Áðàêóº ëàïêè: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: Áðàêóº ëàïêè: %s"
-
-# msgstr "E404: "
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: Áðàêóº êîìè ó ñïèñêó: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: Íåìຠê³íö³âêè ñïèñêó ']': %s"
-
-# msgstr "E235: "
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Áðàêóº äâîêðàïêè ó ñëîâíèêó: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Ïîâòîðåííÿ êëþ÷à â ñëîâíèêó: «%s»"
-
-# msgstr "E235: "
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Áðàêóº êîìè ó ñëîâíèêó: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Íåìຠê³íö³âêè ñëîâíèêà '}': %s"
-
-# msgstr "E21: "
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: Ó çì³íí³é çàáàãàòî âêëàäåíü ùîá ¿¿ ïîêàçàòè"
-
-#: ../eval.c:7188
-#, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E740: Çàáàãàòî àðãóìåíò³â äëÿ ôóíêö³¿ %s"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: Íåïðàâèëüí³ àðãóìåíòè ôóíêö³¿ %s"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: Íåâ³äîìà ôóíêö³ÿ: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: Çàìàëî àðãóìåíò³â äëÿ ôóíêö³¿ %s"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: <SID> âèêîðèñòîâóºòüñÿ íå ó êîíòåêñò³ ñêðèïòó: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E725: Âèêëèê dict-ôóíêö³¿ áåç ñëîâíèêà: %s"
-
-#: ../eval.c:7453
-msgid "E808: Number or Float required"
-msgstr "E808: Òðåáà âêàçàòè Number ÷è Float"
-
-# msgstr "E14: "
-#: ../eval.c:7503
-msgid "add() argument"
-msgstr "àðãóìåíò add()"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: Çàáàãàòî àðãóìåíò³â"
-
-# msgstr "E327: "
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() ìîæíà âæèâàòè ò³ëüêè â ðåæèì³ âñòàâêè"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "&O:Ãàðàçä"
-
-# msgstr "E226: "
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: Êëþ÷ âæå ³ñíóº: %s"
-
-# msgstr "E14: "
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "àðãóìåíò extend()"
-
-# msgstr "E14: "
-#: ../eval.c:8915
-msgid "map() argument"
-msgstr "àðãóìåíò map()"
-
-# msgstr "E14: "
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr "àðãóìåíò filter()"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ðÿäê³â: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: Íåâ³äîìà ôóíêö³ÿ: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "Âèêëèêè äî inputrestore() ÷àñò³øå, í³æ äî inputsave()"
-
-# msgstr "E14: "
-#: ../eval.c:10771
-msgid "insert() argument"
-msgstr "àðãóìåíò insert()"
-
-# msgstr "E406: "
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: ²íòåðâàë íå äîçâîëåíî"
-
-# msgstr "E177: "
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: Íåêîðåêòíèé òèï äëÿ len()"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: Êðîê íóëüîâèé"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: Ïî÷àòîê çà ê³íöåì"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<í³÷îãî>"
-
-# msgstr "E14: "
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr "àðãóìåíò remove()"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: Çàáàãàòî ñèìâîëüíèõ ïîñèëàíü (öèêë?)"
-
-# msgstr "E14: "
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr "àðãóìåíò reverse()"
-
-# msgstr "E14: "
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr "àðãóìåíò sort()"
-
-# msgstr "E14: "
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "àðãóìåíò add()"
-
-# msgstr "E364: "
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Ïîìèëêà ó ôóíêö³¿ ïîð³âíÿííÿ"
-
-# msgstr "E364: "
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Ïîìèëêà ó ôóíêö³¿ ïîð³âíÿííÿ"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(Íåìîæëèâî)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: Íå âäàëîñÿ çàïèñàòè òèì÷àñîâèé ôàéë"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr "E805: Float âæèòî ÿê Number"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: Funcref âæèòî ÿê Number"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: List âæèòî ÿê Number"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: Dictionary âæèòî ÿê Number"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: Funcref âæèòî ÿê String"
-
-# msgstr "E373: "
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: List âæèòî ÿê String"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: Dictionary âæèòî ÿê String"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Íåïðàâèëüíèé òèï çì³ííî¿: %s"
-
-#: ../eval.c:16705
-#, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E795: Íå ìîæíà çíèùèòè çì³ííó %s"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Íàçâà çì³ííî¿ Funcref ìຠïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: Íàçâà çì³ííî¿ ñï³âïàäàº ç ³ñíóþ÷îþ ôóíêö³ºþ: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: Çíà÷åííÿ çàõèùåíå: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "Íåâ³äîìî"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: Íå ìîæíà çì³íèòè çíà÷åííÿ %s"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: Çì³ííà âêëàäåíà çàíàäòî ãëèáîêî ùîá çðîáèòè ¿¿ êîï³þ"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: Íåâèçíà÷åíà ôóíêö³ÿ: %s"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: Áðàêóº '(': %s"
-
-#: ../eval.c:17293
-msgid "E862: Cannot use g: here"
-msgstr "E862: Òóò íå ìîæíà âèêîðèñòàòè g:"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: Íåäîçâîëåíèé àðãóìåíò: %s"
-
-#: ../eval.c:17323
-#, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E853: Íàçâà àðãóìåíòó ïîâòîðþºòüñÿ: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: Áðàêóº :endfunction"
-
-#: ../eval.c:17537
-#, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E707: Íàçâà ôóíêö³¿ ñï³âïàäàº ç³ çì³ííîþ: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: Íå âäàëîñÿ ïåðåâèçíà÷èòè ôóíêö³þ %s: âîíà âèêîðèñòîâóºòüñÿ"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: Íàçâà ôóíêö³¿ íå çá³ãàºòüñÿ ç íàçâîþ ôàéëó ñêðèïòó: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: Íå âêàçàíî íàçâó ôóíêö³¿"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr ""
-"E128: Íàçâà ôóíêö³¿ ìຠïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè àáî ì³ñòèòè äâîêðàïêó: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr ""
-"E128: Íàçâà ôóíêö³¿ ìຠïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè àáî ì³ñòèòè äâîêðàïêó: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: Íå âäàëîñÿ çíèùèòè ôóíêö³þ %s: Âîíà âèêîðèñòîâóºòüñÿ"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: Ãëèáèíà âèêëèê³â ôóíêö³¿ ïåðåâèùóº 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "âèêëèêàºòüñÿ %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ïðèïèíåíî"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s ïîâåðòຠ#%<PRId64>"
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s ïîâåðòຠ%s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "ïðîäîâæåííÿ â %s"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return ïîçà ìåæàìè ôóíêö³¿"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# ãëîáàëüí³ çì³íí³:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tÂîñòàííº çì³íåíà ó "
-
-#: ../eval.c:19272
-msgid "No old files"
-msgstr "Æîäíîãî ñòàðîãî ôàéëó"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, ø³ñò %02x, â³ñ %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, ø³ñò %04x, â³ñ %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, ø³ñò %08x, â³ñ %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: Íåìîæëèâî ïåðåì³ñòèòè ðÿäêè ñàì³ â ñåáå"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "Ïåðåì³ùåíî îäèí ðÿäîê"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "Ïåðåì³ùåíî %<PRId64> ðÿäêè(³â)"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "³äô³ëüòðîâàíî %<PRId64> ðÿäêè(³â)"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: Àâòîêîìàíäè *Filter* íå ïîâèíí³ çì³íþâàòè ïîòî÷íèé áóôåð"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[Çì³íè íå çàïèñàíî]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s â ðÿäêó: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: Çàáàãàòî ïîìèëîê, ðåøòà ôàéëó áóäå ïðîïóùåíî"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Ç÷èòóºòüñÿ ôàéë viminfo: «%s»%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " ³íôîðìàö³ÿ"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " ïîçíà÷êè"
-
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " ñòàð³ ôàéëè"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ÍÅ ÂÄÀËÎÑß"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Íå äîçâîëåíî çàïèñ ó ôàéë viminfo: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Íå âäàëîñÿ çàïèñàòè ôàéë viminfo %s!"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "Çàïèñóºòüñÿ ôàéë viminfo «%s»"
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Öåé ôàéë àâòîìàòè÷íî ñòâîðåíèé Vim %s.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Ìîæåòå ðåäàãóâàòè, àëå ÎÁÅÐÅÆÍÎ!\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Çíà÷åííÿ 'encoding' ï³ä ÷àñ ñòâîðåííÿ öüîãî ôàéëó\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "Íåäîçâîëåíèé ñèìâîë íà ïî÷àòêó ðÿäêà"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "Çàïèñàòè ÷àñòèíó ôàéëó?"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: Âèêîðèñòàéòå ! äëÿ çàïèñó ÷àñòèíè áóôåðà"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "Ïåðåïèñàòè ³ñíóþ÷èé ôàéë «%s»?"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "Ôàéë îáì³íó «%s» ³ñíóº, ïåðåçàïèñàòè?"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: Ôàéë îáì³íó ³ñíóº: %s (:silent! ïåðåâàæóº)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: Íåìຠâõ³äíîãî ôàéëó äëÿ áóôåðà %<PRId64>"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: Ôàéë íå çàïèñàíî: çàïèñ çàáîðîíåíî îïö³ºþ 'write'"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"Äëÿ «%s» âñòàíîâëåíî 'readonly'.\n"
-"Áàæàºòå âñå îäíî ïðîäîâæèòè çàïèñ?"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-"Ôàéë «%s» äîçâîëåíî ò³ëüêè ÷èòàòè.\n"
-"Ïðîòå, ìîæëèâî, éîãî ìîæíà çàïèñàòè.\n"
-"Õî÷åòå ñïðîáóâàòè?"
-
-#: ../ex_cmds.c:2451
-#, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "E505: «%s» ò³ëüêè äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Àâòîêîìàíäè íåñïîä³âàíî çíèùèëè íîâèé áóôåð %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: íå÷èñëîâèé àðãóìåíò äëÿ :z"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: Ó rvim íå äîçâîëåí³ êîìàíäè îáîëîíêè"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Ðåãóëÿðí³ âèðàçè íå ìîæíà ðîçä³ëÿòè ë³òåðàìè"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "Çàì³íèòè íà %s (y/n/a/q/l/^E/^Y)?"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(Ïåðåðâàíî) "
-
-# msgstr "E31: "
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "Îäèí çá³ã"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "Îäíà çàì³íà"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> çá³ãè(³â)"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> çàì³í(è)"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr " â îäíîìó ðÿäêó"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr " â %<PRId64> ðÿäêàõ"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global íå ìîæíà âæèâàòè ðåêóðñèâíî"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: Ó global áðàêóº çðàçêà"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "Çðàçîê çíàéäåíî ó êîæíîìó ðÿäêó: %s"
-
-#: ../ex_cmds.c:4510
-#, c-format
-msgid "Pattern not found: %s"
-msgstr "Çðàçîê íå çíàéäåíî: %s"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# Îñòàííÿ çàì³íà:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: Áåç ïàí³êè!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: Âèáà÷òå, íåìຠäîïîìîãè '%s' äëÿ %s"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: Âèáà÷òå, íåìຠäîïîìîãè äëÿ %s"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "Âèáà÷òå, ôàéë äîïîìîãè «%s» íå çíàéäåíî"
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: Íå º êàòàëîãîì: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: Íå âäàëîñÿ â³äêðèòè %s äëÿ çàïèñó"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: Íå âäàëîñÿ â³äêðèòè %s äëÿ ÷èòàííÿ"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: ̳øàíèíà êîäóâàíü ôàéëó äîïîìîãè äëÿ ìîâè %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Ïîâòîðåííÿ òå´ó «%s» ó ôàéë³ %s/%s"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: Íåâ³äîìà êîìàíäà íàäïèñó: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: Ïðîïóùåíî íàçâó íàäïèñó"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Âèçíà÷åíî çàáàãàòî íàäïèñ³â"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: Íåêîðåêòíèé íàäïèñ: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: Íåâ³äîìèé íàäïèñ: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: Ïðîïóùåíî íîìåð íàäïèñó"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: Íåêîðåêòíà íàçâà áóôåðà: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: Íåïðàâèëüíèé ID íàäïèñó: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (íå ï³äòðèìóºòüñÿ)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[Çíèùåíî]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "Ðåæèì íàëàãîäæåííÿ. Ùîá ïðîäîâæèòè ââåä³òü «cont»."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "ðÿäîê %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "êîìàíäà: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "Òî÷êà çóïèíêè â «%s%s» ðÿäîê %<PRId64>"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: Òî÷êó çóïèíêè íå çíàéäåíî: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "Íå âèçíà÷åíî æîäíî¿ òî÷êè çóïèíêè"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s ðÿäîê %<PRId64>"
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: Ñïî÷àòêó çðîá³òü «:profile start {ôàéë}»"
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "Çáåðåãòè çì³íè â «%s»?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "Íåíàçâàíèé"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: Áóôåð «%s» ìຠíåçáåðåæåí³ çì³íè"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr ""
-"Îáåðåæíî: Íåñïîä³âàíî îïèíèëèñÿ ó ³íøîìó áóôåð³ (ïåðåâ³ðòå àâòîêîìàíäè)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Ðåäàãóºòüñÿ ëèøå îäèí ôàéë"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: Öå âæå íàéïåðøèé ôàéë"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: Öå âæå îñòàíí³é ôàéë"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: Êîìï³ëÿòîð íå ï³äòðèìóºòüñÿ: %s"
-
-# msgstr "E195: "
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "Ïîøóê «%s» â «%s»"
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "Ïîøóê «%s»"
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "Â 'runtimepath' íå çíàéäåíî «%s»"
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "Íå âäàëîñÿ ïðî÷èòàòè êàòàëîã: «%s»"
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "Íå âäàëîñÿ âèêîíàòè «%s»"
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "ðÿäîê %<PRId64>: íå âäàëîñÿ âèêîíàòè «%s»"
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "âèêîíóºòüñÿ «%s»"
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "ðÿäîê %<PRId64>: âèêîíóºòüñÿ «%s»"
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "çàê³í÷åíî âèêîíàííÿ %s"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "modeline"
-
-# msgstr "E14: "
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd àðãóìåíò"
-
-# msgstr "E14: "
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c àðãóìåíò"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "çì³ííà îòî÷åííÿ"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr "îáðîáíèê ïîìèëêè"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: Çàñòåðåæåííÿ: Íåïðàâèëüíèé ðîçä³ëüíèê ðÿäê³â, ìîæëèâî, áðàêóº ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: :scriptencoding âèêîðèñòàíî ïîçà âèêîíóâàíèì ôàéëîì"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: :finish âèêîðèñòàíî ïîçà âèêîíóâàíèì ôàéëîì"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "Ìîâà (%s): «%s»"
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: Íå âäàëîñÿ âñòàíîâèòè ìîâó «%s»"
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "Ðåæèì Ex. Äëÿ ïîâåðíåííÿ äî íîðìàëüíîãî ðåæèìó âèêîíàéòå «visual»"
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: ʳíåöü ôàéëó"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: Êîìàíäà çàíàäòî ðåêóðñèâíà"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Âèíÿòêîâà ñèòóàö³ÿ íå îáðîáëåíà: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "ʳíåöü âèêîíóâàíîãî ôàéëó"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "ʳíåöü ôóíêö³¿"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: Íåîäíîçíà÷íèé âæèòîê êîìàíäè êîðèñòóâà÷à"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: Öå íå êîìàíäà ðåäàêòîðà"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: ²íòåðâàë çàäàíî íàâèâîð³ò"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "²íòåðâàë çàäàíî íàâèâîð³ò, ùîá ïîì³íÿòè ì³ñöÿìè — ÃÀÐÀÇÄ"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: Ñïðîáóéòå w àáî w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: Âèáà÷òå, ö³º¿ êîìàíäè íåìຠó ö³é âåðñ³¿"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Äîçâîëåíî ò³ëüêè îäíó íàçâó ôàéëó"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "Çàëèøèëîñÿ â³äðåäàãóâàòè ùå îäèí ôàéë. Âñå îäíî âèéòè?"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "Ùå º %d íå ðåäàãîâàíèõ ôàéë³â. Âñå îäíî âèéòè?"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: Çàëèøèëîñÿ â³äðåäàãóâàòè ùå îäèí ôàéë"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: Çàëèøèëîñÿ %<PRId64> íå ðåäàãîâàíèõ ôàéë³â"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: Êîìàíäà âæå ³ñíóº, ! ùîá çàì³íèòè ¿¿"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Íàçâà Àðã. Ìåæà Äîïîâíåííÿ Âèçíà÷åííÿ"
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "Íå çíàéäåíî êîìàíä êîðèñòóâà÷à"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: Íå âêàçàíî àòðèáóò³â"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: Íåïðàâèëüíà ê³ëüê³ñòü àðãóìåíò³â"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ˳÷èëüíèê íå ìîæå áóòè âêàçàíî äâ³÷³"
-
-# msgstr "E177: "
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: Íåïðàâèëüíå ïî÷àòêîâå çíà÷åííÿ ë³÷èëüíèêà"
-
-# msgstr "E178: "
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: äëÿ -complete ïîòð³áíèé àðãóìåíò"
-
-# msgstr "E180: "
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: Íåïðàâèëüíèé àòðèáóò: %s"
-
-# msgstr "E181: "
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: Íåïðàâèëüíà íàçâà êîìàíäè"
-
-# msgstr "E182: "
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Êîìàíäè êîðèñòóâà÷à ïîâèíí³ ïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè"
-
-#: ../ex_docmd.c:4696
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr ""
-"E841: Çàðåçåðâîâàíà íàçâà, íå ìîæíà âèêîðèñòàòè äëÿ êîðèñòóâàöüêî¿ êîìàíäè"
-
-# msgstr "E183: "
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: Êîìàíäó êîðèñòóâà÷à íå çíàéäåíî: %s"
-
-# msgstr "E179: "
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: Íåïðàâèëüíå äîïîâíåííÿ: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: Àðãóìåíò äîçâîëåíèé ò³ëüêè äëÿ êîðèñòóâàöüêîãî äîïîâíåííÿ"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Êîðèñòóâàöüêå äîïîâíåííÿ âèìàãຠàðãóìåíò-ôóíêö³þ"
-
-# msgstr "E184: "
-#: ../ex_docmd.c:5257
-#, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: Íå âäàëîñÿ çíàéòè ñõåìó êîëüîð³â «%s»"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "³òàííÿ, êîðèñòóâà÷ó Vim!"
-
-# msgstr "E443: "
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: Íå ìîæíà çàêðèòè îñòàííþ âêëàäêó"
-
-# msgstr "E444: "
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "Âæå é òàê ëèøå îäíà âêëàäêà"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Âêëàäêà %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "Íåìຠôàéëó îáì³íó"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E747: Íå âäàëîñÿ çì³íèòè êàòàëîã, áóôåð ìຠçì³íè (! ùîá íå çâàæàòè)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: Öå âæå íàéïåðøèé êàòàëîã"
-
-# msgstr "E186: "
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: Íåâ³äîìî"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize âèìàãຠäâà ÷èñëîâèõ àðãóìåíòè"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: Íå ìîæíà îòðèìàòè ïîçèö³þ â³êíà íà ö³é ïëàòôîðì³"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos âèìàãຠäâà ÷èñëîâèõ àðãóìåíòè"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: Íå âäàëîñÿ ñòâîðèòè êàòàëîã: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: Ôàéë «%s» ³ñíóº (! ùîá íå çâàæàòè)"
-
-# msgstr "E189: "
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: Íå âäàëîñÿ â³äêðèòè «%s» äëÿ çàïèñó"
-
-# msgstr "E190: "
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: Àðãóìåíò ìຠáóòè ë³òåðîþ, ` àáî '"
-
-# msgstr "E191: "
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: Çàáàãàòî âêëàäåíèõ :normal"
-
-# msgstr "E193: "
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: Íåìຠíàçâè âòîðèííîãî ôàéëó äëÿ çàì³íè '#'"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: Íåìຠíàçâè ôàéëó àâòîêîìàíäè äëÿ çàì³íè «<afile>»"
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: Íåìຠíîìåðà áóôåðà àâòîêîìàíäè äëÿ çàì³íè «<abuf>»"
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: Íåìຠíàçâè çá³ãó àâòîêîìàíäè äëÿ çàì³íè «<amatch>»"
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: Íåìຠíàçâè ôàéëó :source äëÿ çàì³íè «<sfile>»"
-
-#: ../ex_docmd.c:7876
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E842: íåìຠíîìåðà ðÿäêà, ùîá âèêîðèñòàòè ç «<sfile>»"
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: Íàçâà ôàéëó äëÿ '%' ÷è '#' ïîðîæíÿ, ïðàöþº ëèøå ç «:p:h»"
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: Ðåçóëüòàò — ïîðîæí³é ðÿäîê"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: Íå âäàëîñÿ ïðî÷èòàòè ôàéë viminfo"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: Íå ìîæíà âèêèäàòè (:throw) âèíÿòêè ç ïðåô³êñîì 'Vim'"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Âèíÿòêîâà ñèòóàö³ÿ: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Âèíÿòîê çàê³í÷åíî: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "Âèíÿòîê ñêèíóòî: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, ðÿäîê %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "Ñï³éìàíî âèíÿòêîâó ñèòóàö³þ: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "Î÷³êóºòüñÿ %s"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "³äíîâëåíî %s"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "Ñêèíóòî %s"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Âèíÿòîê"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "Ïîìèëêà, ïåðåðâàíî"
-
-# msgstr "E231: "
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "Ïîìèëêà"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "Ïåðåðâàíî"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: Çàíàäòî áàãàòî âêëàäåíèõ :if"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif áåç :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else áåç :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif áåç :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: Íå îäíå :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif ï³ñëÿ :else"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: Çàáàãàòî âêëàäåíèõ :while/:for"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue áåç :while ÷è :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break áåç :while ÷è :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: Âæèòî :endfor ³ç :while"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: Âæèòî :endwhile ³ç :for"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: Çàáàãàòî âêëàäåíèõ :try"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch áåç :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch ï³ñëÿ :finally"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally áåç :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: Íå îäíå :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :entry áåç :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction ïîçà ìåæàìè ôóíêö³¿"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Çàðàç íå ìîæíà ðåäàãóâàòè ³íøèé áóôåð"
-
-#: ../ex_getln.c:1656
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E811: Çàðàç íå ìîæíà çì³íþâàòè ³íôîðìàö³þ áóôåðà"
-
-# msgstr "E197: "
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "íàçâà òå´ó"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " òèï ôàéëó\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "Îïö³ÿ 'history' ïîðîæíÿ"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Ïîïåðåäí³ %s (â³ä íàéíîâ³øèõ):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "êîìàíäè"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "øóêàí³ ðÿäêè"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "âèðàçè"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "ââåäåí³ ðÿäêè"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ïîçà ìåæàìè êîìàíäè"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: Àêòèâíå â³êíî àáî áóôåð áóëî çíèùåíî"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr "E854: øëÿõ çàíàäòî äîâãèé äëÿ äîïîâíåííÿ"
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr ""
-"E343: Íåêîðåêòíèé øëÿõ: `**[÷èñëî]' ïîâèííå áóòè íàïðèê³íö³ øëÿõó àáî ïåðåä "
-"'%s'."
-
-# msgstr "E343: "
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: Íå âäàëîñÿ çíàéòè êàòàëîã «%s» ó cdpath"
-
-# msgstr "E344: "
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: Íå âäàëîñÿ çíàéòè ôàéë «%s» ó path"
-
-# msgstr "E345: "
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: Ó cdpath íåìຠá³ëüøå êàòàëîãó «%s»"
-
-# msgstr "E346: "
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: Ó øëÿõó ïîøóêó á³ëüøå íåìຠôàéë³â «%s»"
-
-#: ../fileio.c:137
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E812: Àâòîêîìàíäè çì³íèëè áóôåð ÷è éîãî íàçâó"
-
-# msgstr "E199: "
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "Íåäîçâîëåíà íàçâà ôàéëó"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "êàòàëîã"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "íå ôàéë"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[Íîâèé ôàéë]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[Íîâèé êàòàëîã]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Ôàéë çàâåëèêèé]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[³äìîâëåíî]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: Àâòîêîìàíäè *ReadPre óíåìîæëèâèëè ÷èòàííÿ ôàéëó"
-
-# msgstr "E200: "
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: Àâòîêîìàíäè *ReadPre íå ïîâèíí³ çì³íþâàòè öåé áóôåð"
-
-# msgstr "E201: "
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: ×èòàºòüñÿ ç stdin...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: Êîíâåðòàö³ÿ óíåìîæëèâèëà ÷èòàííÿ ôàéëó!"
-
-# msgstr "E202: "
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[êàíàë/ñîêåò]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[êàíàë]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[ñîêåò]"
-
-#. or character special
-#: ../fileio.c:1801
-msgid "[character special]"
-msgstr "[ñïåö. ñèìâîëüíèé]"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[Áðàêóº CR]"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[Ðîçáèòî äîâã³ ðÿäêè]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[ÍÅ êîíâåðòîâàíî]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[êîíâåðòîâàíî]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[ÏÎÌÈËÊÀ ÊÎÍÂÅÐÒÀÖ²¯ ó ðÿäêó %<PRId64>]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[ÍÅÊÎÐÅÊÒÍÈÉ ÁÀÉÒ ó ðÿäêó %<PRId64>]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[ÏÎÌÈËÊÀ ×ÈÒÀÍÍß]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "Íå âäàëîñÿ ï³äøóêàòè òèì÷àñîâèé ôàéë äëÿ êîíâåðòàö³¿"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "Êîíâåðòàö³ÿ ç 'charconvert' íå âäàëàñÿ"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "íå âäàëîñÿ ïðî÷èòàòè âèâ³ä 'charconvert'"
-
-# msgstr "E217: "
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: Íåìຠâ³äïîâ³äíèõ àâòîêîìàíä"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: Àâòîêîìàíäà çíèùèëà àáî âèâàíòàæèëà áóôåð, ùî ìàâ áóòè çàïèñàíèé"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Àâòîêîìàíäà íåñïîä³âàíèì ÷èíîì çì³íèëà ê³ëüê³ñòü ðÿäê³â"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "Íå ïðèäàòíèé äëÿ çàïèñó"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "ëèøå äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: Íå âäàëîñÿ çàïèñàòè ðåçåðâíèé ôàéë (! ùîá íå çâàæàòè)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: Ïîìèëêà çàêðèòòÿ ðåçåðâíîãî ôàéëó (! ùîá íå çâàæàòè)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr ""
-"E508: Íå âäàëîñÿ ïðî÷èòàòè ôàéë ùîá ñòâîðèòè ðåçåðâíó êîï³þ (! ùîá íå "
-"çâàæàòè)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: Íå âäàëîñÿ ñòâîðèòè ðåçåðâíó êîï³þ (! ùîá íå çâàæàòè)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: Íå âäàëîñÿ çðîáèòè ðåçåðâíó êîï³þ (! ùîá íå çâàæàòè)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: Íå âäàëîñÿ ï³äøóêàòè òèì÷àñîâèé ôàéë äëÿ çàïèñó"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: Íå âäàëîñÿ ïåðåòâîðèòè (! ùîá çàïèñàòè áåç êîíâåðòàö³¿)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: Íå âäàëîñÿ â³äêðèòè äëÿ çàïèñó çâ'ÿçàíèé ôàéë"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: Íå âäàëîñÿ â³äêðèòè ôàéë äëÿ çàïèñó"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Íå âäàëîñÿ âèêîíàòè fsync"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: Íå âäàëîñÿ çàêðèòè"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: Ïîìèëêà çàïèñó, êîíâåðòàö³ÿ íå âäàëàñÿ (ñêèíüòå 'fenc')"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-"E513: Ïîìèëêà çàïèñó, êîíâåðòàö³ÿ íå âäàëàñÿ ó ðÿäêó %<PRId64> (ñêèíüòå "
-"'fenc')"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: Ïîìèëêà çàïèñó (ñê³í÷èëîñü â³ëüíå ì³ñöå?)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " ÏÎÌÈËÊÀ ÊÎÍÂÅÐÒÀÖ²¯"
-
-#: ../fileio.c:3509
-#, c-format
-msgid " in line %<PRId64>;"
-msgstr " ó ðÿäêó %<PRId64>;"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[Ïðèñòð³é]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[Íîâèé]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr "[ä]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " äîïèñàíèé"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr "[ç]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " çàïèñàíèé"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Ëàòàííÿ: íå âäàëîñÿ çáåðåãòè îðèã³íàë"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: Ëàòàííÿ: íå âäàëîñÿ ñòâîðèòè îðèã³íàë"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: Íå âäàëîñÿ çíèùèòè ðåçåðâíèé ôàéë"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"ÇÀÑÒÅÐÅÆÅÍÍß: Îðèã³íàë, ìàáóòü, âòðà÷åíèé ÷è ïîøêîäæåíèé\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "Íå âèõîäüòå ç ðåäàêòîðà, äîêè ôàéë íå çàïèñàíî!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[ôîðìàò dos]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[ôîðìàò mac]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[ôîðìàò unix]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "îäèí ðÿäîê, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> ðÿäê³â, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "îäèí ñèìâîë"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> ñèìâîë³â"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[Íåïîâíèé îñòàíí³é ðÿäîê]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "ÇÀÑÒÅÐÅÆÅÍÍß: Ôàéë çì³íèâñÿ ç ÷àñó îñòàííüîãî ÷èòàííÿ!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "Âè ñïðàâä³ õî÷åòå éîãî ïåðåïèñàòè??"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: Ïîìèëêà çàïèñó ó «%s»"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: Ïîìèëêà çàêðèòòÿ «%s»"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: Ïîìèëêà ÷èòàííÿ «%s»"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: Àâòîêîìàíäà FileChangedShell çíèùèëà áóôåð"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Ôàéë «%s» á³ëüøå íå äîñÿæíèé"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr "W12: Çàñòåðåæåííÿ: Ôàéë «%s» çì³íèâñÿ, àëå é áóôåð ó Vim òàêîæ"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "Äèâ. «:help W12» äëÿ óòî÷íåííÿ."
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: Çàñòåðåæåííÿ: Ôàéë «%s» çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "Äèâ. «:help W11» äëÿ óòî÷íåííÿ."
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: Çàñòåðåæåííÿ: Ðåæèì ôàéëó «%s» çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "Äèâ. «:help W16» äëÿ óòî÷íåííÿ."
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: Çàñòåðåæåííÿ: Ôàéë «%s» áóëî ñòâîðåíî ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "Çàñòåðåæåííÿ"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"&O:Ãàðàçä\n"
-"&L:Çàâàíòàæèòè"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: Íå âäàëîñÿ ï³äãîòóâàòè «%s», ùîá ïåðå÷èòàòè"
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: Íå âäàëîñÿ ïåðå÷èòàòè «%s»"
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--Çíèùåíî--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr "Àâòîìàòè÷íå çíèùåííÿ àâòîêîìàíäè: %s <áóôåð=%d>"
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: Íåìຠòàêî¿ ãðóïè: «%s»"
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: Íåäîçâîëåíèé ñèìâîë ï³ñëÿ *: %s"
-
-# msgstr "E215: "
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: Íåìຠòàêî¿ ïî䳿: %s"
-
-# msgstr "E215: "
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: Íåìຠòàêî¿ ãðóïè ÷è ïî䳿: %s"
-
-# msgstr "E216: "
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Àâòîêîìàíäè ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <áóôåð=%d>: íåêîðåêòíèé íîìåð áóôåðà "
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: Íå ìîæó âèêîíóâàòè àâòîêîìàíäè äëÿ ÓÑ²Õ ïîä³é"
-
-# msgstr "E217: "
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "Íåìຠâ³äïîâ³äíèõ àâòîêîìàíä"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: Çàáàãàòî âêëàäåíèõ àâòîêîìàíä"
-
-# msgstr "E218: "
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "Àâòîêîìàíäè %s äëÿ «%s»"
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Âèêîíóºòüñÿ %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "àâòîêîìàíäà %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: Áðàêóº {."
-
-# msgstr "E219: "
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: Áðàêóº }."
-
-# msgstr "E220: "
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: Çãîðòîê íå çíàéäåíî"
-
-# msgstr "E349: "
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: Íå âäàëîñÿ ñòâîðèòè çãîðòêó ìåòîäîì 'foldmethod'"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: Íå âäàëîñÿ çíèùèòè çãîðòêó ìåòîäîì 'foldmethod'"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+-- çãîðíóòî %3ld ðÿäê³â "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Äîäàòè äî áóôåðà ÷èòàííÿ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: Çàì³íà ðåêóðñèâíà"
-
-# msgstr "E223: "
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: Çàãàëüíå ñêîðî÷åííÿ äëÿ %s âæå ³ñíóº"
-
-# msgstr "E224: "
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: Çàãàëüíà çàì³íà äëÿ %s âæå ³ñíóº"
-
-# msgstr "E225: "
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: Âæå º ñêîðî÷åííÿ äëÿ %s"
-
-# msgstr "E226: "
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: Âæå º çàì³íà äëÿ %s"
-
-# msgstr "E227: "
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "Ñêîðî÷åííÿ íå çíàéäåíî"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "Çàì³íè íå çíàéäåíî"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: Íåïðèïóñòèìèé ðåæèì"
-
-# msgstr "E447: "
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--Æîäíîãî ðÿäêà--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: Êîìàíäó ïåðåðâàíî"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: Íåîáõ³äíî âêàçàòè àðãóìåíò"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: Çà \\ ìຠéòè /, ? àáî &"
-
-# msgstr "E10: "
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: Íåïðèïóñòèìî ó â³êí³ êîìàíä, <CR> âèêîíóº, CTRL-C âèõîäèòü"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr ""
-"E12: Êîìàíäà íå äîçâîëåíà ó exrc/vimrc ó ïîøóêó ïîòî÷íîãî êàòàëîãó ÷è òå´ó"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: Áðàêóº :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: Áðàêóº :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: Áðàêóº :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: Áðàêóº :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile áåç :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor áåç :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: Ôàéë ³ñíóº (! ùîá íå çâàæàòè)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: Êîìàíäà íà âäàëàñü"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: Âíóòð³øíÿ ïîìèëêà"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "Ïåðåðâàíî"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: Íåïðàâèëüíà àäðåñà"
-
-# msgstr "E14: "
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: Íåêîðåêòíèé àðãóìåíò"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: Íåêîðåêòíèé àðãóìåíò: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: Íåïðàâèëüíèé âèðàç: %s"
-
-# msgstr "E15: "
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: Íåïðàâèëüí³ ìåæ³"
-
-# msgstr "E16: "
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: Íåêîðåêòíà êîìàíäà"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: «%s» — öå êàòàëîã"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: Íåêîðåêòíèé ðîçì³ð çñóâó"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: Á³áë³îòå÷íèé âèêëèê äî «%s()» íå âäàâñÿ"
-
-# msgstr "E18: "
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: Ó ïîì³òêè íåêîðåêòíèé íîìåð ðÿäêà"
-
-# msgstr "E19: "
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: Ïîì³òêó íå âñòàíîâëåíî"
-
-# msgstr "E20: "
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: Çì³íè íå äîçâîëåí³: âèìêíåíî 'modifiable'"
-
-# msgstr "E21: "
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: Çàáàãàòî âêëàäåíèõ ñêðèïò³â"
-
-# msgstr "E22: "
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: Íåìຠâòîðèííîãî ôàéëó"
-
-# msgstr "E23: "
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: Òàêîãî ñêîðî÷åííÿ íåìàº"
-
-# msgstr "E24: "
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ! íå äîçâîëåíî"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: Íå ìîæíà âèêîðèñòàòè GUI: Íå ââ³ìêíåíî ï³ä ÷àñ êîìï³ëÿö³¿"
-
-# msgstr "E25: "
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: Íåìຠòàêî¿ ãðóïè ï³äñâ³÷óâàííÿ: %s"
-
-# msgstr "E28: "
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: Òåêñò ùå íå áóëî äîäàíî"
-
-# msgstr "E29: "
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: Ùå íå áóëî êîìàíä"
-
-# msgstr "E30: "
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: Íåìຠòàêî¿ çàì³íè"
-
-# msgstr "E31: "
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: Æîäíîãî çá³ãó"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: Æîäíîãî çá³ãó: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: Áðàêóº íàçâè ôàéëó"
-
-# msgstr "E32: "
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: Çàì³íà çðàçê³â ùå íå âèêîðèñòîâóâàëàñü"
-
-# msgstr "E33: "
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: Êîìàíä ùå íå áóëî"
-
-# msgstr "E34: "
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: Çðàçê³â ïîøóêó ùå íå áóëî"
-
-# msgstr "E35: "
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: Íå äîçâîëåíî âêàçóâàòè ìåæ³"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ̳ñöÿ íå âèñòà÷èòü"
-
-# msgstr "E36: "
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: Íå âäàëîñÿ ñòâîðèòè ôàéë %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: Íå âäàëîñÿ ñôîðìóâàòè íàçâó òèì÷àñîâîãî ôàéëó"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: Íå âäàëîñÿ â³äêðèòè ôàéë %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: Íå âäàëîñÿ ïðî÷èòàòè ôàéë %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: Çì³íè íå áóëî çàïèñàíî (! ùîá íå çâàæàòè)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[Çì³íè íå çàïèñàíî]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ³äñóòí³é àðãóìåíò"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: Î÷³êóºòüñÿ ÷èñëî"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: Íå âäàëîñÿ â³äêðèòè ôàéë ïîìèëîê %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: Çàáðàêëî ïàì'ÿò³!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "Çðàçîê íå çíàéäåíî"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: Çðàçîê íå çíàéäåíî: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: Àðãóìåíò ìຠáóòè äîäàòíèé"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: Íå âäàëîñÿ ïåðåéòè äî ïîïåðåäíüîãî êàòàëîãó"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: Æîäíî¿ ïîìèëêè"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: Íåìຠñïèñêó ì³ñöü"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: Òåêñò çá³ãó ïîøêîäæåíî"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: dzïñîâàíà ïðîãðàìà ðåãóëÿðíèõ âèðàç³â"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: Âñòàíîâëåíî îïö³þ 'readonly' (! ùîá íå çâàæàòè)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: Çì³ííà ò³ëüêè äëÿ ÷èòàííÿ: «%s»"
-
-#: ../globals.h:1075
-#, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E794: Íå ìîæíà âñòàíîâèòè çì³ííó ó ï³ñî÷íèö³: «%s»"
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: Ïîìèëêà ÷èòàííÿ ôàéëó ïîìèëîê"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: Íà äîçâîëåíî ó ï³ñî÷íèö³"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: Íå äîçâîëåíî òóò"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: Ðåæèì åêðàíó íå ï³äòðèìóºòüñÿ"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: Íåêîðåêòíèé ðîçì³ð çñóâó"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: Îïö³ÿ 'shell' ïîðîæíÿ"
-
-# msgstr "E254: "
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: Íå ìîæíà ç÷èòàòè äàí³ íàïèñó!"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: Ïîìèëêà ï³ä ÷àñ çàêðèòòÿ ôàéëó îáì³íó"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: Ñòåê òå´³â ïîðîæí³é"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: Çàíàäòî ñêëàäíà êîìàíäà"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Çàäîâãå ³ì'ÿ"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: Çàáàãàòî '['"
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: Çàáàãàòî íàçâ ôàéë³â"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: Íàäëèøêîâ³ ñèìâîëè"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: Íåâ³äîìà ïîì³òêà"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: Íå âäàëîñÿ ðîçêðèòè øàáëîí"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' íå ìîæå áóòè ìåíøèì çà 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' íå ìîæå áóòè ìåíøèì çà 'winminwidth'"
-
-# msgstr "E79: "
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: Ïîìèëêà ï³ä ÷àñ çàïèñó"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "Íóëüîâà ê³ëüê³ñòü"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: <SID> âèêîðèñòîâóºòüñÿ íå â êîíòåêñò³ ñêðèïòó"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: Âíóòð³øíÿ ïîìèëêà: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: Çðàçîê âèêîðèñòîâóº á³ëüøå, í³æ 'maxmempattern', ïàì'ÿò³"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: Ïîðîæí³é áóôåð"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: Íåêîðåêòíèé çðàçîê äëÿ ïîøóêó ÷è ðîçä³ëüíèê"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: Ôàéë óæå çàâàíòàæåíî â ³íøèé áóôåð"
-
-# msgstr "E235: "
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: Îïö³ÿ '%s' íå âñòàíîâëåíà"
-
-#: ../globals.h:1111
-msgid "E850: Invalid register name"
-msgstr "E850: Íåïðàâèëüíà íàçâà ðåã³ñòðó"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "Ïîøóê ä³éøîâ äî ÏÎ×ÀÒÊÓ, ïðîäîâæóºòüñÿ ç ʲÍÖß"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "Ïîøóê ä³éøîâ äî ʲÍÖß, ïðîäîâæóºòüñÿ ç ÏÎ×ÀÒÊÓ"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: Ïðîïóùåíî äâîêðàïêó"
-
-# msgstr "E347: "
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: Íåêîðåêòíèé êîìïîíåíò"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: î÷³êóºòüñÿ öèôðà"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "Ñòîð³íêà %d"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "ͳ÷îãî äðóêóâàòè"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Äðóêóºòüñÿ ñòîð³íêà %d (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Êîï³ÿ %d ç %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "Íàäðóêîâàíî: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "Äðóê ïåðåðâàíî"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Íå âäàëîñÿ çàïèñàòè âèõ³äíèé ôàéë PostScript"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Íå âäàëîñÿ ïðî÷èòàòè ôàéë ðåñóðñ³â PostScript «%s»"
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: «%s» íå º ôàéëîì ðåñóðñ³â PostScript"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: «%s» íå º ï³äòðèìóâàíèì ôàéëîì ðåñóðñ³â PostScript"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: Íåïðàâèëüíà âåðñ³ÿ ôàéëó ðåñóðñ³â «%s»"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Íåñóì³ñí³ áàãàòîáàéòîâå êîäóâàííÿ é íàá³ð ñèìâîë³â."
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr ""
-"E674: printmbcharset íå ìîæå áóòè ïîðîæí³ì ç áàãàòîáàéòîâèì êîäóâàííÿì."
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Íå çàçíà÷åíî øðèôò äëÿ áàãàòîáàéòîâîãî äðóêó."
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Íå âäàëîñÿ â³äêðèòè ôàéë PostScript äëÿ âèâîäó"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «prolog.ps»"
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «cidfont.ps»"
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «%s.ps»"
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Íå âäàëîñÿ ïåðåòâîðèòè äî êîäóâàííÿ äðóêó «%s»"
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "³äñèëàºòüñÿ íà ïðèíòåð..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Íå âäàëîñÿ íàäðóêóâàòè ôàéë PostScript"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "Çàâäàííÿ äðóêó â³ä³ñëàíî."
-
-# msgstr "E255: "
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Äîäàòè íîâó áàçó äàíèõ"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "Çàïèò çà çðàçêîì"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "Ïîêàçàòè öå ïîâ³äîìëåííÿ"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "Çíèùèòè ç'ºäíàííÿ"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "Ïåðåçàïóñòèòè óñ³ ç'ºäíàííÿ"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Ïîêàçàòè ç'ºäíàííÿ"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Âèêîðèñòàííÿ: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Öÿ êîìàíäà cscope íå â쳺 ä³ëèòè â³êíî.\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Âèêîðèñòàííÿ: cstag <³äåíòèô-îð>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: òå´ íå çíàéäåíî"
-
-# msgstr "E257: "
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ïîìèëêà: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s íå º í³ êàòàëîãîì, í³ áàçîþ äàíèõ cscope"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Äîäàíî áàçó äàíèõ cscope %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: Ïîìèëêà ÷èòàííÿ ç³ ç'ºäíàííÿ cscope %<PRId64>"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: Íåâ³äîìèé òèï ïîøóêó cscope"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: Íå âäàëîñÿ ñòâîðèòè êàíàëè äî cscope"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: Íå âäàëîñÿ ðîçä³ëèòè ïðîöåñ äëÿ cscope"
-
-#: ../if_cscope.c:849
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection: ïîìèëêà setpgid"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection: ïîìèëêà ï³ä ÷àñ âèêîíàííÿ"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen äëÿ to_fp íå âäàâñÿ"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen äëÿ fr_fp íå âäàâñÿ"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: Íå âäàëîñÿ ñòâîðèòè ïðîöåñ cscope"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: æîäíîãî ç'ºäíàííÿ ³ç cscope"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: Íåêîðåêòíèé ïðàïîðåöü cscopequickfix %c äëÿ %c"
-
-# msgstr "E258: "
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: Äëÿ çàïèòó cscope %s ç %s í³÷îãî íå çíàéäåíî"
-
-# msgstr "E259: "
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "Êîìàíäè cscope:\n"
-
-#: ../if_cscope.c:1150
-#, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %s%*s (Âèêîðèñòàííÿ: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-"\n"
-" c: Çíàéòè ôóíêö³¿, ùî âèêëèêàþòü öþ ôóíêö³þ\n"
-" d: Çíàéòè ôóíêö³¿, ùî âèêëèêàþòüñÿ ö³ºþ ôóíêö³ºþ\n"
-" e: Çíàéòè öåé øàáëîí egrep\n"
-" f: Çíàéòè öåé ôàéë\n"
-" g: Çíàéòè öå âèçíà÷åííÿ\n"
-" i: Çíàéòè ôàéëè, ÿê³ âêëþ÷àþòü â ñåáå öåé ôàéë\n"
-" s: Çíàéòè öåé ñèìâîë C\n"
-" t: Çíàéòè öåé òåêñò\n"
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: Ïîâòîðíà áàçà äàíèõ cscope íå äîäàíà"
-
-# msgstr "E260: "
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: Ç'ºäíàííÿ ç cscope %s íå çíàéäåíî"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "Ç'ºäíàííÿ ç cscope %s çàê³í÷åíî"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: Ôàòàëüíà ïîìèëêà â cs_manage_matches"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Òå´ cscope: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ðÿäîê"
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ôàéë / êîíòåêñò / ðÿäîê\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Ïîìèëêà cscope: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "Óñ³ áàçè äàíèõ cscope ïåðåçàâàíòàæåíî"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "Æîäíîãî ç'ºäíàííÿ ç cscope\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid íàçâà áàçè äàíèõ øëÿõ\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "Íåâ³äîìèé àðãóìåíò îïö³¿"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "Çàáàãàòî àðãóìåíò³â"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "Ïðîïóùåíî àðãóìåíò ï³ñëÿ"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "Ñì³òòÿ ï³ñëÿ àðãóìåíòó îïö³¿"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "Çàáàãàòî àðãóìåíò³â ó «+êîìàíäà», «-c êîìàíäà» àáî «--cmd êîìàíäà»"
-
-# msgstr "E14: "
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "Íåïðàâèëüíèé àðãóìåíò ó"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d ôàéëè(³â)\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "Ñïðîáà ïîâòîðíî â³äêðèòè ñêðèïò: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "Íå âäàëîñÿ ïðî÷èòàòè: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "Íå âäàëîñÿ â³äêðèòè ÿê âèõ³äíèé ôàéë: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: Çàñòåðåæåííÿ: Âèâ³ä íå ó òåðì³íàë\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: Çàñòåðåæåííÿ: Óâåäåííÿ íå ç òåðì³íàëó\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "êîìàíäè ïåðåä vimrc"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: Íå âäàëîñÿ ïðî÷èòàòè ç «%s»"
-
-# msgstr "E282: "
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"ijçíàéòåñÿ á³ëüøå: «vim -h»\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[ôàéë ..] ðåäàãóâàòè âêàçàí³ ôàéëè"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- ÷èòàòè òåêñò ç stdin"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t ïîì³òêà ïåðåéòè äî òå´ó"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [ôàéë] ïåðåéòè äî ïåðøî¿ ïîìèëêè"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Âæèòîê:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [àðãóìåíòè] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" àáî:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"Àðãóìåíòè:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tËèøå íàçâè ôàéë³â ï³ñëÿ öüîãî"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tÍå ðîçêðèâàòè øàáëîíè"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tÐåæèì Vi (í³áè «vi»)"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tÐåæèì Ex (í³áè «ex»)"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\tÏîêðàùåíèé ðåæèì Ex"
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tÌîâ÷àçíèé (ïàêåòíèé) ðåæèì (ëèøå äëÿ «ex»)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tÐåæèì ïîð³âíÿííÿ (í³áè «vimdiff»)"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tÏðîñòèé ðåæèì (í³áè «evim», áåç ðåæèì³â)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÐåæèì ïåðåãëÿäó (í³áè «view»)"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÎáìåæåíèé ðåæèì (í³áè «rvim»)"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tÇì³íè (çàïèñ ôàéë³â) íå äîçâîëåíî"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÇì³íè â òåêñò³ ôàéë³â íå äîçâîëåíî"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tÄâ³éêîâèé ðåæèì"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tÐåæèì lisp"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tÑóì³ñíèé ç Vi ðåæèì: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tÍå çîâñ³ì ñóì³ñíèé ç Vi ðåæèì: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][ôàéë]\t\tÁ³ëüøå ïîâ³äîìëåíü [ð³âåíü N] [ôàéë æóðí. ïîâ³äîìëåíü]"
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tÐåæèì íàëàãîäæåííÿ"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tÍå âèêîðèñòîâóâàòè ôàéë îáì³íó, òðèìàòè óñå â ïàì'ÿò³"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tÏîêàçàòè ôàéëè îáì³íó ³ âèéòè"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (íàçâà ôàéëó)\t³äíîâèòè àâàð³éíî çàê³í÷åíèé ñåàíñ"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tÒå ñàìå, ùî é -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tÇàïóñòèòè â ðåæèì³ àðàáñüêî¿ ìîâè"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tÇàïóñòèòè â ðåæèì³ ³âðèòó"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tÇàïóñòèòè â ðåæèì³ ïåðñüêî¿ ìîâè"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <òåðì³íàë>\tÂñòàíîâèòè òèï òåðì³íàëó ó <òåðì³íàë>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tÂèêîðèñòàòè ïîäàíèé ôàéë çàì³ñòü .vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tÍå âàíòàæèòè ñêðèïòè äîïîâíåííÿ"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\t³äêðèòè N âêëàäîê (àáî ïî îäí³é äëÿ êîæíîãî ôàéëó)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\t³äêðèòè N â³êîí (àáî ïî îäíîìó äëÿ êîæíîãî ôàéëó)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\tͳáè -o, àëå ïîä³ëèòè â³êíà âåðòèêàëüíî"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tÐîçïî÷àòè â ê³íö³ ôàéëó"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<ðÿäîê>\t\tÐîçïî÷àòè ó âêàçàíîìó <ðÿäêó>"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <êîìàíäà>\tÂèêîíàòè <êîìàíäó> ïåðåä çàâàíòàæåííÿì vimrc"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <êîìàíäà>\t\tÂèêîíàòè <êîìàíäó> ï³ñëÿ çàâàíòàæåííÿ ïåðøîãî ôàéëó"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <ñåàíñ>\t\tÂèêîíàòè ïîäàíèé ôàéë ï³ñëÿ ïåðøîãî çàâàíòàæåíîãî ôàéëó"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <ñêðèïò>\t\tÇ÷èòàòè êîìàíäè íîðìàëüíîãî ðåæèìó ç ôàéëó <ñêðèïò>"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <ñêðèïò>\t\tÄîïèñàòè óñ³ íàáðàí³ êîìàíäè äî ôàéëó <ñêðèïò>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-w <ñêðèïò>\t\tÇàïèñàòè óñ³ íàáðàí³ êîìàíäè ó ôàéë <ñêðèïò>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-"--startuptime <ôàéë>\tÇàïèñàòè çàïóñêí³ ïîâ³äîìëåííÿ ç ÷àñîâèìè â³äì³òêàìè "
-"äî <ôàéëó>"
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tÂèêîðèñòàòè <viminfo> çàì³ñòü .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h ÷è --help\tÍàäðóêóâàòè öå ïîâ³äîìëåííÿ ³ âèéòè"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tÍàäðóêóâàòè ³íôîðìàö³þ ïðî âåðñ³þ ïðîãðàìè ³ âèéòè"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "Íå âñòàíîâëåíî æîäíî¿ ïîì³òêè"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: Ïîì³òêó «%s» íå çíàéäåíî"
-
-# msgstr "E283: "
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"ïîì. ðÿä. êîë. ôàéë/òåêñò"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" òî÷êà ðÿä. ñòîâï. ôàéë/òåêñò"
-
-# msgstr "E283: "
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"çì³íèòè ðÿä. ñòîâï. òåêñò"
-
-# TODO
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Ïîì³òêè:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Ñïèñîê ïåðåõîä³â (â³ä íàéíîâ³øèõ):\n"
-
-# TODO
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Ïîïåðåäí³ ïîì³òêè â ôàéëàõ (â³ä íàéíîâ³øèõ):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "Ïðîïóùåíî '>'"
-
-# msgstr "E292: "
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: Áëîê íå áóëî çàô³êñîâàíî"
-
-# msgstr "E293: "
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: Ïîìèëêà çì³íè ïîçèö³¿ ó ôàéë³ îáì³íó"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: Ïîìèëêà ç÷èòóâàííÿ ôàéëó îáì³íó"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: Ïîìèëêà çì³íè ïîçèö³¿ ï³ä ÷àñ çàïèñó ó ôàéë îáì³íó"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: Ïîìèëêà çàïèñó ôàéëó îáì³íó"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: Ôàéë îáì³íó âæå ³ñíóº (àòàêà ñèìâîëüíèì ïîñèëàííÿì?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: Íåìຠáëîêó 0?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: Íåìຠáëîêó 1?"
-
-# msgstr "E298: "
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: Íåìຠáëîêó 2?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: Îé, âòðà÷åíî ôàéë îáì³íó!!!"
-
-# msgstr "E301: "
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: Íå âäàëîñÿ ïåðåéìåíóâàòè ôàéëó îáì³íó"
-
-# msgstr "E302: "
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: Íå âäàëîñÿ ïðî÷èòàòè ôàéë îáì³íó äëÿ «%s», â³äíîâëåííÿ íåìîæëèâå"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): Íåìຠáëîêó 0??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: Íå çíàéäåíî ôàéëó îáì³íó äëÿ %s"
-
-# msgstr "E305: "
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "Ââåä³òü íîìåð ôàéëó îáì³íó, êîòðèé âèêîðèñòàòè, (0 äëÿ âèõîäó):"
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: Íå âäàëîñÿ â³äêðèòè %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "Íå âäàëîñÿ ïðî÷èòàòè áëîê 0 ç "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"Íàïåâíî, çì³í íå áóëî, àáî Vim íå ïîíîâèâ ôàéë îáì³íó."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " íå ìîæíà âèêîðèñòàòè ç ö³ºþ âåðñ³ºþ Vim.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "Çíàéä³òü Vim 3.0\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s íå ñõîæå íà ôàéë îáì³íó Vim"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " íå ìîæíà âèêîðèñòàòè íà öüîìó êîìï'þòåð³.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "Ôàéë áóëî ñòâîðåíî íà "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"àáî ôàéë áóëî ïîøêîäæåíî."
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr " ïîøêîäæåíèé (ðîçì³ð ñòîð³íêè ìåíøèé ì³í³ìàëüíîãî çíà÷åííÿ).\n"
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "Âèêîðèñòîâóºòüñÿ ôàéë îáì³íó «%s»"
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "Ïî÷àòêîâèé ôàéë «%s»"
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: Çàñòåðåæåííÿ: Ìîæëèâî, ïî÷àòêîâèé ôàéë áóëî çì³íåíî"
-
-# msgstr "E308: "
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: Íå âäàëîñÿ ïðî÷èòàòè áëîê 1 ç %s"
-
-# msgstr "E309: "
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "??? ÁÐÀÊÓª ÁÀÃÀÒÜÎÕ ÐßÄʲÂ"
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "??? ÍÅÏÐÀÂÈËÜÍÀ ʲËÜʲÑÒÜ ÐßÄʲÂ"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "??? ÏÎÐÎÆÍ²É ÁËÎÊ"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "??? ÏÐÎÏÓÙÅͲ ÐßÄÊÈ"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ²äåíòèô³êàòîð áëîêó 1 íåïðàâèëüíèé (%s íå º ôàéëîì îáì³íó?)"
-
-# msgstr "E310: "
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "??? ÏÐÎÏÓÙÅÍÎ ÁËÎÊ"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? çâ³äñè ³ äî `??? ʲÍÅÖÜ' ðÿäêè, ìîæëèâî, ñïëóòàí³"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? çâ³äñè ³ äî `??? ʲÍÅÖÜ' ðÿäêè, ìîæëèâî, áóëè äîäàí³/çíèùåí³"
-
-#: ../memline.c:1181
-msgid "???END"
-msgstr "??? ʲÍÅÖÜ"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: ³äíîâëåííÿ ïåðåðâàíî"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr ""
-"E312: ϳä ÷àñ â³äíîâëåííÿ çíàéäåíî ïîìèëêè. Ïåðåãëÿíüòå ðÿäêè, ùî "
-"ïî÷èíàþòüñÿ ç ???"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "Äèâ. «:help E312» äëÿ óòî÷íåííÿ."
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "³äíîâëåííÿ çàê³í÷åíî, ïåðåâ³ðòå ÷è âñå ãàðàçä."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Ìîæëèâî, ïîòð³áíî çàïèñàòè öåé ôàéë ï³ä ³íøîþ íàçâîþ\n"
-
-#: ../memline.c:1252
-msgid "and run diff with the original file to check for changes)"
-msgstr "³ çàïóñòèòè diff ç îðèã³íàëîì ùîá ïåðåâ³ðèòè çì³íè)"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr "³äíîâëåííÿ çàê³í÷åíî. Âì³ñò áóôåðà ñï³âïàäàº ç³ âì³ñòîì ôàéëó."
-
-#: ../memline.c:1255
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"\n"
-"Ìîæëèâî, òåïåð âè õî÷åòå çíèùèòè ôàéë îáì³íó .swp.\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "Çíàéäåíî ôàéëè îáì³íó:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr "  ïîòî÷íîìó êàòàëîç³:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " Âèêîðèñòîâóþ÷è âêàçàíó íàçâó:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " Ó êàòàëîç³ "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- æîäíîãî --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " âëàñíèê: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " äàòà: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " äàòà: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [â³ä Vim 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [íå ñõîæå íà ôàéë îáì³íó]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " íàçâà ôàéëó: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" çì³íåíî: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "ÒÀÊ"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "í³"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" êîðèñòóâà÷: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " íàçâà âóçëà: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" íàçâà âóçëà: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ID ïðîöåñó: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (âèêîíóºòüñÿ)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [íåïðèäàòíèé íà öüîìó êîìï'þòåð³]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [íå ìîæíà ïðî÷èòàòè]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [íå ìîæíà â³äêðèòè]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: Íå âäàëîñÿ çàãîòîâèòè, íåìຠôàéëó îáì³íó"
-
-# msgstr "E313: "
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "Ôàéë çáåðåæåíî"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: Çáåðåæåííÿ íå âäàëîñÿ"
-
-# msgstr "E314: "
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: íåïðàâèëüíèé lnum: %<PRId64>"
-
-# msgstr "E315: "
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: íå çíàéøîâ ðÿäîê %<PRId64>"
-
-# msgstr "E316: "
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: Âêàç³âíèê áëîêó ïîìèëêîâèé 3"
-
-# msgstr "E317: "
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx ìຠáóòè ð³âíèì 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: Ïîíîâëåíî çàáàãàòî áëîê³â?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: Âêàç³âíèê áëîêó ïîìèëêîâèé 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "áëîê 1 çíèùåíî?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: Íå âäàëîñÿ çíàéòè ðÿäîê %<PRId64>"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: Âêàç³âíèê áëîêó ïîìèëêîâèé"
-
-# msgstr "E317: "
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count äîð³âíþº 0"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: Íîìåð ðÿäêà âèéøîâ çà ìåæ³: %<PRId64> çà ê³íöåì"
-
-# msgstr "E322: "
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: ʳëüê³ñòü ðÿäê³â ó áëîö³ %<PRId64>"
-
-# msgstr "E323: "
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "Ðîçì³ð ñòåêó çá³ëüøóºòüñÿ"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: Âêàç³âíèê áëîêó ïîìèëêîâèé 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: Öèêë³÷í³ ñèìâîëüí³ ïîñèëàííÿ «%s»"
-
-# msgstr "E317: "
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ÓÂÀÃÀ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"Çíàéäåíî ôàéë îáì³íó ç íàçâîþ \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "Ïðè â³äêðèòò³ ôàéëó \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " ÍβØÈÉ çà ôàéë îáì³íó!\n"
-
-#: ../memline.c:3244
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) Ìîæëèâî, ³íøà ïðîãðàìà âæå ðåäàãóº öåé ñàìèé ôàéë. ßêùî öå òàê,\n"
-" áóäüòå îáåðåæí³, ùîá íå çàëèøèëèñÿ äâà ð³çí³ åêçåìïëÿðè\n"
-" îäíîãî é òîãî ñàìîãî ôàéëó ï³ñëÿ çì³í."
-
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr " Âèéä³òü àáî ïðîäîâæóéòå îáåðåæíî.\n"
-
-#: ../memline.c:3246
-msgid "(2) An edit session for this file crashed.\n"
-msgstr "(2) Ñåàíñ ðåäàãóâàííÿ öüîãî ôàéëó çàçíàâ êðàõó.\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " ßêùî öå ñïðàâä³ òðàïèëîñÿ, ñïðîáóéòå «:recover» àáî «vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"»\n"
-" ùîá â³äíîâèòè çì³íè (äèâ. «:help recovery»).\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " ßêùî âè âæå öå çðîáèëè, çíèù³òü ôàéë îáì³íó «"
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"»,\n"
-" ùîá ïîçáóòèñÿ öüîãî ïîâ³äîìëåííÿ.\n"
-"\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "Ôàéë îáì³íó «"
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "» âæå ³ñíóº!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM — ÓÂÀÃÀ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "Ôàéë îáì³íó âæå ³ñíóº!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&O:³äêðèòè ëèøå äëÿ ÷èòàííÿ\n"
-"&E:Âñå îäíî ðåäàãóâàòè\n"
-"&R:³äíîâèòè\n"
-"&Q:Âèéòè\n"
-"&A:Ïåðåðâàòè"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"&O:³äêðèòè ëèøå äëÿ ÷èòàííÿ\n"
-"&E:Óñå îäíî ðåäàãóâàòè\n"
-"&R:³äíîâèòè\n"
-"&D:Çíèùèòè éîãî\n"
-"&Q:Âèéòè\n"
-"&A:Ïåðåðâàòè"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: Çíàéäåíî çàáàãàòî ôàéë³â îáì³íó"
-
-# msgstr "E341: "
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: Çàáðàêëî ïàì'ÿò³! (ïîòð³áíî áóëî %<PRIu64> áàéò³â)"
-
-# msgstr "E326: "
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ×àñòèíà øëÿõó äî åëåìåíòà ìåíþ íå º ï³äìåíþ"
-
-# msgstr "E327: "
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: Ìåíþ ìîæå áóòè ò³ëüêè â ³íøîìó ðåæèì³"
-
-# msgstr "E328: "
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: Íåìຠìåíþ «%s»"
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr "E792: Ïîðîæíÿ íàçâà ìåíþ"
-
-# msgstr "E329: "
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: Øëÿõ äî ìåíþ íå ïîâèíåí âåñòè äî ï³äìåíþ"
-
-# msgstr "E330: "
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: Íå ìîæíà äîäàâàòè åëåìåíòè ìåíþ ïðîñòî äî âåðõíüîãî ìåíþ"
-
-# msgstr "E331: "
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: Ðîçä³ëüíèê íå ìîæå áóòè ÷àñòèíîþ øëÿõó ìåíþ"
-
-# msgstr "E332: "
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- Ìåíþ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: Øëÿõ ïîâèíåí âåñòè äî åëåìåíòà ìåíþ"
-
-# msgstr "E333: "
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: Ìåíþ íå çíàéäåíî: %s"
-
-# msgstr "E334: "
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: Äëÿ ðåæèìó %s ìåíþ íå âèçíà÷åíî"
-
-# msgstr "E335: "
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: Øëÿõ ïîâèíåí âåñòè äî ï³äìåíþ"
-
-# msgstr "E336: "
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: Ìåíþ íå çíàéäåíî — ïåðåâ³ðòå íàçâó"
-
-# msgstr "E337: "
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "Âèÿâëåíî ïîìèëêó ï³ä ÷àñ âèêîíàííÿ %s:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "ðÿäîê %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: Íåïðàâèëüíà íàçâà ðåã³ñòðó: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "Óêðà¿í³çàö³ÿ: Àíàòîë³é Ñàõí³ê <sakhnik@gmail.com>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "Ïåðåðâàíî: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Íàòèñí³òü ENTER àáî ââåä³òü êîìàíäó äëÿ ïðîäîâæåííÿ"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s ðÿäîê %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- Ùå --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " ÏÐÎÁ²Ë/d/j: âíèç íà åêðàí/ñòîð³íêó/ðÿäîê, b/u/k: âãîðó, q: âèéòè "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "Çàïèòàííÿ"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"&Y:Òàê\n"
-"&N:ͳ"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"&Y:Òàê\n"
-"&N:ͳ\n"
-"&C:Ñêàñóâàòè"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"&Y:Òàê\n"
-"&N:ͳ\n"
-"&A:Óñ³\n"
-"&D:Æîäíîãî\n"
-"&C:Ñêàñóâàòè"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: Íåäîñòàòíüî àðãóìåíò³â äëÿ printf()"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr "E807: Î÷³êóºòüñÿ àðãóìåíò Float äëÿ printf()"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: Çàáàãàòî àðãóìåíò³â äëÿ printf()"
-
-# msgstr "E338: "
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: Çàñòåðåæåííÿ: Çì³íþºòüñÿ ôàéë ïðèçíà÷åíèé ëèøå äëÿ ÷èòàííÿ"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "Íàáåð³òü ÷èñëî é <Enter> ÷è êëàöí³òü ìèøêîþ (ïîðîæíº ñêàñîâóº): "
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "Íàáåð³òü ÷èñëî é <Enter> (ïîðîæíº ñêàñîâóº): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "äîäàíî îäèí ðÿäîê"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "çíèùåíî îäèí ðÿäîê"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "äîäàíî ðÿäê³â: %<PRId64>"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "çíèùåíî ðÿäê³â: %<PRId64>"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (Ïåðåðâàíî)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Äçåíü!"
-
-# msgstr "E342: "
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "Âèêëèêàºòüñÿ îáîëîíêà ùîá âèêîíàòè: «%s»"
-
-# msgstr "E348: "
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: Íåìຠ³äåíòèô³êàòîðà íàä êóðñîðîì"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' ïîðîæíÿ"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "Çàñòåðåæåííÿ: Òåðì³íàë íå ï³äòðèìóº êîëüîðè"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: Íåìຠðÿäêà íà êóðñîð³"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: Íå âäàëîñÿ çíèùèòè çãîðòêè ïîòî÷íèì ìåòîäîì 'foldmethod'"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: Ñïèñîê çì³í ïîðîæí³é"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: Ïî÷àòîê ñïèñêó çì³í"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: ʳíåöü ñïèñêó çì³í"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "Óâåä³òü :quit<Enter> ùîá âèéòè ç Vim"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "Îäèí ðÿäîê %s-íî"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "Îäèí ðÿäîê %s-íî %d ðàç³â"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> ðÿäê³â %s-íî"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> ðÿäê³â %s-íî %d ðàç³â"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "Çàëèøèëîñÿ âèð³âíÿòè %<PRId64> ðÿäê³â..."
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "Âèð³âíÿíî îäèí ðÿäîê"
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "Âèð³âíÿíî ðÿäê³â: %<PRId64>"
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: Ðåã³ñòðè ïåðåä öèì íå âæèâàëèñü"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "íå âäàëîñÿ çàïàì'ÿòàòè; âñå îäíî çíèùèòè?"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "Îäèí ðÿäîê çì³íåíî"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "Çì³íåíî ðÿäê³â: %<PRId64>"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "Çàïàì'ÿòàâ áëîê ç îäíîãî ðÿäêà"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "Çàïàì'ÿòàâ îäèí ðÿäîê"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "Çàïàì'ÿòàâ áëîê ³ç %<PRId64> ðÿäê³â"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "Çàïàì'ÿòàâ ðÿäê³â: %<PRId64>"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: Ó ðåã³ñòð³ %s í³÷îãî íåìàº"
-
-# msgstr "E353: "
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- Ðåã³ñòðè ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "Íåïðàâèëüíà íàçâà ðåã³ñòðó"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# Ðåã³ñòðè:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: Íåâ³äîìèé òèï ðåã³ñòðó %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "äîâæ.: %<PRId64>; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Âèáðàíî %s%<PRId64> ç %<PRId64> ðÿäê³â; %<PRId64> ç %<PRId64> ñë³â; "
-"%<PRId64> ç %<PRId64> áàéò³â"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Âèáðàíî %s%<PRId64> ç %<PRId64> ðÿäê³â; %<PRId64> ç %<PRId64> ñë³â; "
-"%<PRId64> of %<PRId64> ñèìâîë³â; %<PRId64> ç %<PRId64> áàéò³â"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Êîëîíêà %s ç %s; ðÿäîê %<PRId64> ç %<PRId64>; ñëîâî %<PRId64> ç %<PRId64>; "
-"áàéò %<PRId64> ç %<PRId64>"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Êîëîíêà %s ç %s; ðÿäîê %<PRId64> ç %<PRId64>; ñëîâî %<PRId64> ç %<PRId64>; "
-"ñèìâîë %<PRId64> of %<PRId64>; áàéò %<PRId64> ç %<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> äëÿ BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=Ñòîð. %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "Äÿêóºìî çà âèá³ð Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: Íåâ³äîìà îïö³ÿ"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: Îïö³ÿ íå ï³äòðèìóºòüñÿ"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: Íå äîçâîëåíî ó modeline"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr "E846: Êîä êëþ÷à íå âñòàíîâëåíî"
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: ϳñëÿ = ïîòð³áíî âêàçàòè ÷èñëî"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Íå çíàéäåíî ñåðåä ìîæëèâîñòåé òåðì³íàë³â"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: Íåäîçâîëåíèé ñèìâîë <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: Íå âäàëîñÿ ñïîðîæíèòè 'term'"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: Îïö³¿ 'backupext' ³ 'patchmode' îäíàêîâ³"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr "E834: Êîíôë³êòóº ³ç çíà÷åííÿì 'listchars'"
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr "E835: Êîíôë³êòóº ³ç çíà÷åííÿì 'fillchars'"
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: Áðàêóº äâîêðàïêè"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: Ðÿäîê ïîðîæí³é"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: ϳñëÿ <%s> áðàêóº ÷èñëà"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: Áðàêóº êîìè"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: Ïîòð³áíî âêàçàòè çíà÷åííÿ '"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: ̳ñòèòü íåäðóêîâí³ àáî ðîçøèðåí³ ñèìâîëè"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: Íåäîçâîëåíèé ñèìâîë ï³ñëÿ <%c>"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: Ïîòð³áíà êîìà"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ìຠáóòè ïîðîæíüîþ ÷è ì³ñòèòè %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: Ïîñë³äîâí³ñòü âèðàç³â íå çàâåðøåíî"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: Çàáàãàòî åëåìåíò³â"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: Ãðóïè íå çáàëàíñîâàíî"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: ³êíî ïåðåãëÿäó âæå ³ñíóº"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr ""
-"W17: Äëÿ àðàáñüêî¿ ìîâè ïîòð³áíå UTF-8, âèêîíàéòå ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: Ïîòð³áíî ùîíàéìåíøå %d ðÿäê³â"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: Ïîòð³áíî ùîíàéìåíøå %d ñòîâïö³â"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: Íåâ³äîìà îïö³ÿ: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: Ïîòð³áíî âêàçàòè Number: &%s = '%s'"
-
-# msgstr "E355: "
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Êîäè òåðì³íàëó ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Çíà÷åííÿ çàãàëüíèõ îïö³é ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Çíà÷åííÿ ëîêàëüíèõ îïö³é ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Îïö³¿ ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: Ïîìèëêà get_varp"
-
-# msgstr "E356: "
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': Äëÿ ñèìâîëó %s íåìຠïàðè"
-
-# msgstr "E357: "
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': Çàéâ³ ñèìâîëè ï³ñëÿ `;': %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"Íå âäàëîñÿ çàïóñòèòè îáîëîíêó"
-
-# msgstr "E362: "
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"îáîëîíêà ïîâåðíóëà: "
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-"\n"
-"Íå âäàëîñÿ îòðèìàòè êîíòåêñò áåçïåêè äëÿ "
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-"\n"
-"Íå âäàëîñÿ âñòàíîâèòè êîíòåêñò áåçïåêè äëÿ "
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = «%s»"
-
-# msgstr "E446: "
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: Ôàéë «%s» íå çíàéäåíî ó øëÿõó ïîøóêó"
-
-# msgstr "E371: "
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: Çàáàãàòî %%%c ó ðÿäêó ôîðìàòó"
-
-# msgstr "E372: "
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: Íåî÷³êóâàíèé `%%%c' ó ðÿäêó ôîðìàòó"
-
-# msgstr "E373: "
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: Ïðîïóùåíî ] ó ðÿäêó ôîðìàòó"
-
-# msgstr "E374: "
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: %%%c ó ðÿäêó ôîðìàòó íå ï³äòðèìóºòüñÿ"
-
-# msgstr "E375: "
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: Ïîìèëêîâèé `%%%c' ó ïðåô³êñ³ ðÿäêó ôîðìàòó"
-
-# msgstr "E376: "
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: Ïîìèëêîâèé `%%%c' ó ðÿäêó ôîðìàòó"
-
-# msgstr "E377: "
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' íå ì³ñòèòü çðàçîê"
-
-# msgstr "E378: "
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: Ïðîïóùåíà ÷è ïîðîæíÿ íàçâà êàòàëîãó"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: Íåìຠá³ëüøå åëåìåíò³â"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d ç %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (ðÿäîê çíèùåíî)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Äíî ñòåêó âèïðàâëåíü"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Âåðøèíà ñòåêó âèïðàâëåíü"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "ñïèñîê ïîìèëîê %d ç %d; %d ïîìèëîê"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: Íå ìîæó çàïèñàòè, âêàçàíà îïö³ÿ 'buftype'"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: Ïðîïóùåíî íàçâó ôàéëó ÷è íåêîðåêòíèé øàáëîí"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: Áóôåð íå çàâàíòàæåíî"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: Î÷³êóºòüñÿ String ÷è List"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: Íåêîðåêòíèé åëåìåíò ó %s%%[]"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: Áðàêóº ] ï³ñëÿ %s["
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: Íåìຠïàðè %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: Íåìຠïàðè %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: Íåìຠïàðè %s)"
-
-# msgstr "E406: "
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( òóò íå äîçâîëåíî"
-
-# msgstr "E406: "
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 òà ³í. òóò íå äîçâîëåíî"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: Ïðîïóùåíî ] ï³ñëÿ %s%%["
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: %s%%[] ïîðîæí³é"
-
-# msgstr "E382: "
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: Çðàçîê çàíàäòî äîâãèé"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Çàáàãàòî \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Çàáàãàòî %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: Íåìຠïàðè \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: Íåäîçâîëåíèé ñèìâîë ï³ñëÿ %s@"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Çàáàãàòî ñêëàäíèõ %s{...}"
-
-# msgstr "E339: "
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: Âêëàäåí³ %s*"
-
-# msgstr "E61: "
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: Âêëàäåí³ %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: Íåêîðåêòíî âæèòî \\_"
-
-# msgstr "E62: "
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: ϳñëÿ %s%c í³÷îãî íåìàº"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: Íåêîðåêòíå çâîðîòíº ïîñèëàííÿ"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: Íåïðàâèëüíèé ñèìâîë ï³ñëÿ \\z"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: Íåäîçâîëåíèé ñèìâîë ï³ñëÿ %s%%[dxouU]"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: Íåäîçâîëåíèé ñèìâîë ï³ñëÿ %s%%"
-
-# msgstr "E64: "
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: Ñèíòàêñè÷íà ïîìèëêà â %s{...}"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Çîâí³øí³ ï³ä-çá³ãè:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-"E864: ï³ñëÿ \\%#= ìîæå áóòè ò³ëüêè 0, 1, or 2. Áóäå âèêîðèñòàíî àâòîìàòè÷íèé "
-"ìåõàí³çì "
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (NFA) Çàðàíî òðàïèâñÿ ê³íåöü ðåãóëÿðíîãî âèðàçó"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (NFA regexp) Íå íà ì³ñö³ %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (NFA) Íåâ³äîìèé îïåðàòîð '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Íåâ³äîìèé îïåðàòîð '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (NFA) Íåâ³äîìèé îïåðàòîð '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr "E870: (NFA regexp) Íå âäàëîñÿ ïðî÷èòàòè ìåæ³ ïîâòîðåííÿ"
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr "E871: (NFA regexp) Ìóëüòè íå ìîæå áóòè çà ìóëüòè!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (NFA regexp) Çàáàãàòî '('"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (NFA regexp) Çàáàãàòî \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (NFA regexp) ïîìèëêà íàëåæíîãî ïðèïèíåííÿ"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (NFA) Ñòåê ïîðîæí³é!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (NFA regexp) (ϳä ÷àñ ïåðåòâîðåííÿ ç ïîñòô³êñ ó NFA) çàëèøèëîñÿ "
-"çàáàãàòî ñòàí³â ó ñòåêó"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (NFA regexp) Íåäîñòàòíüî ïàì’ÿò³, ùîá çáåðåãòè âåñü NFA "
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"Íå âäàëîñÿ â³äêðèòè òèì÷àñîâèé ôàéë æóðíàëó äëÿ çàïèñó, ïîêàçóºòüñÿ íà "
-"stderr ... "
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(NFA) ÍÅ ÂÄÀËÎÑß Â²ÄÊÐÈÒÈ %s!"
-
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "Íå âäàëîñÿ â³äêðèòè òèì÷àñîâèé ôàéë æóðíàëó äëÿ çàïèñó "
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " ²ÐÒ ÇÀ̲ÍÀ"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ÇÀ̲ÍÀ"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ÍÀÂÈÂÎвÒ"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ÂÑÒÀÂÊÀ"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (âñòàâêà)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (çàì³íà)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (â³ðò çàì³íà)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " ²âðèò"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Àðàáñüêà"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (ìîâà)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (êëåé)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ÂÈÁ²Ð"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ÂÈÁ²Ð ÐßÄʲÂ"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ÂÈÁ²Ð ÁËÎÊÓ"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ÂÈIJËÅÍÍß"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ÂÈIJËÅÍÍß ÐßÄʲÂ"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ÂÈIJËÅÍÍß ÁËÎÊÓ"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "éäå çàïèñ"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: Íåïðàâèëüíèé çðàçîê äëÿ ïîøóêó: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: Ïîøóê ä³éøîâ äî ÏÎ×ÀÒÊÓ áåç çá³ã³â ç %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: Ïîøóê ä³éøîâ äî ʲÍÖß áåç çá³ã³â ç %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ϳñëÿ `;' ìຠáóòè `?' àáî `/'"
-
-# msgstr "E386: "
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (ðàçîì ç ïîïåðåäí³ìè çá³ãàìè)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- Âêëþ÷åí³ ôàéëè "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "íå çíàéäåíî "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "ó øëÿõó ïîøóêó ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (Óæå ó ñïèñêó)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " ÍÅ ÇÍÀÉÄÅÍÎ"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "Ïîøóê ó âêëþ÷åíîìó ôàéë³: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "Øóêàºòüñÿ ó âêëþ÷åíîìó ôàéë³ %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: Çá³ã ó ïîòî÷íîìó ðÿäêó"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "Áóëè çíàéäåí³ âñ³ âêëþ÷åí³ ôàéëè"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "Æîäíîãî âêëþ÷åíîãî ôàéëó"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: Âèçíà÷åííÿ íå çíàéäåíî"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: Çðàçîê íå çíàéäåíî"
-
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Çàì³íà "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-"\n"
-"# Îñò. %sÇðàçîê ïîøóêó:\n"
-"~"
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: Ïîìèëêà ôîðìàòó ó ôàéë³ îðôîãðàô³¿"
-
-# msgstr "E364: "
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: Îá³ðâàíèé ôàéë îðôîãðàô³¿"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Çàéâèé òåêñò ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Íàçâà àô³êñó çàâåëèêà ó %s ó ðÿäêó %d: %s"
-
-# msgstr "E430: "
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: Ïîìèëêà ôîðìàòó ó ôàéë³ àô³êñ³â FOL, LOW ÷è UPP"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Ñèìâîë ó FOL, LOW ÷è UPP ïîçà ìåæàìè"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "Ñòèñêóºòüñÿ äåðåâî ñë³â..."
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: Ïåðåâ³ðêà îðôîãðàô³¿ íå äîçâîëåíà"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-"Çàñòåðåæåííÿ: Íå âäàëîñÿ çíàéòè ñïèñîê ñë³â «%s.%s.spl» ÷è «%s.ascii.spl»"
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "×èòàºòüñÿ ôàéë îðôîãðàô³¿ «%s»"
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: Íå ñõîæå íà ôàéë îðôîãðàô³¿"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: Ôàéë îðôîãðàô³¿ ñòàðèé, òðåáà ïîíîâèòè"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Ôàéë îðôîãðàô³¿ ïðèçíà÷åíèé äëÿ á³ëüø íîâî¿ âåðñ³¿ Vim"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: Íåäîçâîëåíà ñåêö³ÿ ó ôàéë³ îðôîãðàô³¿"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "Çàñòåðåæåííÿ: ðåã³îí %s íå ï³äòðèìóºòüñÿ"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "×èòàºòüñÿ ôàéë àô³êñ³â %s ..."
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "Ïîìèëêà ïåðåòâîðåííÿ ñëîâà ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "Ïåðåòâîðåííÿ ó %s íå ï³äòðèìóºòüñÿ: ç %s äî %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "Íåêîðåêòíå çíà÷åííÿ FLAG ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "FLAG ï³ñëÿ âèêîðèñòàííÿ ïðàïîðö³â ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Âèçíà÷åííÿ COMPOUNDFORBIDFLAG ï³ñëÿ åëåìåíòó PFX ìîæå äàòè íåïðàâèëüíèé "
-"ðåçóëüòàò ó %s ó ðÿäêó %d"
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-"Âèçíà÷åííÿ COMPOUNDPERMITFLAG ï³ñëÿ åëåìåíòó PFX ìîæó äàòè íåïðàâèëüíèé "
-"ðåçóëüòàò ó %s ó ðÿäêó %d"
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "Íåïðàâèëüíå çíà÷åííÿ COMPOUNDRULES ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "Íåïðàâèëüíå çíà÷åííÿ COMPOUNDWORDMAX ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "Íåïðàâèëüíå çíà÷åííÿ COMPOUNDMIN ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "Íåïðàâèëüíå çíà÷åííÿ COMPOUNDSYLMAX ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "Íåïðàâèëüíå çíà÷åííÿ CHECKCOMPOUNDPATTERN ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-"²íøèé ïðàïîðåöü êîìá³íàö³¿ ó ïðîäîâæåíí³ áëîêó àô³êñ³â ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "Ïîäâ³éíèé àô³êñ ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"Àô³êñ òàêîæ âèêîðèñòîâóºòüñÿ äëÿ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
-"NOSUGGEST ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "Òðåáà Y ÷è N ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "Íåïðèäàòíà óìîâà ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "Òðåáà ê³ëüê³ñòü REP(SAL) ó %s ó ðÿäêó %d"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "Òðåáà ê³ëüê³ñòü MAP ó %s ó ðÿäêó %d"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "Ïîâòîðåííÿ ñèìâîëó ó MAP ó %s ó ðÿäêó %d"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "Íåðîçï³çíàíèé ÷è ïîâòîðíèé åëåìåíò ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Ïðîïóùåíî ðÿäîê FOL/LOW/UPP ó %s"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "Âæèòî COMPOUNDSYLMAX áåç SYLLABLE"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Çàáàãàòî â³äêëàäåíèõ ïðåô³êñ³â"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Çàáàãàòî ñêëàäíèõ ïðàïîðö³â"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Çàáàãàòî â³äêëàäåíèõ ïðåô³êñ³â ³/àáî ñêëàäíèõ ïðàïîðö³â"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "Ïðîïóùåíî ðÿäîê SOFO%s ó %s"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "Îáèäâà ðÿäêè SAL ³ SOFO ó %s"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "Ïðàïîðåöü íå º ÷èñëîì ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "Íåïðàâèëüíèé ïðàïîðåöü ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "Çíà÷åííÿ %s â³äð³çíÿºòüñÿ â³ä òîãî, ùî âæèòî ó ³íøîìó ôàéë³ .aff"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "Ç÷èòóºòüñÿ ñëîâíèêîâèé ôàéë %s ..."
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: Íåìຠê³ëüêîñò³ ñë³â ó %s"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "ðÿäîê %6d, ñëîâî %6d - %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "Ïîâòîðåííÿ ñëîâà ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "Ïåðøå ïîâòîðåííÿ ñëîâà ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "%d ïîâòîðþâàíèõ ñë³â ó %s"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "Ïðîïóùåíî %d ñë³â(~) ³ç íå-ASCII ñèìâîëàìè ó %s"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "×èòàºòüñÿ ôàéë ñë³â %s ..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr "Ïîâòîðåííÿ ðÿäêà /encoding= ïðî³ãíîðîâàíî ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "Ðÿäîê /encoding= ï³ñëÿ ñëîâà ïðî³ãíîðîâàíî ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "Ïîâòîðåííÿ ðÿäêà /regions= ïðî³ãíîðîâàíî ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "Çàáàãàòî ðåã³îí³â ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "Ðÿäîê / ïðî³ãíîðîâàíî ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "Íåêîðåêòíèé íîìåð ðåã³îíó ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "Íåðîçï³çíàí³ ïðàïîðö³ ó %s ó ðÿäêó %d: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "Ïðî³ãíîðîâàíî %d ñë³â ³ç íå-ASCII ñèìâîëàìè"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "Ñòèñíåíî %d ç %d âóçë³â; çàëèøèëîñÿ %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "Ïåðå÷èòóºòüñÿ ôàéë îðôîãðàô³¿..."
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "Âèêîíóºòüñÿ çãîðòàííÿ çâóê³â..."
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "ʳëüê³ñòü ñë³â ï³ñëÿ çãîðòàííÿ çâóê³â: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "Ïîâíà ê³ëüê³ñòü ñë³â: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "Çàïèñóºòüñÿ ôàéë ïðèïóùåíü %s ..."
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "Îö³íêà ñïîæèâàííÿ ïàì'ÿò³: %d áàéò"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Âèõ³äíèé ôàéë íå ïîâèíåí ìàòè íàçâó ðåã³îíó"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ϳäòðèìóºòüñÿ ò³ëüêè äî âîñüìè ðåã³îí³â"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: Íåêîðåêòíèé ðåã³îí ó %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "Çàñòåðåæåííÿ: çàçíà÷åíî îáèäâà `ñêëàäí³ ñëîâà' ³ NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "Çàïèñóºòüñÿ ôàéë îðôîãðàô³¿ %s ..."
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Çðîáëåíî!"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' íå ì³ñòèòü %<PRId64> åëåìåíò³â"
-
-#: ../spell.c:8074
-#, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "Ñëîâî '%.*s' çíèùåíî ç %s"
-
-#: ../spell.c:8117
-#, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Ñëîâî '%.*s' äîäàíî äî %s"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: Ñèìâîëè ó ñëîâ³ â³äð³çíÿþòüñÿ ó ôàéëàõ îðôîãðàô³¿"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "Ïðîáà÷òå, íåìຠïðîïîçèö³é"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "Ïðîáà÷òå, ò³ëüêè %<PRId64> ïðîïîçèö³é"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "Çàì³íèòè «%.*s» íà:"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < «%.*s»"
-
-# msgstr "E34: "
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: Íåìຠïîïåðåäíüî¿ çàì³íè"
-
-# msgstr "E333: "
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: Íå çíàéäåíî: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: Íå ñõîæå íà ôàéë .sug: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr "E779: Çàñòàð³ëèé ôàéë .sug, òðåáà ïîíîâèòè: %s"
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr "E780: Ôàéë .sug äëÿ á³ëüø íîâî¿ âåðñ³¿ Vim: %s"
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr "E781: Ôàéë .sug íå â³äïîâ³äຠôàéëó .spl: %s"
-
-#: ../spell.c:9305
-#, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E782: Ïîìèëêà ÷èòàííÿ ôàéëó .sug: %s"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr "E783: Ïîâòîðåíî ñèìâîë ó åëåìåíò³ MAP"
-
-# msgstr "E391: "
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Äëÿ áóôåðà íå âèçíà÷åíî åëåìåíò³â ñèíòàêñèñó"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: Íåïðàâèëüíèé àðãóìåíò: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: Íåìຠòàêîãî ñèíòàêñè÷íîãî êëàñòåðà: %s"
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "ñèíõðîí³çóºòüñÿ ïî êîìåíòàðÿõ ñòèëþ Ñ"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "áåç ñèíõðîí³çàö³¿"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "ïî÷èíàºòüñÿ ñèíõðîí³çàö³ÿ çà "
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr " ðÿäê³â ïåðåä ïåðøèì ðÿäêîì"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Åëåìåíòè ñèíõðîí³çàö³¿ ñèíòàêñèñó ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"ñèíõðîí³çàö³ÿ ïî åëåìåíòàõ"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Åëåìåíòè ñèíòàêñèñó ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: Íåìຠòàêîãî ñèíòàêñè÷íîãî êëàñòåðà: %s"
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "ì³í³ìàëüíèé "
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "ìàêñèìàëüíèé "
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; çá³ã "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr " ðîçðèâè ðÿäê³â"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: ̳ñòèòü íåïðèéíÿòí³ òóò àðãóìåíòè"
-
-# msgstr "E14: "
-#: ../syntax.c:4096
-msgid "E844: invalid cchar value"
-msgstr "E844: Íåêîðåêòíå çíà÷åííÿ cchar"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: group[t]hete òóò íåïðèéíÿòíèé"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: Íå çíàéäåíî åëåìåíò ðåã³îíó äëÿ %s"
-
-# msgstr "E396: "
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: Ïîòð³áíà íàçâà ôàéëó"
-
-#: ../syntax.c:4221
-msgid "E847: Too many syntax includes"
-msgstr "E847: Çàáàãàòî ñèíòàêñè÷íèõ âêëþ÷åíü"
-
-#: ../syntax.c:4303
-#, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E789: Ïðîïóùåíî ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: Ïðîïóùåíî `=': %s"
-
-# ---------------------------------------
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: Áðàêóº àðãóìåíò³â: ñèíòàêñè÷íèé ðåã³îí %s"
-
-#: ../syntax.c:4870
-msgid "E848: Too many syntax clusters"
-msgstr "E848: Çàáàãàòî ñèíòàêñè÷íèõ êëàñòåð³â"
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: Êëàñòåð íå âêàçàíî"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ʳíåöü çðàçêó íå çíàéäåíî: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: Ñì³òòÿ ï³ñëÿ çðàçêó: %s"
-
-# msgstr "E402: "
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr ""
-"E403: Ñèíòàêñè÷íà ñèíõðîí³çàö³ÿ: çðàçîê äëÿ ïðîäîâæåííÿ ðÿäêà âêàçàíî äâ³÷³"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: Íåïðàâèëüí³ àðãóìåíòè: %s"
-
-# msgstr "E404: "
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: Ïðîïóùåíî çíàê ð³âíîñò³: %s"
-
-# msgstr "E405: "
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: Ïîðîæí³é àðãóìåíò: %s"
-
-# msgstr "E406: "
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s òóò íå äîçâîëåíî"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ìຠáóòè ïåðøèì ðÿäêîì ó ñïèñêó contains"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: Íåâ³äîìà íàçâà ãðóïè: %s"
-
-# msgstr "E409: "
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: Íåïðàâèëüíà ï³äêîìàíäà :syntax: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-" ÂÑÜÎÃÎ Ê-ÒÜ ÑϲÂÏ. ÍÀÉÏβË. ÑÅÐÅÄÍ. ÍÀÇÂÀ ØÀÁËÎÍ"
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: Ðåêóðñèâíèé öèêë ÷èòàííÿ syncolor.vim"
-
-# msgstr "E410: "
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: Ãðóïó ï³äñâ³÷óâàííÿ íå çíàéäåíî: %s"
-
-# msgstr "E411: "
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: Íåäîñòàòíüî àðãóìåíò³â: «:highlight link %s»"
-
-# msgstr "E412: "
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: Çàáàãàòî àðãóìåíò³â: «:highlight link %s»"
-
-# msgstr "E413: "
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: Ãðóìà ìຠsettings, highlight link ïðî³ãíîðîâàíî"
-
-# msgstr "E414: "
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: Íåñïîä³âàíèé çíàê ð³âíîñò³: %s"
-
-# msgstr "E415: "
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: Ïðîïóùåíî çíàê ð³âíîñò³: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: Ïðîïóùåíî àðãóìåíò: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: Íåïðàâèëüíå çíà÷åííÿ: %s"
-
-# msgstr "E418: "
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: Íåâ³äîìèé êîë³ð òåêñòó"
-
-# msgstr "E419: "
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: Íåâ³äîìèé êîë³ð ôîíó"
-
-# msgstr "E420: "
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: Íåðîçï³çíàíà íàçâà àáî íîìåð êîëüîðó: %s"
-
-# msgstr "E421: "
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Çàíàäòî äîâãèé êîä òåðì³íàëó: %s"
-
-# msgstr "E422: "
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: Íåïðàâèëüíèé àðãóìåíò: %s"
-
-# msgstr "E423: "
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: Âèêîðèñòàíî çàáàãàòî ð³çíèõ àòðèáóò³â êîëüîðó"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: Íåäðóêîâíèé ñèìâîë ó íàçâ³ ãðóïè"
-
-# msgstr "E181: "
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: Íåêîðåêòíèé ñèìâîë ó íàçâ³ ãðóïè"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr "E849: Çàáàãàòî ãðóï ï³äñâ³÷óâàííÿ ³ ñèíòàêñèñó"
-
-# msgstr "E424: "
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ʳíåöü ñòåêó òå´³â"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: Âåðøèíà ñòåêó òå´³â"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Öå âæå íàéïåðøèé â³äïîâ³äíèé òå´"
-
-# msgstr "E425: "
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: Òå´ íå çíàéäåíî: %s"
-
-# msgstr "E426: "
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # ïð³ òèï òå´"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "ôàéë\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Ëèøå îäèí â³äïîâ³äíèé òå´"
-
-# msgstr "E427: "
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Öå âæå îñòàíí³é â³äïîâ³äíèé òå´"
-
-# msgstr "E428: "
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Ôàéë «%s» íå ³ñíóº"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "òå´ %d ç %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " àáî á³ëüøå"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " Âèêîðèñòàíî òå´, íå ðîçð³çíÿþ÷è âåëèê³ é ìàë³ ë³òåðè"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Ôàéë «%s» íå ³ñíóº"
-
-# msgstr "E429: "
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # ÄÎ òå´ó Ç ðÿäêà ó ôàéë³/òåêñò³"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "Øóêàºòüñÿ ó ôàéë³ òå´³â %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr "²ãíîðóºòüñÿ äîâãèé ðÿäîê ó ôàéë³ ç ïîçíà÷êàìè"
-
-# msgstr "E430: "
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Ïîìèëêà ôîðìàòó ó ôàéë³ ò崳⠫%s»"
-
-# msgstr "E431: "
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "Ïåðåä áàéòîì %<PRId64>"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Ôàéë òå´³â íå âïîðÿäêîâàíèé: %s"
-
-# msgstr "E432: "
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: Íåìຠôàéëó òå´³â"
-
-# msgstr "E433: "
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: Íå âäàëîñÿ çíàéòè çðàçîê òå´ó"
-
-# msgstr "E434: "
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Íå âäàëîñÿ çíàéòè òå´, ò³ëüêè ïðèïóùåííÿ!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr "Íàçâà ïîëÿ ïîâòîðþºòüñÿ: %s"
-
-# msgstr "E435: "
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' íå â³äîìèé. Âáóäîâàí³ òåðì³íàëè:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "ïî÷àòêîâî '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: Íå âäàëîñÿ â³äêðèòè ôàéë ìîæëèâîñòåé òåðì³íàë³â"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Íåìຠ³íôîðìàö³¿ ïðî òåðì³íàë"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Íåìຠ³íôîðìàö³¿ ïðî ìîæëèâîñò³ òåðì³íàëó"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Íåìຠçàïèñó «%s» ïðî ìîæëèâîñò³ òåðì³íàëó"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Ïîòð³áíà ìîæëèâ³ñòü òåðì³íàëó «cm»"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Êëàâ³ø³ òåðì³íàëó ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: Ïîìèëêà ÷èòàííÿ ââîäó, ðîáîòà çàâåðøóºòüñÿ...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E834: ʳëüê³ñòü ðÿäê³â íåñïîä³âàíî çì³íèëàñÿ"
-
-#: ../undo.c:627
-#, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E828: Íå âäàëîñÿ â³äêðèòè ôàéë ³ñòî𳿠äëÿ çàïèñó: %s"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr "E825: Ôàéë ³ñòî𳿠ïîøêîäæåíî (%s): %s"
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr "Íå âäàëîñÿ çàïèñàòè ôàéë ³ñòî𳿠ó æîäíó ç äèðåêòîð³é ó 'undodir'"
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr "Will not overwrite with undo file, cannot read: %s"
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr "Íå ìîæíà ïåðåçàïèñàòè, öå íå ôàéë ³ñòîð³¿: %s"
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr "Ôàéë ³ñòî𳿠íå çàïèñóºòüñÿ, í³÷îãî ïîâåðòàòè"
-
-#: ../undo.c:1121
-#, c-format
-msgid "Writing undo file: %s"
-msgstr "Çàïèñóºòüñÿ ôàéë ³ñòîð³¿: %s"
-
-#: ../undo.c:1213
-#, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E829: Ïîìèëêà çàïèñó ó ôàéë³ ³ñòîð³¿: %s"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr "Ôàéë ³ñòî𳿠ïðî÷èòàíî íå áóäå, âëàñíèê ³íøèé: %s"
-
-#: ../undo.c:1292
-#, c-format
-msgid "Reading undo file: %s"
-msgstr "×èòàºòüñÿ ôàéë ³ñòîð³¿: %s"
-
-#: ../undo.c:1299
-#, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E822: Íå âäàëîñÿ â³äêðèòè ôàéë äëÿ ÷èòàííÿ: %s"
-
-# msgstr "E333: "
-#: ../undo.c:1308
-#, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E823: Íå ôàéë ³ñòîð³¿: %s"
-
-#: ../undo.c:1313
-#, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E824: Íåñóì³ñíèé ôàéë ³ñòîð³¿: %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr "Âì³ñò ôàéëó çì³íèâñÿ, íå ìîæíà âèêîðèñòàòè ³íôîðìàö³þ ïðî ³ñòîð³þ"
-
-#: ../undo.c:1497
-#, c-format
-msgid "Finished reading undo file %s"
-msgstr "Çàê³í÷åíî ÷èòàííÿ ôàéëó ³ñòî𳿠%s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "Âæå íà íàéñòàðø³é çì³í³"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "Âæå íà íàéíîâ³ø³é çì³í³"
-
-#: ../undo.c:1806
-#, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E830: Çì³íó %<PRId64> íå çíàéäåíî â ³ñòîð³¿"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: íåïðàâèëüí³ íîìåðè ðÿäê³â"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "äîäàíî ðÿäîê"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "ðÿäê³â äîäàíî"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "çíèùåíî ðÿäîê"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "ðÿäê³â çíèùåíî"
-
-# msgstr "E438: "
-#: ../undo.c:2193
-msgid "change"
-msgstr "çì³íà"
-
-# msgstr "E438: "
-#: ../undo.c:2195
-msgid "changes"
-msgstr "çì³í"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "ïåðåä"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "ï³ñëÿ"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Íåìຠí³÷îãî ñêàñîâóâàòè"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr "íîìåð çì³íè ÷àñ çáåðåæåíî"
-
-#: ../undo.c:2360
-#, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> ñåêóíä òîìó"
-
-# msgstr "E406: "
-#: ../undo.c:2372
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E790: Íå ìîæíà âèêîíàòè undojoin ï³ñëÿ undo"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: Ñïèñîê ñêàñóâàííÿ ïîøêîäæåíî"
-
-# msgstr "E439: "
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: ³äñóòí³é ðÿäîê ñêàñóâàííÿ"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Âêëþ÷åí³ ëàòêè: "
-
-#: ../version.c:627
-msgid ""
-"\n"
-"Extra patches: "
-msgstr ""
-"\n"
-"Äîäàòêîâ³ ëàòêè: "
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Çì³íèâ "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"Ñêîìï³ëþâàâ "
-
-#: ../version.c:649
-msgid "by "
-msgstr " "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"óãàíòñüêà âåðñ³ÿ "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "áåç GUI."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " Âêëþ÷åí³ (+) àáî íå âêëþ÷åí³ (-) êîìïîíåíòè:\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ñèñòåìíèé vimrc: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " vimrc êîðèñòóâà÷à: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " äðóãèé vimrc êîðèñòóâà÷à: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " òðåò³é vimrc êîðèñòóâà÷à: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " exrc êîðèñòóâà÷à: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " äðóãèé exrc êîðèñòóâà÷à: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " çàì³íà äëÿ $VIM: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " çàì³íà äëÿ $VIMRUNTIME: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "Ñêîìï³ëüîâàíî: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Ñêîìïîíîâàíî: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " ÂÅÐÑ²ß ÄËß ÍÀËÀÃÎÄÆÅÍÍß"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Ïîêðàùåíèé Vi"
-
-#: ../version.c:769
-msgid "version "
-msgstr "âåðñ³ÿ "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "àâòîð: Bram Moolenaar òà ³í."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim — öå â³äêðèòà é â³ëüíî ðîçïîâñþäæóâàíà ïðîãðàìà"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "Äîïîìîæ³òü ñèðîòàì ç Óãàíäè!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr ":help iccf<Enter> ïîäðîáèö³ "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr ":q<Enter> âèõ³ä ç Vim "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr ":help<Enter> àáî <F1> ïåðåãëÿä äîïîìîãè "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr ":help version7<Enter> ³íôîðìàö³ÿ ïðî âåðñ³þ "
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Âè ïðàöþºòå â ðåæèì³ ñóì³ñíîìó ç Vi"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr ":set nocp<Enter> ðåæèì íåñóì³ñíèé ç Vi "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr ":help cp-default<Enter> ³íôîðìàö³ÿ ïðî ñóì³ñí³ñòü"
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "ϳäòðèìàéòå ðîçðîáêó ðåäàêòîðà Vim!"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "Ñòàíüòå çàðåºñòðîâàíèì êîðèñòóâà÷åì Vim!"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr ":help sponsor<Enter> ïîäàëüøà ³íôîðìàö³ÿ "
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr ":help register<Enter> ïîäàëüøà ³íôîðìàö³ÿ "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "ìåíþ Äîïîìîãà->Ñïîíñîð/Ðåºñòðàö³ÿ ïîäðîáèö³ "
-
-# msgstr "E444: "
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "Öå âæå ºäèíå â³êíî"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: Íåìຠâ³êíà ïåðåãëÿäó"
-
-# msgstr "E441: "
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: Íå âäàëîñÿ îäíî÷àñíî ðîçáèòè topleft ³ botright"
-
-# msgstr "E442: "
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: Íå âäàëîñÿ ïåðåì³ñòèòè â³êíî, çàâàæàþòü ³íø³"
-
-# msgstr "E443: "
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: Íå âäàëîñÿ çàêðèòè îñòàííº â³êíî"
-
-# msgstr "E443: "
-#: ../window.c:1810
-msgid "E813: Cannot close autocmd window"
-msgstr "E813: Íå âäàëîñÿ çàêðèòè â³êíî autocmd"
-
-# msgstr "E443: "
-#: ../window.c:1814
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E814: Íå âäàëîñÿ çàêðèòè â³êíî, çàëèøèëîñÿ á ò³ëüêè â³êíî autocmd"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: Ó ³íøîìó â³êí³ º çì³íè"
-
-# msgstr "E445: "
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: Íåìຠíàçâè ôàéëó íàä êóðñîðîì"
-
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: Âèêëèêàíî bf_key_init() ç ïîðîæí³ì ïàðîëåì"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Íåïðàâèëüíå âèêîðèñòàííÿ ïîðÿäêó áàéò³â Blowfish (BE/LE)"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: Íå ïðîéøëà ïåðåâ³ðêà sha256"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Íå ïðîéøëà ïåðåâ³ðêà Blowfish"
-
-#~ msgid "Patch file"
-#~ msgstr "Ëàòêà"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&O:Ãàðàçä\n"
-#~ "&C:Ñêàñóâàòè"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Íåìຠç'ºäíàííÿ ³ç ñåðâåðîì Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Íå âäàëîñÿ â³ä³ñëàòè äî %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Íå âäàëîñÿ ïðî÷èòàòè â³äïîâ³äü ñåðâåðà"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Íå âäàëîñÿ íàä³ñëàòè ê볺íòó"
-
-#~ msgid "Save As"
-#~ msgstr "Çáåðåãòè ÿê"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Ïðî÷èòàòè ñêðèïò Vim"
-
-#~ msgid "Edit File"
-#~ msgstr "Ðåäàãóâàòè Ôàéë"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (ÍÅ ÇÍÀÉÄÅÍÎ)"
-
-#~ msgid "unknown"
-#~ msgstr "Íåâ³äîìî"
-
-# msgstr "E185: "
-#~ msgid "Edit File in new window"
-#~ msgstr "Ðåäàãóâàòè ôàéë ó íîâîìó â³êí³"
-
-#~ msgid "Append File"
-#~ msgstr "Äîïèñàòè ôàéë"
-
-# msgstr "E187: "
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "Ïîçèö³ÿ â³êíà: X %d, Y %d"
-
-# msgstr "E188: "
-#~ msgid "Save Redirection"
-#~ msgstr "Çáåðåãòè ïåðåàäðåñîâàíèé âèâ³ä"
-
-#~ msgid "Save View"
-#~ msgstr "Çáåðåãòè âèãëÿä"
-
-#~ msgid "Save Session"
-#~ msgstr "Çáåðåãòè ñåàíñ"
-
-#~ msgid "Save Setup"
-#~ msgstr "Çáåðåãòè íàëàøòóâàííÿ"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< íå äîñòóïíà áåç ìîæëèâîñò³ +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: Ó ö³é âåðñ³¿ íåìຠäèãðàô³â"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "º ïðèñòðîºì (âèìêíåíî îïö³ºþ 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "×èòàºòüñÿ ç stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[çàøèôðîâàíî]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Ôàéë çàøèôðîâàíî íåâ³äîìèì ìåòîäîì"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans íå äîçâîëÿº çàïèñóâàòè ó íåçì³íåí³ áóôåðè"
-
-# msgstr "E391: "
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "×àñòêîâ³ çàïèñè çàáîðîíåí³ äëÿ áóôåð³â NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "Çàïèñ äî ïðèñòðîþ çàáîðîíåíî îïö³ºþ 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: óëêó ðåñóðñ³â ìîæíà âòðàòèòè (! ùîá íå çâàæàòè)"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<íå â³äêðèâàºòüñÿ> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: íå âäàëîñÿ îòðèìàòè øðèôò %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: íå âäàëîñÿ ïîâåðíóòèñÿ â ïîòî÷íèé êàòàëîã"
-
-#~ msgid "Pathname:"
-#~ msgstr "Øëÿõ:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: íå âäàëîñÿ îòðèìàòè ïîòî÷íèé êàòàëîã"
-
-#~ msgid "OK"
-#~ msgstr "Ãàðàçä"
-
-#~ msgid "Cancel"
-#~ msgstr "Ñêàñóâàòè"
-
-#~ msgid "Vim dialog"
-#~ msgstr "ijàëîã Vim"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "Scrollbar Widget: Íå âäàëîñÿ âèçíà÷èòè ðîçì³ð ñêîðî÷åíî¿ êàðòèíêè."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: Íå âäàëîñÿ ñòâîðèòè BalloonEval ç ïîâ³äîìëåííÿì ³ ôóíêö³ºþ"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Íå âäàëîñÿ ñòâîðèòè íîâèé ïðîöåñ äëÿ GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Äî÷³ðí³é ïðîöåñ íå çì³ã çàïóñòèòè GUI"
-
-# msgstr "E228: "
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Íå âäàëîñÿ çàïóñòèòè GUI"
-
-# msgstr "E229: "
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Íå âäàëîñÿ ïðî÷èòàòè ç «%s»"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: Íå âäàëîñÿ çàïóñòèòè GUI, íå çíàéäåíî øðèôò"
-
-# msgstr "E230: "
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Íåêîðåêòíèé 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Çíà÷åííÿ 'imactivatekey' íåêîðåêòíå"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Íå âäàëîñÿ îòðèìàòè êîë³ð %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Íåìຠíàä êóðñîðîì, ïîøóê òðèâàº"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Ìåòîäè ââåäåííÿ"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - Çíàéòè é çàì³íèòè..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - Ïîøóê..."
-
-#~ msgid "Find what:"
-#~ msgstr "Çíàéòè:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Çàì³íèòè íà:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Ëèøå ïîâíå ñëîâî"
-
-#~ msgid "Match case"
-#~ msgstr "Çâàæàòè íà ðåã³ñòð"
-
-#~ msgid "Direction"
-#~ msgstr "Íàïðÿì"
-
-#~ msgid "Up"
-#~ msgstr "Âãîðó"
-
-#~ msgid "Down"
-#~ msgstr "Óíèç"
-
-#~ msgid "Find Next"
-#~ msgstr "Íàñòóïíå"
-
-#~ msgid "Replace"
-#~ msgstr "Çàì³íèòè"
-
-#~ msgid "Replace All"
-#~ msgstr "Çàì³íèòè óñ³"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: Îòðèìàâ çàïèò «die» â³ä ìåíåäæåðà ñåñ³é\n"
-
-#~ msgid "Close"
-#~ msgstr "Çàêðèòè"
-
-#~ msgid "New tab"
-#~ msgstr "Íîâà âêëàäêà"
-
-#~ msgid "Open Tab..."
-#~ msgstr "³äêðèòè âêëàäêó..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: Íåñïîä³âàíî çíèùèëîñÿ ãîëîâíå â³êíî\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&F:Ô³ëüòðóâàòè"
-
-#~ msgid "&Cancel"
-#~ msgstr "&C:Ñêàñóâàòè"
-
-#~ msgid "Directories"
-#~ msgstr "Êàòàëîãè"
-
-#~ msgid "Filter"
-#~ msgstr "Ô³ëüòð"
-
-#~ msgid "&Help"
-#~ msgstr "&H:Äîïîìîãà"
-
-#~ msgid "Files"
-#~ msgstr "Ôàéëè"
-
-#~ msgid "&OK"
-#~ msgstr "&O:Ãàðàçä"
-
-#~ msgid "Selection"
-#~ msgstr "Âèä³ëåííÿ"
-
-#~ msgid "Find &Next"
-#~ msgstr "&N:Çíàéòè äàë³"
-
-#~ msgid "&Replace"
-#~ msgstr "&R:Çàì³íèòè"
-
-#~ msgid "Replace &All"
-#~ msgstr "&A:Çàì³íèòè óñ³"
-
-#~ msgid "&Undo"
-#~ msgstr "&U:Ñêàñóâàòè"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Íå âäàëîñÿ çíàéòè â³êíî «%s»"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Àðãóìåíò íå ï³äòðèìóºòüñÿ: «-%s»; êîðèñòóéòåñü âåðñ³ºþ ç OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Íå âäàëîñÿ â³äêðèòè â³êíî âñåðåäèí³ ïðîãðàìè MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Çàêðèòè âêëàäêó"
-
-#~ msgid "Open tab..."
-#~ msgstr "³äêðèòè âêëàäêó..."
-
-# msgstr "E245: "
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "Çíàéòè ðÿäîê ('\\\\' ùîá çíàéòè '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Çíàéòè ³ çàì³íèòè ('\\\\' ùîá çíàéòè '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Íåìàº"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Êàòàëîã\t*.í³÷îãî\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Íåìຠâ³ëüíèõ êîì³ðîê ó ïàë³òð³, äåÿê³ êîëüîðè ìîæóòü áóòè "
-#~ "íåïðàâèëüí³"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Øðèôòè äëÿ öèõ ñèìâîë³â â³äñóòí³ ó íàáîð³ %s:"
-
-# msgstr "E250: "
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Íàçâà íàáîðó øðèôò³â: %s"
-
-# msgstr "E252: "
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Øðèôò '%s' íå º ìîíîøèðèííèì"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Íàçâà íàáîðó øðèôò³â: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Øðèôò0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Øðèôò1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "Øèðèíà øðèôòó%<PRId64> íå á³ëüøà óäâ³÷³ çà øèðèíó øðèôòó0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "Øèðèíà øðèôòó0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "Øèðèíà øðèôòó1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Íåêîðåêòíà ñïåöèô³êàö³ÿ øðèôòó"
-
-#~ msgid "&Dismiss"
-#~ msgstr "&D:Ïðèïèíèòè"
-
-#~ msgid "no specific match"
-#~ msgstr "íåìຠêîíêðåòíîãî çá³ãó"
-
-# msgstr "E234: "
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - Âèá³ð øðèôòó"
-
-#~ msgid "Name:"
-#~ msgstr "Íàçâà:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Ïîêàçàòè ðîçì³ð ó ïóíêòàõ"
-
-#~ msgid "Encoding:"
-#~ msgstr "Êîäóâàííÿ:"
-
-#~ msgid "Font:"
-#~ msgstr "Øðèôò:"
-
-#~ msgid "Style:"
-#~ msgstr "Ñòèëü:"
-
-#~ msgid "Size:"
-#~ msgstr "Ðîçì³ð:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Ïîìèëêà àâòîìàòó Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: ïîìèëêà stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: Íå âäàëîñÿ â³äêðèòè áàçó äàíèõ cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: Íå âäàëîñÿ îòðèìàòè ³íôîðìàö³þ ç áàçè äàíèõ cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Íå âäàëîñÿ çàâàíòàæèòè á³áë³îòåêó Lua"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "íå âäàëîñÿ çáåðåãòè ³íôîðìàö³þ äëÿ ñêàñóâàííÿ"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêè MzScheme íå ìîæóòü áóòè "
-#~ "çàâàíòàæåí³."
-
-#~ msgid "invalid expression"
-#~ msgstr "íåêîðåêòíèé âèðàç"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "îáðîáêó âèðàç³â âèìêíåíî ï³ä ÷àñ êîìï³ëÿö³¿"
-
-#~ msgid "hidden option"
-#~ msgstr "ïðèõîâàíà îïö³ÿ"
-
-#~ msgid "unknown option"
-#~ msgstr "íåâ³äîìà îïö³ÿ"
-
-#~ msgid "window index is out of range"
-#~ msgstr "íåêîðåêòíèé íîìåð â³êíà"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "íå âäàëîñÿ â³äêðèòè áóôåð"
-
-#~ msgid "cannot delete line"
-#~ msgstr "íåìîæëèâî çíèùèòè ðÿäîê"
-
-#~ msgid "cannot replace line"
-#~ msgstr "íåìîæëèâî çàì³íèòè ðÿäîê"
-
-#~ msgid "cannot insert line"
-#~ msgstr "íå âäàëîñÿ âñòàâèòè ðÿäîê"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "á³ëüøå í³æ îäèí ðÿäîê"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "íå âäàëîñÿ ïåðåòâîðèòè çíà÷åííÿ Scheme ó Vim"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Ïîìèëêà Vim: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Ïîìèëêà Vim"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "áóôåð íåïðèäàòíèé"
-
-#~ msgid "window is invalid"
-#~ msgstr "â³êíî íåïðèäàòíå"
-
-#~ msgid "linenr out of range"
-#~ msgstr "íîìåð ðÿäêà çà ìåæàìè ôàéëó"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "íå äîçâîëåíî ó ï³ñî÷íèö³ Vim"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: Íå ìîæíà âèêîðèñòàòè :py ³ :py3 â îäíîìó ñåàíñ³"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Python íå ìîæå áóòè "
-#~ "çàâàíòàæåíà."
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: Íå ìîæíà âèêîðèñòàòè :py ³ :py3 â îäíîìó ñåàíñ³"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Íå ìîæíà ðåêóðñèâíî âèêëèêàòè Python"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ ìຠáóòè åêçåìïëÿðîì String"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Ruby íå ìîæå áóòè "
-#~ "çàâàíòàæåíà."
-
-# msgstr "E414: "
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: íåñïîä³âàíèé return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: íåñïîä³âàíèé next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: íåñïîä³âàíèé break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: íåñïîä³âàíèé redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: retry ïîçà rescue"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: Íåîáðîáëåíèé âèíÿòîê"
-
-# msgstr "E233: "
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Íåâ³äîìèé ñòàòóñ longjmp: %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Ïåðåìêíóòè ðåàë³çàö³þ/âèçíà÷åííÿ"
-
-#~ msgid "Show base class of"
-#~ msgstr "Çíàéòè áàçîâèé êëàñ"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Ïîêàçàòè çàì³íåí³ ôóíêö³¿-÷ëåíè"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Ïðî÷èòàòè ç ôàéëó"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Îòðèìàòè ç ïðîåêòó"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Îòðèìàòè ç óñ³õ ïðîåêò³â"
-
-#~ msgid "Retrieve"
-#~ msgstr "Îòðèìàòè"
-
-#~ msgid "Show source of"
-#~ msgstr "Äæåðåëî"
-
-#~ msgid "Find symbol"
-#~ msgstr "Çíàéòè ñèìâîë"
-
-#~ msgid "Browse class"
-#~ msgstr "Ïåðåãëÿíóòè êëàñ"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Ïîêàçàòè êëàñ â ³ºðàðõ³¿"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Ïîêàçàòè êëàñ â îáìåæåí³é ³ºðàðõ³¿"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref âêàçóº íà"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Íà Xref âêàçàíî ç"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ìàº"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref âèêîðèñòàíî"
-
-#~ msgid "Show docu of"
-#~ msgstr "Ïîêàçàòè docu"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Ñòâîðèòè docu äëÿ"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Íå âäàëîñÿ ç'ºäíàòèñÿ ç³ SNiFF+. Ïåðåâ³ðòå îòî÷åííÿ (sniffemacs ìຠáóòè "
-#~ "ó $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Ïîìèëêà ï³ä ÷àñ ÷èòàííÿ. ³ä'ºäíàíî"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ çàðàç "
-
-#~ msgid "not "
-#~ msgstr "íå "
-
-#~ msgid "connected"
-#~ msgstr "ï³ä'ºäíàíèé"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Íåâ³äîìèé çàïèò äî SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Ïîìèëêà ç'ºäíàííÿ äî SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ íå ï³ä'ºäíàíî"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Íå º áóôåðîì SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: Ïîìèëêà çàïèñó. ³ä'ºäíàíî"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "íåïðàâèëüíà íàçâà áóôåðà"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ùå íå ðåàë³çîâàíî"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "íå âäàëîñÿ âñòàíîâèòè ðÿäêè"
-
-#~ msgid "invalid mark name"
-#~ msgstr "íåïðàâèëüíà íàçâà ïîçíà÷êè"
-
-# msgstr "E19: "
-#~ msgid "mark not set"
-#~ msgstr "ïîì³òêó íå âêàçàíî"
-
-#~ msgid "row %d column %d"
-#~ msgstr "ðÿäîê %d êîëîíêà %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "Íå âäàëîñÿ âñòàâèòè/äîäàòè ðÿäîê"
-
-#~ msgid "line number out of range"
-#~ msgstr "íîìåð ðÿäêà çà ìåæàìè ôàéëó"
-
-#~ msgid "unknown flag: "
-#~ msgstr "íåâ³äîìèé ïðàïîðåöü: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "Íåâ³äîìà vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "ïåðåðâàíî ç êëàâ³àòóðè"
-
-#~ msgid "vim error"
-#~ msgstr "ïîìèëêà Vim"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "íå âäàëîñÿ ñòâîðèòè êîìàíäó â³êíà/áóôåðà: îá'ºêò çíèùóºòüñÿ"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "Íå âäàëîñÿ çàðåºñòðóâàòè ïîä³þ: áóôåð/â³êíî óæå çíèùóºòüñÿ"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: ÔÀÒÀËÜÍÀ ÏÎÌÈËÊÀ TCL: ìîæëèâî ïîøêîäæåíî ñïèñîê ïîñèëàíü!? Áóäü "
-#~ "ëàñêà, ïîâ³äîìòå ó vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "Íå âäàëîñÿ çàðåºñòðóâàòè êîìàíäó ïî䳿: ïîñèëàííÿ íà áóôåð/â³êíî íå "
-#~ "çíàéäåíî"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Tcl íå ìîæå áóòè "
-#~ "çàâàíòàæåíà."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Êîä âèõîäó %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "íå âäàëîñÿ ä³ñòàòè ðÿäîê"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Íå âäàëîñÿ çàðåºñòðóâàòè íàçâó ñåðâåðà êîìàíä"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Íå âäàëîñÿ â³ä³ñëàòè êîìàíäó äî ïðîãðàìè-ö³ë³"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: Âèêîðèñòàíî íåêîðåêòíèé ³äåíòèô³êàòîð ñåðâåðà: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: Ðåêâ³çèò ðåºñòðó çðàçêó VIM ñôîðìîâàíèé íåïðàâèëüíî. Çíèùåíî!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans íå ï³äòðèìóºòüñÿ ç öèì GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "Öÿ âåðñ³ÿ Vim íå áóëà ñêîìï³ëüîâàíà ç ï³äòðèìêîþ ïîð³âíÿííÿ."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "Íå ìîæíà âèêîðèñòàòè '-nb': íå äîçâîëåíî ï³ä ÷àñ êîìï³ëÿö³¿\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: Ïîìèëêà: Íå âäàëîñÿ çàïóñòèòè gvim äëÿ NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "ßêùî ðåã³ñòð ³ãíîðóºòüñÿ, äîäàéòå / ñïåðåäó ùîá ïðàïîðåöü áóâ ó âåðõíüîìó "
-#~ "ðåã³ñòð³."
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tÇàðåºñòðóâàòè öåé gvim äëÿ OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tÑêàñóâàòè ðåºñòðàö³þ öüîãî gvim äëÿ OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tÇàïóñòèòè GUI (í³áè «gvim»)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f ÷è --nofork\tÏåðåäí³é ïëàí: òðèìàòè òåðì³íàë ï³ñëÿ çàïóñêó GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tÍå âèêîðèñòîâóâàòè newcli äëÿ â³äêðèòòÿ â³êíà"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <ïðèñòð³é>\t\t\tÂèêîðèñòîâóâàòè <ïðèñòð³é> äëÿ ââîäó/âèâîäó"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-u <gvimrc>\t\tÂèêîðèñòàòè ïîäàíèé ôàéë çàì³ñòü .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tÐåäàãóâàòè çàøèôðîâàí³ ôàéëè"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <äèñïëåé>\tϳä'ºäíàòè vim äî çàäàíîãî äèñïëåþ ñåðâåðà X"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tÍå ç'ºäíóâàòèñÿ ç X ñåðâåðîì"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr ""
-#~ "--remote <ôàéëè>\tÐåäàãóâàòè <ôàéëè> íà ñåðâåð³ Vim, ÿêùî öå ìîæëèâî"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-silent <ôàéëè> Òå ñàìå, ò³ëüêè íå ñêàðæèòèñÿ íà â³äñóòí³ñòü "
-#~ "ñåðâåðà"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <ôàéëè> ..., àëå çà÷åêàòè ïîêè óñ³ ôàéëè áóäóòü "
-#~ "â³äðåäàãîâàí³"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <ôàéëè> Òå ñàìå, ò³ëüêè íå ñêàðæèòèñÿ, ÿêùî ñåðâåðà "
-#~ "íåìàº"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <ôàéëè> Òàê ñàìî, ÿê --remote, àëå ïî "
-#~ "âêëàäö³ íà ôàéë"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <ñèìâîëè> ³ä³ñëàòè <ñèìâîëè> ñåðâåðó ³ çàâåðøèòè ðîáîòó"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr ""
-#~ "--remote-expr <âèðàç> Âèêîíàòè <âèðàç> ó ñåðâåð³ Vim ³ íàäðóêóâàòè "
-#~ "ðåçóëüòàò"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr ""
-#~ "--serverlist\t\tÏîêàçàòè ñïèñîê íàÿâíèõ ñåðâåð³â Vim ³ çàâåðøèòè ðîáîòó"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <íàçâà>\tÍàä³ñëàòè äî/ñòàòè Vim ñåðâåðîì ç <íàçâîþ>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Àðãóìåíòè äëÿ gvim (âåðñ³ÿ Motif)\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Àðãóìåíòè äëÿ gvim (âåðñ³ÿ neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Àðãóìåíòè äëÿ gvim (âåðñ³ÿ Athena)\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <äèñïëåé>\tÂèêîíàòè vim íà çàäàíîìó <äèñïëå¿>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tÇàïóñòèòè Vim ³ çãîðíóòè éîãî â³êíî"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <êîë³ð>\tÂèêîðèñòàòè <êîë³ð> äëÿ ôîíó (òàêîæ: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <êîë³ð>\tÂèêîðèñòàòè <êîë³ð> äëÿ çâè÷àéíîãî òåêñòó (òàêîæ: -"
-#~ "fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr ""
-#~ "-font <øðèôò>\tÂèêîðèñòàòè <øðèôò> äëÿ çâè÷àéíîãî òåêñòó (òàêîæ: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <øðèôò>\tÂèêîðèñòàòè <øðèôò> äëÿ æèðíîãî òåêñòó"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <øðèôò>\tÂèêîðèñòàòè <øðèôò> äëÿ ïîõèëîãî òåêñòó"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <ãåîì>\tÇàäàòè ðîçì³ðè é ïîëîæåííÿ (òàêîæ: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <òîâù>\tÂñòàíîâèòè òîâùèíó ìåæ <òîâù> (òàêîæ: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <òîâù> Âñòàíîâèòè òîâùèíó ë³í³éêè çñóâó (òàêîæ: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <âèñîòà>\tÂñòàíîâèòè âèñîòó ìåíþ <âèñîòà> (òàêîæ: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tÎáåðíóòè êîëüîðè (òàêîæ: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tÍå îáåðòàòè êîëüîðè (òàêîæ: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <ðåñóðñ>\t\tÂñòàíîâèòè çàçíà÷åíèé ðåñóðñ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Àðãóìåíòè gvim (âåðñ³ÿ GTK+)\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <äèñïëåé>\tÂèêîíàòè vim íà <äèñïëå¿> (òàêîæ: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr ""
-#~ "--role <ðîëü>\tÂñòàíîâèòè óí³êàëüíó ðîëü äëÿ ³äåíòèô³êàö³¿ ãîëîâíîãî â³êíà"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\t³äêðèòè Vim â ³íøîìó åëåìåíò³ ³íòåðôåéñó GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "--echo-wid\t\tÕàé gvim íàäðóêóº ³äåíòèô³êàòîð â³êíà íà stdout"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <çàãîëîâîê áàòüêà>\t³äêðèòè Vim âñåðåäèí³ áàòüê³âñüêîãî â³êíà"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\t³äêðèòè Vim âñåðåäèí³ ³íøîãî åëåìåíòó win32"
-
-#~ msgid "No display"
-#~ msgstr "Íåìຠäèñïëåþ"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Íå âäàëîñÿ â³ä³ñëàòè.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Íå âäàëîñÿ â³ä³ñëàòè. Ñïðîáà âèêîíàòè íà ì³ñö³\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "â³äðåäàãîâàíî %d ç %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Íåìຠäèñïëåþ: ³ä³ñëàòè âèðàç íå âäàëîñÿ.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": ³ä³ñëàòè âèðàç íå âäàëîñÿ.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: Íåêîðåêòíà êîäîâà ñòîð³íêà"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Íå âäàëîñÿ âñòàíîâèòè çíà÷åííÿ êîíòåêñòó ââîäó"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Íå âäàëîñÿ ñòâîðèòè êîíòåêñò ââîäó"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Íå âäàëîñÿ ñòâîðèòè ìåòîä ââîäó"
-
-# msgstr "E286: "
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr ""
-#~ "E287: Çàñòåðåæåííÿ: Íå âäàëîñÿ âñòàíîâèòè â ìåòîä³ ââîäó ïîä³þ çíèùåííÿ"
-
-# msgstr "E287: "
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: Ìåòîä ââîäó íå ï³äòðèìóº ñòèë³"
-
-# msgstr "E288: "
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: Ìåòîä ââîäó íå ï³äòðèìóº â³äðåäàãîâàí³ òèïè"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: Ïîìèëêà ïîíîâëåííÿ øèôðóâàííÿ ôàéëó îáì³íó"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s çàøèôðîâàíî, à öÿ âåðñ³ÿ Vim íå ï³äòðèìóº øèôðóâàííÿ"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Ôàéë îáì³íó çàøèôðîâàíèé: «%s»"
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "ßêùî âè çàäàëè íîâèé êëþ÷ øèôðó, àëå íå çàïèñàëè òåêñòîâèé ôàéë,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "ââåä³òü íîâèé êëþ÷ øèôðó."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "ßêùî âè çàïèñàëè òåêñòîâèé ôàéë ï³ñëÿ çì³íè êëþ÷à øèôðó, íàòèñí³òü enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "ùîá âèêîðèñòàòè îäíàêîâèé êëþ÷ äëÿ òåêñòîâîãî ôàéëó òà ôàéëó îáì³íó"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "Äëÿ òåêñòîâîãî ôàéëó âèêîðèñòîâóºòüñÿ êëþ÷ øèôðó ç ôàéëó îáì³íó.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [íå ïðèäàòíèé äëÿ ö³º¿ âåðñ³¿ Vim]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "³ä³ðâàòè öå ìåíþ"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Âèáðàòè êàòàëîã"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Çàïàì'ÿòàòè ôàéë"
-
-#~ msgid "Open File dialog"
-#~ msgstr "³äêðèòè ôàéë"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: Âèáà÷òå, àëå â êîíñîë³ íåìຠä³àëîãó âèáîðó ôàéëó"
-
-#~ msgid "ERROR: "
-#~ msgstr "ÏÎÌÈËÊÀ: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[áàéò] âñüîãî ðîçì/çíèù. %<PRIu64>/%<PRIu64>, âèêîð. %<PRIu64>, ìàêñ. "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[âèêëèêè] óñüîãî re/malloc() - %<PRIu64>, óñüîãî free() - %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: Ðÿäîê ñòຠçàíàäòî äîâãèì"
-
-# msgstr "E340: "
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Âíóòð³øíÿ ïîìèëêà: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Íåïðàâèëüíèé âèãëÿä ìèø³"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "Âêàæ³òü êëþ÷ øèôðó: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "Ïîâòîð³òü êëþ÷: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Êëþ÷³ íå îäíàêîâ³!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Íå âäàëîñÿ ç'ºäíàòèñÿ ³ç Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Íå âäàëîñÿ ç'ºäíàòèñÿ ³ç Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: Íåïðàâèëüíèé ðåæèì äîñòóïó äî ôàéëó ³íôîðìàö³¿ ïðî ç'ºäíàííÿ ç "
-#~ "NetBenans: «%s»"
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "÷èòàºòüñÿ ç ñîêåòà Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Âòðà÷åíî çâ'ÿçîê ³ç NetBeans äëÿ áóôåðà %<PRId64>"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans íå ï³äòðèìóºòüñÿ ç öèì GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans âæå ï³ä'ºäíàíî"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s ò³ëüêè äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: Ìîæëèâ³ñòü eval íåäîñòóïíà"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "Çâ³ëüíåíî ðÿäê³â: %<PRId64>"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: Íå âäàëîñÿ çì³íèòè term â GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: Çàñòîñóéòå «:gui» äëÿ çàïóñêó GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Íå ìîæíà çì³íèòè â GUI GTK+ 2"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Íåêîðåêòíèé(³) øðèôò(è)"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: Íå âäàëîñÿ âèáðàòè íàá³ð øðèôò³â"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Íåïðàâèëüíèé íàá³ð øðèôò³â"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: Íå âäàëîñÿ âèêîðèñòàòè ðîçøèðåíèé øðèôò"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Íåêîðåêòíèé ðîçøèðåíèé øðèôò"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Ìèøà íå ï³äòðèìóºòüñÿ"
-
-# msgstr "E358: "
-#~ msgid "cannot open "
-#~ msgstr "íå âäàëîñÿ â³äêðèòè "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Íå âäàëîñÿ â³äêðèòè â³êíî!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Ïîòð³áíà Amigados 2.04 àáî ï³çí³øà\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Ïîòð³áíî %s âåðñ³¿ %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Íå âäàëîñÿ â³äêðèòè NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Íå âäàëîñÿ ñòâîðèòè "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim çàâåðøóº ðîáîòó ç %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "íå ìîæó çì³íèòè ðåæèì êîíñîë³ ?!\n"
-
-# msgstr "E359: "
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: íå êîíñîëü??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Íå âäàëîñÿ çàïóñòèòè îáîëîíêó ç îïö³ºþ -f"
-
-# msgstr "E360: "
-#~ msgid "Cannot execute "
-#~ msgstr "Íå âäàëîñÿ âèêîíàòè "
-
-#~ msgid "shell "
-#~ msgstr "îáîëîíêó "
-
-#~ msgid " returned\n"
-#~ msgstr " ïîâåðíóòî\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE çàìàëèé"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "Ïîìèëêà ââîäó/âèâîäó"
-
-#~ msgid "Message"
-#~ msgstr "Ïîâ³äîìëåííÿ"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' íå 80, íå ìîæíà âèêîíóâàòè çîâí³øí³ êîìàíäè"
-
-# msgstr "E364: "
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Íå âäàëîñÿ âèáðàòè ïðèíòåð"
-
-#~ msgid "to %s on %s"
-#~ msgstr "íà %s ç %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Íåâ³äîìèé øðèôò ïðèíòåðà: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: Ïîìèëêà äðóêó: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "Äðóêóºòüñÿ '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: Íåêîðåêòíà íàçâà íàáîðó ñèìâîë³â «%s» ó íàçâ³ øðèôòó «%s»"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Ïîìèëêîâèé ñèìâîë %c â íàçâ³ øðèôòó «%s»"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "Íà â³äêðèòòÿ äèñïëåþ X ï³øëî %<PRId64> ì³ë³ñåêóíä"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Ïîìèëêà X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "Äèñïëåé Õ íå ïðîéøîâ ïåðåâ³ðêó"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Ñïëèâ ÷àñ î÷³êóâàííÿ â³äêðèòòÿ äèñïëåþ Õ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íå âäàëîñÿ çàïóñòèòè îáîëîíêó `sh'\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íå ìîæíà ñòâîðèòè êàíàëè\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Íå âäàëîñÿ ðîçäâî¿òèñÿ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Êîìàíäà çàê³í÷èëà âèêîíàííÿ\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP âòðàòèâ ç'ºäíàííÿ ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Íå âäàëîñÿ â³äêðèòè äèñïëåé X"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP îáðîáëÿºòüñÿ çàïèò 'çáåðåæè ñåáå'"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP â³äêðèâàºòüñÿ ç'ºäíàííÿ"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ñïîñòåðåæåííÿ çà ç'ºäíàííÿì ç ICE íå âäàëîñÿ"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP íå âäàëîñÿ SmcOpenConnection: %s"
-
-#~ msgid "At line"
-#~ msgstr "Ðÿäîê:"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Íå âäàëîñÿ çàâàíòàæèòè vim32.dll"
-
-#~ msgid "VIM Error"
-#~ msgstr "Ïîìèëêà VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Íå âäàëîñÿ âèïðàâèòè âêàç³âíèêè íà ôóíêö³¿ DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "îáîëîíêà ïîâåðíóëà %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: Âèÿâëåíî ïîä³þ %s\n"
-
-#~ msgid "close"
-#~ msgstr "close"
-
-#~ msgid "logoff"
-#~ msgstr "logoff"
-
-#~ msgid "shutdown"
-#~ msgstr "shutdown"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Êîìàíäó íå çíàéäåíî"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "Ôàéë VIMRUN.EXE íå çíàéäåíî ó øëÿõó ïîøóêó.\n"
-#~ "Çîâí³øí³ êîìàíäè íå áóäóòü ïðèçóïèíåí³ ï³ñëÿ âèêîíàííÿ.\n"
-#~ "Ãëÿíüòå :help win32-vimrun ùîá îòðèìàòè ïîäðîáèö³."
-
-#~ msgid "Vim Warning"
-#~ msgstr "Çàñòåðåæåííÿ Vim"
-
-# msgstr "E231: "
-#~ msgid "Error file"
-#~ msgstr "Ôàéë ïîìèëîê"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: Íå âäàëîñÿ ïîáóäóâàòè NFA ç êëàñîì åêâ³âàëåíòíîñò³!"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (NFA) Íå âäàëîñÿ îòðèìàòè ïàì’ÿòü äëÿ îáõîäó ã³ëîê!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "Çàñòåðåæåííÿ: Íå âäàëîñÿ çíàéòè ñïèñîê ñë³â «%s_%s.spl» ÷è «%s_ascii.spl»"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "Ïåðåòâîðåííÿ ó %s íå ï³äòðèìóºòüñÿ"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: Íåäîñòàòíüî ïàì’ÿò³, ñïèñîê ñë³â áóäå íåïîâíèì"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Øëÿõ ôàéëó òå´³â ñêîðî÷åíî äî %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "çàïóùåíî íîâó îáîëîíêó\n"
-
-# msgstr "E242: "
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "Âèêîðèñòàíî CUT_BUFFER0 çàì³ñòü ïîðîæíüîãî âèä³ëåííÿ"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "Ñêàñóâàííÿ áóäå íåìîæëèâå, âñå îäíî ïðîäîâæèòè"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Íåçàøèôðîâàíèé ôàéë ìຠçàøèôðîâàíèé ôàéë ³ñòîð³¿: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Íå âäàëîñÿ ðîçøèôðóâàòè ôàéë ³ñòîð³¿: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Ôàéë ³ñòî𳿠çàøèôðîâàíèé: %s"
-
-# msgstr "E440: "
-# ---------------------------------------
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ ç GUI äëÿ 16/32-ðîçðÿäíî¿ Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ ç GUI äëÿ 64-ðîçðÿäíî¿ MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ ç GUI äëÿ 32-ðîçðÿäíî¿ Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " â ðåæèì³ Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " ç ï³äòðèìêîþ OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Êîíñîëüíà âåðñ³ÿ äëÿ 64-ðîçðÿäíî¿ Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "Êîíñîëüíà âåðñ³ÿ äëÿ 32-ðîçðÿäíî¿ Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ 16-ðîçðÿäíî¿ Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ 32-ðîçðÿäíî¿ MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ 16-ðîçðÿäíî¿ MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "Âåðñ³ÿ äëÿ OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Âåëèêà âåðñ³ÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Íîðìàëüíà âåðñ³ÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Ìàëà âåðñ³ÿ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Êðèõ³òíà âåðñ³ÿ "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "ç GUI GTK2-GNOME."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "ç GUI GTK2."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "ç GUI X11-Motif."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "ç GUI X11-neXtaw."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "ç GUI X11-Athena."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "ç GUI Photon."
-
-#~ msgid "with GUI."
-#~ msgstr "ç GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "ç GUI Carbon."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "ç GUI Cocoa."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "ç (êëàñè÷íèì) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ñèñòåìíèé gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc êîðèñòóâà÷à: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "äðóãèé gvimrc êîðèñòóâà÷à: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "òðåò³é gvimrc êîðèñòóâà÷à: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ñèñòåìíå ìåíþ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "Êîìï³ëÿòîð: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "ìåíþ Help->Orphans ïîäàëüøà ³íôîðìàö³ÿ "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Áåç ðåæèì³â, òåêñò ùî íàáðàíî âñòàâëÿºòüñÿ"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "ìåíþ Edit->Global Settings->Toggle Insert Mode "
-
-#~ msgid " for two modes "
-#~ msgstr " äëÿ äâîõ ðåæèì³â "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "ìåíþ Edit->Global Settings->Toggle Vi Compatible "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " ùîá ïî÷èíàòè â ðåæèì³ ñóì³ñíîñò³ ç Vi"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "ÇÀÑÒÅÐÅÆÅÍÍß: Âè êîðèñòóºòåñÿ Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr ":help windows95<Enter> ³íôîðìàö³ÿ ïðî öå "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Íå âäàëîñÿ çàâàíòàæèòè á³áë³îòåêó %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Perl íå ìîæå áóòè çàâàíòàæåíà."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: Îá÷èñëåííÿ âèðàç³â Perl çàáîðîíåíå ó ï³ñî÷íèö³ áåç ìîäóëÿ Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Ðåäàãóâàòè ó (&m)ð³çíèõ Vim"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Ðåäàãóâàòè ó îäíîìó &Vim"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Ïîð³âíÿòè ç äîïîìîãîþ Vim"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Ðåäàãóâàòè çà äîïîìîãîþ &Vim"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Ðåäàãóâàòè ó âæå çàïóùåíîìó Vim - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Ðåäàãóº âèáðàí³ ôàéëè ç äîïîìîãîþ Vim"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "Ïîìèëêà ñòâîðåííÿ ïðîöåñó, ïåðåâ³ðòå ÷è º gvim ó øëÿõó ïîøóêó!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "ïîìèëêà gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "Øëÿõ çàíàäòî äîâãèé!"
-
-# msgstr "E233: "
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Íåâ³äîìèé íàá³ð øðèôò³â: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Íåâ³äîìèé øðèôò: %s"
-
-# msgstr "E235: "
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Øðèôò «%s» íå ìîíîøèðèííèé"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Íå âäàëîñÿ çàâàíòàæèòè á³áë³îòå÷íó ôóíêö³þ %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: Íå ìîæíà âèêîðèñòàòè ³âðèò: Íå ââ³ìêíåíî ï³ä ÷àñ êîìï³ëÿö³¿\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Íå ìîæíà âèêîðèñòàòè ôàðñ³: Íå ââ³ìêíåíî ï³ä ÷àñ êîìï³ëÿö³¿\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E800: Íå ìîæíà âèêîðèñòàòè àðàáñüêó ìîâó: Íå ââ³ìêíåíî ï³ä ÷àñ "
-#~ "êîìï³ëÿö³¿\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: Íåìຠçàðåºñòðîâàíèõ ñåðâåð³â ç íàçâîþ «%s»"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: Íå âäàëîñÿ â³äêðèòè äèñïëåé"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Îòðèìàíî íåêîðåêòíèé âèðàç"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Íå ìîæíà çì³íèòè çàõèùåíèé ðåã³îí"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans íå äîçâîëÿº çì³íþâàòè çàõèùåí³ â³ä çàïèñó ôàéëè"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Äëÿ «%s» ïîòð³áåí êëþ÷: "
-
-# msgstr "E406: "
-#~ msgid "empty keys are not allowed"
-#~ msgstr "ïîðîæí³ êëþ÷³ íå äîçâîëåí³"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "ñëîâíèê çàáëîêîâàíî"
-
-#~ msgid "list is locked"
-#~ msgstr "ñïèñîê çàáëîêîâàíî"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "íå âäàëîñÿ äîäàòè êëþ÷ '%s' äî ñëîâíèêà"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "³íäåêñ ìຠáóòè ö³ëèé ÷è çð³ç, íå %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "î÷³êóâàâñÿ åêçåìïëÿð str() ÷è unicode(), àëå îòðèìàíî %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "î÷³êóâàâñÿ åêçåìïëÿð bytes() ÷è str(), àëå îòðèìàíî %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "î÷³êóâàâñÿ int(), long() ÷è ùîñü, ùî ìîæå áóòè âì³ùåíå long(), àëå "
-#~ "îòðèìàíî %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ "î÷³êóâàâñÿ int() ÷è ùîñü, ùî ìîæå áóòè âì³ùåíå int(), àëå îòðèìàíî %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "çíà÷åííÿ çàâåëèêå, ùîá âì³ñòèòèñÿ ó òèï C int"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "çíà÷åííÿ çàìàëå, ùîá âì³ñòèòèñÿ ó òèï C int"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "÷èñëî ìຠáóòè á³ëüøå, í³æ íóëü"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "÷èñëî ìຠáóòè íå ìåíøå, í³æ íóëü"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè OutputObject"
-
-# msgstr "E180: "
-#~ msgid "invalid attribute: %s"
-#~ msgstr "íåïðàâèëüíèé àòðèáóò: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: Ïîìèëêà ³í³ö³àë³çàö³¿ îá'ºêò³â ââîäó/âèâîäó"
-
-#~ msgid "failed to change directory"
-#~ msgstr "íå âäàëîñÿ çì³íèòè äèðåêòîð³þ"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "î÷³êóâàâñÿ 3-êîðòåæ ÿê ðåçóëüòàò imp.find_module(), àëå îòðèìàíî %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr "î÷³êóâàâñÿ 3-êîðòåæ ÿê ðåçóëüòàò imp.find_module(), àëå îòðèìàíî %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: imp.find_module ïîâåðíóëà êîðòåæ ç NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "íå ìîæíà çì³íèòè ô³êñîâàíèé ñëîâíèê"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "íå ìîæíà âñòàíîâèòè àòðèáóò %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "õåø-òàáëèöÿ çì³íèëàñÿ ï³ä ÷àñ ïåðåáèðàííÿ"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "î÷³êóâàëàñü ïîñë³äîâí³ñòü ðîçì³ðîì 2, àëå îòðèìàíî ïîñë³äîâí³ñòü ðîçì³ðó "
-#~ "%d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "ñïèñêîâèé êîíñòðóêòîð íå ïðèéìຠ³ìåíîâàí³ àðãóìåíòè"
-
-#~ msgid "list index out of range"
-#~ msgstr "³íäåêñ ñïèñêó çà ìåæàìè"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: íå âäàëîñÿ îòðèìàòè åëåìåíò ñïèñêó vim %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "íå âäàëîñÿ äîäàòè åëåìåíò äî ñïèñêó"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: íåìຠåëåìåíòà ñïèñêó vim %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: íå âäàëîñÿ äîäàòè åëåìåíò äî ñïèñêó"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "íå ìîæíà çì³íèòè ô³êñîâàíèé ñïèñîê"
-
-# msgstr "E428: "
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "áåç³ìåííî¿ ôóíêö³¿ %s íå ³ñíóº"
-
-# msgstr "E428: "
-#~ msgid "function %s does not exist"
-#~ msgstr "ôóíêö³¿ %s íå ³ñíóº"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "êîíñòðóêòîð ôóíêö³¿ íå ïðèéìຠ³ìåíîâàí³ àðãóìåíòè"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "íå âäàëîñÿ âèêîíàòè ôóíêö³þ %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "íå âäàëîñÿ ïåðåìêíóòè â³êíà"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "íå âäàëîñÿ ñêèíóòè ãëîáàëüíó îïö³þ %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "íå âäàëîñÿ ñêèíóòè îïö³þ %s, ÿêà íå ìຠãëîáàëüíîãî çíà÷åííÿ"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "ñïðîáà çâåðíåííÿ äî çíèùåíî¿ âêëàäêè"
-
-#~ msgid "no such tab page"
-#~ msgstr "òàêî¿ âêëàäêè íåìàº"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "ñïðîáà çâåðíóòèñÿ äî çíèùåíîãî â³êíà"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "àòðèáóò ëèøå äëÿ ÷èòàííÿ: áóôåð"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "êóðñîð çà ìåæàìè áóôåðà"
-
-#~ msgid "no such window"
-#~ msgstr "òàêîãî â³êíà íåìàº"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "ñïðîáà çâåðíåííÿ äî çíèùåíîãî áóôåðà"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "íå âäàëîñÿ ïåðåéìåíóâàòè áóôåð"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "íàçâîþ ì³òêè ìຠáóòè îäèí ñèìâîë"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "î÷³êóâàâñÿ îá’ºêò vim.Buffer, àëå îòðèìàíî %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "íå âäàëîñÿ ïåðåìêíóòèñÿ äî áóôåðà %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "î÷³êóâàâñÿ îá’ºêò vim.Window, àëå îòðèìàíî %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "íå âäàëîñÿ çíàéòè â³êíî ó ïîòî÷í³é âêëàäö³"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "íå ïåðåìêíóâñÿ äî âêàçàíîãî â³êíà"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "î÷³êóâàâñÿ îá’ºêò vim.TabPage, àëå îòðèìàíî %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "íå ïåðåìêíóâñÿ äî âêàçàíî¿ âêëàäêè"
-
-#~ msgid "failed to run the code"
-#~ msgstr "íå âäàëîñÿ âèêîíàòè êîä"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Eval íå ïîâåðíóâ ä³éñíèé îá’ºêò python"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: Íå âäàëîñÿ ïåðåòâîðèòè îá’ºêò python ó çíà÷åííÿ vim"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "íå âäàëîñÿ ïåðåòâîðèòè %s ó ñëîâíèê vim"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "íå âäàëîñÿ ïåðåòâîðèòè %s ó ñòðóêòóðó vim"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: ïåðåäàíî ïîñèëàííÿ NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "âíóòð³øíÿ ïîìèëêà: íåïðàâèëüíèé òèï çíà÷åííÿ"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Íå âäàëîñÿ âñòàíîâèòè îáðîáíèê øëÿõó: sys.path_hooks íå ñïèñîê\n"
-#~ "Âàì ñë³ä â÷èíèòè òàê:\n"
-#~ "- äîäàéòå vim.path_hook äî sys.path_hooks\n"
-#~ "- äîäàéòå vim.VIM_SPECIAL_PATH äî sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Íå âäàëîñÿ âñòàíîâèòè øëÿõ: sys.path íå ñïèñîê\n"
-#~ "Âàñ ñë³ä äîäàòè vim.VIM_SPECIAL_PATH äî sys.path"
diff --git a/src/nvim/po/uk.po b/src/nvim/po/uk.po
index eaa3a5bfa9..cff140508b 100644
--- a/src/nvim/po/uk.po
+++ b/src/nvim/po/uk.po
@@ -12,7 +12,7 @@ msgid ""
msgstr ""
"Project-Id-Version: vim 7.4\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
+"POT-Creation-Date: 2016-11-06 07:25+0200\n"
"PO-Revision-Date: 2010-06-18 21:53+0300\n"
"Last-Translator: Ðнатолій Сахнік <sakhnik@gmail.com>\n"
"Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
@@ -21,216 +21,341 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ—"
+msgid "Index out of bounds"
+msgstr "Ð†Ð½Ð´ÐµÐºÑ Ð¿Ð¾Ð·Ð° межами"
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: невідомий тип опції"
+msgid "Line index is too high"
+msgstr "Ðомер Ñ€Ñдка завеликий"
+
+msgid "Argument \"start\" is higher than \"end\""
+msgstr "Ðргумент «start» більший, ніж «end»"
+
+msgid "All items in the replacement array must be strings"
+msgstr "Ð’ÑÑ– елементи в маÑиві заміни мають бути текÑтовими"
+
+msgid "string cannot contain newlines"
+msgstr "текÑÑ‚ має бути одним Ñ€Ñдком"
+
+msgid "Failed to save undo information"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати інформацію Ð´Ð»Ñ ÑкаÑуваннÑ"
+
+msgid "Failed to delete line"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ Ñ€Ñдок"
+
+msgid "Index value is too high"
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ–Ð½Ð´ÐµÐºÑу завелике"
+
+msgid "Failed to replace line"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ Ñ€Ñдок"
+
+msgid "Failed to insert line"
+msgstr "Ðе вдалоÑÑ Ð²Ñтавити Ñ€Ñдок"
+
+msgid "Failed to rename buffer"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ буфер"
+
+msgid "Mark name must be a single character"
+msgstr "Ðазва позначки має бути одним Ñимволом"
+
+msgid "Invalid mark name"
+msgstr "Ðеправильна назва помітки"
+
+msgid "Line number outside range"
+msgstr "Ðомер Ñ€Ñдка поза межами"
+
+msgid "Column value outside range"
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ¸ поза межами"
+
+msgid "Keyboard interrupt"
+msgstr "Перервано з клавіатури"
+
+msgid "Key not found"
+msgstr "Ключ не знайдено"
+
+msgid "Dictionary is locked"
+msgstr "Словник заблоковано"
+
+msgid "Empty dictionary keys aren't allowed"
+msgstr "Ðе дозволено порожні ключі в Ñловнику"
+
+msgid "Key length is too high"
+msgstr "Довжина ключа завелика"
+
+#, c-format
+msgid "Key \"%s\" doesn't exist"
+msgstr "Ключ «%s» не Ñ–Ñнує"
+
+msgid "Empty option name"
+msgstr "ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° опції"
+
+#, c-format
+msgid "Invalid option name \"%s\""
+msgstr "Ðеправильна назва опції «%s»"
+
+#, c-format
+msgid "Unable to get value for option \"%s\""
+msgstr "Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð¿Ñ†Ñ–Ñ— «%s»"
+
+#, c-format
+msgid "Unknown type for option \"%s\""
+msgstr "Ðевідомий тип Ð´Ð»Ñ Ð¾Ð¿Ñ†Ñ–Ñ— «%s»"
+
+#, c-format
+msgid "Unable to unset option \"%s\""
+msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ опцію «%s»"
+
+#, c-format
+msgid "Cannot unset option \"%s\" because it doesn't have a global value"
+msgstr "Ðе вдалоÑÑ Ñкинути опцію «%s», тому що в неї немає глобального значеннÑ"
+
+#, c-format
+msgid "Option \"%s\" requires a boolean value"
+msgstr "ÐžÐ¿Ñ†Ñ–Ñ Â«%s» потребує логічне значеннÑ"
+
+#, c-format
+msgid "Option \"%s\" requires an integer value"
+msgstr "ÐžÐ¿Ñ†Ñ–Ñ Â«%s» вимагає ціле значеннÑ"
+
+#, c-format
+msgid "Value for option \"%s\" is outside range"
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¾Ð¿Ñ†Ñ–Ñ— «%s» поза межами"
+
+#, c-format
+msgid "Option \"%s\" requires a string value"
+msgstr "ÐžÐ¿Ñ†Ñ–Ñ Â«%s» вимагає Ñ€Ñдкове значеннÑ"
+
+msgid "Invalid buffer id"
+msgstr "Ðекоректний ід. буфера"
+
+msgid "Invalid window id"
+msgstr "Ðекоректний ід. вікна"
+
+msgid "Invalid tabpage id"
+msgstr "Ðекоректний ід. вкладки"
+
+msgid "Integer value outside range"
+msgstr "Ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð·Ð° межами"
+
+msgid "Problem while switching windows"
+msgstr "Ðевдача при перемиканні вікон"
+
+msgid "UI already attached for channel"
+msgstr "До каналу вже приєднано Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача"
+
+msgid "Expected width > 0 and height > 0"
+msgstr "ОчікуєтьÑÑ ÑˆÐ¸Ñ€Ð¸Ð½Ð° > 0 Ñ– виÑота > 0"
+
+msgid "UI is not attached for channel"
+msgstr "Ð†Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача не під’єднано до каналу"
+
+msgid "rgb must be a Boolean"
+msgstr "rgb має бути Boolean"
+
+msgid "popupmenu_external must be a Boolean"
+msgstr "popupmenu_external має бути Boolean"
+
+msgid "No such ui option"
+msgstr "Ðемає такої опції інтерфейÑу кориÑтувача"
+
+msgid "Failed to evaluate expression"
+msgstr "Ðе вдалоÑÑ Ð¾Ð±Ñ‡Ð¸Ñлити вираз"
+
+msgid "Function called with too many arguments."
+msgstr "Функцію викликано із завеликою кількіÑтю аргументів."
+
+msgid "Error calling function."
+msgstr "Помилка виклику функції."
+
+msgid "String length is too high"
+msgstr "Довжина текÑту завелика"
+
+msgid "Directory string is too long"
+msgstr "Ðазва каталогу завелика"
+
+msgid "Failed to change directory"
+msgstr "Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ каталог"
+
+#, c-format
+msgid "Failed to switch to buffer %d"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐºÐ½ÑƒÑ‚Ð¸ÑÑ Ð´Ð¾ буфера %d"
+
+#, c-format
+msgid "Failed to switch to window %d"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐºÐ½ÑƒÑ‚Ð¸ÑÑ Ð´Ð¾ вікна %d"
+
+#, c-format
+msgid "Failed to switch to tabpage %d"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐºÐ½ÑƒÑ‚Ð¸ÑÑ Ð´Ð¾ вкладки %d"
+
+msgid "All items in calls array must be arrays"
+msgstr "Ð’ÑÑ– елементи маÑиву calls мають бути маÑивами"
+
+msgid "All items in calls array must be arrays of size 2"
+msgstr "Ð’ÑÑ– елементи в маÑиві calls мають бути маÑивами довжиною 2"
+
+msgid "name must be String"
+msgstr "Ðазва має бути String"
+
+msgid "args must be Array"
+msgstr "args має бути Array"
+
+msgid "Argument \"pos\" must be a [row, col] array"
+msgstr "Ðргумент «pos» має бути маÑивом [Ñ€Ñд, ÑÑ‚]"
+
+msgid "Cursor position outside buffer"
+msgstr "ÐŸÐ¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ ÐºÑƒÑ€Ñора поза буфером"
+
+msgid "Height value outside range"
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñоти поза межами"
+
+msgid "Width value outside range"
+msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÑˆÐ¸Ñ€Ð¸Ð½Ð¸ поза межами"
-#: ../buffer.c:92
msgid "[Location List]"
msgstr "[СпиÑок міÑць]"
-#: ../buffer.c:93
msgid "[Quickfix List]"
msgstr "[СпиÑок виправлень]"
-#: ../buffer.c:94
msgid "E855: Autocommands caused command to abort"
msgstr "E855: Ðвтокоманди призвели до ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸"
-#: ../buffer.c:135
msgid "E82: Cannot allocate any buffer, exiting..."
msgstr "E82: Ðемає можливоÑті розміÑтити хоч один буфер, Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ€Ð¾Ð±Ð¾Ñ‚Ð¸..."
-#: ../buffer.c:138
msgid "E83: Cannot allocate buffer, using other one..."
msgstr "E83: Ðемає можливоÑті розміÑтити буфер, буде викориÑтано інший..."
-#: ../buffer.c:763
msgid "E515: No buffers were unloaded"
msgstr "E515: Жоден з буферів не був вивантажений"
-#: ../buffer.c:765
msgid "E516: No buffers were deleted"
msgstr "E516: Жоден з буферів не знищено"
-#: ../buffer.c:767
msgid "E517: No buffers were wiped out"
msgstr "E517: Жоден з буферів не витерто"
-#: ../buffer.c:772
msgid "1 buffer unloaded"
msgstr "Вивантажено один буфер"
-#: ../buffer.c:774
#, c-format
msgid "%d buffers unloaded"
msgstr "Вивантажено %d буфери(ів)"
-#: ../buffer.c:777
msgid "1 buffer deleted"
msgstr "Знищено один буфер"
-#: ../buffer.c:779
#, c-format
msgid "%d buffers deleted"
msgstr "Знищено %d буфери(ів)"
-#: ../buffer.c:782
msgid "1 buffer wiped out"
msgstr "Витерто один буфер"
-#: ../buffer.c:784
#, c-format
msgid "%d buffers wiped out"
msgstr "Витерто %d буфери(ів)"
-#: ../buffer.c:806
msgid "E90: Cannot unload last buffer"
msgstr "E90: Ðе можу вивантажити оÑтанній буфер"
-#: ../buffer.c:874
msgid "E84: No modified buffer found"
msgstr "E84: Жоден буфер не змінено"
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
msgid "E85: There is no listed buffer"
msgstr "E85: У ÑпиÑку немає буферів"
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: Буфера %<PRId64> немає"
-
-#: ../buffer.c:915
msgid "E87: Cannot go beyond last buffer"
msgstr "E87: Це вже оÑтанній буфер"
-#: ../buffer.c:917
msgid "E88: Cannot go before first buffer"
msgstr "E88: Це вже найперший буфер"
-#: ../buffer.c:945
+#, c-format
+msgid "E89: %s will be killed(add ! to override)"
+msgstr "E89: «%s» буде вбито(! щоб не зважати)"
+
#, c-format
msgid ""
"E89: No write since last change for buffer %<PRId64> (add ! to override)"
msgstr "E89: Буфер %<PRId64> має зміни (! щоб не зважати)"
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
msgid "W14: Warning: List of file names overflow"
msgstr "W14: Обережно: СпиÑок назв файлів переповнено"
-#: ../buffer.c:1555 ../quickfix.c:3361
#, c-format
msgid "E92: Buffer %<PRId64> not found"
msgstr "E92: Буфер %<PRId64> не знайдено"
-#: ../buffer.c:1798
#, c-format
msgid "E93: More than one match for %s"
msgstr "E93: Знайдено кілька збігів з %s"
-#: ../buffer.c:1800
#, c-format
msgid "E94: No matching buffer for %s"
msgstr "E94: Ðе знайдено буфер, Ñхожий на %s"
-#: ../buffer.c:2161
#, c-format
msgid "line %<PRId64>"
msgstr "Ñ€Ñдок %<PRId64>"
-#: ../buffer.c:2233
msgid "E95: Buffer with this name already exists"
msgstr "E95: Буфер з такою назвою вже Ñ–Ñнує"
-#: ../buffer.c:2498
msgid " [Modified]"
msgstr " [Змінено]"
-#: ../buffer.c:2501
msgid "[Not edited]"
msgstr "[Ðе редаговано]"
-#: ../buffer.c:2504
msgid "[New file]"
msgstr "[Ðовий файл]"
-#: ../buffer.c:2505
msgid "[Read errors]"
msgstr "[Помилки читаннÑ]"
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
msgid "[RO]"
msgstr "[RO]"
-#: ../buffer.c:2507 ../fileio.c:1807
msgid "[readonly]"
msgstr "[лише читати]"
-#: ../buffer.c:2524
#, c-format
msgid "1 line --%d%%--"
msgstr "один Ñ€Ñдок --%d%%--"
-#: ../buffer.c:2526
#, c-format
msgid "%<PRId64> lines --%d%%--"
msgstr "%<PRId64> Ñ€Ñдки(ів) --%d%%--"
-#: ../buffer.c:2530
#, c-format
msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
msgstr "Ñ€Ñдок %<PRId64> з %<PRId64> --%d%%-- колонка "
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
msgid "[No Name]"
msgstr "[Без назви]"
-#. must be a help buffer
-#: ../buffer.c:2667
msgid "help"
msgstr "допомога"
-#: ../buffer.c:3225 ../screen.c:4883
msgid "[Help]"
msgstr "[Допомога]"
-#: ../buffer.c:3254 ../screen.c:4887
msgid "[Preview]"
msgstr "[ПереглÑд]"
-#: ../buffer.c:3528
msgid "All"
msgstr "УÑе"
-#: ../buffer.c:3528
msgid "Bot"
msgstr "Знизу"
-#: ../buffer.c:3531
msgid "Top"
msgstr "Вгорі"
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# СпиÑок буферів:\n"
-
-#: ../buffer.c:4289
msgid "[Scratch]"
msgstr "[З нулÑ]"
-#: ../buffer.c:4529
msgid ""
"\n"
"--- Signs ---"
@@ -238,809 +363,666 @@ msgstr ""
"\n"
"--- Позначки ---"
-#: ../buffer.c:4538
#, c-format
msgid "Signs for %s:"
msgstr "Позначки Ð´Ð»Ñ %s:"
-#: ../buffer.c:4543
#, c-format
msgid " line=%<PRId64> id=%d name=%s"
msgstr " Ñ€Ñдок=%<PRId64> id=%d назва=%s"
-#: ../cursor_shape.c:68
msgid "E545: Missing colon"
msgstr "E545: Пропущено двокрапку"
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
msgid "E546: Illegal mode"
msgstr "E546: Ðеправильний режим"
-#: ../cursor_shape.c:134
msgid "E548: digit expected"
msgstr "E548: Потрібна цифра"
-#: ../cursor_shape.c:138
msgid "E549: Illegal percentage"
msgstr "E549: Ðеправильний відÑоток"
-#: ../diff.c:146
#, c-format
msgid "E96: Can not diff more than %<PRId64> buffers"
msgstr "E96: Ðе можна порівнювати понад %<PRId64> буфери(ів)"
-#: ../diff.c:753
msgid "E810: Cannot read or write temp files"
msgstr "E810: Ðе можна читати чи запиÑувати тимчаÑові файли"
-#: ../diff.c:755
msgid "E97: Cannot create diffs"
msgstr "E97: Ðе вдалоÑÑ Ñтворити порівнÑннÑ"
-#: ../diff.c:966
msgid "E816: Cannot read patch output"
msgstr "E816: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ результат patch"
-#: ../diff.c:1220
msgid "E98: Cannot read diff output"
msgstr "E98: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ результат diff"
-#: ../diff.c:2081
msgid "E99: Current buffer is not in diff mode"
msgstr "E99: Цей буфер не в режимі порівнÑннÑ"
-#: ../diff.c:2100
msgid "E793: No other buffer in diff mode is modifiable"
msgstr "E793: Ðемає більше модифіковних буферів в режимі порівнÑннÑ"
-#: ../diff.c:2102
msgid "E100: No other buffer in diff mode"
msgstr "E100: Ðемає інших буферів в режимі порівнÑннÑ"
-#: ../diff.c:2112
msgid "E101: More than two buffers in diff mode, don't know which one to use"
msgstr ""
"E101: Понад два буфери у режимі порівнÑннÑ, не зрозуміло, котрий із них "
"викориÑтати"
-#: ../diff.c:2141
#, c-format
msgid "E102: Can't find buffer \"%s\""
msgstr "E102: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ буфер «%s»"
-#: ../diff.c:2152
#, c-format
msgid "E103: Buffer \"%s\" is not in diff mode"
msgstr "E103: Буфер «%s» не в режимі порівнÑннÑ"
-#: ../diff.c:2193
msgid "E787: Buffer changed unexpectedly"
msgstr "E787: Буфер неÑподівано змінивÑÑ"
-#: ../digraph.c:1598
msgid "E104: Escape not allowed in digraph"
msgstr "E104: У диграфах не може міÑтитиÑÑ escape"
-#: ../digraph.c:1760
msgid "E544: Keymap file not found"
msgstr "E544: Ðе знайдено файл розкладки"
-#: ../digraph.c:1785
msgid "E105: Using :loadkeymap not in a sourced file"
msgstr "E105: :loadkeymap викориÑтано не у файлі команд"
-#: ../digraph.c:1821
msgid "E791: Empty keymap entry"
msgstr "E791: Елемент розкладки порожній"
-#: ../edit.c:82
msgid " Keyword completion (^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð¾Ð²Ð¸Ñ… Ñлів (^N^P)"
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
msgstr " Режим ^X (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-#: ../edit.c:85
msgid " Whole line completion (^L^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÑƒÑього Ñ€Ñдка (^L^N^P)"
-#: ../edit.c:86
msgid " File name completion (^F^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð½Ð°Ð·Ð²Ð¸ файлу (^F^N^P)"
-#: ../edit.c:87
msgid " Tag completion (^]^N^P)"
-msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‚ÐµÒ‘Ñ–Ð² (^]^N^P)"
+msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· міток (^]^N^P)"
-#: ../edit.c:88
msgid " Path pattern completion (^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÑˆÐ»Ñху за зразком (^N^P)"
-#: ../edit.c:89
msgid " Definition completion (^D^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ (^D^N^P)"
-#: ../edit.c:91
msgid " Dictionary completion (^K^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ñ– Ñловника (^K^N^P)"
-#: ../edit.c:92
msgid " Thesaurus completion (^T^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð· тезауруÑу (^T^N^P)"
-#: ../edit.c:93
msgid " Command-line completion (^V^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´ (^V^N^P)"
-#: ../edit.c:94
msgid " User defined completion (^U^N^P)"
msgstr " КориÑтувацьке Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (^U^N^P)"
-#: ../edit.c:95
msgid " Omni completion (^O^N^P)"
msgstr " Кмітливе Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ (^O^N^P)"
-#: ../edit.c:96
msgid " Spelling suggestion (s^N^P)"
msgstr " Орфографічна підказка (s^N^P)"
-#: ../edit.c:97
msgid " Keyword Local completion (^N^P)"
msgstr " Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð¼Ñ–Ñцевих ключових Ñлів (^N^P)"
-#: ../edit.c:100
msgid "Hit end of paragraph"
msgstr "ТрапивÑÑ ÐºÑ–Ð½ÐµÑ†ÑŒ параграфа"
-# msgstr "E443: "
-#: ../edit.c:101
msgid "E839: Completion function changed window"
msgstr "E839: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½Ð¸Ð»Ð° вікно"
-#: ../edit.c:102
msgid "E840: Completion function deleted text"
msgstr "E840: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð½Ð¸Ñ‰Ð¸Ð»Ð° текÑÑ‚"
-#: ../edit.c:1847
msgid "'dictionary' option is empty"
msgstr "ÐžÐ¿Ñ†Ñ–Ñ 'dictionary' порожнÑ"
-#: ../edit.c:1848
msgid "'thesaurus' option is empty"
msgstr "ÐžÐ¿Ñ†Ñ–Ñ 'thesaurus' порожнÑ"
-#: ../edit.c:2655
#, c-format
msgid "Scanning dictionary: %s"
msgstr "СкануєтьÑÑ Ñловник: %s"
-#: ../edit.c:3079
msgid " (insert) Scroll (^E/^Y)"
msgstr " (вÑтавка) Прогорнути (^E/^Y)"
-#: ../edit.c:3081
msgid " (replace) Scroll (^E/^Y)"
msgstr " (заміна) Прогорнути (^E/^Y)"
-#: ../edit.c:3587
#, c-format
msgid "Scanning: %s"
msgstr "Пошук у: %s"
-#: ../edit.c:3614
msgid "Scanning tags."
msgstr "Пошук Ñеред теґів."
-#: ../edit.c:4519
msgid " Adding"
msgstr " ДодаєтьÑÑ"
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
msgid "-- Searching..."
msgstr "-- Пошук..."
-#: ../edit.c:4618
msgid "Back at original"
msgstr "Початковий варіант"
-#: ../edit.c:4621
msgid "Word from other line"
msgstr "Слово з іншого Ñ€Ñдка"
-#: ../edit.c:4624
msgid "The only match"
msgstr "Єдиний збіг"
-#: ../edit.c:4680
#, c-format
msgid "match %d of %d"
msgstr "збіг %d з %d"
-#: ../edit.c:4684
#, c-format
msgid "match %d"
msgstr "збіг %d"
-# msgstr "E17: "
-#: ../eval.c:137
msgid "E18: Unexpected characters in :let"
msgstr "E18: Ðеочікувані Ñимволи у :let"
-#: ../eval.c:138
#, c-format
msgid "E684: list index out of range: %<PRId64>"
msgstr "E684: Ð†Ð½Ð´ÐµÐºÑ ÑпиÑку поза межами: %<PRId64>"
-#: ../eval.c:139
#, c-format
msgid "E121: Undefined variable: %s"
msgstr "E121: Ðевизначена змінна: %s"
-#: ../eval.c:140
msgid "E111: Missing ']'"
msgstr "E111: Бракує ']'"
-#: ../eval.c:141
#, c-format
msgid "E686: Argument of %s must be a List"
msgstr "E686: Ðргумент у %s має бути ÑпиÑком"
-#: ../eval.c:143
#, c-format
msgid "E712: Argument of %s must be a List or Dictionary"
msgstr "E712: Ðргумент у %s має бути ÑпиÑком чи Ñловником"
-#: ../eval.c:144
msgid "E713: Cannot use empty key for Dictionary"
msgstr "E713: Ключ Ñловника не може бути порожнім"
-# msgstr "E396: "
-#: ../eval.c:145
msgid "E714: List required"
msgstr "E714: Потрібен ÑпиÑок"
-#: ../eval.c:146
msgid "E715: Dictionary required"
msgstr "E715: Потрібен Ñловник"
-#: ../eval.c:147
+msgid "E928: String required"
+msgstr "E928: Потрібен String"
+
#, c-format
msgid "E118: Too many arguments for function: %s"
msgstr "E118: Забагато аргументів Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ—: %s"
-#: ../eval.c:148
#, c-format
msgid "E716: Key not present in Dictionary: %s"
msgstr "E716: Ðемає такого ключа у Ñловнику: %s"
-#: ../eval.c:150
#, c-format
msgid "E122: Function %s already exists, add ! to replace it"
msgstr "E122: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ %s уже Ñ–Ñнує, ! щоб замінити"
-#: ../eval.c:151
msgid "E717: Dictionary entry already exists"
msgstr "E717: Ð—Ð°Ð¿Ð¸Ñ Ñƒ Ñловнику вже Ñ–Ñнує"
-#: ../eval.c:152
msgid "E718: Funcref required"
msgstr "E718: Треба поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° функцію"
-#: ../eval.c:153
msgid "E719: Cannot use [:] with a Dictionary"
msgstr "E719: Ðе можна викориÑтати [:] зі Ñловником"
-#: ../eval.c:154
#, c-format
msgid "E734: Wrong variable type for %s="
msgstr "E734: Ðеправильний тип змінної Ð´Ð»Ñ %s="
-#: ../eval.c:155
#, c-format
msgid "E130: Unknown function: %s"
msgstr "E130: Ðевідома функціÑ: %s"
-#: ../eval.c:156
#, c-format
msgid "E461: Illegal variable name: %s"
msgstr "E461: ÐеприпуÑтима назва змінної: %s"
-# msgstr "E373: "
-#: ../eval.c:157
msgid "E806: using Float as a String"
msgstr "E806: Float вжито Ñк String"
-#: ../eval.c:1830
msgid "E687: Less targets than List items"
msgstr "E687: Цілей менше, ніж елементів ÑпиÑку"
-#: ../eval.c:1834
msgid "E688: More targets than List items"
msgstr "E688: Цілей більше, ніж елементів ÑпиÑку"
-#: ../eval.c:1906
msgid "Double ; in list of variables"
msgstr "Друга ; у ÑпиÑку змінних"
-# msgstr "E235: "
-#: ../eval.c:2078
#, c-format
msgid "E738: Can't list variables for %s"
msgstr "E738: Ðе можна перерахувати змінні у %s"
-#: ../eval.c:2391
msgid "E689: Can only index a List or Dictionary"
msgstr "E689: ІндекÑний доÑтуп може бути тільки до ÑпиÑку чи Ñловника"
-#: ../eval.c:2396
msgid "E708: [:] must come last"
msgstr "E708: [:] має бути оÑтанньою"
-#: ../eval.c:2439
msgid "E709: [:] requires a List value"
msgstr "E709: [:] вимагає ÑпиÑок"
-#: ../eval.c:2674
msgid "E710: List value has more items than target"
msgstr "E710: СпиÑок має більше елементів, ніж ціль"
-#: ../eval.c:2678
msgid "E711: List value has not enough items"
msgstr "E711: СпиÑок має недоÑтатньо елементів"
-#: ../eval.c:2867
msgid "E690: Missing \"in\" after :for"
msgstr "E690: Пропущено «in» піÑÐ»Ñ :for"
-#: ../eval.c:3063
#, c-format
msgid "E107: Missing parentheses: %s"
msgstr "E107: Пропущено дужки: %s"
-#: ../eval.c:3263
#, c-format
msgid "E108: No such variable: \"%s\""
msgstr "E108: Змінної немає: «%s»"
-#: ../eval.c:3333
msgid "E743: variable nested too deep for (un)lock"
msgstr "E743: Змінна має забагато вкладень щоб бути за-/відкритою."
-#: ../eval.c:3630
msgid "E109: Missing ':' after '?'"
msgstr "E109: Бракує ':' піÑÐ»Ñ '?'"
-#: ../eval.c:3893
msgid "E691: Can only compare List with List"
msgstr "E691: СпиÑок можна порівнÑти тільки зі ÑпиÑком"
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
+msgid "E692: Invalid operation for List"
msgstr "E692: Ðекоректна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ð°Ð´ ÑпиÑком"
-#: ../eval.c:3915
msgid "E735: Can only compare Dictionary with Dictionary"
msgstr "E735: Словник можна порівнÑти тільки із Ñловником"
-#: ../eval.c:3917
msgid "E736: Invalid operation for Dictionary"
msgstr "E736: Ðекоректна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ð°Ð´ Ñловником"
-#: ../eval.c:3932
msgid "E693: Can only compare Funcref with Funcref"
msgstr "E693: Функцію можна порівнÑти тільки з функцією"
-#: ../eval.c:3934
msgid "E694: Invalid operation for Funcrefs"
msgstr "E694: Ðекоректна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ð°Ð´ функцією"
-#: ../eval.c:4277
msgid "E804: Cannot use '%' with Float"
msgstr "E804: Ðе можна виконати '%' над Float"
-#: ../eval.c:4478
msgid "E110: Missing ')'"
msgstr "E110: Пропущено ')'"
-#: ../eval.c:4609
msgid "E695: Cannot index a Funcref"
msgstr "E695: Ð¤ÑƒÐ½ÐºÑ†Ñ–Ñ Ð½Ðµ має індекÑації"
-#: ../eval.c:4839
+msgid "E909: Cannot index a special variable"
+msgstr "E909: Спеціальна змінна не має індекÑації"
+
#, c-format
msgid "E112: Option name missing: %s"
msgstr "E112: Бракує назви опції: %s"
-#: ../eval.c:4855
#, c-format
msgid "E113: Unknown option: %s"
msgstr "E113: Ðевідома опціÑ: %s"
-#: ../eval.c:4904
#, c-format
msgid "E114: Missing quote: %s"
msgstr "E114: Бракує лапки: %s"
-#: ../eval.c:5020
#, c-format
msgid "E115: Missing quote: %s"
msgstr "E115: Бракує лапки: %s"
-# msgstr "E404: "
-#: ../eval.c:5084
#, c-format
msgid "E696: Missing comma in List: %s"
msgstr "E696: Бракує коми у ÑпиÑку: %s"
-#: ../eval.c:5091
#, c-format
msgid "E697: Missing end of List ']': %s"
msgstr "E697: Ðемає кінцівки ÑпиÑку ']': %s"
-# msgstr "E235: "
-#: ../eval.c:6475
+msgid "Not enough memory to set references, garbage collection aborted!"
+msgstr "ÐедоÑтатньо пам’Ñті Ð´Ð»Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñилань, Ð·Ð±Ð¸Ñ€Ð°Ð½Ð½Ñ ÑÐ¼Ñ–Ñ‚Ñ‚Ñ Ð¿Ñ€Ð¸Ð¿Ð¸Ð½ÐµÐ½Ð¾!"
+
+msgid "Argument is not a function or function name"
+msgstr "Ðргумент не Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ñ‡Ð¸ назва функції"
+
+#, c-format
+msgid "Function %s doesn't exist"
+msgstr "Функції «%s» немає"
+
#, c-format
msgid "E720: Missing colon in Dictionary: %s"
msgstr "E720: Бракує двокрапки у Ñловнику: %s"
-#: ../eval.c:6499
#, c-format
msgid "E721: Duplicate key in Dictionary: \"%s\""
msgstr "E721: ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° в Ñловнику: «%s»"
-# msgstr "E235: "
-#: ../eval.c:6517
#, c-format
msgid "E722: Missing comma in Dictionary: %s"
msgstr "E722: Бракує коми у Ñловнику: %s"
-#: ../eval.c:6524
#, c-format
msgid "E723: Missing end of Dictionary '}': %s"
msgstr "E723: Ðемає кінцівки Ñловника '}': %s"
-# msgstr "E21: "
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: У змінній забагато вкладень щоб її показати"
-
-#: ../eval.c:7188
#, c-format
msgid "E740: Too many arguments for function %s"
msgstr "E740: Забагато аргументів Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— %s"
-#: ../eval.c:7190
#, c-format
msgid "E116: Invalid arguments for function %s"
msgstr "E116: Ðеправильні аргументи функції %s"
-#: ../eval.c:7377
#, c-format
msgid "E117: Unknown function: %s"
msgstr "E117: Ðевідома функціÑ: %s"
-#: ../eval.c:7383
#, c-format
msgid "E119: Not enough arguments for function: %s"
msgstr "E119: Замало аргументів Ð´Ð»Ñ Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ— %s"
-#: ../eval.c:7387
#, c-format
msgid "E120: Using <SID> not in a script context: %s"
msgstr "E120: <SID> викориÑтовуєтьÑÑ Ð½Ðµ у контекÑті Ñкрипту: %s"
-#: ../eval.c:7391
#, c-format
msgid "E725: Calling dict function without Dictionary: %s"
msgstr "E725: Виклик dict-функції без Ñловника: %s"
-#: ../eval.c:7453
msgid "E808: Number or Float required"
msgstr "E808: Треба вказати Number чи Float"
-# msgstr "E14: "
-#: ../eval.c:7503
+#, c-format
+msgid "Error converting the call result: %s"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ результат виклику: %s"
+
msgid "add() argument"
msgstr "аргумент add()"
-#: ../eval.c:7907
msgid "E699: Too many arguments"
msgstr "E699: Забагато аргументів"
-# msgstr "E327: "
-#: ../eval.c:8073
msgid "E785: complete() can only be used in Insert mode"
msgstr "E785: complete() можна вживати тільки в режимі вÑтавки"
-#: ../eval.c:8156
msgid "&Ok"
msgstr "&O:Гаразд"
-# msgstr "E226: "
-#: ../eval.c:8676
+msgid "extend() argument"
+msgstr "аргумент extend()"
+
#, c-format
msgid "E737: Key already exists: %s"
msgstr "E737: Ключ вже Ñ–Ñнує: %s"
-# msgstr "E14: "
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr "аргумент extend()"
-
-# msgstr "E14: "
-#: ../eval.c:8915
msgid "map() argument"
msgstr "аргумент map()"
-# msgstr "E14: "
-#: ../eval.c:8916
msgid "filter() argument"
msgstr "аргумент filter()"
-#: ../eval.c:9229
#, c-format
msgid "+-%s%3ld lines: "
msgstr "+-%s%3ld Ñ€Ñдків: "
-#: ../eval.c:9291
#, c-format
msgid "E700: Unknown function: %s"
msgstr "E700: Ðевідома функціÑ: %s"
-#: ../eval.c:10729
+msgid "E5000: Cannot find tab number."
+msgstr "E5000: Ðе можна знайти номер вкладки."
+
+msgid "E5001: Higher scope cannot be -1 if lower scope is >= 0."
+msgstr "E5001: Вища облаÑть не може бути -1, Ñкщо нижча облаÑть >= 0."
+
+msgid "E5002: Cannot find window number."
+msgstr "E5002: Ðеможливо знайти номер вікна."
+
+msgid "5000: Cannot find tab number."
+msgstr "5000: Ðе можна знайти номер вкладки."
+
msgid "called inputrestore() more often than inputsave()"
msgstr "Виклики до inputrestore() чаÑтіше, ніж до inputsave()"
-# msgstr "E14: "
-#: ../eval.c:10771
msgid "insert() argument"
msgstr "аргумент insert()"
-# msgstr "E406: "
-#: ../eval.c:10841
msgid "E786: Range not allowed"
msgstr "E786: Інтервал не дозволено"
-# msgstr "E177: "
-#: ../eval.c:11140
+msgid "Invalid stream on rpc job, use jobclose(id, 'rpc')"
+msgstr "Ðекоректний потік на завданні rpc, вживайте jobclose(id, 'rpc')"
+
+msgid "Invalid job stream: Not an rpc job"
+msgstr "Ðекоректний потік завданнÑ: Ðе Ñ” завданнÑм rpc"
+
+#, c-format
+msgid "Invalid job stream \"%s\""
+msgstr "Ðекоректний потік Ð·Ð°Ð²Ð´Ð°Ð½Ð½Ñ Â«%s»"
+
+msgid "Can't send data to the job: stdin is closed"
+msgstr "Ðеможливо надіÑлати дані завданню: вхідний потік закрито"
+
+msgid "Can't send raw data to rpc channel"
+msgstr "Ðеможливо надіÑлати дані у канал завданнÑ"
+
+msgid "Argument vector must have at least one item"
+msgstr "Вектор аргументів має мати щонайменше один елемент"
+
+msgid "E474: Failed to convert list to string"
+msgstr "E474: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ ÑпиÑок у текÑÑ‚"
+
+#, c-format
+msgid "E474: Failed to parse %.*s"
+msgstr "E474: Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ %.*s"
+
msgid "E701: Invalid type for len()"
msgstr "E701: Ðекоректний тип Ð´Ð»Ñ len()"
-#: ../eval.c:11980
+#, c-format
+msgid "msgpackdump() argument, index %i"
+msgstr "аргумент msgpackdump(), Ñ–Ð½Ð´ÐµÐºÑ %i"
+
msgid "E726: Stride is zero"
msgstr "E726: Крок нульовий"
-#: ../eval.c:11982
msgid "E727: Start past end"
msgstr "E727: Початок за кінцем"
-#: ../eval.c:12024 ../eval.c:15297
msgid "<empty>"
msgstr "<нічого>"
-# msgstr "E14: "
-#: ../eval.c:12282
msgid "remove() argument"
msgstr "аргумент remove()"
-#: ../eval.c:12466
msgid "E655: Too many symbolic links (cycle?)"
msgstr "E655: Забагато Ñимвольних поÑилань (цикл?)"
-# msgstr "E14: "
-#: ../eval.c:12593
msgid "reverse() argument"
msgstr "аргумент reverse()"
-# msgstr "E14: "
-#: ../eval.c:13721
msgid "sort() argument"
msgstr "аргумент sort()"
-# msgstr "E14: "
-#: ../eval.c:13721
-#, fuzzy
msgid "uniq() argument"
-msgstr "аргумент add()"
+msgstr "аргумент uniq()"
-# msgstr "E364: "
-#: ../eval.c:13776
msgid "E702: Sort compare function failed"
msgstr "E702: Помилка у функції порівнÑннÑ"
-# msgstr "E364: "
-#: ../eval.c:13806
-#, fuzzy
msgid "E882: Uniq compare function failed"
-msgstr "E702: Помилка у функції порівнÑннÑ"
+msgstr "E882: Помилка у функції порівнÑÐ½Ð½Ñ uniq"
-#: ../eval.c:14085
msgid "(Invalid)"
msgstr "(Ðеможливо)"
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати тимчаÑовий файл"
+msgid "Can only call this function in an unmodified buffer"
+msgstr "Цю функцію можна викликати тільки у незміненому буфері"
-#: ../eval.c:16159
msgid "E805: Using a Float as a Number"
msgstr "E805: Float вжито Ñк Number"
-#: ../eval.c:16162
msgid "E703: Using a Funcref as a Number"
msgstr "E703: Funcref вжито Ñк Number"
-#: ../eval.c:16170
msgid "E745: Using a List as a Number"
msgstr "E745: List вжито Ñк Number"
-#: ../eval.c:16173
msgid "E728: Using a Dictionary as a Number"
msgstr "E728: Dictionary вжито Ñк Number"
-#: ../eval.c:16259
+msgid "E891: Using a Funcref as a Float"
+msgstr "E891: Funcref вжито Ñк Float"
+
+msgid "E892: Using a String as a Float"
+msgstr "E892: String вжито Ñк Float"
+
+msgid "E893: Using a List as a Float"
+msgstr "E893: List вжито Ñк Float"
+
+msgid "E894: Using a Dictionary as a Float"
+msgstr "E894: Dictionary вжито Ñк Float"
+
msgid "E729: using Funcref as a String"
msgstr "E729: Funcref вжито Ñк String"
-# msgstr "E373: "
-#: ../eval.c:16262
msgid "E730: using List as a String"
msgstr "E730: List вжито Ñк String"
-#: ../eval.c:16265
msgid "E731: using Dictionary as a String"
msgstr "E731: Dictionary вжито Ñк String"
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: Ðеправильний тип змінної: %s"
+msgid "E908: using an invalid value as a String"
+msgstr "E908: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¶Ð¸Ñ‚Ð¾ Ñк String"
-#: ../eval.c:16705
#, c-format
msgid "E795: Cannot delete variable %s"
msgstr "E795: Ðе можна знищити змінну %s"
-#: ../eval.c:16724
#, c-format
msgid "E704: Funcref variable name must start with a capital: %s"
msgstr "E704: Ðазва змінної Funcref має починатиÑÑ Ð· великої літери: %s"
-#: ../eval.c:16732
#, c-format
msgid "E705: Variable name conflicts with existing function: %s"
msgstr "E705: Ðазва змінної Ñпівпадає з Ñ–Ñнуючою функцією: %s"
-#: ../eval.c:16763
#, c-format
msgid "E741: Value is locked: %s"
msgstr "E741: Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ñ…Ð¸Ñ‰ÐµÐ½Ðµ: %s"
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
msgid "Unknown"
msgstr "Ðевідомо"
-#: ../eval.c:16768
#, c-format
msgid "E742: Cannot change value of %s"
msgstr "E742: Ðе можна змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s"
-#: ../eval.c:16838
msgid "E698: variable nested too deep for making a copy"
msgstr "E698: Змінна вкладена занадто глибоко щоб зробити її копію"
-#: ../eval.c:17249
#, c-format
msgid "E123: Undefined function: %s"
msgstr "E123: Ðевизначена функціÑ: %s"
-#: ../eval.c:17260
#, c-format
msgid "E124: Missing '(': %s"
msgstr "E124: Бракує '(': %s"
-#: ../eval.c:17293
msgid "E862: Cannot use g: here"
msgstr "E862: Тут не можна викориÑтати g:"
-#: ../eval.c:17312
#, c-format
msgid "E125: Illegal argument: %s"
msgstr "E125: Ðедозволений аргумент: %s"
-#: ../eval.c:17323
#, c-format
msgid "E853: Duplicate argument name: %s"
msgstr "E853: Ðазва аргументу повторюєтьÑÑ: %s"
-#: ../eval.c:17416
msgid "E126: Missing :endfunction"
msgstr "E126: Бракує :endfunction"
-#: ../eval.c:17537
#, c-format
msgid "E707: Function name conflicts with variable: %s"
msgstr "E707: Ðазва функції Ñпівпадає зі змінною: %s"
-#: ../eval.c:17549
#, c-format
msgid "E127: Cannot redefine function %s: It is in use"
msgstr "E127: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ функцію %s: вона викориÑтовуєтьÑÑ"
-#: ../eval.c:17604
#, c-format
msgid "E746: Function name does not match script file name: %s"
msgstr "E746: Ðазва функції не збігаєтьÑÑ Ð· назвою файлу Ñкрипту: %s"
-#: ../eval.c:17716
msgid "E129: Function name required"
msgstr "E129: Ðе вказано назву функції"
-#: ../eval.c:17824
-#, fuzzy, c-format
+#, c-format
msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr ""
-"E128: Ðазва функції має починатиÑÑ Ð· великої літери або міÑтити двокрапку: %s"
+msgstr "E128: Ðазва функції має починатиÑÑ Ð· великої літери або \"s:\": %s"
-#: ../eval.c:17833
-#, fuzzy, c-format
+#, c-format
msgid "E884: Function name cannot contain a colon: %s"
-msgstr ""
-"E128: Ðазва функції має починатиÑÑ Ð· великої літери або міÑтити двокрапку: %s"
+msgstr "E884: Ðазва функції не може міÑтити двокрапку: %s"
-#: ../eval.c:18336
#, c-format
msgid "E131: Cannot delete function %s: It is in use"
msgstr "E131: Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ функцію %s: Вона викориÑтовуєтьÑÑ"
-#: ../eval.c:18441
+#, c-format
+msgid "Cannot delete function %s: It is being used internally"
+msgstr "Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ функцію %s: Вона викориÑтовуєтьÑÑ"
+
msgid "E132: Function call depth is higher than 'maxfuncdepth'"
msgstr "E132: Глибина викликів функції перевищує 'maxfuncdepth'"
-#: ../eval.c:18568
#, c-format
msgid "calling %s"
msgstr "викликаєтьÑÑ %s"
-#: ../eval.c:18651
#, c-format
msgid "%s aborted"
msgstr "%s припинено"
-#: ../eval.c:18653
#, c-format
msgid "%s returning #%<PRId64>"
msgstr "%s повертає #%<PRId64>"
-#: ../eval.c:18670
#, c-format
msgid "%s returning %s"
msgstr "%s повертає %s"
-#: ../eval.c:18691 ../ex_cmds2.c:2695
#, c-format
msgid "continuing in %s"
msgstr "Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ð² %s"
-#: ../eval.c:18795
msgid "E133: :return not inside a function"
msgstr "E133: :return поза межами функції"
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# глобальні змінні:\n"
-
-#: ../eval.c:19254
msgid ""
"\n"
"\tLast set from "
@@ -1048,152 +1030,305 @@ msgstr ""
"\n"
"\tВоÑтаннє змінена у "
-#: ../eval.c:19272
msgid "No old files"
msgstr "Жодного Ñтарого файлу"
-#: ../ex_cmds.c:122
#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, шіÑÑ‚ %02x, Ð²Ñ–Ñ %03o"
+msgid "E474: Expected comma before list item: %s"
+msgstr "E474: ОчікуєтьÑÑ ÐºÐ¾Ð¼Ð° перед елементом ÑпиÑка: %s"
-#: ../ex_cmds.c:145
#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, шіÑÑ‚ %04x, Ð²Ñ–Ñ %o"
+msgid "E474: Expected colon before dictionary value: %s"
+msgstr "E474: ОчікуєтьÑÑ Ð´Ð²Ð¾ÐºÑ€Ð°Ð¿ÐºÐ° перед значеннÑм у Ñловнику: %s"
-#: ../ex_cmds.c:146
#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, шіÑÑ‚ %08x, Ð²Ñ–Ñ %o"
+msgid "E474: Expected string key: %s"
+msgstr "E474: ОчікуєтьÑÑ Ñ‚ÐµÐºÑтовий ключ: %s"
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: Ðеможливо переміÑтити Ñ€Ñдки Ñамі в Ñебе"
+#, c-format
+msgid "E474: Expected comma before dictionary key: %s"
+msgstr "E474: ОчікуєтьÑÑ ÐºÐ¾Ð¼Ð° перед Ñловниковим ключем: %s"
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "Переміщено один Ñ€Ñдок"
+#, c-format
+msgid "E474: Unfinished escape sequence: %.*s"
+msgstr "E474: Ðе закінчено поÑлідовніÑть escape: %.*s"
-#: ../ex_cmds.c:749
#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "Переміщено %<PRId64> Ñ€Ñдки(ів)"
+msgid "E474: Unfinished unicode escape sequence: %.*s"
+msgstr "E474: Ðе закінчено escape-поÑлідовніÑть юнікоду: %.*s"
-#: ../ex_cmds.c:1175
#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "Відфільтровано %<PRId64> Ñ€Ñдки(ів)"
+msgid "E474: Expected four hex digits after \\u: %.*s"
+msgstr "E474: ОчікуєтьÑÑ Ñ‡Ð¾Ñ‚Ð¸Ñ€Ð¸ шіÑтнадцÑткові цифри піÑÐ»Ñ \\u: %.*s"
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: Ðвтокоманди *Filter* не повинні змінювати поточний буфер"
+#, c-format
+msgid "E474: Unknown escape sequence: %.*s"
+msgstr "E474: Ðевідома поÑлідовніÑть escape: %.*s"
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[Зміни не запиÑано]\n"
+#, c-format
+msgid "E474: ASCII control characters cannot be present inside string: %.*s"
+msgstr "E474: Керуючі Ñимволи ASCII не можуть бути вÑередині текÑту: %.*s"
+
+#, c-format
+msgid "E474: Only UTF-8 strings allowed: %.*s"
+msgstr "E474: Дозволено тільки текÑÑ‚ UTF-8: %.*s"
-#: ../ex_cmds.c:1424
#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s в Ñ€Ñдку: "
+msgid ""
+"E474: Only UTF-8 code points up to U+10FFFF are allowed to appear unescaped: "
+"%.*s"
+msgstr ""
+"E474: Тільки точки коду UTF-8 до U+10FFFF можуть бути приÑутні без escape: "
+"%.*s"
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: Забагато помилок, решта файлу буде пропущено"
+#, c-format
+msgid "E474: Expected string end: %.*s"
+msgstr "E474: ОчікувавÑÑ ÐºÑ–Ð½ÐµÑ†ÑŒ Ñ€Ñдка: %.*s"
-#: ../ex_cmds.c:1458
#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "ЗчитуєтьÑÑ Ñ„Ð°Ð¹Ð» viminfo: «%s»%s%s%s"
+msgid "E474: Failed to convert string \"%.*s\" from UTF-8"
+msgstr "E474: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ текÑÑ‚ «%.*s» з UTF-8"
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " інформаціÑ"
+#, c-format
+msgid "E474: Leading zeroes are not allowed: %.*s"
+msgstr "E474: Початкові нулі не дозволено: %.*s"
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " позначки"
+#, c-format
+msgid "E474: Missing number after minus sign: %.*s"
+msgstr "E474: Бракує чиÑла піÑÐ»Ñ Ð·Ð½Ð°ÐºÑƒ: %.*s"
-#: ../ex_cmds.c:1462
-msgid " oldfiles"
-msgstr " Ñтарі файли"
+#, c-format
+msgid "E474: Missing number after decimal dot: %.*s"
+msgstr "E474: Бракує чиÑла піÑÐ»Ñ Ð´ÐµÑÑткової крапки: %.*s"
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ÐЕ ВДÐЛОСЯ"
+#, c-format
+msgid "E474: Missing exponent: %.*s"
+msgstr "E474: Бракує екÑпоненти: %.*s"
+
+#, c-format
+msgid ""
+"E685: internal error: while converting number \"%.*s\" to float string2float "
+"consumed %zu bytes in place of %zu"
+msgstr ""
+"E685: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: при перетворенні чиÑла «%.*s» у float, string2float "
+"Ñпожив %zu байтів заміÑть %zu"
+
+#, c-format
+msgid ""
+"E685: internal error: while converting number \"%.*s\" to integer vim_str2nr "
+"consumed %i bytes in place of %zu"
+msgstr ""
+"E685: Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: при перетворенні чиÑла «%.*s» у ціле, vim_str2nr "
+"Ñпожив %i байтів заміÑть %zu"
+
+msgid "E474: Attempt to decode a blank string"
+msgstr "E474: Спроба Ð´ÐµÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½ÑŒÐ¾Ð³Ð¾ текÑту"
+
+#, c-format
+msgid "E474: No container to close: %.*s"
+msgstr "E474: Ðемає контейнера щоб закрити: %.*s"
+
+#, c-format
+msgid "E474: Closing list with curly bracket: %.*s"
+msgstr "E474: ЗакриваєтьÑÑ ÑпиÑок фігурною дужкою: %.*s"
+
+#, c-format
+msgid "E474: Closing dictionary with square bracket: %.*s"
+msgstr "E474: Ð—Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñловника квадратною дужкою: %.*s"
+
+#, c-format
+msgid "E474: Trailing comma: %.*s"
+msgstr "E474: Зайва кома: %.*s"
+
+#, c-format
+msgid "E474: Expected value after colon: %.*s"
+msgstr "E474: ОчікуєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ Ð´Ð²Ð¾ÐºÑ€Ð°Ð¿ÐºÐ¸: %.*s"
+
+#, c-format
+msgid "E474: Expected value: %.*s"
+msgstr "E474: ОчікуєтьÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ: %.*s"
+
+#, c-format
+msgid "E474: Comma not inside container: %.*s"
+msgstr "E474: Кома поза контейнером: %.*s"
+
+#, c-format
+msgid "E474: Duplicate comma: %.*s"
+msgstr "E474: Зайва кома: %.*s"
+
+#, c-format
+msgid "E474: Comma after colon: %.*s"
+msgstr "E474: Кома піÑÐ»Ñ Ð´Ð²Ð¾ÐºÑ€Ð°Ð¿ÐºÐ¸: %.*s"
+
+#, c-format
+msgid "E474: Using comma in place of colon: %.*s"
+msgstr "E474: Кома заміÑть двокрапки: %.*s"
+
+#, c-format
+msgid "E474: Leading comma: %.*s"
+msgstr "E474: Кома на початку: %.*s"
+
+#, c-format
+msgid "E474: Colon not inside container: %.*s"
+msgstr "E474: Двокрапка не вÑередині контейнера: %.*s"
+
+#, c-format
+msgid "E474: Using colon not in dictionary: %.*s"
+msgstr "E474: Двокрапка не в Ñловнику: %.*s"
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Ðе дозволено Ð·Ð°Ð¿Ð¸Ñ Ñƒ файл viminfo: %s"
+msgid "E474: Unexpected colon: %.*s"
+msgstr "E474: ÐеÑподівана двокрапка: %.*s"
-#: ../ex_cmds.c:1626
#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл viminfo %s!"
+msgid "E474: Colon after comma: %.*s"
+msgstr "E474: Двокрапка піÑÐ»Ñ ÐºÐ¾Ð¼Ð¸: %.*s"
-#: ../ex_cmds.c:1635
#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "ЗапиÑуєтьÑÑ Ñ„Ð°Ð¹Ð» viminfo «%s»"
+msgid "E474: Duplicate colon: %.*s"
+msgstr "E474: Зайва двокрапка: %.*s"
-#. Write the info:
-#: ../ex_cmds.c:1720
#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Цей файл автоматично Ñтворений Vim %s.\n"
+msgid "E474: Expected null: %.*s"
+msgstr "E474: ÐеÑподіваний null: %.*s"
-#: ../ex_cmds.c:1722
+#, c-format
+msgid "E474: Expected true: %.*s"
+msgstr "E474: ОчікуєтьÑÑ true: %.*s"
+
+#, c-format
+msgid "E474: Expected false: %.*s"
+msgstr "E474: ОчікуєтьÑÑ false: %.*s"
+
+#, c-format
+msgid "E474: Unidentified byte: %.*s"
+msgstr "E474: Ðевизначений байт: %.*s"
+
+#, c-format
+msgid "E474: Trailing characters: %.*s"
+msgstr "E474: Ðадлишкові Ñимволи: %.*s"
+
+#, c-format
+msgid "E474: Unexpected end of input: %.*s"
+msgstr "E474: ÐеÑподіваний кінець: %.*s"
+
+#, c-format
+msgid "key %s"
+msgstr "ключ %s"
+
+#, c-format
+msgid "key %s at index %i from special map"
+msgstr "ключ %s за індекÑом %i із Ñпеціальної мапи"
+
+#, c-format
+msgid "index %i"
+msgstr "Ñ–Ð½Ð´ÐµÐºÑ %i"
+
+msgid "itself"
+msgstr "Ñам Ñебе"
+
+msgid "E724: unable to correctly dump variable with self-referencing container"
+msgstr "E724: не вдалоÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¾ злити змінну з контейнером, Ñкий Ñам на Ñебе поÑилаєтьÑÑ"
+
+msgid "E474: Unable to represent NaN value in JSON"
+msgstr "E474: Ðеможливо предÑтавити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ NaN у JSON"
+
+msgid "E474: Unable to represent infinity in JSON"
+msgstr "E474: Ðеможливо предÑтавити неÑкінченніÑть у JSON"
+
+#, c-format
+msgid "E474: Failed to convert string \"%.*s\" to UTF-8"
+msgstr "E474: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ñдок «%.*s» до UTF-8"
+
+#, c-format
msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
+"E474: String \"%.*s\" contains byte that does not start any UTF-8 character"
msgstr ""
-"# Можете редагувати, але ОБЕРЕЖÐО!\n"
-"\n"
+"E474: ТекÑÑ‚ \"%.*s\" міÑтить байт, що не починає жодного Ñимволу UTF-8"
+
+#, c-format
+msgid ""
+"E474: UTF-8 string contains code point which belongs to a surrogate pair: "
+"%.*s"
+msgstr ""
+"E474: текÑÑ‚ UTF-8 міÑтить точку кодуваннÑ, Ñка належить Ñурогатній парі: "
+"%.*s"
+
+msgid "E474: Unable to convert EXT string to JSON"
+msgstr "E474: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ñ€Ñдок EXT у JSON"
+
+#, c-format
+msgid "E474: Error while dumping %s, %s: attempt to dump function reference"
+msgstr "E474: Помилка при злитті %s, %s: Ñпроба злити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° функцію"
+
+msgid "E474: Invalid key in special dictionary"
+msgstr "E474: Ðеправильний ключ у Ñпеціальному Ñловнику"
+
+#, c-format
+msgid "E951: Error while dumping %s, %s: attempt to dump function reference"
+msgstr "E951: Помилка при зливанні %s, %s: Ñпроба злити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° функцію"
+
+#, c-format
+msgid "E952: Unable to dump %s: container references itself in %s"
+msgstr "E952: Ðеможливо злити %s: контейнер поÑилаєтьÑÑ Ð½Ð° Ñамого Ñебе у %s"
+
+#, c-format
+msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
+msgstr "<%s>%s%s %d, шіÑÑ‚ %02x, Ð²Ñ–Ñ %03o"
+
+#, c-format
+msgid "> %d, Hex %04x, Octal %o"
+msgstr "> %d, шіÑÑ‚ %04x, Ð²Ñ–Ñ %o"
+
+#, c-format
+msgid "> %d, Hex %08x, Octal %o"
+msgstr "> %d, шіÑÑ‚ %08x, Ð²Ñ–Ñ %o"
+
+msgid "E134: Move lines into themselves"
+msgstr "E134: Ðеможливо переміÑтити Ñ€Ñдки Ñамі в Ñебе"
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 'encoding' під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу\n"
+msgid "1 line moved"
+msgstr "Переміщено один Ñ€Ñдок"
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "Ðедозволений Ñимвол на початку Ñ€Ñдка"
+#, c-format
+msgid "%<PRId64> lines moved"
+msgstr "Переміщено %<PRId64> Ñ€Ñдки(ів)"
+
+#, c-format
+msgid "%<PRId64> lines filtered"
+msgstr "Відфільтровано %<PRId64> Ñ€Ñдки(ів)"
+
+msgid "E135: *Filter* Autocommands must not change current buffer"
+msgstr "E135: Ðвтокоманди *Filter* не повинні змінювати поточний буфер"
+
+msgid "[No write since last change]\n"
+msgstr "[Зміни не запиÑано]\n"
-#: ../ex_cmds.c:2162
msgid "Write partial file?"
msgstr "ЗапиÑати чаÑтину файлу?"
-#: ../ex_cmds.c:2166
msgid "E140: Use ! to write partial buffer"
msgstr "E140: ВикориÑтайте ! Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу чаÑтини буфера"
-#: ../ex_cmds.c:2281
#, c-format
msgid "Overwrite existing file \"%s\"?"
msgstr "ПерепиÑати Ñ–Ñнуючий файл «%s»?"
-#: ../ex_cmds.c:2317
#, c-format
msgid "Swap file \"%s\" exists, overwrite anyway?"
msgstr "Файл обміну «%s» Ñ–Ñнує, перезапиÑати?"
-#: ../ex_cmds.c:2326
#, c-format
msgid "E768: Swap file exists: %s (:silent! overrides)"
msgstr "E768: Файл обміну Ñ–Ñнує: %s (:silent! переважує)"
-#: ../ex_cmds.c:2381
#, c-format
msgid "E141: No file name for buffer %<PRId64>"
msgstr "E141: Ðемає вхідного файлу Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° %<PRId64>"
-#: ../ex_cmds.c:2412
msgid "E142: File not written: Writing is disabled by 'write' option"
msgstr "E142: Файл не запиÑано: Ð·Ð°Ð¿Ð¸Ñ Ð·Ð°Ð±Ð¾Ñ€Ð¾Ð½ÐµÐ½Ð¾ опцією 'write'"
-#: ../ex_cmds.c:2434
#, c-format
msgid ""
"'readonly' option is set for \"%s\".\n"
@@ -1202,7 +1337,6 @@ msgstr ""
"Ð”Ð»Ñ Â«%s» вÑтановлено 'readonly'.\n"
"Бажаєте вÑе одно продовжити запиÑ?"
-#: ../ex_cmds.c:2439
#, c-format
msgid ""
"File permissions of \"%s\" are read-only.\n"
@@ -1213,816 +1347,581 @@ msgstr ""
"Проте, можливо, його можна запиÑати.\n"
"Хочете Ñпробувати?"
-#: ../ex_cmds.c:2451
#, c-format
msgid "E505: \"%s\" is read-only (add ! to override)"
msgstr "E505: «%s» тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ (! щоб не зважати)"
-#: ../ex_cmds.c:3120
#, c-format
msgid "E143: Autocommands unexpectedly deleted new buffer %s"
msgstr "E143: Ðвтокоманди неÑподівано знищили новий буфер %s"
-#: ../ex_cmds.c:3313
msgid "E144: non-numeric argument to :z"
msgstr "E144: нечиÑловий аргумент Ð´Ð»Ñ :z"
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: У rvim не дозволені команди оболонки"
+msgid "E145: Shell commands not allowed in restricted mode"
+msgstr "E145: У обмеженому режимі не дозволені команди оболонки"
-#: ../ex_cmds.c:3498
msgid "E146: Regular expressions can't be delimited by letters"
msgstr "E146: РегулÑрні вирази не можна розділÑти літерами"
-#: ../ex_cmds.c:3964
#, c-format
msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
msgstr "Замінити на %s (y/n/a/q/l/^E/^Y)?"
-#: ../ex_cmds.c:4379
msgid "(Interrupted) "
msgstr "(Перервано) "
-# msgstr "E31: "
-#: ../ex_cmds.c:4384
msgid "1 match"
msgstr "Один збіг"
-#: ../ex_cmds.c:4384
msgid "1 substitution"
msgstr "Одна заміна"
-#: ../ex_cmds.c:4387
#, c-format
msgid "%<PRId64> matches"
msgstr "%<PRId64> збіги(ів)"
-#: ../ex_cmds.c:4388
#, c-format
msgid "%<PRId64> substitutions"
msgstr "%<PRId64> замін(и)"
-#: ../ex_cmds.c:4392
msgid " on 1 line"
msgstr " в одному Ñ€Ñдку"
-#: ../ex_cmds.c:4395
#, c-format
msgid " on %<PRId64> lines"
msgstr " в %<PRId64> Ñ€Ñдках"
-#: ../ex_cmds.c:4438
msgid "E147: Cannot do :global recursive"
msgstr "E147: :global не можна вживати рекурÑивно"
-#: ../ex_cmds.c:4467
msgid "E148: Regular expression missing from global"
msgstr "E148: У global бракує зразка"
-#: ../ex_cmds.c:4508
#, c-format
msgid "Pattern found in every line: %s"
msgstr "Зразок знайдено у кожному Ñ€Ñдку: %s"
-#: ../ex_cmds.c:4510
#, c-format
msgid "Pattern not found: %s"
msgstr "Зразок не знайдено: %s"
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# ОÑÑ‚Ð°Ð½Ð½Ñ Ð·Ð°Ð¼Ñ–Ð½Ð°:\n"
-"$"
-
-#: ../ex_cmds.c:4679
msgid "E478: Don't panic!"
msgstr "E478: Без паніки!"
-#: ../ex_cmds.c:4717
#, c-format
msgid "E661: Sorry, no '%s' help for %s"
msgstr "E661: Вибачте, немає допомоги '%s' Ð´Ð»Ñ %s"
-#: ../ex_cmds.c:4719
#, c-format
msgid "E149: Sorry, no help for %s"
msgstr "E149: Вибачте, немає допомоги Ð´Ð»Ñ %s"
-#: ../ex_cmds.c:4751
#, c-format
msgid "Sorry, help file \"%s\" not found"
msgstr "Вибачте, файл допомоги «%s» не знайдено"
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: Ðе Ñ” каталогом: %s"
-
-#: ../ex_cmds.c:5446
#, c-format
msgid "E152: Cannot open %s for writing"
msgstr "E152: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
-#: ../ex_cmds.c:5471
#, c-format
msgid "E153: Unable to open %s for reading"
msgstr "E153: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
-#: ../ex_cmds.c:5500
#, c-format
msgid "E670: Mix of help file encodings within a language: %s"
msgstr "E670: Мішанина кодувань файлу допомоги Ð´Ð»Ñ Ð¼Ð¾Ð²Ð¸ %s"
-#: ../ex_cmds.c:5565
#, c-format
msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ‚ÐµÒ‘Ñƒ «%s» у файлі %s/%s"
+msgstr "E154: ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¼Ñ–Ñ‚ÐºÐ¸ «%s» у файлі %s/%s"
+
+#, c-format
+msgid "E150: Not a directory: %s"
+msgstr "E150: Ðе Ñ” каталогом: %s"
-#: ../ex_cmds.c:5687
#, c-format
msgid "E160: Unknown sign command: %s"
msgstr "E160: Ðевідома команда надпиÑу: %s"
-#: ../ex_cmds.c:5704
msgid "E156: Missing sign name"
msgstr "E156: Пропущено назву надпиÑу"
-#: ../ex_cmds.c:5746
msgid "E612: Too many signs defined"
msgstr "E612: Визначено забагато надпиÑів"
-#: ../ex_cmds.c:5813
#, c-format
msgid "E239: Invalid sign text: %s"
msgstr "E239: Ðекоректний надпиÑ: %s"
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
#, c-format
msgid "E155: Unknown sign: %s"
msgstr "E155: Ðевідомий надпиÑ: %s"
-#: ../ex_cmds.c:5877
msgid "E159: Missing sign number"
msgstr "E159: Пропущено номер надпиÑу"
-#: ../ex_cmds.c:5971
#, c-format
msgid "E158: Invalid buffer name: %s"
msgstr "E158: Ðекоректна назва буфера: %s"
-#: ../ex_cmds.c:6008
#, c-format
msgid "E157: Invalid sign ID: %<PRId64>"
msgstr "E157: Ðеправильний ID надпиÑу: %<PRId64>"
-#: ../ex_cmds.c:6066
+#, c-format
+msgid "E885: Not possible to change sign %s"
+msgstr "E885: Ðеможливо змінити знак %s"
+
msgid " (not supported)"
msgstr " (не підтримуєтьÑÑ)"
-#: ../ex_cmds.c:6169
msgid "[Deleted]"
msgstr "[Знищено]"
-#: ../ex_cmds2.c:139
msgid "Entering Debug mode. Type \"cont\" to continue."
msgstr "Режим налагодженнÑ. Щоб продовжити введіть «cont»."
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
#, c-format
msgid "line %<PRId64>: %s"
msgstr "Ñ€Ñдок %<PRId64>: %s"
-#: ../ex_cmds2.c:145
#, c-format
msgid "cmd: %s"
msgstr "команда: %s"
-#: ../ex_cmds2.c:322
+msgid "frame is zero"
+msgstr "кадр нульовий"
+
+#, c-format
+msgid "frame at highest level: %d"
+msgstr "кадр на найвищому рівні: %d"
+
#, c-format
msgid "Breakpoint in \"%s%s\" line %<PRId64>"
msgstr "Точка зупинки в «%s%s» Ñ€Ñдок %<PRId64>"
-#: ../ex_cmds2.c:581
#, c-format
msgid "E161: Breakpoint not found: %s"
msgstr "E161: Точку зупинки не знайдено: %s"
-#: ../ex_cmds2.c:611
msgid "No breakpoints defined"
msgstr "Ðе визначено жодної точки зупинки"
-#: ../ex_cmds2.c:617
#, c-format
msgid "%3d %s %s line %<PRId64>"
msgstr "%3d %s %s Ñ€Ñдок %<PRId64>"
-#: ../ex_cmds2.c:942
msgid "E750: First use \":profile start {fname}\""
msgstr "E750: Спочатку зробіть «:profile start {файл}»"
-#: ../ex_cmds2.c:1269
#, c-format
msgid "Save changes to \"%s\"?"
msgstr "Зберегти зміни в «%s»?"
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
msgid "Untitled"
msgstr "Ðеназваний"
-#: ../ex_cmds2.c:1421
#, c-format
msgid "E162: No write since last change for buffer \"%s\""
msgstr "E162: Буфер «%s» має незбережені зміни"
-#: ../ex_cmds2.c:1480
msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
msgstr ""
"Обережно: ÐеÑподівано опинилиÑÑ Ñƒ іншому буфері (перевірте автокоманди)"
-#: ../ex_cmds2.c:1826
msgid "E163: There is only one file to edit"
msgstr "E163: РедагуєтьÑÑ Ð»Ð¸ÑˆÐµ один файл"
-#: ../ex_cmds2.c:1828
msgid "E164: Cannot go before first file"
msgstr "E164: Це вже найперший файл"
-#: ../ex_cmds2.c:1830
msgid "E165: Cannot go beyond last file"
msgstr "E165: Це вже оÑтанній файл"
-#: ../ex_cmds2.c:2175
#, c-format
msgid "E666: compiler not supported: %s"
msgstr "E666: КомпілÑтор не підтримуєтьÑÑ: %s"
-# msgstr "E195: "
-#: ../ex_cmds2.c:2257
#, c-format
msgid "Searching for \"%s\" in \"%s\""
msgstr "Пошук «%s» в «%s»"
-#: ../ex_cmds2.c:2284
#, c-format
msgid "Searching for \"%s\""
msgstr "Пошук «%s»"
-#: ../ex_cmds2.c:2307
#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "В 'runtimepath' не знайдено «%s»"
+msgid "not found in '%s': \"%s\""
+msgstr "не знайдено в '%s': «%s»"
-#: ../ex_cmds2.c:2472
#, c-format
msgid "Cannot source a directory: \"%s\""
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ каталог: «%s»"
-#: ../ex_cmds2.c:2518
#, c-format
msgid "could not source \"%s\""
msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ «%s»"
-#: ../ex_cmds2.c:2520
#, c-format
msgid "line %<PRId64>: could not source \"%s\""
msgstr "Ñ€Ñдок %<PRId64>: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ «%s»"
-#: ../ex_cmds2.c:2535
#, c-format
msgid "sourcing \"%s\""
msgstr "виконуєтьÑÑ Â«%s»"
-#: ../ex_cmds2.c:2537
#, c-format
msgid "line %<PRId64>: sourcing \"%s\""
msgstr "Ñ€Ñдок %<PRId64>: виконуєтьÑÑ Â«%s»"
-#: ../ex_cmds2.c:2693
#, c-format
msgid "finished sourcing %s"
msgstr "закінчено Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %s"
-#: ../ex_cmds2.c:2765
msgid "modeline"
msgstr "modeline"
-# msgstr "E14: "
-#: ../ex_cmds2.c:2767
msgid "--cmd argument"
msgstr "--cmd аргумент"
-# msgstr "E14: "
-#: ../ex_cmds2.c:2769
msgid "-c argument"
msgstr "-c аргумент"
-#: ../ex_cmds2.c:2771
msgid "environment variable"
msgstr "змінна оточеннÑ"
-#: ../ex_cmds2.c:2773
msgid "error handler"
msgstr "обробник помилки"
-#: ../ex_cmds2.c:3020
msgid "W15: Warning: Wrong line separator, ^M may be missing"
msgstr "W15: ЗаÑтереженнÑ: Ðеправильний роздільник Ñ€Ñдків, можливо, бракує ^M"
-#: ../ex_cmds2.c:3139
msgid "E167: :scriptencoding used outside of a sourced file"
msgstr "E167: :scriptencoding викориÑтано поза виконуваним файлом"
-#: ../ex_cmds2.c:3166
msgid "E168: :finish used outside of a sourced file"
msgstr "E168: :finish викориÑтано поза виконуваним файлом"
-#: ../ex_cmds2.c:3389
#, c-format
msgid "Current %slanguage: \"%s\""
msgstr "Мова (%s): «%s»"
-#: ../ex_cmds2.c:3404
#, c-format
msgid "E197: Cannot set language to \"%s\""
msgstr "E197: Ðе вдалоÑÑ Ð²Ñтановити мову «%s»"
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
msgstr "Режим Ex. Ð”Ð»Ñ Ð¿Ð¾Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ нормального режиму виконайте «visual»"
-#: ../ex_docmd.c:428
msgid "E501: At end-of-file"
msgstr "E501: Кінець файлу"
-#: ../ex_docmd.c:513
msgid "E169: Command too recursive"
msgstr "E169: Команда занадто рекурÑивна"
-#: ../ex_docmd.c:1006
#, c-format
msgid "E605: Exception not caught: %s"
msgstr "E605: ВинÑткова ÑÐ¸Ñ‚ÑƒÐ°Ñ†Ñ–Ñ Ð½Ðµ оброблена: %s"
-#: ../ex_docmd.c:1085
msgid "End of sourced file"
msgstr "Кінець виконуваного файлу"
-#: ../ex_docmd.c:1086
msgid "End of function"
msgstr "Кінець функції"
-#: ../ex_docmd.c:1628
msgid "E464: Ambiguous use of user-defined command"
msgstr "E464: Ðеоднозначний вжиток команди кориÑтувача"
-#: ../ex_docmd.c:1638
msgid "E492: Not an editor command"
msgstr "E492: Це не команда редактора"
-#: ../ex_docmd.c:1729
msgid "E493: Backwards range given"
msgstr "E493: Інтервал задано навиворіт"
-#: ../ex_docmd.c:1733
msgid "Backwards range given, OK to swap"
msgstr "Інтервал задано навиворіт, щоб помінÑти міÑцÑми — ГÐРÐЗД"
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
msgid "E494: Use w or w>>"
msgstr "E494: Спробуйте w або w>>"
-#: ../ex_docmd.c:3454
msgid "E319: The command is not available in this version"
msgstr "E319: Вибачте, цієї команди немає у цій верÑÑ–Ñ—"
-#: ../ex_docmd.c:3752
msgid "E172: Only one file name allowed"
msgstr "E172: Дозволено тільки одну назву файлу"
-#: ../ex_docmd.c:4238
msgid "1 more file to edit. Quit anyway?"
msgstr "ЗалишилоÑÑ Ð²Ñ–Ð´Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ñ‚Ð¸ ще один файл. Ð’Ñе одно вийти?"
-#: ../ex_docmd.c:4242
#, c-format
msgid "%d more files to edit. Quit anyway?"
msgstr "Ще Ñ” %d не редагованих файлів. Ð’Ñе одно вийти?"
-#: ../ex_docmd.c:4248
msgid "E173: 1 more file to edit"
msgstr "E173: ЗалишилоÑÑ Ð²Ñ–Ð´Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ñ‚Ð¸ ще один файл"
-#: ../ex_docmd.c:4250
#, c-format
msgid "E173: %<PRId64> more files to edit"
msgstr "E173: ЗалишилоÑÑ %<PRId64> не редагованих файлів"
-#: ../ex_docmd.c:4320
msgid "E174: Command already exists: add ! to replace it"
msgstr "E174: Команда вже Ñ–Ñнує, ! щоб замінити Ñ—Ñ—"
-#: ../ex_docmd.c:4432
msgid ""
"\n"
-" Name Args Range Complete Definition"
+" Name Args Address Complete Definition"
msgstr ""
"\n"
-" Ðазва Ðрг. Межа Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ"
+" Ðазва Ðрг. ÐдреÑа Ð”Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ"
-#: ../ex_docmd.c:4516
msgid "No user-defined commands found"
msgstr "Ðе знайдено команд кориÑтувача"
-#: ../ex_docmd.c:4538
msgid "E175: No attribute specified"
msgstr "E175: Ðе вказано атрибутів"
-#: ../ex_docmd.c:4583
msgid "E176: Invalid number of arguments"
msgstr "E176: Ðеправильна кількіÑть аргументів"
-#: ../ex_docmd.c:4594
msgid "E177: Count cannot be specified twice"
msgstr "E177: Лічильник не може бути вказано двічі"
-# msgstr "E177: "
-#: ../ex_docmd.c:4603
msgid "E178: Invalid default value for count"
msgstr "E178: Ðеправильне початкове Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ñ–Ñ‡Ð¸Ð»ÑŒÐ½Ð¸ÐºÐ°"
-# msgstr "E178: "
-#: ../ex_docmd.c:4625
msgid "E179: argument required for -complete"
msgstr "E179: Ð´Ð»Ñ -complete потрібний аргумент"
-# msgstr "E180: "
-#: ../ex_docmd.c:4635
+msgid "E179: argument required for -addr"
+msgstr "E179: Ð´Ð»Ñ -addr потрібний аргумент"
+
#, c-format
msgid "E181: Invalid attribute: %s"
msgstr "E181: Ðеправильний атрибут: %s"
-# msgstr "E181: "
-#: ../ex_docmd.c:4678
msgid "E182: Invalid command name"
msgstr "E182: Ðеправильна назва команди"
-# msgstr "E182: "
-#: ../ex_docmd.c:4691
msgid "E183: User defined commands must start with an uppercase letter"
msgstr "E183: Команди кориÑтувача повинні починатиÑÑ Ð· великої літери"
-#: ../ex_docmd.c:4696
msgid "E841: Reserved name, cannot be used for user defined command"
msgstr ""
"E841: Зарезервована назва, не можна викориÑтати Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувацької команди"
-# msgstr "E183: "
-#: ../ex_docmd.c:4751
#, c-format
msgid "E184: No such user-defined command: %s"
msgstr "E184: Команду кориÑтувача не знайдено: %s"
-# msgstr "E179: "
-#: ../ex_docmd.c:5219
+#, c-format
+msgid "E180: Invalid address type value: %s"
+msgstr "E180: Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ адреÑи: %s"
+
#, c-format
msgid "E180: Invalid complete value: %s"
msgstr "E180: Ðеправильне доповненнÑ: %s"
-#: ../ex_docmd.c:5225
msgid "E468: Completion argument only allowed for custom completion"
msgstr "E468: Ðргумент дозволений тільки Ð´Ð»Ñ ÐºÐ¾Ñ€Ð¸Ñтувацького доповненнÑ"
-#: ../ex_docmd.c:5231
msgid "E467: Custom completion requires a function argument"
msgstr "E467: КориÑтувацьке Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð²Ð¸Ð¼Ð°Ð³Ð°Ñ” аргумент-функцію"
-# msgstr "E184: "
-#: ../ex_docmd.c:5257
#, c-format
msgid "E185: Cannot find color scheme '%s'"
msgstr "E185: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñхему кольорів «%s»"
-#: ../ex_docmd.c:5263
msgid "Greetings, Vim user!"
msgstr "ВітаннÑ, кориÑтувачу Vim!"
-# msgstr "E443: "
-#: ../ex_docmd.c:5431
msgid "E784: Cannot close last tab page"
msgstr "E784: Ðе можна закрити оÑтанню вкладку"
-# msgstr "E444: "
-#: ../ex_docmd.c:5462
msgid "Already only one tab page"
msgstr "Вже й так лише одна вкладка"
-#: ../ex_docmd.c:6004
#, c-format
msgid "Tab page %d"
msgstr "Вкладка %d"
-#: ../ex_docmd.c:6295
msgid "No swap file"
msgstr "Ðемає файлу обміну"
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E747: Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ каталог, буфер має зміни (! щоб не зважати)"
-
-#: ../ex_docmd.c:6485
msgid "E186: No previous directory"
msgstr "E186: Це вже найперший каталог"
-# msgstr "E186: "
-#: ../ex_docmd.c:6530
msgid "E187: Unknown"
msgstr "E187: Ðевідомо"
-#: ../ex_docmd.c:6610
msgid "E465: :winsize requires two number arguments"
msgstr "E465: :winsize вимагає два чиÑлових аргументи"
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: Ðе можна отримати позицію вікна на цій платформі"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos вимагає два чиÑлових аргументи"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: Ðе вдалоÑÑ Ñтворити каталог: %s"
-
-#: ../ex_docmd.c:7268
#, c-format
msgid "E189: \"%s\" exists (add ! to override)"
msgstr "E189: Файл «%s» Ñ–Ñнує (! щоб не зважати)"
-# msgstr "E189: "
-#: ../ex_docmd.c:7273
#, c-format
msgid "E190: Cannot open \"%s\" for writing"
msgstr "E190: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ «%s» Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
-# msgstr "E190: "
-#. set mark
-#: ../ex_docmd.c:7294
msgid "E191: Argument must be a letter or forward/backward quote"
msgstr "E191: Ðргумент має бути літерою, ` або '"
-# msgstr "E191: "
-#: ../ex_docmd.c:7333
msgid "E192: Recursive use of :normal too deep"
msgstr "E192: Забагато вкладених :normal"
-# msgstr "E193: "
-#: ../ex_docmd.c:7807
msgid "E194: No alternate file name to substitute for '#'"
msgstr "E194: Ðемає назви вторинного файлу Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸ '#'"
-#: ../ex_docmd.c:7841
msgid "E495: no autocommand file name to substitute for \"<afile>\""
msgstr "E495: Ðемає назви файлу автокоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸ «<afile>»"
-#: ../ex_docmd.c:7850
msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
msgstr "E496: Ðемає номера буфера автокоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸ «<abuf>»"
-#: ../ex_docmd.c:7861
msgid "E497: no autocommand match name to substitute for \"<amatch>\""
msgstr "E497: Ðемає назви збігу автокоманди Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸ «<amatch>»"
-#: ../ex_docmd.c:7870
msgid "E498: no :source file name to substitute for \"<sfile>\""
msgstr "E498: Ðемає назви файлу :source Ð´Ð»Ñ Ð·Ð°Ð¼Ñ–Ð½Ð¸ «<sfile>»"
-#: ../ex_docmd.c:7876
msgid "E842: no line number to use for \"<slnum>\""
msgstr "E842: немає номера Ñ€Ñдка, щоб викориÑтати з «<sfile>»"
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
+#, c-format
msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
msgstr "E499: Ðазва файлу Ð´Ð»Ñ '%' чи '#' порожнÑ, працює лише з «:p:h»"
-#: ../ex_docmd.c:7905
msgid "E500: Evaluates to an empty string"
msgstr "E500: Результат — порожній Ñ€Ñдок"
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл viminfo"
-
-#: ../ex_eval.c:464
msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
msgstr "E608: Ðе можна викидати (:throw) винÑтки з префікÑом 'Vim'"
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
#, c-format
msgid "Exception thrown: %s"
msgstr "ВинÑткова ÑитуаціÑ: %s"
-#: ../ex_eval.c:545
#, c-format
msgid "Exception finished: %s"
msgstr "ВинÑток закінчено: %s"
-#: ../ex_eval.c:546
#, c-format
msgid "Exception discarded: %s"
msgstr "ВинÑток Ñкинуто: %s"
-#: ../ex_eval.c:588 ../ex_eval.c:634
#, c-format
msgid "%s, line %<PRId64>"
msgstr "%s, Ñ€Ñдок %<PRId64>"
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
#, c-format
msgid "Exception caught: %s"
msgstr "Спіймано винÑткову Ñитуацію: %s"
-#: ../ex_eval.c:676
#, c-format
msgid "%s made pending"
msgstr "ОчікуєтьÑÑ %s"
-#: ../ex_eval.c:679
#, c-format
msgid "%s resumed"
msgstr "Відновлено %s"
-#: ../ex_eval.c:683
#, c-format
msgid "%s discarded"
msgstr "Скинуто %s"
-#: ../ex_eval.c:708
msgid "Exception"
msgstr "ВинÑток"
-#: ../ex_eval.c:713
msgid "Error and interrupt"
msgstr "Помилка, перервано"
-# msgstr "E231: "
-#: ../ex_eval.c:715
msgid "Error"
msgstr "Помилка"
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
msgid "Interrupt"
msgstr "Перервано"
-#: ../ex_eval.c:795
msgid "E579: :if nesting too deep"
msgstr "E579: Занадто багато вкладених :if"
-#: ../ex_eval.c:830
msgid "E580: :endif without :if"
msgstr "E580: :endif без :if"
-#: ../ex_eval.c:873
msgid "E581: :else without :if"
msgstr "E581: :else без :if"
-#: ../ex_eval.c:876
msgid "E582: :elseif without :if"
msgstr "E582: :elseif без :if"
-#: ../ex_eval.c:880
msgid "E583: multiple :else"
msgstr "E583: Ðе одне :else"
-#: ../ex_eval.c:883
msgid "E584: :elseif after :else"
msgstr "E584: :elseif піÑÐ»Ñ :else"
-#: ../ex_eval.c:941
msgid "E585: :while/:for nesting too deep"
msgstr "E585: Забагато вкладених :while/:for"
-#: ../ex_eval.c:1028
msgid "E586: :continue without :while or :for"
msgstr "E586: :continue без :while чи :for"
-#: ../ex_eval.c:1061
msgid "E587: :break without :while or :for"
msgstr "E587: :break без :while чи :for"
-#: ../ex_eval.c:1102
msgid "E732: Using :endfor with :while"
msgstr "E732: Вжито :endfor із :while"
-#: ../ex_eval.c:1104
msgid "E733: Using :endwhile with :for"
msgstr "E733: Вжито :endwhile із :for"
-#: ../ex_eval.c:1247
msgid "E601: :try nesting too deep"
msgstr "E601: Забагато вкладених :try"
-#: ../ex_eval.c:1317
msgid "E603: :catch without :try"
msgstr "E603: :catch без :try"
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
msgid "E604: :catch after :finally"
msgstr "E604: :catch піÑÐ»Ñ :finally"
-#: ../ex_eval.c:1451
msgid "E606: :finally without :try"
msgstr "E606: :finally без :try"
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
msgid "E607: multiple :finally"
msgstr "E607: Ðе одне :finally"
-#: ../ex_eval.c:1571
msgid "E602: :endtry without :try"
msgstr "E602: :entry без :try"
-#: ../ex_eval.c:2026
msgid "E193: :endfunction not inside a function"
msgstr "E193: :endfunction поза межами функції"
-#: ../ex_getln.c:1643
msgid "E788: Not allowed to edit another buffer now"
msgstr "E788: Зараз не можна редагувати інший буфер"
-#: ../ex_getln.c:1656
msgid "E811: Not allowed to change buffer information now"
msgstr "E811: Зараз не можна змінювати інформацію буфера"
-# msgstr "E197: "
-#: ../ex_getln.c:3178
msgid "tagname"
msgstr "назва теґу"
-#: ../ex_getln.c:3181
msgid " kind file\n"
msgstr " тип файлу\n"
-#: ../ex_getln.c:4799
msgid "'history' option is zero"
msgstr "ÐžÐ¿Ñ†Ñ–Ñ 'history' порожнÑ"
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Попередні %s (від найновіших):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "команди"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "шукані Ñ€Ñдки"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "вирази"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "введені Ñ€Ñдки"
-
-#: ../ex_getln.c:5117
msgid "E198: cmd_pchar beyond the command length"
msgstr "E198: cmd_pchar поза межами команди"
-#: ../ex_getln.c:5279
msgid "E199: Active window or buffer deleted"
msgstr "E199: Ðктивне вікно або буфер було знищено"
-#: ../file_search.c:203
msgid "E854: path too long for completion"
msgstr "E854: шлÑÑ… занадто довгий Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ"
-#: ../file_search.c:446
#, c-format
msgid ""
"E343: Invalid path: '**[number]' must be at the end of the path or be "
@@ -2031,218 +1930,155 @@ msgstr ""
"E343: Ðекоректний шлÑÑ…: `**[чиÑло]' повинне бути наприкінці шлÑху або перед "
"'%s'."
-# msgstr "E343: "
-#: ../file_search.c:1505
#, c-format
msgid "E344: Can't find directory \"%s\" in cdpath"
msgstr "E344: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ каталог «%s» у cdpath"
-# msgstr "E344: "
-#: ../file_search.c:1508
#, c-format
msgid "E345: Can't find file \"%s\" in path"
msgstr "E345: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл «%s» у path"
-# msgstr "E345: "
-#: ../file_search.c:1512
#, c-format
msgid "E346: No more directory \"%s\" found in cdpath"
msgstr "E346: У cdpath немає більше каталогу «%s»"
-# msgstr "E346: "
-#: ../file_search.c:1515
#, c-format
msgid "E347: No more file \"%s\" found in path"
msgstr "E347: У шлÑху пошуку більше немає файлів «%s»"
-#: ../fileio.c:137
msgid "E812: Autocommands changed buffer or buffer name"
msgstr "E812: Ðвтокоманди змінили буфер чи його назву"
-# msgstr "E199: "
-#: ../fileio.c:368
msgid "Illegal file name"
msgstr "Ðедозволена назва файлу"
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
msgid "is a directory"
msgstr "каталог"
-#: ../fileio.c:397
msgid "is not a file"
msgstr "не файл"
-#: ../fileio.c:508 ../fileio.c:3522
msgid "[New File]"
msgstr "[Ðовий файл]"
-#: ../fileio.c:511
msgid "[New DIRECTORY]"
msgstr "[Ðовий каталог]"
-#: ../fileio.c:529 ../fileio.c:532
msgid "[File too big]"
msgstr "[Файл завеликий]"
-#: ../fileio.c:534
msgid "[Permission Denied]"
msgstr "[Відмовлено]"
-#: ../fileio.c:653
msgid "E200: *ReadPre autocommands made the file unreadable"
msgstr "E200: Ðвтокоманди *ReadPre унеможливили Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ"
-# msgstr "E200: "
-#: ../fileio.c:655
msgid "E201: *ReadPre autocommands must not change current buffer"
msgstr "E201: Ðвтокоманди *ReadPre не повинні змінювати цей буфер"
-# msgstr "E201: "
-#: ../fileio.c:672
msgid "Nvim: Reading from stdin...\n"
msgstr "Vim: ЧитаєтьÑÑ Ð· stdin...\n"
-#. Re-opening the original file failed!
-#: ../fileio.c:909
msgid "E202: Conversion made file unreadable!"
msgstr "E202: ÐšÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ñ–Ñ ÑƒÐ½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ð¸Ð»Ð° Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ!"
-# msgstr "E202: "
-#. fifo or socket
-#: ../fileio.c:1782
msgid "[fifo/socket]"
msgstr "[канал/Ñокет]"
-#. fifo
-#: ../fileio.c:1788
msgid "[fifo]"
msgstr "[канал]"
-#. or socket
-#: ../fileio.c:1794
msgid "[socket]"
msgstr "[Ñокет]"
-#. or character special
-#: ../fileio.c:1801
msgid "[character special]"
msgstr "[Ñпец. Ñимвольний]"
-#: ../fileio.c:1815
msgid "[CR missing]"
msgstr "[Бракує CR]"
-#: ../fileio.c:1819
msgid "[long lines split]"
msgstr "[Розбито довгі Ñ€Ñдки]"
-#: ../fileio.c:1823 ../fileio.c:3512
msgid "[NOT converted]"
msgstr "[ÐЕ конвертовано]"
-#: ../fileio.c:1826 ../fileio.c:3515
msgid "[converted]"
msgstr "[конвертовано]"
-#: ../fileio.c:1831
#, c-format
msgid "[CONVERSION ERROR in line %<PRId64>]"
msgstr "[ПОМИЛКРКОÐВЕРТÐЦІЇ у Ñ€Ñдку %<PRId64>]"
-#: ../fileio.c:1835
#, c-format
msgid "[ILLEGAL BYTE in line %<PRId64>]"
msgstr "[ÐЕКОРЕКТÐИЙ БÐЙТ у Ñ€Ñдку %<PRId64>]"
-#: ../fileio.c:1838
msgid "[READ ERRORS]"
msgstr "[ПОМИЛКРЧИТÐÐÐЯ]"
-#: ../fileio.c:2104
msgid "Can't find temp file for conversion"
msgstr "Ðе вдалоÑÑ Ð¿Ñ–Ð´ÑˆÑƒÐºÐ°Ñ‚Ð¸ тимчаÑовий файл Ð´Ð»Ñ ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ñ–Ñ—"
-#: ../fileio.c:2110
msgid "Conversion with 'charconvert' failed"
msgstr "ÐšÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ñ–Ñ Ð· 'charconvert' не вдалаÑÑ"
-#: ../fileio.c:2113
msgid "can't read output of 'charconvert'"
msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ вивід 'charconvert'"
-# msgstr "E217: "
-#: ../fileio.c:2437
msgid "E676: No matching autocommands for acwrite buffer"
msgstr "E676: Ðемає відповідних автокоманд"
-#: ../fileio.c:2466
msgid "E203: Autocommands deleted or unloaded buffer to be written"
msgstr "E203: Ðвтокоманда знищила або вивантажила буфер, що мав бути запиÑаний"
-#: ../fileio.c:2486
msgid "E204: Autocommand changed number of lines in unexpected way"
msgstr "E204: Ðвтокоманда неÑподіваним чином змінила кількіÑть Ñ€Ñдків"
-#: ../fileio.c:2548 ../fileio.c:2565
msgid "is not a file or writable device"
msgstr "Ðе придатний Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
-#: ../fileio.c:2601
msgid "is read-only (add ! to override)"
msgstr "лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ (! щоб не зважати)"
-#: ../fileio.c:2886
msgid "E506: Can't write to backup file (add ! to override)"
msgstr "E506: Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати резервний файл (! щоб не зважати)"
-#: ../fileio.c:2898
msgid "E507: Close error for backup file (add ! to override)"
msgstr "E507: Помилка Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ€ÐµÐ·ÐµÑ€Ð²Ð½Ð¾Ð³Ð¾ файлу (! щоб не зважати)"
-#: ../fileio.c:2901
msgid "E508: Can't read file for backup (add ! to override)"
msgstr ""
"E508: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл щоб Ñтворити резервну копію (! щоб не "
"зважати)"
-#: ../fileio.c:2923
msgid "E509: Cannot create backup file (add ! to override)"
msgstr "E509: Ðе вдалоÑÑ Ñтворити резервну копію (! щоб не зважати)"
-#: ../fileio.c:3008
msgid "E510: Can't make backup file (add ! to override)"
msgstr "E510: Ðе вдалоÑÑ Ð·Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ резервну копію (! щоб не зважати)"
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
msgid "E214: Can't find temp file for writing"
msgstr "E214: Ðе вдалоÑÑ Ð¿Ñ–Ð´ÑˆÑƒÐºÐ°Ñ‚Ð¸ тимчаÑовий файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
-#: ../fileio.c:3134
msgid "E213: Cannot convert (add ! to write without conversion)"
msgstr "E213: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ (! щоб запиÑати без конвертації)"
-#: ../fileio.c:3169
msgid "E166: Can't open linked file for writing"
msgstr "E166: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу зв'Ñзаний файл"
-#: ../fileio.c:3173
msgid "E212: Can't open file for writing"
msgstr "E212: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу"
-#: ../fileio.c:3363
msgid "E667: Fsync failed"
msgstr "E667: Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ fsync"
-#: ../fileio.c:3398
msgid "E512: Close failed"
msgstr "E512: Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸"
-#: ../fileio.c:3436
msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
msgstr "E513: Помилка запиÑу, ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ (Ñкиньте 'fenc')"
-#: ../fileio.c:3441
#, c-format
msgid ""
"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
@@ -2251,56 +2087,43 @@ msgstr ""
"E513: Помилка запиÑу, ÐºÐ¾Ð½Ð²ÐµÑ€Ñ‚Ð°Ñ†Ñ–Ñ Ð½Ðµ вдалаÑÑ Ñƒ Ñ€Ñдку %<PRId64> (Ñкиньте "
"'fenc')"
-#: ../fileio.c:3448
msgid "E514: write error (file system full?)"
msgstr "E514: Помилка запиÑу (ÑкінчилоÑÑŒ вільне міÑце?)"
-#: ../fileio.c:3506
msgid " CONVERSION ERROR"
msgstr " ПОМИЛКРКОÐВЕРТÐЦІЇ"
-#: ../fileio.c:3509
#, c-format
msgid " in line %<PRId64>;"
msgstr " у Ñ€Ñдку %<PRId64>;"
-#: ../fileio.c:3519
msgid "[Device]"
msgstr "[ПриÑтрій]"
-#: ../fileio.c:3522
msgid "[New]"
msgstr "[Ðовий]"
-#: ../fileio.c:3535
msgid " [a]"
msgstr "[д]"
-#: ../fileio.c:3535
msgid " appended"
msgstr " допиÑаний"
-#: ../fileio.c:3537
msgid " [w]"
msgstr "[з]"
-#: ../fileio.c:3537
msgid " written"
msgstr " запиÑаний"
-#: ../fileio.c:3579
msgid "E205: Patchmode: can't save original file"
msgstr "E205: ЛатаннÑ: не вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ оригінал"
-#: ../fileio.c:3602
msgid "E206: patchmode: can't touch empty original file"
msgstr "E206: ЛатаннÑ: не вдалоÑÑ Ñтворити оригінал"
-#: ../fileio.c:3616
msgid "E207: Can't delete backup file"
msgstr "E207: Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ резервний файл"
-#: ../fileio.c:3672
msgid ""
"\n"
"WARNING: Original file may be lost or damaged\n"
@@ -2308,134 +2131,102 @@ msgstr ""
"\n"
"ЗÐСТЕРЕЖЕÐÐЯ: Оригінал, мабуть, втрачений чи пошкоджений\n"
-#: ../fileio.c:3675
msgid "don't quit the editor until the file is successfully written!"
msgstr "Ðе виходьте з редактора, доки файл не запиÑано!"
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
msgid "[dos format]"
msgstr "[формат dos]"
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
+msgid "[dos]"
+msgstr "[dos]"
-#: ../fileio.c:3801
msgid "[mac format]"
msgstr "[формат mac]"
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
+msgid "[mac]"
+msgstr "[mac]"
-#: ../fileio.c:3807
msgid "[unix format]"
msgstr "[формат unix]"
-#: ../fileio.c:3831
+msgid "[unix]"
+msgstr "[unix]"
+
msgid "1 line, "
msgstr "один Ñ€Ñдок, "
-#: ../fileio.c:3833
#, c-format
msgid "%<PRId64> lines, "
msgstr "%<PRId64> Ñ€Ñдків, "
-#: ../fileio.c:3836
msgid "1 character"
msgstr "один Ñимвол"
-#: ../fileio.c:3838
#, c-format
msgid "%<PRId64> characters"
msgstr "%<PRId64> Ñимволів"
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
msgid "[Incomplete last line]"
msgstr "[Ðеповний оÑтанній Ñ€Ñдок]"
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
+msgid "[noeol]"
+msgstr "[noeol]"
+
msgid "WARNING: The file has been changed since reading it!!!"
msgstr "ЗÐСТЕРЕЖЕÐÐЯ: Файл змінивÑÑ Ð· чаÑу оÑтаннього читаннÑ!!!"
-#: ../fileio.c:3867
msgid "Do you really want to write to it"
msgstr "Ви Ñправді хочете його перепиÑати??"
-#: ../fileio.c:4648
#, c-format
msgid "E208: Error writing to \"%s\""
msgstr "E208: Помилка запиÑу у «%s»"
-#: ../fileio.c:4655
#, c-format
msgid "E209: Error closing \"%s\""
msgstr "E209: Помилка Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Â«%s»"
-#: ../fileio.c:4657
#, c-format
msgid "E210: Error reading \"%s\""
msgstr "E210: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Â«%s»"
-#: ../fileio.c:4883
msgid "E246: FileChangedShell autocommand deleted buffer"
msgstr "E246: Ðвтокоманда FileChangedShell знищила буфер"
-#: ../fileio.c:4894
#, c-format
msgid "E211: File \"%s\" no longer available"
msgstr "E211: Файл «%s» більше не доÑÑжний"
-#: ../fileio.c:4906
#, c-format
msgid ""
"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
"well"
msgstr "W12: ЗаÑтереженнÑ: Файл «%s» змінивÑÑ, але й буфер у Vim також"
-#: ../fileio.c:4907
msgid "See \":help W12\" for more info."
msgstr "Див. «:help W12» Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð½Ñ."
-#: ../fileio.c:4910
#, c-format
msgid "W11: Warning: File \"%s\" has changed since editing started"
msgstr "W11: ЗаÑтереженнÑ: Файл «%s» змінивÑÑ Ð¿Ñ–ÑÐ»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ редагуваннÑ"
-#: ../fileio.c:4911
msgid "See \":help W11\" for more info."
msgstr "Див. «:help W11» Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð½Ñ."
-#: ../fileio.c:4914
#, c-format
msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
msgstr "W16: ЗаÑтереженнÑ: Режим файлу «%s» змінивÑÑ Ð¿Ñ–ÑÐ»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ редагуваннÑ"
-#: ../fileio.c:4915
msgid "See \":help W16\" for more info."
msgstr "Див. «:help W16» Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð½Ñ."
-#: ../fileio.c:4927
#, c-format
msgid "W13: Warning: File \"%s\" has been created after editing started"
msgstr "W13: ЗаÑтереженнÑ: Файл «%s» було Ñтворено піÑÐ»Ñ Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒ редагуваннÑ"
-#: ../fileio.c:4947
msgid "Warning"
msgstr "ЗаÑтереженнÑ"
-#: ../fileio.c:4948
msgid ""
"&OK\n"
"&Load File"
@@ -2443,51 +2234,37 @@ msgstr ""
"&O:Гаразд\n"
"&L:Завантажити"
-#: ../fileio.c:5065
#, c-format
msgid "E462: Could not prepare for reloading \"%s\""
msgstr "E462: Ðе вдалоÑÑ Ð¿Ñ–Ð´Ð³Ð¾Ñ‚ÑƒÐ²Ð°Ñ‚Ð¸ «%s», щоб перечитати"
-#: ../fileio.c:5078
#, c-format
msgid "E321: Could not reload \"%s\""
msgstr "E321: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ «%s»"
-#: ../fileio.c:5601
msgid "--Deleted--"
msgstr "--Знищено--"
-#: ../fileio.c:5732
#, c-format
msgid "auto-removing autocommand: %s <buffer=%d>"
msgstr "Ðвтоматичне Ð·Ð½Ð¸Ñ‰ÐµÐ½Ð½Ñ Ð°Ð²Ñ‚Ð¾ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸: %s <буфер=%d>"
-#. the group doesn't exist
-#: ../fileio.c:5772
#, c-format
msgid "E367: No such group: \"%s\""
msgstr "E367: Ðемає такої групи: «%s»"
-#: ../fileio.c:5897
#, c-format
msgid "E215: Illegal character after *: %s"
msgstr "E215: Ðедозволений Ñимвол піÑÐ»Ñ *: %s"
-# msgstr "E215: "
-#: ../fileio.c:5905
#, c-format
msgid "E216: No such event: %s"
msgstr "E216: Ðемає такої події: %s"
-# msgstr "E215: "
-#: ../fileio.c:5907
#, c-format
msgid "E216: No such group or event: %s"
msgstr "E216: Ðемає такої групи чи події: %s"
-# msgstr "E216: "
-#. Highlight title
-#: ../fileio.c:6090
msgid ""
"\n"
"--- Auto-Commands ---"
@@ -2495,802 +2272,602 @@ msgstr ""
"\n"
"--- Ðвтокоманди ---"
-#: ../fileio.c:6293
#, c-format
msgid "E680: <buffer=%d>: invalid buffer number "
msgstr "E680: <буфер=%d>: некоректний номер буфера "
-#: ../fileio.c:6370
msgid "E217: Can't execute autocommands for ALL events"
msgstr "E217: Ðе можу виконувати автокоманди Ð´Ð»Ñ Ð£Ð¡Ð†Ð¥ подій"
-# msgstr "E217: "
-#: ../fileio.c:6393
msgid "No matching autocommands"
msgstr "Ðемає відповідних автокоманд"
-#: ../fileio.c:6831
msgid "E218: autocommand nesting too deep"
msgstr "E218: Забагато вкладених автокоманд"
-# msgstr "E218: "
-#: ../fileio.c:7143
#, c-format
msgid "%s Auto commands for \"%s\""
msgstr "Ðвтокоманди %s Ð´Ð»Ñ Â«%s»"
-#: ../fileio.c:7149
#, c-format
msgid "Executing %s"
msgstr "ВиконуєтьÑÑ %s"
-#: ../fileio.c:7211
#, c-format
msgid "autocommand %s"
msgstr "автокоманда %s"
-#: ../fileio.c:7795
msgid "E219: Missing {."
msgstr "E219: Бракує {."
-# msgstr "E219: "
-#: ../fileio.c:7797
msgid "E220: Missing }."
msgstr "E220: Бракує }."
-# msgstr "E220: "
-#: ../fold.c:93
msgid "E490: No fold found"
msgstr "E490: Згорток не знайдено"
-# msgstr "E349: "
-#: ../fold.c:544
msgid "E350: Cannot create fold with current 'foldmethod'"
msgstr "E350: Ðе вдалоÑÑ Ñтворити згортку методом 'foldmethod'"
-#: ../fold.c:546
msgid "E351: Cannot delete fold with current 'foldmethod'"
msgstr "E351: Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ згортку методом 'foldmethod'"
-#: ../fold.c:1784
#, c-format
msgid "+--%3ld lines folded "
msgstr "+-- згорнуто %3ld Ñ€Ñдків "
-#. buffer has already been read
-#: ../getchar.c:273
msgid "E222: Add to read buffer"
msgstr "E222: Додати до буфера читаннÑ"
-#: ../getchar.c:2040
msgid "E223: recursive mapping"
msgstr "E223: Заміна рекурÑивна"
-# msgstr "E223: "
-#: ../getchar.c:2849
#, c-format
msgid "E224: global abbreviation already exists for %s"
msgstr "E224: Загальне ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s вже Ñ–Ñнує"
-# msgstr "E224: "
-#: ../getchar.c:2852
#, c-format
msgid "E225: global mapping already exists for %s"
msgstr "E225: Загальна заміна Ð´Ð»Ñ %s вже Ñ–Ñнує"
-# msgstr "E225: "
-#: ../getchar.c:2952
#, c-format
msgid "E226: abbreviation already exists for %s"
msgstr "E226: Вже Ñ” ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s"
-# msgstr "E226: "
-#: ../getchar.c:2955
#, c-format
msgid "E227: mapping already exists for %s"
msgstr "E227: Вже Ñ” заміна Ð´Ð»Ñ %s"
-# msgstr "E227: "
-#: ../getchar.c:3008
msgid "No abbreviation found"
msgstr "Ð¡ÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ знайдено"
-#: ../getchar.c:3010
msgid "No mapping found"
msgstr "Заміни не знайдено"
-#: ../getchar.c:3974
msgid "E228: makemap: Illegal mode"
msgstr "E228: makemap: ÐеприпуÑтимий режим"
-# msgstr "E447: "
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
msgid "--No lines in buffer--"
msgstr "--Жодного Ñ€Ñдка--"
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
msgid "E470: Command aborted"
msgstr "E470: Команду перервано"
-#: ../globals.h:997
+msgid "E905: Cannot set this option after startup"
+msgstr "E905: Ðе вдалоÑÑ Ð²Ñтановити цю опцію піÑÐ»Ñ Ð·Ð°Ð¿ÑƒÑку"
+
+msgid "E903: Could not spawn API job"
+msgstr "E903: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити задачу"
+
msgid "E471: Argument required"
msgstr "E471: Ðеобхідно вказати аргумент"
-#: ../globals.h:998
msgid "E10: \\ should be followed by /, ? or &"
msgstr "E10: За \\ має йти /, ? або &"
-# msgstr "E10: "
-#: ../globals.h:1000
msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
msgstr "E11: ÐеприпуÑтимо у вікні команд, <CR> виконує, CTRL-C виходить"
-#: ../globals.h:1002
msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
msgstr ""
-"E12: Команда не дозволена у exrc/vimrc у пошуку поточного каталогу чи теґу"
+"E12: Команда не дозволена у exrc/vimrc у пошуку поточного каталогу чи мітки"
-#: ../globals.h:1003
msgid "E171: Missing :endif"
msgstr "E171: Бракує :endif"
-#: ../globals.h:1004
msgid "E600: Missing :endtry"
msgstr "E600: Бракує :endtry"
-#: ../globals.h:1005
msgid "E170: Missing :endwhile"
msgstr "E170: Бракує :endwhile"
-#: ../globals.h:1006
msgid "E170: Missing :endfor"
msgstr "E170: Бракує :endfor"
-#: ../globals.h:1007
msgid "E588: :endwhile without :while"
msgstr "E588: :endwhile без :while"
-#: ../globals.h:1008
msgid "E588: :endfor without :for"
msgstr "E588: :endfor без :for"
-#: ../globals.h:1009
msgid "E13: File exists (add ! to override)"
msgstr "E13: Файл Ñ–Ñнує (! щоб не зважати)"
-#: ../globals.h:1010
msgid "E472: Command failed"
msgstr "E472: Команда на вдалаÑÑŒ"
-#: ../globals.h:1011
msgid "E473: Internal error"
msgstr "E473: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°"
-#: ../globals.h:1012
msgid "Interrupted"
msgstr "Перервано"
-#: ../globals.h:1013
msgid "E14: Invalid address"
msgstr "E14: Ðеправильна адреÑа"
-# msgstr "E14: "
-#: ../globals.h:1014
msgid "E474: Invalid argument"
msgstr "E474: Ðекоректний аргумент"
-#: ../globals.h:1015
#, c-format
msgid "E475: Invalid argument: %s"
msgstr "E475: Ðекоректний аргумент: %s"
-#: ../globals.h:1016
#, c-format
msgid "E15: Invalid expression: %s"
msgstr "E15: Ðеправильний вираз: %s"
-# msgstr "E15: "
-#: ../globals.h:1017
msgid "E16: Invalid range"
msgstr "E16: Ðеправильні межі"
-# msgstr "E16: "
-#: ../globals.h:1018
msgid "E476: Invalid command"
msgstr "E476: Ðекоректна команда"
-#: ../globals.h:1019
#, c-format
msgid "E17: \"%s\" is a directory"
msgstr "E17: «%s» — це каталог"
-#: ../globals.h:1020
-#, fuzzy
msgid "E900: Invalid job id"
-msgstr "E49: Ðекоректний розмір зÑуву"
+msgstr "E900: Ðекоректний ід. завданнÑ"
-#: ../globals.h:1021
msgid "E901: Job table is full"
-msgstr ""
+msgstr "E901: Ð¢Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð°Ð²Ð´Ð°Ð½ÑŒ заповнена"
-#: ../globals.h:1022
#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
+msgid "E903: Process for command \"%s\" could not be spawned"
+msgstr "E903: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´Ð»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¸ «%s»"
+
+msgid "E904: Job is not connected to a pty"
+msgstr "E904: Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð½Ðµ приєднане до pty"
-#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
msgstr "E364: Бібліотечний виклик до «%s()» не вдавÑÑ"
-# msgstr "E18: "
-#: ../globals.h:1026
+#, c-format
+msgid "E739: Cannot create directory %s: %s"
+msgstr "E739: Ðе вдалоÑÑ Ñтворити каталог %s: %s"
+
msgid "E19: Mark has invalid line number"
msgstr "E19: У помітки некоректний номер Ñ€Ñдка"
-# msgstr "E19: "
-#: ../globals.h:1027
msgid "E20: Mark not set"
msgstr "E20: Помітку не вÑтановлено"
-# msgstr "E20: "
-#: ../globals.h:1029
msgid "E21: Cannot make changes, 'modifiable' is off"
msgstr "E21: Зміни не дозволені: вимкнено 'modifiable'"
-# msgstr "E21: "
-#: ../globals.h:1030
msgid "E22: Scripts nested too deep"
msgstr "E22: Забагато вкладених Ñкриптів"
-# msgstr "E22: "
-#: ../globals.h:1031
msgid "E23: No alternate file"
msgstr "E23: Ðемає вторинного файлу"
-# msgstr "E23: "
-#: ../globals.h:1032
msgid "E24: No such abbreviation"
msgstr "E24: Такого ÑÐºÐ¾Ñ€Ð¾Ñ‡ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð°Ñ”"
-# msgstr "E24: "
-#: ../globals.h:1033
msgid "E477: No ! allowed"
msgstr "E477: ! не дозволено"
-#: ../globals.h:1035
msgid "E25: Nvim does not have a built-in GUI"
msgstr "E25: Ðе можна викориÑтати GUI: Ðе ввімкнено під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñції"
-# msgstr "E25: "
-#: ../globals.h:1036
#, c-format
msgid "E28: No such highlight group name: %s"
msgstr "E28: Ðемає такої групи підÑвічуваннÑ: %s"
-# msgstr "E28: "
-#: ../globals.h:1037
msgid "E29: No inserted text yet"
msgstr "E29: ТекÑÑ‚ ще не було додано"
-# msgstr "E29: "
-#: ../globals.h:1038
msgid "E30: No previous command line"
msgstr "E30: Ще не було команд"
-# msgstr "E30: "
-#: ../globals.h:1039
msgid "E31: No such mapping"
msgstr "E31: Ðемає такої заміни"
-# msgstr "E31: "
-#: ../globals.h:1040
msgid "E479: No match"
msgstr "E479: Жодного збігу"
-#: ../globals.h:1041
#, c-format
msgid "E480: No match: %s"
msgstr "E480: Жодного збігу: %s"
-#: ../globals.h:1042
msgid "E32: No file name"
msgstr "E32: Бракує назви файлу"
-# msgstr "E32: "
-#: ../globals.h:1044
msgid "E33: No previous substitute regular expression"
msgstr "E33: Заміна зразків ще не викориÑтовувалаÑÑŒ"
-# msgstr "E33: "
-#: ../globals.h:1045
msgid "E34: No previous command"
msgstr "E34: Команд ще не було"
-# msgstr "E34: "
-#: ../globals.h:1046
msgid "E35: No previous regular expression"
msgstr "E35: Зразків пошуку ще не було"
-# msgstr "E35: "
-#: ../globals.h:1047
msgid "E481: No range allowed"
msgstr "E481: Ðе дозволено вказувати межі"
-#: ../globals.h:1048
msgid "E36: Not enough room"
msgstr "E36: МіÑÑ†Ñ Ð½Ðµ виÑтачить"
-# msgstr "E36: "
-#: ../globals.h:1049
#, c-format
msgid "E482: Can't create file %s"
msgstr "E482: Ðе вдалоÑÑ Ñтворити файл %s"
-#: ../globals.h:1050
msgid "E483: Can't get temp file name"
msgstr "E483: Ðе вдалоÑÑ Ñформувати назву тимчаÑового файлу"
-#: ../globals.h:1051
#, c-format
msgid "E484: Can't open file %s"
msgstr "E484: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s"
-#: ../globals.h:1052
#, c-format
msgid "E485: Can't read file %s"
msgstr "E485: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл %s"
-#: ../globals.h:1054
msgid "E37: No write since last change (add ! to override)"
msgstr "E37: Зміни не було запиÑано (! щоб не зважати)"
-#: ../globals.h:1055
-#, fuzzy
msgid "E37: No write since last change"
-msgstr "[Зміни не запиÑано]\n"
+msgstr "E37: Ðе запиÑано піÑÐ»Ñ Ð¾Ñтанніх змін"
-#: ../globals.h:1056
msgid "E38: Null argument"
msgstr "E38: ВідÑутній аргумент"
-#: ../globals.h:1057
msgid "E39: Number expected"
msgstr "E39: ОчікуєтьÑÑ Ñ‡Ð¸Ñло"
-#: ../globals.h:1058
#, c-format
msgid "E40: Can't open errorfile %s"
msgstr "E40: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл помилок %s"
-#: ../globals.h:1059
msgid "E41: Out of memory!"
msgstr "E41: Забракло пам'Ñті!"
-#: ../globals.h:1060
msgid "Pattern not found"
msgstr "Зразок не знайдено"
-#: ../globals.h:1061
#, c-format
msgid "E486: Pattern not found: %s"
msgstr "E486: Зразок не знайдено: %s"
-#: ../globals.h:1062
msgid "E487: Argument must be positive"
msgstr "E487: Ðргумент має бути додатний"
-#: ../globals.h:1064
msgid "E459: Cannot go back to previous directory"
msgstr "E459: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ñ‚Ð¸ до попереднього каталогу"
-#: ../globals.h:1066
msgid "E42: No Errors"
msgstr "E42: Жодної помилки"
-#: ../globals.h:1067
msgid "E776: No location list"
msgstr "E776: Ðемає ÑпиÑку міÑць"
-#: ../globals.h:1068
msgid "E43: Damaged match string"
msgstr "E43: ТекÑÑ‚ збігу пошкоджено"
-#: ../globals.h:1069
msgid "E44: Corrupted regexp program"
msgstr "E44: ЗіпÑована програма регулÑрних виразів"
-#: ../globals.h:1071
msgid "E45: 'readonly' option is set (add ! to override)"
msgstr "E45: Ð’Ñтановлено опцію 'readonly' (! щоб не зважати)"
-#: ../globals.h:1073
#, c-format
msgid "E46: Cannot change read-only variable \"%s\""
msgstr "E46: Змінна тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: «%s»"
-#: ../globals.h:1075
#, c-format
msgid "E794: Cannot set variable in the sandbox: \"%s\""
msgstr "E794: Ðе можна вÑтановити змінну у піÑочниці: «%s»"
-#: ../globals.h:1076
msgid "E47: Error while reading errorfile"
msgstr "E47: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ помилок"
-#: ../globals.h:1078
msgid "E48: Not allowed in sandbox"
msgstr "E48: Ðа дозволено у піÑочниці"
-#: ../globals.h:1080
msgid "E523: Not allowed here"
msgstr "E523: Ðе дозволено тут"
-#: ../globals.h:1082
msgid "E359: Screen mode setting not supported"
msgstr "E359: Режим екрану не підтримуєтьÑÑ"
-#: ../globals.h:1083
msgid "E49: Invalid scroll size"
msgstr "E49: Ðекоректний розмір зÑуву"
-#: ../globals.h:1084
msgid "E91: 'shell' option is empty"
msgstr "E91: ÐžÐ¿Ñ†Ñ–Ñ 'shell' порожнÑ"
-# msgstr "E254: "
-#: ../globals.h:1085
msgid "E255: Couldn't read in sign data!"
msgstr "E255: Ðе можна зчитати дані напиÑу!"
-#: ../globals.h:1086
msgid "E72: Close error on swap file"
msgstr "E72: Помилка під Ñ‡Ð°Ñ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ñ„Ð°Ð¹Ð»Ñƒ обміну"
-#: ../globals.h:1087
msgid "E73: tag stack empty"
-msgstr "E73: Стек теґів порожній"
+msgstr "E73: Стек міток порожній"
-#: ../globals.h:1088
msgid "E74: Command too complex"
msgstr "E74: Занадто Ñкладна команда"
-#: ../globals.h:1089
msgid "E75: Name too long"
msgstr "E75: Задовге ім'Ñ"
-#: ../globals.h:1090
msgid "E76: Too many ["
msgstr "E76: Забагато '['"
-#: ../globals.h:1091
msgid "E77: Too many file names"
msgstr "E77: Забагато назв файлів"
-#: ../globals.h:1092
msgid "E488: Trailing characters"
msgstr "E488: Ðадлишкові Ñимволи"
-#: ../globals.h:1093
msgid "E78: Unknown mark"
msgstr "E78: Ðевідома помітка"
-#: ../globals.h:1094
msgid "E79: Cannot expand wildcards"
msgstr "E79: Ðе вдалоÑÑ Ñ€Ð¾Ð·ÐºÑ€Ð¸Ñ‚Ð¸ шаблон"
-#: ../globals.h:1096
msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
msgstr "E591: 'winheight' не може бути меншим за 'winminheight'"
-#: ../globals.h:1098
msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
msgstr "E592: 'winwidth' не може бути меншим за 'winminwidth'"
-# msgstr "E79: "
-#: ../globals.h:1099
msgid "E80: Error while writing"
msgstr "E80: Помилка під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу"
-#: ../globals.h:1100
msgid "Zero count"
msgstr "Ðульова кількіÑть"
-#: ../globals.h:1101
msgid "E81: Using <SID> not in a script context"
msgstr "E81: <SID> викориÑтовуєтьÑÑ Ð½Ðµ в контекÑті Ñкрипту"
-#: ../globals.h:1102
#, c-format
msgid "E685: Internal error: %s"
msgstr "E685: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: %s"
-#: ../globals.h:1104
msgid "E363: pattern uses more memory than 'maxmempattern'"
msgstr "E363: Зразок викориÑтовує більше, ніж 'maxmempattern', пам'Ñті"
-#: ../globals.h:1105
msgid "E749: empty buffer"
msgstr "E749: Порожній буфер"
-#: ../globals.h:1108
+#, c-format
+msgid "E86: Buffer %<PRId64> does not exist"
+msgstr "E86: Буфера %<PRId64> немає"
+
msgid "E682: Invalid search pattern or delimiter"
msgstr "E682: Ðекоректний зразок Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ чи роздільник"
-#: ../globals.h:1109
msgid "E139: File is loaded in another buffer"
msgstr "E139: Файл уже завантажено в інший буфер"
-# msgstr "E235: "
-#: ../globals.h:1110
#, c-format
msgid "E764: Option '%s' is not set"
msgstr "E764: ÐžÐ¿Ñ†Ñ–Ñ '%s' не вÑтановлена"
-#: ../globals.h:1111
msgid "E850: Invalid register name"
msgstr "E850: Ðеправильна назва регіÑтру"
-#: ../globals.h:1114
+#, c-format
+msgid "E919: Directory not found in '%s': \"%s\""
+msgstr "E919: Каталог не знайдено у '%s': «%s»"
+
+msgid "E519: Option not supported"
+msgstr "E519: ÐžÐ¿Ñ†Ñ–Ñ Ð½Ðµ підтримуєтьÑÑ"
+
msgid "search hit TOP, continuing at BOTTOM"
msgstr "Пошук дійшов до ПОЧÐТКУ, продовжуєтьÑÑ Ð· КІÐЦЯ"
-#: ../globals.h:1115
msgid "search hit BOTTOM, continuing at TOP"
msgstr "Пошук дійшов до КІÐЦЯ, продовжуєтьÑÑ Ð· ПОЧÐТКУ"
-#: ../hardcopy.c:240
msgid "E550: Missing colon"
msgstr "E550: Пропущено двокрапку"
-# msgstr "E347: "
-#: ../hardcopy.c:252
msgid "E551: Illegal component"
msgstr "E551: Ðекоректний компонент"
-#: ../hardcopy.c:259
msgid "E552: digit expected"
msgstr "E552: очікуєтьÑÑ Ñ†Ð¸Ñ„Ñ€Ð°"
-#: ../hardcopy.c:473
#, c-format
msgid "Page %d"
msgstr "Сторінка %d"
-#: ../hardcopy.c:597
msgid "No text to be printed"
msgstr "Ðічого друкувати"
-#: ../hardcopy.c:668
#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "ДрукуєтьÑÑ Ñторінка %d (%d%%)"
+msgid "Printing page %d (%zu%%)"
+msgstr "ДрукуєтьÑÑ Ñторінка %d (%zu%%)"
-#: ../hardcopy.c:680
#, c-format
msgid " Copy %d of %d"
msgstr " ÐšÐ¾Ð¿Ñ–Ñ %d з %d"
-#: ../hardcopy.c:733
#, c-format
msgid "Printed: %s"
msgstr "Ðадруковано: %s"
-#: ../hardcopy.c:740
msgid "Printing aborted"
msgstr "Друк перервано"
-#: ../hardcopy.c:1365
msgid "E455: Error writing to PostScript output file"
msgstr "E455: Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати вихідний файл PostScript"
-#: ../hardcopy.c:1747
#, c-format
msgid "E624: Can't open file \"%s\""
msgstr "E624: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл «%s»"
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
#, c-format
msgid "E457: Can't read PostScript resource file \"%s\""
msgstr "E457: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл реÑурÑів PostScript «%s»"
-#: ../hardcopy.c:1772
#, c-format
msgid "E618: file \"%s\" is not a PostScript resource file"
msgstr "E618: «%s» не Ñ” файлом реÑурÑів PostScript"
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
#, c-format
msgid "E619: file \"%s\" is not a supported PostScript resource file"
msgstr "E619: «%s» не Ñ” підтримуваним файлом реÑурÑів PostScript"
-#: ../hardcopy.c:1856
#, c-format
msgid "E621: \"%s\" resource file has wrong version"
msgstr "E621: Ðеправильна верÑÑ–Ñ Ñ„Ð°Ð¹Ð»Ñƒ реÑурÑів «%s»"
-#: ../hardcopy.c:2225
msgid "E673: Incompatible multi-byte encoding and character set."
msgstr "E673: ÐеÑуміÑні багатобайтове ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð¹ набір Ñимволів."
-#: ../hardcopy.c:2238
msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
msgstr ""
"E674: printmbcharset не може бути порожнім з багатобайтовим кодуваннÑм."
-#: ../hardcopy.c:2254
msgid "E675: No default font specified for multi-byte printing."
msgstr "E675: Ðе зазначено шрифт Ð´Ð»Ñ Ð±Ð°Ð³Ð°Ñ‚Ð¾Ð±Ð°Ð¹Ñ‚Ð¾Ð²Ð¾Ð³Ð¾ друку."
-#: ../hardcopy.c:2426
msgid "E324: Can't open PostScript output file"
msgstr "E324: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл PostScript Ð´Ð»Ñ Ð²Ð¸Ð²Ð¾Ð´Ñƒ"
-#: ../hardcopy.c:2458
#, c-format
msgid "E456: Can't open file \"%s\""
msgstr "E456: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл «%s»"
-#: ../hardcopy.c:2583
msgid "E456: Can't find PostScript resource file \"prolog.ps\""
msgstr "E456: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл реÑурÑів PostScript «prolog.ps»"
-#: ../hardcopy.c:2593
msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
msgstr "E456: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл реÑурÑів PostScript «cidfont.ps»"
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
#, c-format
msgid "E456: Can't find PostScript resource file \"%s.ps\""
msgstr "E456: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ файл реÑурÑів PostScript «%s.ps»"
-#: ../hardcopy.c:2654
#, c-format
msgid "E620: Unable to convert to print encoding \"%s\""
msgstr "E620: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ до ÐºÐ¾Ð´ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ñ€ÑƒÐºÑƒ «%s»"
-#: ../hardcopy.c:2877
msgid "Sending to printer..."
msgstr "ВідÑилаєтьÑÑ Ð½Ð° принтер..."
-#: ../hardcopy.c:2881
msgid "E365: Failed to print PostScript file"
msgstr "E365: Ðе вдалоÑÑ Ð½Ð°Ð´Ñ€ÑƒÐºÑƒÐ²Ð°Ñ‚Ð¸ файл PostScript"
-#: ../hardcopy.c:2883
msgid "Print job sent."
msgstr "Ð—Ð°Ð²Ð´Ð°Ð½Ð½Ñ Ð´Ñ€ÑƒÐºÑƒ відіÑлано."
-# msgstr "E255: "
-#: ../if_cscope.c:85
msgid "Add a new database"
msgstr "Додати нову базу даних"
-#: ../if_cscope.c:87
msgid "Query for a pattern"
msgstr "Запит за зразком"
-#: ../if_cscope.c:89
msgid "Show this message"
msgstr "Показати це повідомленнÑ"
-#: ../if_cscope.c:91
msgid "Kill a connection"
msgstr "Знищити з'єднаннÑ"
-#: ../if_cscope.c:93
msgid "Reinit all connections"
msgstr "ПерезапуÑтити уÑÑ– з'єднаннÑ"
-#: ../if_cscope.c:95
msgid "Show connections"
msgstr "Показати з'єднаннÑ"
-#: ../if_cscope.c:101
#, c-format
msgid "E560: Usage: cs[cope] %s"
msgstr "E560: ВикориÑтаннÑ: cs[cope] %s"
-#: ../if_cscope.c:225
msgid "This cscope command does not support splitting the window.\n"
msgstr "Ð¦Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° cscope не вміє ділити вікно.\n"
-#: ../if_cscope.c:266
msgid "E562: Usage: cstag <ident>"
msgstr "E562: ВикориÑтаннÑ: cstag <ідентиф-ор>"
-#: ../if_cscope.c:313
msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: теґ не знайдено"
+msgstr "E257: cstag: мітку не знайдено"
-# msgstr "E257: "
-#: ../if_cscope.c:461
#, c-format
msgid "E563: stat(%s) error: %d"
msgstr "E563: stat(%s) помилка: %d"
-#: ../if_cscope.c:551
#, c-format
msgid "E564: %s is not a directory or a valid cscope database"
msgstr "E564: %s не є ні каталогом, ні базою даних cscope"
-#: ../if_cscope.c:566
#, c-format
msgid "Added cscope database %s"
msgstr "Додано базу даних cscope %s"
-#: ../if_cscope.c:616
#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ñ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ cscope %<PRId64>"
+msgid "E262: error reading cscope connection %<PRIu64>"
+msgstr "E262: помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð·Ñ– з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ cscope %<PRIu64>"
-#: ../if_cscope.c:711
msgid "E561: unknown cscope search type"
msgstr "E561: Ðевідомий тип пошуку cscope"
-#: ../if_cscope.c:752 ../if_cscope.c:789
msgid "E566: Could not create cscope pipes"
msgstr "E566: Ðе вдалоÑÑ Ñтворити канали до cscope"
-#: ../if_cscope.c:767
msgid "E622: Could not fork for cscope"
msgstr "E622: Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð´Ñ–Ð»Ð¸Ñ‚Ð¸ Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´Ð»Ñ cscope"
-#: ../if_cscope.c:849
msgid "cs_create_connection setpgid failed"
msgstr "cs_create_connection: помилка setpgid"
-#: ../if_cscope.c:853 ../if_cscope.c:889
msgid "cs_create_connection exec failed"
msgstr "cs_create_connection: помилка під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ"
-#: ../if_cscope.c:863 ../if_cscope.c:902
msgid "cs_create_connection: fdopen for to_fp failed"
msgstr "cs_create_connection: fdopen Ð´Ð»Ñ to_fp не вдавÑÑ"
-#: ../if_cscope.c:865 ../if_cscope.c:906
msgid "cs_create_connection: fdopen for fr_fp failed"
msgstr "cs_create_connection: fdopen Ð´Ð»Ñ fr_fp не вдавÑÑ"
-#: ../if_cscope.c:890
msgid "E623: Could not spawn cscope process"
msgstr "E623: Ðе вдалоÑÑ Ñтворити Ð¿Ñ€Ð¾Ñ†ÐµÑ cscope"
-#: ../if_cscope.c:932
msgid "E567: no cscope connections"
msgstr "E567: жодного з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· cscope"
-#: ../if_cscope.c:1009
#, c-format
msgid "E469: invalid cscopequickfix flag %c for %c"
msgstr "E469: Ðекоректний прапорець cscopequickfix %c Ð´Ð»Ñ %c"
-# msgstr "E258: "
-#: ../if_cscope.c:1058
#, c-format
msgid "E259: no matches found for cscope query %s of %s"
msgstr "E259: Ð”Ð»Ñ Ð·Ð°Ð¿Ð¸Ñ‚Ñƒ cscope %s з %s нічого не знайдено"
-# msgstr "E259: "
-#: ../if_cscope.c:1142
msgid "cscope commands:\n"
msgstr "Команди cscope:\n"
-#: ../if_cscope.c:1150
#, c-format
msgid "%-5s: %s%*s (Usage: %s)"
msgstr "%-5s: %s%*s (ВикориÑтаннÑ: %s)"
-#: ../if_cscope.c:1155
msgid ""
"\n"
+" a: Find assignments to this symbol\n"
" c: Find functions calling this function\n"
" d: Find functions called by this function\n"
" e: Find this egrep pattern\n"
@@ -3301,6 +2878,8 @@ msgid ""
" t: Find this text string\n"
msgstr ""
"\n"
+" a: Знайти приÑÐ²Ð¾Ñ”Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñимволу\n"
+" a: Знайти приÑÐ²Ð¾Ñ”Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñимволу\n"
" c: Знайти функції, що викликають цю функцію\n"
" d: Знайти функції, що викликаютьÑÑ Ñ†Ñ–Ñ”ÑŽ функцією\n"
" e: Знайти цей шаблон egrep\n"
@@ -3310,32 +2889,24 @@ msgstr ""
" s: Знайти цей Ñимвол C\n"
" t: Знайти цей текÑÑ‚\n"
-#: ../if_cscope.c:1226
msgid "E568: duplicate cscope database not added"
msgstr "E568: Повторна база даних cscope не додана"
-# msgstr "E260: "
-#: ../if_cscope.c:1335
#, c-format
msgid "E261: cscope connection %s not found"
msgstr "E261: З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· cscope %s не знайдено"
-#: ../if_cscope.c:1364
#, c-format
msgid "cscope connection %s closed"
msgstr "З'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· cscope %s закінчено"
-#. should not reach here
-#: ../if_cscope.c:1486
msgid "E570: fatal error in cs_manage_matches"
msgstr "E570: Фатальна помилка в cs_manage_matches"
-#: ../if_cscope.c:1693
#, c-format
msgid "Cscope tag: %s"
-msgstr "Теґ cscope: %s"
+msgstr "Мітка cscope: %s"
-#: ../if_cscope.c:1711
msgid ""
"\n"
" # line"
@@ -3343,330 +2914,222 @@ msgstr ""
"\n"
" # Ñ€Ñдок"
-#: ../if_cscope.c:1713
msgid "filename / context / line\n"
msgstr "файл / контекÑÑ‚ / Ñ€Ñдок\n"
-#: ../if_cscope.c:1809
#, c-format
msgid "E609: Cscope error: %s"
msgstr "E609: Помилка cscope: %s"
-#: ../if_cscope.c:2053
msgid "All cscope databases reset"
msgstr "УÑÑ– бази даних cscope перезавантажено"
-#: ../if_cscope.c:2123
msgid "no cscope connections\n"
msgstr "Жодного з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· cscope\n"
-#: ../if_cscope.c:2126
msgid " # pid database name prepend path\n"
msgstr " # pid назва бази даних шлÑÑ…\n"
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "Ðевідомий аргумент опції"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "Забагато аргументів"
-
-#: ../main.c:148
msgid "Argument missing after"
msgstr "Пропущено аргумент піÑлÑ"
-#: ../main.c:150
msgid "Garbage after option argument"
msgstr "Ð¡Ð¼Ñ–Ñ‚Ñ‚Ñ Ð¿Ñ–ÑÐ»Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñƒ опції"
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "Забагато аргументів у «+команда», «-c команда» або «--cmd команда»"
+msgid "Unknown option argument"
+msgstr "Ðевідомий аргумент опції"
-# msgstr "E14: "
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "Ðеправильний аргумент у"
+msgid "Too many edit arguments"
+msgstr "Забагато аргументів"
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d файли(ів)\n"
+msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+msgstr "Забагато аргументів у «+команда», «-c команда» або «--cmd команда»"
-#: ../main.c:1342
msgid "Attempt to open script file again: \""
msgstr "Спроба повторно відкрити Ñкрипт: \""
-#: ../main.c:1350
msgid "Cannot open for reading: \""
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸: \""
-#: ../main.c:1393
msgid "Cannot open for script output: \""
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ Ñк вихідний файл: \""
-#: ../main.c:1622
msgid "Vim: Warning: Output is not to a terminal\n"
msgstr "Vim: ЗаÑтереженнÑ: Вивід не у термінал\n"
-#: ../main.c:1624
msgid "Vim: Warning: Input is not from a terminal\n"
msgstr "Vim: ЗаÑтереженнÑ: Ð£Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð½Ðµ з терміналу\n"
-#. just in case..
-#: ../main.c:1891
msgid "pre-vimrc command line"
msgstr "команди перед vimrc"
-#: ../main.c:1964
#, c-format
msgid "E282: Cannot read from \"%s\""
msgstr "E282: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ з «%s»"
-# msgstr "E282: "
-#: ../main.c:2149
msgid ""
"\n"
-"More info with: \"vim -h\"\n"
+"More info with \""
msgstr ""
"\n"
-"ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ: «vim -h»\n"
+"ДізнайтеÑÑ Ð±Ñ–Ð»ÑŒÑˆÐµ: \""
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[файл ..] редагувати вказані файли"
+msgid "Usage:\n"
+msgstr "Вжиток:\n"
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- читати текÑÑ‚ з stdin"
+msgid " nvim [arguments] [file ...] Edit specified file(s)\n"
+msgstr " nvim [аргументи] [файл ...] Редагувати вказані файли\n"
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t помітка перейти до теґу"
+msgid " nvim [arguments] - Read text from stdin\n"
+msgstr " nvim [аргументи] - Читати текÑÑ‚ з stdin\n"
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [файл] перейти до першої помилки"
+msgid " nvim [arguments] -t <tag> Edit file where tag is defined\n"
+msgstr " nvim [аргументи] -t <мітка> Редагувати файл, де визначено мітку\n"
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Вжиток:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [аргументи] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" або:"
+msgid " nvim [arguments] -q [errorfile] Edit file with first error\n"
+msgstr " nvim [аргументи] -q [ф.помилки] Редагувати файл з першою помилкою\n"
-#: ../main.c:2196
msgid ""
"\n"
-"\n"
"Arguments:\n"
msgstr ""
"\n"
-"\n"
"Ðргументи:\n"
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tЛише назви файлів піÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\tÐе розкривати шаблони"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tРежим Vi (ніби «vi»)"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tРежим Ex (ніби «ex»)"
+msgid " -- Only file names after this\n"
+msgstr " -- Лише назви файлів піÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾\n"
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr "-E\t\t\tПокращений режим Ex"
+msgid " --literal Don't expand wildcards\n"
+msgstr " --literal Ðе розкривати шаблони\n"
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\tМовчазний (пакетний) режим (лише Ð´Ð»Ñ Â«ex»)"
+msgid " -e Ex mode\n"
+msgstr " -e Режим Ex\n"
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tРежим порівнÑÐ½Ð½Ñ (ніби «vimdiff»)"
+msgid " -E Improved Ex mode\n"
+msgstr " -E Покращений режим Ex\n"
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tПроÑтий режим (ніби «evim», без режимів)"
+msgid " -s Silent (batch) mode (only for ex mode)\n"
+msgstr " -s Мовчазний (пакетний) режим (лише Ð´Ð»Ñ Â«ex»)\n"
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tРежим переглÑду (ніби «view»)"
+msgid " -d Diff mode\n"
+msgstr " -d Режим порівнÑннÑ\n"
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tОбмежений режим (ніби «rvim»)"
+msgid " -R Read-only mode\n"
+msgstr " -R Режим тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ\n"
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\tЗміни (Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²) не дозволено"
+msgid " -Z Restricted mode\n"
+msgstr " -Z Обмежений режим\n"
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tЗміни в текÑті файлів не дозволено"
+msgid " -m Modifications (writing files) not allowed\n"
+msgstr " -m Зміни (Ð·Ð°Ð¿Ð¸Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð²) не дозволено\n"
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\tДвійковий режим"
+msgid " -M Modifications in text not allowed\n"
+msgstr " -M Зміни в текÑті файлів не дозволено\n"
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tРежим lisp"
+msgid " -b Binary mode\n"
+msgstr " -b Двійковий режим\n"
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\tСуміÑний з Vi режим: 'compatible'"
+msgid " -l Lisp mode\n"
+msgstr " -l Режим Lisp\n"
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\tÐе зовÑім ÑуміÑний з Vi режим: 'nocompatible'"
+msgid " -A Arabic mode\n"
+msgstr " -A Режим арабÑької мови\n"
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr "-V[N][файл]\t\tБільше повідомлень [рівень N] [файл журн. повідомлень]"
+msgid " -F Farsi mode\n"
+msgstr " -F Режим перÑької мови\n"
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tРежим налагодженнÑ"
+msgid " -H Hebrew mode\n"
+msgstr " -H Режим івриту\n"
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\tÐе викориÑтовувати файл обміну, тримати уÑе в пам'Ñті"
+msgid " -V[N][file] Be verbose [level N][log messages to file]\n"
+msgstr " -V[N][файл] Більше повідомлень [рівень N] [файл журн. повідомлень]\n"
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tПоказати файли обміну і вийти"
+msgid " -D Debugging mode\n"
+msgstr " -D Режим налагодженнÑ\n"
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (назва файлу)\tВідновити аварійно закінчений ÑеанÑ"
+msgid " -n No swap file, use memory only\n"
+msgstr " -n Ðе викориÑтовувати файл обміну, тримати уÑе в пам'Ñті\n"
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tТе Ñаме, що й -r"
+msgid " -r, -L List swap files and exit\n"
+msgstr " -r, -L Показати файли обміну і вийти\n"
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tЗапуÑтити в режимі арабÑької мови"
+msgid " -r <file> Recover crashed session\n"
+msgstr " -r <файл> Відновити аварійно закінчений ÑеанÑ\n"
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tЗапуÑтити в режимі івриту"
+msgid " -u <vimrc> Use <vimrc> instead of the default\n"
+msgstr " -u <vimrc> ВикориÑтати <vimrc> заміÑть Ñтандартного\n"
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tЗапуÑтити в режимі перÑької мови"
+msgid " -i <shada> Use <shada> instead of the default\n"
+msgstr " -i <shada> Вжити <shada> запіÑть Ñтандартного\n"
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <термінал>\tÐ’Ñтановити тип терміналу у <термінал>"
+msgid " --noplugin Don't load plugin scripts\n"
+msgstr " --noplugin Ðе вантажити Ñкрипти доповненнÑ\n"
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tВикориÑтати поданий файл заміÑть .vimrc"
+msgid " -o[N] Open N windows (default: one for each file)\n"
+msgstr " -o[N] Відкрити N вікон (Ñтандартно: по одному Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ файлу)\n"
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\tÐе вантажити Ñкрипти доповненнÑ"
+msgid " -O[N] Like -o but split vertically\n"
+msgstr " -O[N] Ðіби -o, але поділити вікна вертикально\n"
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-p[N]\t\tВідкрити N вкладок (або по одній Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ файлу)"
+msgid " -p[N] Open N tab pages (default: one for each file)\n"
+msgstr " -p[N] Відкрити N вкладок (Ñтандартно: по одній Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ файлу)\n"
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\tВідкрити N вікон (або по одному Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ файлу)"
+msgid " + Start at end of file\n"
+msgstr " + Розпочати в кінці файлу\n"
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\tÐіби -o, але поділити вікна вертикально"
+msgid " +<linenum> Start at line <linenum>\n"
+msgstr " +<Ñ€Ñдок> Розпочати у <Ñ€Ñдку>\n"
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tРозпочати в кінці файлу"
+msgid " +/<pattern> Start at first occurrence of <pattern>\n"
+msgstr " +/<шаблон> Розпочати, де найперше трапитьÑÑ <шаблон>\n"
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<Ñ€Ñдок>\t\tРозпочати у вказаному <Ñ€Ñдку>"
+msgid " --cmd <command> Execute <command> before loading any vimrc\n"
+msgstr " --cmd <команда> Виконати <команду> перед завантаженнÑм vimrc\n"
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <команда>\tВиконати <команду> перед завантаженнÑм vimrc"
+msgid ""
+" -c <command> Execute <command> after loading the first file\n"
+msgstr ""
+" -c <команда> Виконати <команду> піÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ файлу\n"
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <команда>\t\tВиконати <команду> піÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ файлу"
+msgid " -S <session> Source <session> after loading the first file\n"
+msgstr " -S <ÑеанÑ> Виконати <ÑеанÑ> піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ завантаженого файлу\n"
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <ÑеанÑ>\t\tВиконати поданий файл піÑÐ»Ñ Ð¿ÐµÑ€ÑˆÐ¾Ð³Ð¾ завантаженого файлу"
+msgid " -s <scriptin> Read Normal mode commands from <scriptin>\n"
+msgstr " -s <Ñкрипт> Зчитати команди нормального режиму з файлу <Ñкрипт>\n"
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <Ñкрипт>\t\tЗчитати команди нормального режиму з файлу <Ñкрипт>"
+msgid " -w <scriptout> Append all typed characters to <scriptout>\n"
+msgstr " -w <Ñкрипт> ДопиÑати уÑÑ– набрані команди до файлу <Ñкрипт>\n"
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <Ñкрипт>\t\tДопиÑати уÑÑ– набрані команди до файлу <Ñкрипт>"
+msgid " -W <scriptout> Write all typed characters to <scriptout>\n"
+msgstr " -W <Ñкрипт> ЗапиÑати уÑÑ– набрані Ñимволи у файл <Ñкрипт>\n"
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-w <Ñкрипт>\t\tЗапиÑати уÑÑ– набрані команди у файл <Ñкрипт>"
+msgid " --startuptime <file> Write startup timing messages to <file>\n"
+msgstr " --startuptime <файл> ЗапиÑати профіль запуÑку до <файлу>\n"
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
+msgid ""
+" --api-info Dump API metadata serialized to msgpack and exit\n"
msgstr ""
-"--startuptime <файл>\tЗапиÑати запуÑкні Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð· чаÑовими відмітками "
-"до <файлу>"
+" --api-info Злити метадані API, Ñеріалізовані у msgpack, Ñ– вийти\n"
+
+msgid " --embed Use stdin/stdout as a msgpack-rpc channel\n"
+msgstr " --embed ВикориÑтати stdin/stdout, Ñк канал msgpack-rpc\n"
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tВикориÑтати <viminfo> заміÑть .viminfo"
+msgid " --headless Don't start a user interface\n"
+msgstr " --headless Ðе запуÑкати Ñ–Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ ÐºÐ¾Ñ€Ð¸Ñтувача\n"
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h чи --help\tÐадрукувати це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– вийти"
+msgid " -v, --version Print version information and exit\n"
+msgstr " -v, --version Ðадрукувати інформацію про верÑÑ–ÑŽ програми Ñ– вийти\n"
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\tÐадрукувати інформацію про верÑÑ–ÑŽ програми Ñ– вийти"
+msgid " -h, --help Print this help message and exit\n"
+msgstr " -h, --help Ðадрукувати це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– вийти\n"
-#: ../mark.c:676
msgid "No marks set"
msgstr "Ðе вÑтановлено жодної помітки"
-#: ../mark.c:678
#, c-format
msgid "E283: No marks matching \"%s\""
msgstr "E283: Помітку «%s» не знайдено"
-# msgstr "E283: "
-#. Highlight title
-#: ../mark.c:687
msgid ""
"\n"
"mark line col file/text"
@@ -3674,8 +3137,6 @@ msgstr ""
"\n"
"пом. Ñ€Ñд. кол. файл/текÑÑ‚"
-#. Highlight title
-#: ../mark.c:789
msgid ""
"\n"
" jump line col file/text"
@@ -3683,9 +3144,6 @@ msgstr ""
"\n"
" точка Ñ€Ñд. Ñтовп. файл/текÑÑ‚"
-# msgstr "E283: "
-#. Highlight title
-#: ../mark.c:831
msgid ""
"\n"
"change line col text"
@@ -3693,117 +3151,60 @@ msgstr ""
"\n"
"змінити Ñ€Ñд. Ñтовп. текÑÑ‚"
-# TODO
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Помітки:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# СпиÑок переходів (від найновіших):\n"
-
-# TODO
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Попередні помітки в файлах (від найновіших):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "Пропущено '>'"
-
-# msgstr "E292: "
-#: ../memfile.c:426
msgid "E293: block was not locked"
msgstr "E293: Блок не було зафікÑовано"
-# msgstr "E293: "
-#: ../memfile.c:799
msgid "E294: Seek error in swap file read"
msgstr "E294: Помилка зміни позиції у файлі обміну"
-#: ../memfile.c:803
msgid "E295: Read error in swap file"
msgstr "E295: Помилка Ð·Ñ‡Ð¸Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ обміну"
-#: ../memfile.c:849
msgid "E296: Seek error in swap file write"
msgstr "E296: Помилка зміни позиції під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу у файл обміну"
-#: ../memfile.c:865
msgid "E297: Write error in swap file"
msgstr "E297: Помилка запиÑу файлу обміну"
-#: ../memfile.c:1036
msgid "E300: Swap file already exists (symlink attack?)"
msgstr "E300: Файл обміну вже Ñ–Ñнує (атака Ñимвольним поÑиланнÑм?)"
-#: ../memline.c:318
msgid "E298: Didn't get block nr 0?"
msgstr "E298: Ðемає блоку 0?"
-#: ../memline.c:361
msgid "E298: Didn't get block nr 1?"
msgstr "E298: Ðемає блоку 1?"
-# msgstr "E298: "
-#: ../memline.c:377
msgid "E298: Didn't get block nr 2?"
msgstr "E298: Ðемає блоку 2?"
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
msgid "E301: Oops, lost the swap file!!!"
msgstr "E301: Ой, втрачено файл обміну!!!"
-# msgstr "E301: "
-#: ../memline.c:477
msgid "E302: Could not rename swap file"
msgstr "E302: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ файлу обміну"
-# msgstr "E302: "
-#: ../memline.c:554
#, c-format
msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
msgstr "E303: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ файл обміну Ð´Ð»Ñ Â«%s», Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ"
-#: ../memline.c:666
msgid "E304: ml_upd_block0(): Didn't get block 0??"
msgstr "E304: ml_upd_block0(): Ðемає блоку 0??"
-#. no swap files found
-#: ../memline.c:830
#, c-format
msgid "E305: No swap file found for %s"
msgstr "E305: Ðе знайдено файлу обміну Ð´Ð»Ñ %s"
-# msgstr "E305: "
-#: ../memline.c:839
msgid "Enter number of swap file to use (0 to quit): "
msgstr "Введіть номер файлу обміну, котрий викориÑтати, (0 Ð´Ð»Ñ Ð²Ð¸Ñ…Ð¾Ð´Ñƒ):"
-#: ../memline.c:879
#, c-format
msgid "E306: Cannot open %s"
msgstr "E306: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ %s"
-#: ../memline.c:897
msgid "Unable to read block 0 from "
msgstr "Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ блок 0 з "
-#: ../memline.c:900
msgid ""
"\n"
"Maybe no changes were made or Vim did not update the swap file."
@@ -3811,28 +3212,22 @@ msgstr ""
"\n"
"Ðапевно, змін не було, або Vim не поновив файл обміну."
-#: ../memline.c:909
msgid " cannot be used with this version of Vim.\n"
msgstr " не можна викориÑтати з цією верÑією Vim.\n"
-#: ../memline.c:911
msgid "Use Vim version 3.0.\n"
msgstr "Знайдіть Vim 3.0\n"
-#: ../memline.c:916
#, c-format
msgid "E307: %s does not look like a Vim swap file"
msgstr "E307: %s не Ñхоже на файл обміну Vim"
-#: ../memline.c:922
msgid " cannot be used on this computer.\n"
msgstr " не можна викориÑтати на цьому комп'ютері.\n"
-#: ../memline.c:924
msgid "The file was created on "
msgstr "Файл було Ñтворено на "
-#: ../memline.c:928
msgid ""
",\n"
"or the file has been damaged."
@@ -3840,89 +3235,67 @@ msgstr ""
",\n"
"або файл було пошкоджено."
-#: ../memline.c:945
msgid " has been damaged (page size is smaller than minimum value).\n"
msgstr " пошкоджений (розмір Ñторінки менший мінімального значеннÑ).\n"
-#: ../memline.c:974
#, c-format
msgid "Using swap file \"%s\""
msgstr "ВикориÑтовуєтьÑÑ Ñ„Ð°Ð¹Ð» обміну «%s»"
-#: ../memline.c:980
#, c-format
msgid "Original file \"%s\""
msgstr "Початковий файл «%s»"
-#: ../memline.c:995
msgid "E308: Warning: Original file may have been changed"
msgstr "E308: ЗаÑтереженнÑ: Можливо, початковий файл було змінено"
-# msgstr "E308: "
-#: ../memline.c:1061
#, c-format
msgid "E309: Unable to read block 1 from %s"
msgstr "E309: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ блок 1 з %s"
-# msgstr "E309: "
-#: ../memline.c:1065
msgid "???MANY LINES MISSING"
msgstr "??? БРÐКУЄ БÐГÐТЬОХ РЯДКІВ"
-#: ../memline.c:1076
msgid "???LINE COUNT WRONG"
msgstr "??? ÐЕПРÐВИЛЬÐРКІЛЬКІСТЬ РЯДКІВ"
-#: ../memline.c:1082
msgid "???EMPTY BLOCK"
msgstr "??? ПОРОЖÐІЙ БЛОК"
-#: ../memline.c:1103
msgid "???LINES MISSING"
msgstr "??? ПРОПУЩЕÐІ РЯДКИ"
-#: ../memline.c:1128
#, c-format
msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
msgstr "E310: Ідентифікатор блоку 1 неправильний (%s не є файлом обміну?)"
-# msgstr "E310: "
-#: ../memline.c:1133
msgid "???BLOCK MISSING"
msgstr "??? ПРОПУЩЕÐО БЛОК"
-#: ../memline.c:1147
msgid "??? from here until ???END lines may be messed up"
msgstr "??? звідÑи Ñ– до `??? КІÐЕЦЬ' Ñ€Ñдки, можливо, Ñплутані"
-#: ../memline.c:1164
msgid "??? from here until ???END lines may have been inserted/deleted"
msgstr "??? звідÑи Ñ– до `??? КІÐЕЦЬ' Ñ€Ñдки, можливо, були додані/знищені"
-#: ../memline.c:1181
msgid "???END"
msgstr "??? КІÐЕЦЬ"
-#: ../memline.c:1238
msgid "E311: Recovery Interrupted"
msgstr "E311: Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿ÐµÑ€ÐµÑ€Ð²Ð°Ð½Ð¾"
-#: ../memline.c:1243
msgid ""
"E312: Errors detected while recovering; look for lines starting with ???"
msgstr ""
"E312: Під Ñ‡Ð°Ñ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ð¹Ð´ÐµÐ½Ð¾ помилки. ПереглÑньте Ñ€Ñдки, що "
"починаютьÑÑ Ð· ???"
-#: ../memline.c:1245
msgid "See \":help E312\" for more information."
msgstr "Див. «:help E312» Ð´Ð»Ñ ÑƒÑ‚Ð¾Ñ‡Ð½ÐµÐ½Ð½Ñ."
-#: ../memline.c:1249
msgid "Recovery completed. You should check if everything is OK."
msgstr "Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð¾, перевірте чи вÑе гаразд."
-#: ../memline.c:1251
msgid ""
"\n"
"(You might want to write out this file under another name\n"
@@ -3930,15 +3303,12 @@ msgstr ""
"\n"
"(Можливо, потрібно запиÑати цей файл під іншою назвою\n"
-#: ../memline.c:1252
msgid "and run diff with the original file to check for changes)"
msgstr "Ñ– запуÑтити diff з оригіналом щоб перевірити зміни)"
-#: ../memline.c:1254
msgid "Recovery completed. Buffer contents equals file contents."
msgstr "Ð’Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð°ÐºÑ–Ð½Ñ‡ÐµÐ½Ð¾. ВміÑÑ‚ буфера Ñпівпадає зі вміÑтом файлу."
-#: ../memline.c:1255
msgid ""
"\n"
"You may want to delete the .swp file now.\n"
@@ -3948,52 +3318,42 @@ msgstr ""
"Можливо, тепер ви хочете знищити файл обміну .swp.\n"
"\n"
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
msgid "Swap files found:"
msgstr "Знайдено файли обміну:"
-#: ../memline.c:1446
msgid " In current directory:\n"
msgstr " В поточному каталозі:\n"
-#: ../memline.c:1448
msgid " Using specified name:\n"
msgstr " ВикориÑтовуючи вказану назву:\n"
-#: ../memline.c:1450
msgid " In directory "
msgstr " У каталозі "
-#: ../memline.c:1465
msgid " -- none --\n"
msgstr " -- жодного --\n"
-#: ../memline.c:1527
msgid " owned by: "
msgstr " влаÑник: "
-#: ../memline.c:1529
msgid " dated: "
msgstr " дата: "
-#: ../memline.c:1532 ../memline.c:3231
msgid " dated: "
msgstr " дата: "
-#: ../memline.c:1548
msgid " [from Vim version 3.0]"
msgstr " [від Vim 3.0]"
-#: ../memline.c:1550
msgid " [does not look like a Vim swap file]"
msgstr " [не Ñхоже на файл обміну]"
-#: ../memline.c:1552
+msgid " [garbled strings (not nul terminated)]"
+msgstr " [пошкоджений текÑÑ‚ (не закінчуєтьÑÑ nul)]"
+
msgid " file name: "
msgstr " назва файлу: "
-#: ../memline.c:1558
msgid ""
"\n"
" modified: "
@@ -4001,15 +3361,12 @@ msgstr ""
"\n"
" змінено: "
-#: ../memline.c:1559
msgid "YES"
msgstr "ТÐК"
-#: ../memline.c:1559
msgid "no"
msgstr "ні"
-#: ../memline.c:1562
msgid ""
"\n"
" user name: "
@@ -4017,11 +3374,9 @@ msgstr ""
"\n"
" кориÑтувач: "
-#: ../memline.c:1568
msgid " host name: "
msgstr " назва вузла: "
-#: ../memline.c:1570
msgid ""
"\n"
" host name: "
@@ -4029,7 +3384,6 @@ msgstr ""
"\n"
" назва вузла: "
-#: ../memline.c:1575
msgid ""
"\n"
" process ID: "
@@ -4037,11 +3391,9 @@ msgstr ""
"\n"
" ID процеÑу: "
-#: ../memline.c:1579
msgid " (still running)"
msgstr " (виконуєтьÑÑ)"
-#: ../memline.c:1586
msgid ""
"\n"
" [not usable on this computer]"
@@ -4049,106 +3401,75 @@ msgstr ""
"\n"
" [непридатний на цьому комп'ютері]"
-#: ../memline.c:1590
msgid " [cannot be read]"
msgstr " [не можна прочитати]"
-#: ../memline.c:1593
msgid " [cannot be opened]"
msgstr " [не можна відкрити]"
-#: ../memline.c:1698
msgid "E313: Cannot preserve, there is no swap file"
msgstr "E313: Ðе вдалоÑÑ Ð·Ð°Ð³Ð¾Ñ‚Ð¾Ð²Ð¸Ñ‚Ð¸, немає файлу обміну"
-# msgstr "E313: "
-#: ../memline.c:1747
msgid "File preserved"
msgstr "Файл збережено"
-#: ../memline.c:1749
msgid "E314: Preserve failed"
msgstr "E314: Ð—Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð½Ðµ вдалоÑÑ"
-# msgstr "E314: "
-#: ../memline.c:1819
#, c-format
msgid "E315: ml_get: invalid lnum: %<PRId64>"
msgstr "E315: ml_get: неправильний lnum: %<PRId64>"
-# msgstr "E315: "
-#: ../memline.c:1851
#, c-format
msgid "E316: ml_get: cannot find line %<PRId64>"
msgstr "E316: ml_get: не знайшов Ñ€Ñдок %<PRId64>"
-# msgstr "E316: "
-#: ../memline.c:2236
msgid "E317: pointer block id wrong 3"
msgstr "E317: Вказівник блоку помилковий 3"
-# msgstr "E317: "
-#: ../memline.c:2311
msgid "stack_idx should be 0"
msgstr "stack_idx має бути рівним 0"
-#: ../memline.c:2369
msgid "E318: Updated too many blocks?"
msgstr "E318: Поновлено забагато блоків?"
-#: ../memline.c:2511
msgid "E317: pointer block id wrong 4"
msgstr "E317: Вказівник блоку помилковий 4"
-#: ../memline.c:2536
msgid "deleted block 1?"
msgstr "блок 1 знищено?"
-#: ../memline.c:2707
#, c-format
msgid "E320: Cannot find line %<PRId64>"
msgstr "E320: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñ€Ñдок %<PRId64>"
-#: ../memline.c:2916
msgid "E317: pointer block id wrong"
msgstr "E317: Вказівник блоку помилковий"
-# msgstr "E317: "
-#: ../memline.c:2930
msgid "pe_line_count is zero"
msgstr "pe_line_count дорівнює 0"
-#: ../memline.c:2955
#, c-format
msgid "E322: line number out of range: %<PRId64> past the end"
msgstr "E322: Ðомер Ñ€Ñдка вийшов за межі: %<PRId64> за кінцем"
-# msgstr "E322: "
-#: ../memline.c:2959
#, c-format
msgid "E323: line count wrong in block %<PRId64>"
msgstr "E323: КількіÑть Ñ€Ñдків у блоці %<PRId64>"
-# msgstr "E323: "
-#: ../memline.c:2999
msgid "Stack size increases"
msgstr "Розмір Ñтеку збільшуєтьÑÑ"
-#: ../memline.c:3038
msgid "E317: pointer block id wrong 2"
msgstr "E317: Вказівник блоку помилковий 2"
-#: ../memline.c:3070
#, c-format
msgid "E773: Symlink loop for \"%s\""
msgstr "E773: Циклічні Ñимвольні поÑÐ¸Ð»Ð°Ð½Ð½Ñ Â«%s»"
-# msgstr "E317: "
-#: ../memline.c:3221
msgid "E325: ATTENTION"
msgstr "E325: УВÐГÐ"
-#: ../memline.c:3222
msgid ""
"\n"
"Found a swap file by the name \""
@@ -4156,39 +3477,29 @@ msgstr ""
"\n"
"Знайдено файл обміну з назвою \""
-#: ../memline.c:3226
msgid "While opening file \""
msgstr "При відкритті файлу \""
-#: ../memline.c:3239
msgid " NEWER than swap file!\n"
msgstr " ÐОВІШИЙ за файл обміну!\n"
-#: ../memline.c:3244
msgid ""
"\n"
"(1) Another program may be editing the same file. If this is the case,\n"
" be careful not to end up with two different instances of the same\n"
-" file when making changes."
+" file when making changes. Quit, or continue with caution.\n"
msgstr ""
"\n"
"(1) Можливо, інша програма вже редагує цей Ñамий файл. Якщо це так,\n"
-" будьте обережні, щоб не залишилиÑÑ Ð´Ð²Ð° різні екземплÑри\n"
-" одного й того Ñамого файлу піÑÐ»Ñ Ð·Ð¼Ñ–Ð½."
+" будьте обережні, щоб не залишилиÑÑ Ð´Ð²Ð° різні екземплÑри одного й того\n"
+" Ñамого файлу піÑÐ»Ñ Ð·Ð¼Ñ–Ð½. Вийдіть чи продовжуйте обережно.\n"
-#: ../memline.c:3245
-msgid " Quit, or continue with caution.\n"
-msgstr " Вийдіть або продовжуйте обережно.\n"
-
-#: ../memline.c:3246
msgid "(2) An edit session for this file crashed.\n"
msgstr "(2) Ð¡ÐµÐ°Ð½Ñ Ñ€ÐµÐ´Ð°Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ†ÑŒÐ¾Ð³Ð¾ файлу зазнав краху.\n"
-#: ../memline.c:3247
msgid " If this is the case, use \":recover\" or \"vim -r "
msgstr " Якщо це Ñправді трапилоÑÑ, Ñпробуйте «:recover» або «vim -r "
-#: ../memline.c:3249
msgid ""
"\"\n"
" to recover the changes (see \":help recovery\").\n"
@@ -4196,11 +3507,9 @@ msgstr ""
"»\n"
" щоб відновити зміни (див. «:help recovery»).\n"
-#: ../memline.c:3250
msgid " If you did this already, delete the swap file \""
msgstr " Якщо ви вже це зробили, знищіть файл обміну «"
-#: ../memline.c:3252
msgid ""
"\"\n"
" to avoid this message.\n"
@@ -4209,23 +3518,18 @@ msgstr ""
" щоб позбутиÑÑ Ñ†ÑŒÐ¾Ð³Ð¾ повідомленнÑ.\n"
"\n"
-#: ../memline.c:3450 ../memline.c:3452
msgid "Swap file \""
msgstr "Файл обміну «"
-#: ../memline.c:3451 ../memline.c:3455
msgid "\" already exists!"
msgstr "» вже Ñ–Ñнує!"
-#: ../memline.c:3457
msgid "VIM - ATTENTION"
msgstr "VIM — УВÐГÐ"
-#: ../memline.c:3459
msgid "Swap file already exists!"
msgstr "Файл обміну вже Ñ–Ñнує!"
-#: ../memline.c:3464
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4239,7 +3543,6 @@ msgstr ""
"&Q:Вийти\n"
"&A:Перервати"
-#: ../memline.c:3467
msgid ""
"&Open Read-Only\n"
"&Edit anyway\n"
@@ -4255,64 +3558,46 @@ msgstr ""
"&Q:Вийти\n"
"&A:Перервати"
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
msgid "E326: Too many swap files found"
msgstr "E326: Знайдено забагато файлів обміну"
-# msgstr "E341: "
-#: ../memory.c:227
+#, c-format
+msgid ""
+"E303: Unable to create directory \"%s\" for swap file, recovery impossible: "
+"%s"
+msgstr ""
+"E303: Ðе вдалоÑÑ Ñтворити каталог «%s» Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ обміну, Ð²Ñ–Ð´Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð½ÐµÐ¼Ð¾Ð¶Ð»Ð¸Ð²Ðµ: "
+"%s"
+
+msgid "Vim: Data too large to fit into virtual memory space\n"
+msgstr "Vim: Даних забагато щоб влізти у віртуальний адреÑний проÑтір\n"
+
#, c-format
msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
msgstr "E342: Забракло пам'Ñті! (потрібно було %<PRIu64> байтів)"
-# msgstr "E326: "
-#: ../menu.c:62
msgid "E327: Part of menu-item path is not sub-menu"
msgstr "E327: ЧаÑтина шлÑху до елемента меню не Ñ” підменю"
-# msgstr "E327: "
-#: ../menu.c:63
msgid "E328: Menu only exists in another mode"
msgstr "E328: Меню може бути тільки в іншому режимі"
-# msgstr "E328: "
-#: ../menu.c:64
#, c-format
msgid "E329: No menu \"%s\""
msgstr "E329: Ðемає меню «%s»"
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
msgid "E792: Empty menu name"
msgstr "E792: ÐŸÐ¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° меню"
-# msgstr "E329: "
-#: ../menu.c:340
msgid "E330: Menu path must not lead to a sub-menu"
msgstr "E330: ШлÑÑ… до меню не повинен веÑти до підменю"
-# msgstr "E330: "
-#: ../menu.c:365
msgid "E331: Must not add menu items directly to menu bar"
msgstr "E331: Ðе можна додавати елементи меню проÑто до верхнього меню"
-# msgstr "E331: "
-#: ../menu.c:370
msgid "E332: Separator cannot be part of a menu path"
msgstr "E332: Роздільник не може бути чаÑтиною шлÑху меню"
-# msgstr "E332: "
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
msgid ""
"\n"
"--- Menus ---"
@@ -4320,78 +3605,48 @@ msgstr ""
"\n"
"--- Меню ---"
-#: ../menu.c:1313
msgid "E333: Menu path must lead to a menu item"
msgstr "E333: ШлÑÑ… повинен веÑти до елемента меню"
-# msgstr "E333: "
-#: ../menu.c:1330
#, c-format
msgid "E334: Menu not found: %s"
msgstr "E334: Меню не знайдено: %s"
-# msgstr "E334: "
-#: ../menu.c:1396
#, c-format
msgid "E335: Menu not defined for %s mode"
msgstr "E335: Ð”Ð»Ñ Ñ€ÐµÐ¶Ð¸Ð¼Ñƒ %s меню не визначено"
-# msgstr "E335: "
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ШлÑÑ… повинен веÑти до підменю"
-
-# msgstr "E336: "
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: Меню не знайдено — перевірте назву"
-
-# msgstr "E337: "
-#: ../message.c:423
#, c-format
msgid "Error detected while processing %s:"
msgstr "ВиÑвлено помилку під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ %s:"
-#: ../message.c:445
#, c-format
msgid "line %4ld:"
msgstr "Ñ€Ñдок %4ld:"
-#: ../message.c:617
#, c-format
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Ðеправильна назва регіÑтру: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "УкраїнізаціÑ: Ðнатолій Сахнік <sakhnik@gmail.com>"
-
-#: ../message.c:986
msgid "Interrupt: "
msgstr "Перервано: "
-#: ../message.c:988
msgid "Press ENTER or type command to continue"
msgstr "ÐатиÑніть ENTER або введіть команду Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ"
-#: ../message.c:1843
#, c-format
msgid "%s line %<PRId64>"
msgstr "%s Ñ€Ñдок %<PRId64>"
-#: ../message.c:2392
msgid "-- More --"
msgstr "-- Ще --"
-#: ../message.c:2398
msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
msgstr " ПРОБІЛ/d/j: вниз на екран/Ñторінку/Ñ€Ñдок, b/u/k: вгору, q: вийти "
-#: ../message.c:3021 ../message.c:3031
msgid "Question"
msgstr "ЗапитаннÑ"
-#: ../message.c:3023
msgid ""
"&Yes\n"
"&No"
@@ -4399,7 +3654,6 @@ msgstr ""
"&Y:Так\n"
"&N:ÐÑ–"
-#: ../message.c:3033
msgid ""
"&Yes\n"
"&No\n"
@@ -4409,7 +3663,6 @@ msgstr ""
"&N:ÐÑ–\n"
"&C:СкаÑувати"
-#: ../message.c:3045
msgid ""
"&Yes\n"
"&No\n"
@@ -4423,178 +3676,158 @@ msgstr ""
"&D:Жодного\n"
"&C:СкаÑувати"
-#: ../message.c:3058
msgid "E766: Insufficient arguments for printf()"
msgstr "E766: ÐедоÑтатньо аргументів Ð´Ð»Ñ printf()"
-#: ../message.c:3119
msgid "E807: Expected Float argument for printf()"
msgstr "E807: ОчікуєтьÑÑ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚ Float Ð´Ð»Ñ printf()"
-#: ../message.c:3873
msgid "E767: Too many arguments to printf()"
msgstr "E767: Забагато аргументів Ð´Ð»Ñ printf()"
-# msgstr "E338: "
-#: ../misc1.c:2256
msgid "W10: Warning: Changing a readonly file"
msgstr "W10: ЗаÑтереженнÑ: ЗмінюєтьÑÑ Ñ„Ð°Ð¹Ð» призначений лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ"
-#: ../misc1.c:2537
msgid "Type number and <Enter> or click with mouse (empty cancels): "
msgstr "Ðаберіть чиÑло й <Enter> чи клацніть мишкою (порожнє ÑкаÑовує): "
-#: ../misc1.c:2539
msgid "Type number and <Enter> (empty cancels): "
msgstr "Ðаберіть чиÑло й <Enter> (порожнє ÑкаÑовує): "
-#: ../misc1.c:2585
msgid "1 more line"
msgstr "додано один Ñ€Ñдок"
-#: ../misc1.c:2588
msgid "1 line less"
msgstr "знищено один Ñ€Ñдок"
-#: ../misc1.c:2593
#, c-format
msgid "%<PRId64> more lines"
msgstr "додано Ñ€Ñдків: %<PRId64>"
-#: ../misc1.c:2596
#, c-format
msgid "%<PRId64> fewer lines"
msgstr "знищено Ñ€Ñдків: %<PRId64>"
-#: ../misc1.c:2599
msgid " (Interrupted)"
msgstr " (Перервано)"
-#: ../misc1.c:2635
msgid "Beep!"
msgstr "Дзень!"
-# msgstr "E342: "
-#: ../misc2.c:738
#, c-format
msgid "Calling shell to execute: \"%s\""
msgstr "ВикликаєтьÑÑ Ð¾Ð±Ð¾Ð»Ð¾Ð½ÐºÐ° щоб виконати: «%s»"
-# msgstr "E348: "
-#: ../normal.c:183
+#, c-format
+msgid "Invalid channel \"%<PRIu64>\""
+msgstr "Ðекоректний канал «%<PRIu64>»"
+
+msgid "Message is not an array"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” маÑивом"
+
+msgid "Message is empty"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ”"
+
+msgid "Message type must be an integer"
+msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¼Ð°Ñ” бути цілим чиÑлом"
+
+msgid "Unknown message type"
+msgstr "Ðевідомий тип повідомленнÑ"
+
+msgid "Request array size should be 4 (request) or 3 (notification)"
+msgstr "Розмір маÑиву запиту має бути 4 (запит) чи 3 (повідомленнÑ)"
+
+msgid "ID must be a positive integer"
+msgstr "ID має бути додатним чиÑлом"
+
+msgid "Method must be a string"
+msgstr "Метод має бути текÑтом"
+
+msgid "Parameters must be an array"
+msgstr "Параметри має бути маÑивом"
+
msgid "E349: No identifier under cursor"
msgstr "E349: Ðемає ідентифікатора над курÑором"
-#: ../normal.c:1866
msgid "E774: 'operatorfunc' is empty"
msgstr "E774: 'operatorfunc' порожнÑ"
-#: ../normal.c:2637
msgid "Warning: terminal cannot highlight"
msgstr "ЗаÑтереженнÑ: Термінал не підтримує кольори"
-#: ../normal.c:2807
msgid "E348: No string under cursor"
msgstr "E348: Ðемає Ñ€Ñдка на курÑорі"
-#: ../normal.c:3937
msgid "E352: Cannot erase folds with current 'foldmethod'"
msgstr "E352: Ðе вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ згортки поточним методом 'foldmethod'"
-#: ../normal.c:5897
msgid "E664: changelist is empty"
msgstr "E664: СпиÑок змін порожній"
-#: ../normal.c:5899
msgid "E662: At start of changelist"
msgstr "E662: Початок ÑпиÑку змін"
-#: ../normal.c:5901
msgid "E663: At end of changelist"
msgstr "E663: Кінець ÑпиÑку змін"
-#: ../normal.c:7053
msgid "Type :quit<Enter> to exit Nvim"
msgstr "Уведіть :quit<Enter> щоб вийти з Vim"
-#: ../ops.c:248
#, c-format
msgid "1 line %sed 1 time"
msgstr "Один Ñ€Ñдок %s-но"
-#: ../ops.c:250
#, c-format
msgid "1 line %sed %d times"
msgstr "Один Ñ€Ñдок %s-но %d разів"
-#: ../ops.c:253
#, c-format
msgid "%<PRId64> lines %sed 1 time"
msgstr "%<PRId64> Ñ€Ñдків %s-но"
-#: ../ops.c:256
#, c-format
msgid "%<PRId64> lines %sed %d times"
msgstr "%<PRId64> Ñ€Ñдків %s-но %d разів"
-#: ../ops.c:592
#, c-format
msgid "%<PRId64> lines to indent... "
msgstr "ЗалишилоÑÑ Ð²Ð¸Ñ€Ñ–Ð²Ð½Ñти %<PRId64> Ñ€Ñдків..."
-#: ../ops.c:634
msgid "1 line indented "
msgstr "ВирівнÑно один Ñ€Ñдок"
-#: ../ops.c:636
#, c-format
msgid "%<PRId64> lines indented "
msgstr "ВирівнÑно Ñ€Ñдків: %<PRId64>"
-#: ../ops.c:938
msgid "E748: No previously used register"
msgstr "E748: РегіÑтри перед цим не вживалиÑÑŒ"
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð°Ð¼'Ñтати; вÑе одно знищити?"
-
-#: ../ops.c:1929
msgid "1 line changed"
msgstr "Один Ñ€Ñдок змінено"
-#: ../ops.c:1931
#, c-format
msgid "%<PRId64> lines changed"
msgstr "Змінено Ñ€Ñдків: %<PRId64>"
-#: ../ops.c:2521
msgid "block of 1 line yanked"
msgstr "Запам'Ñтав блок з одного Ñ€Ñдка"
-#: ../ops.c:2523
msgid "1 line yanked"
msgstr "Запам'Ñтав один Ñ€Ñдок"
-#: ../ops.c:2525
#, c-format
msgid "block of %<PRId64> lines yanked"
msgstr "Запам'Ñтав блок із %<PRId64> Ñ€Ñдків"
-#: ../ops.c:2528
#, c-format
msgid "%<PRId64> lines yanked"
msgstr "Запам'Ñтав Ñ€Ñдків: %<PRId64>"
-#: ../ops.c:2710
#, c-format
msgid "E353: Nothing in register %s"
msgstr "E353: У регіÑтрі %s нічого немає"
-# msgstr "E353: "
-#. Highlight title
-#: ../ops.c:3185
msgid ""
"\n"
"--- Registers ---"
@@ -4602,29 +3835,16 @@ msgstr ""
"\n"
"--- РегіÑтри ---"
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "Ðеправильна назва регіÑтру"
-
-#: ../ops.c:4533
msgid ""
-"\n"
-"# Registers:\n"
+"E883: search pattern and expression register may not contain two or more "
+"lines"
msgstr ""
-"\n"
-"# РегіÑтри:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: Ðевідомий тип регіÑтру %d"
+"E883: шаблон пошуку Ñ– реєÑтр виразу не можуть міÑтити два чи більше Ñ€Ñдків"
-#: ../ops.c:5089
#, c-format
msgid "%<PRId64> Cols; "
msgstr "довж.: %<PRId64>; "
-#: ../ops.c:5097
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4633,7 +3853,6 @@ msgstr ""
"Вибрано %s%<PRId64> з %<PRId64> Ñ€Ñдків; %<PRId64> з %<PRId64> Ñлів; "
"%<PRId64> з %<PRId64> байтів"
-#: ../ops.c:5105
#, c-format
msgid ""
"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
@@ -4642,7 +3861,6 @@ msgstr ""
"Вибрано %s%<PRId64> з %<PRId64> Ñ€Ñдків; %<PRId64> з %<PRId64> Ñлів; "
"%<PRId64> of %<PRId64> Ñимволів; %<PRId64> з %<PRId64> байтів"
-#: ../ops.c:5123
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
@@ -4651,7 +3869,6 @@ msgstr ""
"Колонка %s з %s; Ñ€Ñдок %<PRId64> з %<PRId64>; Ñлово %<PRId64> з %<PRId64>; "
"байт %<PRId64> з %<PRId64>"
-#: ../ops.c:5133
#, c-format
msgid ""
"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
@@ -4660,150 +3877,101 @@ msgstr ""
"Колонка %s з %s; Ñ€Ñдок %<PRId64> з %<PRId64>; Ñлово %<PRId64> з %<PRId64>; "
"Ñимвол %<PRId64> of %<PRId64>; байт %<PRId64> з %<PRId64>"
-#: ../ops.c:5146
#, c-format
msgid "(+%<PRId64> for BOM)"
msgstr "(+%<PRId64> Ð´Ð»Ñ BOM)"
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=Стор. %N"
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "ДÑкуємо за вибір Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
msgid "E518: Unknown option"
msgstr "E518: Ðевідома опціÑ"
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: ÐžÐ¿Ñ†Ñ–Ñ Ð½Ðµ підтримуєтьÑÑ"
-
-#: ../option.c:2740
msgid "E520: Not allowed in a modeline"
msgstr "E520: Ðе дозволено у modeline"
-#: ../option.c:2815
msgid "E846: Key code not set"
msgstr "E846: Код ключа не вÑтановлено"
-#: ../option.c:2924
msgid "E521: Number required after ="
msgstr "E521: ПіÑÐ»Ñ = потрібно вказати чиÑло"
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Ðе знайдено Ñеред можливоÑтей терміналів"
-
-#: ../option.c:3335
#, c-format
msgid "E539: Illegal character <%s>"
msgstr "E539: Ðедозволений Ñимвол <%s>"
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: Ðе вдалоÑÑ Ñпорожнити 'term'"
+#, c-format
+msgid "For option %s"
+msgstr "Ð”Ð»Ñ Ð¾Ð¿Ñ†Ñ–Ñ— %s"
-#: ../option.c:3885
msgid "E589: 'backupext' and 'patchmode' are equal"
msgstr "E589: Опції 'backupext' і 'patchmode' однакові"
-#: ../option.c:3964
msgid "E834: Conflicts with value of 'listchars'"
msgstr "E834: Конфліктує із значеннÑм 'listchars'"
-#: ../option.c:3966
msgid "E835: Conflicts with value of 'fillchars'"
msgstr "E835: Конфліктує із значеннÑм 'fillchars'"
-#: ../option.c:4163
msgid "E524: Missing colon"
msgstr "E524: Бракує двокрапки"
-#: ../option.c:4165
msgid "E525: Zero length string"
msgstr "E525: РÑдок порожній"
-#: ../option.c:4220
#, c-format
msgid "E526: Missing number after <%s>"
msgstr "E526: ПіÑÐ»Ñ <%s> бракує чиÑла"
-#: ../option.c:4232
msgid "E527: Missing comma"
msgstr "E527: Бракує коми"
-#: ../option.c:4239
msgid "E528: Must specify a ' value"
msgstr "E528: Потрібно вказати Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ '"
-#: ../option.c:4271
msgid "E595: contains unprintable or wide character"
msgstr "E595: МіÑтить недруковні або розширені Ñимволи"
-#: ../option.c:4469
#, c-format
msgid "E535: Illegal character after <%c>"
msgstr "E535: Ðедозволений Ñимвол піÑÐ»Ñ <%c>"
-#: ../option.c:4534
msgid "E536: comma required"
msgstr "E536: Потрібна кома"
-#: ../option.c:4543
#, c-format
msgid "E537: 'commentstring' must be empty or contain %s"
msgstr "E537: 'commentstring' має бути порожньою чи міÑтити %s"
-#: ../option.c:4928
msgid "E540: Unclosed expression sequence"
msgstr "E540: ПоÑлідовніÑть виразів не завершено"
-#: ../option.c:4932
msgid "E541: too many items"
msgstr "E541: Забагато елементів"
-#: ../option.c:4934
msgid "E542: unbalanced groups"
msgstr "E542: Групи не збаланÑовано"
-#: ../option.c:5148
msgid "E590: A preview window already exists"
msgstr "E590: Вікно переглÑду вже Ñ–Ñнує"
-#: ../option.c:5311
msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
msgstr ""
"W17: Ð”Ð»Ñ Ð°Ñ€Ð°Ð±Ñької мови потрібне UTF-8, виконайте ':set encoding=utf-8'"
-#: ../option.c:5623
#, c-format
msgid "E593: Need at least %d lines"
msgstr "E593: Потрібно щонайменше %d Ñ€Ñдків"
-#: ../option.c:5631
#, c-format
msgid "E594: Need at least %d columns"
msgstr "E594: Потрібно щонайменше %d Ñтовпців"
-#: ../option.c:6011
#, c-format
msgid "E355: Unknown option: %s"
msgstr "E355: Ðевідома опціÑ: %s"
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
#, c-format
msgid "E521: Number required: &%s = '%s'"
msgstr "E521: Потрібно вказати Number: &%s = '%s'"
-# msgstr "E355: "
-#: ../option.c:6149
msgid ""
"\n"
"--- Terminal codes ---"
@@ -4811,7 +3979,6 @@ msgstr ""
"\n"
"--- Коди терміналу ---"
-#: ../option.c:6151
msgid ""
"\n"
"--- Global option values ---"
@@ -4819,7 +3986,6 @@ msgstr ""
"\n"
"--- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð³Ð°Ð»ÑŒÐ½Ð¸Ñ… опцій ---"
-#: ../option.c:6153
msgid ""
"\n"
"--- Local option values ---"
@@ -4827,7 +3993,6 @@ msgstr ""
"\n"
"--- Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¸Ñ… опцій ---"
-#: ../option.c:6155
msgid ""
"\n"
"--- Options ---"
@@ -4835,40 +4000,42 @@ msgstr ""
"\n"
"--- Опції ---"
-#: ../option.c:6816
msgid "E356: get_varp ERROR"
msgstr "E356: Помилка get_varp"
-# msgstr "E356: "
-#: ../option.c:7696
#, c-format
msgid "E357: 'langmap': Matching character missing for %s"
msgstr "E357: 'langmap': Ð”Ð»Ñ Ñимволу %s немає пари"
-# msgstr "E357: "
-#: ../option.c:7715
#, c-format
msgid "E358: 'langmap': Extra characters after semicolon: %s"
msgstr "E358: 'langmap': Зайві Ñимволи піÑÐ»Ñ `;': %s"
-#: ../os/shell.c:194
+#, c-format
+msgid "dlerror = \"%s\""
+msgstr "dlerror = «%s»"
+
+msgid "Vim: Error reading input, exiting...\n"
+msgstr "Vim: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð²Ð¾Ð´Ñƒ, робота завершуєтьÑÑ...\n"
+
msgid ""
"\n"
-"Cannot execute shell "
+"shell returned "
msgstr ""
"\n"
-"Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити оболонку"
+"оболонка повернула: "
-# msgstr "E362: "
-#: ../os/shell.c:439
msgid ""
"\n"
-"shell returned "
+"Cannot execute "
msgstr ""
"\n"
-"оболонка повернула: "
+"Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ "
+
+#, c-format
+msgid "E5677: Error writing input to shell-command: %s"
+msgstr "E5677: Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати на вхід команди оболонки: %s"
-#: ../os_unix.c:465 ../os_unix.c:471
msgid ""
"\n"
"Could not get security context for "
@@ -4876,7 +4043,6 @@ msgstr ""
"\n"
"Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ контекÑÑ‚ безпеки Ð´Ð»Ñ "
-#: ../os_unix.c:479
msgid ""
"\n"
"Could not set security context for "
@@ -4884,234 +4050,173 @@ msgstr ""
"\n"
"Ðе вдалоÑÑ Ð²Ñтановити контекÑÑ‚ безпеки Ð´Ð»Ñ "
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = «%s»"
-
-# msgstr "E446: "
-#: ../path.c:1449
#, c-format
msgid "E447: Can't find file \"%s\" in path"
msgstr "E447: Файл «%s» не знайдено у шлÑху пошуку"
-# msgstr "E371: "
-#: ../quickfix.c:359
#, c-format
msgid "E372: Too many %%%c in format string"
msgstr "E372: Забагато %%%c у Ñ€Ñдку формату"
-# msgstr "E372: "
-#: ../quickfix.c:371
#, c-format
msgid "E373: Unexpected %%%c in format string"
msgstr "E373: Ðеочікуваний `%%%c' у Ñ€Ñдку формату"
-# msgstr "E373: "
-#: ../quickfix.c:420
msgid "E374: Missing ] in format string"
msgstr "E374: Пропущено ] у Ñ€Ñдку формату"
-# msgstr "E374: "
-#: ../quickfix.c:431
#, c-format
msgid "E375: Unsupported %%%c in format string"
msgstr "E375: %%%c у Ñ€Ñдку формату не підтримуєтьÑÑ"
-# msgstr "E375: "
-#: ../quickfix.c:448
#, c-format
msgid "E376: Invalid %%%c in format string prefix"
msgstr "E376: Помилковий `%%%c' у префікÑÑ– Ñ€Ñдку формату"
-# msgstr "E376: "
-#: ../quickfix.c:454
#, c-format
msgid "E377: Invalid %%%c in format string"
msgstr "E377: Помилковий `%%%c' у Ñ€Ñдку формату"
-# msgstr "E377: "
-#. nothing found
-#: ../quickfix.c:477
msgid "E378: 'errorformat' contains no pattern"
msgstr "E378: 'errorformat' не міÑтить зразок"
-# msgstr "E378: "
-#: ../quickfix.c:695
msgid "E379: Missing or empty directory name"
msgstr "E379: Пропущена чи Ð¿Ð¾Ñ€Ð¾Ð¶Ð½Ñ Ð½Ð°Ð·Ð²Ð° каталогу"
-#: ../quickfix.c:1305
msgid "E553: No more items"
msgstr "E553: Ðемає більше елементів"
-#: ../quickfix.c:1674
+msgid "E924: Current window was closed"
+msgstr "E924: Ðктивне вікно було закрито"
+
#, c-format
msgid "(%d of %d)%s%s: "
msgstr "(%d з %d)%s%s: "
-#: ../quickfix.c:1676
msgid " (line deleted)"
msgstr " (Ñ€Ñдок знищено)"
-#: ../quickfix.c:1863
msgid "E380: At bottom of quickfix stack"
msgstr "E380: Дно Ñтеку виправлень"
-#: ../quickfix.c:1869
msgid "E381: At top of quickfix stack"
msgstr "E381: Вершина Ñтеку виправлень"
-#: ../quickfix.c:1880
#, c-format
msgid "error list %d of %d; %d errors"
msgstr "ÑпиÑок помилок %d з %d; %d помилок"
-#: ../quickfix.c:2427
msgid "E382: Cannot write, 'buftype' option is set"
msgstr "E382: Ðе можу запиÑати, вказана Ð¾Ð¿Ñ†Ñ–Ñ 'buftype'"
-#: ../quickfix.c:2812
msgid "E683: File name missing or invalid pattern"
msgstr "E683: Пропущено назву файлу чи некоректний шаблон"
-#: ../quickfix.c:2911
#, c-format
msgid "Cannot open file \"%s\""
msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл «%s»"
-#: ../quickfix.c:3429
msgid "E681: Buffer is not loaded"
msgstr "E681: Буфер не завантажено"
-#: ../quickfix.c:3487
msgid "E777: String or List expected"
msgstr "E777: ОчікуєтьÑÑ String чи List"
-#: ../regexp.c:359
#, c-format
msgid "E369: invalid item in %s%%[]"
msgstr "E369: Ðекоректний елемент у %s%%[]"
-#: ../regexp.c:374
#, c-format
msgid "E769: Missing ] after %s["
msgstr "E769: Бракує ] піÑÐ»Ñ %s["
-#: ../regexp.c:375
#, c-format
msgid "E53: Unmatched %s%%("
msgstr "E53: Ðемає пари %s%%("
-#: ../regexp.c:376
#, c-format
msgid "E54: Unmatched %s("
msgstr "E54: Ðемає пари %s("
-#: ../regexp.c:377
#, c-format
msgid "E55: Unmatched %s)"
msgstr "E55: Ðемає пари %s)"
-# msgstr "E406: "
-#: ../regexp.c:378
msgid "E66: \\z( not allowed here"
msgstr "E66: \\z( тут не дозволено"
-# msgstr "E406: "
-#: ../regexp.c:379
msgid "E67: \\z1 et al. not allowed here"
msgstr "E67: \\z1 та ін. тут не дозволено"
-#: ../regexp.c:380
#, c-format
msgid "E69: Missing ] after %s%%["
msgstr "E69: Пропущено ] піÑÐ»Ñ %s%%["
-#: ../regexp.c:381
#, c-format
msgid "E70: Empty %s%%[]"
msgstr "E70: %s%%[] порожній"
-# msgstr "E382: "
-#: ../regexp.c:1209 ../regexp.c:1224
msgid "E339: Pattern too long"
msgstr "E339: Зразок занадто довгий"
-#: ../regexp.c:1371
msgid "E50: Too many \\z("
msgstr "E50: Забагато \\z("
-#: ../regexp.c:1378
#, c-format
msgid "E51: Too many %s("
msgstr "E51: Забагато %s("
-#: ../regexp.c:1427
msgid "E52: Unmatched \\z("
msgstr "E52: Ðемає пари \\z("
-#: ../regexp.c:1637
#, c-format
msgid "E59: invalid character after %s@"
msgstr "E59: Ðедозволений Ñимвол піÑÐ»Ñ %s@"
-#: ../regexp.c:1672
#, c-format
msgid "E60: Too many complex %s{...}s"
msgstr "E60: Забагато Ñкладних %s{...}"
-# msgstr "E339: "
-#: ../regexp.c:1687
#, c-format
msgid "E61: Nested %s*"
msgstr "E61: Вкладені %s*"
-# msgstr "E61: "
-#: ../regexp.c:1690
#, c-format
msgid "E62: Nested %s%c"
msgstr "E62: Вкладені %s%c"
-#: ../regexp.c:1800
msgid "E63: invalid use of \\_"
msgstr "E63: Ðекоректно вжито \\_"
-# msgstr "E62: "
-#: ../regexp.c:1850
#, c-format
msgid "E64: %s%c follows nothing"
msgstr "E64: ПіÑÐ»Ñ %s%c нічого немає"
-#: ../regexp.c:1902
msgid "E65: Illegal back reference"
msgstr "E65: Ðекоректне зворотнє поÑиланнÑ"
-#: ../regexp.c:1943
msgid "E68: Invalid character after \\z"
msgstr "E68: Ðеправильний Ñимвол піÑÐ»Ñ \\z"
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
#, c-format
msgid "E678: Invalid character after %s%%[dxouU]"
msgstr "E678: Ðедозволений Ñимвол піÑÐ»Ñ %s%%[dxouU]"
-#: ../regexp.c:2107
#, c-format
msgid "E71: Invalid character after %s%%"
msgstr "E71: Ðедозволений Ñимвол піÑÐ»Ñ %s%%"
-# msgstr "E64: "
-#: ../regexp.c:3017
+#, c-format
+msgid "E888: (NFA regexp) cannot repeat %s"
+msgstr "E888: (NFA regexp) неможливо повторити %s"
+
#, c-format
msgid "E554: Syntax error in %s{...}"
msgstr "E554: СинтакÑична помилка в %s{...}"
-#: ../regexp.c:3805
msgid "External submatches:\n"
msgstr "Зовнішні під-збіги:\n"
-#: ../regexp.c:7022
msgid ""
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
"used "
@@ -5119,345 +4224,384 @@ msgstr ""
"E864: піÑÐ»Ñ \\%#= може бути тільки 0, 1, or 2. Буде викориÑтано автоматичний "
"механізм "
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr "E865: (NFA) Зарано трапивÑÑ ÐºÑ–Ð½ÐµÑ†ÑŒ регулÑрного виразу"
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr "E866: (NFA regexp) Ðе на міÑці %c"
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr "E867: (NFA) Ðевідомий оператор '\\z%c'"
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr "E867: (NFA) Ðевідомий оператор '\\%%%c'"
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr "E869: (NFA) Ðевідомий оператор '\\@%c'"
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr "E870: (NFA regexp) Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ межі повтореннÑ"
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr "E871: (NFA regexp) Мульти не може бути за мульти!"
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr "E872: (NFA regexp) Забагато '('"
-
-#: ../regexp_nfa.c:2042
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E879: (NFA regexp) Забагато \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr "E873: (NFA regexp) помилка належного припиненнÑ"
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr "E874: (NFA) Стек порожній!"
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-"E875: (NFA regexp) (Під Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð· поÑÑ‚Ñ„Ñ–ÐºÑ Ñƒ NFA) залишилоÑÑ "
-"забагато Ñтанів у Ñтеку"
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr "E876: (NFA regexp) ÐедоÑтатньо пам’Ñті, щоб зберегти веÑÑŒ NFA "
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-"Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ тимчаÑовий файл журналу Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу, показуєтьÑÑ Ð½Ð° "
-"stderr ... "
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr "(NFA) ÐЕ ВДÐЛОСЯ ВІДКРИТИ %s!"
+msgid "Switching to backtracking RE engine for pattern: "
+msgstr "ÐŸÐµÑ€ÐµÐ¼Ð¸ÐºÐ°Ð½Ð½Ñ Ð´Ð¾ проÑтого Ñ€ÑƒÑˆÑ–Ñ Ñ€ÐµÐ³ÑƒÐ»Ñрних виразів: "
-#: ../regexp_nfa.c:6049
-msgid "Could not open temporary log file for writing "
-msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ тимчаÑовий файл журналу Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу "
+msgid " TERMINAL"
+msgstr " ТЕРМІÐÐЛ"
-#: ../screen.c:7435
msgid " VREPLACE"
msgstr " ВІРТ ЗÐМІÐÐ"
-#: ../screen.c:7437
msgid " REPLACE"
msgstr " ЗÐМІÐÐ"
-#: ../screen.c:7440
msgid " REVERSE"
msgstr " ÐÐВИВОРІТ"
-#: ../screen.c:7441
msgid " INSERT"
msgstr " ВСТÐВКÐ"
-#: ../screen.c:7443
msgid " (insert)"
msgstr " (вÑтавка)"
-#: ../screen.c:7445
msgid " (replace)"
msgstr " (заміна)"
-#: ../screen.c:7447
msgid " (vreplace)"
msgstr " (вірт заміна)"
-#: ../screen.c:7449
msgid " Hebrew"
msgstr " Іврит"
-#: ../screen.c:7454
msgid " Arabic"
msgstr " ÐрабÑька"
-#: ../screen.c:7456
msgid " (lang)"
msgstr " (мова)"
-#: ../screen.c:7459
msgid " (paste)"
msgstr " (клей)"
-#: ../screen.c:7469
msgid " VISUAL"
msgstr " ВИБІР"
-#: ../screen.c:7470
msgid " VISUAL LINE"
msgstr " ВИБІР РЯДКІВ"
-#: ../screen.c:7471
msgid " VISUAL BLOCK"
msgstr " ВИБІР БЛОКУ"
-#: ../screen.c:7472
msgid " SELECT"
msgstr " ВИДІЛЕÐÐЯ"
-#: ../screen.c:7473
msgid " SELECT LINE"
msgstr " ВИДІЛЕÐÐЯ РЯДКІВ"
-#: ../screen.c:7474
msgid " SELECT BLOCK"
msgstr " ВИДІЛЕÐÐЯ БЛОКУ"
-#: ../screen.c:7486 ../screen.c:7541
msgid "recording"
msgstr "йде запиÑ"
-#: ../search.c:487
#, c-format
msgid "E383: Invalid search string: %s"
msgstr "E383: Ðеправильний зразок Ð´Ð»Ñ Ð¿Ð¾ÑˆÑƒÐºÑƒ: %s"
-#: ../search.c:832
#, c-format
msgid "E384: search hit TOP without match for: %s"
msgstr "E384: Пошук дійшов до ПОЧÐТКУ без збігів з %s"
-#: ../search.c:835
#, c-format
msgid "E385: search hit BOTTOM without match for: %s"
msgstr "E385: Пошук дійшов до КІÐЦЯ без збігів з %s"
-#: ../search.c:1200
msgid "E386: Expected '?' or '/' after ';'"
msgstr "E386: ПіÑÐ»Ñ `;' має бути `?' або `/'"
-# msgstr "E386: "
-#: ../search.c:4085
msgid " (includes previously listed match)"
msgstr " (разом з попередніми збігами)"
-#. cursor at status line
-#: ../search.c:4104
msgid "--- Included files "
msgstr "--- Включені файли "
-#: ../search.c:4106
msgid "not found "
msgstr "не знайдено "
-#: ../search.c:4107
msgid "in path ---\n"
msgstr "у шлÑху пошуку ---\n"
-#: ../search.c:4168
msgid " (Already listed)"
msgstr " (Уже у ÑпиÑку)"
-#: ../search.c:4170
msgid " NOT FOUND"
msgstr " ÐЕ ЗÐÐЙДЕÐО"
-#: ../search.c:4211
#, c-format
msgid "Scanning included file: %s"
msgstr "Пошук у включеному файлі: %s"
-#: ../search.c:4216
#, c-format
msgid "Searching included file %s"
msgstr "ШукаєтьÑÑ Ñƒ включеному файлі %s"
-#: ../search.c:4405
msgid "E387: Match is on current line"
msgstr "E387: Збіг у поточному Ñ€Ñдку"
-#: ../search.c:4517
msgid "All included files were found"
msgstr "Були знайдені вÑÑ– включені файли"
-#: ../search.c:4519
msgid "No included files"
msgstr "Жодного включеного файлу"
-#: ../search.c:4527
msgid "E388: Couldn't find definition"
msgstr "E388: Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ знайдено"
-#: ../search.c:4529
msgid "E389: Couldn't find pattern"
msgstr "E389: Зразок не знайдено"
-#: ../search.c:4668
-msgid "Substitute "
-msgstr "Заміна "
+msgid "too few bytes read"
+msgstr "прочитано замало байтів"
+
+#, c-format
+msgid "System error while skipping in ShaDa file: %s"
+msgstr "СиÑтемна помилка при пропуÑканні у файлі ShaDa: %s"
-#: ../search.c:4681
#, c-format
msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
+"Error while reading ShaDa file: last entry specified that it occupies "
+"%<PRIu64> bytes, but file ended earlier"
msgstr ""
-"\n"
-"# ОÑÑ‚. %sЗразок пошуку:\n"
-"~"
+"Помилка при читанні файлу ShaDa: оÑтаннє поле зазначило, що воно займає "
+"%<PRIu64> байтів, але файл закінчивÑÑ Ñ€Ð°Ð½Ñ–ÑˆÐµ"
+
+#, c-format
+msgid "System error while closing ShaDa file: %s"
+msgstr "СиÑтемна помилка при закритті файлу ShaDa: %s"
+
+#, c-format
+msgid "System error while writing ShaDa file: %s"
+msgstr "СиÑтемна помилка при читанні з файлу ShaDa: %s"
+
+#, c-format
+msgid "Reading ShaDa file \"%s\"%s%s%s"
+msgstr "ЗчитуєтьÑÑ Ñ„Ð°Ð¹Ð» ShaDa: «%s»%s%s%s"
+
+msgid " info"
+msgstr " інформаціÑ"
+
+msgid " marks"
+msgstr " позначки"
+
+msgid " oldfiles"
+msgstr " Ñтарі файли"
+
+msgid " FAILED"
+msgstr " ÐЕ ВДÐЛОСЯ"
+
+#, c-format
+msgid "System error while opening ShaDa file %s for reading: %s"
+msgstr "СиÑтемна помилка при відкритті файлу ShaDa %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: %s"
+
+msgid "additional elements of ShaDa "
+msgstr "додаткові елементи ShaDa "
+
+msgid "additional data of ShaDa "
+msgstr "додаткові дані ShaDa "
+
+#, c-format
+msgid "Failed to write variable %s"
+msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати змінну %s"
+
+#, c-format
+msgid ""
+"Failed to parse ShaDa file due to a msgpack parser error at position "
+"%<PRIu64>"
+msgstr ""
+"Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ файл ShaDa через помилку розбору msgpack у позиції "
+"%<PRIu64>"
+
+#, c-format
+msgid ""
+"Failed to parse ShaDa file: incomplete msgpack string at position %<PRIu64>"
+msgstr ""
+"Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ файл ShaDa: неповний текÑÑ‚ msgpack у позиції %<PRIu64>"
+
+#, c-format
+msgid ""
+"Failed to parse ShaDa file: extra bytes in msgpack string at position "
+"%<PRIu64>"
+msgstr ""
+"Ðе вдалоÑÑ Ñ€Ð¾Ð·Ñ–Ð±Ñ€Ð°Ñ‚Ð¸ файл ShaDa: зайві байти у текÑті msgpack у позиції "
+"%<PRIu64>"
+
+#, c-format
+msgid ""
+"System error while opening ShaDa file %s for reading to merge before writing "
+"it: %s"
+msgstr ""
+"СиÑтемна помилка при відкритті файлу ShaDa %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ‰Ð¾Ð± виконати Ð·Ð»Ð¸Ñ‚Ñ‚Ñ "
+"перед запиÑом: %s"
+
+#, c-format
+msgid "E929: All %s.tmp.X files exist, cannot write ShaDa file!"
+msgstr "E929: УÑÑ– файли %s.tmp.X зайнÑто, неможливо запиÑати файл ShaDa!"
+
+#, c-format
+msgid "System error while opening temporary ShaDa file %s for writing: %s"
+msgstr "СиÑтемна помилка при відкритті тимчаÑового файлу ShaDa %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: %s"
+
+#, c-format
+msgid "Failed to create directory %s for writing ShaDa file: %s"
+msgstr "Ðе вдалоÑÑ Ñтворити каталог %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу файлу ShaDa: %s"
+
+#, c-format
+msgid "System error while opening ShaDa file %s for writing: %s"
+msgstr "СиÑтемна помилка при відкритті файлу ShaDa %s Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: %s"
+
+#, c-format
+msgid "Writing ShaDa file \"%s\""
+msgstr "ЗапиÑуєтьÑÑ Ñ„Ð°Ð¹Ð» ShaDa «%s»"
+
+#, c-format
+msgid "Failed setting uid and gid for file %s: %s"
+msgstr "Ðе вдалоÑÑ Ð²Ñтановити uid Ñ– gid Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ %s: %s"
+
+#, c-format
+msgid "E137: ShaDa file is not writable: %s"
+msgstr "E137: Ðе дозволено Ð·Ð°Ð¿Ð¸Ñ Ñƒ файл ShaDa: %s"
+
+#, c-format
+msgid "Can't rename ShaDa file from %s to %s!"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ файл ShaDa з %s у %s!"
+
+#, c-format
+msgid "Did not rename %s because %s does not looks like a ShaDa file"
+msgstr "Ðе перейменував %s, тому що %s не Ñхожий на файл ShaDa"
+
+#, c-format
+msgid "Did not rename %s to %s because there were errors during writing it"
+msgstr "Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ %s у %s через помилки під Ñ‡Ð°Ñ Ð·Ð°Ð¿Ð¸Ñу"
+
+#, c-format
+msgid "Do not forget to remove %s or rename it manually to %s."
+msgstr "Ðе забудьте знищити %s чи перейменувати його ÑамоÑтійно у %s."
+
+#, c-format
+msgid "System error while reading ShaDa file: %s"
+msgstr "СиÑтемна помилка при читанні файлу ShaDa: %s"
+
+#, c-format
+msgid "System error while reading integer from ShaDa file: %s"
+msgstr "СиÑтемна помилка при читанні цілого чиÑла з файлу ShaDa: %s"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: expected positive integer at position "
+"%<PRIu64>, but got nothing"
+msgstr ""
+"Помилка при читанні файлу ShaDa: очікувалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð½Ðµ чиÑло у позиції "
+"%<PRIu64>, але нічого немає"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: expected positive integer at position "
+"%<PRIu64>"
+msgstr ""
+"Помилка при читанні файлу ShaDa: очікувалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð½Ðµ чиÑло у позиції "
+"%<PRIu64>"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: there is an item at position %<PRIu64> that "
+"must not be there: Missing items are for internal uses only"
+msgstr ""
+"Помилка при читанні файлу ShaDa: неочікуваний елемент у позиції %<PRIu64>:"
+" Пропущені елементи тільки Ð´Ð»Ñ Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½ÑŒÐ¾Ð³Ð¾ вжитку"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: buffer list at position %<PRIu64> contains "
+"entry that is not a dictionary"
+msgstr ""
+"Помилка при читанні файлу ShaDa: ÑпиÑок буферів у позиції %<PRIu64> міÑтить "
+"поле, Ñке не Ñ” Ñловником"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: buffer list at position %<PRIu64> contains "
+"entry with invalid line number"
+msgstr ""
+"Помилка при читанні файлу ShaDa: ÑпиÑок буферів у позиції %<PRIu64> міÑтить "
+"поле з некоректним номером Ñ€Ñдка"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: buffer list at position %<PRIu64> contains "
+"entry with invalid column number"
+msgstr ""
+"Помилка при читанні файлу ShaDa: ÑпиÑок буферів у позиції %<PRIu64> міÑтить "
+"поле з некоректним номером ÑтовпцÑ"
+
+#, c-format
+msgid ""
+"Error while reading ShaDa file: buffer list at position %<PRIu64> contains "
+"entry that does not have a file name"
+msgstr ""
+"Помилка при читанні файлу ShaDa: ÑпиÑок буферів у позиції %<PRIu64> міÑтить "
+"поле, Ñке не має назву файлу"
-#: ../spell.c:951
msgid "E759: Format error in spell file"
msgstr "E759: Помилка формату у файлі орфографії"
-# msgstr "E364: "
-#: ../spell.c:952
msgid "E758: Truncated spell file"
msgstr "E758: Обірваний файл орфографії"
-#: ../spell.c:953
#, c-format
msgid "Trailing text in %s line %d: %s"
msgstr "Зайвий текÑÑ‚ у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:954
#, c-format
msgid "Affix name too long in %s line %d: %s"
msgstr "Ðазва афікÑу завелика у %s у Ñ€Ñдку %d: %s"
-# msgstr "E430: "
-#: ../spell.c:955
msgid "E761: Format error in affix file FOL, LOW or UPP"
msgstr "E761: Помилка формату у файлі афікÑів FOL, LOW чи UPP"
-#: ../spell.c:957
msgid "E762: Character in FOL, LOW or UPP is out of range"
msgstr "E762: Символ у FOL, LOW чи UPP поза межами"
-#: ../spell.c:958
msgid "Compressing word tree..."
msgstr "СтиÑкуєтьÑÑ Ð´ÐµÑ€ÐµÐ²Ð¾ Ñлів..."
-#: ../spell.c:1951
msgid "E756: Spell checking is not enabled"
msgstr "E756: Перевірка орфографії не дозволена"
-#: ../spell.c:2249
#, c-format
msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
msgstr ""
"ЗаÑтереженнÑ: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑпиÑок Ñлів «%s.%s.spl» чи «%s.ascii.spl»"
-#: ../spell.c:2473
#, c-format
msgid "Reading spell file \"%s\""
msgstr "ЧитаєтьÑÑ Ñ„Ð°Ð¹Ð» орфографії «%s»"
-#: ../spell.c:2496
msgid "E757: This does not look like a spell file"
msgstr "E757: Ðе Ñхоже на файл орфографії"
-#: ../spell.c:2501
msgid "E771: Old spell file, needs to be updated"
msgstr "E771: Файл орфографії Ñтарий, треба поновити"
-#: ../spell.c:2504
msgid "E772: Spell file is for newer version of Vim"
msgstr "E772: Файл орфографії призначений Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ нової верÑÑ–Ñ— Vim"
-#: ../spell.c:2602
msgid "E770: Unsupported section in spell file"
msgstr "E770: Ðедозволена ÑÐµÐºÑ†Ñ–Ñ Ñƒ файлі орфографії"
-#: ../spell.c:3762
#, c-format
msgid "Warning: region %s not supported"
msgstr "ЗаÑтереженнÑ: регіон %s не підтримуєтьÑÑ"
-#: ../spell.c:4550
#, c-format
msgid "Reading affix file %s ..."
msgstr "ЧитаєтьÑÑ Ñ„Ð°Ð¹Ð» афікÑів %s ..."
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
#, c-format
msgid "Conversion failure for word in %s line %d: %s"
msgstr "Помилка Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñлова у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4630 ../spell.c:6170
#, c-format
msgid "Conversion in %s not supported: from %s to %s"
msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñƒ %s не підтримуєтьÑÑ: з %s до %s"
-#: ../spell.c:4642
#, c-format
msgid "Invalid value for FLAG in %s line %d: %s"
msgstr "Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ FLAG у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4655
#, c-format
msgid "FLAG after using flags in %s line %d: %s"
msgstr "FLAG піÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ñ€Ð¸ÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ–Ð² у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4723
#, c-format
msgid ""
"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
@@ -5466,7 +4610,6 @@ msgstr ""
"Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDFORBIDFLAG піÑÐ»Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ PFX може дати неправильний "
"результат у %s у Ñ€Ñдку %d"
-#: ../spell.c:4731
#, c-format
msgid ""
"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
@@ -5475,382 +4618,299 @@ msgstr ""
"Ð’Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDPERMITFLAG піÑÐ»Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ñƒ PFX можу дати неправильний "
"результат у %s у Ñ€Ñдку %d"
-#: ../spell.c:4747
#, c-format
msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
msgstr "Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDRULES у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4771
#, c-format
msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
msgstr "Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDWORDMAX у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4777
#, c-format
msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
msgstr "Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDMIN у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4783
#, c-format
msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
msgstr "Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ COMPOUNDSYLMAX у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4795
#, c-format
msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
msgstr "Ðеправильне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ CHECKCOMPOUNDPATTERN у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4847
#, c-format
msgid "Different combining flag in continued affix block in %s line %d: %s"
msgstr ""
"Інший прапорець комбінації у продовженні блоку афікÑів у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4850
#, c-format
msgid "Duplicate affix in %s line %d: %s"
msgstr "Подвійний Ð°Ñ„Ñ–ÐºÑ Ñƒ %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4871
#, c-format
msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGESTin %s "
"line %d: %s"
msgstr ""
-"ÐÑ„Ñ–ÐºÑ Ñ‚Ð°ÐºÐ¾Ð¶ викориÑтовуєтьÑÑ Ð´Ð»Ñ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/"
-"NOSUGGEST у %s у Ñ€Ñдку %d: %s"
+"ÐÑ„Ñ–ÐºÑ Ñ‚Ð°ÐºÐ¾Ð¶ вживаєтьÑÑ Ð´Ð»Ñ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST"
+" у %s Ñ€Ñдок %d: %s"
-#: ../spell.c:4893
#, c-format
msgid "Expected Y or N in %s line %d: %s"
msgstr "Треба Y чи N у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:4968
#, c-format
msgid "Broken condition in %s line %d: %s"
msgstr "Ðепридатна умова у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5091
#, c-format
msgid "Expected REP(SAL) count in %s line %d"
msgstr "Треба кількіÑть REP(SAL) у %s у Ñ€Ñдку %d"
-#: ../spell.c:5120
#, c-format
msgid "Expected MAP count in %s line %d"
msgstr "Треба кількіÑть MAP у %s у Ñ€Ñдку %d"
-#: ../spell.c:5132
#, c-format
msgid "Duplicate character in MAP in %s line %d"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñимволу у MAP у %s у Ñ€Ñдку %d"
-#: ../spell.c:5176
#, c-format
msgid "Unrecognized or duplicate item in %s line %d: %s"
msgstr "Ðерозпізнаний чи повторний елемент у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5197
#, c-format
msgid "Missing FOL/LOW/UPP line in %s"
msgstr "Пропущено Ñ€Ñдок FOL/LOW/UPP у %s"
-#: ../spell.c:5220
msgid "COMPOUNDSYLMAX used without SYLLABLE"
msgstr "Вжито COMPOUNDSYLMAX без SYLLABLE"
-#: ../spell.c:5236
msgid "Too many postponed prefixes"
msgstr "Забагато відкладених префікÑів"
-#: ../spell.c:5238
msgid "Too many compound flags"
msgstr "Забагато Ñкладних прапорців"
-#: ../spell.c:5240
msgid "Too many postponed prefixes and/or compound flags"
msgstr "Забагато відкладених префікÑів Ñ–/або Ñкладних прапорців"
-#: ../spell.c:5250
#, c-format
msgid "Missing SOFO%s line in %s"
msgstr "Пропущено Ñ€Ñдок SOFO%s у %s"
-#: ../spell.c:5253
#, c-format
msgid "Both SAL and SOFO lines in %s"
msgstr "Обидва Ñ€Ñдки SAL Ñ– SOFO у %s"
-#: ../spell.c:5331
#, c-format
msgid "Flag is not a number in %s line %d: %s"
msgstr "Прапорець не Ñ” чиÑлом у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5334
#, c-format
msgid "Illegal flag in %s line %d: %s"
msgstr "Ðеправильний прапорець у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5493 ../spell.c:5501
#, c-format
msgid "%s value differs from what is used in another .aff file"
msgstr "Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s відрізнÑєтьÑÑ Ð²Ñ–Ð´ того, що вжито у іншому файлі .aff"
-#: ../spell.c:5602
#, c-format
msgid "Reading dictionary file %s ..."
msgstr "ЗчитуєтьÑÑ Ñловниковий файл %s ..."
-#: ../spell.c:5611
#, c-format
msgid "E760: No word count in %s"
msgstr "E760: Ðемає кількоÑті Ñлів у %s"
-#: ../spell.c:5669
#, c-format
msgid "line %6d, word %6d - %s"
msgstr "Ñ€Ñдок %6d, Ñлово %6d - %s"
-#: ../spell.c:5691
#, c-format
msgid "Duplicate word in %s line %d: %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñлова у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5694
#, c-format
msgid "First duplicate word in %s line %d: %s"
msgstr "Перше Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñлова у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:5746
#, c-format
msgid "%d duplicate word(s) in %s"
msgstr "%d повторюваних Ñлів у %s"
-#: ../spell.c:5748
#, c-format
msgid "Ignored %d word(s) with non-ASCII characters in %s"
msgstr "Пропущено %d Ñлів(~) із не-ASCII Ñимволами у %s"
-#: ../spell.c:6115
#, c-format
msgid "Reading word file %s ..."
msgstr "ЧитаєтьÑÑ Ñ„Ð°Ð¹Ð» Ñлів %s ..."
-#: ../spell.c:6155
#, c-format
msgid "Duplicate /encoding= line ignored in %s line %d: %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ñдка /encoding= проігноровано у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6159
#, c-format
msgid "/encoding= line after word ignored in %s line %d: %s"
msgstr "РÑдок /encoding= піÑÐ»Ñ Ñлова проігноровано у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6180
#, c-format
msgid "Duplicate /regions= line ignored in %s line %d: %s"
msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ€Ñдка /regions= проігноровано у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6185
#, c-format
msgid "Too many regions in %s line %d: %s"
msgstr "Забагато регіонів у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6198
#, c-format
msgid "/ line ignored in %s line %d: %s"
msgstr "РÑдок / проігноровано у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6224
#, c-format
msgid "Invalid region nr in %s line %d: %s"
msgstr "Ðекоректний номер регіону у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6230
#, c-format
msgid "Unrecognized flags in %s line %d: %s"
msgstr "Ðерозпізнані прапорці у %s у Ñ€Ñдку %d: %s"
-#: ../spell.c:6257
#, c-format
msgid "Ignored %d words with non-ASCII characters"
msgstr "Проігноровано %d Ñлів із не-ASCII Ñимволами"
-#: ../spell.c:6656
#, c-format
msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
msgstr "СтиÑнено %d з %d вузлів; залишилоÑÑ %d (%d%%)"
-#: ../spell.c:7340
msgid "Reading back spell file..."
msgstr "ПеречитуєтьÑÑ Ñ„Ð°Ð¹Ð» орфографії..."
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
msgid "Performing soundfolding..."
msgstr "ВиконуєтьÑÑ Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð·Ð²ÑƒÐºÑ–Ð²..."
-#: ../spell.c:7368
#, c-format
msgid "Number of words after soundfolding: %<PRId64>"
msgstr "КількіÑть Ñлів піÑÐ»Ñ Ð·Ð³Ð¾Ñ€Ñ‚Ð°Ð½Ð½Ñ Ð·Ð²ÑƒÐºÑ–Ð²: %<PRId64>"
-#: ../spell.c:7476
#, c-format
msgid "Total number of words: %d"
msgstr "Повна кількіÑть Ñлів: %d"
-#: ../spell.c:7655
#, c-format
msgid "Writing suggestion file %s ..."
msgstr "ЗапиÑуєтьÑÑ Ñ„Ð°Ð¹Ð» припущень %s ..."
-#: ../spell.c:7707 ../spell.c:7927
#, c-format
msgid "Estimated runtime memory use: %d bytes"
msgstr "Оцінка ÑÐ¿Ð¾Ð¶Ð¸Ð²Ð°Ð½Ð½Ñ Ð¿Ð°Ð¼'Ñті: %d байт"
-#: ../spell.c:7820
msgid "E751: Output file name must not have region name"
msgstr "E751: Вихідний файл не повинен мати назву регіону"
-#: ../spell.c:7822
msgid "E754: Only up to 8 regions supported"
msgstr "E754: ПідтримуєтьÑÑ Ñ‚Ñ–Ð»ÑŒÐºÐ¸ до воÑьми регіонів"
-#: ../spell.c:7846
#, c-format
msgid "E755: Invalid region in %s"
msgstr "E755: Ðекоректний регіон у %s"
-#: ../spell.c:7907
msgid "Warning: both compounding and NOBREAK specified"
msgstr "ЗаÑтереженнÑ: зазначено обидва `Ñкладні Ñлова' Ñ– NOBREAK"
-#: ../spell.c:7920
#, c-format
msgid "Writing spell file %s ..."
msgstr "ЗапиÑуєтьÑÑ Ñ„Ð°Ð¹Ð» орфографії %s ..."
-#: ../spell.c:7925
msgid "Done!"
msgstr "Зроблено!"
-#: ../spell.c:8034
#, c-format
msgid "E765: 'spellfile' does not have %<PRId64> entries"
msgstr "E765: 'spellfile' не міÑтить %<PRId64> елементів"
-#: ../spell.c:8074
#, c-format
msgid "Word '%.*s' removed from %s"
msgstr "Слово '%.*s' знищено з %s"
-#: ../spell.c:8117
#, c-format
msgid "Word '%.*s' added to %s"
msgstr "Слово '%.*s' додано до %s"
-#: ../spell.c:8381
msgid "E763: Word characters differ between spell files"
msgstr "E763: Символи у Ñлові відрізнÑютьÑÑ Ñƒ файлах орфографії"
-#: ../spell.c:8684
msgid "Sorry, no suggestions"
msgstr "Пробачте, немає пропозицій"
-#: ../spell.c:8687
#, c-format
msgid "Sorry, only %<PRId64> suggestions"
msgstr "Пробачте, тільки %<PRId64> пропозицій"
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
#, c-format
msgid "Change \"%.*s\" to:"
msgstr "Замінити «%.*s» на:"
-#: ../spell.c:8737
#, c-format
msgid " < \"%.*s\""
msgstr " < «%.*s»"
-# msgstr "E34: "
-#: ../spell.c:8882
msgid "E752: No previous spell replacement"
msgstr "E752: Ðемає попередньої заміни"
-# msgstr "E333: "
-#: ../spell.c:8925
#, c-format
msgid "E753: Not found: %s"
msgstr "E753: Ðе знайдено: %s"
-#: ../spell.c:9276
#, c-format
msgid "E778: This does not look like a .sug file: %s"
msgstr "E778: Ðе Ñхоже на файл .sug: %s"
-#: ../spell.c:9282
#, c-format
msgid "E779: Old .sug file, needs to be updated: %s"
msgstr "E779: ЗаÑтарілий файл .sug, треба поновити: %s"
-#: ../spell.c:9286
#, c-format
msgid "E780: .sug file is for newer version of Vim: %s"
msgstr "E780: Файл .sug Ð´Ð»Ñ Ð±Ñ–Ð»ÑŒÑˆ нової верÑÑ–Ñ— Vim: %s"
-#: ../spell.c:9295
#, c-format
msgid "E781: .sug file doesn't match .spl file: %s"
msgstr "E781: Файл .sug не відповідає файлу .spl: %s"
-#: ../spell.c:9305
#, c-format
msgid "E782: error while reading .sug file: %s"
msgstr "E782: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ .sug: %s"
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
msgid "E783: duplicate char in MAP entry"
msgstr "E783: Повторено Ñимвол у елементі MAP"
-# msgstr "E391: "
-#: ../syntax.c:266
msgid "No Syntax items defined for this buffer"
msgstr "Ð”Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° не визначено елементів ÑинтакÑиÑу"
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
#, c-format
msgid "E390: Illegal argument: %s"
msgstr "E390: Ðеправильний аргумент: %s"
-#: ../syntax.c:3299
+msgid "syntax iskeyword "
+msgstr "ÑинтакÑÐ¸Ñ iskeyword "
+
#, c-format
msgid "E391: No such syntax cluster: %s"
msgstr "E391: Ðемає такого ÑинтакÑичного клаÑтера: %s"
-#: ../syntax.c:3433
msgid "syncing on C-style comments"
msgstr "ÑинхронізуєтьÑÑ Ð¿Ð¾ коментарÑÑ… Ñтилю С"
-#: ../syntax.c:3439
msgid "no syncing"
msgstr "без Ñинхронізації"
-#: ../syntax.c:3441
msgid "syncing starts "
msgstr "починаєтьÑÑ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð·Ð° "
-#: ../syntax.c:3443 ../syntax.c:3506
msgid " lines before top line"
msgstr " Ñ€Ñдків перед першим Ñ€Ñдком"
-#: ../syntax.c:3448
msgid ""
"\n"
"--- Syntax sync items ---"
@@ -5858,7 +4918,6 @@ msgstr ""
"\n"
"--- Елементи Ñинхронізації ÑинтакÑиÑу ---"
-#: ../syntax.c:3452
msgid ""
"\n"
"syncing on items"
@@ -5866,7 +4925,6 @@ msgstr ""
"\n"
"ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ñ–Ð·Ð°Ñ†Ñ–Ñ Ð¿Ð¾ елементах"
-#: ../syntax.c:3457
msgid ""
"\n"
"--- Syntax items ---"
@@ -5874,569 +4932,374 @@ msgstr ""
"\n"
"--- Елементи ÑинтакÑиÑу ---"
-#: ../syntax.c:3475
#, c-format
msgid "E392: No such syntax cluster: %s"
msgstr "E392: Ðемає такого ÑинтакÑичного клаÑтера: %s"
-#: ../syntax.c:3497
msgid "minimal "
msgstr "мінімальний "
-#: ../syntax.c:3503
msgid "maximal "
msgstr "макÑимальний "
-#: ../syntax.c:3513
msgid "; match "
msgstr "; збіг "
-#: ../syntax.c:3515
msgid " line breaks"
msgstr " розриви Ñ€Ñдків"
-#: ../syntax.c:4076
msgid "E395: contains argument not accepted here"
msgstr "E395: МіÑтить неприйнÑтні тут аргументи"
-# msgstr "E14: "
-#: ../syntax.c:4096
msgid "E844: invalid cchar value"
msgstr "E844: Ðекоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ cchar"
-#: ../syntax.c:4107
msgid "E393: group[t]here not accepted here"
msgstr "E393: group[t]hete тут неприйнÑтний"
-#: ../syntax.c:4126
#, c-format
msgid "E394: Didn't find region item for %s"
msgstr "E394: Ðе знайдено елемент регіону Ð´Ð»Ñ %s"
-# msgstr "E396: "
-#: ../syntax.c:4188
msgid "E397: Filename required"
msgstr "E397: Потрібна назва файлу"
-#: ../syntax.c:4221
msgid "E847: Too many syntax includes"
msgstr "E847: Забагато ÑинтакÑичних включень"
-#: ../syntax.c:4303
#, c-format
msgid "E789: Missing ']': %s"
msgstr "E789: Пропущено ']': %s"
-#: ../syntax.c:4531
+#, c-format
+msgid "E890: trailing char after ']': %s]%s"
+msgstr "E890: Зайвий Ñимвол піÑÐ»Ñ ']': %s]%s"
+
#, c-format
msgid "E398: Missing '=': %s"
msgstr "E398: Пропущено `=': %s"
-# ---------------------------------------
-#: ../syntax.c:4666
#, c-format
msgid "E399: Not enough arguments: syntax region %s"
msgstr "E399: Бракує аргументів: ÑинтакÑичний регіон %s"
-#: ../syntax.c:4870
msgid "E848: Too many syntax clusters"
msgstr "E848: Забагато ÑинтакÑичних клаÑтерів"
-#: ../syntax.c:4954
msgid "E400: No cluster specified"
msgstr "E400: КлаÑтер не вказано"
-#. end delimiter not found
-#: ../syntax.c:4986
#, c-format
msgid "E401: Pattern delimiter not found: %s"
msgstr "E401: Кінець зразку не знайдено: %s"
-#: ../syntax.c:5049
#, c-format
msgid "E402: Garbage after pattern: %s"
msgstr "E402: Ð¡Ð¼Ñ–Ñ‚Ñ‚Ñ Ð¿Ñ–ÑÐ»Ñ Ð·Ñ€Ð°Ð·ÐºÑƒ: %s"
-# msgstr "E402: "
-#: ../syntax.c:5120
msgid "E403: syntax sync: line continuations pattern specified twice"
msgstr ""
"E403: СинтакÑична ÑинхронізаціÑ: зразок Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð²Ð¶ÐµÐ½Ð½Ñ Ñ€Ñдка вказано двічі"
-#: ../syntax.c:5169
#, c-format
msgid "E404: Illegal arguments: %s"
msgstr "E404: Ðеправильні аргументи: %s"
-# msgstr "E404: "
-#: ../syntax.c:5217
#, c-format
msgid "E405: Missing equal sign: %s"
msgstr "E405: Пропущено знак рівноÑті: %s"
-# msgstr "E405: "
-#: ../syntax.c:5222
#, c-format
msgid "E406: Empty argument: %s"
msgstr "E406: Порожній аргумент: %s"
-# msgstr "E406: "
-#: ../syntax.c:5240
#, c-format
msgid "E407: %s not allowed here"
msgstr "E407: %s тут не дозволено"
-#: ../syntax.c:5246
#, c-format
msgid "E408: %s must be first in contains list"
msgstr "E408: %s має бути першим Ñ€Ñдком у ÑпиÑку contains"
-#: ../syntax.c:5304
#, c-format
msgid "E409: Unknown group name: %s"
msgstr "E409: Ðевідома назва групи: %s"
-# msgstr "E409: "
-#: ../syntax.c:5512
#, c-format
msgid "E410: Invalid :syntax subcommand: %s"
msgstr "E410: Ðеправильна підкоманда :syntax: %s"
-#: ../syntax.c:5854
msgid ""
" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
msgstr ""
" ВСЬОГО К-ТЬ СПІВП. ÐÐЙПОВІЛ. СЕРЕДÐ. ÐÐЗВРШÐБЛОÐ"
-#: ../syntax.c:6146
msgid "E679: recursive loop loading syncolor.vim"
msgstr "E679: РекурÑивний цикл Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ syncolor.vim"
-# msgstr "E410: "
-#: ../syntax.c:6256
#, c-format
msgid "E411: highlight group not found: %s"
msgstr "E411: Групу підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ð½Ðµ знайдено: %s"
-# msgstr "E411: "
-#: ../syntax.c:6278
#, c-format
msgid "E412: Not enough arguments: \":highlight link %s\""
msgstr "E412: ÐедоÑтатньо аргументів: «:highlight link %s»"
-# msgstr "E412: "
-#: ../syntax.c:6284
#, c-format
msgid "E413: Too many arguments: \":highlight link %s\""
msgstr "E413: Забагато аргументів: «:highlight link %s»"
-# msgstr "E413: "
-#: ../syntax.c:6302
msgid "E414: group has settings, highlight link ignored"
msgstr "E414: Грума має settings, highlight link проігноровано"
-# msgstr "E414: "
-#: ../syntax.c:6367
#, c-format
msgid "E415: unexpected equal sign: %s"
msgstr "E415: ÐеÑподіваний знак рівноÑті: %s"
-# msgstr "E415: "
-#: ../syntax.c:6395
#, c-format
msgid "E416: missing equal sign: %s"
msgstr "E416: Пропущено знак рівноÑті: %s"
-#: ../syntax.c:6418
#, c-format
msgid "E417: missing argument: %s"
msgstr "E417: Пропущено аргумент: %s"
-#: ../syntax.c:6446
#, c-format
msgid "E418: Illegal value: %s"
msgstr "E418: Ðеправильне значеннÑ: %s"
-# msgstr "E418: "
-#: ../syntax.c:6496
msgid "E419: FG color unknown"
msgstr "E419: Ðевідомий колір текÑту"
-# msgstr "E419: "
-#: ../syntax.c:6504
msgid "E420: BG color unknown"
msgstr "E420: Ðевідомий колір фону"
-# msgstr "E420: "
-#: ../syntax.c:6564
#, c-format
msgid "E421: Color name or number not recognized: %s"
msgstr "E421: Ðерозпізнана назва або номер кольору: %s"
-# msgstr "E421: "
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Занадто довгий код терміналу: %s"
-
-# msgstr "E422: "
-#: ../syntax.c:6753
#, c-format
msgid "E423: Illegal argument: %s"
msgstr "E423: Ðеправильний аргумент: %s"
-# msgstr "E423: "
-#: ../syntax.c:6925
msgid "E424: Too many different highlighting attributes in use"
msgstr "E424: ВикориÑтано забагато різних атрибутів кольору"
-#: ../syntax.c:7427
msgid "E669: Unprintable character in group name"
msgstr "E669: Ðедруковний Ñимвол у назві групи"
-# msgstr "E181: "
-#: ../syntax.c:7434
msgid "W18: Invalid character in group name"
msgstr "W18: Ðекоректний Ñимвол у назві групи"
-#: ../syntax.c:7448
msgid "E849: Too many highlight and syntax groups"
msgstr "E849: Забагато груп підÑÐ²Ñ–Ñ‡ÑƒÐ²Ð°Ð½Ð½Ñ Ñ– ÑинтакÑиÑу"
-# msgstr "E424: "
-#: ../tag.c:104
msgid "E555: at bottom of tag stack"
-msgstr "E555: Кінець Ñтеку теґів"
+msgstr "E555: Кінець Ñтеку міток"
-#: ../tag.c:105
msgid "E556: at top of tag stack"
-msgstr "E556: Вершина Ñтеку теґів"
+msgstr "E556: Вершина Ñтеку міток"
-#: ../tag.c:380
msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Це вже найперший відповідний теґ"
+msgstr "E425: Це вже найперша відповідна мітка"
-# msgstr "E425: "
-#: ../tag.c:504
#, c-format
msgid "E426: tag not found: %s"
-msgstr "E426: Теґ не знайдено: %s"
+msgstr "E426: Мітку не знайдено: %s"
-# msgstr "E426: "
-#: ../tag.c:528
msgid " # pri kind tag"
-msgstr " # прі тип теґ"
+msgstr " # прі тип мітка"
-#: ../tag.c:531
msgid "file\n"
msgstr "файл\n"
-#: ../tag.c:829
msgid "E427: There is only one matching tag"
-msgstr "E427: Лише один відповідний теґ"
+msgstr "E427: Лише одна відповідна мітка"
-# msgstr "E427: "
-#: ../tag.c:831
msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: Це вже оÑтанній відповідний теґ"
+msgstr "E428: Це вже оÑÑ‚Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð¿Ð¾Ð²Ñ–Ð´Ð½Ð° мітка"
-# msgstr "E428: "
-#: ../tag.c:850
#, c-format
msgid "File \"%s\" does not exist"
msgstr "Файл «%s» не Ñ–Ñнує"
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
#, c-format
msgid "tag %d of %d%s"
-msgstr "теґ %d з %d%s"
+msgstr "мітка %d з %d%s"
-#: ../tag.c:862
msgid " or more"
msgstr " або більше"
-#: ../tag.c:864
msgid " Using tag with different case!"
-msgstr " ВикориÑтано теґ, не розрізнÑючи великі й малі літери"
+msgstr " ВикориÑтано мітку, не розрізнÑючи великі й малі літери!"
-#: ../tag.c:909
#, c-format
msgid "E429: File \"%s\" does not exist"
msgstr "E429: Файл «%s» не Ñ–Ñнує"
-# msgstr "E429: "
-#. Highlight title
-#: ../tag.c:960
msgid ""
"\n"
" # TO tag FROM line in file/text"
msgstr ""
"\n"
-" # ДО теґу З Ñ€Ñдка у файлі/текÑті"
+" # ДО мітки З Ñ€Ñдка у файлі/текÑті"
-#: ../tag.c:1303
#, c-format
msgid "Searching tags file %s"
msgstr "ШукаєтьÑÑ Ñƒ файлі теґів %s"
-#: ../tag.c:1545
msgid "Ignoring long line in tags file"
msgstr "ІгноруєтьÑÑ Ð´Ð¾Ð²Ð³Ð¸Ð¹ Ñ€Ñдок у файлі з позначками"
-# msgstr "E430: "
-#: ../tag.c:1915
#, c-format
msgid "E431: Format error in tags file \"%s\""
msgstr "E431: Помилка формату у файлі теґів «%s»"
-# msgstr "E431: "
-#: ../tag.c:1917
#, c-format
msgid "Before byte %<PRId64>"
msgstr "Перед байтом %<PRId64>"
-#: ../tag.c:1929
#, c-format
msgid "E432: Tags file not sorted: %s"
msgstr "E432: Файл теґів не впорÑдкований: %s"
-# msgstr "E432: "
-#. never opened any tags file
-#: ../tag.c:1960
msgid "E433: No tags file"
msgstr "E433: Ðемає файлу теґів"
-# msgstr "E433: "
-#: ../tag.c:2536
msgid "E434: Can't find tag pattern"
-msgstr "E434: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ зразок теґу"
+msgstr "E434: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ зразок мітки"
-# msgstr "E434: "
-#: ../tag.c:2544
msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ теґ, тільки припущеннÑ!"
+msgstr "E435: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ мітку, тільки припущеннÑ!"
-#: ../tag.c:2797
#, c-format
msgid "Duplicate field name: %s"
msgstr "Ðазва Ð¿Ð¾Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÑŽÑ”Ñ‚ÑŒÑÑ: %s"
-# msgstr "E435: "
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' не відомий. Вбудовані термінали:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "початково '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл можливоÑтей терміналів"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: Ðемає інформації про термінал"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: Ðемає інформації про можливоÑті терміналу"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: Ðемає запиÑу «%s» про можливоÑті терміналу"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: Потрібна можливіÑть терміналу «cm»"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Клавіші терміналу ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: Помилка Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð²Ð²Ð¾Ð´Ñƒ, робота завершуєтьÑÑ...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
msgid "E881: Line count changed unexpectedly"
-msgstr "E834: КількіÑть Ñ€Ñдків неÑподівано змінилаÑÑ"
+msgstr "E881: КількіÑть Ñ€Ñдків неÑподівано змінилаÑÑ"
-#: ../undo.c:627
#, c-format
msgid "E828: Cannot open undo file for writing: %s"
msgstr "E828: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ñ–Ñторії Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñу: %s"
-#: ../undo.c:717
+#, c-format
+msgid "E926: Unable to create directory \"%s\" for undo file: %s"
+msgstr "E926: Ðе вдалоÑÑ Ñтворити каталог «%s» Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»Ñƒ зворотніх змін: %s"
+
#, c-format
msgid "E825: Corrupted undo file (%s): %s"
msgstr "E825: Файл Ñ–Ñторії пошкоджено (%s): %s"
-#: ../undo.c:1039
msgid "Cannot write undo file in any directory in 'undodir'"
msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл Ñ–Ñторії у жодну з директорій у 'undodir'"
-#: ../undo.c:1074
#, c-format
msgid "Will not overwrite with undo file, cannot read: %s"
msgstr "Will not overwrite with undo file, cannot read: %s"
-#: ../undo.c:1092
#, c-format
msgid "Will not overwrite, this is not an undo file: %s"
msgstr "Ðе можна перезапиÑати, це не файл Ñ–Ñторії: %s"
-#: ../undo.c:1108
msgid "Skipping undo file write, nothing to undo"
msgstr "Файл Ñ–Ñторії не запиÑуєтьÑÑ, нічого повертати"
-#: ../undo.c:1121
#, c-format
msgid "Writing undo file: %s"
msgstr "ЗапиÑуєтьÑÑ Ñ„Ð°Ð¹Ð» Ñ–Ñторії: %s"
-#: ../undo.c:1213
#, c-format
msgid "E829: write error in undo file: %s"
msgstr "E829: Помилка запиÑу у файлі Ñ–Ñторії: %s"
-#: ../undo.c:1280
#, c-format
msgid "Not reading undo file, owner differs: %s"
msgstr "Файл Ñ–Ñторії прочитано не буде, влаÑник інший: %s"
-#: ../undo.c:1292
#, c-format
msgid "Reading undo file: %s"
msgstr "ЧитаєтьÑÑ Ñ„Ð°Ð¹Ð» Ñ–Ñторії: %s"
-#: ../undo.c:1299
#, c-format
msgid "E822: Cannot open undo file for reading: %s"
msgstr "E822: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: %s"
-# msgstr "E333: "
-#: ../undo.c:1308
#, c-format
msgid "E823: Not an undo file: %s"
msgstr "E823: Ðе файл Ñ–Ñторії: %s"
-#: ../undo.c:1313
#, c-format
msgid "E824: Incompatible undo file: %s"
msgstr "E824: ÐеÑуміÑний файл Ñ–Ñторії: %s"
-#: ../undo.c:1328
msgid "File contents changed, cannot use undo info"
msgstr "ВміÑÑ‚ файлу змінивÑÑ, не можна викориÑтати інформацію про Ñ–Ñторію"
-#: ../undo.c:1497
#, c-format
msgid "Finished reading undo file %s"
msgstr "Закінчено Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ Ñ–Ñторії %s"
-#: ../undo.c:1586 ../undo.c:1812
msgid "Already at oldest change"
msgstr "Вже на найÑтаршій зміні"
-#: ../undo.c:1597 ../undo.c:1814
msgid "Already at newest change"
msgstr "Вже на найновішій зміні"
-#: ../undo.c:1806
#, c-format
msgid "E830: Undo number %<PRId64> not found"
msgstr "E830: Зміну %<PRId64> не знайдено в Ñ–Ñторії"
-#: ../undo.c:1979
msgid "E438: u_undo: line numbers wrong"
msgstr "E438: u_undo: неправильні номери Ñ€Ñдків"
-#: ../undo.c:2183
msgid "more line"
msgstr "додано Ñ€Ñдок"
-#: ../undo.c:2185
msgid "more lines"
msgstr "Ñ€Ñдків додано"
-#: ../undo.c:2187
msgid "line less"
msgstr "знищено Ñ€Ñдок"
-#: ../undo.c:2189
msgid "fewer lines"
msgstr "Ñ€Ñдків знищено"
-# msgstr "E438: "
-#: ../undo.c:2193
msgid "change"
msgstr "зміна"
-# msgstr "E438: "
-#: ../undo.c:2195
msgid "changes"
msgstr "змін"
-#: ../undo.c:2225
#, c-format
msgid "%<PRId64> %s; %s #%<PRId64> %s"
msgstr "%<PRId64> %s; %s #%<PRId64> %s"
-#: ../undo.c:2228
-msgid "before"
-msgstr "перед"
-
-#: ../undo.c:2228
msgid "after"
msgstr "піÑлÑ"
-#: ../undo.c:2325
+msgid "before"
+msgstr "перед"
+
msgid "Nothing to undo"
msgstr "Ðемає нічого ÑкаÑовувати"
-#: ../undo.c:2330
msgid "number changes when saved"
msgstr "номер зміни Ñ‡Ð°Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾"
-#: ../undo.c:2360
#, c-format
msgid "%<PRId64> seconds ago"
msgstr "%<PRId64> Ñекунд тому"
-# msgstr "E406: "
-#: ../undo.c:2372
msgid "E790: undojoin is not allowed after undo"
msgstr "E790: Ðе можна виконати undojoin піÑÐ»Ñ undo"
-#: ../undo.c:2466
msgid "E439: undo list corrupt"
msgstr "E439: СпиÑок ÑкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð¾ÑˆÐºÐ¾Ð´Ð¶ÐµÐ½Ð¾"
-# msgstr "E439: "
-#: ../undo.c:2495
msgid "E440: undo line missing"
msgstr "E440: ВідÑутній Ñ€Ñдок ÑкаÑуваннÑ"
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"Включені латки: "
-
-#: ../version.c:627
msgid ""
"\n"
"Extra patches: "
@@ -6444,11 +5307,6 @@ msgstr ""
"\n"
"Додаткові латки: "
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "Змінив "
-
-#: ../version.c:646
msgid ""
"\n"
"Compiled "
@@ -6456,1933 +5314,95 @@ msgstr ""
"\n"
"Скомпілював "
-#: ../version.c:649
msgid "by "
msgstr " "
-#: ../version.c:660
msgid ""
"\n"
-"Huge version "
+"\n"
+"Optional features included (+) or not (-): "
msgstr ""
"\n"
-"ГігантÑька верÑÑ–Ñ "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "без GUI."
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " Включені (+) або не включені (-) компоненти:\n"
+"\n"
+"Включені (+) або не включені (-) компоненти: "
-#: ../version.c:667
msgid " system vimrc file: \""
msgstr " ÑиÑтемний vimrc: \""
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " vimrc кориÑтувача: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " другий vimrc кориÑтувача: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " третій vimrc кориÑтувача: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " exrc кориÑтувача: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " другий exrc кориÑтувача: \""
-
-#: ../version.c:699
msgid " fall-back for $VIM: \""
msgstr " заміна Ð´Ð»Ñ $VIM: \""
-#: ../version.c:705
msgid " f-b for $VIMRUNTIME: \""
msgstr " заміна Ð´Ð»Ñ $VIMRUNTIME: \""
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "Скомпільовано: "
+msgid "by Bram Moolenaar et al."
+msgstr "автор: Bram Moolenaar та ін."
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Скомпоновано: "
+msgid "Nvim is open source and freely distributable"
+msgstr "Nvim — це відкрита й вільно розповÑюджувана програма"
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " ВЕРСІЯ ДЛЯ ÐÐЛÐГОДЖЕÐÐЯ"
+msgid "https://neovim.io/community"
+msgstr "https://neovim.io/community"
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Покращений Vi"
+msgid "type :help nvim<Enter> if you are new! "
+msgstr ":help nvim<Enter> Ñкщо ви вперше! "
-#: ../version.c:769
-msgid "version "
-msgstr "верÑÑ–Ñ "
+msgid "type :CheckHealth<Enter> to optimize Nvim"
+msgstr ":CheckHealth<Enter> щоб оптимізувати Nvim "
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "автор: Bram Moolenaar та ін."
+msgid "type :q<Enter> to exit "
+msgstr ":q<Enter> вихід з Vim "
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim — це відкрита й вільно розповÑюджувана програма"
+msgid "type :help<Enter> for help "
+msgstr ":help<Enter> щоб отримати допомогу "
-#: ../version.c:776
msgid "Help poor children in Uganda!"
msgstr "Допоможіть Ñиротам з Уганди!"
-#: ../version.c:777
msgid "type :help iccf<Enter> for information "
-msgstr ":help iccf<Enter> подробиці "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr ":q<Enter> вихід з Vim "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr ":help<Enter> або <F1> переглÑд допомоги "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr ":help version7<Enter> Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ верÑÑ–ÑŽ "
+msgstr ":help iccf<Enter> подробиці "
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Ви працюєте в режимі ÑуміÑному з Vi"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr ":set nocp<Enter> режим неÑуміÑний з Vi "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr ":help cp-default<Enter> Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ ÑуміÑніÑть"
-
-#: ../version.c:827
msgid "Sponsor Vim development!"
msgstr "Підтримайте розробку редактора Vim!"
-#: ../version.c:828
msgid "Become a registered Vim user!"
msgstr "Станьте зареєÑтрованим кориÑтувачем Vim!"
-#: ../version.c:831
msgid "type :help sponsor<Enter> for information "
-msgstr ":help sponsor<Enter> подальша Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
+msgstr ":help sponsor<Enter> подальша Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
-#: ../version.c:832
msgid "type :help register<Enter> for information "
-msgstr ":help register<Enter> подальша Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
+msgstr ":help register<Enter> подальша Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
-#: ../version.c:834
msgid "menu Help->Sponsor/Register for information "
-msgstr "меню Допомога->СпонÑор/РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð¸Ñ†Ñ– "
+msgstr "меню Допомога->СпонÑор/РеєÑÑ‚Ñ€Ð°Ñ†Ñ–Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð¸Ñ†Ñ– "
-# msgstr "E444: "
-#: ../window.c:119
msgid "Already only one window"
msgstr "Це вже єдине вікно"
-#: ../window.c:224
msgid "E441: There is no preview window"
msgstr "E441: Ðемає вікна переглÑду"
-# msgstr "E441: "
-#: ../window.c:559
msgid "E442: Can't split topleft and botright at the same time"
msgstr "E442: Ðе вдалоÑÑ Ð¾Ð´Ð½Ð¾Ñ‡Ð°Ñно розбити topleft Ñ– botright"
-# msgstr "E442: "
-#: ../window.c:1228
msgid "E443: Cannot rotate when another window is split"
msgstr "E443: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити вікно, заважають інші"
-# msgstr "E443: "
-#: ../window.c:1803
msgid "E444: Cannot close last window"
msgstr "E444: Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸ оÑтаннє вікно"
-# msgstr "E443: "
-#: ../window.c:1810
msgid "E813: Cannot close autocmd window"
msgstr "E813: Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸ вікно autocmd"
-# msgstr "E443: "
-#: ../window.c:1814
msgid "E814: Cannot close window, only autocmd window would remain"
msgstr "E814: Ðе вдалоÑÑ Ð·Ð°ÐºÑ€Ð¸Ñ‚Ð¸ вікно, залишилоÑÑ Ð± тільки вікно autocmd"
-#: ../window.c:2717
msgid "E445: Other window contains changes"
msgstr "E445: У іншому вікні є зміни"
-# msgstr "E445: "
-#: ../window.c:4805
msgid "E446: No file name under cursor"
msgstr "E446: Ðемає назви файлу над курÑором"
-#~ msgid "E831: bf_key_init() called with empty password"
-#~ msgstr "E831: Викликано bf_key_init() з порожнім паролем"
-
-#~ msgid "E820: sizeof(uint32_t) != 4"
-#~ msgstr "E820: sizeof(uint32_t) != 4"
-
-#~ msgid "E817: Blowfish big/little endian use wrong"
-#~ msgstr "E817: Ðеправильне викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€Ñдку байтів Blowfish (BE/LE)"
-
-#~ msgid "E818: sha256 test failed"
-#~ msgstr "E818: Ðе пройшла перевірка sha256"
-
-#~ msgid "E819: Blowfish test failed"
-#~ msgstr "E819: Ðе пройшла перевірка Blowfish"
-
-#~ msgid "Patch file"
-#~ msgstr "Латка"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "&O:Гаразд\n"
-#~ "&C:СкаÑувати"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: Ðемає з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ–Ð· Ñервером Vim"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: Ðе вдалоÑÑ Ð²Ñ–Ð´Ñ–Ñлати до %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ відповідь Ñервера"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: Ðе вдалоÑÑ Ð½Ð°Ð´Ñ–Ñлати клієнту"
-
-#~ msgid "Save As"
-#~ msgstr "Зберегти Ñк"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Прочитати Ñкрипт Vim"
-
-#~ msgid "Edit File"
-#~ msgstr "Редагувати Файл"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (ÐЕ ЗÐÐЙДЕÐО)"
-
-#~ msgid "unknown"
-#~ msgstr "Ðевідомо"
-
-# msgstr "E185: "
-#~ msgid "Edit File in new window"
-#~ msgstr "Редагувати файл у новому вікні"
-
-#~ msgid "Append File"
-#~ msgstr "ДопиÑати файл"
-
-# msgstr "E187: "
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ð²Ñ–ÐºÐ½Ð°: X %d, Y %d"
-
-# msgstr "E188: "
-#~ msgid "Save Redirection"
-#~ msgstr "Зберегти переадреÑований вивід"
-
-#~ msgid "Save View"
-#~ msgstr "Зберегти виглÑд"
-
-#~ msgid "Save Session"
-#~ msgstr "Зберегти ÑеанÑ"
-
-#~ msgid "Save Setup"
-#~ msgstr "Зберегти налаштуваннÑ"
-
-#~ msgid "E809: #< is not available without the +eval feature"
-#~ msgstr "E809: #< не доÑтупна без можливоÑті +eval"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: У цій верÑÑ–Ñ— немає диграфів"
-
-#~ msgid "is a device (disabled with 'opendevice' option)"
-#~ msgstr "Ñ” приÑтроєм (вимкнено опцією 'opendevice')"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "ЧитаєтьÑÑ Ð· stdin..."
-
-#~ msgid "[blowfish]"
-#~ msgstr "[blowfish]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[зашифровано]"
-
-#~ msgid "E821: File is encrypted with unknown method"
-#~ msgstr "E821: Файл зашифровано невідомим методом"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans не дозволÑÑ” запиÑувати у незмінені буфери"
-
-# msgstr "E391: "
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "ЧаÑткові запиÑи заборонені Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ñ–Ð² NetBeans"
-
-#~ msgid "writing to device disabled with 'opendevice' option"
-#~ msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð´Ð¾ приÑтрою заборонено опцією 'opendevice'"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Гілку реÑурÑів можна втратити (! щоб не зважати)"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<не відкриваєтьÑÑ> "
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ шрифт %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: не вдалоÑÑ Ð¿Ð¾Ð²ÐµÑ€Ð½ÑƒÑ‚Ð¸ÑÑ Ð² поточний каталог"
-
-#~ msgid "Pathname:"
-#~ msgstr "ШлÑÑ…:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ поточний каталог"
-
-#~ msgid "OK"
-#~ msgstr "Гаразд"
-
-#~ msgid "Cancel"
-#~ msgstr "СкаÑувати"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Діалог Vim"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "Scrollbar Widget: Ðе вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ розмір Ñкороченої картинки."
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: Ðе вдалоÑÑ Ñтворити BalloonEval з повідомленнÑм Ñ– функцією"
-
-#~ msgid "E851: Failed to create a new process for the GUI"
-#~ msgstr "E851: Ðе вдалоÑÑ Ñтворити новий Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð´Ð»Ñ GUI"
-
-#~ msgid "E852: The child process failed to start the GUI"
-#~ msgstr "E852: Дочірній Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ðµ зміг запуÑтити GUI"
-
-# msgstr "E228: "
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити GUI"
-
-# msgstr "E229: "
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: Ðе вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ з «%s»"
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити GUI, не знайдено шрифт"
-
-# msgstr "E230: "
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: Ðекоректний 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ 'imactivatekey' некоректне"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ колір %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "Ðемає над курÑором, пошук триває"
-
-#~ msgid "Input _Methods"
-#~ msgstr "Методи введеннÑ"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - Знайти й замінити..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - Пошук..."
-
-#~ msgid "Find what:"
-#~ msgstr "Знайти:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Замінити на:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Лише повне Ñлово"
-
-#~ msgid "Match case"
-#~ msgstr "Зважати на регіÑтр"
-
-#~ msgid "Direction"
-#~ msgstr "ÐапрÑм"
-
-#~ msgid "Up"
-#~ msgstr "Вгору"
-
-#~ msgid "Down"
-#~ msgstr "Униз"
-
-#~ msgid "Find Next"
-#~ msgstr "ÐаÑтупне"
-
-#~ msgid "Replace"
-#~ msgstr "Замінити"
-
-#~ msgid "Replace All"
-#~ msgstr "Замінити уÑÑ–"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: Отримав запит «die» від менеджера ÑеÑій\n"
-
-#~ msgid "Close"
-#~ msgstr "Закрити"
-
-#~ msgid "New tab"
-#~ msgstr "Ðова вкладка"
-
-#~ msgid "Open Tab..."
-#~ msgstr "Відкрити вкладку..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: ÐеÑподівано знищилоÑÑ Ð³Ð¾Ð»Ð¾Ð²Ð½Ðµ вікно\n"
-
-#~ msgid "&Filter"
-#~ msgstr "&F:Фільтрувати"
-
-#~ msgid "&Cancel"
-#~ msgstr "&C:СкаÑувати"
-
-#~ msgid "Directories"
-#~ msgstr "Каталоги"
-
-#~ msgid "Filter"
-#~ msgstr "Фільтр"
-
-#~ msgid "&Help"
-#~ msgstr "&H:Допомога"
-
-#~ msgid "Files"
-#~ msgstr "Файли"
-
-#~ msgid "&OK"
-#~ msgstr "&O:Гаразд"
-
-#~ msgid "Selection"
-#~ msgstr "ВиділеннÑ"
-
-#~ msgid "Find &Next"
-#~ msgstr "&N:Знайти далі"
-
-#~ msgid "&Replace"
-#~ msgstr "&R:Замінити"
-
-#~ msgid "Replace &All"
-#~ msgstr "&A:Замінити уÑÑ–"
-
-#~ msgid "&Undo"
-#~ msgstr "&U:СкаÑувати"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вікно «%s»"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: Ðргумент не підтримуєтьÑÑ: «-%s»; кориÑтуйтеÑÑŒ верÑією з OLE."
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ вікно вÑередині програми MDI"
-
-#~ msgid "Close tab"
-#~ msgstr "Закрити вкладку"
-
-#~ msgid "Open tab..."
-#~ msgstr "Відкрити вкладку..."
-
-# msgstr "E245: "
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "Знайти Ñ€Ñдок ('\\\\' щоб знайти '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "Знайти і замінити ('\\\\' щоб знайти '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "Ðемає"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Каталог\t*.нічого\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr ""
-#~ "Vim E458: Ðемає вільних комірок у палітрі, деÑкі кольори можуть бути "
-#~ "неправильні"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Шрифти Ð´Ð»Ñ Ñ†Ð¸Ñ… Ñимволів відÑутні у наборі %s:"
-
-# msgstr "E250: "
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Ðазва набору шрифтів: %s"
-
-# msgstr "E252: "
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "Шрифт '%s' не є моноширинним"
-
-#~ msgid "E253: Fontset name: %s"
-#~ msgstr "E253: Ðазва набору шрифтів: %s"
-
-#~ msgid "Font0: %s"
-#~ msgstr "Шрифт0: %s"
-
-#~ msgid "Font1: %s"
-#~ msgstr "Шрифт1: %s"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0"
-#~ msgstr "Ширина шрифту%<PRId64> не більша удвічі за ширину шрифту0"
-
-#~ msgid "Font0 width: %<PRId64>"
-#~ msgstr "Ширина шрифту0: %<PRId64>"
-
-#~ msgid "Font1 width: %<PRId64>"
-#~ msgstr "Ширина шрифту1: %<PRId64>"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Ðекоректна ÑÐ¿ÐµÑ†Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ ÑˆÑ€Ð¸Ñ„Ñ‚Ñƒ"
-
-#~ msgid "&Dismiss"
-#~ msgstr "&D:Припинити"
-
-#~ msgid "no specific match"
-#~ msgstr "немає конкретного збігу"
-
-# msgstr "E234: "
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - Вибір шрифту"
-
-#~ msgid "Name:"
-#~ msgstr "Ðазва:"
-
-#~ msgid "Show size in Points"
-#~ msgstr "Показати розмір у пунктах"
-
-#~ msgid "Encoding:"
-#~ msgstr "КодуваннÑ:"
-
-#~ msgid "Font:"
-#~ msgstr "Шрифт:"
-
-#~ msgid "Style:"
-#~ msgstr "Стиль:"
-
-#~ msgid "Size:"
-#~ msgstr "Розмір:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Помилка автомату Hangul"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: помилка stat"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ базу даних cscope: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ інформацію з бази даних cscope"
-
-#~ msgid "Lua library cannot be loaded."
-#~ msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бібліотеку Lua"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "не вдалоÑÑ Ð·Ð±ÐµÑ€ÐµÐ³Ñ‚Ð¸ інформацію Ð´Ð»Ñ ÑкаÑуваннÑ"
-
-#~ msgid ""
-#~ "E815: Sorry, this command is disabled, the MzScheme libraries could not "
-#~ "be loaded."
-#~ msgstr ""
-#~ "E815: Вибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена, бібліотеки MzScheme не можуть бути "
-#~ "завантажені."
-
-#~ msgid "invalid expression"
-#~ msgstr "некоректний вираз"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "обробку виразів вимкнено під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñції"
-
-#~ msgid "hidden option"
-#~ msgstr "прихована опціÑ"
-
-#~ msgid "unknown option"
-#~ msgstr "невідома опціÑ"
-
-#~ msgid "window index is out of range"
-#~ msgstr "некоректний номер вікна"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ буфер"
-
-#~ msgid "cannot delete line"
-#~ msgstr "неможливо знищити Ñ€Ñдок"
-
-#~ msgid "cannot replace line"
-#~ msgstr "неможливо замінити Ñ€Ñдок"
-
-#~ msgid "cannot insert line"
-#~ msgstr "не вдалоÑÑ Ð²Ñтавити Ñ€Ñдок"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "більше ніж один Ñ€Ñдок"
-
-#~ msgid "error converting Scheme values to Vim"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Scheme у Vim"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Помилка Vim: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Помилка Vim"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "буфер непридатний"
-
-#~ msgid "window is invalid"
-#~ msgstr "вікно непридатне"
-
-#~ msgid "linenr out of range"
-#~ msgstr "номер Ñ€Ñдка за межами файлу"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "не дозволено у піÑочниці Vim"
-
-#~ msgid "E837: This Vim cannot execute :py3 after using :python"
-#~ msgstr "E837: Python: Ðе можна викориÑтати :py Ñ– :py3 в одному ÑеанÑÑ–"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E263: Вибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена, бібліотека Python не може бути "
-#~ "завантажена."
-
-#~ msgid "E836: This Vim cannot execute :python after using :py3"
-#~ msgstr "E836: Python: Ðе можна викориÑтати :py Ñ– :py3 в одному ÑеанÑÑ–"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: Ðе можна рекурÑивно викликати Python"
-
-#~ msgid "E265: $_ must be an instance of String"
-#~ msgstr "E265: $_ має бути екземплÑром String"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E266: Вибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена, бібліотека Ruby не може бути "
-#~ "завантажена."
-
-# msgstr "E414: "
-#~ msgid "E267: unexpected return"
-#~ msgstr "E267: неÑподіваний return"
-
-#~ msgid "E268: unexpected next"
-#~ msgstr "E268: неÑподіваний next"
-
-#~ msgid "E269: unexpected break"
-#~ msgstr "E269: неÑподіваний break"
-
-#~ msgid "E270: unexpected redo"
-#~ msgstr "E270: неÑподіваний redo"
-
-#~ msgid "E271: retry outside of rescue clause"
-#~ msgstr "E271: retry поза rescue"
-
-#~ msgid "E272: unhandled exception"
-#~ msgstr "E272: Ðеоброблений винÑток"
-
-# msgstr "E233: "
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: Ðевідомий ÑÑ‚Ð°Ñ‚ÑƒÑ longjmp: %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Перемкнути реалізацію/визначеннÑ"
-
-#~ msgid "Show base class of"
-#~ msgstr "Знайти базовий клаÑ"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Показати замінені функції-члени"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Прочитати з файлу"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Отримати з проекту"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Отримати з уÑÑ–Ñ… проектів"
-
-#~ msgid "Retrieve"
-#~ msgstr "Отримати"
-
-#~ msgid "Show source of"
-#~ msgstr "Джерело"
-
-#~ msgid "Find symbol"
-#~ msgstr "Знайти Ñимвол"
-
-#~ msgid "Browse class"
-#~ msgstr "ПереглÑнути клаÑ"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Показати ÐºÐ»Ð°Ñ Ð² ієрархії"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Показати ÐºÐ»Ð°Ñ Ð² обмеженій ієрархії"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref вказує на"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Ðа Xref вказано з"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref має"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref викориÑтано"
-
-#~ msgid "Show docu of"
-#~ msgstr "Показати docu"
-
-#~ msgid "Generate docu for"
-#~ msgstr "Створити docu длÑ"
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "Ðе вдалоÑÑ Ð·'єднатиÑÑ Ð·Ñ– SNiFF+. Перевірте Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ (sniffemacs має бути "
-#~ "у $PATH).\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Помилка під Ñ‡Ð°Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ. Від'єднано"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ зараз "
-
-#~ msgid "not "
-#~ msgstr "не "
-
-#~ msgid "connected"
-#~ msgstr "під'єднаний"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: Ðевідомий запит до SNiFF+: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Помилка з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð´Ð¾ SNiFF+"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: SNiFF+ не під'єднано"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: Ðе Ñ” буфером SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: Помилка запиÑу. Від'єднано"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "неправильна назва буфера"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ще не реалізовано"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "не вдалоÑÑ Ð²Ñтановити Ñ€Ñдки"
-
-#~ msgid "invalid mark name"
-#~ msgstr "неправильна назва позначки"
-
-# msgstr "E19: "
-#~ msgid "mark not set"
-#~ msgstr "помітку не вказано"
-
-#~ msgid "row %d column %d"
-#~ msgstr "Ñ€Ñдок %d колонка %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "Ðе вдалоÑÑ Ð²Ñтавити/додати Ñ€Ñдок"
-
-#~ msgid "line number out of range"
-#~ msgstr "номер Ñ€Ñдка за межами файлу"
-
-#~ msgid "unknown flag: "
-#~ msgstr "невідомий прапорець: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "Ðевідома vimOption"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "перервано з клавіатури"
-
-#~ msgid "vim error"
-#~ msgstr "помилка Vim"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "не вдалоÑÑ Ñтворити команду вікна/буфера: об'єкт знищуєтьÑÑ"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати подію: буфер/вікно уже знищуєтьÑÑ"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr ""
-#~ "E280: ФÐТÐЛЬÐРПОМИЛКРTCL: можливо пошкоджено ÑпиÑок поÑилань!? Будь "
-#~ "лаÑка, повідомте у vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr ""
-#~ "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати команду події: поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð½Ð° буфер/вікно не "
-#~ "знайдено"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr ""
-#~ "E571: Вибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена, бібліотека Tcl не може бути "
-#~ "завантажена."
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Код виходу %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "не вдалоÑÑ Ð´Ñ–Ñтати Ñ€Ñдок"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "Ðе вдалоÑÑ Ð·Ð°Ñ€ÐµÑ”Ñтрувати назву Ñервера команд"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: Ðе вдалоÑÑ Ð²Ñ–Ð´Ñ–Ñлати команду до програми-цілі"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: ВикориÑтано некоректний ідентифікатор Ñервера: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr ""
-#~ "E251: Реквізит реєÑтру зразку VIM Ñформований неправильно. Знищено!"
-
-#~ msgid "netbeans is not supported with this GUI\n"
-#~ msgstr "netbeans не підтримуєтьÑÑ Ð· цим GUI\n"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "Ð¦Ñ Ð²ÐµÑ€ÑÑ–Ñ Vim не була Ñкомпільована з підтримкою порівнÑннÑ."
-
-#~ msgid "'-nb' cannot be used: not enabled at compile time\n"
-#~ msgstr "Ðе можна викориÑтати '-nb': не дозволено під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñції\n"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: Помилка: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити gvim Ð´Ð»Ñ NetBeans\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Where case is ignored prepend / to make flag upper case"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо регіÑтр ігноруєтьÑÑ, додайте / Ñпереду щоб прапорець був у верхньому "
-#~ "регіÑтрі."
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tЗареєÑтрувати цей gvim Ð´Ð»Ñ OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tСкаÑувати реєÑтрацію цього gvim Ð´Ð»Ñ OLE"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tЗапуÑтити GUI (ніби «gvim»)"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f чи --nofork\tПередній план: тримати термінал піÑÐ»Ñ Ð·Ð°Ð¿ÑƒÑку GUI"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\tÐе викориÑтовувати newcli Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð²Ñ–ÐºÐ½Ð°"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <приÑтрій>\t\t\tВикориÑтовувати <приÑтрій> Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ñƒ/виводу"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-u <gvimrc>\t\tВикориÑтати поданий файл заміÑть .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\tРедагувати зашифровані файли"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <диÑплей>\tПід'єднати vim до заданого диÑплею Ñервера X"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\tÐе з'єднуватиÑÑ Ð· X Ñервером"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr ""
-#~ "--remote <файли>\tРедагувати <файли> на Ñервері Vim, Ñкщо це можливо"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-silent <файли> Те Ñаме, тільки не ÑкаржитиÑÑ Ð½Ð° відÑутніÑть "
-#~ "Ñервера"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr ""
-#~ "--remote-wait <файли> ..., але зачекати поки уÑÑ– файли будуть "
-#~ "відредаговані"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr ""
-#~ "--remote-wait-silent <файли> Те Ñаме, тільки не ÑкаржитиÑÑ, Ñкщо Ñервера "
-#~ "немає"
-
-#~ msgid ""
-#~ "--remote-tab[-wait][-silent] <files> As --remote but use tab page per "
-#~ "file"
-#~ msgstr ""
-#~ "--remote-tab[-wait][-silent] <файли> Так Ñамо, Ñк --remote, але по "
-#~ "вкладці на файл"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr ""
-#~ "--remote-send <Ñимволи> ВідіÑлати <Ñимволи> Ñерверу Ñ– завершити роботу"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr ""
-#~ "--remote-expr <вираз> Виконати <вираз> у Ñервері Vim Ñ– надрукувати "
-#~ "результат"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr ""
-#~ "--serverlist\t\tПоказати ÑпиÑок наÑвних Ñерверів Vim Ñ– завершити роботу"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <назва>\tÐадіÑлати до/Ñтати Vim Ñервером з <назвою>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðргументи Ð´Ð»Ñ gvim (верÑÑ–Ñ Motif)\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðргументи Ð´Ð»Ñ gvim (верÑÑ–Ñ neXtaw):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðргументи Ð´Ð»Ñ gvim (верÑÑ–Ñ Athena)\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <диÑплей>\tВиконати vim на заданому <диÑплеї>"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tЗапуÑтити Vim Ñ– згорнути його вікно"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <колір>\tВикориÑтати <колір> Ð´Ð»Ñ Ñ„Ð¾Ð½Ñƒ (також: -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr ""
-#~ "-foreground <колір>\tВикориÑтати <колір> Ð´Ð»Ñ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ текÑту (також: -"
-#~ "fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr ""
-#~ "-font <шрифт>\tВикориÑтати <шрифт> Ð´Ð»Ñ Ð·Ð²Ð¸Ñ‡Ð°Ð¹Ð½Ð¾Ð³Ð¾ текÑту (також: -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <шрифт>\tВикориÑтати <шрифт> Ð´Ð»Ñ Ð¶Ð¸Ñ€Ð½Ð¾Ð³Ð¾ текÑту"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <шрифт>\tВикориÑтати <шрифт> Ð´Ð»Ñ Ð¿Ð¾Ñ…Ð¸Ð»Ð¾Ð³Ð¾ текÑту"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <геом>\tЗадати розміри й Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð½Ñ (також: -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <товщ>\tÐ’Ñтановити товщину меж <товщ> (також: -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr ""
-#~ "-scrollbarwidth <товщ> Ð’Ñтановити товщину лінійки зÑуву (також: -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <виÑота>\tÐ’Ñтановити виÑоту меню <виÑота> (також: -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tОбернути кольори (також: -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\tÐе обертати кольори (також: +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <реÑурÑ>\t\tÐ’Ñтановити зазначений реÑурÑ"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðргументи gvim (верÑÑ–Ñ GTK+)\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <диÑплей>\tВиконати vim на <диÑплеї> (також: --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr ""
-#~ "--role <роль>\tÐ’Ñтановити унікальну роль Ð´Ð»Ñ Ñ–Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ñ–ÐºÐ°Ñ†Ñ–Ñ— головного вікна"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tВідкрити Vim в іншому елементі інтерфейÑу GTK"
-
-#~ msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
-#~ msgstr "--echo-wid\t\tХай gvim надрукує ідентифікатор вікна на stdout"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <заголовок батька>\tВідкрити Vim вÑередині батьківÑького вікна"
-
-#~ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
-#~ msgstr "--windowid <HWND>\tВідкрити Vim вÑередині іншого елементу win32"
-
-#~ msgid "No display"
-#~ msgstr "Ðемає диÑплею"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": Ðе вдалоÑÑ Ð²Ñ–Ð´Ñ–Ñлати.\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": Ðе вдалоÑÑ Ð²Ñ–Ð´Ñ–Ñлати. Спроба виконати на міÑці\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "відредаговано %d з %d"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "Ðемає диÑплею: ВідіÑлати вираз не вдалоÑÑ.\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": ВідіÑлати вираз не вдалоÑÑ.\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: Ðекоректна кодова Ñторінка"
-
-#~ msgid "E284: Cannot set IC values"
-#~ msgstr "E284: Ðе вдалоÑÑ Ð²Ñтановити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ‚ÐµÐºÑту вводу"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: Ðе вдалоÑÑ Ñтворити контекÑÑ‚ вводу"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: Ðе вдалоÑÑ Ñтворити метод вводу"
-
-# msgstr "E286: "
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr ""
-#~ "E287: ЗаÑтереженнÑ: Ðе вдалоÑÑ Ð²Ñтановити в методі вводу подію знищеннÑ"
-
-# msgstr "E287: "
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: Метод вводу не підтримує Ñтилі"
-
-# msgstr "E288: "
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: Метод вводу не підтримує відредаговані типи"
-
-#~ msgid "E843: Error while updating swap file crypt"
-#~ msgstr "E843: Помилка Ð¿Ð¾Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ обміну"
-
-#~ msgid ""
-#~ "E833: %s is encrypted and this version of Vim does not support encryption"
-#~ msgstr "E833: %s зашифровано, а Ñ†Ñ Ð²ÐµÑ€ÑÑ–Ñ Vim не підтримує шифруваннÑ"
-
-#~ msgid "Swap file is encrypted: \"%s\""
-#~ msgstr "Файл обміну зашифрований: «%s»"
-
-#~ msgid ""
-#~ "\n"
-#~ "If you entered a new crypt key but did not write the text file,"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо ви задали новий ключ шифру, але не запиÑали текÑтовий файл,"
-
-#~ msgid ""
-#~ "\n"
-#~ "enter the new crypt key."
-#~ msgstr ""
-#~ "\n"
-#~ "введіть новий ключ шифру."
-
-#~ msgid ""
-#~ "\n"
-#~ "If you wrote the text file after changing the crypt key press enter"
-#~ msgstr ""
-#~ "\n"
-#~ "Якщо ви запиÑали текÑтовий файл піÑÐ»Ñ Ð·Ð¼Ñ–Ð½Ð¸ ключа шифру, натиÑніть enter"
-
-#~ msgid ""
-#~ "\n"
-#~ "to use the same key for text file and swap file"
-#~ msgstr ""
-#~ "\n"
-#~ "щоб викориÑтати однаковий ключ Ð´Ð»Ñ Ñ‚ÐµÐºÑтового файлу та файлу обміну"
-
-#~ msgid "Using crypt key from swap file for the text file.\n"
-#~ msgstr "Ð”Ð»Ñ Ñ‚ÐµÐºÑтового файлу викориÑтовуєтьÑÑ ÐºÐ»ÑŽÑ‡ шифру з файлу обміну.\n"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [не придатний Ð´Ð»Ñ Ñ†Ñ–Ñ”Ñ— верÑÑ–Ñ— Vim]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "Відірвати це меню"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Вибрати каталог"
-
-#~ msgid "Save File dialog"
-#~ msgstr "Запам'Ñтати файл"
-
-#~ msgid "Open File dialog"
-#~ msgstr "Відкрити файл"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: Вибачте, але в конÑолі немає діалогу вибору файлу"
-
-#~ msgid "ERROR: "
-#~ msgstr "ПОМИЛКÐ: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[байт] вÑього розм/знищ. %<PRIu64>/%<PRIu64>, викор. %<PRIu64>, макÑ. "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[виклики] уÑього re/malloc() - %<PRIu64>, уÑього free() - %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: РÑдок Ñтає занадто довгим"
-
-# msgstr "E340: "
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: Ð’Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: Ðеправильний виглÑд миші"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "Вкажіть ключ шифру: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "Повторіть ключ: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Ключі не однакові!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "Ðе вдалоÑÑ Ð·'єднатиÑÑ Ñ–Ð· Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "Ðе вдалоÑÑ Ð·'єднатиÑÑ Ñ–Ð· Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr ""
-#~ "E668: Ðеправильний режим доÑтупу до файлу інформації про з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð· "
-#~ "NetBenans: «%s»"
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "читаєтьÑÑ Ð· Ñокета Netbeans"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: Втрачено зв'Ñзок із NetBeans Ð´Ð»Ñ Ð±ÑƒÑ„ÐµÑ€Ð° %<PRId64>"
-
-#~ msgid "E838: netbeans is not supported with this GUI"
-#~ msgstr "E838: netbeans не підтримуєтьÑÑ Ð· цим GUI"
-
-#~ msgid "E511: netbeans already connected"
-#~ msgstr "E511: netbeans вже під'єднано"
-
-#~ msgid "E505: %s is read-only (add ! to override)"
-#~ msgstr "E505: %s тільки Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ (! щоб не зважати)"
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: МожливіÑть eval недоÑтупна"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "Звільнено Ñ€Ñдків: %<PRId64>"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: Ðе вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ term в GUI"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: ЗаÑтоÑуйте «:gui» Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку GUI"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: Ðе можна змінити в GUI GTK+ 2"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: Ðекоректний(Ñ–) шрифт(и)"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: Ðе вдалоÑÑ Ð²Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ набір шрифтів"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: Ðеправильний набір шрифтів"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ñ€Ð¸Ñтати розширений шрифт"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: Ðекоректний розширений шрифт"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: Миша не підтримуєтьÑÑ"
-
-# msgstr "E358: "
-#~ msgid "cannot open "
-#~ msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ "
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ вікно!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "Потрібна Amigados 2.04 або пізніша\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "Потрібно %s верÑÑ–Ñ— %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "Ðе вдалоÑÑ Ñтворити "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim завершує роботу з %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "не можу змінити режим конÑолі ?!\n"
-
-# msgstr "E359: "
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: не конÑоль??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити оболонку з опцією -f"
-
-# msgstr "E360: "
-#~ msgid "Cannot execute "
-#~ msgstr "Ðе вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ "
-
-#~ msgid "shell "
-#~ msgstr "оболонку "
-
-#~ msgid " returned\n"
-#~ msgstr " повернуто\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE замалий"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "Помилка вводу/виводу"
-
-#~ msgid "Message"
-#~ msgstr "ПовідомленнÑ"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' не 80, не можна виконувати зовнішні команди"
-
-# msgstr "E364: "
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Ðе вдалоÑÑ Ð²Ð¸Ð±Ñ€Ð°Ñ‚Ð¸ принтер"
-
-#~ msgid "to %s on %s"
-#~ msgstr "на %s з %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: Ðевідомий шрифт принтера: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: Помилка друку: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "ДрукуєтьÑÑ '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: Ðекоректна назва набору Ñимволів «%s» у назві шрифту «%s»"
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: Помилковий Ñимвол %c в назві шрифту «%s»"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "Ðа Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð´Ð¸Ñплею X пішло %<PRId64> міліÑекунд"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: Помилка X\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "ДиÑплей Ð¥ не пройшов перевірку"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "Сплив Ñ‡Ð°Ñ Ð¾Ñ‡Ñ–ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð´Ð¸Ñплею Ð¥"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðе вдалоÑÑ Ð·Ð°Ð¿ÑƒÑтити оболонку `sh'\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðе можна Ñтворити канали\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð´Ð²Ð¾Ñ—Ñ‚Ð¸ÑÑ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Команда закінчила виконаннÑ\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP втратив з'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ ICE"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ диÑплей X"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP оброблÑєтьÑÑ Ð·Ð°Ð¿Ð¸Ñ‚ 'збережи Ñебе'"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP відкриваєтьÑÑ Ð·'єднаннÑ"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ÑпоÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð° з'єднаннÑм з ICE не вдалоÑÑ"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP не вдалоÑÑ SmcOpenConnection: %s"
-
-#~ msgid "At line"
-#~ msgstr "РÑдок:"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ vim32.dll"
-
-#~ msgid "VIM Error"
-#~ msgstr "Помилка VIM"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "Ðе вдалоÑÑ Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð¸Ñ‚Ð¸ вказівники на функції DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "оболонка повернула %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: ВиÑвлено подію %s\n"
-
-#~ msgid "close"
-#~ msgstr "close"
-
-#~ msgid "logoff"
-#~ msgstr "logoff"
-
-#~ msgid "shutdown"
-#~ msgstr "shutdown"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: Команду не знайдено"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "Файл VIMRUN.EXE не знайдено у шлÑху пошуку.\n"
-#~ "Зовнішні команди не будуть призупинені піÑÐ»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ.\n"
-#~ "ГлÑньте :help win32-vimrun щоб отримати подробиці."
-
-#~ msgid "Vim Warning"
-#~ msgstr "ЗаÑÑ‚ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Vim"
-
-# msgstr "E231: "
-#~ msgid "Error file"
-#~ msgstr "Файл помилок"
-
-#~ msgid "E868: Error building NFA with equivalence class!"
-#~ msgstr "E868: Ðе вдалоÑÑ Ð¿Ð¾Ð±ÑƒÐ´ÑƒÐ²Ð°Ñ‚Ð¸ NFA з клаÑом еквівалентноÑті!"
-
-#~ msgid "E878: (NFA) Could not allocate memory for branch traversal!"
-#~ msgstr "E878: (NFA) Ðе вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ пам’Ñть Ð´Ð»Ñ Ð¾Ð±Ñ…Ð¾Ð´Ñƒ гілок!"
-
-#~ msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
-#~ msgstr ""
-#~ "ЗаÑтереженнÑ: Ðе вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ ÑпиÑок Ñлів «%s_%s.spl» чи «%s_ascii.spl»"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñƒ %s не підтримуєтьÑÑ"
-
-#~ msgid "E845: Insufficient memory, word list will be incomplete"
-#~ msgstr "E845: ÐедоÑтатньо пам’Ñті, ÑпиÑок Ñлів буде неповним"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: ШлÑÑ… файлу теґів Ñкорочено до %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "запущено нову оболонку\n"
-
-# msgstr "E242: "
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "ВикориÑтано CUT_BUFFER0 заміÑть порожнього виділеннÑ"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "СкаÑÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ неможливе, вÑе одно продовжити"
-
-#~ msgid "E832: Non-encrypted file has encrypted undo file: %s"
-#~ msgstr "E832: Ðезашифрований файл має зашифрований файл Ñ–Ñторії: %s"
-
-#~ msgid "E826: Undo file decryption failed: %s"
-#~ msgstr "E826: Ðе вдалоÑÑ Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ñ‚Ð¸ файл Ñ–Ñторії: %s"
-
-#~ msgid "E827: Undo file is encrypted: %s"
-#~ msgstr "E827: Файл Ñ–Ñторії зашифрований: %s"
-
-# msgstr "E440: "
-# ---------------------------------------
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð· GUI Ð´Ð»Ñ 16/32-розрÑдної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð· GUI Ð´Ð»Ñ 64-розрÑдної MS-Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð· GUI Ð´Ð»Ñ 32-розрÑдної Windows"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " в режимі Win32s"
-
-#~ msgid " with OLE support"
-#~ msgstr " з підтримкою OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 64-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "КонÑольна верÑÑ–Ñ Ð´Ð»Ñ 64-розрÑдної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "КонÑольна верÑÑ–Ñ Ð´Ð»Ñ 32-розрÑдної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ 16-розрÑдної Windows"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ 32-розрÑдної MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ 16-розрÑдної MS-DOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ MacOS X (unix)"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ MacOS X"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ MacOS"
-
-#~ msgid ""
-#~ "\n"
-#~ "OpenVMS version"
-#~ msgstr ""
-#~ "\n"
-#~ "ВерÑÑ–Ñ Ð´Ð»Ñ OpenVMS"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "Велика верÑÑ–Ñ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Ðормальна верÑÑ–Ñ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "Мала верÑÑ–Ñ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "Крихітна верÑÑ–Ñ "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "з GUI GTK2-GNOME."
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "з GUI GTK2."
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "з GUI X11-Motif."
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "з GUI X11-neXtaw."
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "з GUI X11-Athena."
-
-#~ msgid "with Photon GUI."
-#~ msgstr "з GUI Photon."
-
-#~ msgid "with GUI."
-#~ msgstr "з GUI."
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "з GUI Carbon."
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "з GUI Cocoa."
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "з (клаÑичним) GUI."
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ÑиÑтемний gvimrc: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " gvimrc кориÑтувача: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "другий gvimrc кориÑтувача: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "третій gvimrc кориÑтувача: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ÑиÑтемне меню: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "КомпілÑтор: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "меню Help->Orphans подальша Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "Без режимів, текÑÑ‚ що набрано вÑтавлÑєтьÑÑ"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "меню Edit->Global Settings->Toggle Insert Mode "
-
-#~ msgid " for two modes "
-#~ msgstr " Ð´Ð»Ñ Ð´Ð²Ð¾Ñ… режимів "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "меню Edit->Global Settings->Toggle Vi Compatible "
-
-#~ msgid " for Vim defaults "
-#~ msgstr " щоб починати в режимі ÑуміÑноÑті з Vi"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "ЗÐСТЕРЕЖЕÐÐЯ: Ви кориÑтуєтеÑÑ Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr ":help windows95<Enter> Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ це "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бібліотеку %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr ""
-#~ "Вибачте, Ñ†Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° вимкнена, бібліотека Perl не може бути завантажена."
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr ""
-#~ "E299: ОбчиÑÐ»ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñ–Ð² Perl заборонене у піÑочниці без Ð¼Ð¾Ð´ÑƒÐ»Ñ Safe"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Редагувати у (&m)різних Vim"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Редагувати у одному &Vim"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "ПорівнÑти з допомогою Vim"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Редагувати за допомогою &Vim"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Редагувати у вже запущеному Vim - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Редагує вибрані файли з допомогою Vim"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "Помилка ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¾Ñ†ÐµÑу, перевірте чи Ñ” gvim у шлÑху пошуку!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "помилка gvimext.dll"
-
-#~ msgid "Path length too long!"
-#~ msgstr "ШлÑÑ… занадто довгий!"
-
-# msgstr "E233: "
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: Ðевідомий набір шрифтів: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: Ðевідомий шрифт: %s"
-
-# msgstr "E235: "
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: Шрифт «%s» не моноширинний"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: Ðе вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бібліотечну функцію %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: Ðе можна викориÑтати іврит: Ðе ввімкнено під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñції\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: Ðе можна викориÑтати фарÑÑ–: Ðе ввімкнено під Ñ‡Ð°Ñ ÐºÐ¾Ð¼Ð¿Ñ–Ð»Ñції\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr ""
-#~ "E800: Ðе можна викориÑтати арабÑьку мову: Ðе ввімкнено під Ñ‡Ð°Ñ "
-#~ "компілÑції\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: Ðемає зареєÑтрованих Ñерверів з назвою «%s»"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: Ðе вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ диÑплей"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: Отримано некоректний вираз"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: Ðе можна змінити захищений регіон"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans не дозволÑÑ” змінювати захищені від запиÑу файли"
-
-#~ msgid "Need encryption key for \"%s\""
-#~ msgstr "Ð”Ð»Ñ Â«%s» потрібен ключ: "
-
-# msgstr "E406: "
-#~ msgid "empty keys are not allowed"
-#~ msgstr "порожні ключі не дозволені"
-
-#~ msgid "dictionary is locked"
-#~ msgstr "Ñловник заблоковано"
-
-#~ msgid "list is locked"
-#~ msgstr "ÑпиÑок заблоковано"
-
-#~ msgid "failed to add key '%s' to dictionary"
-#~ msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ ключ '%s' до Ñловника"
-
-#~ msgid "index must be int or slice, not %s"
-#~ msgstr "Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ð°Ñ” бути цілий чи зріз, не %s"
-
-#~ msgid "expected str() or unicode() instance, but got %s"
-#~ msgstr "очікувавÑÑ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ€ str() чи unicode(), але отримано %s"
-
-#~ msgid "expected bytes() or str() instance, but got %s"
-#~ msgstr "очікувавÑÑ ÐµÐºÐ·ÐµÐ¼Ð¿Ð»ÑÑ€ bytes() чи str(), але отримано %s"
-
-#~ msgid ""
-#~ "expected int(), long() or something supporting coercing to long(), but "
-#~ "got %s"
-#~ msgstr ""
-#~ "очікувавÑÑ int(), long() чи щоÑÑŒ, що може бути вміщене long(), але "
-#~ "отримано %s"
-
-#~ msgid "expected int() or something supporting coercing to int(), but got %s"
-#~ msgstr ""
-#~ "очікувавÑÑ int() чи щоÑÑŒ, що може бути вміщене int(), але отримано %s"
-
-#~ msgid "value is too large to fit into C int type"
-#~ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð²ÐµÐ»Ð¸ÐºÐµ, щоб вміÑтитиÑÑ Ñƒ тип C int"
-
-#~ msgid "value is too small to fit into C int type"
-#~ msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð·Ð°Ð¼Ð°Ð»Ðµ, щоб вміÑтитиÑÑ Ñƒ тип C int"
-
-#~ msgid "number must be greater then zero"
-#~ msgstr "чиÑло має бути більше, ніж нуль"
-
-#~ msgid "number must be greater or equal to zero"
-#~ msgstr "чиÑло має бути не менше, ніж нуль"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "не вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ атрибути OutputObject"
-
-# msgstr "E180: "
-#~ msgid "invalid attribute: %s"
-#~ msgstr "неправильний атрибут: %s"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: Помилка ініціалізації об'єктів вводу/виводу"
-
-#~ msgid "failed to change directory"
-#~ msgstr "не вдалоÑÑ Ð·Ð¼Ñ–Ð½Ð¸Ñ‚Ð¸ директорію"
-
-#~ msgid "expected 3-tuple as imp.find_module() result, but got %s"
-#~ msgstr "очікувавÑÑ 3-кортеж Ñк результат imp.find_module(), але отримано %s"
-
-#~ msgid ""
-#~ "expected 3-tuple as imp.find_module() result, but got tuple of size %d"
-#~ msgstr "очікувавÑÑ 3-кортеж Ñк результат imp.find_module(), але отримано %d"
-
-#~ msgid "internal error: imp.find_module returned tuple with NULL"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: imp.find_module повернула кортеж з NULL"
-
-#~ msgid "cannot delete vim.Dictionary attributes"
-#~ msgstr "не вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ атрибути vim.Dictionary"
-
-#~ msgid "cannot modify fixed dictionary"
-#~ msgstr "не можна змінити фікÑований Ñловник"
-
-#~ msgid "cannot set attribute %s"
-#~ msgstr "не можна вÑтановити атрибут %s"
-
-#~ msgid "hashtab changed during iteration"
-#~ msgstr "хеш-Ñ‚Ð°Ð±Ð»Ð¸Ñ†Ñ Ð·Ð¼Ñ–Ð½Ð¸Ð»Ð°ÑÑ Ð¿Ñ–Ð´ Ñ‡Ð°Ñ Ð¿ÐµÑ€ÐµÐ±Ð¸Ñ€Ð°Ð½Ð½Ñ"
-
-#~ msgid "expected sequence element of size 2, but got sequence of size %d"
-#~ msgstr ""
-#~ "очікувалаÑÑŒ поÑлідовніÑть розміром 2, але отримано поÑлідовніÑть розміру "
-#~ "%d"
-
-#~ msgid "list constructor does not accept keyword arguments"
-#~ msgstr "ÑпиÑковий конÑтруктор не приймає іменовані аргументи"
-
-#~ msgid "list index out of range"
-#~ msgstr "Ñ–Ð½Ð´ÐµÐºÑ ÑпиÑку за межами"
-
-#~ msgid "internal error: failed to get vim list item %d"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ елемент ÑпиÑку vim %d"
-
-#~ msgid "failed to add item to list"
-#~ msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ елемент до ÑпиÑку"
-
-#~ msgid "internal error: no vim list item %d"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: немає елемента ÑпиÑку vim %d"
-
-#~ msgid "internal error: failed to add item to list"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ елемент до ÑпиÑку"
-
-#~ msgid "cannot delete vim.List attributes"
-#~ msgstr "не вдалоÑÑ Ð·Ð½Ð¸Ñ‰Ð¸Ñ‚Ð¸ атрибути vim.List"
-
-#~ msgid "cannot modify fixed list"
-#~ msgstr "не можна змінити фікÑований ÑпиÑок"
-
-# msgstr "E428: "
-#~ msgid "unnamed function %s does not exist"
-#~ msgstr "безіменної функції %s не Ñ–Ñнує"
-
-# msgstr "E428: "
-#~ msgid "function %s does not exist"
-#~ msgstr "функції %s не Ñ–Ñнує"
-
-#~ msgid "function constructor does not accept keyword arguments"
-#~ msgstr "конÑтруктор функції не приймає іменовані аргументи"
-
-#~ msgid "failed to run function %s"
-#~ msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ функцію %s"
-
-#~ msgid "problem while switching windows"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐºÐ½ÑƒÑ‚Ð¸ вікна"
-
-#~ msgid "unable to unset global option %s"
-#~ msgstr "не вдалоÑÑ Ñкинути глобальну опцію %s"
-
-#~ msgid "unable to unset option %s which does not have global value"
-#~ msgstr "не вдалоÑÑ Ñкинути опцію %s, Ñка не має глобального значеннÑ"
-
-#~ msgid "attempt to refer to deleted tab page"
-#~ msgstr "Ñпроба Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ знищеної вкладки"
-
-#~ msgid "no such tab page"
-#~ msgstr "такої вкладки немає"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "Ñпроба звернутиÑÑ Ð´Ð¾ знищеного вікна"
-
-#~ msgid "readonly attribute: buffer"
-#~ msgstr "атрибут лише Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ: буфер"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "курÑор за межами буфера"
-
-#~ msgid "no such window"
-#~ msgstr "такого вікна немає"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "Ñпроба Ð·Ð²ÐµÑ€Ð½ÐµÐ½Ð½Ñ Ð´Ð¾ знищеного буфера"
-
-#~ msgid "failed to rename buffer"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ буфер"
-
-#~ msgid "mark name must be a single character"
-#~ msgstr "назвою мітки має бути один Ñимвол"
-
-#~ msgid "expected vim.Buffer object, but got %s"
-#~ msgstr "очікувавÑÑ Ð¾Ð±â€™Ñ”ÐºÑ‚ vim.Buffer, але отримано %s"
-
-#~ msgid "failed to switch to buffer %d"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼ÐºÐ½ÑƒÑ‚Ð¸ÑÑ Ð´Ð¾ буфера %d"
-
-#~ msgid "expected vim.Window object, but got %s"
-#~ msgstr "очікувавÑÑ Ð¾Ð±â€™Ñ”ÐºÑ‚ vim.Window, але отримано %s"
-
-#~ msgid "failed to find window in the current tab page"
-#~ msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ вікно у поточній вкладці"
-
-#~ msgid "did not switch to the specified window"
-#~ msgstr "не перемкнувÑÑ Ð´Ð¾ вказаного вікна"
-
-#~ msgid "expected vim.TabPage object, but got %s"
-#~ msgstr "очікувавÑÑ Ð¾Ð±â€™Ñ”ÐºÑ‚ vim.TabPage, але отримано %s"
-
-#~ msgid "did not switch to the specified tab page"
-#~ msgstr "не перемкнувÑÑ Ð´Ð¾ вказаної вкладки"
-
-#~ msgid "failed to run the code"
-#~ msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ код"
-
-#~ msgid "E858: Eval did not return a valid python object"
-#~ msgstr "E858: Eval не повернув дійÑний об’єкт python"
-
-#~ msgid "E859: Failed to convert returned python object to vim value"
-#~ msgstr "E859: Ðе вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ об’єкт python у Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ vim"
-
-#~ msgid "unable to convert %s to vim dictionary"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ %s у Ñловник vim"
-
-#~ msgid "unable to convert %s to vim structure"
-#~ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€Ð¸Ñ‚Ð¸ %s у Ñтруктуру vim"
-
-#~ msgid "internal error: NULL reference passed"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: передано поÑÐ¸Ð»Ð°Ð½Ð½Ñ NULL"
-
-#~ msgid "internal error: invalid value type"
-#~ msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: неправильний тип значеннÑ"
-
-#~ msgid ""
-#~ "Failed to set path hook: sys.path_hooks is not a list\n"
-#~ "You should now do the following:\n"
-#~ "- append vim.path_hook to sys.path_hooks\n"
-#~ "- append vim.VIM_SPECIAL_PATH to sys.path\n"
-#~ msgstr ""
-#~ "Ðе вдалоÑÑ Ð²Ñтановити обробник шлÑху: sys.path_hooks не ÑпиÑок\n"
-#~ "Вам Ñлід вчинити так:\n"
-#~ "- додайте vim.path_hook до sys.path_hooks\n"
-#~ "- додайте vim.VIM_SPECIAL_PATH до sys.path\n"
-
-#~ msgid ""
-#~ "Failed to set path: sys.path is not a list\n"
-#~ "You should now append vim.VIM_SPECIAL_PATH to sys.path"
-#~ msgstr ""
-#~ "Ðе вдалоÑÑ Ð²Ñтановити шлÑÑ…: sys.path не ÑпиÑок\n"
-#~ "Ð’Ð°Ñ Ñлід додати vim.VIM_SPECIAL_PATH до sys.path"
+msgid "List or number required"
+msgstr "ОчікуєтьÑÑ ÑпиÑок чи чиÑло"
diff --git a/src/nvim/po/vi.po b/src/nvim/po/vi.po
index a720510426..456e640a80 100644
--- a/src/nvim/po/vi.po
+++ b/src/nvim/po/vi.po
@@ -2720,11 +2720,6 @@ msgstr "E49: Kích thước thanh cuộn không cho phép"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4311,11 +4306,6 @@ msgstr "dòng %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: Tên sổ đăng ký không cho phép: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"Bản dịch các thông báo sang tiếng Việt: Phan Vĩnh Thịnh <teppi@vnlinux.org>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "Gián đoạn: "
diff --git a/src/nvim/po/zh_CN.UTF-8.po b/src/nvim/po/zh_CN.UTF-8.po
index 82b895d9d6..981719a2e7 100644
--- a/src/nvim/po/zh_CN.UTF-8.po
+++ b/src/nvim/po/zh_CN.UTF-8.po
@@ -2675,11 +2675,6 @@ msgstr "E49: 无效的滚动大å°"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4264,10 +4259,6 @@ msgstr "第 %4ld 行:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 无效的寄存器å: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "简体中文消æ¯ç»´æŠ¤è€…: Yuheng Xie <elephant@linux.net.cn>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "已中断: "
diff --git a/src/nvim/po/zh_CN.cp936.po b/src/nvim/po/zh_CN.cp936.po
deleted file mode 100644
index cf66010c71..0000000000
--- a/src/nvim/po/zh_CN.cp936.po
+++ /dev/null
@@ -1,7932 +0,0 @@
-# Chinese (simplified) Translation for Vim
-#
-# Do ":help uganda" in Vim to read copying and usage conditions.
-# Do ":help credits" in Vim to see a list of people who contributed.
-#
-# FIRST AUTHOR Wang Jun <junw@turbolinux.com.cn>
-#
-# TRANSLATORS
-# Edyfox <edyfox@gmail.com>
-# Yuheng Xie <elephant@linux.net.cn>
-#
-# Generated from zh_CN.po, DO NOT EDIT.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Vim(Simplified Chinese)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2006-04-21 14:00+0800\n"
-"Last-Translator: Yuheng Xie <elephant@linux.net.cn>\n"
-"Language-Team: Simplified Chinese <i18n-translation@lists.linux.net.cn>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=gbk\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "Ñ¡Ïî²ÎÊýºóµÄÄÚÈÝÎÞЧ"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr ""
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Location Áбí]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Quickfix Áбí]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr ""
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: ÎÞ·¨·ÖÅäÈκλº³åÇø£¬Í˳ö³ÌÐò..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: ÎÞ·¨·ÖÅ仺³åÇø£¬Ê¹ÓÃÁíÒ»¸ö»º³åÇø..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: ûÓÐÊÍ·ÅÈκλº³åÇø"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: ûÓÐɾ³ýÈκλº³åÇø"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: ûÓÐÇå³ýÈκλº³åÇø"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "ÊÍ·ÅÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "ÊÍ·ÅÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "ɾ³ýÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "ɾ³ýÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "Çå³ýÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "Çå³ýÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: ÎÞ·¨ÊÍ·Å×îºóÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: ûÓÐÐ޸ĹýµÄ»º³åÇø"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: ûÓпÉÁгöµÄ»º³åÇø"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: »º³åÇø %<PRId64> ²»´æÔÚ"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ÎÞ·¨Çл»£¬ÒÑÊÇ×îºóÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: ÎÞ·¨Çл»£¬ÒÑÊǵÚÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: »º³åÇø %<PRId64> ÒÑÐ޸ĵ«ÉÐδ±£´æ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: ¾¯¸æ: ÎļþÃû¹ý¶à"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: ÕÒ²»µ½»º³åÇø %<PRId64>"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: ÕÒµ½²»Ö¹Ò»¸ö %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: ûÓÐÆ¥ÅäµÄ»º³åÇø %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "µÚ %<PRId64> ÐÐ"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: ÒÑÓлº³åÇøÊ¹ÓøÃÃû³Æ"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [ÒÑÐÞ¸Ä]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[δ±à¼­]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[ÐÂÎļþ]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[¶Á´íÎó]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[Ö»¶Á]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[Ö»¶Á]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 ÐÐ --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> ÐÐ --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "ÐÐ %<PRId64> / %<PRId64> --%d%%-- ÁÐ "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[δÃüÃû]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "°ïÖú"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[°ïÖú]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Ô¤ÀÀ]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "È«²¿"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "µ×¶Ë"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "¶¥¶Ë"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# »º³åÇøÁбí:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr ""
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Signs ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "%s µÄ Signs:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ÐÐ=%<PRId64> id=%d Ãû³Æ=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: ȱÉÙðºÅ"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: ÎÞЧµÄģʽ"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: ´Ë´¦ÐèÒªÊý×Ö"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: ÎÞЧµÄ°Ù·Ö±È"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: ²»ÄܱȽÏ(diff) %<PRId64> ¸öÒÔÉϵĻº³åÇø"
-
-#: ../diff.c:753
-#, fuzzy
-msgid "E810: Cannot read or write temp files"
-msgstr "E557: ÎÞ·¨´ò¿ª termcap Îļþ"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: ÎÞ·¨´´½¨ diff"
-
-#: ../diff.c:966
-#, fuzzy
-msgid "E816: Cannot read patch output"
-msgstr "E98: ÎÞ·¨¶ÁÈ¡ diff µÄÊä³ö"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: ÎÞ·¨¶ÁÈ¡ diff µÄÊä³ö"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: µ±Ç°»º³åÇø²»ÔÚ diff ģʽ"
-
-#: ../diff.c:2100
-#, fuzzy
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E100: ûÓÐÆäËü´¦ÓÚ diff ģʽµÄ»º³åÇø"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: ûÓÐÆäËü´¦ÓÚ diff ģʽµÄ»º³åÇø"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr "E101: ÓÐÁ½¸öÒÔÉϵĻº³åÇø´¦ÓÚ diff ģʽ£¬²»Äܾö¶¨ÓÃÄÄÒ»¸ö"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: ÕÒ²»µ½»º³åÇø \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: »º³åÇø \"%s\" ²»ÔÚ diff ģʽ"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: ÒâÍâµØ¸Ä±äÁË»º³åÇø"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: ¸´ºÏ×Ö·û(digraph)Öв»ÄÜʹÓà Escape"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: ÕÒ²»µ½ Keymap Îļþ"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: ²»ÊÇÔڽű¾ÎļþÖÐʹÓà :loadkeymap "
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr ""
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " ¹Ø¼ü×Ö²¹È« (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ģʽ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " ÕûÐв¹È« (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " ÎļþÃû²¹È« (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Tag ²¹È« (^]^N^P)"
-
-#: ../edit.c:88
-#, fuzzy
-msgid " Path pattern completion (^N^P)"
-msgstr " ·¾¶Ä£Ê½²¹È« (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " ¶¨Ò岹ȫ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Dictionary ²¹È« (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Thesaurus ²¹È« (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " ÃüÁîÐв¹È« (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " Óû§×Ô¶¨Ò岹ȫ (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " È«Äܲ¹È« (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ƴд½¨Òé (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " ¹Ø¼ü×Ö¾Ö²¿²¹È« (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Òѵ½¶ÎÂä½áβ"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr ""
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr ""
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "Ñ¡Ïî 'dictionary' Ϊ¿Õ"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "Ñ¡Ïî 'thesaurus' Ϊ¿Õ"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "ÕýÔÚɨÃè dictionary: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (²åÈë) Scroll (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (Ìæ»») Scroll (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "ÕýÔÚɨÃè: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "ɨÃè±êÇ©."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Ôö¼Ó"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- ²éÕÒÖÐ..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "»Øµ½Æðµã"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "ÁíÒ»ÐеĴÊ"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "ΨһƥÅä"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "Æ¥Åä %d / %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "Æ¥Åä %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: :let ÖгöÏÖÒì³£×Ö·û"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: List Ë÷Òý³¬³ö·¶Î§: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: 䶨ÒåµÄ±äÁ¿: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: ȱÉÙ ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s µÄ²ÎÊý±ØÐëÊÇ List"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s µÄ²ÎÊý±ØÐëÊÇ List »òÕß Dictionary"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Dictionary µÄ¼ü²»ÄÜΪ¿Õ"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: ÐèÒª List"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: ÐèÒª Dictionary"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary Öв»´æÔÚ¼ü: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: º¯Êý %s ÒÑ´æÔÚ£¬Çë¼Ó ! Ç¿ÖÆÌæ»»"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: Dictionary ÏîÒÑ´æÔÚ"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: ÐèÒª Funcref"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: ²»ÄÜ¶Ô Dictionary ʹÓà [:]"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: %s= µÄ±äÁ¿ÀàÐͲ»ÕýÈ·"
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: ÎÞЧµÄ±äÁ¿Ãû: %s"
-
-#: ../eval.c:157
-#, fuzzy
-msgid "E806: using Float as a String"
-msgstr "E730: ½« List ×÷ String ʹÓÃ"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Ä¿±ê±È List ÏîÊýÉÙ"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Ä¿±ê±È List ÏîÊý¶à"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "±äÁ¿ÁбíÖгöÏÖÁ½¸ö ;"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: ÎÞ·¨Áгö %s µÄ±äÁ¿"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Ö»ÄÜË÷Òý List »ò Dictionary"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] ±ØÐëÔÚ×îºó"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] ÐèÒªÒ»¸ö List Öµ"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: List ÖµµÄÏî±ÈÄ¿±ê¶à"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: List ֵûÓÐ×ã¹»¶àµÄÏî"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for ºóȱÉÙ \"in\""
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: ȱÉÙÀ¨ºÅ: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Î޴˱äÁ¿: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (un)lock µÄ±äÁ¿Ç¶Ì×¹ýÉî"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' ºóȱÉÙ ':'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Ö»ÄÜ±È½Ï List ºÍ List"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: ¶Ô List ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Ö»ÄÜ±È½Ï Dictionary ºÍ Dictionary"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: ¶Ô Dictionary ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Ö»ÄÜ±È½Ï Funcref ºÍ Funcref"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: ¶Ô Funcrefs ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:4277
-#, fuzzy
-msgid "E804: Cannot use '%' with Float"
-msgstr "E719: ²»ÄÜ¶Ô Dictionary ʹÓà [:]"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: ȱÉÙ ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: ²»ÄÜË÷ÒýÒ»¸ö Funcref"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: ȱÉÙÑ¡ÏîÃû³Æ: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: δ֪µÄÑ¡Ïî: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: ȱÉÙÒýºÅ: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: ȱÉÙÒýºÅ: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: List ÖÐȱÉÙ¶ººÅ: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: List ȱÉÙ½áÊø·û ']': %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Dictionary ÖÐȱÉÙðºÅ: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Dictionary ÖгöÏÖÖØ¸´µÄ¼ü: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Dictionary ÖÐȱÉÙ¶ººÅ: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Dictionary ȱÉÙ½áÊø·û '}': %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: ±äÁ¿Ç¶Ì×¹ýÉîÎÞ·¨ÏÔʾ"
-
-#: ../eval.c:7188
-#, fuzzy, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:7190
-#, fuzzy, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:7377
-#, fuzzy, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E130: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: º¯Êý %s µÄ²ÎÊýÌ«ÉÙ"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: <SID> ²»ÄÜÔÚ script ÉÏÏÂÎÄÍâʹÓÃ: %s"
-
-#: ../eval.c:7391
-#, fuzzy, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E720: Dictionary ÖÐȱÉÙðºÅ: %s"
-
-#: ../eval.c:7453
-#, fuzzy
-msgid "E808: Number or Float required"
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../eval.c:7503
-#, fuzzy
-msgid "add() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: ²ÎÊý¹ý¶à"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() Ö»ÄÜÔÚ²åÈëģʽÖÐʹÓÃ"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "È·¶¨(&O)"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: ¼üÒÑ´æÔÚ: %s"
-
-#: ../eval.c:8692
-#, fuzzy
-msgid "extend() argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../eval.c:8915
-#, fuzzy
-msgid "map() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:8916
-#, fuzzy
-msgid "filter() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ÐÐ: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore() µÄµ÷ÓôÎÊý¶àÓÚ inputsave()"
-
-#: ../eval.c:10771
-#, fuzzy
-msgid "insert() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: ²»ÔÊÐíµÄ·¶Î§"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: len() µÄÀàÐÍÎÞЧ"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: ²½³¤ÎªÁã"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: ÆðʼֵÔÚÖÕÖ¹Öµºó"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<¿Õ>"
-
-#: ../eval.c:12282
-#, fuzzy
-msgid "remove() argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ·ûºÅÁ¬½Ó¹ý¶à(Ñ­»·£¿)"
-
-#: ../eval.c:12593
-#, fuzzy
-msgid "reverse() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "sort() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Sort ±È½Ïº¯Êýʧ°Ü"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Sort ±È½Ïº¯Êýʧ°Ü"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(ÎÞЧ)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: дÁÙʱÎļþ³ö´í"
-
-#: ../eval.c:16159
-#, fuzzy
-msgid "E805: Using a Float as a Number"
-msgstr "E745: ½« List ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: ½« Funcref ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: ½« List ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: ½« Dictionary ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: ½« Funcref ×÷ String ʹÓÃ"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: ½« List ×÷ String ʹÓÃ"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: ½« Dictionary ×÷ String ʹÓÃ"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: ±äÁ¿ÀàÐͲ»Æ¥Åä: %s"
-
-#: ../eval.c:16705
-#, fuzzy, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E738: ÎÞ·¨Áгö %s µÄ±äÁ¿"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Funcref ±äÁ¿Ãû±ØÐëÒÔ´óд×Öĸ¿ªÍ·: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: ±äÁ¿ÃûÓëÒÑÓк¯ÊýÃû³åÍ»: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: ÖµÒÑËø¶¨: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "δ֪"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: ÎÞ·¨¸Ä±ä %s µÄÖµ"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: ±äÁ¿Ç¶Ì×¹ýÉîÎÞ·¨¸´ÖÆ"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: º¯Êý %s ÉÐ䶨Òå"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: ȱÉÙ '(': %s"
-
-#: ../eval.c:17293
-#, fuzzy
-msgid "E862: Cannot use g: here"
-msgstr "E284: ²»ÄÜÉ趨 IC Öµ"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../eval.c:17323
-#, fuzzy, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E125: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: ȱÉÙ :endfunction"
-
-#: ../eval.c:17537
-#, fuzzy, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E746: º¯ÊýÃûÓë½Å±¾ÎļþÃû²»Æ¥Åä: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: º¯Êý %s ÕýÔÚʹÓÃÖУ¬²»ÄÜÖØÐ¶¨Òå"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: º¯ÊýÃûÓë½Å±¾ÎļþÃû²»Æ¥Åä: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: ÐèÒªº¯ÊýÃû"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: º¯ÊýÃû±ØÐëÒÔ´óд×Öĸ¿ªÍ·»òÕß°üº¬Ã°ºÅ: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: º¯ÊýÃû±ØÐëÒÔ´óд×Öĸ¿ªÍ·»òÕß°üº¬Ã°ºÅ: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ÎÞ·¨É¾³ýº¯Êý %s: ÕýÔÚʹÓÃÖÐ"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: º¯Êýµ÷ÓÃÉî¶È³¬³ö 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "µ÷ÓÃ %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ÒÑÖÐÖ¹"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s ·µ»Ø #%<PRId64> "
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s ·µ»Ø %s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "ÔÚ %s ÖмÌÐø"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return ²»ÔÚº¯ÊýÖÐ"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# È«¾Ö±äÁ¿:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t×î½üÐÞ¸ÄÓÚ "
-
-#: ../eval.c:19272
-#, fuzzy
-msgid "No old files"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, Ê®Áù½øÖÆ %02x, °Ë½øÖÆ %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, Ê®Áù½øÖÆ %04x, °Ë½øÖÆ %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, Ê®Áù½øÖÆ %08x, °Ë½øÖÆ %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: °ÑÐÐÒÆ¶¯µ½×ÔÒÑÖÐ"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "ÒÆ¶¯ÁË 1 ÐÐ"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "ÒÆ¶¯ÁË %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "¹ýÂËÁË %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *Filter* ×Ô¶¯ÃüÁî²»¿ÉÒԸı䵱ǰ»º³åÇø"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[ÒÑÐ޸ĵ«ÉÐδ±£´æ]\n"
-
-# bad to translate
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s λÓÚÐÐ: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: ´íÎó¹ý¶à£¬ºöÂÔÎļþµÄÊ£Óಿ·Ö"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "¶ÁÈ¡ viminfo Îļþ \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " ÐÅÏ¢"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " 񈬀"
-
-#: ../ex_cmds.c:1462
-#, fuzzy
-msgid " oldfiles"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ʧ°Ü"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Viminfo Îļþ²»¿ÉдÈë: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: ÎÞ·¨Ð´Èë viminfo Îļþ %s£¡"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "дÈë viminfo Îļþ \"%s\""
-
-# do not translate to avoid writing Chinese in files
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, fuzzy, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Õâ¸ö viminfo ÎļþÊÇÓÉ Vim %s Éú³ÉµÄ¡£\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:1722
-#, fuzzy
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Èç¹ûÒª×ÔÐÐÐÞ¸ÄÇëÌØ±ðСÐÄ£¡\n"
-"\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:1723
-#, fuzzy
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# 'encoding' ÔÚ´ËÎļþ½¨Á¢Ê±µÄÖµ\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "ÎÞЧµÄÆô¶¯×Ö·û"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "ҪдÈ벿·ÖÎļþÂð£¿"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ÇëʹÓà ! À´Ð´È벿·Ö»º³åÇø"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "¸²¸ÇÒÑ´æÔÚµÄÎļþ \"%s\" Âð£¿"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "½»»»Îļþ \"%s\" ÒÑ´æÔÚ£¬È·ÊµÒª¸²¸ÇÂð£¿"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: ½»»»ÎļþÒÑ´æÔÚ: %s (:silent! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: »º³åÇø %<PRId64> ûÓÐÎļþÃû"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ÎļþδдÈë: дÈë±» 'write' Ñ¡Ïî½ûÓÃ"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"\"%s\" ÒÑÉ趨 'readonly' Ñ¡Ïî¡£\n"
-"ȷʵҪ¸²¸ÇÂð£¿"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-
-#: ../ex_cmds.c:2451
-#, fuzzy, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "Ö»¶Á (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: ×Ô¶¯ÃüÁîÒâÍâµØÉ¾³ýÁËлº³åÇø %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: :z ²»½ÓÊÜ·ÇÊý×ֵIJÎÊý"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim ÖнûֹʹÓà shell ÃüÁî"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: ÕýÔò±í´ïʽ²»ÄÜÓÃ×Öĸ×÷·Ö½ç"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "Ìæ»»Îª %s (y/n/a/q/l/^E/^Y)£¿"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(ÒÑÖжÏ) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1 ¸öÆ¥Å䣬"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1 ´ÎÌæ»»£¬"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> ¸öÆ¥Å䣬"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> ´ÎÌæ»»£¬"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr "¹² 1 ÐÐ"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr "¹² %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global ²»ÄܵݹéÖ´ÐÐ"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: global ȱÉÙÕýÔò±í´ïʽ"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "ÿÐж¼Æ¥Åä±í´ïʽ: %s"
-
-#: ../ex_cmds.c:4510
-#, fuzzy, c-format
-msgid "Pattern not found: %s"
-msgstr "ÕÒ²»µ½Ä£Ê½"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:4587
-#, fuzzy
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# ×î½üµÄÌæ»»×Ö·û´®:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: ²»Òª»Å£¡"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ±§Ç¸£¬Ã»ÓÐ '%s' µÄ %s µÄ˵Ã÷"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: ±§Ç¸£¬Ã»ÓÐ %s µÄ˵Ã÷"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "±§Ç¸£¬ÕÒ²»µ½°ïÖúÎļþ \"%s\""
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: ²»ÊÇĿ¼: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: ÎÞ·¨´ò¿ª²¢Ð´Èë %s"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ %s"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: ÔÚÒ»ÖÖÓïÑÔÖлìºÏÁ˶àÖÖ°ïÖúÎļþ±àÂë: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Tag \"%s\" ÔÚÎļþ %s/%s ÖÐÖØ¸´³öÏÖ"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: δ֪µÄ sign ÃüÁî: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: ȱÉÙ sign Ãû³Æ"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Signs ¶¨Òå¹ý¶à"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: ÎÞЧµÄ sign ÎÄ×Ö: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: δ֪µÄ sign: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: ȱÉÙ sign ºÅ"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ÎÞЧµÄ»º³åÇøÃû: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: ÎÞЧµÄ sign ID: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (²»Ö§³Ö)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[ÒÑɾ³ý]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "½øÈëµ÷ÊÔģʽ¡£ÊäÈë \"cont\" ¼ÌÐøÔËÐС£"
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "µÚ %<PRId64> ÐÐ: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "ÃüÁî: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "¶Ïµã \"%s%s\" µÚ %<PRId64> ÐÐ"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: ÕÒ²»µ½¶Ïµã: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "ûÓж¨Òå¶Ïµã"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s µÚ %<PRId64> ÐÐ"
-
-#: ../ex_cmds2.c:942
-#, fuzzy
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: ÇëÏÈʹÓà :profile start <fname>"
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "½«¸Ä±ä±£´æµ½ \"%s\" Âð£¿"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "δÃüÃû"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: »º³åÇø \"%s\" ÒÑÐ޸ĵ«ÉÐδ±£´æ"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "¾¯¸æ: ÒâÍâµØ½øÈëÁËÆäËü»º³åÇø (Çë¼ì²é×Ô¶¯ÃüÁî)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Ö»ÓÐÒ»¸öÎļþ¿É±à¼­"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: ÎÞ·¨Çл»£¬ÒÑÊǵÚÒ»¸öÎļþ"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: ÎÞ·¨Çл»£¬ÒÑÊÇ×îºóÒ»¸öÎļþ"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: ²»Ö§³Ö±àÒëÆ÷: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "ÕýÔÚ²éÕÒ \"%s\"£¬ÔÚ \"%s\" ÖÐ"
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "ÕýÔÚ²éÕÒ \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "ÔÚ 'runtimepath' ÖÐÕÒ²»µ½ \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "²»ÄÜÖ´ÐÐĿ¼: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "²»ÄÜÖ´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "µÚ %<PRId64> ÐÐ: ²»ÄÜÖ´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "Ö´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "µÚ %<PRId64> ÐÐ: Ö´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "½áÊøÖ´ÐÐ %s"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "modeline"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c ²ÎÊý"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "»·¾³±äÁ¿"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr ""
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: ¾¯¸æ: ´íÎóµÄÐзָô·û£¬¿ÉÄÜÊÇÉÙÁË ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: Ôڽű¾ÎļþÍâʹÓÃÁË :scriptencoding"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: Ôڽű¾ÎļþÍâʹÓÃÁË :finish"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "µ±Ç°µÄ %sÓïÑÔ: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: ²»ÄÜÉ趨ÓïÑÔΪ \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "½øÈë Ex ģʽ¡£ÊäÈë \"visual\" »Øµ½Õý³£Ä£Ê½¡£"
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: Òѵ½Îļþĩβ"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: ÃüÁîµÝ¹é²ãÊý¹ý¶à"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Ò쳣ûÓб»²¶»ñ: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "½Å±¾Îļþ½áÊø"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "º¯Êý½áÊø"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ²»È·¶¨µÄÓû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: ²»ÊDZ༭Æ÷µÄÃüÁî"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: ʹÓÃÁËÄæÏòµÄ·¶Î§"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "ʹÓÃÁËÄæÏòµÄ·¶Î§£¬È·¶¨½»»»Âð"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: ÇëʹÓà w »ò w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: ±§Ç¸£¬ÃüÁîÔڴ˰汾Öв»¿ÉÓÃ"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Ö»ÔÊÐíÒ»¸öÎļþÃû"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "»¹ÓÐ 1 ¸öÎļþδ±à¼­¡£È·ÊµÒªÍ˳öÂð£¿"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "»¹ÓÐ %d ¸öÎļþδ±à¼­¡£È·ÊµÒªÍ˳öÂð£¿"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: »¹ÓÐ 1 ¸öÎļþδ±à¼­"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: »¹ÓÐ %<PRId64> ¸öÎļþδ±à¼­"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ÃüÁîÒÑ´æÔÚ: Çë¼Ó ! Ç¿ÖÆÌæ»»"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Ãû³Æ ²ÎÊý ·¶Î§ ²¹È« ¶¨Òå "
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "ÕÒ²»µ½Óû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: ûÓÐÖ¸¶¨ÊôÐÔ"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: ÎÞЧµÄ²ÎÊý¸öÊý"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ²»ÄÜÖ¸¶¨Á½´Î¼ÆÊý"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: ÎÞЧµÄ¼ÆÊýĬÈÏÖµ"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -complete ÐèÒª²ÎÊý"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: ÎÞЧµÄÊôÐÔ: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: ÎÞЧµÄÃüÁîÃû"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Óû§×Ô¶¨ÒåÃüÁî±ØÐëÒÔ´óд×Öĸ¿ªÍ·"
-
-#: ../ex_docmd.c:4696
-#, fuzzy
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E464: ²»È·¶¨µÄÓû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: ûÓÐÕâ¸öÓû§×Ô¶¨ÒåÃüÁî: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: ÎÞЧµÄ²¹È«ÀàÐÍ: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: Ö»ÓÐ custom ²¹È«²ÅÔÊÐí²ÎÊý"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Custom ²¹È«ÐèÒªÒ»¸öº¯Êý²ÎÊý"
-
-#: ../ex_docmd.c:5257
-#, fuzzy, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: ÕÒ²»µ½ÅäÉ«·½°¸ %s"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "ÄúºÃ£¬Vim Óû§£¡"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: ²»ÄܹرÕ×îºóÒ»¸ö tab Ò³"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "ÒѾ­Ö»Ê£Ò»¸ö tab Ò³ÁË"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Tab Ò³ %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "ÎÞ½»»»Îļþ"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E747: ²»ÄܸıäĿ¼£¬»º³åÇøÒÑÐÞ¸Ä (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: ǰһ¸öĿ¼²»´æÔÚ"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: δ֪"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize ÐèÒªÁ½¸öÊý×Ö²ÎÊý"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: ÔÚ´ËÆ½Ì¨Éϲ»ÄÜ»ñµÃ´°¿ÚλÖÃ"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos ÐèÒªÁ½¸öÊý×Ö²ÎÊý"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: ÎÞ·¨´´½¨Ä¿Â¼: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ÒÑ´æÔÚ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: ÎÞ·¨´ò¿ª²¢Ð´Èë \"%s\""
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ²ÎÊý±ØÐëÊÇÒ»¸ö×Öĸ»òÕßÕý/·´ÒýºÅ"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal µÝ¹é²ãÊý¹ýÉî"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: ûÓÐÓÃÓÚÌæ»» '#' µÄ½»ÌæÎļþÃû"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: ûÓÐÓÃÓÚÌæ»» \"<afile>\" µÄ×Ô¶¯ÃüÁîÎļþÃû"
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: ûÓÐÓÃÓÚÌæ»» \"<abuf>\" µÄ×Ô¶¯ÃüÁ³åÇøºÅ"
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: ûÓÐÓÃÓÚÌæ»» \"<amatch>\" µÄ×Ô¶¯ÃüÁîÆ¥ÅäÃû"
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: ûÓÐÓÃÓÚÌæ»» \"<sfile>\" µÄ :source ÎļþÃû"
-
-#: ../ex_docmd.c:7876
-#, fuzzy
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E498: ûÓÐÓÃÓÚÌæ»» \"<sfile>\" µÄ :source ÎļþÃû"
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: '%' »ò '#' Ϊ¿ÕÎļþÃû£¬Ö»ÄÜÓÃÓÚ \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: ½á¹ûΪ¿Õ×Ö·û´®"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ viminfo Îļþ"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: ²»ÄÜ :throw ǰ׺Ϊ 'Vim' µÄÒì³£"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Å׳öÒì³£: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Íê³ÉÒì³£: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "¶ªÆúÒì³£: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s£¬µÚ %<PRId64> ÐÐ"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "²¶»ñÒì³£: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr ""
-
-#: ../ex_eval.c:679
-#, fuzzy, c-format
-msgid "%s resumed"
-msgstr " ÒÑ·µ»Ø\n"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr ""
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Òì³£"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "´íÎóºÍÖжÏ"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "´íÎó"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "ÖжÏ"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: :if ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: ¶à¸ö :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif ÔÚ :else ºóÃæ"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while/:for ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue ȱÉÙ¶ÔÓ¦µÄ :while »ò :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break ȱÉÙ¶ÔÓ¦µÄ :while »ò :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: :while ÒÔ :endfor ½áβ"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: :for ÒÔ :endwhile ½áβ"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: :try ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch ÔÚ :finally ºóÃæ"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: ¶à¸ö :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction ²»ÔÚº¯ÊýÄÚ"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Ŀǰ²»ÔÊÐí±à¼­±ðµÄ»º³åÇø"
-
-#: ../ex_getln.c:1656
-#, fuzzy
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E788: Ŀǰ²»ÔÊÐí±à¼­±ðµÄ»º³åÇø"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "tag Ãû"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " ÀàÐÍ Îļþ\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "Ñ¡Ïî 'history' ΪÁã"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5046
-#, fuzzy, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s ÀúÊ·¼Ç¼ (´Óе½¾É):\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5047
-#, fuzzy
-msgid "Command Line"
-msgstr "ÃüÁîÐÐ"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5048
-#, fuzzy
-msgid "Search String"
-msgstr "²éÕÒ×Ö·û´®"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5049
-#, fuzzy
-msgid "Expression"
-msgstr "±í´ïʽ"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5050
-#, fuzzy
-msgid "Input Line"
-msgstr "ÊäÈëÐÐ"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ³¬¹ýÃüÁ¶È"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: »î¶¯´°¿Ú»ò»º³åÇøÒѱ»É¾³ý"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr ""
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr "E343: ÎÞЧµÄ·¾¶: '**[number]' ±ØÐëÔÚ·¾¶Ä©Î²»òÕߺóÃæ½Ó '%s'¡£"
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath ÖÐÕÒ²»µ½Ä¿Â¼ \"%s\""
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: ÔÚ·¾¶ÖÐÕÒ²»µ½Îļþ \"%s\""
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: ÔÚ·¾¶ÖÐÕÒ²»µ½¸ü¶àµÄÎļþ \"%s\""
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: ÔÚ·¾¶ÖÐÕÒ²»µ½¸ü¶àµÄÎļþ \"%s\""
-
-#: ../fileio.c:137
-#, fuzzy
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E135: *Filter* ×Ô¶¯ÃüÁî²»¿ÉÒԸı䵱ǰ»º³åÇø"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "ÎÞЧµÄÎļþÃû"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "ÊÇĿ¼"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "²»ÊÇÎļþ"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[ÐÂÎļþ]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[ÐÂĿ¼]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Îļþ¹ý´ó]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[ȨÏÞ²»×ã]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre ×Ô¶¯ÃüÁîµ¼ÖÂÎļþ²»¿É¶Á"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre ×Ô¶¯ÃüÁî²»ÔÊÐí¸Ä±äµ±Ç°»º³åÇø"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: ´Ó±ê×¼ÊäÈë¶ÁÈ¡...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: ת»»µ¼ÖÂÎļþ²»¿É¶Á"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/socket]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[socket]"
-
-#. or character special
-#: ../fileio.c:1801
-#, fuzzy
-msgid "[character special]"
-msgstr "1 ¸ö×Ö·û"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[ȱÉÙ CR]'"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[³¤Ðзָî]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[δת»»]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[ÒÑת»»]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[µÚ %<PRId64> ÐÐת»»´íÎó]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[µÚ %<PRId64> ÐÐÎÞЧ×Ö·û]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[¶Á´íÎó]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "ÕÒ²»µ½ÓÃÓÚת»»µÄÁÙʱÎļþ"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert' ת»»Ê§°Ü"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "ÎÞ·¨¶ÁÈ¡ 'charconvert' µÄÊä³ö"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: ÕÒ²»µ½ acwrite »º³åÇø¶ÔÓ¦µÄ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: ×Ô¶¯ÃüÁîɾ³ý»òÊÍ·ÅÁËҪдÈëµÄ»º³åÇø"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: ×Ô¶¯ÃüÁîÒâÍâµØ¸Ä±äÁËÐÐÊý"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "²»ÊÇÎļþ»ò¿ÉдµÄÉ豸"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "Ö»¶Á (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: ÎÞ·¨Ð´È뱸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: ¹Ø±Õ±¸·ÝÎļþ³ö´í (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: ÎÞ·¨¶ÁÈ¡ÎļþÒÔ¹©±¸·Ý (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: ÎÞ·¨´´½¨±¸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: ÎÞ·¨Éú³É±¸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: ÕÒ²»µ½ÓÃÓÚдÈëµÄÁÙʱÎļþ"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: ÎÞ·¨×ª»» (Çë¼Ó ! Ç¿ÖÆ²»×ª»»Ð´Èë)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: ÎÞ·¨´ò¿ª²¢Ð´ÈëÁ´½ÓÎļþ"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: ÎÞ·¨´ò¿ª²¢Ð´ÈëÎļþ"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: ͬ²½Ê§°Ü"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: ¹Ø±Õʧ°Ü"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: дÈë´íÎó£¬×ª»»Ê§°Ü (Ç뽫 'fenc' ÖÿÕÒÔÇ¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3441
-#, fuzzy, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr "E513: дÈë´íÎó£¬×ª»»Ê§°Ü (Ç뽫 'fenc' ÖÿÕÒÔÇ¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: дÈë´íÎó (ÎļþϵͳÒÑÂú£¿)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " ת»»´íÎó"
-
-#: ../fileio.c:3509
-#, fuzzy, c-format
-msgid " in line %<PRId64>;"
-msgstr "µÚ %<PRId64> ÐÐ"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[É豸]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[ÐÂ]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " ÒÑ×·¼Ó"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " ÒÑдÈë"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Patchmode: ÎÞ·¨±£´æÔ­Ê¼Îļþ"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: Patchmode: ÎÞ·¨Éú³É¿ÕµÄԭʼÎļþ"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: ÎÞ·¨É¾³ý±¸·ÝÎļþ"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"¾¯¸æ: ԭʼÎļþ¿ÉÄÜÒѶªÊ§»òËð»µ\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "ÔÚÎļþÕýȷдÈëǰÇëÎðÍ˳ö±à¼­Æ÷£¡"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[dos ¸ñʽ]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[mac ¸ñʽ]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[unix ¸ñʽ]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 ÐУ¬"
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> ÐУ¬"
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 ¸ö×Ö·û"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> ¸ö×Ö·û"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[×îºóÒ»Ðв»ÍêÕû]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "¾¯¸æ: ´ËÎļþ×Ô¶ÁÈëºóÒÑ·¢Éú±ä¶¯£¡£¡£¡"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "ȷʵҪдÈëÂð"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: дÈëÎļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: ¹Ø±ÕÎļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: ¶ÁÈ¡Îļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: FileChangedShell ×Ô¶¯ÃüÁîɾ³ýÁË»º³åÇø"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Îļþ \"%s\" ÒѾ­²»´æÔÚ"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr "W12: ¾¯¸æ: Îļþ \"%s\" Òѱ䶯£¬²¢ÇÒÔÚ Vim ÖеĻº³åÇøÒ²Òѱ䶯"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W12\""
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" Òѱ䶯"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W11\""
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" µÄģʽÒѱ䶯"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W16\""
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" Òѱ»´´½¨"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "¾¯¸æ"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"È·¶¨(&O)\n"
-"¼ÓÔØÎļþ(&L)"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: ÎÞ·¨ÎªÖØÐ¼ÓÔØ \"%s\" ×ö×¼±¸"
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: ÎÞ·¨ÖØÐ¼ÓÔØ \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--ÒÑɾ³ý--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr ""
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: ÎÞ´Ë×é: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: * ºóÃæÓÐÎÞЧ×Ö·û: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: ÎÞ´Ëʼþ: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: ÎÞ´Ë×é»òʼþ: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- ×Ô¶¯ÃüÁî ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: ÎÞЧµÄ»º³åÇøºÅ "
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: ²»ÄܶÔËùÓÐʼþÖ´ÐÐ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "ûÓÐÆ¥ÅäµÄ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: ×Ô¶¯ÃüÁîǶÌײãÊý¹ýÉî"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s ×Ô¶¯ÃüÁî \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Ö´ÐÐ %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "×Ô¶¯ÃüÁî %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: ȱÉÙ {¡£"
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: ȱÉÙ }¡£"
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: ÕÒ²»µ½ÕÛµþ"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' Ï´´½¨ÕÛµþ"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' ÏÂɾ³ýÕÛµþ"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--ÒÑÕÛµþ %3ld ÐÐ"
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Ìí¼Óµ½ÒѶÁ»º³åÇøÖÐ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: µÝ¹éÓ³Éä"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: È«¾ÖËõд %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: È«¾ÖÓ³Éä %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: Ëõд %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: Ó³Éä %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "ÕÒ²»µ½Ëõд"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "ÕÒ²»µ½Ó³Éä"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: ÎÞЧµÄģʽ"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--»º³åÇøÎÞÄÚÈÝ--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: ÃüÁî±»ÖÐÖ¹"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: ÐèÒª²ÎÊý"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ ºóÃæÓ¦¸Ã¸úÓÐ /¡¢? »ò &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ÔÚÃüÁîÐд°¿ÚÖÐÎÞЧ£»<CR> Ö´ÐУ¬CTRL-C Í˳ö"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr "E12: µ±Ç°Ä¿Â¼ÖÐµÄ exrc/vimrc »ò tag ²éÕÒÖв»ÔÊÐí´ËÃüÁî"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: ȱÉÙ :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: ȱÉÙ :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: ȱÉÙ :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: ȱÉÙ :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile ȱÉÙ¶ÔÓ¦µÄ :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor ȱÉÙ¶ÔÓ¦µÄ :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: ÎļþÒÑ´æÔÚ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: ÃüÁîÖ´ÐÐʧ°Ü"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: ÄÚ²¿´íÎó"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "ÒÑÖжÏ"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: ÎÞЧµÄµØÖ·"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: ÎÞЧµÄ²ÎÊý"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: ÎÞЧµÄ±í´ïʽ: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: ÎÞЧµÄ·¶Î§"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: ÎÞЧµÄÃüÁî"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ÊÇĿ¼"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: ÎÞЧµÄ¹ö¶¯´óС"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: µ÷Óú¯Êý¿â \"%s()\" ʧ°Ü"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: ±ê¼ÇµÄÐкÅÎÞЧ"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: ûÓÐÉ趨±ê¼Ç"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: ²»ÄÜÐ޸ģ¬ÒòΪѡÏî 'modifiable' ÊǹصÄ"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: ½Å±¾Ç¶Ì×¹ýÉî"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: ûÓн»ÌæÎļþ"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: ûÓÐÕâ¸öËõд"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ²»ÄÜʹÓà \"!\""
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: ÎÞ·¨Ê¹ÓÃͼÐνçÃæ: ±àÒëʱûÓÐÆôÓÃ"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: ûÓÐÕâ¸ö¸ßÁÁȺ×éÃû: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: ûÓвåÈë¹ýÎÄ×Ö"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: ûÓÐǰһ¸öÃüÁîÐÐ"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: ûÓÐÕâ¸öÓ³Éä"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: ûÓÐÆ¥Åä"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: ûÓÐÆ¥Åä: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: ûÓÐÎļþÃû"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: ûÓÐǰһ¸öÌæ»»ÕýÔò±í´ïʽ"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: ûÓÐǰһ¸öÃüÁî"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: ûÓÐǰһ¸öÕýÔò±í´ïʽ"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: ²»ÄÜʹÓ÷¶Î§"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ûÓÐ×ã¹»µÄ¿Õ¼ä"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: ÎÞ·¨´´½¨Îļþ %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: ÎÞ·¨»ñÈ¡ÁÙʱÎļþÃû"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: ÎÞ·¨´ò¿ªÎļþ %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: ÎÞ·¨¶ÁÈ¡Îļþ %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ÒÑÐ޸ĵ«ÉÐδ±£´æ (¿ÉÓà ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[ÒÑÐ޸ĵ«ÉÐδ±£´æ]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ¿ÕµÄ²ÎÊý"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: ´Ë´¦ÐèÒªÊý×Ö"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: ÎÞ·¨´ò¿ª´íÎóÎļþ %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: ÄÚ´æ²»×㣡"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "ÕÒ²»µ½Ä£Ê½"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: ÕÒ²»µ½Ä£Ê½: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: ²ÎÊý±ØÐëÊÇÕýÊý"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: ÎÞ·¨»Øµ½Ç°Ò»¸öĿ¼"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: ûÓдíÎó"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: ûÓÐ location Áбí"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: ÒÑËð»µµÄÆ¥Åä×Ö·û´®"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: ÒÑË𻵵ÄÕýÔò±í´ïʽ³ÌÐò"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: ÒÑÉ趨ѡÏî 'readonly' (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: ²»ÄܸıäÖ»¶Á±äÁ¿ \"%s\""
-
-#: ../globals.h:1075
-#, fuzzy, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: ²»ÄÜÔÚ sandbox ÖÐÉ趨±äÁ¿: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: ¶ÁÈ¡´íÎóÎļþʧ°Ü"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: ²»ÔÊÐíÔÚ sandbox ÖÐʹÓÃ"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: ²»ÔÊÐíÔÚ´ËʹÓÃ"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: ²»Ö§³ÖÉ趨ÆÁĻģʽ"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: ÎÞЧµÄ¹ö¶¯´óС"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: Ñ¡Ïî 'shell' Ϊ¿Õ"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: ÎÞ·¨¶ÁÈ¡ sign Êý¾Ý£¡"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: ½»»»Îļþ¹Ø±Õ´íÎó"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: tag ¶ÑջΪ¿Õ"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: ÃüÁî¹ý¸´ÔÓ"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Ãû×Ö¹ý³¤"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: [ ¹ý¶à"
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: ÎļþÃû¹ý¶à"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: ¶àÓàµÄβ²¿×Ö·û"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: δ֪µÄ±ê¼Ç"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: ÎÞ·¨À©Õ¹Í¨Åä·û"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' ²»ÄÜСÓÚ 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' ²»ÄÜСÓÚ 'winminwidth'"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: дÈë³ö´í"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "¼ÆÊýΪÁã"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: Ôڽű¾»·¾³ÍâʹÓÃÁË <SID>"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: ÄÚ²¿´íÎó: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: ±í´ïʽµÄÄÚ´æÊ¹Óó¬³ö 'maxmempattern'"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: ¿ÕµÄ»º³åÇø"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: ÎÞЧµÄËÑË÷±í´ïʽ»ò·Ö¸ô·û"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: ÎļþÒÑÔÚÁíÒ»¸ö»º³åÇøÖб»¼ÓÔØ"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: ûÓÐÉ趨ѡÏî '%s'"
-
-#: ../globals.h:1111
-#, fuzzy
-msgid "E850: Invalid register name"
-msgstr "E354: ÎÞЧµÄ¼Ä´æÆ÷Ãû: '%s'"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ÒѲéÕÒµ½Îļþ¿ªÍ·£¬ÔÙ´Ó½áβ¼ÌÐø²éÕÒ"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "ÒѲéÕÒµ½Îļþ½á⣬ÔÙ´Ó¿ªÍ·¼ÌÐø²éÕÒ"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: ȱÉÙðºÅ"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: ÎÞЧµÄ²¿·Ö"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: Ó¦¸ÃÒªÓÐÊý×Ö"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "µÚ %d Ò³"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "ûÓÐÒª´òÓ¡µÄÎÄ×Ö"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "ÕýÔÚ´òÓ¡µÚ %d Ò³ (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr "¸´ÖÆ %d / %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "ÒÑ´òÓ¡: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "´òÓ¡ÖÐÖ¹"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: дÈë PostScript Êä³öÎļþ³ö´í"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: ÎÞ·¨¶ÁÈ¡ PostScript ×ÊÔ´Îļþ \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Îļþ \"%s\" ²»ÊÇ PostScript ×ÊÔ´Îļþ"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Îļþ \"%s\" ²»ÊÇÒÑÖ§³ÖµÄ PostScript ×ÊÔ´Îļþ"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" ×ÊÔ´Îļþ°æ±¾²»ÕýÈ·"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: ²»¼æÈݵĶà×Ö½Ú±àÂëºÍ×Ö·û¼¯¡£"
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset ÔÚ¶à×Ö½Ú±àÂëϲ»ÄÜΪ¿Õ¡£"
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: ûÓÐÖ¸¶¨¶à×Ö½Ú´òÓ¡µÄĬÈÏ×ÖÌå¡£"
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: ÎÞ·¨´ò¿ª PostScript Êä³öÎļþ"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"prolog.ps\""
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"cidfont.ps\""
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"%s.ps\""
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: ÎÞ·¨×ª»»ÖÁ´òÓ¡±àÂë \"%s\""
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "·¢Ë͵½´òÓ¡»ú¡­¡­"
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: ÎÞ·¨´òÓ¡ PostScript Îļþ"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "´òÓ¡ÈÎÎñÒѱ»·¢ËÍ¡£"
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Ìí¼ÓÒ»¸öеÄÊý¾Ý¿â"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "²éѯһ¸öģʽ"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "ÏÔʾ´ËÐÅÏ¢"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "½áÊøÒ»¸öÁ¬½Ó"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "ÖØÖÃËùÓÐÁ¬½Ó"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "ÏÔʾÁ¬½Ó"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Ó÷¨: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Õâ¸ö cscope ÃüÁî²»Ö§³Ö·Ö¸î´°¿Ú¡£\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Ó÷¨: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ÕÒ²»µ½ tag"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ´íÎó: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s ²»ÊÇĿ¼»òÓÐЧµÄ cscope Êý¾Ý¿â"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Ìí¼ÓÁË cscope Êý¾Ý¿â %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: ¶ÁÈ¡ cscope Á¬½Ó %<PRId64> ³ö´í"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: δ֪µÄ cscope ²éÕÒÀàÐÍ"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: ÎÞ·¨´´½¨ cscope ¹ÜµÀ"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: ÎÞ·¨¶Ô cscope ½øÐÐ fork"
-
-#: ../if_cscope.c:849
-#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection Ö´ÐÐʧ°Ü"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection Ö´ÐÐʧ°Ü"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen to_fp ʧ°Ü"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen fr_fp ʧ°Ü"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: ÎÞ·¨Éú³É cscope ½ø³Ì"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: ûÓÐ cscope Á¬½Ó"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: cscopequickfix ±êÖ¾ %c ¶Ô %c ÎÞЧ"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscope ²éѯ %s %s ûÓÐÕÒµ½Æ¥ÅäµÄ½á¹û"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "cscope ÃüÁî:\n"
-
-#: ../if_cscope.c:1150
-#, fuzzy, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %-30s (Ó÷¨: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: ÖØ¸´µÄ cscope Êý¾Ý¿âδ±»¼ÓÈë"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: ÕÒ²»µ½ cscope Á¬½Ó %s"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "cscope Á¬½Ó %s ÒѹرÕ"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches ÑÏÖØ´íÎó"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Cscope tag: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ÐÐ "
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ÎļþÃû / ÉÏÏÂÎÄ / ÐÐ\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Cscope ´íÎó: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "ËùÓÐ cscope Êý¾Ý¿âÒѱ»ÖØÖÃ"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "ûÓÐ cscope Á¬½Ó\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid Êý¾Ý¿âÃû prepend path\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "δ֪µÄÑ¡Ïî²ÎÊý"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "±à¼­²ÎÊý¹ý¶à"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "ȱÉÙ±ØÒªµÄ²ÎÊý"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "Ñ¡Ïî²ÎÊýºóµÄÄÚÈÝÎÞЧ"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "\"+command\"¡¢\"-c command\" »ò \"--cmd command\" ²ÎÊý¹ý¶à"
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "ÎÞЧµÄ²ÎÊý"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "»¹ÓÐ %d ¸öÎļþµÈ´ý±à¼­\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "ÊÔͼÔٴδò¿ª½Å±¾Îļþ: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "ÎÞ·¨´ò¿ª²¢¶ÁÈ¡: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "ÎÞ·¨´ò¿ª²¢Êä³ö½Å±¾: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: ¾¯¸æ: Êä³ö²»Êǵ½ÖÕ¶Ë(ÆÁÄ»)\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: ¾¯¸æ: ÊäÈë²»ÊÇÀ´×ÔÖÕ¶Ë(¼üÅÌ)\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "pre-vimrc ÃüÁîÐÐ"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: ÎÞ·¨¶ÁÈ¡ \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"¸ü¶àÐÅÏ¢Çë¼û: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[Îļþ ..] ±à¼­Ö¸¶¨µÄÎļþ"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- ´Ó±ê×¼ÊäÈë(stdin)¶ÁÈ¡Îı¾"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t tag ±à¼­ tag ¶¨Òå´¦µÄÎļþ"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] ±à¼­µÚÒ»¸ö³ö´í´¦µÄÎļþ"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Ó÷¨:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [²ÎÊý] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" »ò:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"²ÎÊý:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tÔÚÕâÒÔºóÖ»ÓÐÎļþÃû"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t²»À©Õ¹Í¨Åä·û"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi ģʽ (ͬ \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx ģʽ (ͬ \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr ""
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t°²¾²(Åú´¦Àí)ģʽ (Ö»ÄÜÓë \"ex\" Ò»ÆðʹÓÃ)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tDiff ģʽ (ͬ \"vimdiff\")"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tÈÝÒ×ģʽ (ͬ \"evim\"£¬ÎÞģʽ)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÖ»¶Áģʽ (ͬ \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÏÞÖÆÄ£Ê½ (ͬ \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\t²»¿ÉÐÞ¸Ä(дÈëÎļþ)"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÎı¾²»¿ÉÐÞ¸Ä"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\t¶þ½øÖÆÄ£Ê½"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLisp ģʽ"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\t¼æÈÝ´«Í³µÄ Vi: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\t²»ÍêÈ«¼æÈÝ´«Í³µÄ Vi: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr ""
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tµ÷ÊÔģʽ"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\t²»Ê¹Óý»»»Îļþ£¬Ö»Ê¹ÓÃÄÚ´æ"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tÁгö½»»»Îļþ²¢Í˳ö"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (¸úÎļþÃû)\t\t»Ö¸´±ÀÀ£µÄ»á»°"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tͬ -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tÒÔ Arabic ģʽÆô¶¯"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tÒÔ Hebrew ģʽÆô¶¯"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tÒÔ Farsi ģʽÆô¶¯"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tÉ趨ÖÕ¶ËÀàÐÍΪ <terminal>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tʹÓà <vimrc> Ìæ´úÈκΠ.vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\t²»¼ÓÔØ plugin ½Å±¾"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-P[N]\t\t´ò¿ª N ¸ö±êǩҳ (ĬÈÏÖµ: ÿ¸öÎļþÒ»¸ö)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\t´ò¿ª N ¸ö´°¿Ú (ĬÈÏÖµ: ÿ¸öÎļþÒ»¸ö)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\tͬ -o µ«´¹Ö±·Ö¸î"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tÆô¶¯ºóÌøµ½Îļþĩβ"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\tÆô¶¯ºóÌøµ½µÚ <lnum> ÐÐ"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\t¼ÓÔØÈκΠvimrc ÎļþǰִÐÐ <command>"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\t¼ÓÔØµÚÒ»¸öÎļþºóÖ´ÐÐ <command>"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\t¼ÓÔØµÚÒ»¸öÎļþºóÖ´ÐÐÎļþ <session>"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\t´ÓÎļþ <scriptin> ¶ÁÈëÕý³£Ä£Ê½µÄÃüÁî"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\t½«ËùÓÐÊäÈëµÄÃüÁî×·¼Óµ½Îļþ <scriptout>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\t½«ËùÓÐÊäÈëµÄÃüÁîдÈëµ½Îļþ <scriptout>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tʹÓà <viminfo> È¡´ú .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h »ò --help\t´òÓ¡°ïÖú(±¾ÐÅÏ¢)²¢Í˳ö"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\t´òÓ¡°æ±¾ÐÅÏ¢²¢Í˳ö"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "ûÓÐÉ趨±ê¼Ç"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: ûÓÐÆ¥Åä \"%s\" µÄ±ê¼Ç"
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"±ê¼Ç ÐÐ ÁÐ Îļþ/Îı¾"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" Ìø×ª ÐÐ ÁÐ Îļþ/Îı¾"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-" ¸Ä±ä ÐÐ ÁÐ Îı¾"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Îļþ±ê¼Ç:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Ìø×ªÁбí (´Óе½¾É):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# ÎļþÄڵıê¼ÇÀúÊ·¼Ç¼ (´Óе½¾É):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "ȱÉÙ '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: ¿éδ±»Ëø¶¨"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: ½»»»Îļþ¶ÁÈ¡¶¨Î»´íÎó"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: ½»»»Îļþ¶ÁÈ¡´íÎó"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: ½»»»ÎļþдÈ붨λ´íÎó"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: ½»»»ÎļþдÈë´íÎó"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: ½»»»ÎļþÒÑ´æÔÚ (·ûºÅÁ¬½Ó¹¥»÷£¿)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: ÕÒ²»µ½¿é 0£¿"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: ÕÒ²»µ½¿é 1£¿"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: ÕÒ²»µ½¿é 2£¿"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: àÞ£¬½»»»Îļþ²»¼ûÁË£¡£¡£¡"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: ÎÞ·¨ÖØÃüÃû½»»»Îļþ"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: ÎÞ·¨´ò¿ª \"%s\" µÄ½»»»Îļþ£¬»Ö¸´½«²»¿ÉÄÜ"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): ÕÒ²»µ½¿é 0£¿"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: ÕÒ²»µ½ %s µÄ½»»»Îļþ"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "ÇëÊäÈëҪʹÓõĽ»»»Îļþ±àºÅ (0 Í˳ö): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: ÎÞ·¨´ò¿ª %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "ÎÞ·¨¶ÁÈ¡¿é 0: "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"¿ÉÄÜÄãû×ö¹ýÈκÎÐ޸ĻòÊÇ Vim »¹À´²»¼°¸üн»»»Îļþ¡£"
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " ²»ÄÜÔڸð汾µÄ Vim ÖÐʹÓá£\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "ʹÓà Vim 3.0¡£\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s ¿´ÆðÀ´²»ÏñÊÇ Vim ½»»»Îļþ"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " ²»ÄÜÔÚÕą̂µçÄÔÉÏʹÓá£\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "´ËÎļþ´´½¨ÓÚ "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-"£¬\n"
-"»òÊÇ´ËÎļþÒÑË𻵡£"
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "ʹÓý»»»Îļþ \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "ԭʼÎļþ \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: ¾¯¸æ: ԭʼÎļþ¿ÉÄÜÒѱ»ÐÞ¸Ä"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: ÎÞ·¨´Ó %s ¶ÁÈ¡¿é 1"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1065
-#, fuzzy
-msgid "???MANY LINES MISSING"
-msgstr "???ȱÉÙÁËÌ«¶àÐÐ"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1076
-#, fuzzy
-msgid "???LINE COUNT WRONG"
-msgstr "???ÐÐÊý´íÎó"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1082
-#, fuzzy
-msgid "???EMPTY BLOCK"
-msgstr "???¿ÕµÄ¿é"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1103
-#, fuzzy
-msgid "???LINES MISSING"
-msgstr "???ȱÉÙÁËһЩÐÐ"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ¿é 1 ID ´íÎó (%s ²»Êǽ»»»Îļþ£¿)"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1133
-#, fuzzy
-msgid "???BLOCK MISSING"
-msgstr "???ȱÉÙ¿é"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1147
-#, fuzzy
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ´ÓÕâÀïµ½ ???END µÄÐпÉÄÜÒÑ»ìÂÒ"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1164
-#, fuzzy
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ´ÓÕâÀïµ½ ???END µÄÐпÉÄÜÒѱ»²åÈë/ɾ³ý¹ý"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1181
-#, fuzzy
-msgid "???END"
-msgstr "???END"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: »Ö¸´Òѱ»ÖжÏ"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: »Ö¸´Ê±·¢Éú´íÎó£»Çë×¢Ò⿪ͷΪ ??? µÄÐÐ"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "¸ü¶àÐÅÏ¢Çë¼û \":help E312\""
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "»Ö¸´Íê±Ï¡£ÇëÈ·¶¨Ò»ÇÐÕý³£¡£"
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Äã¿ÉÄÜÏëÒª½«Õâ¸öÎļþÁí´æÎª±ðµÄÎļþÃû\n"
-
-#: ../memline.c:1252
-#, fuzzy
-msgid "and run diff with the original file to check for changes)"
-msgstr "ÔÙÔËÐÐ diff ÓëÔ­Îļþ±È½ÏÒÔ¼ì²éÊÇ·ñÓиıä)\n"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr ""
-
-#: ../memline.c:1255
-#, fuzzy
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"È»ºó°Ñ .swp Îļþɾµô¡£\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "ÕÒµ½½»»»Îļþ:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " λÓÚµ±Ç°Ä¿Â¼:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " ʹÓÃÖ¸¶¨µÄÃû×Ö:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " λÓÚĿ¼ "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ÎÞ --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " ËùÓÐÕß: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " ÈÕÆÚ: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " ÈÕÆÚ: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [À´×Ô Vim °æ±¾ 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [²»ÏñÊÇ Vim ½»»»Îļþ]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " ÎļþÃû: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" Ð޸Ĺý: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "ÊÇ"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "·ñ"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" Óû§Ãû: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " Ö÷»úÃû: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" Ö÷»úÃû: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ½ø³Ì ID: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (ÈÔÔÚÔËÐÐ)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [²»ÄÜÔÚ±¾»úÉÏʹÓÃ]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [ÎÞ·¨¶ÁÈ¡]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [ÎÞ·¨´ò¿ª]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: ÎÞ·¨±£Áô£¬Ã»Óн»»»Îļþ"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "ÎļþÒѱ£Áô"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: ±£Áôʧ°Ü"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: ÎÞЧµÄ lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: ÕÒ²»µ½µÚ %<PRId64> ÐÐ"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx Ó¦¸ÃÊÇ 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: ¸üÐÂÁËÌ«¶àµÄ¿é£¿"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "ɾ³ýÁË¿é 1£¿"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: ÕÒ²»µ½µÚ %<PRId64> ÐÐ"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: Ö¸Õë¿é id ´íÎó"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count ΪÁã"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: Ðкų¬³ö·¶Î§: %<PRId64> ³¬³ö½áβ"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: ¿é %<PRId64> ÐÐÊý´íÎó"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "¶ÑÕ»´óСÔö¼Ó"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: \"%s\" ·ûºÅÁ¬½Ó³öÏÖÑ­»·"
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ×¢Òâ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"·¢ÏÖ½»»»Îļþ \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "ÕýÔÚ´ò¿ªÎļþ \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " ±È½»»»ÎļþУ¡\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) ÁíÒ»¸ö³ÌÐò¿ÉÄÜÒ²Ôڱ༭ͬһ¸öÎļþ¡£\n"
-" Èç¹ûÊÇÕâÑù£¬ÐÞ¸ÄʱÇë×¢Òâ±ÜÃâͬһ¸öÎļþ²úÉúÁ½¸ö²»Í¬µÄ°æ±¾¡£\n"
-"\n"
-
-#: ../memline.c:3245
-#, fuzzy
-msgid " Quit, or continue with caution.\n"
-msgstr " Í˳ö£¬»òСÐĵؼÌÐø¡£\n"
-
-#: ../memline.c:3246
-#, fuzzy
-msgid "(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Éϴα༭´ËÎļþʱ±ÀÀ£¡£\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " Èç¹ûÊÇÕâÑù£¬ÇëÓà \":recover\" »ò \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" »Ö¸´Ð޸ĵÄÄÚÈÝ (Çë¼û \":help recovery\")¡£\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Èç¹ûÄãÒѾ­½øÐÐÁ˻ָ´£¬Çëɾ³ý½»»»Îļþ \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" ÒÔ±ÜÃâÔÙ¿´µ½´ËÏûÏ¢¡£\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "½»»»Îļþ \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ÒÑ´æÔÚ£¡"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - ×¢Òâ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "½»»»ÎļþÒÑ´æÔÚ£¡"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"ÒÔÖ»¶Á·½Ê½´ò¿ª(&O)\n"
-"Ö±½Ó±à¼­(&E)\n"
-"»Ö¸´(&R)\n"
-"Í˳ö(&Q)\n"
-"ÖÐÖ¹(&A)"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"ÒÔÖ»¶Á·½Ê½´ò¿ª(&O)\n"
-"Ö±½Ó±à¼­(&E)\n"
-"»Ö¸´(&R)\n"
-"ɾ³ý½»»»Îļþ(&D)\n"
-"Í˳ö(&Q)\n"
-"ÖÐÖ¹(&A)"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: ÕÒµ½Ì«¶à½»»»Îļþ"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: ÄÚ´æ²»×㣡(·ÖÅä %<PRIu64> ×Ö½Ú)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ²Ëµ¥ÏîµÄij²¿·Ö·¾¶²»ÊÇ×Ӳ˵¥"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: ²Ëµ¥Ö»ÔÚÆäËüģʽÖдæÔÚ"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: ûÓв˵¥ \"%s\""
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-#, fuzzy
-msgid "E792: Empty menu name"
-msgstr "E749: ¿ÕµÄ»º³åÇø"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ²Ëµ¥Â·¾¶²»ÄÜÖ¸Ïò×Ӳ˵¥"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ²»ÄܰѲ˵¥ÏîÖ±½Ó¼Óµ½²Ëµ¥À¸ÖÐ"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ·Ö¸ôÏß²»ÄÜÊDz˵¥Â·¾¶µÄÒ»²¿·Ö"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- ²Ëµ¥ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ²Ëµ¥Â·¾¶±ØÐëÖ¸Ïò²Ëµ¥Ïî"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: ÕÒ²»µ½²Ëµ¥: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ģʽÖв˵¥Î´¶¨Òå"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ²Ëµ¥Â·¾¶±ØÐëÖ¸Ïò×Ӳ˵¥"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÕÒ²»µ½²Ëµ¥ - Çë¼ì²é²Ëµ¥Ãû³Æ"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "´¦Àí %s ʱ·¢Éú´íÎó:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "µÚ %4ld ÐÐ:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ÎÞЧµÄ¼Ä´æÆ÷Ãû: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "¼òÌåÖÐÎÄÏûϢά»¤Õß: Yuheng Xie <elephant@linux.net.cn>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "ÒÑÖжÏ: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Çë°´ ENTER »òÆäËüÃüÁî¼ÌÐø"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s µÚ %<PRId64> ÐÐ"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- ¸ü¶à --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " ¿Õ¸ñ/d/j: ÆÁÄ»/Ò³/ÐÐ Ï·­£¬b/u/k: ÉÏ·­£¬q: Í˳ö "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "ÎÊÌâ"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)\n"
-"È¡Ïû(&C)"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)\n"
-"È«²¿±£´æ(&A)\n"
-"È«²¿¶ªÆú(&D)\n"
-"È¡Ïû(&C)"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf() µÄ²ÎÊý²»×ã"
-
-#: ../message.c:3119
-#, fuzzy
-msgid "E807: Expected Float argument for printf()"
-msgstr "E766: printf() µÄ²ÎÊý²»×ã"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: printf() µÄ²ÎÊý¹ý¶à"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: ¾¯¸æ: ÕýÔÚÐÞ¸ÄÒ»¸öÖ»¶ÁÎļþ"
-
-#: ../misc1.c:2537
-#, fuzzy
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "ÇëÊäÈëÊý×Ö»òµã»÷Êó±ê (<Enter> È¡Ïû): "
-
-#: ../misc1.c:2539
-#, fuzzy
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "ÇëÑ¡ÔñÊý×Ö (<Enter> È¡Ïû): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "¶àÁË 1 ÐÐ"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "ÉÙÁË 1 ÐÐ"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "¶àÁË %<PRId64> ÐÐ"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "ÉÙÁË %<PRId64> ÐÐ"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (ÒÑÖжÏ)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Beep!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "µ÷ÓÃ shell Ö´ÐÐ: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: ¹â±ê´¦Ã»ÓÐʶ±ð×Ö"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' Ϊ¿Õ"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "¾¯¸æ: ÄãµÄÖն˲»ÄÜÏÔʾ¸ßÁÁ"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: ¹â±ê´¦Ã»ÓÐ×Ö·û´®"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' ÏÂɾ³ý fold"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: ¸Ä±äÁбíΪ¿Õ"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: ÒÑÔڸıäÁбíµÄ¿ªÊ¼´¦"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: ÒÑÔڸıäÁбíµÄĩβ´¦"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "ÊäÈë :quit<Enter> Í˳ö Vim"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 ÐÐ %s ÁË 1 ´Î"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 ÐÐ %s ÁË %d ´Î"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> ÐÐ %s ÁË 1 ´Î"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> ÐÐ %s ÁË %d ´Î"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "Ëõ½ø %<PRId64> ÐС­¡­ "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "Ëõ½øÁË 1 ÐÐ "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "Ëõ½øÁË %<PRId64> ÐÐ "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: ûÓÐǰһ¸öʹÓõļĴæÆ÷"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "ÎÞ·¨¸´ÖÆ£»¸ÄΪɾ³ý"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "¸Ä±äÁË 1 ÐÐ"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "¸Ä±äÁË %<PRId64> ÐÐ"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "¸´ÖÆÁË 1 ÐеĿé"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "¸´ÖÆÁË 1 ÐÐ"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "¸´ÖÆÁË %<PRId64> ÐеĿé"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "¸´ÖÆÁË %<PRId64> ÐÐ"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: ¼Ä´æÆ÷ %s ÀïûÓж«Î÷"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- ¼Ä´æÆ÷ ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "ÎÞЧµÄ¼Ä´æÆ÷Ãû"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# ¼Ä´æÆ÷:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: δ֪µÄ¼Ä´æÆ÷ÀàÐÍ %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> ÁÐ; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Ñ¡ÔñÁË %s%<PRId64>/%<PRId64> ÐÐ; %<PRId64>/%<PRId64> ¸ö´Ê; %<PRId64>/"
-"%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Ñ¡ÔñÁË %s%<PRId64>/%<PRId64> ÐÐ; %<PRId64>/%<PRId64> ¸ö´Ê; %<PRId64>/"
-"%<PRId64> ¸ö×Ö·û; %<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"µÚ %s/%s ÁÐ; µÚ %<PRId64>/%<PRId64> ÐÐ; µÚ %<PRId64>/%<PRId64> ¸ö´Ê; µÚ "
-"%<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"µÚ %s/%s ÁÐ; µÚ %<PRId64>/%<PRId64> ÐÐ; µÚ %<PRId64>/%<PRId64> ¸ö´Ê; µÚ "
-"%<PRId64>/%<PRId64> ¸ö×Ö·û; µÚ %<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr ""
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr ""
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "¸ÐлÄúÑ¡Ôñ Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: δ֪µÄÑ¡Ïî"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: ²»Ö§³Ö¸ÃÑ¡Ïî"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: ²»ÔÊÐíÔÚ modeline ÖÐʹÓÃ"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr ""
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Termcap ÀïÃæÕÒ²»µ½"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: ÎÞЧµÄ×Ö·û <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: ²»ÄÜÉ趨 'term' Ϊ¿Õ×Ö·û´®"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' ºÍ 'patchmode' ÏàµÈ"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr ""
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr ""
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: ȱÉÙðºÅ"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: ×Ö·û´®³¤¶ÈΪÁã"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> ºóÃæÈ±ÉÙÊý×Ö"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: ȱÉÙ¶ººÅ"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: ±ØÐëÖ¸¶¨Ò»¸ö ' Öµ"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: °üº¬²»¿ÉÏÔʾ×Ö·û»ò¿í×Ö·û"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: ÐèÒª¶ººÅ"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ±ØÐëΪ¿Õ»ò°üº¬ %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: ûÓнáÊøµÄ±í´ïʽÐòÁÐ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: ÏîÄ¿¹ý¶à"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: ´íÂÒµÄ×é"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: Ô¤ÀÀ´°¿ÚÒÑ´æÔÚ"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: Arabic ÐèÒª UTF-8£¬ÇëÖ´ÐÐ ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: ÖÁÉÙÐèÒª %d ÐÐ"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: ÖÁÉÙÐèÒª %d ÁÐ"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: δ֪µÄÑ¡Ïî: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, fuzzy, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Öն˱àÂë ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- È«¾ÖÑ¡ÏîÖµ ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- ¾Ö²¿Ñ¡ÏîÖµ ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Ñ¡Ïî ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp ´íÎó"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': ÕÒ²»µ½ %s ¶ÔÓ¦µÄ×Ö·û"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ·ÖºÅºóÓжàÓàµÄ×Ö·û: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"ÎÞ·¨Ö´ÐÐ shell"
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"Shell ÒÑ·µ»Ø"
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-
-# do not translate
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: ÔÚ·¾¶ÖÐÕÒ²»µ½Îļþ \"%s\""
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: ¸ñʽ»¯×Ö·û´®ÀïÓÐÌ«¶à %%%c "
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: ¸ñʽ»¯×Ö·û´®²»Ó¦¸Ã³öÏÖ %%%c "
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: ¸ñʽ»¯×Ö·û´®ÀïÉÙÁË ]"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: ¸ñʽ»¯×Ö·û´®ÀïÓв»Ö§³ÖµÄ %%%c "
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: ¸ñʽ»¯×Ö·û´®¿ªÍ·ÀïÓв»ÕýÈ·µÄ %%%c "
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: ¸ñʽ»¯×Ö·û´®ÀïÓв»ÕýÈ·µÄ %%%c "
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' δÉ趨"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: ÕÒ²»µ½Ä¿Â¼Ãû³Æ»òÊǿյÄĿ¼Ãû³Æ"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: ûÓиü¶àµÄÏî"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d / %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (ÐÐÒÑɾ³ý)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Quickfix ¶ÑÕ»µ×¶Ë"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Quickfix ¶ÑÕ»¶¥¶Ë"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "´íÎóÁбí %d / %d£»¹² %d ¸ö´íÎó"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: ÎÞ·¨Ð´È룬ÒÑÉ趨ѡÏî 'buftype'"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: ȱÉÙÎļþÃû»òģʽÎÞЧ"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: »º³åÇøÎ´¼ÓÔØ"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: ´Ë´¦ÐèÒª String »òÕß List"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: %s%%[] ÖÐÓÐÎÞЧµÄÏî"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ ºóȱÉÙ ]"
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: ²»Æ¥ÅäµÄ %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: ²»Æ¥ÅäµÄ %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: ²»Æ¥ÅäµÄ %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: ´Ë´¦²»ÔÊÐí \\z("
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: ´Ë´¦²»ÔÊÐí \\z1 µÈ"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ ºóȱÉÙ ]"
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: ¿ÕµÄ %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: ģʽ̫³¤"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Ì«¶à \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Ì«¶à %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: ²»Æ¥ÅäµÄ \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Ì«¶à¸´Ô %s{...}s"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: ǶÌ×µÄ %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: ǶÌ×µÄ %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: ²»ÕýÈ·µØÊ¹Óà \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c Ç°ÃæÎÞÄÚÈÝ"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: ÎÞЧµÄ»ØÒý"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...} ÖÐÓï·¨´íÎó"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Íⲿ·ûºÏ:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr ""
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr ""
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr ""
-
-#: ../regexp_nfa.c:2042
-#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E50: Ì«¶à \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr ""
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr ""
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr ""
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr ""
-
-#: ../regexp_nfa.c:6049
-#, fuzzy
-msgid "Could not open temporary log file for writing "
-msgstr "E214: ÕÒ²»µ½ÓÃÓÚдÈëµÄÁÙʱÎļþ"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " V-Ìæ»»"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " Ìæ»»"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ·´Ïò"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ²åÈë"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (²åÈë)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (Ìæ»»)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (V-Ìæ»»)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Hebrew"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Arabic"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (ÓïÑÔ)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (Õ³Ìû)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ¿ÉÊÓ"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ¿ÉÊÓ ÐÐ"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ¿ÉÊÓ ¿é"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " Ñ¡Ôñ"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " Ñ¡Ôñ ÐÐ"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " Ñ¡Ôñ ¿é"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "¼Ç¼ÖÐ"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: ÎÞЧµÄ²éÕÒ×Ö·û´®: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ÒѲéÕÒµ½Îļþ¿ªÍ·ÈÔÕÒ²»µ½ %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ÒѲéÕÒµ½Îļþ½áβÈÔÕÒ²»µ½ %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ÔÚ ';' ºóÃæÓ¦¸ÃÓÐ '?' »ò '/'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (°üÀ¨ÉÏ´ÎÁгö·ûºÏÏî)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- °üº¬Îļþ "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "ÕÒ²»µ½ "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "ÔÚ·¾¶ ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (ÒÑÁгö)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " ÕÒ²»µ½"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "²éÕÒ°üº¬Îļþ: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "²éÕÒ°üº¬µÄÎļþ %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: µ±Ç°ÐÐÆ¥Åä"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "ËùÓаüº¬Îļþ¶¼ÒÑÕÒµ½"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: ÕÒ²»µ½¶¨Òå"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: ÕÒ²»µ½ pattern"
-
-#: ../search.c:4668
-#, fuzzy
-msgid "Substitute "
-msgstr "1 ´ÎÌæ»»£¬"
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: ƴдÎļþ¸ñʽ´íÎó"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: ÒÑ½Ø¶ÏµÄÆ´Ð´Îļþ"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬¶àÓàµÄºóÐø×Ö·û: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬¸½¼ÓÏîÃû×ÖÌ«³¤: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: ¸½¼ÓÎļþ FOL¡¢LOW »ò UPP Öиñʽ´íÎó"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL¡¢LOW »ò UPP ÖÐ×Ö·û³¬³ö·¶Î§"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "ѹËõµ¥´ÊÊ÷¡­¡­"
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: ƴд¼ì²éδÆôÓÃ"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr "¾¯¸æ: ÕÒ²»µ½µ¥´ÊÁбí \"%s.%s.spl\" or \"%s.ascii.spl\""
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "¶ÁȡƴдÎļþ \"%s\""
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: Õâ¿´ÆðÀ´²»ÏñÊÇÆ´Ð´Îļþ"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: ¾É°æ±¾µÄƴдÎļþ£¬ÐèÒª¸üÐÂ"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Ϊ¸ü¸ß°æ±¾µÄ Vim ËùÓÃµÄÆ´Ð´Îļþ"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: ƴдÎļþÖдæÔÚ²»Ö§³ÖµÄ½Ú"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "¾¯¸æ: ÇøÓò %s ²»Ö§³Ö"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "¶ÁÈ¡¸½¼ÓÎļþ %s ¡­¡­"
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "µ¥´Ê %s ת»»Ê§°Ü£¬µÚ %d ÐÐ: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "²»Ö§³Ö %s ÖеÄת»»: ´Ó %s µ½ %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬FLAG µÄÖµÎÞЧ: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÔÚʹÓñêÖ¾ºó³öÏÖ FLAG: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4747
-#, fuzzy, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDMIN Öµ: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDWORDMAX Öµ: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDMIN Öµ: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDSYLMAX Öµ: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ CHECKCOMPOUNDPATTERN Öµ: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÔÚÁ¬ÐøµÄ¸½¼Ó¿éÖгöÏÖ²»Í¬µÄ×éºÏ±êÖ¾: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ¸½¼ÓÏî: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"%s µÚ %d ÐУ¬¸½¼ÓÏî±» BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST ʹ"
-"ÓÃ: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª Y »ò N: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄÌõ¼þ: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª REP(SAL) ¼ÆÊý"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª MAP ¼ÆÊý"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s µÚ %d ÐУ¬MAP ÖдæÔÚÖØ¸´µÄ×Ö·û"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞ·¨Ê¶±ð»òÖØ¸´µÄÏî: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s ÖÐȱÉÙ FOL/LOW/UPP ÐÐ"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "ÔÚûÓÐ SYLLABLE µÄÇé¿öÏÂʹÓÃÁË COMPOUNDSYLMAX"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Ì«¶àÑÓ³Ùǰ׺"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Ì«¶à×éºÏ±êÖ¾"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Ì«¶àÑÓ³Ùǰ׺ºÍ/»ò×éºÏ±êÖ¾"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "%s ÖÐȱÉÙ SOFO%s ÐÐ"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "%s ͬʱ³öÏÖ SQL ºÍ SOFO ÐÐ"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬±êÖ¾²»ÊÇÊý×Ö: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞЧµÄ±êÖ¾: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "%s µÄÖµÓëÁíÒ»¸ö .aff ÎļþÖÐʹÓõÄÖµ²»Ïàͬ"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "¶ÁÈ¡×ÖµäÎļþ %s ¡­¡­"
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: %s ÖÐûÓе¥´Ê¼ÆÊý"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "µÚ %6d ÐУ¬µÚ %6d ¸öµ¥´Ê - %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄµ¥´Ê: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Ê×´ÎÖØ¸´µÄµ¥´Ê: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "´æÔÚ %d ¸öÖØ¸´µÄµ¥´Ê£¬ÔÚ %s ÖÐ"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "ºöÂÔÁ˺¬ÓÐ·Ç ASCII ×Ö·ûµÄ %d ¸öµ¥´Ê£¬ÔÚ %s ÖÐ"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "¶ÁÈ¡µ¥´ÊÎļþ %s ¡­¡­"
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬µ¥´ÊºóµÄ /encoding= ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ /regions= ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Ì«¶àÇøÓò: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬/ ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞЧµÄÇøÓòºÅ: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬²»¿Éʶ±ðµÄ±êÖ¾: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "ºöÂÔÁ˺¬ÓÐ·Ç ASCII ×Ö·ûµÄ %d ¸öµ¥´Ê"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "ѹËõÁË %d/%d ¸ö½Úµã£»Ê£Óà %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "¶ÁȡƴдÎļþ¡­¡­"
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "ÕýÔÚ soundfolding¡­¡­"
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "soundfolding ºóµÄµ¥´ÊÊý: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "µ¥´Ê×ÜÊý: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "дÈ뽨ÒéÎļþ %s ¡­¡­"
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "¹À¼ÆÔËÐÐʱÄÚ´æÓÃÁ¿: %d ×Ö½Ú"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Êä³öÎļþÃû²»Äܺ¬ÓÐÇøÓòÃû"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ×î¶àÖ»Ö§³Ö 8 ¸öÇøÓò"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: %s ³öÏÖÎÞЧµÄ·¶Î§"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "¾¯¸æ: ͬʱָ¶¨ÁË compounding ºÍ NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "дÈëÆ´Ð´Îļþ %s ¡­¡­"
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Íê³É£¡"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' ûÓÐ %<PRId64> Ïî"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "´Ó %s ÖÐɾ³ýÁ˵¥´Ê"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Ïò %s ÖÐÌí¼ÓÁ˵¥´Ê"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: ƴдÎļþÖ®¼äµÄ×Ö·û²»Ïàͬ"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "±§Ç¸£¬Ã»Óн¨Òé"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "±§Ç¸£¬Ö»ÓÐ %<PRId64> Ìõ½¨Òé"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "½« \"%.*s\" ¸ÄΪ£º"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: ֮ǰûÓÐÆ´Ð´Ìæ»»"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: ÕÒ²»µ½: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: ¿´ÆðÀ´²»ÏñÊÇ .sug Îļþ: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr ""
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr ""
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr ""
-
-#: ../spell.c:9305
-#, fuzzy, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E47: ¶ÁÈ¡´íÎóÎļþʧ°Ü"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr ""
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Õâ¸ö»º³åÇøÃ»Óж¨ÒåÈκÎÓï·¨Ïî"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "C·ç¸ñ×¢ÊÍͬ²½ÖÐ"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "ûÓÐͬ²½"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "ͬ²½¿ªÊ¼"
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr "Ðкų¬³ö·¶Î§"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Ó﷨ͬ²½ÏîÄ¿ (Syntax sync items) ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"ͬ²½ÖÐ:"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Óï·¨ÏîÄ¿ ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "×îС"
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "×î´ó"
-
-#: ../syntax.c:3513
-#, fuzzy
-msgid "; match "
-msgstr "Æ¥Åä %d"
-
-#: ../syntax.c:3515
-#, fuzzy
-msgid " line breaks"
-msgstr "ÉÙÓÚÒ»ÐÐ"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#: ../syntax.c:4096
-#, fuzzy
-msgid "E844: invalid cchar value"
-msgstr "E474: ÎÞЧµÄ²ÎÊý"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: ÕÒ²»µ½ %s µÄ region item"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: ÐèÒªÎļþÃû³Æ"
-
-#: ../syntax.c:4221
-#, fuzzy
-msgid "E847: Too many syntax includes"
-msgstr "E77: ÎļþÃû¹ý¶à"
-
-#: ../syntax.c:4303
-#, fuzzy, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: ȱÉÙ '=': %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: syntax region %s µÄ²ÎÊýÌ«ÉÙ"
-
-#: ../syntax.c:4870
-#, fuzzy
-msgid "E848: Too many syntax clusters"
-msgstr "E391: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: ûÓÐÖ¸¶¨µÄÊôÐÔ"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ÕÒ²»µ½·Ö¸ô·ûºÅ: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: '%s' ºóÃæµÄ¶«Î÷²»ÄÜʶ±ð"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: Ó﷨ͬ²½: Á¬½ÓÐзûºÅÖ¸¶¨ÁËÁ½´Î"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: ȱÉٵȺÅ: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: ¿ÕµÄ²ÎÊý: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s ²»ÄÜÔڴ˳öÏÖ"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ±ØÐëÊÇÁбíÀïµÄµÚÒ»¸ö"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: ²»ÕýÈ·µÄ×éÃû: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: ²»ÕýÈ·µÄ :syntax ×ÓÃüÁî: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: ¼ÓÔØ syncolor.vim ʱ³öÏÖǶÌ×Ñ­»·"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: ÕÒ²»µ½ highlight group: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ²ÎÊýÌ«ÉÙ: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: ²ÎÊý¹ý¶à: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: ÒÑÉ趨×é, ºöÂÔ highlight link"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: ²»¸ÃÓеĵȺÅ: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: ȱÉٵȺÅ: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: ȱÉÙ²ÎÊý: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: ²»ºÏ·¨µÄÖµ: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: ´íÎóµÄǰ¾°ÑÕÉ«"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: ´íÎóµÄ±³¾°ÑÕÉ«"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: ´íÎóµÄÑÕÉ«Ãû³Æ»òÊýÖµ: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Öն˱àÂëÌ«³¤: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ʹÓÃÁËÌ«¶à²»Í¬µÄ¸ßÁÁ¶ÈÊôÐÔ"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: ×éÃûÖдæÔÚ²»¿ÉÏÔʾ×Ö·û"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: ×éÃûÖк¬ÓÐÎÞЧ×Ö·û"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr ""
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ÒÑÔÚ tag ¶ÑÕ»µ×²¿"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: ÒÑÔÚ tag ¶ÑÕ»¶¥²¿"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Òѵ½µÚÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: ÕÒ²»µ½ tag: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri kind tag"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "Îļþ\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Ö»ÓÐÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ¼ºµ½×îºóÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Îļþ \"%s\" ²»´æÔÚ"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "ÕÒµ½ tag: %d / %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " »ò¸ü¶à"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " ÒÔ²»Í¬´óСдÀ´Ê¹Óà tag£¡"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Îļþ \"%s\" ²»´æÔÚ"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # µ½ tag ´Ó ÐÐ ÔÚ Îļþ/Îı¾"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "²éÕÒ tag Îļþ %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr ""
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Tag Îļþ \"%s\" ¸ñʽ´íÎó"
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "ÔÚµÚ %<PRId64> ×Ö½Ú֮ǰ"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Tag ÎļþδÅÅÐò: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: ûÓÐ tag Îļþ"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: ÕÒ²»µ½ tag ģʽ"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ÕÒ²»µ½ tag£¬ÊÔ×Ų£¡"
-
-#: ../tag.c:2797
-#, fuzzy, c-format
-msgid "Duplicate field name: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ¸½¼ÓÏî: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' δ֪¡£¿ÉÓõÄÄÚ½¨ÖÕ¶ËÓÐ:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "ĬÈÏֵΪ: '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: ÎÞ·¨´ò¿ª termcap Îļþ"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: ÔÚ terminfo ÖÐÕÒ²»µ½ÖÕ¶ËÏî"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: ÔÚ termcap ÖÐÕÒ²»µ½ÖÕ¶ËÏî"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap ÖÐûÓÐ \"%s\" Ïî"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ÖÕ¶ËÐèÒªÄÜÁ¦ \"cm\""
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Öն˰´¼ü ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: ¶Á´íÎó£¬Í˳öÖÐ...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E787: ÒâÍâµØ¸Ä±äÁË»º³åÇø"
-
-#: ../undo.c:627
-#, fuzzy, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E212: ÎÞ·¨´ò¿ª²¢Ð´ÈëÎļþ"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr ""
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr ""
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr ""
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr ""
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr ""
-
-#: ../undo.c:1121
-#, fuzzy, c-format
-msgid "Writing undo file: %s"
-msgstr "дÈë viminfo Îļþ \"%s\""
-
-#: ../undo.c:1213
-#, fuzzy, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E297: ½»»»ÎļþдÈë´íÎó"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr ""
-
-#: ../undo.c:1292
-#, fuzzy, c-format
-msgid "Reading undo file: %s"
-msgstr "¶ÁÈ¡µ¥´ÊÎļþ %s ¡­¡­"
-
-#: ../undo.c:1299
-#, fuzzy, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E195: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ viminfo Îļþ"
-
-#: ../undo.c:1308
-#, fuzzy, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E753: ÕÒ²»µ½: %s"
-
-#: ../undo.c:1313
-#, fuzzy, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E484: ÎÞ·¨´ò¿ªÎļþ %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr ""
-
-#: ../undo.c:1497
-#, fuzzy, c-format
-msgid "Finished reading undo file %s"
-msgstr "½áÊøÖ´ÐÐ %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "ÒÑλÓÚ×î¾ÉµÄ¸Ä±ä"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "ÒÑλÓÚ×îеĸıä"
-
-#: ../undo.c:1806
-#, fuzzy, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "ÕÒ²»µ½³·ÏúºÅ %<PRId64>"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: ÐкŴíÎó"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "Ðб»¼ÓÈë"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "Ðб»¼ÓÈë"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "Ðб»È¥µô"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "Ðб»È¥µô"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "Ðз¢Éú¸Ä±ä"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "Ðз¢Éú¸Ä±ä"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s£»%s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "before"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "after"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Î޿ɳ·Ïú"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr ""
-
-#: ../undo.c:2360
-#, fuzzy, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> ÁÐ; "
-
-#: ../undo.c:2372
-#, fuzzy
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E407: %s ²»ÄÜÔڴ˳öÏÖ"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: ³·ÏúÁбíËð»µ"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: ÕÒ²»µ½Òª³·ÏúµÄÐÐ"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"°üº¬²¹¶¡: "
-
-#: ../version.c:627
-#, fuzzy
-msgid ""
-"\n"
-"Extra patches: "
-msgstr "Íⲿ·ûºÏ:\n"
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "ÐÞ¸ÄÕß "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"±àÒë"
-
-#: ../version.c:649
-msgid "by "
-msgstr "Õß "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"¾ÞÐͰ汾 "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "ÎÞͼÐνçÃæ¡£"
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " ¿ÉʹÓÃ(+)Óë²»¿ÉʹÓÃ(-)µÄ¹¦ÄÜ:\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ϵͳ vimrc Îļþ: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " Óû§ vimrc Îļþ: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " µÚ¶þÓû§ vimrc Îļþ: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " µÚÈýÓû§ vimrc Îļþ: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " Óû§ exrc Îļþ: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " µÚ¶þÓû§ exrc Îļþ: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " $VIM Ô¤ÉèÖµ: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " $VIMRUNTIME Ô¤ÉèÖµ: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "±àÒ뷽ʽ: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Á´½Ó·½Ê½: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " µ÷ÊÔ°æ±¾"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi IMproved"
-
-#: ../version.c:769
-msgid "version "
-msgstr "°æ±¾ "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "ά»¤ÈË Bram Moolenaar µÈ"
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim ÊÇ¿É×ÔÓÉ·Ö·¢µÄ¿ª·ÅÔ´´úÂëÈí¼þ"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "°ïÖúÎڸɴïµÄ¿ÉÁ¯¶ùͯ£¡"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "ÊäÈë :help iccf<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "ÊäÈë :q<Enter> Í˳ö "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "ÊäÈë :help<Enter> »ò <F1> ²é¿´ÔÚÏß°ïÖú "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "ÊäÈë :help version7<Enter> ²é¿´°æ±¾ÐÅÏ¢ "
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "ÔËÐÐÓÚ Vi ¼æÈÝģʽ"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "ÊäÈë :set nocp<Enter> »Ö¸´Ä¬È쵀 Vim "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "ÊäÈë :help cp-default<Enter> ²é¿´Ïà¹ØËµÃ÷ "
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "ÔÞÖú Vim µÄ¿ª·¢£¡"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "³ÉΪ Vim µÄ×¢²áÓû§£¡"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "ÊäÈë :help sponsor<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "ÊäÈë :help register<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "²Ëµ¥ Help->Sponsor/Register ²é¿´ËµÃ÷ "
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "ÒѾ­Ö»Ê£Ò»¸ö´°¿ÚÁË"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: ûÓÐÔ¤ÀÀ´°¿Ú"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ²»ÄÜͬʱ½øÐÐ topleft ºÍ botright ·Ö¸î"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ÓÐÆäËü·Ö¸î´°¿Úʱ²»ÄÜÐýת"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:1810
-#, fuzzy
-msgid "E813: Cannot close autocmd window"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:1814
-#, fuzzy
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: ÆäËü´°¿ÚÓиıäµÄÄÚÈÝ"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: ¹â±ê´¦Ã»ÓÐÎļþÃû"
-
-#~ msgid "Patch file"
-#~ msgstr "Patch Îļþ"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "È·¶¨(&O)\n"
-#~ "È¡Ïû(&C)"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: ûÓе½ Vim ·þÎñÆ÷µÄÁ¬½Ó"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: ÎÞ·¨·¢Ë͵½ %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: ÎÞ·¨¶ÁÈ¡·þÎñÆ÷ÏìÓ¦"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: ÎÞ·¨·¢Ë͵½¿Í»§¶Ë"
-
-#~ msgid "Save As"
-#~ msgstr "Áí´æÎª"
-
-#~ msgid "Edit File"
-#~ msgstr "±à¼­Îļþ"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (ÕÒ²»µ½)"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Ö´ÐÐ Vim ½Å±¾"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "ÔÚд°¿Ú±à¼­Îļþ"
-
-#~ msgid "Append File"
-#~ msgstr "×·¼ÓÎļþ"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "´°¿ÚλÖÃ: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "±£´æÖض¨Ïò"
-
-#~ msgid "Save View"
-#~ msgstr "±£´æÊÓͼ"
-
-#~ msgid "Save Session"
-#~ msgstr "±£´æ»á»°"
-
-#~ msgid "Save Setup"
-#~ msgstr "±£´æÉ趨"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: ´Ë°æ±¾ÎÞ¸´ºÏ×Ö·û(digraph)"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "´Ó±ê×¼ÊäÈë¶ÁÈ¡..."
-
-#~ msgid "[NL found]"
-#~ msgstr "[ÕÒµ½ NL]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[ÒѼÓÃÜ]"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans ²»ÔÊÐíδÐ޸ĵĻº³åÇøÐ´Èë"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "NetBeans ²»ÔÊÐí»º³åÇø²¿·ÖдÈë"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Resource fork »á¶ªÊ§ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: ÎÞ·¨Æô¶¯Í¼ÐνçÃæ"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: ÎÞ·¨¶ÁÈ¡Îļþ \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: ÎÞ·¨Æô¶¯Í¼ÐνçÃæ£¬ÕÒ²»µ½ÓÐЧµÄ×ÖÌå"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: ÎÞЧµÄ 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' µÄÖµÎÞЧ"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: ÎÞ·¨·ÖÅäÑÕÉ« %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "ÔÚ¹â±ê´¦Ã»ÓÐÆ¥Å䣬²éÕÒÏÂÒ»¸ö"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<ÎÞ·¨´ò¿ª>"
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: ÎÞ·¨»ñÈ¡×ÖÌå %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: ÎÞ·¨·µ»Øµ±Ç°Ä¿Â¼"
-
-#~ msgid "Pathname:"
-#~ msgstr "·¾¶:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: ÎÞ·¨»ñÈ¡µ±Ç°Ä¿Â¼"
-
-#~ msgid "OK"
-#~ msgstr "È·¶¨"
-
-#~ msgid "Cancel"
-#~ msgstr "È¡Ïû"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "¹ö¶¯Ìõ²¿¼þ: ÎÞ·¨»ñÈ¡»¬¿éͼÏñµÄ¼¸ºÎ´óС"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Vim ¶Ô»°¿ò"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: ²»ÄÜͬʱʹÓÃÏûÏ¢ºÍ»Øµ÷º¯ÊýÀ´´´½¨ BalloonEval"
-
-#~ msgid "Vim dialog..."
-#~ msgstr "Vim ¶Ô»°¿ò..."
-
-#~ msgid "Input _Methods"
-#~ msgstr "ÊäÈë·¨(_M)"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - ²éÕÒºÍÌæ»»..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - ²éÕÒ..."
-
-#~ msgid "Find what:"
-#~ msgstr "²éÕÒÄÚÈÝ:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Ìæ»»Îª:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Æ¥ÅäÍêÕûµÄ´Ê"
-
-#~ msgid "Match case"
-#~ msgstr "Æ¥Åä´óСд"
-
-#~ msgid "Direction"
-#~ msgstr "·½Ïò"
-
-#~ msgid "Up"
-#~ msgstr "ÏòÉÏ"
-
-#~ msgid "Down"
-#~ msgstr "ÏòÏÂ"
-
-#~ msgid "Find Next"
-#~ msgstr "²éÕÒÏÂÒ»¸ö"
-
-#~ msgid "Replace"
-#~ msgstr "Ìæ»»"
-
-#~ msgid "Replace All"
-#~ msgstr "È«²¿Ìæ»»"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: ´Ó»á»°¹ÜÀíÆ÷ÊÕµ½ \"die\" ÇëÇó\n"
-
-#~ msgid "Close"
-#~ msgstr "¹Ø±Õ"
-
-#~ msgid "New tab"
-#~ msgstr "н¨±êÇ©"
-
-#~ msgid "Open Tab..."
-#~ msgstr "´ò¿ª±êÇ©..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: Ö÷´°¿Ú±»ÒâÍâµØ´Ý»Ù\n"
-
-#~ msgid "Font Selection"
-#~ msgstr "Ñ¡Ôñ×ÖÌå"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "ʹÓà CUT_BUFFER0 À´È¡´ú¿ÕÑ¡Ôñ"
-
-#~ msgid "&Filter"
-#~ msgstr "¹ýÂË(&F)"
-
-#~ msgid "&Cancel"
-#~ msgstr "È¡Ïû(&C)"
-
-#~ msgid "Directories"
-#~ msgstr "Ŀ¼"
-
-#~ msgid "Filter"
-#~ msgstr "¹ýÂËÆ÷"
-
-#~ msgid "&Help"
-#~ msgstr "°ïÖú(&H)"
-
-#~ msgid "Files"
-#~ msgstr "Îļþ"
-
-#~ msgid "&OK"
-#~ msgstr "È·¶¨(&O)"
-
-#~ msgid "Selection"
-#~ msgstr "Ñ¡Ôñ"
-
-#~ msgid "Find &Next"
-#~ msgstr "²éÕÒÏÂÒ»¸ö(&N)"
-
-#~ msgid "&Replace"
-#~ msgstr "Ìæ»»(&R)"
-
-#~ msgid "Replace &All"
-#~ msgstr "È«²¿Ìæ»»(&A)"
-
-#~ msgid "&Undo"
-#~ msgstr "³·Ïú(&U)"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: ÕÒ²»µ½´°¿Ú±êÌâ \"%s\""
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: ²»Ö§³ÖµÄ²ÎÊý: \"-%s\"£»ÇëʹÓà OLE °æ±¾¡£"
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: ÎÞ·¨ÔÚ MDI Ó¦ÓóÌÐòÖдò¿ª´°¿Ú"
-
-#~ msgid "Close tab"
-#~ msgstr "¹Ø±Õ±êÇ©"
-
-#~ msgid "Open tab..."
-#~ msgstr "´ò¿ª±êÇ©..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "²éÕÒ×Ö·û´® (ʹÓà '\\\\' À´²éÕÒ '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "²éÕÒºÍÌæ»»×Ö·û´® (ʹÓà '\\\\' À´²éÕÒ '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "δʹÓÃ"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Ŀ¼\t*.nothing\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr "Vim E458: ÎÞ·¨·ÖÅäÑÕÉ«±íÏijЩÑÕÉ«¿ÉÄܲ»ÕýÈ·"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Fontset %s ȱÉÙÏÂÁÐ×Ö·û¼¯µÄ×ÖÌå:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Fontset Ãû³Æ: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "'%s' ²»Êǹ̶¨¿í¶ÈµÄ×ÖÌå"
-
-#~ msgid "E253: Fontset name: %s\n"
-#~ msgstr "E253: Fontset Ãû³Æ: %s\n"
-
-#~ msgid "Font0: %s\n"
-#~ msgstr "×ÖÌå0: %s\n"
-
-#~ msgid "Font1: %s\n"
-#~ msgstr "×ÖÌå1: %s\n"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0\n"
-#~ msgstr "×ÖÌå%<PRId64>µÄ¿í¶È²»ÊÇ×ÖÌå0µÄÁ½±¶\n"
-
-#~ msgid "Font0 width: %<PRId64>\n"
-#~ msgstr "×ÖÌå0µÄ¿í¶È£º%<PRId64>\n"
-
-#~ msgid ""
-#~ "Font1 width: %<PRId64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "×ÖÌå1µÄ¿í¶È: %<PRId64>\n"
-#~ "\n"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Ö¸¶¨ÁËÎÞЧµÄ×ÖÌå"
-
-#~ msgid "&Dismiss"
-#~ msgstr "È¡Ïû(&D)"
-
-#~ msgid "no specific match"
-#~ msgstr "ÕÒ²»µ½Æ¥ÅäµÄÏî"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - ×ÖÌåÑ¡ÔñÆ÷"
-
-#~ msgid "Name:"
-#~ msgstr "Ãû³Æ:"
-
-#~ msgid "Encoding:"
-#~ msgstr "±àÂë:"
-
-#~ msgid "Font:"
-#~ msgstr "×ÖÌå:"
-
-#~ msgid "Style:"
-#~ msgstr "·ç¸ñ:"
-
-#~ msgid "Size:"
-#~ msgstr "³ß´ç:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Hangul automata ´íÎó"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat ´íÎó"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: ÎÞ·¨´ò¿ª cscope Êý¾Ý¿â: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: ÎÞ·¨»ñÈ¡ cscope Êý¾Ý¿âÐÅÏ¢"
-
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ÒÑ´ïµ½ cscope µÄ×î´óÁ¬½ÓÊý"
-
-#~ msgid ""
-#~ "???: Sorry, this command is disabled, the MzScheme library could not be "
-#~ "loaded."
-#~ msgstr "???: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ MzScheme ¿â"
-
-#~ msgid "invalid expression"
-#~ msgstr "ÎÞЧµÄ±í´ïʽ"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "±àÒëʱûÓÐÆôÓñí´ïʽ"
-
-#~ msgid "hidden option"
-#~ msgstr "Òþ²ØµÄÑ¡Ïî"
-
-#~ msgid "unknown option"
-#~ msgstr "δ֪µÄÑ¡Ïî"
-
-#~ msgid "window index is out of range"
-#~ msgstr "´°¿ÚË÷Òý³¬³ö·¶Î§"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "ÎÞ·¨´ò¿ª»º³åÇø"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "ÎÞ·¨±£´æ³·ÏúÐÅÏ¢"
-
-#~ msgid "cannot delete line"
-#~ msgstr "ÎÞ·¨É¾³ýÐÐ"
-
-#~ msgid "cannot replace line"
-#~ msgstr "ÎÞ·¨Ìæ»»ÐÐ"
-
-#~ msgid "cannot insert line"
-#~ msgstr "ÎÞ·¨²åÈëÐÐ"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "×Ö·û´®²»Äܰüº¬»»ÐÐ(NL)"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Vim ´íÎó: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Vim ´íÎó"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "»º³åÇøÎÞЧ"
-
-#~ msgid "window is invalid"
-#~ msgstr "´°¿ÚÎÞЧ"
-
-#~ msgid "linenr out of range"
-#~ msgstr "Ðкų¬³ö·¶Î§"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "²»ÔÊÐíÔÚ sandbox ÖÐʹÓÃ"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr "E263: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Python ¿â¡£"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: ²»Äܵݹéµ÷Óà Python"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "²»ÄÜɾ³ý OutputObject ÊôÐÔ"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace ±ØÐëÊÇÕûÊý"
-
-#~ msgid "invalid attribute"
-#~ msgstr "ÎÞЧµÄÊôÐÔ"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines() ÐèÒª×Ö·û´®Áбí×÷²ÎÊý"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: ³õʼ»¯ I/O ¶ÔÏó³ö´í"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "ÊÔͼÒýÓÃÒѱ»É¾³ýµÄ»º³åÇø"
-
-#~ msgid "line number out of range"
-#~ msgstr "Ðкų¬³ö·¶Î§"
-
-#~ msgid "<buffer object (deleted) at %8lX>"
-#~ msgstr "<»º³åÇø¶ÔÏó(ÒÑɾ³ý): %8lX>"
-
-#~ msgid "invalid mark name"
-#~ msgstr "ÎÞЧµÄ±ê¼ÇÃû³Æ"
-
-#~ msgid "no such buffer"
-#~ msgstr "ÎÞ´Ë»º³åÇø"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "ÊÔͼÒýÓÃÒѱ»É¾³ýµÄ´°¿Ú"
-
-#~ msgid "readonly attribute"
-#~ msgstr "Ö»¶ÁÊôÐÔ"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "¹â±êλÖÃÔÚ»º³åÇøÍâ"
-
-#~ msgid "<window object (deleted) at %.8lX>"
-#~ msgstr "<´°¿Ú¶ÔÏó(ÒÑɾ³ý): %.8lX>"
-
-#~ msgid "<window object (unknown) at %.8lX>"
-#~ msgstr "<´°¿Ú¶ÔÏó(δ֪): %.8lX>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<´°¿Ú %d>"
-
-#~ msgid "no such window"
-#~ msgstr "ÎÞ´Ë´°¿Ú"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr "E266: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Ruby ¿â"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: δ֪µÄ longjmp ״̬ %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Çл»ÊµÏÖ/¶¨Òå"
-
-#~ msgid "Show base class of"
-#~ msgstr "ÏÔʾ base class of:"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "ÏÔʾ±»¸²¸ÇµÄ³ÉÔ±º¯Êý"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "»Ö¸´: ´ÓÎļþ"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "»Ö¸´: ´Ó¶ÔÏó"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "»Ö¸´: ´ÓËùÓÐÏîÄ¿"
-
-#~ msgid "Retrieve"
-#~ msgstr "»Ö¸´"
-
-#~ msgid "Show source of"
-#~ msgstr "ÏÔʾԴ´úÂë: "
-
-#~ msgid "Find symbol"
-#~ msgstr "²éÕÒ symbol"
-
-#~ msgid "Browse class"
-#~ msgstr "ä¯ÀÀ class"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "ÏÔʾ²ã´Î¹ØÏµµÄÀà"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "ÏÔʾ restricted ²ã´Î¹ØÏµµÄ class"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref ²Î¿¼µ½"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ±»Ë­²Î¿¼:"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ÓÐ"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref ±»Ë­Ê¹ÓÃ:"
-
-#~ msgid "Show docu of"
-#~ msgstr "ÏÔʾÎļþ: "
-
-#~ msgid "Generate docu for"
-#~ msgstr "²úÉúÎļþ: "
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "²»ÄÜÁ¬½Óµ½ SNiFF+¡£Çë¼ì²é»·¾³±äÁ¿ ($PATH Àï±ØÐè¿ÉÒÔÕÒµ½ sniffemacs)\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: ¶ÁÈ¡´íÎó. È¡ÏûÁ¬½Ó"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ Ŀǰ"
-
-#~ msgid "not "
-#~ msgstr "δ"
-
-#~ msgid "connected"
-#~ msgstr "Á¬½ÓÖÐ"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: ²»ÕýÈ·µÄ SNiff+ µ÷ÓÃ: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Á¬½Óµ½ SNiFF+ ʧ°Ü"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: δÁ¬½Óµ½ SNiFF+"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: ²»ÊÇ SNiFF+ µÄ»º³åÇø"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: дÈë´íÎó¡£½áÊøÁ¬½Ó"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "ÎÞЧµÄ»º³åÇøºÅ"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ÉÐδʵÏÖ"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "ÎÞ·¨É趨ÐÐ"
-
-#~ msgid "mark not set"
-#~ msgstr "ûÓÐÉ趨±ê¼Ç"
-
-#~ msgid "row %d column %d"
-#~ msgstr "µÚ %d ÐÐ µÚ %d ÁÐ"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "ÎÞ·¨²åÈë/×·¼ÓÐÐ"
-
-#~ msgid "unknown flag: "
-#~ msgstr "δ֪µÄ±êÖ¾: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "δ֪µÄ vim Ñ¡Ïî"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "¼üÅÌÖжÏ"
-
-#~ msgid "vim error"
-#~ msgstr "vim ´íÎó"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "ÎÞ·¨´´½¨»º³åÇø/´°¿ÚÃüÁî: ¶ÔÏ󽫱»É¾³ý"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "ÎÞ·¨×¢²á»Øµ÷ÃüÁî: »º³åÇø/´°¿ÚÒѱ»É¾³ý"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr "E280: TCL ÑÏÖØ´íÎó: reflist Ë𻵣¡£¿Ç뱨¸æ¸ø vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr "ÎÞ·¨×¢²á»Øµ÷ÃüÁî: ÕÒ²»µ½»º³åÇø/´°¿ÚÒýÓÃ"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr "E571: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Tcl ¿â"
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr "E281: TCL ´íÎó: Í˳ö·µ»ØÖµ²»ÊÇÕûÊý£¡£¿Ç뱨¸æ¸ø vim-dev@vim.org"
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Í˳ö·µ»ØÖµ %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "ÎÞ·¨»ñÈ¡ÐÐ"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "ÎÞ·¨×¢²áÃüÁî·þÎñÆ÷Ãû"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: ÎÞ·¨·¢ËÍÃüÁĿµÄ³ÌÐò"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: ʹÓÃÁËÎÞЧµÄ·þÎñÆ÷ id: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr "E251: VIM ʵÀý×¢²áÊôÐÔÓÐÎó¡£ÒÑɾ³ý£¡"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "´Ë Vim ±àÒëʱûÓмÓÈë diff ¹¦ÄÜ"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: ´íÎó: ÎÞ·¨´Ó NetBeans ÖÐÆô¶¯ gvim\n"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\t×¢²á´Ë gvim µ½ OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tÈ¡Ïû OLE ÖÐµÄ gvim ×¢²á"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tʹÓÃͼÐνçÃæ (ͬ \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f »ò --nofork\tǰ̨: Æô¶¯Í¼ÐνçÃæÊ±²» fork"
-
-#~ msgid "-V[N]\t\tVerbose level"
-#~ msgstr "-V[N]\t\tVerbose µÈ¼¶"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\t²»Ê¹Óà newcli À´´ò¿ª´°¿Ú"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\tʹÓà <device> ½øÐÐÊäÈëÊä³ö"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\tʹÓà <gvimrc> Ìæ´úÈκΠ.gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\t±à¼­¼ÓÃܵÄÎļþ"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\t½« vim ÓëÖ¸¶¨µÄ X-server Á¬½Ó"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\t²»Á¬½Óµ½ X Server"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <files>\tÈçÓпÉÄÜ£¬ÔÚ Vim ·þÎñÆ÷Éϱ༭Îļþ <files>"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <files> ͬÉÏ£¬ÕÒ²»µ½·þÎñÆ÷ʱ²»±§Ô¹"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr "--remote-wait <files> ͬ --remote µ«»áµÈ´ýÎļþÍê³É±à¼­"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-wait-silent <files> ͬÉÏ£¬ÕÒ²»µ½·þÎñÆ÷ʱ²»±§Ô¹"
-
-#~ msgid "--remote-tab <files> As --remote but open tab page for each file"
-#~ msgstr "--remote-tab <files> ͬ --remote µ«¶Ôÿ¸öÎļþ´ò¿ªÒ»¸ö±êǩҳ"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <keys>\tËͳö <keys> µ½ Vim ·þÎñÆ÷²¢Í˳ö"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <expr>\tÔÚ Vim ·þÎñÆ÷ÉÏÇó <expr> µÄÖµ²¢´òÓ¡½á¹û"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\tÁгö¿ÉÓÃµÄ Vim ·þÎñÆ÷Ãû³Æ²¢Í˳ö"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <name>\t·¢Ë͵½»ò³ÉΪ Vim ·þÎñÆ÷ <name>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (Motif °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (neXtaw °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (Athena °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\tÔÚ <display> ÉÏÔËÐÐ vim"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tÆô¶¯ºó×îС»¯"
-
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <name>\t\t¶ÁÈ¡ Resource ʱ°Ñ vim ÊÓΪ <name>"
-
-#~ msgid "\t\t\t (Unimplemented)\n"
-#~ msgstr "\t\t\t (ÉÐδʵÏÖ)\n"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <color>\tʹÓà <color> ×÷Ϊ±³¾°É« (Ò²¿ÉÓà -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr "-foreground <color>\tʹÓà <color> ×÷Ϊһ°ãÎÄ×ÖÑÕÉ« (Ò²¿ÉÓà -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\tʹÓà <font> ×÷Ϊһ°ã×ÖÌå (Ò²¿ÉÓà -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\tʹÓà <font> ×÷Ϊ´ÖÌå×ÖÌå"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\tʹÓà <font> ×÷ΪбÌå×ÖÌå"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <geom>\tʹÓà <geom> ×÷Ϊ³õʼλÖà (Ò²¿ÉÓà -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <width>\tÉ趨±ß¿ò¿í¶ÈΪ <width> (Ò²¿ÉÓà -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr "-scrollbarwidth <width> É趨¹ö¶¯Ìõ¿í¶ÈΪ <width> (Ò²¿ÉÓà -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <height>\tÉ趨²Ëµ¥À¸¸ß¶ÈΪ <height> (Ò²¿ÉÓà -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tʹÓ÷´ÏÔ (Ò²¿ÉÓà -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t²»Ê¹Ó÷´ÏÔ (Ò²¿ÉÓà +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\tÉ趨ָ¶¨µÄ×ÊÔ´"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (RISC OS °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <number>\t´°¿Ú³õʼ¿í¶È"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <number>\t´°¿Ú³õʼ¸ß¶È"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (GTK+ °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\tÔÚ <display> ÉÏÔËÐÐ vim (Ò²¿ÉÓà --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\tÉèÖÃÓÃÓÚÇø·ÖÖ÷´°¿ÚµÄ´°¿Ú½ÇÉ«Ãû"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tÔÚÁíÒ»¸ö GTK ²¿¼þÖдò¿ª Vim"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <parent title>\tÔÚ¸¸Ó¦ÓóÌÐòÖдò¿ª Vim"
-
-#~ msgid "No display"
-#~ msgstr "ûÓÐ display"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": ·¢ËÍʧ°Ü¡£\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": ·¢ËÍʧ°Ü¡£³¢ÊÔ±¾µØÖ´ÐÐ\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "%d ÖÐ %d Òѱ༭"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "ûÓÐ display: ·¢Ëͱí´ïʽʧ°Ü¡£\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": ·¢Ëͱí´ïʽʧ°Ü¡£\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: ÎÞЧµÄ´úÂëÒ³"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: ÎÞ·¨´´½¨ÊäÈëÉÏÏÂÎÄ"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: ÎÞ·¨´ò¿ªÊäÈë·¨"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: ¾¯¸æ: ÎÞ·¨É趨ÊäÈë·¨µÄÊͷŻص÷º¯Êý"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: ÊäÈë·¨²»Ö§³ÖÈκηç¸ñ"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: ÊäÈë·¨²»Ö§³ÖÎÒµÄÔ¤±à¼­ÀàÐÍ"
-
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: over-the-spot ·ç¸ñÐèÒª Fontset"
-
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: ÄãµÄ GTK+ ±È 1.2.3 ¾É¡£×´Ì¬Çø²»¿ÉÓá£"
-
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: ÊäÈë·¨·þÎñÆ÷δÔËÐÐ"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [²»ÄÜÔڸð汾µÄ Vim ÉÏʹÓÃ]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "˺Ï´˲˵¥"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Ñ¡ÔñĿ¼¶Ô»°¿ò"
-
-#~ msgid "Save File dialog"
-#~ msgstr "±£´æÎļþ¶Ô»°¿ò"
-
-#~ msgid "Open File dialog"
-#~ msgstr "´ò¿ªÎļþ¶Ô»°¿ò"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: ±§Ç¸£¬¿ØÖÆÌ¨Ä£Ê½ÏÂûÓÐÎļþä¯ÀÀÆ÷"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: ÕýÔÚ±£ÁôÎļþ¡­¡­\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: ½áÊø¡£\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "´íÎó: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[×Ö½Ú] ×ܹ² alloc-free %<PRIu64>-%<PRIu64>£¬Ê¹ÓÃÖÐ %<PRIu64>£¬¸ß·åʹÓà "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[µ÷ÓÃ] ×ܹ² re/malloc(): %<PRIu64>£¬×ܹ² free()': %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: ´ËÐйý³¤"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: ÄÚ²¿´íÎó: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: ÎÞЧµÄÊó±êÐÎ×´"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "ÊäÈëÃÜÂë: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "ÇëÔÙÊäÈëÒ»´Î: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Á½´ÎÃÜÂ벻ƥÅ䣡"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "ÎÞ·¨Á¬½Óµ½ Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "ÎÞ·¨Á¬½Óµ½ Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: NetBeans Á¬½ÓÐÅÏ¢ÎļþÖдíÎóµÄ·ÃÎÊģʽ: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "´Ó Netbeans Ì×½Ó×Ö¶ÁÈ¡"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: »º³åÇø %<PRId64> ¶ªÊ§ NetBeans Á¬½Ó"
-
-#~ msgid "E505: "
-#~ msgstr "E505: "
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: ÇóÖµ¹¦Äܲ»¿ÉÓÃ"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "ÊÍ·ÅÁË %<PRId64> ÐÐ"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: ÔÚͼÐνçÃæÖв»ÄܸıäÖÕ¶Ë"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: ÇëÓà \":gui\" Æô¶¯Í¼ÐνçÃæ"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: ÔÚ GTK+ 2 ͼÐνçÃæÖв»Äܸü¸Ä"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: ÎÞЧµÄ×ÖÌå"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: ÎÞ·¨Ñ¡Ôñ Fontset"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: ÎÞЧµÄ Fontset"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: ÎÞ·¨Ñ¡Ôñ¿í×ÖÌå"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: ÎÞЧµÄ¿í×ÖÌå"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: ²»Ö§³ÖÊó±ê"
-
-#~ msgid "cannot open "
-#~ msgstr "²»ÄÜ´ò¿ª"
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: ²»ÄÜ´ò¿ª´°¿Ú!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "ÐèÒª Amigados °æ±¾ 2.04 ÒÔÉÏ\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "ÐèÒª %s °æ±¾ %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "²»ÄÜ´ò¿ª NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "²»ÄÜ´´½¨ "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim ·µ»ØÖµ: %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "²»ÄÜÇл»Ö÷¿ØÌ¨(console)ģʽ !?\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ²»ÊÇÖ÷¿ØÌ¨(console)??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: ²»ÄÜÓà -f Ñ¡ÏîÖ´ÐÐ shell"
-
-#~ msgid "Cannot execute "
-#~ msgstr "²»ÄÜÖ´ÐÐ "
-
-#~ msgid "shell "
-#~ msgstr "shell "
-
-#~ msgid " returned\n"
-#~ msgstr " ÒÑ·µ»Ø\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE ̫С"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "I/O ´íÎó"
-
-#~ msgid "Message"
-#~ msgstr "ÏûÏ¢"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' ²»ÊÇ 80, ²»ÄÜÖ´ÐÐÍⲿÃüÁî"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Ñ¡Ôñ´òÓ¡»úʧ°Ü"
-
-#~ msgid "to %s on %s"
-#~ msgstr "´Ó %s µ½ %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: δ֪µÄ´òÓ¡»ú×ÖÌå: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: ´òÓ¡´íÎó: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "´òÓ¡ '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: ×Ö·û¼¯ \"%s\" ²»ÄܶÔÓ¦×ÖÌå\"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: ²»ÕýÈ·µÄ×Ö·û '%c' ³öÏÖÔÚ×ÖÌåÃû³Æ \"%s\" ÄÚ"
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Ë«ÖØÐźţ¬Í˳öÖÐ\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: À¹½Øµ½ÖÂÃüÐźÅ(deadly signal) %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: À¹½Øµ½ÖÂÃüÐźÅ(deadly signal)\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "´ò¿ª X display ÓÃʱ %<PRId64> Ãë"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: X ´íÎó\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "²âÊÔ X display ʧ°Ü"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "´ò¿ª X display ³¬Ê±"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨Ö´ÐÐ shell sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨½¨Á¢¹ÜµÀ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨ fork\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÃüÁîÒѽáÊø\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP ¶ªÊ§Á˵½ ICE µÄÁ¬½Ó"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "´ò¿ª X display ʧ°Ü"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP ´¦Àí save-yourself ÇëÇó"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP ´ò¿ªÁ¬½Ó"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ICE Á¬½Ó¼àÊÓʧ°Ü"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection µ÷ÓÃʧ°Ü: %s"
-
-#~ msgid "At line"
-#~ msgstr "ÔÚÐкŠ"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "ÎÞ·¨¼ÓÔØ vim32.dll£¡"
-
-#~ msgid "VIM Error"
-#~ msgstr "VIM ´íÎó"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "ÎÞ·¨ÐÞÕýµ½ DLL µÄº¯ÊýÖ¸Õë!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "Shell ·µ»Ø %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: À¹½Øµ½ %s ʼþ\n"
-
-#~ msgid "close"
-#~ msgstr "¹Ø±Õ"
-
-#~ msgid "logoff"
-#~ msgstr "×¢Ïû"
-
-#~ msgid "shutdown"
-#~ msgstr "¹Ø»ú"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: ÕÒ²»µ½ÃüÁî"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "ÔÚÄãµÄ $PATH ÖÐÕÒ²»µ½ VIMRUN.EXE¡£\n"
-#~ "ÍⲿÃüÁîÖ´ÐÐÍê±Ïºó½«²»»áÔÝÍ£¡£\n"
-#~ "½øÒ»²½ËµÃ÷Çë¼û :help win32-vimrun"
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim ¾¯¸æ"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "²»Ö§³Ö %s ÖеÄת»»"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Tag Îļþ·¾¶±»½Ø¶ÏΪ %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "Æô¶¯Ð shell\n"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "ÎÞ·¨³·Ïú£»Çë¼ÌÐø"
-
-#~ msgid "number changes time"
-#~ msgstr " ±àºÅ ¸Ä±ä ʱ¼ä"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16/32 λͼÐνçÃæ°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 λͼÐνçÃæ°æ±¾"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " Win32s ģʽ"
-
-#~ msgid " with OLE support"
-#~ msgstr " ´ø OLE Ö§³Ö"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 λ¿ØÖÆÌ¨°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16 λ¿ØÖÆÌ¨°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 λ MS-DOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 λ MS-DOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X (unix) °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "RISC OS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "´óÐͰ汾 "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Õý³£°æ±¾ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "СÐͰ汾 "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "΢ÐͰ汾 "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "´ø GTK2-GNOME ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "´ø GTK-GNOME ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "´ø GTK2 ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK GUI."
-#~ msgstr "´ø GTK ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "´ø X11-Motif ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "´ø X11-neXtaw ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "´ø X11-Athena ͼÐνçÃæ¡£"
-
-#~ msgid "with Photon GUI."
-#~ msgstr "´ø Photon ͼÐνçÃæ¡£"
-
-#~ msgid "with GUI."
-#~ msgstr "´øÍ¼ÐνçÃæ¡£"
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "´ø Carbon ͼÐνçÃæ¡£"
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "´ø Cocoa ͼÐνçÃæ¡£"
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "´ø(´«Í³)ͼÐνçÃæ¡£"
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ϵͳ gvimrc Îļþ: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " Óû§ gvimrc Îļþ: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "µÚ¶þÓû§ gvimrc Îļþ: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "µÚÈýÓû§ gvimrc Îļþ: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ϵͳ²Ëµ¥Îļþ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "±àÒëÆ÷: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "²Ëµ¥ Help->Orphans ²é¿´ËµÃ÷ "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "ÎÞģʽÔËÐУ¬ÊäÈëÎÄ×Ö¼´²åÈë"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "²Ëµ¥ Edit->Global Settings->Toggle Insert Mode "
-
-#, fuzzy
-#~ msgid " for two modes "
-#~ msgstr " # pid Êý¾Ý¿âÃû³Æ prepend path\n"
-
-#, fuzzy
-#~ msgid " for Vim defaults "
-#~ msgstr " # pid Êý¾Ý¿âÃû³Æ prepend path\n"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "¾¯¸æ: ¼ì²âµ½ Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "ÊäÈë :help windows95<Enter> ²é¿´Ïà¹ØËµÃ÷ "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: ÎÞ·¨¼ÓÔØ¿â %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr "±§Ç¸£¬´ËÃüÁî²»¿ÉÓÃ: ÎÞ·¨¼ÓÔØ Perl ¿â¡£"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Óöà¸ö Vim ±à¼­(&M)"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Óõ¥¸ö Vim ±à¼­(&V)"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Óà Vim ±È½Ï(diff)"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Óà Vim ±à¼­(&V)"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Óõ±Ç°µÄ Vim ±à¼­ - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Óà Vim ±à¼­Ñ¡ÖеÄÎļþ"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "´´½¨½ø³Ìʧ°Ü: Çë¼ì²é gvim ÊÇ·ñÔÚ·¾¶ÖУ¡"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "gvimext.dll ´íÎó"
-
-#~ msgid "Path length too long!"
-#~ msgstr "·¾¶Ì«³¤£¡"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: δ֪µÄ Fontset: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: δ֪µÄ×ÖÌå: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: ×ÖÌå \"%s\" ²»Êǵȿí×ÖÌå"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: ÎÞ·¨¼ÓÔØ¿âº¯Êý %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: ÎÞ·¨Ê¹Óà Hebrew: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: ÎÞ·¨Ê¹Óà Farsi: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: ÎÞ·¨Ê¹Óà Arabic: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: ûÓÐÃû½Ð \"%s\" µÄÒÑ×¢²áµÄ·þÎñÆ÷"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: ÎÞ·¨´ò¿ª display"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: ÊÕµ½ÎÞЧµÄ±í´ïʽ"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans ²»ÔÊÐí¸Ä±äÖ»¶ÁÎļþ"
-
-#~ msgid "Affix flags ignored when PFXPOSTPONE used in %s line %d: %s"
-#~ msgstr "%s µÚ %d ÐУ¬Ê¹Óà PFXPOSTPONE ʱ¸½¼Ó±êÖ¾±»ºöÂÔ: %s"
-
-#~ msgid "[No file]"
-#~ msgstr "[δÃüÃû]"
-
-#~ msgid "[Error List]"
-#~ msgstr "[´íÎóÁбí]"
-
-#~ msgid "E106: Unknown variable: \"%s\""
-#~ msgstr "E106: 䶨ÒåµÄ±äÁ¿: \"%s\""
-
-#~ msgid "function "
-#~ msgstr "º¯Êý "
-
-#~ msgid "E130: Undefined function: %s"
-#~ msgstr "E130: º¯Êý %s ÉÐ䶨Òå"
-
-#~ msgid "Run Macro"
-#~ msgstr "Ö´Ðкê"
-
-#~ msgid "E242: Color name not recognized: %s"
-#~ msgstr "E242: %s Ϊ²»ÄÜʶ±ðµÄÑÕÉ«Ãû³Æ"
-
-#~ msgid "error reading cscope connection %d"
-#~ msgstr "¶ÁÈ¡ cscope Á¬½Ó %d ʱ´íÎó"
-
-#~ msgid "E260: cscope connection not found"
-#~ msgstr "E260: ÕÒ²»µ½ cscope Á¬½Ó"
-
-#~ msgid "cscope connection closed"
-#~ msgstr "cscope Á¬½ÓÒѹرÕ"
-
-#~ msgid "couldn't malloc\n"
-#~ msgstr "²»ÄÜʹÓà malloc\n"
-
-#~ msgid "%2d %-5ld %-34s <none>\n"
-#~ msgstr "%2d %-5ld %-34s <ÎÞ>\n"
-
-#~ msgid "E249: couldn't read VIM instance registry property"
-#~ msgstr "E249: ²»ÄܶÁÈ¡ VIM µÄ ×¢²á±íÊôÐÔ"
-
-#~ msgid "\"\n"
-#~ msgstr "\"\n"
-
-#~ msgid "--help\t\tShow Gnome arguments"
-#~ msgstr "--help\t\tÏÔʾ Gnome Ïà¹Ø²ÎÊý"
-
-#~ msgid "[string too long]"
-#~ msgstr "[×Ö·û´®Ì«³¤]"
-
-#~ msgid "Hit ENTER to continue"
-#~ msgstr "Çë°´ ENTER ¼ÌÐø"
-
-#~ msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-#~ msgstr " (RET/BS: ÏòÏÂ/ÏòÉÏÒ»ÐÐ, ¿Õ¸ñ/b: Ò»Ò³, d/u: °ëÒ³, q: Í˳ö)"
-
-#~ msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-#~ msgstr " (RET: ÏòÏÂÒ»ÐÐ, ¿Õ°×¼ü: Ò»Ò³, d: °ëÒ³, q: Í˳ö)"
-
-#~ msgid "E361: Crash intercepted; regexp too complex?"
-#~ msgstr "E361: ²»ÄÜÖ´ÐÐ; regular expression Ì«¸´ÔÓ?"
-
-#~ msgid "E363: pattern caused out-of-stack error"
-#~ msgstr "E363: regular expression Ôì³É¶ÑÕ»ÓùâµÄ´íÎó"
-
-#~ msgid " BLOCK"
-#~ msgstr " ¿é"
-
-#~ msgid " LINE"
-#~ msgstr " ÐÐ"
-
-#~ msgid "Enter nr of choice (<CR> to abort): "
-#~ msgstr "ÊäÈë nr »òÑ¡Ôñ (<CR> Í˳ö): "
-
-#~ msgid "Linear tag search"
-#~ msgstr "ÏßÐÔ²éÕÒ±êÇ© (Tags)"
-
-#~ msgid "Binary tag search"
-#~ msgstr "¶þ½øÖƲéÕÒ(Binary search) ±êÇ©(Tags)"
-
-#~ msgid "with BeOS GUI."
-#~ msgstr "ʹÓà BeOS ͼÐνçÃæ¡£"
diff --git a/src/nvim/po/zh_CN.po b/src/nvim/po/zh_CN.po
deleted file mode 100644
index 254ebbce6b..0000000000
--- a/src/nvim/po/zh_CN.po
+++ /dev/null
@@ -1,7932 +0,0 @@
-# Chinese (simplified) Translation for Vim
-#
-# Do ":help uganda" in Vim to read copying and usage conditions.
-# Do ":help credits" in Vim to see a list of people who contributed.
-#
-# FIRST AUTHOR Wang Jun <junw@turbolinux.com.cn>
-#
-# TRANSLATORS
-# Edyfox <edyfox@gmail.com>
-# Yuheng Xie <elephant@linux.net.cn>
-#
-# Original translations.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Vim(Simplified Chinese)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: 2006-04-21 14:00+0800\n"
-"Last-Translator: Yuheng Xie <elephant@linux.net.cn>\n"
-"Language-Team: Simplified Chinese <i18n-translation@lists.linux.net.cn>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=gb2312\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "Ñ¡Ïî²ÎÊýºóµÄÄÚÈÝÎÞЧ"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr ""
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr "[Location Áбí]"
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr "[Quickfix Áбí]"
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr ""
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: ÎÞ·¨·ÖÅäÈκλº³åÇø£¬Í˳ö³ÌÐò..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: ÎÞ·¨·ÖÅ仺³åÇø£¬Ê¹ÓÃÁíÒ»¸ö»º³åÇø..."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: ûÓÐÊÍ·ÅÈκλº³åÇø"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: ûÓÐɾ³ýÈκλº³åÇø"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: ûÓÐÇå³ýÈκλº³åÇø"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "ÊÍ·ÅÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "ÊÍ·ÅÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "ɾ³ýÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "ɾ³ýÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "Çå³ýÁË 1 ¸ö»º³åÇø"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "Çå³ýÁË %d ¸ö»º³åÇø"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: ÎÞ·¨ÊÍ·Å×îºóÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: ûÓÐÐ޸ĹýµÄ»º³åÇø"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: ûÓпÉÁгöµÄ»º³åÇø"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: »º³åÇø %<PRId64> ²»´æÔÚ"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: ÎÞ·¨Çл»£¬ÒÑÊÇ×îºóÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: ÎÞ·¨Çл»£¬ÒÑÊǵÚÒ»¸ö»º³åÇø"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: »º³åÇø %<PRId64> ÒÑÐ޸ĵ«ÉÐδ±£´æ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: ¾¯¸æ: ÎļþÃû¹ý¶à"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: ÕÒ²»µ½»º³åÇø %<PRId64>"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: ÕÒµ½²»Ö¹Ò»¸ö %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: ûÓÐÆ¥ÅäµÄ»º³åÇø %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "µÚ %<PRId64> ÐÐ"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: ÒÑÓлº³åÇøÊ¹ÓøÃÃû³Æ"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [ÒÑÐÞ¸Ä]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[δ±à¼­]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[ÐÂÎļþ]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[¶Á´íÎó]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[Ö»¶Á]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[Ö»¶Á]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "1 ÐÐ --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "%<PRId64> ÐÐ --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "ÐÐ %<PRId64> / %<PRId64> --%d%%-- ÁÐ "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-msgid "[No Name]"
-msgstr "[δÃüÃû]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "°ïÖú"
-
-#: ../buffer.c:3225 ../screen.c:4883
-msgid "[Help]"
-msgstr "[°ïÖú]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[Ô¤ÀÀ]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "È«²¿"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "µ×¶Ë"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "¶¥¶Ë"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# »º³åÇøÁбí:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr ""
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- Signs ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "%s µÄ Signs:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ÐÐ=%<PRId64> id=%d Ãû³Æ=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: ȱÉÙðºÅ"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: ÎÞЧµÄģʽ"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: ´Ë´¦ÐèÒªÊý×Ö"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: ÎÞЧµÄ°Ù·Ö±È"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: ²»ÄܱȽÏ(diff) %<PRId64> ¸öÒÔÉϵĻº³åÇø"
-
-#: ../diff.c:753
-#, fuzzy
-msgid "E810: Cannot read or write temp files"
-msgstr "E557: ÎÞ·¨´ò¿ª termcap Îļþ"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: ÎÞ·¨´´½¨ diff"
-
-#: ../diff.c:966
-#, fuzzy
-msgid "E816: Cannot read patch output"
-msgstr "E98: ÎÞ·¨¶ÁÈ¡ diff µÄÊä³ö"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: ÎÞ·¨¶ÁÈ¡ diff µÄÊä³ö"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: µ±Ç°»º³åÇø²»ÔÚ diff ģʽ"
-
-#: ../diff.c:2100
-#, fuzzy
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E100: ûÓÐÆäËü´¦ÓÚ diff ģʽµÄ»º³åÇø"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: ûÓÐÆäËü´¦ÓÚ diff ģʽµÄ»º³åÇø"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr "E101: ÓÐÁ½¸öÒÔÉϵĻº³åÇø´¦ÓÚ diff ģʽ£¬²»Äܾö¶¨ÓÃÄÄÒ»¸ö"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: ÕÒ²»µ½»º³åÇø \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: »º³åÇø \"%s\" ²»ÔÚ diff ģʽ"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr "E787: ÒâÍâµØ¸Ä±äÁË»º³åÇø"
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: ¸´ºÏ×Ö·û(digraph)Öв»ÄÜʹÓà Escape"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: ÕÒ²»µ½ Keymap Îļþ"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: ²»ÊÇÔڽű¾ÎļþÖÐʹÓà :loadkeymap "
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr ""
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " ¹Ø¼ü×Ö²¹È« (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ģʽ (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " ÕûÐв¹È« (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " ÎļþÃû²¹È« (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " Tag ²¹È« (^]^N^P)"
-
-#: ../edit.c:88
-#, fuzzy
-msgid " Path pattern completion (^N^P)"
-msgstr " ·¾¶Ä£Ê½²¹È« (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " ¶¨Ò岹ȫ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " Dictionary ²¹È« (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Thesaurus ²¹È« (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " ÃüÁîÐв¹È« (^V^N^P)"
-
-#: ../edit.c:94
-msgid " User defined completion (^U^N^P)"
-msgstr " Óû§×Ô¶¨Ò岹ȫ (^U^N^P)"
-
-#: ../edit.c:95
-msgid " Omni completion (^O^N^P)"
-msgstr " È«Äܲ¹È« (^O^N^P)"
-
-#: ../edit.c:96
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ƴд½¨Òé (s^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " ¹Ø¼ü×Ö¾Ö²¿²¹È« (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "Òѵ½¶ÎÂä½áβ"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr ""
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr ""
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "Ñ¡Ïî 'dictionary' Ϊ¿Õ"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "Ñ¡Ïî 'thesaurus' Ϊ¿Õ"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "ÕýÔÚɨÃè dictionary: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (²åÈë) Scroll (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (Ìæ»») Scroll (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "ÕýÔÚɨÃè: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "ɨÃè±êÇ©."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " Ôö¼Ó"
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- ²éÕÒÖÐ..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "»Øµ½Æðµã"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "ÁíÒ»ÐеĴÊ"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "ΨһƥÅä"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "Æ¥Åä %d / %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "Æ¥Åä %d"
-
-#: ../eval.c:137
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: :let ÖгöÏÖÒì³£×Ö·û"
-
-#: ../eval.c:138
-#, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E684: List Ë÷Òý³¬³ö·¶Î§: %<PRId64>"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: 䶨ÒåµÄ±äÁ¿: %s"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: ȱÉÙ ']'"
-
-#: ../eval.c:141
-#, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E686: %s µÄ²ÎÊý±ØÐëÊÇ List"
-
-#: ../eval.c:143
-#, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E712: %s µÄ²ÎÊý±ØÐëÊÇ List »òÕß Dictionary"
-
-#: ../eval.c:144
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E713: Dictionary µÄ¼ü²»ÄÜΪ¿Õ"
-
-#: ../eval.c:145
-msgid "E714: List required"
-msgstr "E714: ÐèÒª List"
-
-#: ../eval.c:146
-msgid "E715: Dictionary required"
-msgstr "E715: ÐèÒª Dictionary"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr "E716: Dictionary Öв»´æÔÚ¼ü: %s"
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: º¯Êý %s ÒÑ´æÔÚ£¬Çë¼Ó ! Ç¿ÖÆÌæ»»"
-
-#: ../eval.c:151
-msgid "E717: Dictionary entry already exists"
-msgstr "E717: Dictionary ÏîÒÑ´æÔÚ"
-
-#: ../eval.c:152
-msgid "E718: Funcref required"
-msgstr "E718: ÐèÒª Funcref"
-
-#: ../eval.c:153
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E719: ²»ÄÜ¶Ô Dictionary ʹÓà [:]"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr "E734: %s= µÄ±äÁ¿ÀàÐͲ»ÕýÈ·"
-
-#: ../eval.c:155
-#, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E130: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: ÎÞЧµÄ±äÁ¿Ãû: %s"
-
-#: ../eval.c:157
-#, fuzzy
-msgid "E806: using Float as a String"
-msgstr "E730: ½« List ×÷ String ʹÓÃ"
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr "E687: Ä¿±ê±È List ÏîÊýÉÙ"
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr "E688: Ä¿±ê±È List ÏîÊý¶à"
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr "±äÁ¿ÁбíÖгöÏÖÁ½¸ö ;"
-
-#: ../eval.c:2078
-#, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E738: ÎÞ·¨Áгö %s µÄ±äÁ¿"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr "E689: Ö»ÄÜË÷Òý List »ò Dictionary"
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr "E708: [:] ±ØÐëÔÚ×îºó"
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr "E709: [:] ÐèÒªÒ»¸ö List Öµ"
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr "E710: List ÖµµÄÏî±ÈÄ¿±ê¶à"
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr "E711: List ֵûÓÐ×ã¹»¶àµÄÏî"
-
-#: ../eval.c:2867
-msgid "E690: Missing \"in\" after :for"
-msgstr "E690: :for ºóȱÉÙ \"in\""
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: ȱÉÙÀ¨ºÅ: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: Î޴˱äÁ¿: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr "E743: (un)lock µÄ±äÁ¿Ç¶Ì×¹ýÉî"
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' ºóȱÉÙ ':'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr "E691: Ö»ÄÜ±È½Ï List ºÍ List"
-
-#: ../eval.c:3895
-msgid "E692: Invalid operation for Lists"
-msgstr "E692: ¶Ô List ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr "E735: Ö»ÄÜ±È½Ï Dictionary ºÍ Dictionary"
-
-#: ../eval.c:3917
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E736: ¶Ô Dictionary ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr "E693: Ö»ÄÜ±È½Ï Funcref ºÍ Funcref"
-
-#: ../eval.c:3934
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E694: ¶Ô Funcrefs ÎÞЧµÄ²Ù×÷"
-
-#: ../eval.c:4277
-#, fuzzy
-msgid "E804: Cannot use '%' with Float"
-msgstr "E719: ²»ÄÜ¶Ô Dictionary ʹÓà [:]"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: ȱÉÙ ')'"
-
-#: ../eval.c:4609
-msgid "E695: Cannot index a Funcref"
-msgstr "E695: ²»ÄÜË÷ÒýÒ»¸ö Funcref"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: ȱÉÙÑ¡ÏîÃû³Æ: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: δ֪µÄÑ¡Ïî: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: ȱÉÙÒýºÅ: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: ȱÉÙÒýºÅ: %s"
-
-#: ../eval.c:5084
-#, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E696: List ÖÐȱÉÙ¶ººÅ: %s"
-
-#: ../eval.c:5091
-#, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E697: List ȱÉÙ½áÊø·û ']': %s"
-
-#: ../eval.c:6475
-#, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E720: Dictionary ÖÐȱÉÙðºÅ: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr "E721: Dictionary ÖгöÏÖÖØ¸´µÄ¼ü: \"%s\""
-
-#: ../eval.c:6517
-#, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E722: Dictionary ÖÐȱÉÙ¶ººÅ: %s"
-
-#: ../eval.c:6524
-#, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E723: Dictionary ȱÉÙ½áÊø·û '}': %s"
-
-#: ../eval.c:6555
-msgid "E724: variable nested too deep for displaying"
-msgstr "E724: ±äÁ¿Ç¶Ì×¹ýÉîÎÞ·¨ÏÔʾ"
-
-#: ../eval.c:7188
-#, fuzzy, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:7190
-#, fuzzy, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E118: º¯ÊýµÄ²ÎÊý¹ý¶à: %s"
-
-#: ../eval.c:7377
-#, fuzzy, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E130: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: º¯Êý %s µÄ²ÎÊýÌ«ÉÙ"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: <SID> ²»ÄÜÔÚ script ÉÏÏÂÎÄÍâʹÓÃ: %s"
-
-#: ../eval.c:7391
-#, fuzzy, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr "E720: Dictionary ÖÐȱÉÙðºÅ: %s"
-
-#: ../eval.c:7453
-#, fuzzy
-msgid "E808: Number or Float required"
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../eval.c:7503
-#, fuzzy
-msgid "add() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:7907
-msgid "E699: Too many arguments"
-msgstr "E699: ²ÎÊý¹ý¶à"
-
-#: ../eval.c:8073
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E785: complete() Ö»ÄÜÔÚ²åÈëģʽÖÐʹÓÃ"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "È·¶¨(&O)"
-
-#: ../eval.c:8676
-#, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E737: ¼üÒÑ´æÔÚ: %s"
-
-#: ../eval.c:8692
-#, fuzzy
-msgid "extend() argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../eval.c:8915
-#, fuzzy
-msgid "map() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:8916
-#, fuzzy
-msgid "filter() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ÐÐ: "
-
-#: ../eval.c:9291
-#, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E700: δ֪µÄº¯Êý: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "inputrestore() µÄµ÷ÓôÎÊý¶àÓÚ inputsave()"
-
-#: ../eval.c:10771
-#, fuzzy
-msgid "insert() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:10841
-msgid "E786: Range not allowed"
-msgstr "E786: ²»ÔÊÐíµÄ·¶Î§"
-
-#: ../eval.c:11140
-msgid "E701: Invalid type for len()"
-msgstr "E701: len() µÄÀàÐÍÎÞЧ"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr "E726: ²½³¤ÎªÁã"
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr "E727: ÆðʼֵÔÚÖÕÖ¹Öµºó"
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr "<¿Õ>"
-
-#: ../eval.c:12282
-#, fuzzy
-msgid "remove() argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ·ûºÅÁ¬½Ó¹ý¶à(Ñ­»·£¿)"
-
-#: ../eval.c:12593
-#, fuzzy
-msgid "reverse() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "sort() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "-c ²ÎÊý"
-
-#: ../eval.c:13776
-msgid "E702: Sort compare function failed"
-msgstr "E702: Sort ±È½Ïº¯Êýʧ°Ü"
-
-#: ../eval.c:13806
-#, fuzzy
-msgid "E882: Uniq compare function failed"
-msgstr "E702: Sort ±È½Ïº¯Êýʧ°Ü"
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(ÎÞЧ)"
-
-#: ../eval.c:14590
-msgid "E677: Error writing temp file"
-msgstr "E677: дÁÙʱÎļþ³ö´í"
-
-#: ../eval.c:16159
-#, fuzzy
-msgid "E805: Using a Float as a Number"
-msgstr "E745: ½« List ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr "E703: ½« Funcref ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr "E745: ½« List ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr "E728: ½« Dictionary ×÷Êý×ÖʹÓÃ"
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr "E729: ½« Funcref ×÷ String ʹÓÃ"
-
-#: ../eval.c:16262
-msgid "E730: using List as a String"
-msgstr "E730: ½« List ×÷ String ʹÓÃ"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr "E731: ½« Dictionary ×÷ String ʹÓÃ"
-
-#: ../eval.c:16619
-#, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E706: ±äÁ¿ÀàÐͲ»Æ¥Åä: %s"
-
-#: ../eval.c:16705
-#, fuzzy, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E738: ÎÞ·¨Áгö %s µÄ±äÁ¿"
-
-#: ../eval.c:16724
-#, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E704: Funcref ±äÁ¿Ãû±ØÐëÒÔ´óд×Öĸ¿ªÍ·: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr "E705: ±äÁ¿ÃûÓëÒÑÓк¯ÊýÃû³åÍ»: %s"
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr "E741: ÖµÒÑËø¶¨: %s"
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "δ֪"
-
-#: ../eval.c:16768
-#, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E742: ÎÞ·¨¸Ä±ä %s µÄÖµ"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr "E698: ±äÁ¿Ç¶Ì×¹ýÉîÎÞ·¨¸´ÖÆ"
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: º¯Êý %s ÉÐ䶨Òå"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: ȱÉÙ '(': %s"
-
-#: ../eval.c:17293
-#, fuzzy
-msgid "E862: Cannot use g: here"
-msgstr "E284: ²»ÄÜÉ趨 IC Öµ"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../eval.c:17323
-#, fuzzy, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E125: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: ȱÉÙ :endfunction"
-
-#: ../eval.c:17537
-#, fuzzy, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E746: º¯ÊýÃûÓë½Å±¾ÎļþÃû²»Æ¥Åä: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: º¯Êý %s ÕýÔÚʹÓÃÖУ¬²»ÄÜÖØÐ¶¨Òå"
-
-#: ../eval.c:17604
-#, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E746: º¯ÊýÃûÓë½Å±¾ÎļþÃû²»Æ¥Åä: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: ÐèÒªº¯ÊýÃû"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: º¯ÊýÃû±ØÐëÒÔ´óд×Öĸ¿ªÍ·»òÕß°üº¬Ã°ºÅ: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: º¯ÊýÃû±ØÐëÒÔ´óд×Öĸ¿ªÍ·»òÕß°üº¬Ã°ºÅ: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ÎÞ·¨É¾³ýº¯Êý %s: ÕýÔÚʹÓÃÖÐ"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: º¯Êýµ÷ÓÃÉî¶È³¬³ö 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "µ÷ÓÃ %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ÒÑÖÐÖ¹"
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s ·µ»Ø #%<PRId64> "
-
-#: ../eval.c:18670
-#, c-format
-msgid "%s returning %s"
-msgstr "%s ·µ»Ø %s"
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "ÔÚ %s ÖмÌÐø"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return ²»ÔÚº¯ÊýÖÐ"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# È«¾Ö±äÁ¿:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t×î½üÐÞ¸ÄÓÚ "
-
-#: ../eval.c:19272
-#, fuzzy
-msgid "No old files"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, Ê®Áù½øÖÆ %02x, °Ë½øÖÆ %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, Ê®Áù½øÖÆ %04x, °Ë½øÖÆ %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, Ê®Áù½øÖÆ %08x, °Ë½øÖÆ %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: °ÑÐÐÒÆ¶¯µ½×ÔÒÑÖÐ"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "ÒÆ¶¯ÁË 1 ÐÐ"
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "ÒÆ¶¯ÁË %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "¹ýÂËÁË %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *Filter* ×Ô¶¯ÃüÁî²»¿ÉÒԸı䵱ǰ»º³åÇø"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[ÒÑÐ޸ĵ«ÉÐδ±£´æ]\n"
-
-# bad to translate
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s λÓÚÐÐ: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: ´íÎó¹ý¶à£¬ºöÂÔÎļþµÄÊ£Óಿ·Ö"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "¶ÁÈ¡ viminfo Îļþ \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " ÐÅÏ¢"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " 񈬀"
-
-#: ../ex_cmds.c:1462
-#, fuzzy
-msgid " oldfiles"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ʧ°Ü"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Viminfo Îļþ²»¿ÉдÈë: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: ÎÞ·¨Ð´Èë viminfo Îļþ %s£¡"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "дÈë viminfo Îļþ \"%s\""
-
-# do not translate to avoid writing Chinese in files
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, fuzzy, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# Õâ¸ö viminfo ÎļþÊÇÓÉ Vim %s Éú³ÉµÄ¡£\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:1722
-#, fuzzy
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# Èç¹ûÒª×ÔÐÐÐÞ¸ÄÇëÌØ±ðСÐÄ£¡\n"
-"\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:1723
-#, fuzzy
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# 'encoding' ÔÚ´ËÎļþ½¨Á¢Ê±µÄÖµ\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "ÎÞЧµÄÆô¶¯×Ö·û"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "ҪдÈ벿·ÖÎļþÂð£¿"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ÇëʹÓà ! À´Ð´È벿·Ö»º³åÇø"
-
-#: ../ex_cmds.c:2281
-#, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "¸²¸ÇÒÑ´æÔÚµÄÎļþ \"%s\" Âð£¿"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr "½»»»Îļþ \"%s\" ÒÑ´æÔÚ£¬È·ÊµÒª¸²¸ÇÂð£¿"
-
-#: ../ex_cmds.c:2326
-#, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E768: ½»»»ÎļþÒÑ´æÔÚ: %s (:silent! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: »º³åÇø %<PRId64> ûÓÐÎļþÃû"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ÎļþδдÈë: дÈë±» 'write' Ñ¡Ïî½ûÓÃ"
-
-#: ../ex_cmds.c:2434
-#, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"\"%s\" ÒÑÉ趨 'readonly' Ñ¡Ïî¡£\n"
-"ȷʵҪ¸²¸ÇÂð£¿"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-
-#: ../ex_cmds.c:2451
-#, fuzzy, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "Ö»¶Á (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: ×Ô¶¯ÃüÁîÒâÍâµØÉ¾³ýÁËлº³åÇø %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: :z ²»½ÓÊÜ·ÇÊý×ֵIJÎÊý"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim ÖнûֹʹÓà shell ÃüÁî"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: ÕýÔò±í´ïʽ²»ÄÜÓÃ×Öĸ×÷·Ö½ç"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "Ìæ»»Îª %s (y/n/a/q/l/^E/^Y)£¿"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(ÒÑÖжÏ) "
-
-#: ../ex_cmds.c:4384
-msgid "1 match"
-msgstr "1 ¸öÆ¥Å䣬"
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "1 ´ÎÌæ»»£¬"
-
-#: ../ex_cmds.c:4387
-#, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> ¸öÆ¥Å䣬"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "%<PRId64> ´ÎÌæ»»£¬"
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr "¹² 1 ÐÐ"
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr "¹² %<PRId64> ÐÐ"
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global ²»ÄܵݹéÖ´ÐÐ"
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: global ȱÉÙÕýÔò±í´ïʽ"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "ÿÐж¼Æ¥Åä±í´ïʽ: %s"
-
-#: ../ex_cmds.c:4510
-#, fuzzy, c-format
-msgid "Pattern not found: %s"
-msgstr "ÕÒ²»µ½Ä£Ê½"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_cmds.c:4587
-#, fuzzy
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# ×î½üµÄÌæ»»×Ö·û´®:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: ²»Òª»Å£¡"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ±§Ç¸£¬Ã»ÓÐ '%s' µÄ %s µÄ˵Ã÷"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: ±§Ç¸£¬Ã»ÓÐ %s µÄ˵Ã÷"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "±§Ç¸£¬ÕÒ²»µ½°ïÖúÎļþ \"%s\""
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: ²»ÊÇĿ¼: %s"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: ÎÞ·¨´ò¿ª²¢Ð´Èë %s"
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ %s"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: ÔÚÒ»ÖÖÓïÑÔÖлìºÏÁ˶àÖÖ°ïÖúÎļþ±àÂë: %s"
-
-#: ../ex_cmds.c:5565
-#, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: Tag \"%s\" ÔÚÎļþ %s/%s ÖÐÖØ¸´³öÏÖ"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: δ֪µÄ sign ÃüÁî: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: ȱÉÙ sign Ãû³Æ"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: Signs ¶¨Òå¹ý¶à"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: ÎÞЧµÄ sign ÎÄ×Ö: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: δ֪µÄ sign: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: ȱÉÙ sign ºÅ"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ÎÞЧµÄ»º³åÇøÃû: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: ÎÞЧµÄ sign ID: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (²»Ö§³Ö)"
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[ÒÑɾ³ý]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "½øÈëµ÷ÊÔģʽ¡£ÊäÈë \"cont\" ¼ÌÐøÔËÐС£"
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "µÚ %<PRId64> ÐÐ: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "ÃüÁî: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "¶Ïµã \"%s%s\" µÚ %<PRId64> ÐÐ"
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: ÕÒ²»µ½¶Ïµã: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "ûÓж¨Òå¶Ïµã"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s µÚ %<PRId64> ÐÐ"
-
-#: ../ex_cmds2.c:942
-#, fuzzy
-msgid "E750: First use \":profile start {fname}\""
-msgstr "E750: ÇëÏÈʹÓà :profile start <fname>"
-
-#: ../ex_cmds2.c:1269
-#, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "½«¸Ä±ä±£´æµ½ \"%s\" Âð£¿"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "δÃüÃû"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: »º³åÇø \"%s\" ÒÑÐ޸ĵ«ÉÐδ±£´æ"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "¾¯¸æ: ÒâÍâµØ½øÈëÁËÆäËü»º³åÇø (Çë¼ì²é×Ô¶¯ÃüÁî)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: Ö»ÓÐÒ»¸öÎļþ¿É±à¼­"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: ÎÞ·¨Çл»£¬ÒÑÊǵÚÒ»¸öÎļþ"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: ÎÞ·¨Çл»£¬ÒÑÊÇ×îºóÒ»¸öÎļþ"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: ²»Ö§³Ö±àÒëÆ÷: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "ÕýÔÚ²éÕÒ \"%s\"£¬ÔÚ \"%s\" ÖÐ"
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "ÕýÔÚ²éÕÒ \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "ÔÚ 'runtimepath' ÖÐÕÒ²»µ½ \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "²»ÄÜÖ´ÐÐĿ¼: \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "²»ÄÜÖ´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "µÚ %<PRId64> ÐÐ: ²»ÄÜÖ´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "Ö´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "µÚ %<PRId64> ÐÐ: Ö´ÐÐ \"%s\""
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "½áÊøÖ´ÐÐ %s"
-
-#: ../ex_cmds2.c:2765
-msgid "modeline"
-msgstr "modeline"
-
-#: ../ex_cmds2.c:2767
-msgid "--cmd argument"
-msgstr "--cmd ²ÎÊý"
-
-#: ../ex_cmds2.c:2769
-msgid "-c argument"
-msgstr "-c ²ÎÊý"
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr "»·¾³±äÁ¿"
-
-#: ../ex_cmds2.c:2773
-msgid "error handler"
-msgstr ""
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: ¾¯¸æ: ´íÎóµÄÐзָô·û£¬¿ÉÄÜÊÇÉÙÁË ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: Ôڽű¾ÎļþÍâʹÓÃÁË :scriptencoding"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: Ôڽű¾ÎļþÍâʹÓÃÁË :finish"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "µ±Ç°µÄ %sÓïÑÔ: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: ²»ÄÜÉ趨ÓïÑÔΪ \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "½øÈë Ex ģʽ¡£ÊäÈë \"visual\" »Øµ½Õý³£Ä£Ê½¡£"
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: Òѵ½Îļþĩβ"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: ÃüÁîµÝ¹é²ãÊý¹ý¶à"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: Ò쳣ûÓб»²¶»ñ: %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "½Å±¾Îļþ½áÊø"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "º¯Êý½áÊø"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ²»È·¶¨µÄÓû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: ²»ÊDZ༭Æ÷µÄÃüÁî"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: ʹÓÃÁËÄæÏòµÄ·¶Î§"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "ʹÓÃÁËÄæÏòµÄ·¶Î§£¬È·¶¨½»»»Âð"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: ÇëʹÓà w »ò w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: ±§Ç¸£¬ÃüÁîÔڴ˰汾Öв»¿ÉÓÃ"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: Ö»ÔÊÐíÒ»¸öÎļþÃû"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "»¹ÓÐ 1 ¸öÎļþδ±à¼­¡£È·ÊµÒªÍ˳öÂð£¿"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "»¹ÓÐ %d ¸öÎļþδ±à¼­¡£È·ÊµÒªÍ˳öÂð£¿"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: »¹ÓÐ 1 ¸öÎļþδ±à¼­"
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: »¹ÓÐ %<PRId64> ¸öÎļþδ±à¼­"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ÃüÁîÒÑ´æÔÚ: Çë¼Ó ! Ç¿ÖÆÌæ»»"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" Ãû³Æ ²ÎÊý ·¶Î§ ²¹È« ¶¨Òå "
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "ÕÒ²»µ½Óû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: ûÓÐÖ¸¶¨ÊôÐÔ"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: ÎÞЧµÄ²ÎÊý¸öÊý"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ²»ÄÜÖ¸¶¨Á½´Î¼ÆÊý"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: ÎÞЧµÄ¼ÆÊýĬÈÏÖµ"
-
-#: ../ex_docmd.c:4625
-msgid "E179: argument required for -complete"
-msgstr "E179: -complete ÐèÒª²ÎÊý"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: ÎÞЧµÄÊôÐÔ: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: ÎÞЧµÄÃüÁîÃû"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: Óû§×Ô¶¨ÒåÃüÁî±ØÐëÒÔ´óд×Öĸ¿ªÍ·"
-
-#: ../ex_docmd.c:4696
-#, fuzzy
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E464: ²»È·¶¨µÄÓû§×Ô¶¨ÒåÃüÁî"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: ûÓÐÕâ¸öÓû§×Ô¶¨ÒåÃüÁî: %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: ÎÞЧµÄ²¹È«ÀàÐÍ: %s"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: Ö»ÓÐ custom ²¹È«²ÅÔÊÐí²ÎÊý"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: Custom ²¹È«ÐèÒªÒ»¸öº¯Êý²ÎÊý"
-
-#: ../ex_docmd.c:5257
-#, fuzzy, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: ÕÒ²»µ½ÅäÉ«·½°¸ %s"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "ÄúºÃ£¬Vim Óû§£¡"
-
-#: ../ex_docmd.c:5431
-msgid "E784: Cannot close last tab page"
-msgstr "E784: ²»ÄܹرÕ×îºóÒ»¸ö tab Ò³"
-
-#: ../ex_docmd.c:5462
-msgid "Already only one tab page"
-msgstr "ÒѾ­Ö»Ê£Ò»¸ö tab Ò³ÁË"
-
-#: ../ex_docmd.c:6004
-#, c-format
-msgid "Tab page %d"
-msgstr "Tab Ò³ %d"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "ÎÞ½»»»Îļþ"
-
-#: ../ex_docmd.c:6478
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E747: ²»ÄܸıäĿ¼£¬»º³åÇøÒÑÐÞ¸Ä (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: ǰһ¸öĿ¼²»´æÔÚ"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: δ֪"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize ÐèÒªÁ½¸öÊý×Ö²ÎÊý"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: ÔÚ´ËÆ½Ì¨Éϲ»ÄÜ»ñµÃ´°¿ÚλÖÃ"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos ÐèÒªÁ½¸öÊý×Ö²ÎÊý"
-
-#: ../ex_docmd.c:7241
-#, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "E739: ÎÞ·¨´´½¨Ä¿Â¼: %s"
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ÒÑ´æÔÚ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: ÎÞ·¨´ò¿ª²¢Ð´Èë \"%s\""
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: ²ÎÊý±ØÐëÊÇÒ»¸ö×Öĸ»òÕßÕý/·´ÒýºÅ"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal µÝ¹é²ãÊý¹ýÉî"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: ûÓÐÓÃÓÚÌæ»» '#' µÄ½»ÌæÎļþÃû"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: ûÓÐÓÃÓÚÌæ»» \"<afile>\" µÄ×Ô¶¯ÃüÁîÎļþÃû"
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: ûÓÐÓÃÓÚÌæ»» \"<abuf>\" µÄ×Ô¶¯ÃüÁ³åÇøºÅ"
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: ûÓÐÓÃÓÚÌæ»» \"<amatch>\" µÄ×Ô¶¯ÃüÁîÆ¥ÅäÃû"
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: ûÓÐÓÃÓÚÌæ»» \"<sfile>\" µÄ :source ÎļþÃû"
-
-#: ../ex_docmd.c:7876
-#, fuzzy
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E498: ûÓÐÓÃÓÚÌæ»» \"<sfile>\" µÄ :source ÎļþÃû"
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: '%' »ò '#' Ϊ¿ÕÎļþÃû£¬Ö»ÄÜÓÃÓÚ \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: ½á¹ûΪ¿Õ×Ö·û´®"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ viminfo Îļþ"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: ²»ÄÜ :throw ǰ׺Ϊ 'Vim' µÄÒì³£"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "Å׳öÒì³£: %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "Íê³ÉÒì³£: %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "¶ªÆúÒì³£: %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s£¬µÚ %<PRId64> ÐÐ"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "²¶»ñÒì³£: %s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr ""
-
-#: ../ex_eval.c:679
-#, fuzzy, c-format
-msgid "%s resumed"
-msgstr " ÒÑ·µ»Ø\n"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr ""
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "Òì³£"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "´íÎóºÍÖжÏ"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "´íÎó"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "ÖжÏ"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: :if ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif ȱÉÙ¶ÔÓ¦µÄ :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: ¶à¸ö :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif ÔÚ :else ºóÃæ"
-
-#: ../ex_eval.c:941
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while/:for ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:1028
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue ȱÉÙ¶ÔÓ¦µÄ :while »ò :for"
-
-#: ../ex_eval.c:1061
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break ȱÉÙ¶ÔÓ¦µÄ :while »ò :for"
-
-#: ../ex_eval.c:1102
-msgid "E732: Using :endfor with :while"
-msgstr "E732: :while ÒÔ :endfor ½áβ"
-
-#: ../ex_eval.c:1104
-msgid "E733: Using :endwhile with :for"
-msgstr "E733: :for ÒÔ :endwhile ½áβ"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: :try ǶÌײãÊý¹ýÉî"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch ÔÚ :finally ºóÃæ"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: ¶à¸ö :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endtry ȱÉÙ¶ÔÓ¦µÄ :try"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction ²»ÔÚº¯ÊýÄÚ"
-
-#: ../ex_getln.c:1643
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E788: Ŀǰ²»ÔÊÐí±à¼­±ðµÄ»º³åÇø"
-
-#: ../ex_getln.c:1656
-#, fuzzy
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E788: Ŀǰ²»ÔÊÐí±à¼­±ðµÄ»º³åÇø"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "tag Ãû"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr " ÀàÐÍ Îļþ\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "Ñ¡Ïî 'history' ΪÁã"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5046
-#, fuzzy, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s ÀúÊ·¼Ç¼ (´Óе½¾É):\n"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5047
-#, fuzzy
-msgid "Command Line"
-msgstr "ÃüÁîÐÐ"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5048
-#, fuzzy
-msgid "Search String"
-msgstr "²éÕÒ×Ö·û´®"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5049
-#, fuzzy
-msgid "Expression"
-msgstr "±í´ïʽ"
-
-# do not translate to avoid writing Chinese in files
-#: ../ex_getln.c:5050
-#, fuzzy
-msgid "Input Line"
-msgstr "ÊäÈëÐÐ"
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ³¬¹ýÃüÁ¶È"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: »î¶¯´°¿Ú»ò»º³åÇøÒѱ»É¾³ý"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr ""
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr "E343: ÎÞЧµÄ·¾¶: '**[number]' ±ØÐëÔÚ·¾¶Ä©Î²»òÕߺóÃæ½Ó '%s'¡£"
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath ÖÐÕÒ²»µ½Ä¿Â¼ \"%s\""
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: ÔÚ·¾¶ÖÐÕÒ²»µ½Îļþ \"%s\""
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: ÔÚ·¾¶ÖÐÕÒ²»µ½¸ü¶àµÄÎļþ \"%s\""
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: ÔÚ·¾¶ÖÐÕÒ²»µ½¸ü¶àµÄÎļþ \"%s\""
-
-#: ../fileio.c:137
-#, fuzzy
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E135: *Filter* ×Ô¶¯ÃüÁî²»¿ÉÒԸı䵱ǰ»º³åÇø"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "ÎÞЧµÄÎļþÃû"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "ÊÇĿ¼"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "²»ÊÇÎļþ"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[ÐÂÎļþ]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr "[ÐÂĿ¼]"
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr "[Îļþ¹ý´ó]"
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[ȨÏÞ²»×ã]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre ×Ô¶¯ÃüÁîµ¼ÖÂÎļþ²»¿É¶Á"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *ReadPre ×Ô¶¯ÃüÁî²»ÔÊÐí¸Ä±äµ±Ç°»º³åÇø"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: ´Ó±ê×¼ÊäÈë¶ÁÈ¡...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: ת»»µ¼ÖÂÎļþ²»¿É¶Á"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/socket]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[socket]"
-
-#. or character special
-#: ../fileio.c:1801
-#, fuzzy
-msgid "[character special]"
-msgstr "1 ¸ö×Ö·û"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[ȱÉÙ CR]'"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[³¤Ðзָî]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[δת»»]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[ÒÑת»»]"
-
-#: ../fileio.c:1831
-#, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[µÚ %<PRId64> ÐÐת»»´íÎó]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[µÚ %<PRId64> ÐÐÎÞЧ×Ö·û]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[¶Á´íÎó]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "ÕÒ²»µ½ÓÃÓÚת»»µÄÁÙʱÎļþ"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "'charconvert' ת»»Ê§°Ü"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "ÎÞ·¨¶ÁÈ¡ 'charconvert' µÄÊä³ö"
-
-#: ../fileio.c:2437
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "E676: ÕÒ²»µ½ acwrite »º³åÇø¶ÔÓ¦µÄ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: ×Ô¶¯ÃüÁîɾ³ý»òÊÍ·ÅÁËҪдÈëµÄ»º³åÇø"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: ×Ô¶¯ÃüÁîÒâÍâµØ¸Ä±äÁËÐÐÊý"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "²»ÊÇÎļþ»ò¿ÉдµÄÉ豸"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "Ö»¶Á (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: ÎÞ·¨Ð´È뱸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: ¹Ø±Õ±¸·ÝÎļþ³ö´í (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: ÎÞ·¨¶ÁÈ¡ÎļþÒÔ¹©±¸·Ý (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: ÎÞ·¨´´½¨±¸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: ÎÞ·¨Éú³É±¸·ÝÎļþ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: ÕÒ²»µ½ÓÃÓÚдÈëµÄÁÙʱÎļþ"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: ÎÞ·¨×ª»» (Çë¼Ó ! Ç¿ÖÆ²»×ª»»Ð´Èë)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: ÎÞ·¨´ò¿ª²¢Ð´ÈëÁ´½ÓÎļþ"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: ÎÞ·¨´ò¿ª²¢Ð´ÈëÎļþ"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: ͬ²½Ê§°Ü"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: ¹Ø±Õʧ°Ü"
-
-#: ../fileio.c:3436
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: дÈë´íÎó£¬×ª»»Ê§°Ü (Ç뽫 'fenc' ÖÿÕÒÔÇ¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3441
-#, fuzzy, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr "E513: дÈë´íÎó£¬×ª»»Ê§°Ü (Ç뽫 'fenc' ÖÿÕÒÔÇ¿ÖÆÖ´ÐÐ)"
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: дÈë´íÎó (ÎļþϵͳÒÑÂú£¿)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr " ת»»´íÎó"
-
-#: ../fileio.c:3509
-#, fuzzy, c-format
-msgid " in line %<PRId64>;"
-msgstr "µÚ %<PRId64> ÐÐ"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[É豸]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[ÐÂ]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr " [a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " ÒÑ×·¼Ó"
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr " [w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " ÒÑдÈë"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Patchmode: ÎÞ·¨±£´æÔ­Ê¼Îļþ"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: Patchmode: ÎÞ·¨Éú³É¿ÕµÄԭʼÎļþ"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: ÎÞ·¨É¾³ý±¸·ÝÎļþ"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"¾¯¸æ: ԭʼÎļþ¿ÉÄÜÒѶªÊ§»òËð»µ\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "ÔÚÎļþÕýȷдÈëǰÇëÎðÍ˳ö±à¼­Æ÷£¡"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[dos ¸ñʽ]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[mac ¸ñʽ]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[unix ¸ñʽ]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 ÐУ¬"
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> ÐУ¬"
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "1 ¸ö×Ö·û"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64> ¸ö×Ö·û"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[×îºóÒ»Ðв»ÍêÕû]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "¾¯¸æ: ´ËÎļþ×Ô¶ÁÈëºóÒÑ·¢Éú±ä¶¯£¡£¡£¡"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "ȷʵҪдÈëÂð"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: дÈëÎļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: ¹Ø±ÕÎļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: ¶ÁÈ¡Îļþ \"%s\" ³ö´í"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: FileChangedShell ×Ô¶¯ÃüÁîɾ³ýÁË»º³åÇø"
-
-#: ../fileio.c:4894
-#, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: Îļþ \"%s\" ÒѾ­²»´æÔÚ"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr "W12: ¾¯¸æ: Îļþ \"%s\" Òѱ䶯£¬²¢ÇÒÔÚ Vim ÖеĻº³åÇøÒ²Òѱ䶯"
-
-#: ../fileio.c:4907
-msgid "See \":help W12\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W12\""
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" Òѱ䶯"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W11\""
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" µÄģʽÒѱ䶯"
-
-#: ../fileio.c:4915
-msgid "See \":help W16\" for more info."
-msgstr "½øÒ»²½ËµÃ÷Çë¼û \":help W16\""
-
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: ¾¯¸æ: ±à¼­¿ªÊ¼ºó£¬Îļþ \"%s\" Òѱ»´´½¨"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "¾¯¸æ"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"È·¶¨(&O)\n"
-"¼ÓÔØÎļþ(&L)"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: ÎÞ·¨ÎªÖØÐ¼ÓÔØ \"%s\" ×ö×¼±¸"
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: ÎÞ·¨ÖØÐ¼ÓÔØ \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--ÒÑɾ³ý--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr ""
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: ÎÞ´Ë×é: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: * ºóÃæÓÐÎÞЧ×Ö·û: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: ÎÞ´Ëʼþ: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: ÎÞ´Ë×é»òʼþ: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- ×Ô¶¯ÃüÁî ---"
-
-#: ../fileio.c:6293
-#, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "E680: <buffer=%d>: ÎÞЧµÄ»º³åÇøºÅ "
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: ²»ÄܶÔËùÓÐʼþÖ´ÐÐ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "ûÓÐÆ¥ÅäµÄ×Ô¶¯ÃüÁî"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: ×Ô¶¯ÃüÁîǶÌײãÊý¹ýÉî"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s ×Ô¶¯ÃüÁî \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "Ö´ÐÐ %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "×Ô¶¯ÃüÁî %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: ȱÉÙ {¡£"
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: ȱÉÙ }¡£"
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: ÕÒ²»µ½ÕÛµþ"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' Ï´´½¨ÕÛµþ"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' ÏÂɾ³ýÕÛµþ"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--ÒÑÕÛµþ %3ld ÐÐ"
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: Ìí¼Óµ½ÒѶÁ»º³åÇøÖÐ"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: µÝ¹éÓ³Éä"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: È«¾ÖËõд %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: È«¾ÖÓ³Éä %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: Ëõд %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: Ó³Éä %s ÒÑ´æÔÚ"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "ÕÒ²»µ½Ëõд"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "ÕÒ²»µ½Ó³Éä"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: ÎÞЧµÄģʽ"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--»º³åÇøÎÞÄÚÈÝ--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: ÃüÁî±»ÖÐÖ¹"
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: ÐèÒª²ÎÊý"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ ºóÃæÓ¦¸Ã¸úÓÐ /¡¢? »ò &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ÔÚÃüÁîÐд°¿ÚÖÐÎÞЧ£»<CR> Ö´ÐУ¬CTRL-C Í˳ö"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr "E12: µ±Ç°Ä¿Â¼ÖÐµÄ exrc/vimrc »ò tag ²éÕÒÖв»ÔÊÐí´ËÃüÁî"
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: ȱÉÙ :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: ȱÉÙ :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: ȱÉÙ :endwhile"
-
-#: ../globals.h:1006
-msgid "E170: Missing :endfor"
-msgstr "E170: ȱÉÙ :endfor"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile ȱÉÙ¶ÔÓ¦µÄ :while"
-
-#: ../globals.h:1008
-msgid "E588: :endfor without :for"
-msgstr "E588: :endfor ȱÉÙ¶ÔÓ¦µÄ :for"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: ÎļþÒÑ´æÔÚ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: ÃüÁîÖ´ÐÐʧ°Ü"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: ÄÚ²¿´íÎó"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "ÒÑÖжÏ"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: ÎÞЧµÄµØÖ·"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: ÎÞЧµÄ²ÎÊý"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: ÎÞЧµÄ±í´ïʽ: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: ÎÞЧµÄ·¶Î§"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: ÎÞЧµÄÃüÁî"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ÊÇĿ¼"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: ÎÞЧµÄ¹ö¶¯´óС"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: µ÷Óú¯Êý¿â \"%s()\" ʧ°Ü"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: ±ê¼ÇµÄÐкÅÎÞЧ"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: ûÓÐÉ趨±ê¼Ç"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: ²»ÄÜÐ޸ģ¬ÒòΪѡÏî 'modifiable' ÊǹصÄ"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: ½Å±¾Ç¶Ì×¹ýÉî"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: ûÓн»ÌæÎļþ"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: ûÓÐÕâ¸öËõд"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ²»ÄÜʹÓà \"!\""
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: ÎÞ·¨Ê¹ÓÃͼÐνçÃæ: ±àÒëʱûÓÐÆôÓÃ"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: ûÓÐÕâ¸ö¸ßÁÁȺ×éÃû: %s"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: ûÓвåÈë¹ýÎÄ×Ö"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: ûÓÐǰһ¸öÃüÁîÐÐ"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: ûÓÐÕâ¸öÓ³Éä"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: ûÓÐÆ¥Åä"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: ûÓÐÆ¥Åä: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: ûÓÐÎļþÃû"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: ûÓÐǰһ¸öÌæ»»ÕýÔò±í´ïʽ"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: ûÓÐǰһ¸öÃüÁî"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: ûÓÐǰһ¸öÕýÔò±í´ïʽ"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: ²»ÄÜʹÓ÷¶Î§"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ûÓÐ×ã¹»µÄ¿Õ¼ä"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: ÎÞ·¨´´½¨Îļþ %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: ÎÞ·¨»ñÈ¡ÁÙʱÎļþÃû"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: ÎÞ·¨´ò¿ªÎļþ %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: ÎÞ·¨¶ÁÈ¡Îļþ %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ÒÑÐ޸ĵ«ÉÐδ±£´æ (¿ÉÓà ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[ÒÑÐ޸ĵ«ÉÐδ±£´æ]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ¿ÕµÄ²ÎÊý"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: ´Ë´¦ÐèÒªÊý×Ö"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: ÎÞ·¨´ò¿ª´íÎóÎļþ %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: ÄÚ´æ²»×㣡"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "ÕÒ²»µ½Ä£Ê½"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: ÕÒ²»µ½Ä£Ê½: %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: ²ÎÊý±ØÐëÊÇÕýÊý"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: ÎÞ·¨»Øµ½Ç°Ò»¸öĿ¼"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: ûÓдíÎó"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr "E776: ûÓÐ location Áбí"
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: ÒÑËð»µµÄÆ¥Åä×Ö·û´®"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: ÒÑË𻵵ÄÕýÔò±í´ïʽ³ÌÐò"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: ÒÑÉ趨ѡÏî 'readonly' (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#: ../globals.h:1073
-#, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: ²»ÄܸıäÖ»¶Á±äÁ¿ \"%s\""
-
-#: ../globals.h:1075
-#, fuzzy, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: ²»ÄÜÔÚ sandbox ÖÐÉ趨±äÁ¿: \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: ¶ÁÈ¡´íÎóÎļþʧ°Ü"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: ²»ÔÊÐíÔÚ sandbox ÖÐʹÓÃ"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: ²»ÔÊÐíÔÚ´ËʹÓÃ"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: ²»Ö§³ÖÉ趨ÆÁĻģʽ"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: ÎÞЧµÄ¹ö¶¯´óС"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: Ñ¡Ïî 'shell' Ϊ¿Õ"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: ÎÞ·¨¶ÁÈ¡ sign Êý¾Ý£¡"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: ½»»»Îļþ¹Ø±Õ´íÎó"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: tag ¶ÑջΪ¿Õ"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: ÃüÁî¹ý¸´ÔÓ"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: Ãû×Ö¹ý³¤"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: [ ¹ý¶à"
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: ÎļþÃû¹ý¶à"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: ¶àÓàµÄβ²¿×Ö·û"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: δ֪µÄ±ê¼Ç"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: ÎÞ·¨À©Õ¹Í¨Åä·û"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' ²»ÄÜСÓÚ 'winminheight'"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' ²»ÄÜСÓÚ 'winminwidth'"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: дÈë³ö´í"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "¼ÆÊýΪÁã"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: Ôڽű¾»·¾³ÍâʹÓÃÁË <SID>"
-
-#: ../globals.h:1102
-#, c-format
-msgid "E685: Internal error: %s"
-msgstr "E685: ÄÚ²¿´íÎó: %s"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr "E363: ±í´ïʽµÄÄÚ´æÊ¹Óó¬³ö 'maxmempattern'"
-
-#: ../globals.h:1105
-msgid "E749: empty buffer"
-msgstr "E749: ¿ÕµÄ»º³åÇø"
-
-#: ../globals.h:1108
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E682: ÎÞЧµÄËÑË÷±í´ïʽ»ò·Ö¸ô·û"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: ÎļþÒÑÔÚÁíÒ»¸ö»º³åÇøÖб»¼ÓÔØ"
-
-#: ../globals.h:1110
-#, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E764: ûÓÐÉ趨ѡÏî '%s'"
-
-#: ../globals.h:1111
-#, fuzzy
-msgid "E850: Invalid register name"
-msgstr "E354: ÎÞЧµÄ¼Ä´æÆ÷Ãû: '%s'"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "ÒѲéÕÒµ½Îļþ¿ªÍ·£¬ÔÙ´Ó½áβ¼ÌÐø²éÕÒ"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "ÒѲéÕÒµ½Îļþ½á⣬ÔÙ´Ó¿ªÍ·¼ÌÐø²éÕÒ"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: ȱÉÙðºÅ"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: ÎÞЧµÄ²¿·Ö"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: Ó¦¸ÃÒªÓÐÊý×Ö"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "µÚ %d Ò³"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "ûÓÐÒª´òÓ¡µÄÎÄ×Ö"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "ÕýÔÚ´òÓ¡µÚ %d Ò³ (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr "¸´ÖÆ %d / %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "ÒÑ´òÓ¡: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "´òÓ¡ÖÐÖ¹"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: дÈë PostScript Êä³öÎļþ³ö´í"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: ÎÞ·¨¶ÁÈ¡ PostScript ×ÊÔ´Îļþ \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: Îļþ \"%s\" ²»ÊÇ PostScript ×ÊÔ´Îļþ"
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: Îļþ \"%s\" ²»ÊÇÒÑÖ§³ÖµÄ PostScript ×ÊÔ´Îļþ"
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" ×ÊÔ´Îļþ°æ±¾²»ÕýÈ·"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: ²»¼æÈݵĶà×Ö½Ú±àÂëºÍ×Ö·û¼¯¡£"
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset ÔÚ¶à×Ö½Ú±àÂëϲ»ÄÜΪ¿Õ¡£"
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: ûÓÐÖ¸¶¨¶à×Ö½Ú´òÓ¡µÄĬÈÏ×ÖÌå¡£"
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: ÎÞ·¨´ò¿ª PostScript Êä³öÎļþ"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"prolog.ps\""
-
-#: ../hardcopy.c:2593
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"cidfont.ps\""
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: ÕÒ²»µ½ PostScript ×ÊÔ´Îļþ \"%s.ps\""
-
-#: ../hardcopy.c:2654
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: ÎÞ·¨×ª»»ÖÁ´òÓ¡±àÂë \"%s\""
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "·¢Ë͵½´òÓ¡»ú¡­¡­"
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: ÎÞ·¨´òÓ¡ PostScript Îļþ"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "´òÓ¡ÈÎÎñÒѱ»·¢ËÍ¡£"
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "Ìí¼ÓÒ»¸öеÄÊý¾Ý¿â"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "²éѯһ¸öģʽ"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "ÏÔʾ´ËÐÅÏ¢"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "½áÊøÒ»¸öÁ¬½Ó"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "ÖØÖÃËùÓÐÁ¬½Ó"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "ÏÔʾÁ¬½Ó"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: Ó÷¨: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "Õâ¸ö cscope ÃüÁî²»Ö§³Ö·Ö¸î´°¿Ú¡£\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: Ó÷¨: cstag <ident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: ÕÒ²»µ½ tag"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ´íÎó: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s ²»ÊÇĿ¼»òÓÐЧµÄ cscope Êý¾Ý¿â"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "Ìí¼ÓÁË cscope Êý¾Ý¿â %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: ¶ÁÈ¡ cscope Á¬½Ó %<PRId64> ³ö´í"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: δ֪µÄ cscope ²éÕÒÀàÐÍ"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: ÎÞ·¨´´½¨ cscope ¹ÜµÀ"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: ÎÞ·¨¶Ô cscope ½øÐÐ fork"
-
-#: ../if_cscope.c:849
-#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection Ö´ÐÐʧ°Ü"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection Ö´ÐÐʧ°Ü"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen to_fp ʧ°Ü"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen fr_fp ʧ°Ü"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: ÎÞ·¨Éú³É cscope ½ø³Ì"
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: ûÓÐ cscope Á¬½Ó"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: cscopequickfix ±êÖ¾ %c ¶Ô %c ÎÞЧ"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: cscope ²éѯ %s %s ûÓÐÕÒµ½Æ¥ÅäµÄ½á¹û"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "cscope ÃüÁî:\n"
-
-#: ../if_cscope.c:1150
-#, fuzzy, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %-30s (Ó÷¨: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: ÖØ¸´µÄ cscope Êý¾Ý¿âδ±»¼ÓÈë"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: ÕÒ²»µ½ cscope Á¬½Ó %s"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "cscope Á¬½Ó %s ÒѹرÕ"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches ÑÏÖØ´íÎó"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Cscope tag: %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ÐÐ "
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ÎļþÃû / ÉÏÏÂÎÄ / ÐÐ\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Cscope ´íÎó: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "ËùÓÐ cscope Êý¾Ý¿âÒѱ»ÖØÖÃ"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "ûÓÐ cscope Á¬½Ó\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid Êý¾Ý¿âÃû prepend path\n"
-
-#: ../main.c:144
-msgid "Unknown option argument"
-msgstr "δ֪µÄÑ¡Ïî²ÎÊý"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "±à¼­²ÎÊý¹ý¶à"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "ȱÉÙ±ØÒªµÄ²ÎÊý"
-
-#: ../main.c:150
-msgid "Garbage after option argument"
-msgstr "Ñ¡Ïî²ÎÊýºóµÄÄÚÈÝÎÞЧ"
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "\"+command\"¡¢\"-c command\" »ò \"--cmd command\" ²ÎÊý¹ý¶à"
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "ÎÞЧµÄ²ÎÊý"
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "»¹ÓÐ %d ¸öÎļþµÈ´ý±à¼­\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "ÊÔͼÔٴδò¿ª½Å±¾Îļþ: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "ÎÞ·¨´ò¿ª²¢¶ÁÈ¡: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "ÎÞ·¨´ò¿ª²¢Êä³ö½Å±¾: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: ¾¯¸æ: Êä³ö²»Êǵ½ÖÕ¶Ë(ÆÁÄ»)\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: ¾¯¸æ: ÊäÈë²»ÊÇÀ´×ÔÖÕ¶Ë(¼üÅÌ)\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "pre-vimrc ÃüÁîÐÐ"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: ÎÞ·¨¶ÁÈ¡ \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"¸ü¶àÐÅÏ¢Çë¼û: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[Îļþ ..] ±à¼­Ö¸¶¨µÄÎļþ"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- ´Ó±ê×¼ÊäÈë(stdin)¶ÁÈ¡Îı¾"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t tag ±à¼­ tag ¶¨Òå´¦µÄÎļþ"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] ±à¼­µÚÒ»¸ö³ö´í´¦µÄÎļþ"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-"Ó÷¨:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr " vim [²ÎÊý] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" »ò:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"²ÎÊý:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\tÔÚÕâÒÔºóÖ»ÓÐÎļþÃû"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t²»À©Õ¹Í¨Åä·û"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi ģʽ (ͬ \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx ģʽ (ͬ \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr ""
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t°²¾²(Åú´¦Àí)ģʽ (Ö»ÄÜÓë \"ex\" Ò»ÆðʹÓÃ)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tDiff ģʽ (ͬ \"vimdiff\")"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\tÈÝÒ×ģʽ (ͬ \"evim\"£¬ÎÞģʽ)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\tÖ»¶Áģʽ (ͬ \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\tÏÞÖÆÄ£Ê½ (ͬ \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\t²»¿ÉÐÞ¸Ä(дÈëÎļþ)"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\tÎı¾²»¿ÉÐÞ¸Ä"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\t¶þ½øÖÆÄ£Ê½"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLisp ģʽ"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\t¼æÈÝ´«Í³µÄ Vi: 'compatible'"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\t²»ÍêÈ«¼æÈÝ´«Í³µÄ Vi: 'nocompatible'"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr ""
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\tµ÷ÊÔģʽ"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\t²»Ê¹Óý»»»Îļþ£¬Ö»Ê¹ÓÃÄÚ´æ"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\tÁгö½»»»Îļþ²¢Í˳ö"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (¸úÎļþÃû)\t\t»Ö¸´±ÀÀ£µÄ»á»°"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\tͬ -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\tÒÔ Arabic ģʽÆô¶¯"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\tÒÔ Hebrew ģʽÆô¶¯"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\tÒÔ Farsi ģʽÆô¶¯"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\tÉ趨ÖÕ¶ËÀàÐÍΪ <terminal>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\tʹÓà <vimrc> Ìæ´úÈκΠ.vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\t²»¼ÓÔØ plugin ½Å±¾"
-
-#: ../main.c:2227
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-P[N]\t\t´ò¿ª N ¸ö±êǩҳ (ĬÈÏÖµ: ÿ¸öÎļþÒ»¸ö)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\t´ò¿ª N ¸ö´°¿Ú (ĬÈÏÖµ: ÿ¸öÎļþÒ»¸ö)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\tͬ -o µ«´¹Ö±·Ö¸î"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\tÆô¶¯ºóÌøµ½Îļþĩβ"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\tÆô¶¯ºóÌøµ½µÚ <lnum> ÐÐ"
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\t¼ÓÔØÈκΠvimrc ÎļþǰִÐÐ <command>"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\t¼ÓÔØµÚÒ»¸öÎļþºóÖ´ÐÐ <command>"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\t¼ÓÔØµÚÒ»¸öÎļþºóÖ´ÐÐÎļþ <session>"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\t´ÓÎļþ <scriptin> ¶ÁÈëÕý³£Ä£Ê½µÄÃüÁî"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\t½«ËùÓÐÊäÈëµÄÃüÁî×·¼Óµ½Îļþ <scriptout>"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\t½«ËùÓÐÊäÈëµÄÃüÁîдÈëµ½Îļþ <scriptout>"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\tʹÓà <viminfo> È¡´ú .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h »ò --help\t´òÓ¡°ïÖú(±¾ÐÅÏ¢)²¢Í˳ö"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\t´òÓ¡°æ±¾ÐÅÏ¢²¢Í˳ö"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "ûÓÐÉ趨±ê¼Ç"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: ûÓÐÆ¥Åä \"%s\" µÄ±ê¼Ç"
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"±ê¼Ç ÐÐ ÁÐ Îļþ/Îı¾"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" Ìø×ª ÐÐ ÁÐ Îļþ/Îı¾"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-" ¸Ä±ä ÐÐ ÁÐ Îı¾"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Îļþ±ê¼Ç:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Ìø×ªÁбí (´Óе½¾É):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# ÎļþÄڵıê¼ÇÀúÊ·¼Ç¼ (´Óе½¾É):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "ȱÉÙ '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: ¿éδ±»Ëø¶¨"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: ½»»»Îļþ¶ÁÈ¡¶¨Î»´íÎó"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: ½»»»Îļþ¶ÁÈ¡´íÎó"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: ½»»»ÎļþдÈ붨λ´íÎó"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: ½»»»ÎļþдÈë´íÎó"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: ½»»»ÎļþÒÑ´æÔÚ (·ûºÅÁ¬½Ó¹¥»÷£¿)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: ÕÒ²»µ½¿é 0£¿"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: ÕÒ²»µ½¿é 1£¿"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: ÕÒ²»µ½¿é 2£¿"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: àÞ£¬½»»»Îļþ²»¼ûÁË£¡£¡£¡"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: ÎÞ·¨ÖØÃüÃû½»»»Îļþ"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: ÎÞ·¨´ò¿ª \"%s\" µÄ½»»»Îļþ£¬»Ö¸´½«²»¿ÉÄÜ"
-
-#: ../memline.c:666
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_upd_block0(): ÕÒ²»µ½¿é 0£¿"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: ÕÒ²»µ½ %s µÄ½»»»Îļþ"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "ÇëÊäÈëҪʹÓõĽ»»»Îļþ±àºÅ (0 Í˳ö): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: ÎÞ·¨´ò¿ª %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "ÎÞ·¨¶ÁÈ¡¿é 0: "
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"¿ÉÄÜÄãû×ö¹ýÈκÎÐ޸ĻòÊÇ Vim »¹À´²»¼°¸üн»»»Îļþ¡£"
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " ²»ÄÜÔڸð汾µÄ Vim ÖÐʹÓá£\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "ʹÓà Vim 3.0¡£\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s ¿´ÆðÀ´²»ÏñÊÇ Vim ½»»»Îļþ"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " ²»ÄÜÔÚÕą̂µçÄÔÉÏʹÓá£\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "´ËÎļþ´´½¨ÓÚ "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-"£¬\n"
-"»òÊÇ´ËÎļþÒÑË𻵡£"
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "ʹÓý»»»Îļþ \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "ԭʼÎļþ \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: ¾¯¸æ: ԭʼÎļþ¿ÉÄÜÒѱ»ÐÞ¸Ä"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: ÎÞ·¨´Ó %s ¶ÁÈ¡¿é 1"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1065
-#, fuzzy
-msgid "???MANY LINES MISSING"
-msgstr "???ȱÉÙÁËÌ«¶àÐÐ"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1076
-#, fuzzy
-msgid "???LINE COUNT WRONG"
-msgstr "???ÐÐÊý´íÎó"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1082
-#, fuzzy
-msgid "???EMPTY BLOCK"
-msgstr "???¿ÕµÄ¿é"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1103
-#, fuzzy
-msgid "???LINES MISSING"
-msgstr "???ȱÉÙÁËһЩÐÐ"
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: ¿é 1 ID ´íÎó (%s ²»Êǽ»»»Îļþ£¿)"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1133
-#, fuzzy
-msgid "???BLOCK MISSING"
-msgstr "???ȱÉÙ¿é"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1147
-#, fuzzy
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ´ÓÕâÀïµ½ ???END µÄÐпÉÄÜÒÑ»ìÂÒ"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1164
-#, fuzzy
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ´ÓÕâÀïµ½ ???END µÄÐпÉÄÜÒѱ»²åÈë/ɾ³ý¹ý"
-
-# do not translate to avoid writing Chinese in files
-#: ../memline.c:1181
-#, fuzzy
-msgid "???END"
-msgstr "???END"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: »Ö¸´Òѱ»ÖжÏ"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: »Ö¸´Ê±·¢Éú´íÎó£»Çë×¢Ò⿪ͷΪ ??? µÄÐÐ"
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "¸ü¶àÐÅÏ¢Çë¼û \":help E312\""
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "»Ö¸´Íê±Ï¡£ÇëÈ·¶¨Ò»ÇÐÕý³£¡£"
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(Äã¿ÉÄÜÏëÒª½«Õâ¸öÎļþÁí´æÎª±ðµÄÎļþÃû\n"
-
-#: ../memline.c:1252
-#, fuzzy
-msgid "and run diff with the original file to check for changes)"
-msgstr "ÔÙÔËÐÐ diff ÓëÔ­Îļþ±È½ÏÒÔ¼ì²éÊÇ·ñÓиıä)\n"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr ""
-
-#: ../memline.c:1255
-#, fuzzy
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"È»ºó°Ñ .swp Îļþɾµô¡£\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "ÕÒµ½½»»»Îļþ:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " λÓÚµ±Ç°Ä¿Â¼:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " ʹÓÃÖ¸¶¨µÄÃû×Ö:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " λÓÚĿ¼ "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- ÎÞ --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " ËùÓÐÕß: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " ÈÕÆÚ: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " ÈÕÆÚ: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [À´×Ô Vim °æ±¾ 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [²»ÏñÊÇ Vim ½»»»Îļþ]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " ÎļþÃû: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" Ð޸Ĺý: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "ÊÇ"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "·ñ"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" Óû§Ãû: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " Ö÷»úÃû: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" Ö÷»úÃû: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" ½ø³Ì ID: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (ÈÔÔÚÔËÐÐ)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [²»ÄÜÔÚ±¾»úÉÏʹÓÃ]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [ÎÞ·¨¶ÁÈ¡]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [ÎÞ·¨´ò¿ª]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: ÎÞ·¨±£Áô£¬Ã»Óн»»»Îļþ"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "ÎļþÒѱ£Áô"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: ±£Áôʧ°Ü"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: ÎÞЧµÄ lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: ÕÒ²»µ½µÚ %<PRId64> ÐÐ"
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx Ó¦¸ÃÊÇ 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: ¸üÐÂÁËÌ«¶àµÄ¿é£¿"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "ɾ³ýÁË¿é 1£¿"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: ÕÒ²»µ½µÚ %<PRId64> ÐÐ"
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: Ö¸Õë¿é id ´íÎó"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count ΪÁã"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: Ðкų¬³ö·¶Î§: %<PRId64> ³¬³ö½áβ"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: ¿é %<PRId64> ÐÐÊý´íÎó"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "¶ÑÕ»´óСÔö¼Ó"
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: Ö¸Õë¿é id ´íÎó 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr "E773: \"%s\" ·ûºÅÁ¬½Ó³öÏÖÑ­»·"
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ×¢Òâ"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"·¢ÏÖ½»»»Îļþ \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "ÕýÔÚ´ò¿ªÎļþ \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " ±È½»»»ÎļþУ¡\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) ÁíÒ»¸ö³ÌÐò¿ÉÄÜÒ²Ôڱ༭ͬһ¸öÎļþ¡£\n"
-" Èç¹ûÊÇÕâÑù£¬ÐÞ¸ÄʱÇë×¢Òâ±ÜÃâͬһ¸öÎļþ²úÉúÁ½¸ö²»Í¬µÄ°æ±¾¡£\n"
-"\n"
-
-#: ../memline.c:3245
-#, fuzzy
-msgid " Quit, or continue with caution.\n"
-msgstr " Í˳ö£¬»òСÐĵؼÌÐø¡£\n"
-
-#: ../memline.c:3246
-#, fuzzy
-msgid "(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) Éϴα༭´ËÎļþʱ±ÀÀ£¡£\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " Èç¹ûÊÇÕâÑù£¬ÇëÓà \":recover\" »ò \"vim -r "
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" »Ö¸´Ð޸ĵÄÄÚÈÝ (Çë¼û \":help recovery\")¡£\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " Èç¹ûÄãÒѾ­½øÐÐÁ˻ָ´£¬Çëɾ³ý½»»»Îļþ \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" ÒÔ±ÜÃâÔÙ¿´µ½´ËÏûÏ¢¡£\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "½»»»Îļþ \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ÒÑ´æÔÚ£¡"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - ×¢Òâ"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "½»»»ÎļþÒÑ´æÔÚ£¡"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"ÒÔÖ»¶Á·½Ê½´ò¿ª(&O)\n"
-"Ö±½Ó±à¼­(&E)\n"
-"»Ö¸´(&R)\n"
-"Í˳ö(&Q)\n"
-"ÖÐÖ¹(&A)"
-
-#: ../memline.c:3467
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"ÒÔÖ»¶Á·½Ê½´ò¿ª(&O)\n"
-"Ö±½Ó±à¼­(&E)\n"
-"»Ö¸´(&R)\n"
-"ɾ³ý½»»»Îļþ(&D)\n"
-"Í˳ö(&Q)\n"
-"ÖÐÖ¹(&A)"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: ÕÒµ½Ì«¶à½»»»Îļþ"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: ÄÚ´æ²»×㣡(·ÖÅä %<PRIu64> ×Ö½Ú)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ²Ëµ¥ÏîµÄij²¿·Ö·¾¶²»ÊÇ×Ӳ˵¥"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: ²Ëµ¥Ö»ÔÚÆäËüģʽÖдæÔÚ"
-
-#: ../menu.c:64
-#, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: ûÓв˵¥ \"%s\""
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-#, fuzzy
-msgid "E792: Empty menu name"
-msgstr "E749: ¿ÕµÄ»º³åÇø"
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ²Ëµ¥Â·¾¶²»ÄÜÖ¸Ïò×Ӳ˵¥"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ²»ÄܰѲ˵¥ÏîÖ±½Ó¼Óµ½²Ëµ¥À¸ÖÐ"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ·Ö¸ôÏß²»ÄÜÊDz˵¥Â·¾¶µÄÒ»²¿·Ö"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- ²Ëµ¥ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ²Ëµ¥Â·¾¶±ØÐëÖ¸Ïò²Ëµ¥Ïî"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: ÕÒ²»µ½²Ëµ¥: %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ģʽÖв˵¥Î´¶¨Òå"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ²Ëµ¥Â·¾¶±ØÐëÖ¸Ïò×Ӳ˵¥"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: ÕÒ²»µ½²Ëµ¥ - Çë¼ì²é²Ëµ¥Ãû³Æ"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "´¦Àí %s ʱ·¢Éú´íÎó:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "µÚ %4ld ÐÐ:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ÎÞЧµÄ¼Ä´æÆ÷Ãû: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr "¼òÌåÖÐÎÄÏûϢά»¤Õß: Yuheng Xie <elephant@linux.net.cn>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "ÒÑÖжÏ: "
-
-#: ../message.c:988
-msgid "Press ENTER or type command to continue"
-msgstr "Çë°´ ENTER »òÆäËüÃüÁî¼ÌÐø"
-
-#: ../message.c:1843
-#, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s µÚ %<PRId64> ÐÐ"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- ¸ü¶à --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr " ¿Õ¸ñ/d/j: ÆÁÄ»/Ò³/ÐÐ Ï·­£¬b/u/k: ÉÏ·­£¬q: Í˳ö "
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "ÎÊÌâ"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)\n"
-"È¡Ïû(&C)"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"ÊÇ(&Y)\n"
-"·ñ(&N)\n"
-"È«²¿±£´æ(&A)\n"
-"È«²¿¶ªÆú(&D)\n"
-"È¡Ïû(&C)"
-
-#: ../message.c:3058
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E766: printf() µÄ²ÎÊý²»×ã"
-
-#: ../message.c:3119
-#, fuzzy
-msgid "E807: Expected Float argument for printf()"
-msgstr "E766: printf() µÄ²ÎÊý²»×ã"
-
-#: ../message.c:3873
-msgid "E767: Too many arguments to printf()"
-msgstr "E767: printf() µÄ²ÎÊý¹ý¶à"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: ¾¯¸æ: ÕýÔÚÐÞ¸ÄÒ»¸öÖ»¶ÁÎļþ"
-
-#: ../misc1.c:2537
-#, fuzzy
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr "ÇëÊäÈëÊý×Ö»òµã»÷Êó±ê (<Enter> È¡Ïû): "
-
-#: ../misc1.c:2539
-#, fuzzy
-msgid "Type number and <Enter> (empty cancels): "
-msgstr "ÇëÑ¡ÔñÊý×Ö (<Enter> È¡Ïû): "
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "¶àÁË 1 ÐÐ"
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "ÉÙÁË 1 ÐÐ"
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "¶àÁË %<PRId64> ÐÐ"
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "ÉÙÁË %<PRId64> ÐÐ"
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (ÒÑÖжÏ)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr "Beep!"
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "µ÷ÓÃ shell Ö´ÐÐ: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: ¹â±ê´¦Ã»ÓÐʶ±ð×Ö"
-
-#: ../normal.c:1866
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E774: 'operatorfunc' Ϊ¿Õ"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "¾¯¸æ: ÄãµÄÖն˲»ÄÜÏÔʾ¸ßÁÁ"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: ¹â±ê´¦Ã»ÓÐ×Ö·û´®"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: ²»ÄÜÔÚµ±Ç°µÄ 'foldmethod' ÏÂɾ³ý fold"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: ¸Ä±äÁбíΪ¿Õ"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: ÒÑÔڸıäÁбíµÄ¿ªÊ¼´¦"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: ÒÑÔڸıäÁбíµÄĩβ´¦"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "ÊäÈë :quit<Enter> Í˳ö Vim"
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "1 ÐÐ %s ÁË 1 ´Î"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "1 ÐÐ %s ÁË %d ´Î"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> ÐÐ %s ÁË 1 ´Î"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> ÐÐ %s ÁË %d ´Î"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "Ëõ½ø %<PRId64> ÐС­¡­ "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "Ëõ½øÁË 1 ÐÐ "
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "Ëõ½øÁË %<PRId64> ÐÐ "
-
-#: ../ops.c:938
-msgid "E748: No previously used register"
-msgstr "E748: ûÓÐǰһ¸öʹÓõļĴæÆ÷"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "ÎÞ·¨¸´ÖÆ£»¸ÄΪɾ³ý"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr "¸Ä±äÁË 1 ÐÐ"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "¸Ä±äÁË %<PRId64> ÐÐ"
-
-#: ../ops.c:2521
-msgid "block of 1 line yanked"
-msgstr "¸´ÖÆÁË 1 ÐеĿé"
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "¸´ÖÆÁË 1 ÐÐ"
-
-#: ../ops.c:2525
-#, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "¸´ÖÆÁË %<PRId64> ÐеĿé"
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "¸´ÖÆÁË %<PRId64> ÐÐ"
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: ¼Ä´æÆ÷ %s ÀïûÓж«Î÷"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- ¼Ä´æÆ÷ ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "ÎÞЧµÄ¼Ä´æÆ÷Ãû"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# ¼Ä´æÆ÷:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: δ֪µÄ¼Ä´æÆ÷ÀàÐÍ %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> ÁÐ; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Ñ¡ÔñÁË %s%<PRId64>/%<PRId64> ÐÐ; %<PRId64>/%<PRId64> ¸ö´Ê; %<PRId64>/"
-"%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5105
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"Ñ¡ÔñÁË %s%<PRId64>/%<PRId64> ÐÐ; %<PRId64>/%<PRId64> ¸ö´Ê; %<PRId64>/"
-"%<PRId64> ¸ö×Ö·û; %<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"µÚ %s/%s ÁÐ; µÚ %<PRId64>/%<PRId64> ÐÐ; µÚ %<PRId64>/%<PRId64> ¸ö´Ê; µÚ "
-"%<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5133
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"µÚ %s/%s ÁÐ; µÚ %<PRId64>/%<PRId64> ÐÐ; µÚ %<PRId64>/%<PRId64> ¸ö´Ê; µÚ "
-"%<PRId64>/%<PRId64> ¸ö×Ö·û; µÚ %<PRId64>/%<PRId64> ¸ö×Ö½Ú"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr ""
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr ""
-
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "¸ÐлÄúÑ¡Ôñ Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: δ֪µÄÑ¡Ïî"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: ²»Ö§³Ö¸ÃÑ¡Ïî"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: ²»ÔÊÐíÔÚ modeline ÖÐʹÓÃ"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr ""
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Termcap ÀïÃæÕÒ²»µ½"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: ÎÞЧµÄ×Ö·û <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: ²»ÄÜÉ趨 'term' Ϊ¿Õ×Ö·û´®"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' ºÍ 'patchmode' ÏàµÈ"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr ""
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr ""
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: ȱÉÙðºÅ"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: ×Ö·û´®³¤¶ÈΪÁã"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> ºóÃæÈ±ÉÙÊý×Ö"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: ȱÉÙ¶ººÅ"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: ±ØÐëÖ¸¶¨Ò»¸ö ' Öµ"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: °üº¬²»¿ÉÏÔʾ×Ö·û»ò¿í×Ö·û"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: ÐèÒª¶ººÅ"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ±ØÐëΪ¿Õ»ò°üº¬ %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: ûÓнáÊøµÄ±í´ïʽÐòÁÐ"
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: ÏîÄ¿¹ý¶à"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: ´íÂÒµÄ×é"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: Ô¤ÀÀ´°¿ÚÒÑ´æÔÚ"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: Arabic ÐèÒª UTF-8£¬ÇëÖ´ÐÐ ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: ÖÁÉÙÐèÒª %d ÐÐ"
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: ÖÁÉÙÐèÒª %d ÁÐ"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: δ֪µÄÑ¡Ïî: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, fuzzy, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: = ºóÃæÐèÒªÊý×Ö"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- Öն˱àÂë ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- È«¾ÖÑ¡ÏîÖµ ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- ¾Ö²¿Ñ¡ÏîÖµ ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- Ñ¡Ïî ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp ´íÎó"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': ÕÒ²»µ½ %s ¶ÔÓ¦µÄ×Ö·û"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ·ÖºÅºóÓжàÓàµÄ×Ö·û: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"ÎÞ·¨Ö´ÐÐ shell"
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"Shell ÒÑ·µ»Ø"
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-
-# do not translate
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr "dlerror = \"%s\""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: ÔÚ·¾¶ÖÐÕÒ²»µ½Îļþ \"%s\""
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: ¸ñʽ»¯×Ö·û´®ÀïÓÐÌ«¶à %%%c "
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: ¸ñʽ»¯×Ö·û´®²»Ó¦¸Ã³öÏÖ %%%c "
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: ¸ñʽ»¯×Ö·û´®ÀïÉÙÁË ]"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: ¸ñʽ»¯×Ö·û´®ÀïÓв»Ö§³ÖµÄ %%%c "
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: ¸ñʽ»¯×Ö·û´®¿ªÍ·ÀïÓв»ÕýÈ·µÄ %%%c "
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: ¸ñʽ»¯×Ö·û´®ÀïÓв»ÕýÈ·µÄ %%%c "
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' δÉ趨"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: ÕÒ²»µ½Ä¿Â¼Ãû³Æ»òÊǿյÄĿ¼Ãû³Æ"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: ûÓиü¶àµÄÏî"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d / %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (ÐÐÒÑɾ³ý)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Quickfix ¶ÑÕ»µ×¶Ë"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Quickfix ¶ÑÕ»¶¥¶Ë"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "´íÎóÁбí %d / %d£»¹² %d ¸ö´íÎó"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: ÎÞ·¨Ð´È룬ÒÑÉ趨ѡÏî 'buftype'"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr "E683: ȱÉÙÎļþÃû»òģʽÎÞЧ"
-
-#: ../quickfix.c:2911
-#, c-format
-msgid "Cannot open file \"%s\""
-msgstr "ÎÞ·¨´ò¿ªÎļþ \"%s\""
-
-#: ../quickfix.c:3429
-msgid "E681: Buffer is not loaded"
-msgstr "E681: »º³åÇøÎ´¼ÓÔØ"
-
-#: ../quickfix.c:3487
-msgid "E777: String or List expected"
-msgstr "E777: ´Ë´¦ÐèÒª String »òÕß List"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: %s%%[] ÖÐÓÐÎÞЧµÄÏî"
-
-#: ../regexp.c:374
-#, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E769: %s[ ºóȱÉÙ ]"
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: ²»Æ¥ÅäµÄ %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: ²»Æ¥ÅäµÄ %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: ²»Æ¥ÅäµÄ %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: ´Ë´¦²»ÔÊÐí \\z("
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: ´Ë´¦²»ÔÊÐí \\z1 µÈ"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ ºóȱÉÙ ]"
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: ¿ÕµÄ %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: ģʽ̫³¤"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: Ì«¶à \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: Ì«¶à %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: ²»Æ¥ÅäµÄ \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: %s@ ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: Ì«¶à¸´Ô %s{...}s"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: ǶÌ×µÄ %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: ǶÌ×µÄ %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: ²»ÕýÈ·µØÊ¹Óà \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c Ç°ÃæÎÞÄÚÈÝ"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: ÎÞЧµÄ»ØÒý"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: \\z ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E678: %s%%[dxouU] ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: %s%% ºóÃæÓÐÎÞЧµÄ×Ö·û"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: %s{...} ÖÐÓï·¨´íÎó"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "Íⲿ·ûºÏ:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr ""
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr ""
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr ""
-
-#: ../regexp_nfa.c:2042
-#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E50: Ì«¶à \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr ""
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr ""
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr ""
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr ""
-
-#: ../regexp_nfa.c:6049
-#, fuzzy
-msgid "Could not open temporary log file for writing "
-msgstr "E214: ÕÒ²»µ½ÓÃÓÚдÈëµÄÁÙʱÎļþ"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " V-Ìæ»»"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " Ìæ»»"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ·´Ïò"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ²åÈë"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (²åÈë)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (Ìæ»»)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (V-Ìæ»»)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Hebrew"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Arabic"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (ÓïÑÔ)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (Õ³Ìû)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ¿ÉÊÓ"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " ¿ÉÊÓ ÐÐ"
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " ¿ÉÊÓ ¿é"
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " Ñ¡Ôñ"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " Ñ¡Ôñ ÐÐ"
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " Ñ¡Ôñ ¿é"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "¼Ç¼ÖÐ"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: ÎÞЧµÄ²éÕÒ×Ö·û´®: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ÒѲéÕÒµ½Îļþ¿ªÍ·ÈÔÕÒ²»µ½ %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ÒѲéÕÒµ½Îļþ½áβÈÔÕÒ²»µ½ %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ÔÚ ';' ºóÃæÓ¦¸ÃÓÐ '?' »ò '/'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (°üÀ¨ÉÏ´ÎÁгö·ûºÏÏî)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- °üº¬Îļþ "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "ÕÒ²»µ½ "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "ÔÚ·¾¶ ---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (ÒÑÁгö)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " ÕÒ²»µ½"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "²éÕÒ°üº¬Îļþ: %s"
-
-#: ../search.c:4216
-#, c-format
-msgid "Searching included file %s"
-msgstr "²éÕÒ°üº¬µÄÎļþ %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: µ±Ç°ÐÐÆ¥Åä"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "ËùÓаüº¬Îļþ¶¼ÒÑÕÒµ½"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "ûÓаüº¬Îļþ"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: ÕÒ²»µ½¶¨Òå"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: ÕÒ²»µ½ pattern"
-
-#: ../search.c:4668
-#, fuzzy
-msgid "Substitute "
-msgstr "1 ´ÎÌæ»»£¬"
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-
-#: ../spell.c:951
-msgid "E759: Format error in spell file"
-msgstr "E759: ƴдÎļþ¸ñʽ´íÎó"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr "E758: ÒÑ½Ø¶ÏµÄÆ´Ð´Îļþ"
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬¶àÓàµÄºóÐø×Ö·û: %s"
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬¸½¼ÓÏîÃû×ÖÌ«³¤: %s"
-
-#: ../spell.c:955
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: ¸½¼ÓÎļþ FOL¡¢LOW »ò UPP Öиñʽ´íÎó"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: FOL¡¢LOW »ò UPP ÖÐ×Ö·û³¬³ö·¶Î§"
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr "ѹËõµ¥´ÊÊ÷¡­¡­"
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr "E756: ƴд¼ì²éδÆôÓÃ"
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr "¾¯¸æ: ÕÒ²»µ½µ¥´ÊÁбí \"%s.%s.spl\" or \"%s.ascii.spl\""
-
-#: ../spell.c:2473
-#, c-format
-msgid "Reading spell file \"%s\""
-msgstr "¶ÁȡƴдÎļþ \"%s\""
-
-#: ../spell.c:2496
-msgid "E757: This does not look like a spell file"
-msgstr "E757: Õâ¿´ÆðÀ´²»ÏñÊÇÆ´Ð´Îļþ"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr "E771: ¾É°æ±¾µÄƴдÎļþ£¬ÐèÒª¸üÐÂ"
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr "E772: Ϊ¸ü¸ß°æ±¾µÄ Vim ËùÓÃµÄÆ´Ð´Îļþ"
-
-#: ../spell.c:2602
-msgid "E770: Unsupported section in spell file"
-msgstr "E770: ƴдÎļþÖдæÔÚ²»Ö§³ÖµÄ½Ú"
-
-#: ../spell.c:3762
-#, c-format
-msgid "Warning: region %s not supported"
-msgstr "¾¯¸æ: ÇøÓò %s ²»Ö§³Ö"
-
-#: ../spell.c:4550
-#, c-format
-msgid "Reading affix file %s ..."
-msgstr "¶ÁÈ¡¸½¼ÓÎļþ %s ¡­¡­"
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr "µ¥´Ê %s ת»»Ê§°Ü£¬µÚ %d ÐÐ: %s"
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr "²»Ö§³Ö %s ÖеÄת»»: ´Ó %s µ½ %s"
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬FLAG µÄÖµÎÞЧ: %s"
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÔÚʹÓñêÖ¾ºó³öÏÖ FLAG: %s"
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4747
-#, fuzzy, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDMIN Öµ: %s"
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDWORDMAX Öµ: %s"
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDMIN Öµ: %s"
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ COMPOUNDSYLMAX Öµ: %s"
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄ CHECKCOMPOUNDPATTERN Öµ: %s"
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÔÚÁ¬ÐøµÄ¸½¼Ó¿éÖгöÏÖ²»Í¬µÄ×éºÏ±êÖ¾: %s"
-
-#: ../spell.c:4850
-#, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ¸½¼ÓÏî: %s"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-"%s µÚ %d ÐУ¬¸½¼ÓÏî±» BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST ʹ"
-"ÓÃ: %s"
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª Y »ò N: %s"
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬´íÎóµÄÌõ¼þ: %s"
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª REP(SAL) ¼ÆÊý"
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr "%s µÚ %d ÐУ¬´Ë´¦ÐèÒª MAP ¼ÆÊý"
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr "%s µÚ %d ÐУ¬MAP ÖдæÔÚÖØ¸´µÄ×Ö·û"
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞ·¨Ê¶±ð»òÖØ¸´µÄÏî: %s"
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "%s ÖÐȱÉÙ FOL/LOW/UPP ÐÐ"
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr "ÔÚûÓÐ SYLLABLE µÄÇé¿öÏÂʹÓÃÁË COMPOUNDSYLMAX"
-
-#: ../spell.c:5236
-msgid "Too many postponed prefixes"
-msgstr "Ì«¶àÑÓ³Ùǰ׺"
-
-#: ../spell.c:5238
-msgid "Too many compound flags"
-msgstr "Ì«¶à×éºÏ±êÖ¾"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr "Ì«¶àÑÓ³Ùǰ׺ºÍ/»ò×éºÏ±êÖ¾"
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr "%s ÖÐȱÉÙ SOFO%s ÐÐ"
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr "%s ͬʱ³öÏÖ SQL ºÍ SOFO ÐÐ"
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬±êÖ¾²»ÊÇÊý×Ö: %s"
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞЧµÄ±êÖ¾: %s"
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr "%s µÄÖµÓëÁíÒ»¸ö .aff ÎļþÖÐʹÓõÄÖµ²»Ïàͬ"
-
-#: ../spell.c:5602
-#, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "¶ÁÈ¡×ÖµäÎļþ %s ¡­¡­"
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr "E760: %s ÖÐûÓе¥´Ê¼ÆÊý"
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr "µÚ %6d ÐУ¬µÚ %6d ¸öµ¥´Ê - %s"
-
-#: ../spell.c:5691
-#, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄµ¥´Ê: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Ê×´ÎÖØ¸´µÄµ¥´Ê: %s"
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr "´æÔÚ %d ¸öÖØ¸´µÄµ¥´Ê£¬ÔÚ %s ÖÐ"
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr "ºöÂÔÁ˺¬ÓÐ·Ç ASCII ×Ö·ûµÄ %d ¸öµ¥´Ê£¬ÔÚ %s ÖÐ"
-
-#: ../spell.c:6115
-#, c-format
-msgid "Reading word file %s ..."
-msgstr "¶ÁÈ¡µ¥´ÊÎļþ %s ¡­¡­"
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬µ¥´ÊºóµÄ /encoding= ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ /regions= ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬Ì«¶àÇøÓò: %s"
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬/ ÐÐÒѱ»ºöÂÔ: %s"
-
-#: ../spell.c:6224
-#, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬ÎÞЧµÄÇøÓòºÅ: %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr "%s µÚ %d ÐУ¬²»¿Éʶ±ðµÄ±êÖ¾: %s"
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "ºöÂÔÁ˺¬ÓÐ·Ç ASCII ×Ö·ûµÄ %d ¸öµ¥´Ê"
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr "ѹËõÁË %d/%d ¸ö½Úµã£»Ê£Óà %d (%d%%)"
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr "¶ÁȡƴдÎļþ¡­¡­"
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr "ÕýÔÚ soundfolding¡­¡­"
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr "soundfolding ºóµÄµ¥´ÊÊý: %<PRId64>"
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr "µ¥´Ê×ÜÊý: %d"
-
-#: ../spell.c:7655
-#, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "дÈ뽨ÒéÎļþ %s ¡­¡­"
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr "¹À¼ÆÔËÐÐʱÄÚ´æÓÃÁ¿: %d ×Ö½Ú"
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr "E751: Êä³öÎļþÃû²»Äܺ¬ÓÐÇøÓòÃû"
-
-#: ../spell.c:7822
-msgid "E754: Only up to 8 regions supported"
-msgstr "E754: ×î¶àÖ»Ö§³Ö 8 ¸öÇøÓò"
-
-#: ../spell.c:7846
-#, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E755: %s ³öÏÖÎÞЧµÄ·¶Î§"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr "¾¯¸æ: ͬʱָ¶¨ÁË compounding ºÍ NOBREAK"
-
-#: ../spell.c:7920
-#, c-format
-msgid "Writing spell file %s ..."
-msgstr "дÈëÆ´Ð´Îļþ %s ¡­¡­"
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr "Íê³É£¡"
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr "E765: 'spellfile' ûÓÐ %<PRId64> Ïî"
-
-#: ../spell.c:8074
-#, fuzzy, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr "´Ó %s ÖÐɾ³ýÁ˵¥´Ê"
-
-#: ../spell.c:8117
-#, fuzzy, c-format
-msgid "Word '%.*s' added to %s"
-msgstr "Ïò %s ÖÐÌí¼ÓÁ˵¥´Ê"
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr "E763: ƴдÎļþÖ®¼äµÄ×Ö·û²»Ïàͬ"
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr "±§Ç¸£¬Ã»Óн¨Òé"
-
-#: ../spell.c:8687
-#, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "±§Ç¸£¬Ö»ÓÐ %<PRId64> Ìõ½¨Òé"
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "½« \"%.*s\" ¸ÄΪ£º"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr " < \"%.*s\""
-
-#: ../spell.c:8882
-msgid "E752: No previous spell replacement"
-msgstr "E752: ֮ǰûÓÐÆ´Ð´Ìæ»»"
-
-#: ../spell.c:8925
-#, c-format
-msgid "E753: Not found: %s"
-msgstr "E753: ÕÒ²»µ½: %s"
-
-#: ../spell.c:9276
-#, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E778: ¿´ÆðÀ´²»ÏñÊÇ .sug Îļþ: %s"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr ""
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr ""
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr ""
-
-#: ../spell.c:9305
-#, fuzzy, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E47: ¶ÁÈ¡´íÎóÎļþʧ°Ü"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr ""
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "Õâ¸ö»º³åÇøÃ»Óж¨ÒåÈκÎÓï·¨Ïî"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "C·ç¸ñ×¢ÊÍͬ²½ÖÐ"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "ûÓÐͬ²½"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "ͬ²½¿ªÊ¼"
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr "Ðкų¬³ö·¶Î§"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- Ó﷨ͬ²½ÏîÄ¿ (Syntax sync items) ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"ͬ²½ÖÐ:"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- Óï·¨ÏîÄ¿ ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "×îС"
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "×î´ó"
-
-#: ../syntax.c:3513
-#, fuzzy
-msgid "; match "
-msgstr "Æ¥Åä %d"
-
-#: ../syntax.c:3515
-#, fuzzy
-msgid " line breaks"
-msgstr "ÉÙÓÚÒ»ÐÐ"
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#: ../syntax.c:4096
-#, fuzzy
-msgid "E844: invalid cchar value"
-msgstr "E474: ÎÞЧµÄ²ÎÊý"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: ÕÒ²»µ½ %s µÄ region item"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: ÐèÒªÎļþÃû³Æ"
-
-#: ../syntax.c:4221
-#, fuzzy
-msgid "E847: Too many syntax includes"
-msgstr "E77: ÎļþÃû¹ý¶à"
-
-#: ../syntax.c:4303
-#, fuzzy, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E747: ȱÉÙ ']': %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: ȱÉÙ '=': %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: syntax region %s µÄ²ÎÊýÌ«ÉÙ"
-
-#: ../syntax.c:4870
-#, fuzzy
-msgid "E848: Too many syntax clusters"
-msgstr "E391: ÎÞ´ËÓï·¨ cluster: \"%s\""
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: ûÓÐÖ¸¶¨µÄÊôÐÔ"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: ÕÒ²»µ½·Ö¸ô·ûºÅ: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: '%s' ºóÃæµÄ¶«Î÷²»ÄÜʶ±ð"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: Ó﷨ͬ²½: Á¬½ÓÐзûºÅÖ¸¶¨ÁËÁ½´Î"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: ȱÉٵȺÅ: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: ¿ÕµÄ²ÎÊý: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s ²»ÄÜÔڴ˳öÏÖ"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ±ØÐëÊÇÁбíÀïµÄµÚÒ»¸ö"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: ²»ÕýÈ·µÄ×éÃû: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: ²»ÕýÈ·µÄ :syntax ×ÓÃüÁî: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr "E679: ¼ÓÔØ syncolor.vim ʱ³öÏÖǶÌ×Ñ­»·"
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: ÕÒ²»µ½ highlight group: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: ²ÎÊýÌ«ÉÙ: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: ²ÎÊý¹ý¶à: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: ÒÑÉ趨×é, ºöÂÔ highlight link"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: ²»¸ÃÓеĵȺÅ: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: ȱÉٵȺÅ: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: ȱÉÙ²ÎÊý: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: ²»ºÏ·¨µÄÖµ: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: ´íÎóµÄǰ¾°ÑÕÉ«"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: ´íÎóµÄ±³¾°ÑÕÉ«"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: ´íÎóµÄÑÕÉ«Ãû³Æ»òÊýÖµ: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: Öն˱àÂëÌ«³¤: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: ÎÞЧµÄ²ÎÊý: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ʹÓÃÁËÌ«¶à²»Í¬µÄ¸ßÁÁ¶ÈÊôÐÔ"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: ×éÃûÖдæÔÚ²»¿ÉÏÔʾ×Ö·û"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: ×éÃûÖк¬ÓÐÎÞЧ×Ö·û"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr ""
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ÒÑÔÚ tag ¶ÑÕ»µ×²¿"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: ÒÑÔÚ tag ¶ÑÕ»¶¥²¿"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: Òѵ½µÚÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: ÕÒ²»µ½ tag: %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri kind tag"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "Îļþ\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: Ö»ÓÐÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ¼ºµ½×îºóÒ»¸öÆ¥ÅäµÄ tag"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "Îļþ \"%s\" ²»´æÔÚ"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "ÕÒµ½ tag: %d / %d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " »ò¸ü¶à"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " ÒÔ²»Í¬´óСдÀ´Ê¹Óà tag£¡"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: Îļþ \"%s\" ²»´æÔÚ"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # µ½ tag ´Ó ÐÐ ÔÚ Îļþ/Îı¾"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "²éÕÒ tag Îļþ %s"
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr ""
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Tag Îļþ \"%s\" ¸ñʽ´íÎó"
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "ÔÚµÚ %<PRId64> ×Ö½Ú֮ǰ"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Tag ÎļþδÅÅÐò: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: ûÓÐ tag Îļþ"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: ÕÒ²»µ½ tag ģʽ"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: ÕÒ²»µ½ tag£¬ÊÔ×Ų£¡"
-
-#: ../tag.c:2797
-#, fuzzy, c-format
-msgid "Duplicate field name: %s"
-msgstr "%s µÚ %d ÐУ¬Öظ´µÄ¸½¼ÓÏî: %s"
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' δ֪¡£¿ÉÓõÄÄÚ½¨ÖÕ¶ËÓÐ:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "ĬÈÏֵΪ: '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: ÎÞ·¨´ò¿ª termcap Îļþ"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: ÔÚ terminfo ÖÐÕÒ²»µ½ÖÕ¶ËÏî"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: ÔÚ termcap ÖÐÕÒ²»µ½ÖÕ¶ËÏî"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap ÖÐûÓÐ \"%s\" Ïî"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ÖÕ¶ËÐèÒªÄÜÁ¦ \"cm\""
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- Öն˰´¼ü ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: ¶Á´íÎó£¬Í˳öÖÐ...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-#, fuzzy
-msgid "E881: Line count changed unexpectedly"
-msgstr "E787: ÒâÍâµØ¸Ä±äÁË»º³åÇø"
-
-#: ../undo.c:627
-#, fuzzy, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E212: ÎÞ·¨´ò¿ª²¢Ð´ÈëÎļþ"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr ""
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr ""
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr ""
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr ""
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr ""
-
-#: ../undo.c:1121
-#, fuzzy, c-format
-msgid "Writing undo file: %s"
-msgstr "дÈë viminfo Îļþ \"%s\""
-
-#: ../undo.c:1213
-#, fuzzy, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E297: ½»»»ÎļþдÈë´íÎó"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr ""
-
-#: ../undo.c:1292
-#, fuzzy, c-format
-msgid "Reading undo file: %s"
-msgstr "¶ÁÈ¡µ¥´ÊÎļþ %s ¡­¡­"
-
-#: ../undo.c:1299
-#, fuzzy, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E195: ÎÞ·¨´ò¿ª²¢¶ÁÈ¡ viminfo Îļþ"
-
-#: ../undo.c:1308
-#, fuzzy, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E753: ÕÒ²»µ½: %s"
-
-#: ../undo.c:1313
-#, fuzzy, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E484: ÎÞ·¨´ò¿ªÎļþ %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr ""
-
-#: ../undo.c:1497
-#, fuzzy, c-format
-msgid "Finished reading undo file %s"
-msgstr "½áÊøÖ´ÐÐ %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr "ÒÑλÓÚ×î¾ÉµÄ¸Ä±ä"
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr "ÒÑλÓÚ×îеĸıä"
-
-#: ../undo.c:1806
-#, fuzzy, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "ÕÒ²»µ½³·ÏúºÅ %<PRId64>"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: ÐкŴíÎó"
-
-#: ../undo.c:2183
-msgid "more line"
-msgstr "Ðб»¼ÓÈë"
-
-#: ../undo.c:2185
-msgid "more lines"
-msgstr "Ðб»¼ÓÈë"
-
-#: ../undo.c:2187
-msgid "line less"
-msgstr "Ðб»È¥µô"
-
-#: ../undo.c:2189
-msgid "fewer lines"
-msgstr "Ðб»È¥µô"
-
-#: ../undo.c:2193
-msgid "change"
-msgstr "Ðз¢Éú¸Ä±ä"
-
-#: ../undo.c:2195
-msgid "changes"
-msgstr "Ðз¢Éú¸Ä±ä"
-
-#: ../undo.c:2225
-#, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> %s£»%s #%<PRId64> %s"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr "before"
-
-#: ../undo.c:2228
-msgid "after"
-msgstr "after"
-
-#: ../undo.c:2325
-msgid "Nothing to undo"
-msgstr "Î޿ɳ·Ïú"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr ""
-
-#: ../undo.c:2360
-#, fuzzy, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> ÁÐ; "
-
-#: ../undo.c:2372
-#, fuzzy
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E407: %s ²»ÄÜÔڴ˳öÏÖ"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: ³·ÏúÁбíËð»µ"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: ÕÒ²»µ½Òª³·ÏúµÄÐÐ"
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"°üº¬²¹¶¡: "
-
-#: ../version.c:627
-#, fuzzy
-msgid ""
-"\n"
-"Extra patches: "
-msgstr "Íⲿ·ûºÏ:\n"
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "ÐÞ¸ÄÕß "
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"±àÒë"
-
-#: ../version.c:649
-msgid "by "
-msgstr "Õß "
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"¾ÞÐͰ汾 "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "ÎÞͼÐνçÃæ¡£"
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " ¿ÉʹÓÃ(+)Óë²»¿ÉʹÓÃ(-)µÄ¹¦ÄÜ:\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ϵͳ vimrc Îļþ: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " Óû§ vimrc Îļþ: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " µÚ¶þÓû§ vimrc Îļþ: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " µÚÈýÓû§ vimrc Îļþ: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " Óû§ exrc Îļþ: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " µÚ¶þÓû§ exrc Îļþ: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " $VIM Ô¤ÉèÖµ: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " $VIMRUNTIME Ô¤ÉèÖµ: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "±àÒ뷽ʽ: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Á´½Ó·½Ê½: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " µ÷ÊÔ°æ±¾"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi IMproved"
-
-#: ../version.c:769
-msgid "version "
-msgstr "°æ±¾ "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "ά»¤ÈË Bram Moolenaar µÈ"
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim ÊÇ¿É×ÔÓÉ·Ö·¢µÄ¿ª·ÅÔ´´úÂëÈí¼þ"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "°ïÖúÎڸɴïµÄ¿ÉÁ¯¶ùͯ£¡"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "ÊäÈë :help iccf<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "ÊäÈë :q<Enter> Í˳ö "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "ÊäÈë :help<Enter> »ò <F1> ²é¿´ÔÚÏß°ïÖú "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "ÊäÈë :help version7<Enter> ²é¿´°æ±¾ÐÅÏ¢ "
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "ÔËÐÐÓÚ Vi ¼æÈÝģʽ"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "ÊäÈë :set nocp<Enter> »Ö¸´Ä¬È쵀 Vim "
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "ÊäÈë :help cp-default<Enter> ²é¿´Ïà¹ØËµÃ÷ "
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "ÔÞÖú Vim µÄ¿ª·¢£¡"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "³ÉΪ Vim µÄ×¢²áÓû§£¡"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "ÊäÈë :help sponsor<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "ÊäÈë :help register<Enter> ²é¿´ËµÃ÷ "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "²Ëµ¥ Help->Sponsor/Register ²é¿´ËµÃ÷ "
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "ÒѾ­Ö»Ê£Ò»¸ö´°¿ÚÁË"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: ûÓÐÔ¤ÀÀ´°¿Ú"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ²»ÄÜͬʱ½øÐÐ topleft ºÍ botright ·Ö¸î"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ÓÐÆäËü·Ö¸î´°¿Úʱ²»ÄÜÐýת"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:1810
-#, fuzzy
-msgid "E813: Cannot close autocmd window"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:1814
-#, fuzzy
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E444: ²»ÄܹرÕ×îºóÒ»¸ö´°¿Ú"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: ÆäËü´°¿ÚÓиıäµÄÄÚÈÝ"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: ¹â±ê´¦Ã»ÓÐÎļþÃû"
-
-#~ msgid "Patch file"
-#~ msgstr "Patch Îļþ"
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "È·¶¨(&O)\n"
-#~ "È¡Ïû(&C)"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: ûÓе½ Vim ·þÎñÆ÷µÄÁ¬½Ó"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: ÎÞ·¨·¢Ë͵½ %s"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: ÎÞ·¨¶ÁÈ¡·þÎñÆ÷ÏìÓ¦"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: ÎÞ·¨·¢Ë͵½¿Í»§¶Ë"
-
-#~ msgid "Save As"
-#~ msgstr "Áí´æÎª"
-
-#~ msgid "Edit File"
-#~ msgstr "±à¼­Îļþ"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (ÕÒ²»µ½)"
-
-#~ msgid "Source Vim script"
-#~ msgstr "Ö´ÐÐ Vim ½Å±¾"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "ÔÚд°¿Ú±à¼­Îļþ"
-
-#~ msgid "Append File"
-#~ msgstr "×·¼ÓÎļþ"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "´°¿ÚλÖÃ: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "±£´æÖض¨Ïò"
-
-#~ msgid "Save View"
-#~ msgstr "±£´æÊÓͼ"
-
-#~ msgid "Save Session"
-#~ msgstr "±£´æ»á»°"
-
-#~ msgid "Save Setup"
-#~ msgstr "±£´æÉ趨"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: ´Ë°æ±¾ÎÞ¸´ºÏ×Ö·û(digraph)"
-
-#~ msgid "Reading from stdin..."
-#~ msgstr "´Ó±ê×¼ÊäÈë¶ÁÈ¡..."
-
-#~ msgid "[NL found]"
-#~ msgstr "[ÕÒµ½ NL]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[ÒѼÓÃÜ]"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans ²»ÔÊÐíδÐ޸ĵĻº³åÇøÐ´Èë"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "NetBeans ²»ÔÊÐí»º³åÇø²¿·ÖдÈë"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Resource fork »á¶ªÊ§ (Çë¼Ó ! Ç¿ÖÆÖ´ÐÐ)"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: ÎÞ·¨Æô¶¯Í¼ÐνçÃæ"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: ÎÞ·¨¶ÁÈ¡Îļþ \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: ÎÞ·¨Æô¶¯Í¼ÐνçÃæ£¬ÕÒ²»µ½ÓÐЧµÄ×ÖÌå"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: ÎÞЧµÄ 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' µÄÖµÎÞЧ"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: ÎÞ·¨·ÖÅäÑÕÉ« %s"
-
-#~ msgid "No match at cursor, finding next"
-#~ msgstr "ÔÚ¹â±ê´¦Ã»ÓÐÆ¥Å䣬²éÕÒÏÂÒ»¸ö"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<ÎÞ·¨´ò¿ª>"
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: ÎÞ·¨»ñÈ¡×ÖÌå %s"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: ÎÞ·¨·µ»Øµ±Ç°Ä¿Â¼"
-
-#~ msgid "Pathname:"
-#~ msgstr "·¾¶:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: ÎÞ·¨»ñÈ¡µ±Ç°Ä¿Â¼"
-
-#~ msgid "OK"
-#~ msgstr "È·¶¨"
-
-#~ msgid "Cancel"
-#~ msgstr "È¡Ïû"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "¹ö¶¯Ìõ²¿¼þ: ÎÞ·¨»ñÈ¡»¬¿éͼÏñµÄ¼¸ºÎ´óС"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Vim ¶Ô»°¿ò"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: ²»ÄÜͬʱʹÓÃÏûÏ¢ºÍ»Øµ÷º¯ÊýÀ´´´½¨ BalloonEval"
-
-#~ msgid "Vim dialog..."
-#~ msgstr "Vim ¶Ô»°¿ò..."
-
-#~ msgid "Input _Methods"
-#~ msgstr "ÊäÈë·¨(_M)"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - ²éÕÒºÍÌæ»»..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - ²éÕÒ..."
-
-#~ msgid "Find what:"
-#~ msgstr "²éÕÒÄÚÈÝ:"
-
-#~ msgid "Replace with:"
-#~ msgstr "Ìæ»»Îª:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "Æ¥ÅäÍêÕûµÄ´Ê"
-
-#~ msgid "Match case"
-#~ msgstr "Æ¥Åä´óСд"
-
-#~ msgid "Direction"
-#~ msgstr "·½Ïò"
-
-#~ msgid "Up"
-#~ msgstr "ÏòÉÏ"
-
-#~ msgid "Down"
-#~ msgstr "ÏòÏÂ"
-
-#~ msgid "Find Next"
-#~ msgstr "²éÕÒÏÂÒ»¸ö"
-
-#~ msgid "Replace"
-#~ msgstr "Ìæ»»"
-
-#~ msgid "Replace All"
-#~ msgstr "È«²¿Ìæ»»"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: ´Ó»á»°¹ÜÀíÆ÷ÊÕµ½ \"die\" ÇëÇó\n"
-
-#~ msgid "Close"
-#~ msgstr "¹Ø±Õ"
-
-#~ msgid "New tab"
-#~ msgstr "н¨±êÇ©"
-
-#~ msgid "Open Tab..."
-#~ msgstr "´ò¿ª±êÇ©..."
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: Ö÷´°¿Ú±»ÒâÍâµØ´Ý»Ù\n"
-
-#~ msgid "Font Selection"
-#~ msgstr "Ñ¡Ôñ×ÖÌå"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "ʹÓà CUT_BUFFER0 À´È¡´ú¿ÕÑ¡Ôñ"
-
-#~ msgid "&Filter"
-#~ msgstr "¹ýÂË(&F)"
-
-#~ msgid "&Cancel"
-#~ msgstr "È¡Ïû(&C)"
-
-#~ msgid "Directories"
-#~ msgstr "Ŀ¼"
-
-#~ msgid "Filter"
-#~ msgstr "¹ýÂËÆ÷"
-
-#~ msgid "&Help"
-#~ msgstr "°ïÖú(&H)"
-
-#~ msgid "Files"
-#~ msgstr "Îļþ"
-
-#~ msgid "&OK"
-#~ msgstr "È·¶¨(&O)"
-
-#~ msgid "Selection"
-#~ msgstr "Ñ¡Ôñ"
-
-#~ msgid "Find &Next"
-#~ msgstr "²éÕÒÏÂÒ»¸ö(&N)"
-
-#~ msgid "&Replace"
-#~ msgstr "Ìæ»»(&R)"
-
-#~ msgid "Replace &All"
-#~ msgstr "È«²¿Ìæ»»(&A)"
-
-#~ msgid "&Undo"
-#~ msgstr "³·Ïú(&U)"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: ÕÒ²»µ½´°¿Ú±êÌâ \"%s\""
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: ²»Ö§³ÖµÄ²ÎÊý: \"-%s\"£»ÇëʹÓà OLE °æ±¾¡£"
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: ÎÞ·¨ÔÚ MDI Ó¦ÓóÌÐòÖдò¿ª´°¿Ú"
-
-#~ msgid "Close tab"
-#~ msgstr "¹Ø±Õ±êÇ©"
-
-#~ msgid "Open tab..."
-#~ msgstr "´ò¿ª±êÇ©..."
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "²éÕÒ×Ö·û´® (ʹÓà '\\\\' À´²éÕÒ '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "²éÕÒºÍÌæ»»×Ö·û´® (ʹÓà '\\\\' À´²éÕÒ '\\')"
-
-#~ msgid "Not Used"
-#~ msgstr "δʹÓÃ"
-
-#~ msgid "Directory\t*.nothing\n"
-#~ msgstr "Ŀ¼\t*.nothing\n"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr "Vim E458: ÎÞ·¨·ÖÅäÑÕÉ«±íÏijЩÑÕÉ«¿ÉÄܲ»ÕýÈ·"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Fontset %s ȱÉÙÏÂÁÐ×Ö·û¼¯µÄ×ÖÌå:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: Fontset Ãû³Æ: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "'%s' ²»Êǹ̶¨¿í¶ÈµÄ×ÖÌå"
-
-#~ msgid "E253: Fontset name: %s\n"
-#~ msgstr "E253: Fontset Ãû³Æ: %s\n"
-
-#~ msgid "Font0: %s\n"
-#~ msgstr "×ÖÌå0: %s\n"
-
-#~ msgid "Font1: %s\n"
-#~ msgstr "×ÖÌå1: %s\n"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0\n"
-#~ msgstr "×ÖÌå%<PRId64>µÄ¿í¶È²»ÊÇ×ÖÌå0µÄÁ½±¶\n"
-
-#~ msgid "Font0 width: %<PRId64>\n"
-#~ msgstr "×ÖÌå0µÄ¿í¶È£º%<PRId64>\n"
-
-#~ msgid ""
-#~ "Font1 width: %<PRId64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "×ÖÌå1µÄ¿í¶È: %<PRId64>\n"
-#~ "\n"
-
-#~ msgid "Invalid font specification"
-#~ msgstr "Ö¸¶¨ÁËÎÞЧµÄ×ÖÌå"
-
-#~ msgid "&Dismiss"
-#~ msgstr "È¡Ïû(&D)"
-
-#~ msgid "no specific match"
-#~ msgstr "ÕÒ²»µ½Æ¥ÅäµÄÏî"
-
-#~ msgid "Vim - Font Selector"
-#~ msgstr "Vim - ×ÖÌåÑ¡ÔñÆ÷"
-
-#~ msgid "Name:"
-#~ msgstr "Ãû³Æ:"
-
-#~ msgid "Encoding:"
-#~ msgstr "±àÂë:"
-
-#~ msgid "Font:"
-#~ msgstr "×ÖÌå:"
-
-#~ msgid "Style:"
-#~ msgstr "·ç¸ñ:"
-
-#~ msgid "Size:"
-#~ msgstr "³ß´ç:"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Hangul automata ´íÎó"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat ´íÎó"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: ÎÞ·¨´ò¿ª cscope Êý¾Ý¿â: %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: ÎÞ·¨»ñÈ¡ cscope Êý¾Ý¿âÐÅÏ¢"
-
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ÒÑ´ïµ½ cscope µÄ×î´óÁ¬½ÓÊý"
-
-#~ msgid ""
-#~ "???: Sorry, this command is disabled, the MzScheme library could not be "
-#~ "loaded."
-#~ msgstr "???: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ MzScheme ¿â"
-
-#~ msgid "invalid expression"
-#~ msgstr "ÎÞЧµÄ±í´ïʽ"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "±àÒëʱûÓÐÆôÓñí´ïʽ"
-
-#~ msgid "hidden option"
-#~ msgstr "Òþ²ØµÄÑ¡Ïî"
-
-#~ msgid "unknown option"
-#~ msgstr "δ֪µÄÑ¡Ïî"
-
-#~ msgid "window index is out of range"
-#~ msgstr "´°¿ÚË÷Òý³¬³ö·¶Î§"
-
-#~ msgid "couldn't open buffer"
-#~ msgstr "ÎÞ·¨´ò¿ª»º³åÇø"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "ÎÞ·¨±£´æ³·ÏúÐÅÏ¢"
-
-#~ msgid "cannot delete line"
-#~ msgstr "ÎÞ·¨É¾³ýÐÐ"
-
-#~ msgid "cannot replace line"
-#~ msgstr "ÎÞ·¨Ìæ»»ÐÐ"
-
-#~ msgid "cannot insert line"
-#~ msgstr "ÎÞ·¨²åÈëÐÐ"
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "×Ö·û´®²»Äܰüº¬»»ÐÐ(NL)"
-
-#~ msgid "Vim error: ~a"
-#~ msgstr "Vim ´íÎó: ~a"
-
-#~ msgid "Vim error"
-#~ msgstr "Vim ´íÎó"
-
-#~ msgid "buffer is invalid"
-#~ msgstr "»º³åÇøÎÞЧ"
-
-#~ msgid "window is invalid"
-#~ msgstr "´°¿ÚÎÞЧ"
-
-#~ msgid "linenr out of range"
-#~ msgstr "Ðкų¬³ö·¶Î§"
-
-#~ msgid "not allowed in the Vim sandbox"
-#~ msgstr "²»ÔÊÐíÔÚ sandbox ÖÐʹÓÃ"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr "E263: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Python ¿â¡£"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: ²»Äܵݹéµ÷Óà Python"
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "²»ÄÜɾ³ý OutputObject ÊôÐÔ"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace ±ØÐëÊÇÕûÊý"
-
-#~ msgid "invalid attribute"
-#~ msgstr "ÎÞЧµÄÊôÐÔ"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines() ÐèÒª×Ö·û´®Áбí×÷²ÎÊý"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: ³õʼ»¯ I/O ¶ÔÏó³ö´í"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "ÊÔͼÒýÓÃÒѱ»É¾³ýµÄ»º³åÇø"
-
-#~ msgid "line number out of range"
-#~ msgstr "Ðкų¬³ö·¶Î§"
-
-#~ msgid "<buffer object (deleted) at %8lX>"
-#~ msgstr "<»º³åÇø¶ÔÏó(ÒÑɾ³ý): %8lX>"
-
-#~ msgid "invalid mark name"
-#~ msgstr "ÎÞЧµÄ±ê¼ÇÃû³Æ"
-
-#~ msgid "no such buffer"
-#~ msgstr "ÎÞ´Ë»º³åÇø"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "ÊÔͼÒýÓÃÒѱ»É¾³ýµÄ´°¿Ú"
-
-#~ msgid "readonly attribute"
-#~ msgstr "Ö»¶ÁÊôÐÔ"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "¹â±êλÖÃÔÚ»º³åÇøÍâ"
-
-#~ msgid "<window object (deleted) at %.8lX>"
-#~ msgstr "<´°¿Ú¶ÔÏó(ÒÑɾ³ý): %.8lX>"
-
-#~ msgid "<window object (unknown) at %.8lX>"
-#~ msgstr "<´°¿Ú¶ÔÏó(δ֪): %.8lX>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<´°¿Ú %d>"
-
-#~ msgid "no such window"
-#~ msgstr "ÎÞ´Ë´°¿Ú"
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr "E266: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Ruby ¿â"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: δ֪µÄ longjmp ״̬ %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "Çл»ÊµÏÖ/¶¨Òå"
-
-#~ msgid "Show base class of"
-#~ msgstr "ÏÔʾ base class of:"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "ÏÔʾ±»¸²¸ÇµÄ³ÉÔ±º¯Êý"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "»Ö¸´: ´ÓÎļþ"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "»Ö¸´: ´Ó¶ÔÏó"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "»Ö¸´: ´ÓËùÓÐÏîÄ¿"
-
-#~ msgid "Retrieve"
-#~ msgstr "»Ö¸´"
-
-#~ msgid "Show source of"
-#~ msgstr "ÏÔʾԴ´úÂë: "
-
-#~ msgid "Find symbol"
-#~ msgstr "²éÕÒ symbol"
-
-#~ msgid "Browse class"
-#~ msgstr "ä¯ÀÀ class"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "ÏÔʾ²ã´Î¹ØÏµµÄÀà"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "ÏÔʾ restricted ²ã´Î¹ØÏµµÄ class"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref ²Î¿¼µ½"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ±»Ë­²Î¿¼:"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ÓÐ"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref ±»Ë­Ê¹ÓÃ:"
-
-#~ msgid "Show docu of"
-#~ msgstr "ÏÔʾÎļþ: "
-
-#~ msgid "Generate docu for"
-#~ msgstr "²úÉúÎļþ: "
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "²»ÄÜÁ¬½Óµ½ SNiFF+¡£Çë¼ì²é»·¾³±äÁ¿ ($PATH Àï±ØÐè¿ÉÒÔÕÒµ½ sniffemacs)\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: ¶ÁÈ¡´íÎó. È¡ÏûÁ¬½Ó"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ Ŀǰ"
-
-#~ msgid "not "
-#~ msgstr "δ"
-
-#~ msgid "connected"
-#~ msgstr "Á¬½ÓÖÐ"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: ²»ÕýÈ·µÄ SNiff+ µ÷ÓÃ: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: Á¬½Óµ½ SNiFF+ ʧ°Ü"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: δÁ¬½Óµ½ SNiFF+"
-
-#~ msgid "E279: Not a SNiFF+ buffer"
-#~ msgstr "E279: ²»ÊÇ SNiFF+ µÄ»º³åÇø"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: дÈë´íÎó¡£½áÊøÁ¬½Ó"
-
-#~ msgid "invalid buffer number"
-#~ msgstr "ÎÞЧµÄ»º³åÇøºÅ"
-
-#~ msgid "not implemented yet"
-#~ msgstr "ÉÐδʵÏÖ"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "ÎÞ·¨É趨ÐÐ"
-
-#~ msgid "mark not set"
-#~ msgstr "ûÓÐÉ趨±ê¼Ç"
-
-#~ msgid "row %d column %d"
-#~ msgstr "µÚ %d ÐÐ µÚ %d ÁÐ"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "ÎÞ·¨²åÈë/×·¼ÓÐÐ"
-
-#~ msgid "unknown flag: "
-#~ msgstr "δ֪µÄ±êÖ¾: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "δ֪µÄ vim Ñ¡Ïî"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "¼üÅÌÖжÏ"
-
-#~ msgid "vim error"
-#~ msgstr "vim ´íÎó"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "ÎÞ·¨´´½¨»º³åÇø/´°¿ÚÃüÁî: ¶ÔÏ󽫱»É¾³ý"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "ÎÞ·¨×¢²á»Øµ÷ÃüÁî: »º³åÇø/´°¿ÚÒѱ»É¾³ý"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr "E280: TCL ÑÏÖØ´íÎó: reflist Ë𻵣¡£¿Ç뱨¸æ¸ø vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr "ÎÞ·¨×¢²á»Øµ÷ÃüÁî: ÕÒ²»µ½»º³åÇø/´°¿ÚÒýÓÃ"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr "E571: ±§Ç¸£¬´ËÃüÁî²»¿ÉÓã¬ÎÞ·¨¼ÓÔØ Tcl ¿â"
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr "E281: TCL ´íÎó: Í˳ö·µ»ØÖµ²»ÊÇÕûÊý£¡£¿Ç뱨¸æ¸ø vim-dev@vim.org"
-
-#~ msgid "E572: exit code %d"
-#~ msgstr "E572: Í˳ö·µ»ØÖµ %d"
-
-#~ msgid "cannot get line"
-#~ msgstr "ÎÞ·¨»ñÈ¡ÐÐ"
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "ÎÞ·¨×¢²áÃüÁî·þÎñÆ÷Ãû"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: ÎÞ·¨·¢ËÍÃüÁĿµÄ³ÌÐò"
-
-#~ msgid "E573: Invalid server id used: %s"
-#~ msgstr "E573: ʹÓÃÁËÎÞЧµÄ·þÎñÆ÷ id: %s"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr "E251: VIM ʵÀý×¢²áÊôÐÔÓÐÎó¡£ÒÑɾ³ý£¡"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "´Ë Vim ±àÒëʱûÓмÓÈë diff ¹¦ÄÜ"
-
-#~ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
-#~ msgstr "Vim: ´íÎó: ÎÞ·¨´Ó NetBeans ÖÐÆô¶¯ gvim\n"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\t×¢²á´Ë gvim µ½ OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\tÈ¡Ïû OLE ÖÐµÄ gvim ×¢²á"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\tʹÓÃͼÐνçÃæ (ͬ \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f »ò --nofork\tǰ̨: Æô¶¯Í¼ÐνçÃæÊ±²» fork"
-
-#~ msgid "-V[N]\t\tVerbose level"
-#~ msgstr "-V[N]\t\tVerbose µÈ¼¶"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\t²»Ê¹Óà newcli À´´ò¿ª´°¿Ú"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\tʹÓà <device> ½øÐÐÊäÈëÊä³ö"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\tʹÓà <gvimrc> Ìæ´úÈκΠ.gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\t±à¼­¼ÓÃܵÄÎļþ"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\t½« vim ÓëÖ¸¶¨µÄ X-server Á¬½Ó"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\t²»Á¬½Óµ½ X Server"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <files>\tÈçÓпÉÄÜ£¬ÔÚ Vim ·þÎñÆ÷Éϱ༭Îļþ <files>"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <files> ͬÉÏ£¬ÕÒ²»µ½·þÎñÆ÷ʱ²»±§Ô¹"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr "--remote-wait <files> ͬ --remote µ«»áµÈ´ýÎļþÍê³É±à¼­"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-wait-silent <files> ͬÉÏ£¬ÕÒ²»µ½·þÎñÆ÷ʱ²»±§Ô¹"
-
-#~ msgid "--remote-tab <files> As --remote but open tab page for each file"
-#~ msgstr "--remote-tab <files> ͬ --remote µ«¶Ôÿ¸öÎļþ´ò¿ªÒ»¸ö±êǩҳ"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <keys>\tËͳö <keys> µ½ Vim ·þÎñÆ÷²¢Í˳ö"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <expr>\tÔÚ Vim ·þÎñÆ÷ÉÏÇó <expr> µÄÖµ²¢´òÓ¡½á¹û"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\tÁгö¿ÉÓÃµÄ Vim ·þÎñÆ÷Ãû³Æ²¢Í˳ö"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <name>\t·¢Ë͵½»ò³ÉΪ Vim ·þÎñÆ÷ <name>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (Motif °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (neXtaw °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (Athena °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\tÔÚ <display> ÉÏÔËÐÐ vim"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\tÆô¶¯ºó×îС»¯"
-
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <name>\t\t¶ÁÈ¡ Resource ʱ°Ñ vim ÊÓΪ <name>"
-
-#~ msgid "\t\t\t (Unimplemented)\n"
-#~ msgstr "\t\t\t (ÉÐδʵÏÖ)\n"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <color>\tʹÓà <color> ×÷Ϊ±³¾°É« (Ò²¿ÉÓà -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr "-foreground <color>\tʹÓà <color> ×÷Ϊһ°ãÎÄ×ÖÑÕÉ« (Ò²¿ÉÓà -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\tʹÓà <font> ×÷Ϊһ°ã×ÖÌå (Ò²¿ÉÓà -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\tʹÓà <font> ×÷Ϊ´ÖÌå×ÖÌå"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\tʹÓà <font> ×÷ΪбÌå×ÖÌå"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <geom>\tʹÓà <geom> ×÷Ϊ³õʼλÖà (Ò²¿ÉÓà -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <width>\tÉ趨±ß¿ò¿í¶ÈΪ <width> (Ò²¿ÉÓà -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr "-scrollbarwidth <width> É趨¹ö¶¯Ìõ¿í¶ÈΪ <width> (Ò²¿ÉÓà -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <height>\tÉ趨²Ëµ¥À¸¸ß¶ÈΪ <height> (Ò²¿ÉÓà -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\tʹÓ÷´ÏÔ (Ò²¿ÉÓà -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t²»Ê¹Ó÷´ÏÔ (Ò²¿ÉÓà +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\tÉ趨ָ¶¨µÄ×ÊÔ´"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (RISC OS °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <number>\t´°¿Ú³õʼ¿í¶È"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <number>\t´°¿Ú³õʼ¸ß¶È"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim (GTK+ °æ±¾) ¿Éʶ±ðµÄ²ÎÊý:\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\tÔÚ <display> ÉÏÔËÐÐ vim (Ò²¿ÉÓà --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\tÉèÖÃÓÃÓÚÇø·ÖÖ÷´°¿ÚµÄ´°¿Ú½ÇÉ«Ãû"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\tÔÚÁíÒ»¸ö GTK ²¿¼þÖдò¿ª Vim"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <parent title>\tÔÚ¸¸Ó¦ÓóÌÐòÖдò¿ª Vim"
-
-#~ msgid "No display"
-#~ msgstr "ûÓÐ display"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": ·¢ËÍʧ°Ü¡£\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": ·¢ËÍʧ°Ü¡£³¢ÊÔ±¾µØÖ´ÐÐ\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "%d ÖÐ %d Òѱ༭"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "ûÓÐ display: ·¢Ëͱí´ïʽʧ°Ü¡£\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": ·¢Ëͱí´ïʽʧ°Ü¡£\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: ÎÞЧµÄ´úÂëÒ³"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: ÎÞ·¨´´½¨ÊäÈëÉÏÏÂÎÄ"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: ÎÞ·¨´ò¿ªÊäÈë·¨"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: ¾¯¸æ: ÎÞ·¨É趨ÊäÈë·¨µÄÊͷŻص÷º¯Êý"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: ÊäÈë·¨²»Ö§³ÖÈκηç¸ñ"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: ÊäÈë·¨²»Ö§³ÖÎÒµÄÔ¤±à¼­ÀàÐÍ"
-
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: over-the-spot ·ç¸ñÐèÒª Fontset"
-
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: ÄãµÄ GTK+ ±È 1.2.3 ¾É¡£×´Ì¬Çø²»¿ÉÓá£"
-
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: ÊäÈë·¨·þÎñÆ÷δÔËÐÐ"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [²»ÄÜÔڸð汾µÄ Vim ÉÏʹÓÃ]"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "˺Ï´˲˵¥"
-
-#~ msgid "Select Directory dialog"
-#~ msgstr "Ñ¡ÔñĿ¼¶Ô»°¿ò"
-
-#~ msgid "Save File dialog"
-#~ msgstr "±£´æÎļþ¶Ô»°¿ò"
-
-#~ msgid "Open File dialog"
-#~ msgstr "´ò¿ªÎļþ¶Ô»°¿ò"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: ±§Ç¸£¬¿ØÖÆÌ¨Ä£Ê½ÏÂûÓÐÎļþä¯ÀÀÆ÷"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: ÕýÔÚ±£ÁôÎļþ¡­¡­\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: ½áÊø¡£\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "´íÎó: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[×Ö½Ú] ×ܹ² alloc-free %<PRIu64>-%<PRIu64>£¬Ê¹ÓÃÖÐ %<PRIu64>£¬¸ß·åʹÓà "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[µ÷ÓÃ] ×ܹ² re/malloc(): %<PRIu64>£¬×ܹ² free()': %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: ´ËÐйý³¤"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: ÄÚ²¿´íÎó: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: ÎÞЧµÄÊó±êÐÎ×´"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "ÊäÈëÃÜÂë: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "ÇëÔÙÊäÈëÒ»´Î: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "Á½´ÎÃÜÂ벻ƥÅ䣡"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "ÎÞ·¨Á¬½Óµ½ Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "ÎÞ·¨Á¬½Óµ½ Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: NetBeans Á¬½ÓÐÅÏ¢ÎļþÖдíÎóµÄ·ÃÎÊģʽ: \"%s\""
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "´Ó Netbeans Ì×½Ó×Ö¶ÁÈ¡"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: »º³åÇø %<PRId64> ¶ªÊ§ NetBeans Á¬½Ó"
-
-#~ msgid "E505: "
-#~ msgstr "E505: "
-
-#~ msgid "E775: Eval feature not available"
-#~ msgstr "E775: ÇóÖµ¹¦Äܲ»¿ÉÓÃ"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "ÊÍ·ÅÁË %<PRId64> ÐÐ"
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: ÔÚͼÐνçÃæÖв»ÄܸıäÖÕ¶Ë"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: ÇëÓà \":gui\" Æô¶¯Í¼ÐνçÃæ"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: ÔÚ GTK+ 2 ͼÐνçÃæÖв»Äܸü¸Ä"
-
-#~ msgid "E596: Invalid font(s)"
-#~ msgstr "E596: ÎÞЧµÄ×ÖÌå"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: ÎÞ·¨Ñ¡Ôñ Fontset"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: ÎÞЧµÄ Fontset"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: ÎÞ·¨Ñ¡Ôñ¿í×ÖÌå"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: ÎÞЧµÄ¿í×ÖÌå"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: ²»Ö§³ÖÊó±ê"
-
-#~ msgid "cannot open "
-#~ msgstr "²»ÄÜ´ò¿ª"
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: ²»ÄÜ´ò¿ª´°¿Ú!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "ÐèÒª Amigados °æ±¾ 2.04 ÒÔÉÏ\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "ÐèÒª %s °æ±¾ %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "²»ÄÜ´ò¿ª NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "²»ÄÜ´´½¨ "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim ·µ»ØÖµ: %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "²»ÄÜÇл»Ö÷¿ØÌ¨(console)ģʽ !?\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ²»ÊÇÖ÷¿ØÌ¨(console)??\n"
-
-#~ msgid "E360: Cannot execute shell with -f option"
-#~ msgstr "E360: ²»ÄÜÓà -f Ñ¡ÏîÖ´ÐÐ shell"
-
-#~ msgid "Cannot execute "
-#~ msgstr "²»ÄÜÖ´ÐÐ "
-
-#~ msgid "shell "
-#~ msgstr "shell "
-
-#~ msgid " returned\n"
-#~ msgstr " ÒÑ·µ»Ø\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE ̫С"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "I/O ´íÎó"
-
-#~ msgid "Message"
-#~ msgstr "ÏûÏ¢"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' ²»ÊÇ 80, ²»ÄÜÖ´ÐÐÍⲿÃüÁî"
-
-#~ msgid "E237: Printer selection failed"
-#~ msgstr "E237: Ñ¡Ôñ´òÓ¡»úʧ°Ü"
-
-#~ msgid "to %s on %s"
-#~ msgstr "´Ó %s µ½ %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: δ֪µÄ´òÓ¡»ú×ÖÌå: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: ´òÓ¡´íÎó: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "´òÓ¡ '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: ×Ö·û¼¯ \"%s\" ²»ÄܶÔÓ¦×ÖÌå\"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: ²»ÕýÈ·µÄ×Ö·û '%c' ³öÏÖÔÚ×ÖÌåÃû³Æ \"%s\" ÄÚ"
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Ë«ÖØÐźţ¬Í˳öÖÐ\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: À¹½Øµ½ÖÂÃüÐźÅ(deadly signal) %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: À¹½Øµ½ÖÂÃüÐźÅ(deadly signal)\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "´ò¿ª X display ÓÃʱ %<PRId64> Ãë"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: X ´íÎó\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "²âÊÔ X display ʧ°Ü"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "´ò¿ª X display ³¬Ê±"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨Ö´ÐÐ shell sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨½¨Á¢¹ÜµÀ\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÎÞ·¨ fork\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "ÃüÁîÒѽáÊø\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP ¶ªÊ§Á˵½ ICE µÄÁ¬½Ó"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "´ò¿ª X display ʧ°Ü"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP ´¦Àí save-yourself ÇëÇó"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "XSMP ´ò¿ªÁ¬½Ó"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ICE Á¬½Ó¼àÊÓʧ°Ü"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection µ÷ÓÃʧ°Ü: %s"
-
-#~ msgid "At line"
-#~ msgstr "ÔÚÐкŠ"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "ÎÞ·¨¼ÓÔØ vim32.dll£¡"
-
-#~ msgid "VIM Error"
-#~ msgstr "VIM ´íÎó"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "ÎÞ·¨ÐÞÕýµ½ DLL µÄº¯ÊýÖ¸Õë!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "Shell ·µ»Ø %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: À¹½Øµ½ %s ʼþ\n"
-
-#~ msgid "close"
-#~ msgstr "¹Ø±Õ"
-
-#~ msgid "logoff"
-#~ msgstr "×¢Ïû"
-
-#~ msgid "shutdown"
-#~ msgstr "¹Ø»ú"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: ÕÒ²»µ½ÃüÁî"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "ÔÚÄãµÄ $PATH ÖÐÕÒ²»µ½ VIMRUN.EXE¡£\n"
-#~ "ÍⲿÃüÁîÖ´ÐÐÍê±Ïºó½«²»»áÔÝÍ£¡£\n"
-#~ "½øÒ»²½ËµÃ÷Çë¼û :help win32-vimrun"
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim ¾¯¸æ"
-
-#~ msgid "Conversion in %s not supported"
-#~ msgstr "²»Ö§³Ö %s ÖеÄת»»"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: ʹÓÃÁ˲»ÕýÈ·µÄ²ÎÊý"
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Tag Îļþ·¾¶±»½Ø¶ÏΪ %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "Æô¶¯Ð shell\n"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "ÎÞ·¨³·Ïú£»Çë¼ÌÐø"
-
-#~ msgid "number changes time"
-#~ msgstr " ±àºÅ ¸Ä±ä ʱ¼ä"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16/32 λͼÐνçÃæ°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 λͼÐνçÃæ°æ±¾"
-
-#~ msgid " in Win32s mode"
-#~ msgstr " Win32s ģʽ"
-
-#~ msgid " with OLE support"
-#~ msgstr " ´ø OLE Ö§³Ö"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 λ¿ØÖÆÌ¨°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16 λ¿ØÖÆÌ¨°æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 λ MS-DOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 λ MS-DOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X (unix) °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "RISC OS °æ±¾"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "´óÐͰ汾 "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "Õý³£°æ±¾ "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "СÐͰ汾 "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "΢ÐͰ汾 "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "´ø GTK2-GNOME ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "´ø GTK-GNOME ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "´ø GTK2 ͼÐνçÃæ¡£"
-
-#~ msgid "with GTK GUI."
-#~ msgstr "´ø GTK ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "´ø X11-Motif ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "´ø X11-neXtaw ͼÐνçÃæ¡£"
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "´ø X11-Athena ͼÐνçÃæ¡£"
-
-#~ msgid "with Photon GUI."
-#~ msgstr "´ø Photon ͼÐνçÃæ¡£"
-
-#~ msgid "with GUI."
-#~ msgstr "´øÍ¼ÐνçÃæ¡£"
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "´ø Carbon ͼÐνçÃæ¡£"
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "´ø Cocoa ͼÐνçÃæ¡£"
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "´ø(´«Í³)ͼÐνçÃæ¡£"
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ϵͳ gvimrc Îļþ: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " Óû§ gvimrc Îļþ: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr "µÚ¶þÓû§ gvimrc Îļþ: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr "µÚÈýÓû§ gvimrc Îļþ: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ϵͳ²Ëµ¥Îļþ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "±àÒëÆ÷: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "²Ëµ¥ Help->Orphans ²é¿´ËµÃ÷ "
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "ÎÞģʽÔËÐУ¬ÊäÈëÎÄ×Ö¼´²åÈë"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "²Ëµ¥ Edit->Global Settings->Toggle Insert Mode "
-
-#, fuzzy
-#~ msgid " for two modes "
-#~ msgstr " # pid Êý¾Ý¿âÃû³Æ prepend path\n"
-
-#, fuzzy
-#~ msgid " for Vim defaults "
-#~ msgstr " # pid Êý¾Ý¿âÃû³Æ prepend path\n"
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "¾¯¸æ: ¼ì²âµ½ Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "ÊäÈë :help windows95<Enter> ²é¿´Ïà¹ØËµÃ÷ "
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: ÎÞ·¨¼ÓÔØ¿â %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr "±§Ç¸£¬´ËÃüÁî²»¿ÉÓÃ: ÎÞ·¨¼ÓÔØ Perl ¿â¡£"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "Óöà¸ö Vim ±à¼­(&M)"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "Óõ¥¸ö Vim ±à¼­(&V)"
-
-#~ msgid "Diff with Vim"
-#~ msgstr "Óà Vim ±È½Ï(diff)"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "Óà Vim ±à¼­(&V)"
-
-#~ msgid "Edit with existing Vim - "
-#~ msgstr "Óõ±Ç°µÄ Vim ±à¼­ - "
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "Óà Vim ±à¼­Ñ¡ÖеÄÎļþ"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "´´½¨½ø³Ìʧ°Ü: Çë¼ì²é gvim ÊÇ·ñÔÚ·¾¶ÖУ¡"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "gvimext.dll ´íÎó"
-
-#~ msgid "Path length too long!"
-#~ msgstr "·¾¶Ì«³¤£¡"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: δ֪µÄ Fontset: %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: δ֪µÄ×ÖÌå: %s"
-
-#~ msgid "E236: Font \"%s\" is not fixed-width"
-#~ msgstr "E236: ×ÖÌå \"%s\" ²»Êǵȿí×ÖÌå"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: ÎÞ·¨¼ÓÔØ¿âº¯Êý %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: ÎÞ·¨Ê¹Óà Hebrew: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: ÎÞ·¨Ê¹Óà Farsi: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: ÎÞ·¨Ê¹Óà Arabic: ±àÒëʱûÓÐÆôÓÃ\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: ûÓÐÃû½Ð \"%s\" µÄÒÑ×¢²áµÄ·þÎñÆ÷"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: ÎÞ·¨´ò¿ª display"
-
-#~ msgid "E449: Invalid expression received"
-#~ msgstr "E449: ÊÕµ½ÎÞЧµÄ±í´ïʽ"
-
-#~ msgid "E744: NetBeans does not allow changes in read-only files"
-#~ msgstr "E744: NetBeans ²»ÔÊÐí¸Ä±äÖ»¶ÁÎļþ"
-
-#~ msgid "Affix flags ignored when PFXPOSTPONE used in %s line %d: %s"
-#~ msgstr "%s µÚ %d ÐУ¬Ê¹Óà PFXPOSTPONE ʱ¸½¼Ó±êÖ¾±»ºöÂÔ: %s"
-
-#~ msgid "[No file]"
-#~ msgstr "[δÃüÃû]"
-
-#~ msgid "[Error List]"
-#~ msgstr "[´íÎóÁбí]"
-
-#~ msgid "E106: Unknown variable: \"%s\""
-#~ msgstr "E106: 䶨ÒåµÄ±äÁ¿: \"%s\""
-
-#~ msgid "function "
-#~ msgstr "º¯Êý "
-
-#~ msgid "E130: Undefined function: %s"
-#~ msgstr "E130: º¯Êý %s ÉÐ䶨Òå"
-
-#~ msgid "Run Macro"
-#~ msgstr "Ö´Ðкê"
-
-#~ msgid "E242: Color name not recognized: %s"
-#~ msgstr "E242: %s Ϊ²»ÄÜʶ±ðµÄÑÕÉ«Ãû³Æ"
-
-#~ msgid "error reading cscope connection %d"
-#~ msgstr "¶ÁÈ¡ cscope Á¬½Ó %d ʱ´íÎó"
-
-#~ msgid "E260: cscope connection not found"
-#~ msgstr "E260: ÕÒ²»µ½ cscope Á¬½Ó"
-
-#~ msgid "cscope connection closed"
-#~ msgstr "cscope Á¬½ÓÒѹرÕ"
-
-#~ msgid "couldn't malloc\n"
-#~ msgstr "²»ÄÜʹÓà malloc\n"
-
-#~ msgid "%2d %-5ld %-34s <none>\n"
-#~ msgstr "%2d %-5ld %-34s <ÎÞ>\n"
-
-#~ msgid "E249: couldn't read VIM instance registry property"
-#~ msgstr "E249: ²»ÄܶÁÈ¡ VIM µÄ ×¢²á±íÊôÐÔ"
-
-#~ msgid "\"\n"
-#~ msgstr "\"\n"
-
-#~ msgid "--help\t\tShow Gnome arguments"
-#~ msgstr "--help\t\tÏÔʾ Gnome Ïà¹Ø²ÎÊý"
-
-#~ msgid "[string too long]"
-#~ msgstr "[×Ö·û´®Ì«³¤]"
-
-#~ msgid "Hit ENTER to continue"
-#~ msgstr "Çë°´ ENTER ¼ÌÐø"
-
-#~ msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-#~ msgstr " (RET/BS: ÏòÏÂ/ÏòÉÏÒ»ÐÐ, ¿Õ¸ñ/b: Ò»Ò³, d/u: °ëÒ³, q: Í˳ö)"
-
-#~ msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-#~ msgstr " (RET: ÏòÏÂÒ»ÐÐ, ¿Õ°×¼ü: Ò»Ò³, d: °ëÒ³, q: Í˳ö)"
-
-#~ msgid "E361: Crash intercepted; regexp too complex?"
-#~ msgstr "E361: ²»ÄÜÖ´ÐÐ; regular expression Ì«¸´ÔÓ?"
-
-#~ msgid "E363: pattern caused out-of-stack error"
-#~ msgstr "E363: regular expression Ôì³É¶ÑÕ»ÓùâµÄ´íÎó"
-
-#~ msgid " BLOCK"
-#~ msgstr " ¿é"
-
-#~ msgid " LINE"
-#~ msgstr " ÐÐ"
-
-#~ msgid "Enter nr of choice (<CR> to abort): "
-#~ msgstr "ÊäÈë nr »òÑ¡Ôñ (<CR> Í˳ö): "
-
-#~ msgid "Linear tag search"
-#~ msgstr "ÏßÐÔ²éÕÒ±êÇ© (Tags)"
-
-#~ msgid "Binary tag search"
-#~ msgstr "¶þ½øÖƲéÕÒ(Binary search) ±êÇ©(Tags)"
-
-#~ msgid "with BeOS GUI."
-#~ msgstr "ʹÓà BeOS ͼÐνçÃæ¡£"
diff --git a/src/nvim/po/zh_TW.UTF-8.po b/src/nvim/po/zh_TW.UTF-8.po
index 79e09c83d1..af8c3fff48 100644
--- a/src/nvim/po/zh_TW.UTF-8.po
+++ b/src/nvim/po/zh_TW.UTF-8.po
@@ -2725,11 +2725,6 @@ msgstr "E49: 錯誤的æ²å‹•大å°"
msgid "E901: Job table is full"
msgstr ""
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
#: ../globals.h:1024
#, c-format
msgid "E364: Library call failed for \"%s()\""
@@ -4304,12 +4299,6 @@ msgstr "行 %4ld:"
msgid "E354: Invalid register name: '%s'"
msgstr "E354: 暫存器å稱錯誤: '%s'"
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"正體中文訊æ¯ç¶­è­·è€…: Francis S.Lin <piaip@csie.ntu.edu."
-"tw>, Cecil Sheng <b7506022@csie.ntu.edu.tw>"
-
#: ../message.c:986
msgid "Interrupt: "
msgstr "已中斷: "
diff --git a/src/nvim/po/zh_TW.po b/src/nvim/po/zh_TW.po
deleted file mode 100644
index 07d510c0c6..0000000000
--- a/src/nvim/po/zh_TW.po
+++ /dev/null
@@ -1,7910 +0,0 @@
-# Traditional Chinese Translation for Vim vim:set foldmethod=marker:
-#
-# Do ":help uganda" in Vim to read copying and usage conditions.
-# Do ":help credits" in Vim to see a list of people who contributed.
-#
-# FIRST AUTHOR Francis S.Lin <piaip@csie.ntu.edu.tw>, 2000
-# FIRST RELEASE Thu Jun 14 14:24:17 CST 2001
-#
-# Last update: 2005/01/27 07:03 (6.3)
-#
-# To update, search pattern: /fuzzy\|^msgstr ""\(\n"\)\@!
-#
-# DO NOT USE WORDS WITH BACKSLASH ('\') AS SECOND BYTE OF BIG5 CHARS
-# EG: '¥\', # ³\¥\»# [blacklist: À\¬\¾\¯\½\¶\²\Æ\°\Â\¿\Á\Å\§\ª\«\]
-# [blacklist: ®\±\Ã\Ä\´\µ\·\¹\º\¤\¦\­\á\ä\]
-# you can replace these characters with alternative words.
-# THIS WILL CAUSE INCOMPATIBLE ON gettext 0.10.36+
-#
-# Note (2005.01.27):
-# A bug was found for UTF8 mode.
-# > msgid "%<PRId64> fewer lines" "on %<PRId64> lines"
-# If you don't put more (at least 2) spaces after %<PRId64>
-# gvim/win32 will crash (no reason).
-# So please change [¦æ"] to [¦æ "]
-#
-# Q. How to use UTF8 mode on Win32?
-# A. A simple configuration:
-# set encoding=utf-8; let $LANG='zh_TW.UTF-8';
-# (set langmenu=none or ..)
-# set fileencodings=ucs-bom,utf-8,japan,taiwan,prc
-# set fileencoding=taiwan (or utf-8)
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: Vim(Traditional Chinese)\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-05-26 14:21+0200\n"
-"PO-Revision-Date: Mon Feb 19 22:49:21 CST 2001\n"
-"Last-Translator: Hung-Te Lin <piaip@csie.ntu.edu.tw>\n"
-"Language-Team: Hung-Te Lin <piaip@csie.ntu.edu.tw>, Cecil Sheng "
-"<b7506022@csie.ntu.edu.tw>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=big5\n"
-"Content-Transfer-Encoding: 8-bit\n"
-
-#: ../api/private/helpers.c:201
-#, fuzzy
-msgid "Unable to get option value"
-msgstr "µLªk¶Ç°e¦^À³°T®§"
-
-#: ../api/private/helpers.c:204
-msgid "internal error: unknown option type"
-msgstr ""
-
-#: ../buffer.c:92
-msgid "[Location List]"
-msgstr ""
-
-#: ../buffer.c:93
-msgid "[Quickfix List]"
-msgstr ""
-
-#: ../buffer.c:94
-msgid "E855: Autocommands caused command to abort"
-msgstr ""
-
-#: ../buffer.c:135
-msgid "E82: Cannot allocate any buffer, exiting..."
-msgstr "E82: µLªk°t¸m¥ô¦ó½w½Ä°Ï¡AÂ÷¶}µ{¦¡..."
-
-#: ../buffer.c:138
-msgid "E83: Cannot allocate buffer, using other one..."
-msgstr "E83: µLªk°t¸m½w½Ä°Ï¡A¨Ï¥Î¥t¤@­Ó½w½Ä°Ï...."
-
-#: ../buffer.c:763
-msgid "E515: No buffers were unloaded"
-msgstr "E515: ¨S¦³ÄÀ©ñ¥ô¦ó½w½Ä°Ï"
-
-#: ../buffer.c:765
-msgid "E516: No buffers were deleted"
-msgstr "E516: ¨S¦³§R°£¥ô¦ó½w½Ä°Ï"
-
-#: ../buffer.c:767
-msgid "E517: No buffers were wiped out"
-msgstr "E517: ¨S¦³²M°£¥ô¦ó½w½Ä°Ï"
-
-#: ../buffer.c:772
-msgid "1 buffer unloaded"
-msgstr "¤wÄÀ©ñ¤@­Ó½w½Ä°Ï"
-
-#: ../buffer.c:774
-#, c-format
-msgid "%d buffers unloaded"
-msgstr "¤wÄÀ©ñ %d ­Ó½w½Ä°Ï"
-
-#: ../buffer.c:777
-msgid "1 buffer deleted"
-msgstr "¤w§R°£¤@­Ó½w½Ä°Ï"
-
-#: ../buffer.c:779
-#, c-format
-msgid "%d buffers deleted"
-msgstr "¤w§R°£ %d ­Ó½w½Ä°Ï"
-
-#: ../buffer.c:782
-msgid "1 buffer wiped out"
-msgstr "¤w§R°£¤@­Ó½w½Ä°Ï"
-
-#: ../buffer.c:784
-#, c-format
-msgid "%d buffers wiped out"
-msgstr "¤w§R°£ %d ­Ó½w½Ä°Ï"
-
-#: ../buffer.c:806
-msgid "E90: Cannot unload last buffer"
-msgstr "E90: µLªkÄÀ©ñ³Ì«á¤@­Ó½w½Ä°Ï"
-
-#: ../buffer.c:874
-msgid "E84: No modified buffer found"
-msgstr "E84: ¨S¦³­×§ï¹Lªº½w½Ä°Ï"
-
-#. back where we started, didn't find anything.
-#: ../buffer.c:903
-msgid "E85: There is no listed buffer"
-msgstr "E85: ¨S¦³¦C¥Xªº½w½Ä°Ï"
-
-#: ../buffer.c:913
-#, c-format
-msgid "E86: Buffer %<PRId64> does not exist"
-msgstr "E86: ½w½Ä°Ï %<PRId64> ¤£¦s¦b"
-
-#: ../buffer.c:915
-msgid "E87: Cannot go beyond last buffer"
-msgstr "E87: µLªk¤Á´«¨ì§ó«á­±ªº½w½Ä°Ï"
-
-#: ../buffer.c:917
-msgid "E88: Cannot go before first buffer"
-msgstr "E88: µLªk¤Á´«¨ì§ó«e­±ªº½w½Ä°Ï"
-
-#: ../buffer.c:945
-#, c-format
-msgid ""
-"E89: No write since last change for buffer %<PRId64> (add ! to override)"
-msgstr "E89: ¤w§ó§ï¹L½w½Ä°Ï %<PRId64> ¦ý©|¥¼¦sÀÉ (¥i¥Î ! ±j¨î°õ¦æ)"
-
-#. wrap around (may cause duplicates)
-#: ../buffer.c:1423
-msgid "W14: Warning: List of file names overflow"
-msgstr "W14: ĵ§i: ÀɦW¹L¦h"
-
-#: ../buffer.c:1555 ../quickfix.c:3361
-#, c-format
-msgid "E92: Buffer %<PRId64> not found"
-msgstr "E92: §ä¤£¨ì²Ä %<PRId64> ­Ó½w½Ä°Ï"
-
-#: ../buffer.c:1798
-#, c-format
-msgid "E93: More than one match for %s"
-msgstr "E93: §ä¨ì¤@­Ó¥H¤Wªº %s"
-
-#: ../buffer.c:1800
-#, c-format
-msgid "E94: No matching buffer for %s"
-msgstr "E94: §ä¤£¨ì %s"
-
-#: ../buffer.c:2161
-#, c-format
-msgid "line %<PRId64>"
-msgstr "¦æ %<PRId64>"
-
-#: ../buffer.c:2233
-msgid "E95: Buffer with this name already exists"
-msgstr "E95: ¤w¦³½w½Ä°Ï¨Ï¥Î³o­Ó¦W¦r"
-
-#: ../buffer.c:2498
-msgid " [Modified]"
-msgstr " [¤w­×§ï]"
-
-#: ../buffer.c:2501
-msgid "[Not edited]"
-msgstr "[¥¼½s¿è]"
-
-#: ../buffer.c:2504
-msgid "[New file]"
-msgstr "[·sÀÉ®×]"
-
-#: ../buffer.c:2505
-msgid "[Read errors]"
-msgstr "[Ū¨ú¿ù»~]"
-
-#: ../buffer.c:2506 ../buffer.c:3217 ../fileio.c:1807 ../screen.c:4895
-msgid "[RO]"
-msgstr "[°ßŪ]"
-
-#: ../buffer.c:2507 ../fileio.c:1807
-msgid "[readonly]"
-msgstr "[°ßŪ]"
-
-#: ../buffer.c:2524
-#, c-format
-msgid "1 line --%d%%--"
-msgstr "¦æ¼Æ 1 --%d%%--"
-
-#: ../buffer.c:2526
-#, c-format
-msgid "%<PRId64> lines --%d%%--"
-msgstr "¦æ¼Æ %<PRId64> --%d%%--"
-
-#: ../buffer.c:2530
-#, c-format
-msgid "line %<PRId64> of %<PRId64> --%d%%-- col "
-msgstr "¦æ %<PRId64>/%<PRId64> --%d%%-- Äæ "
-
-#: ../buffer.c:2632 ../buffer.c:4292 ../memline.c:1554
-#, fuzzy
-msgid "[No Name]"
-msgstr "[¥¼©R¦W]"
-
-#. must be a help buffer
-#: ../buffer.c:2667
-msgid "help"
-msgstr "[»²§U»¡©ú]"
-
-#: ../buffer.c:3225 ../screen.c:4883
-#, fuzzy
-msgid "[Help]"
-msgstr "[»²§U»¡©ú]"
-
-#: ../buffer.c:3254 ../screen.c:4887
-msgid "[Preview]"
-msgstr "[¹wÄý]"
-
-#: ../buffer.c:3528
-msgid "All"
-msgstr "¥þ³¡"
-
-#: ../buffer.c:3528
-msgid "Bot"
-msgstr "©³ºÝ"
-
-#: ../buffer.c:3531
-msgid "Top"
-msgstr "³»ºÝ"
-
-#: ../buffer.c:4244
-msgid ""
-"\n"
-"# Buffer list:\n"
-msgstr ""
-"\n"
-"# ½w½Ä°Ï¦Cªí:\n"
-
-#: ../buffer.c:4289
-msgid "[Scratch]"
-msgstr ""
-
-#: ../buffer.c:4529
-msgid ""
-"\n"
-"--- Signs ---"
-msgstr ""
-"\n"
-"--- ²Å¸¹ ---"
-
-#: ../buffer.c:4538
-#, c-format
-msgid "Signs for %s:"
-msgstr "%s ªº²Å¸¹:"
-
-#: ../buffer.c:4543
-#, c-format
-msgid " line=%<PRId64> id=%d name=%s"
-msgstr " ¦æ=%<PRId64> id=%d ¦WºÙ=%s"
-
-#: ../cursor_shape.c:68
-msgid "E545: Missing colon"
-msgstr "E545: ¯Ê¤Ö colon"
-
-#: ../cursor_shape.c:70 ../cursor_shape.c:94
-msgid "E546: Illegal mode"
-msgstr "E546: ¤£¥¿½Tªº¼Ò¦¡"
-
-#: ../cursor_shape.c:134
-msgid "E548: digit expected"
-msgstr "E548: À³¸Ó­n¦³¼Æ¦r"
-
-#: ../cursor_shape.c:138
-msgid "E549: Illegal percentage"
-msgstr "E549: ¤£¥¿½Tªº¦Ê¤À¤ñ"
-
-#: ../diff.c:146
-#, c-format
-msgid "E96: Can not diff more than %<PRId64> buffers"
-msgstr "E96: µLªk¤ñ¸û(diff) %<PRId64>­Ó¥H¤Wªº½w½Ä°Ï"
-
-#: ../diff.c:753
-#, fuzzy
-msgid "E810: Cannot read or write temp files"
-msgstr "E557: µLªk¶}±Ò termcap ÀÉ®×"
-
-#: ../diff.c:755
-msgid "E97: Cannot create diffs"
-msgstr "E97: ¤£¯à«Ø¥ß "
-
-#: ../diff.c:966
-#, fuzzy
-msgid "E816: Cannot read patch output"
-msgstr "E98: µLªkŪ¨ú diff ªº¿é¥X"
-
-#: ../diff.c:1220
-msgid "E98: Cannot read diff output"
-msgstr "E98: µLªkŪ¨ú diff ªº¿é¥X"
-
-#: ../diff.c:2081
-msgid "E99: Current buffer is not in diff mode"
-msgstr "E99: ¥Ø«eªº½w½Ä°Ï¤£¬O¦b diff ¼Ò¦¡"
-
-#: ../diff.c:2100
-#, fuzzy
-msgid "E793: No other buffer in diff mode is modifiable"
-msgstr "E100: ¨S¦³½w½Ä°Ï¦b diff ¼Ò¦¡"
-
-#: ../diff.c:2102
-msgid "E100: No other buffer in diff mode"
-msgstr "E100: ¨S¦³½w½Ä°Ï¦b diff ¼Ò¦¡"
-
-#: ../diff.c:2112
-msgid "E101: More than two buffers in diff mode, don't know which one to use"
-msgstr "E101: ¦³¨â­Ó¥H¤Wªº½w½Ä°Ï¦b diff ¼Ò¦¡¡AµLªk¨M©w­n¥Î­þ¤@­Ó"
-
-#: ../diff.c:2141
-#, c-format
-msgid "E102: Can't find buffer \"%s\""
-msgstr "E102: §ä¤£¨ì½w½Ä°Ï: \"%s\""
-
-#: ../diff.c:2152
-#, c-format
-msgid "E103: Buffer \"%s\" is not in diff mode"
-msgstr "E103: ½w½Ä°Ï \"%s\" ¤£¬O¦b diff ¼Ò¦¡"
-
-#: ../diff.c:2193
-msgid "E787: Buffer changed unexpectedly"
-msgstr ""
-
-#: ../digraph.c:1598
-msgid "E104: Escape not allowed in digraph"
-msgstr "E104: ½Æ¦X¦r¤¸(digraph)¤¤¤£¯à¨Ï¥Î Escape"
-
-#: ../digraph.c:1760
-msgid "E544: Keymap file not found"
-msgstr "E544: §ä¤£¨ì keymap ÀÉ"
-
-#: ../digraph.c:1785
-msgid "E105: Using :loadkeymap not in a sourced file"
-msgstr "E105: ¨Ï¥Î :loadkeymap "
-
-#: ../digraph.c:1821
-msgid "E791: Empty keymap entry"
-msgstr ""
-
-#: ../edit.c:82
-msgid " Keyword completion (^N^P)"
-msgstr " ÃöÁä¦r¦Û°Ê§¹¦¨ (^N^P)"
-
-#. ctrl_x_mode == 0, ^P/^N compl.
-#: ../edit.c:83
-#, fuzzy
-msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
-msgstr " ^X ¼Ò¦¡ (^E^Y^L^]^F^I^K^D^N^P)"
-
-#: ../edit.c:85
-msgid " Whole line completion (^L^N^P)"
-msgstr " ¾ã¦æ¦Û°Ê§¹¦¨ (^L^N^P)"
-
-#: ../edit.c:86
-msgid " File name completion (^F^N^P)"
-msgstr " ÀɦW¦Û°Ê§¹¦¨ (^F^N^P)"
-
-#: ../edit.c:87
-msgid " Tag completion (^]^N^P)"
-msgstr " ¼ÐÅҦ۰ʧ¹¦¨ (^]^N^P)"
-
-#: ../edit.c:88
-msgid " Path pattern completion (^N^P)"
-msgstr " ¸ô®|¦Û°Ê§¹¦¨ (^N^P)"
-
-#: ../edit.c:89
-msgid " Definition completion (^D^N^P)"
-msgstr " ©w¸q¦Û°Ê§¹¦¨ (^D^N^P)"
-
-#: ../edit.c:91
-msgid " Dictionary completion (^K^N^P)"
-msgstr " ¦r¨å¦Û°Ê§¹¦¨ (^K^N^P)"
-
-#: ../edit.c:92
-msgid " Thesaurus completion (^T^N^P)"
-msgstr " Thesaurus ¦Û°Ê§¹¦¨ (^T^N^P)"
-
-#: ../edit.c:93
-msgid " Command-line completion (^V^N^P)"
-msgstr " ©R¥O¦C¦Û°Ê§¹¦¨ (^V^N^P)"
-
-#: ../edit.c:94
-#, fuzzy
-msgid " User defined completion (^U^N^P)"
-msgstr " ¾ã¦æ¦Û°Ê§¹¦¨ (^L^N^P)"
-
-#: ../edit.c:95
-#, fuzzy
-msgid " Omni completion (^O^N^P)"
-msgstr " ¼ÐÅҦ۰ʧ¹¦¨ (^]^N^P)"
-
-#: ../edit.c:96
-#, fuzzy
-msgid " Spelling suggestion (s^N^P)"
-msgstr " ¾ã¦æ¦Û°Ê§¹¦¨ (^L^N^P)"
-
-#: ../edit.c:97
-msgid " Keyword Local completion (^N^P)"
-msgstr " °Ï°ìÃöÁä¦r¦Û°Ê§¹¦¨ (^N^P)"
-
-#: ../edit.c:100
-msgid "Hit end of paragraph"
-msgstr "¤w¨ì¬q¸¨µ²§À"
-
-#: ../edit.c:101
-msgid "E839: Completion function changed window"
-msgstr ""
-
-#: ../edit.c:102
-msgid "E840: Completion function deleted text"
-msgstr ""
-
-#: ../edit.c:1847
-msgid "'dictionary' option is empty"
-msgstr "¿ï¶µ 'dictionary' ¥¼³]©w"
-
-#: ../edit.c:1848
-msgid "'thesaurus' option is empty"
-msgstr "¿ï¶µ 'thesaurus' ¥¼³]©w"
-
-#: ../edit.c:2655
-#, c-format
-msgid "Scanning dictionary: %s"
-msgstr "±½ºË¦r¨å: %s"
-
-#: ../edit.c:3079
-msgid " (insert) Scroll (^E/^Y)"
-msgstr " (´¡¤J) Scroll (^E/^Y)"
-
-#: ../edit.c:3081
-msgid " (replace) Scroll (^E/^Y)"
-msgstr " (¨ú¥N) Scroll (^E/^Y)"
-
-#: ../edit.c:3587
-#, c-format
-msgid "Scanning: %s"
-msgstr "±½ºË¤¤: %s"
-
-#: ../edit.c:3614
-msgid "Scanning tags."
-msgstr "±½ºË¼ÐÅÒ."
-
-#: ../edit.c:4519
-msgid " Adding"
-msgstr " ¼W¥["
-
-#. showmode might reset the internal line pointers, so it must
-#. * be called before line = ml_get(), or when this address is no
-#. * longer needed. -- Acevedo.
-#.
-#: ../edit.c:4562
-msgid "-- Searching..."
-msgstr "-- ·j´M¤¤..."
-
-#: ../edit.c:4618
-msgid "Back at original"
-msgstr "¦^¨ì°_ÂI"
-
-#: ../edit.c:4621
-msgid "Word from other line"
-msgstr "±q§O¦æ¶}©lªº¦r (?)"
-
-#: ../edit.c:4624
-msgid "The only match"
-msgstr "¥u¦³¦¹¶µ²Å¦X"
-
-#: ../edit.c:4680
-#, c-format
-msgid "match %d of %d"
-msgstr "§ä¨ì %d / %d"
-
-#: ../edit.c:4684
-#, c-format
-msgid "match %d"
-msgstr "²Å¦X %d"
-
-#: ../eval.c:137
-#, fuzzy
-msgid "E18: Unexpected characters in :let"
-msgstr "E18: '=' «e­±¥X²{¤F¿ù»~ªº¦r¤¸"
-
-#: ../eval.c:138
-#, fuzzy, c-format
-msgid "E684: list index out of range: %<PRId64>"
-msgstr "E322: ¦æ¸¹¶W¥X½d³ò: %<PRId64> ¶W¹Lµ²§À"
-
-#: ../eval.c:139
-#, c-format
-msgid "E121: Undefined variable: %s"
-msgstr "E121: ÅÜ¼Æ %s ©|¥¼©w¸q"
-
-#: ../eval.c:140
-msgid "E111: Missing ']'"
-msgstr "E111: ¯Ê¤Ö¹ïÀ³ªº \"]\""
-
-#: ../eval.c:141
-#, fuzzy, c-format
-msgid "E686: Argument of %s must be a List"
-msgstr "E487: °Ñ¼ÆÀ³¸Ó¬O¥¿¼Æ"
-
-#: ../eval.c:143
-#, fuzzy, c-format
-msgid "E712: Argument of %s must be a List or Dictionary"
-msgstr "E487: °Ñ¼ÆÀ³¸Ó¬O¥¿¼Æ"
-
-#: ../eval.c:144
-#, fuzzy
-msgid "E713: Cannot use empty key for Dictionary"
-msgstr "E214: §ä¤£¨ì¼g¤J¥Îªº¼È¦sÀÉ"
-
-#: ../eval.c:145
-#, fuzzy
-msgid "E714: List required"
-msgstr "E471: »Ý­n«ü¥O°Ñ¼Æ"
-
-#: ../eval.c:146
-#, fuzzy
-msgid "E715: Dictionary required"
-msgstr "E129: »Ý­n¨ç¦¡¦WºÙ"
-
-#: ../eval.c:147
-#, c-format
-msgid "E118: Too many arguments for function: %s"
-msgstr "E118: ¨ç¦¡ %s ªº¤Þ¼Æ¹L¦h"
-
-#: ../eval.c:148
-#, c-format
-msgid "E716: Key not present in Dictionary: %s"
-msgstr ""
-
-#: ../eval.c:150
-#, c-format
-msgid "E122: Function %s already exists, add ! to replace it"
-msgstr "E122: ¨ç¦¡ %s ¤w¸g¦s¦b, ½Ð¨Ï¥Î ! ±j¨î¨ú¥N"
-
-#: ../eval.c:151
-#, fuzzy
-msgid "E717: Dictionary entry already exists"
-msgstr "E95: ¤w¦³½w½Ä°Ï¨Ï¥Î³o­Ó¦W¦r"
-
-#: ../eval.c:152
-#, fuzzy
-msgid "E718: Funcref required"
-msgstr "E129: »Ý­n¨ç¦¡¦WºÙ"
-
-#: ../eval.c:153
-#, fuzzy
-msgid "E719: Cannot use [:] with a Dictionary"
-msgstr "E360: ¤£¯à¥Î -f ¿ï¶µ°õ¦æ shell"
-
-#: ../eval.c:154
-#, c-format
-msgid "E734: Wrong variable type for %s="
-msgstr ""
-
-#: ../eval.c:155
-#, fuzzy, c-format
-msgid "E130: Unknown function: %s"
-msgstr "E117: ¥¼©w¸qªº¨ç¦¡: %s"
-
-#: ../eval.c:156
-#, c-format
-msgid "E461: Illegal variable name: %s"
-msgstr "E461: ¤£¦XªkªºÅܼƦWºÙ: %s"
-
-#: ../eval.c:157
-msgid "E806: using Float as a String"
-msgstr ""
-
-#: ../eval.c:1830
-msgid "E687: Less targets than List items"
-msgstr ""
-
-#: ../eval.c:1834
-msgid "E688: More targets than List items"
-msgstr ""
-
-#: ../eval.c:1906
-msgid "Double ; in list of variables"
-msgstr ""
-
-#: ../eval.c:2078
-#, fuzzy, c-format
-msgid "E738: Can't list variables for %s"
-msgstr "E138: µLªk¼g¤J viminfo ÀÉ®× %s !"
-
-#: ../eval.c:2391
-msgid "E689: Can only index a List or Dictionary"
-msgstr ""
-
-#: ../eval.c:2396
-msgid "E708: [:] must come last"
-msgstr ""
-
-#: ../eval.c:2439
-msgid "E709: [:] requires a List value"
-msgstr ""
-
-#: ../eval.c:2674
-msgid "E710: List value has more items than target"
-msgstr ""
-
-#: ../eval.c:2678
-msgid "E711: List value has not enough items"
-msgstr ""
-
-#: ../eval.c:2867
-#, fuzzy
-msgid "E690: Missing \"in\" after :for"
-msgstr "E69: %s%%[ «á¯Ê¤Ö ]"
-
-#: ../eval.c:3063
-#, c-format
-msgid "E107: Missing parentheses: %s"
-msgstr "E107: ¯Ê¤Ö¹ïÀ³ªº¬A¸¹: %s"
-
-#: ../eval.c:3263
-#, c-format
-msgid "E108: No such variable: \"%s\""
-msgstr "E108: µL¦¹ÅܼÆ: \"%s\""
-
-#: ../eval.c:3333
-msgid "E743: variable nested too deep for (un)lock"
-msgstr ""
-
-#: ../eval.c:3630
-msgid "E109: Missing ':' after '?'"
-msgstr "E109: '?' «á¯Ê¤Ö ':'"
-
-#: ../eval.c:3893
-msgid "E691: Can only compare List with List"
-msgstr ""
-
-#: ../eval.c:3895
-#, fuzzy
-msgid "E692: Invalid operation for Lists"
-msgstr "E449: ¦¬¨ì¤£¥¿½Tªº¹Bºâ¦¡"
-
-#: ../eval.c:3915
-msgid "E735: Can only compare Dictionary with Dictionary"
-msgstr ""
-
-#: ../eval.c:3917
-#, fuzzy
-msgid "E736: Invalid operation for Dictionary"
-msgstr "E116: ¨ç¦¡ %s ªº¤Þ¼Æ¤£¥¿½T"
-
-#: ../eval.c:3932
-msgid "E693: Can only compare Funcref with Funcref"
-msgstr ""
-
-#: ../eval.c:3934
-#, fuzzy
-msgid "E694: Invalid operation for Funcrefs"
-msgstr "E116: ¨ç¦¡ %s ªº¤Þ¼Æ¤£¥¿½T"
-
-#: ../eval.c:4277
-#, fuzzy
-msgid "E804: Cannot use '%' with Float"
-msgstr "E360: ¤£¯à¥Î -f ¿ï¶µ°õ¦æ shell"
-
-#: ../eval.c:4478
-msgid "E110: Missing ')'"
-msgstr "E110: ¯Ê¤Ö¹ïÀ³ªº \")\""
-
-#: ../eval.c:4609
-#, fuzzy
-msgid "E695: Cannot index a Funcref"
-msgstr "E90: µLªkÄÀ©ñ³Ì«á¤@­Ó½w½Ä°Ï"
-
-#: ../eval.c:4839
-#, c-format
-msgid "E112: Option name missing: %s"
-msgstr "E112: ¯Ê¤Ö¿ï¶µ¦WºÙ: %s"
-
-#: ../eval.c:4855
-#, c-format
-msgid "E113: Unknown option: %s"
-msgstr "E113: ¤£¥¿½Tªº¿ï¶µ: %s"
-
-#: ../eval.c:4904
-#, c-format
-msgid "E114: Missing quote: %s"
-msgstr "E114: ¯Ê¤Ö¤Þ¸¹: %s"
-
-#: ../eval.c:5020
-#, c-format
-msgid "E115: Missing quote: %s"
-msgstr "E115: ¯Ê¤Ö¤Þ¸¹: %s"
-
-#: ../eval.c:5084
-#, fuzzy, c-format
-msgid "E696: Missing comma in List: %s"
-msgstr "E405: ¯Ê¤Ö¬Ûµ¥²Å¸¹: %s"
-
-#: ../eval.c:5091
-#, fuzzy, c-format
-msgid "E697: Missing end of List ']': %s"
-msgstr "E398: ¯Ê¤Ö \"=\": %s"
-
-#: ../eval.c:6475
-#, fuzzy, c-format
-msgid "E720: Missing colon in Dictionary: %s"
-msgstr "E242: §ä¤£¨ìÃC¦â: %s"
-
-#: ../eval.c:6499
-#, c-format
-msgid "E721: Duplicate key in Dictionary: \"%s\""
-msgstr ""
-
-#: ../eval.c:6517
-#, fuzzy, c-format
-msgid "E722: Missing comma in Dictionary: %s"
-msgstr "E242: §ä¤£¨ìÃC¦â: %s"
-
-#: ../eval.c:6524
-#, fuzzy, c-format
-msgid "E723: Missing end of Dictionary '}': %s"
-msgstr "E126: ¯Ê¤Ö :endfunction"
-
-#: ../eval.c:6555
-#, fuzzy
-msgid "E724: variable nested too deep for displaying"
-msgstr "E22: ±_ª¬»¼°j©I¥s¤Ó¦h¼h"
-
-#: ../eval.c:7188
-#, fuzzy, c-format
-msgid "E740: Too many arguments for function %s"
-msgstr "E118: ¨ç¦¡ %s ªº¤Þ¼Æ¹L¦h"
-
-#: ../eval.c:7190
-#, c-format
-msgid "E116: Invalid arguments for function %s"
-msgstr "E116: ¨ç¦¡ %s ªº¤Þ¼Æ¤£¥¿½T"
-
-#: ../eval.c:7377
-#, c-format
-msgid "E117: Unknown function: %s"
-msgstr "E117: ¥¼©w¸qªº¨ç¦¡: %s"
-
-#: ../eval.c:7383
-#, c-format
-msgid "E119: Not enough arguments for function: %s"
-msgstr "E119: ¨ç¦¡ %s ªº¤Þ¼Æ¤Ó¤Ö"
-
-#: ../eval.c:7387
-#, c-format
-msgid "E120: Using <SID> not in a script context: %s"
-msgstr "E120: <SID> ¤£¯à¦b script ¥»¤å¥~¨Ï¥Î: %s"
-
-#: ../eval.c:7391
-#, c-format
-msgid "E725: Calling dict function without Dictionary: %s"
-msgstr ""
-
-#: ../eval.c:7453
-#, fuzzy
-msgid "E808: Number or Float required"
-msgstr "E521: = «á»Ý­n¦³¼Æ¦r"
-
-#: ../eval.c:7503
-#, fuzzy
-msgid "add() argument"
-msgstr "¤£¥¿½Tªº°Ñ¼Æ: "
-
-#: ../eval.c:7907
-#, fuzzy
-msgid "E699: Too many arguments"
-msgstr "¤Ó¦h½s¿è°Ñ¼Æ"
-
-#: ../eval.c:8073
-#, fuzzy
-msgid "E785: complete() can only be used in Insert mode"
-msgstr "E328: ¿ï³æ¥u¯à¦b¨ä¥¦¼Ò¦¡¤¤¨Ï¥Î"
-
-#: ../eval.c:8156
-msgid "&Ok"
-msgstr "½T©w(&O)"
-
-#: ../eval.c:8676
-#, fuzzy, c-format
-msgid "E737: Key already exists: %s"
-msgstr "E227: %s ªº mapping ¤w¸g¦s¦b"
-
-#: ../eval.c:8692
-msgid "extend() argument"
-msgstr ""
-
-#: ../eval.c:8915
-#, fuzzy
-msgid "map() argument"
-msgstr "vim [°Ñ¼Æ] "
-
-#: ../eval.c:8916
-msgid "filter() argument"
-msgstr ""
-
-#: ../eval.c:9229
-#, c-format
-msgid "+-%s%3ld lines: "
-msgstr "+-%s%3ld ¦æ: "
-
-#: ../eval.c:9291
-#, fuzzy, c-format
-msgid "E700: Unknown function: %s"
-msgstr "E117: ¥¼©w¸qªº¨ç¦¡: %s"
-
-#: ../eval.c:10729
-msgid "called inputrestore() more often than inputsave()"
-msgstr "©I¥s inputrestore() ªº¦¸¼Æ¤ñ inputsave() ÁÙ¦h"
-
-#: ../eval.c:10771
-#, fuzzy
-msgid "insert() argument"
-msgstr "¤Ó¦h½s¿è°Ñ¼Æ"
-
-#: ../eval.c:10841
-#, fuzzy
-msgid "E786: Range not allowed"
-msgstr "E481: ¤£¥i¨Ï¥Î½d³ò«ü¥O"
-
-#: ../eval.c:11140
-#, fuzzy
-msgid "E701: Invalid type for len()"
-msgstr "E596: ¤£¥¿½Tªº¦r«¬"
-
-#: ../eval.c:11980
-msgid "E726: Stride is zero"
-msgstr ""
-
-#: ../eval.c:11982
-msgid "E727: Start past end"
-msgstr ""
-
-#: ../eval.c:12024 ../eval.c:15297
-msgid "<empty>"
-msgstr ""
-
-#: ../eval.c:12282
-msgid "remove() argument"
-msgstr ""
-
-#: ../eval.c:12466
-msgid "E655: Too many symbolic links (cycle?)"
-msgstr "E655: ¤Ó¦h¼hªº²Å¸¹Ãìµ²(symlink) (´`Àô?)"
-
-#: ../eval.c:12593
-msgid "reverse() argument"
-msgstr ""
-
-#: ../eval.c:13721
-msgid "sort() argument"
-msgstr ""
-
-#: ../eval.c:13721
-#, fuzzy
-msgid "uniq() argument"
-msgstr "¤£¥¿½Tªº°Ñ¼Æ: "
-
-#: ../eval.c:13776
-#, fuzzy
-msgid "E702: Sort compare function failed"
-msgstr "E237: µLªk¿ï¾Ü¦¹¦Lªí¾÷"
-
-#: ../eval.c:13806
-msgid "E882: Uniq compare function failed"
-msgstr ""
-
-#: ../eval.c:14085
-msgid "(Invalid)"
-msgstr "(¤£¥¿½T)"
-
-#: ../eval.c:14590
-#, fuzzy
-msgid "E677: Error writing temp file"
-msgstr "E208: ¼g¤JÀÉ®× \"%s\" ¿ù»~"
-
-#: ../eval.c:16159
-msgid "E805: Using a Float as a Number"
-msgstr ""
-
-#: ../eval.c:16162
-msgid "E703: Using a Funcref as a Number"
-msgstr ""
-
-#: ../eval.c:16170
-msgid "E745: Using a List as a Number"
-msgstr ""
-
-#: ../eval.c:16173
-msgid "E728: Using a Dictionary as a Number"
-msgstr ""
-
-#: ../eval.c:16259
-msgid "E729: using Funcref as a String"
-msgstr ""
-
-#: ../eval.c:16262
-#, fuzzy
-msgid "E730: using List as a String"
-msgstr "E374: ®æ¦¡¤Æ¦r¦ê¸Ì¤Ö¤F ]"
-
-#: ../eval.c:16265
-msgid "E731: using Dictionary as a String"
-msgstr ""
-
-#: ../eval.c:16619
-#, fuzzy, c-format
-msgid "E706: Variable type mismatch for: %s"
-msgstr "E93: §ä¨ì¤@­Ó¥H¤Wªº %s"
-
-#: ../eval.c:16705
-#, fuzzy, c-format
-msgid "E795: Cannot delete variable %s"
-msgstr "E46: µLªk³]©w°ßŪÅÜ¼Æ \"%s\""
-
-#: ../eval.c:16724
-#, fuzzy, c-format
-msgid "E704: Funcref variable name must start with a capital: %s"
-msgstr "E128: ¨ç¦¡¦WºÙ²Ä¤@­Ó¦r¥À¥²¶·¤j¼g: %s"
-
-#: ../eval.c:16732
-#, c-format
-msgid "E705: Variable name conflicts with existing function: %s"
-msgstr ""
-
-#: ../eval.c:16763
-#, c-format
-msgid "E741: Value is locked: %s"
-msgstr ""
-
-#: ../eval.c:16764 ../eval.c:16769 ../message.c:1839
-msgid "Unknown"
-msgstr "¥¼ª¾"
-
-#: ../eval.c:16768
-#, fuzzy, c-format
-msgid "E742: Cannot change value of %s"
-msgstr "E284: ¤£¯à³]©w IC ¼Æ­È"
-
-#: ../eval.c:16838
-msgid "E698: variable nested too deep for making a copy"
-msgstr ""
-
-#: ../eval.c:17249
-#, c-format
-msgid "E123: Undefined function: %s"
-msgstr "E123: ¨ç¦¡ %s ©|¥¼©w¸q"
-
-#: ../eval.c:17260
-#, c-format
-msgid "E124: Missing '(': %s"
-msgstr "E124: ¯Ê¤Ö \"(\": %s"
-
-#: ../eval.c:17293
-#, fuzzy
-msgid "E862: Cannot use g: here"
-msgstr "E284: ¤£¯à³]©w IC ¼Æ­È"
-
-#: ../eval.c:17312
-#, c-format
-msgid "E125: Illegal argument: %s"
-msgstr "E125: °Ñ¼Æ¤£¥¿½T: %s"
-
-#: ../eval.c:17323
-#, fuzzy, c-format
-msgid "E853: Duplicate argument name: %s"
-msgstr "E154: ¼ÐÅÒ(tag) \"%s\" ¦bÀÉ®× %s ¸Ì­«½Æ¥X²{¦h¦¸"
-
-#: ../eval.c:17416
-msgid "E126: Missing :endfunction"
-msgstr "E126: ¯Ê¤Ö :endfunction"
-
-#: ../eval.c:17537
-#, fuzzy, c-format
-msgid "E707: Function name conflicts with variable: %s"
-msgstr "E128: ¨ç¦¡¦WºÙ²Ä¤@­Ó¦r¥À¥²¶·¤j¼g: %s"
-
-#: ../eval.c:17549
-#, c-format
-msgid "E127: Cannot redefine function %s: It is in use"
-msgstr "E127: ¨ç¦¡ %s ¥¿¦b¨Ï¥Î¤¤¡AµLªk­«·s©w¸q"
-
-#: ../eval.c:17604
-#, fuzzy, c-format
-msgid "E746: Function name does not match script file name: %s"
-msgstr "E128: ¨ç¦¡¦WºÙ²Ä¤@­Ó¦r¥À¥²¶·¤j¼g: %s"
-
-#: ../eval.c:17716
-msgid "E129: Function name required"
-msgstr "E129: »Ý­n¨ç¦¡¦WºÙ"
-
-#: ../eval.c:17824
-#, fuzzy, c-format
-msgid "E128: Function name must start with a capital or \"s:\": %s"
-msgstr "E128: ¨ç¦¡¦WºÙ²Ä¤@­Ó¦r¥À¥²¶·¤j¼g: %s"
-
-#: ../eval.c:17833
-#, fuzzy, c-format
-msgid "E884: Function name cannot contain a colon: %s"
-msgstr "E128: ¨ç¦¡¦WºÙ²Ä¤@­Ó¦r¥À¥²¶·¤j¼g: %s"
-
-#: ../eval.c:18336
-#, c-format
-msgid "E131: Cannot delete function %s: It is in use"
-msgstr "E131: ¨ç¦¡ %s ¥¿¦b¨Ï¥Î¤¤¡AµLªk§R°£"
-
-#: ../eval.c:18441
-msgid "E132: Function call depth is higher than 'maxfuncdepth'"
-msgstr "E132: ¨ç¦¡»¼°j©I¥s¼h¼Æ¶W¹L 'maxfuncdepth'"
-
-#: ../eval.c:18568
-#, c-format
-msgid "calling %s"
-msgstr "©I¥s %s"
-
-#: ../eval.c:18651
-#, c-format
-msgid "%s aborted"
-msgstr "%s ³Q±j¨î¤¤Â_°õ¦æ "
-
-#: ../eval.c:18653
-#, c-format
-msgid "%s returning #%<PRId64>"
-msgstr "%s ¶Ç¦^­È #%<PRId64> "
-
-#: ../eval.c:18670
-#, fuzzy, c-format
-msgid "%s returning %s"
-msgstr "%s ¶Ç¦^­È \"%s\""
-
-#: ../eval.c:18691 ../ex_cmds2.c:2695
-#, c-format
-msgid "continuing in %s"
-msgstr "Ä~Äò: %s"
-
-#: ../eval.c:18795
-msgid "E133: :return not inside a function"
-msgstr "E133: :return ¥²¶·¦b¨ç¦¡¸Ì¨Ï¥Î"
-
-#: ../eval.c:19159
-msgid ""
-"\n"
-"# global variables:\n"
-msgstr ""
-"\n"
-"# ¥þ°ìÅܼÆ:\n"
-
-#: ../eval.c:19254
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\t¤W¦¸³]©w: "
-
-#: ../eval.c:19272
-#, fuzzy
-msgid "No old files"
-msgstr "¨S¦³¤Þ¤JÀÉ®×"
-
-#: ../ex_cmds.c:122
-#, c-format
-msgid "<%s>%s%s %d, Hex %02x, Octal %03o"
-msgstr "<%s>%s%s %d, ¤Q¤»¶i¦ì %02x, ¤K¶i¦ì %03o"
-
-#: ../ex_cmds.c:145
-#, c-format
-msgid "> %d, Hex %04x, Octal %o"
-msgstr "> %d, ¤Q¤»¶i¦ì %04x, ¤K¶i¦ì %o"
-
-#: ../ex_cmds.c:146
-#, c-format
-msgid "> %d, Hex %08x, Octal %o"
-msgstr "> %d, ¤Q¤»¶i¦ì %08x, ¤K¶i¦ì %o"
-
-#: ../ex_cmds.c:684
-msgid "E134: Move lines into themselves"
-msgstr "E134: µLªk§â¦æ²¾¨ì¥¦¦Û¤w¤º"
-
-#: ../ex_cmds.c:747
-msgid "1 line moved"
-msgstr "¤w·h²¾ 1 ¦æ "
-
-#: ../ex_cmds.c:749
-#, c-format
-msgid "%<PRId64> lines moved"
-msgstr "¤w·h²¾ %<PRId64> ¦æ "
-
-#: ../ex_cmds.c:1175
-#, c-format
-msgid "%<PRId64> lines filtered"
-msgstr "¤w³B²z %<PRId64> ¦æ "
-
-#: ../ex_cmds.c:1194
-msgid "E135: *Filter* Autocommands must not change current buffer"
-msgstr "E135: *Filter* Autocommand ¤£¥i¥H§ó§ï½w½Ä°Ïªº¤º®e"
-
-#: ../ex_cmds.c:1244
-msgid "[No write since last change]\n"
-msgstr "[§ó·s«á©|¥¼Àx¦s]\n"
-
-#: ../ex_cmds.c:1424
-#, c-format
-msgid "%sviminfo: %s in line: "
-msgstr "%sviminfo: %s ¦b¦æ¤¤: "
-
-#: ../ex_cmds.c:1431
-msgid "E136: viminfo: Too many errors, skipping rest of file"
-msgstr "E136: viminfo: ¹L¦h¿ù»~, ©¿²¤Àɮרä¾l³¡¤À"
-
-#: ../ex_cmds.c:1458
-#, c-format
-msgid "Reading viminfo file \"%s\"%s%s%s"
-msgstr "Ū¨ú viminfo ÀÉ®× \"%s\"%s%s%s"
-
-#: ../ex_cmds.c:1460
-msgid " info"
-msgstr " °T®§"
-
-#: ../ex_cmds.c:1461
-msgid " marks"
-msgstr " ¼Ð°O"
-
-#: ../ex_cmds.c:1462
-#, fuzzy
-msgid " oldfiles"
-msgstr "¨S¦³¤Þ¤JÀÉ®×"
-
-#: ../ex_cmds.c:1463
-msgid " FAILED"
-msgstr " ¥¢±Ñ"
-
-#. avoid a wait_return for this message, it's annoying
-#: ../ex_cmds.c:1541
-#, c-format
-msgid "E137: Viminfo file is not writable: %s"
-msgstr "E137: Viminfo ÀÉ®×µLªk¼g¤J: %s"
-
-#: ../ex_cmds.c:1626
-#, c-format
-msgid "E138: Can't write viminfo file %s!"
-msgstr "E138: µLªk¼g¤J viminfo ÀÉ®× %s !"
-
-#: ../ex_cmds.c:1635
-#, c-format
-msgid "Writing viminfo file \"%s\""
-msgstr "¼g¤J viminfo ÀÉ®× \"%s\" ¤¤"
-
-#. Write the info:
-#: ../ex_cmds.c:1720
-#, c-format
-msgid "# This viminfo file was generated by Vim %s.\n"
-msgstr "# ¥» viminfo Àɮ׬O¥Ñ Vim %s ©Ò²£¥Í.\n"
-
-#: ../ex_cmds.c:1722
-msgid ""
-"# You may edit it if you're careful!\n"
-"\n"
-msgstr ""
-"# ¦pªG·Q­n¦Û¦æ­×§ï½Ð¯S§O¤p¤ß¡I\n"
-"\n"
-
-#: ../ex_cmds.c:1723
-msgid "# Value of 'encoding' when this file was written\n"
-msgstr "# 'encoding' ¦b¦¹Àɫإ߮ɪº­È\n"
-
-#: ../ex_cmds.c:1800
-msgid "Illegal starting char"
-msgstr "µL®Äªº°_©l¦r¤¸"
-
-#: ../ex_cmds.c:2162
-msgid "Write partial file?"
-msgstr "­n¼g¤J³¡¤ÀÀÉ®×¶Ü¡H"
-
-#: ../ex_cmds.c:2166
-msgid "E140: Use ! to write partial buffer"
-msgstr "E140: ½Ð¨Ï¥Î ! ¥H¼g¤J³¡¤À½w½Ä°Ï"
-
-#: ../ex_cmds.c:2281
-#, fuzzy, c-format
-msgid "Overwrite existing file \"%s\"?"
-msgstr "­nÂмg¤w¦s¦bªºÀÉ®× \"%.*s\"¡H"
-
-#: ../ex_cmds.c:2317
-#, c-format
-msgid "Swap file \"%s\" exists, overwrite anyway?"
-msgstr ""
-
-#: ../ex_cmds.c:2326
-#, fuzzy, c-format
-msgid "E768: Swap file exists: %s (:silent! overrides)"
-msgstr "E13: Àɮפw¸g¦s¦b (¥i¥Î ! ±j¨î¨ú¥N)"
-
-#: ../ex_cmds.c:2381
-#, c-format
-msgid "E141: No file name for buffer %<PRId64>"
-msgstr "E141: ½w½Ä°Ï %<PRId64> ¨S¦³ÀɮצWºÙ"
-
-#: ../ex_cmds.c:2412
-msgid "E142: File not written: Writing is disabled by 'write' option"
-msgstr "E142: ÀÉ®×¥¼¼g¤J¡A¦]¬° 'write' ¿ï¶µ³QÃö³¬"
-
-#: ../ex_cmds.c:2434
-#, fuzzy, c-format
-msgid ""
-"'readonly' option is set for \"%s\".\n"
-"Do you wish to write anyway?"
-msgstr ""
-"\"%.*s\" ¤w³]©w 'readonly' ¿ï¶µ.\n"
-"½T©w­nÂмg¶Ü¡H"
-
-#: ../ex_cmds.c:2439
-#, c-format
-msgid ""
-"File permissions of \"%s\" are read-only.\n"
-"It may still be possible to write it.\n"
-"Do you wish to try?"
-msgstr ""
-
-#: ../ex_cmds.c:2451
-#, fuzzy, c-format
-msgid "E505: \"%s\" is read-only (add ! to override)"
-msgstr "¬O°ßŪÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../ex_cmds.c:3120
-#, c-format
-msgid "E143: Autocommands unexpectedly deleted new buffer %s"
-msgstr "E143: Autocommands ·N¥~¦a§R°£·s½w½Ä°Ï %s"
-
-#: ../ex_cmds.c:3313
-msgid "E144: non-numeric argument to :z"
-msgstr "E144: :z ¤£±µ¨ü«D¼Æ¦rªº°Ñ¼Æ"
-
-#: ../ex_cmds.c:3404
-msgid "E145: Shell commands not allowed in rvim"
-msgstr "E145: rvim ¤¤¸T¤î¨Ï¥Î shell ©R¥O"
-
-#: ../ex_cmds.c:3498
-msgid "E146: Regular expressions can't be delimited by letters"
-msgstr "E146: Regular expression µLªk¥Î¦r¥À¤À¹j (?)"
-
-#: ../ex_cmds.c:3964
-#, c-format
-msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
-msgstr "¨ú¥N¬° %s (y/n/a/q/^E/^Y)?"
-
-#: ../ex_cmds.c:4379
-msgid "(Interrupted) "
-msgstr "(¤w¤¤Â_) "
-
-#: ../ex_cmds.c:4384
-#, fuzzy
-msgid "1 match"
-msgstr "; ²Å¦X "
-
-#: ../ex_cmds.c:4384
-msgid "1 substitution"
-msgstr "¨ú¥N¤@²Õ "
-
-#: ../ex_cmds.c:4387
-#, fuzzy, c-format
-msgid "%<PRId64> matches"
-msgstr "%<PRId64> ¶µ§ïÅÜ"
-
-#: ../ex_cmds.c:4388
-#, c-format
-msgid "%<PRId64> substitutions"
-msgstr "¨ú¥N %<PRId64> ²Õ "
-
-#: ../ex_cmds.c:4392
-msgid " on 1 line"
-msgstr "¡A½d³ò¡G¤@¦æ "
-
-#: ../ex_cmds.c:4395
-#, c-format
-msgid " on %<PRId64> lines"
-msgstr "¡A½d³ò¡G %<PRId64> ¦æ "
-
-#: ../ex_cmds.c:4438
-msgid "E147: Cannot do :global recursive"
-msgstr "E147: :global µLªk»¼°j°õ¦æ "
-
-#: ../ex_cmds.c:4467
-msgid "E148: Regular expression missing from global"
-msgstr "E148: ¨S¦³¨Ï¥Î¹L Regular expression (?)"
-
-#: ../ex_cmds.c:4508
-#, c-format
-msgid "Pattern found in every line: %s"
-msgstr "¨C¤@¦æ³£§ä¤£¨ì: %s"
-
-#: ../ex_cmds.c:4510
-#, fuzzy, c-format
-msgid "Pattern not found: %s"
-msgstr "§ä¤£¨ì"
-
-#: ../ex_cmds.c:4587
-msgid ""
-"\n"
-"# Last Substitute String:\n"
-"$"
-msgstr ""
-"\n"
-"# «e¤@²Õ´À¥N¦r¦ê:\n"
-"$"
-
-#: ../ex_cmds.c:4679
-msgid "E478: Don't panic!"
-msgstr "E478: ¤£­nÅå·W!"
-
-#: ../ex_cmds.c:4717
-#, c-format
-msgid "E661: Sorry, no '%s' help for %s"
-msgstr "E661: ©êºp, ¨S¦³Ãö©ó %s-%s ªº»¡©ú"
-
-#: ../ex_cmds.c:4719
-#, c-format
-msgid "E149: Sorry, no help for %s"
-msgstr "E149: ©êºp, ¨S¦³ %s ªº»¡©ú"
-
-#: ../ex_cmds.c:4751
-#, c-format
-msgid "Sorry, help file \"%s\" not found"
-msgstr "©êºp, §ä¤£¨ì»¡©úÀÉ \"%s\""
-
-#: ../ex_cmds.c:5323
-#, c-format
-msgid "E150: Not a directory: %s"
-msgstr "E150: %s ¤£¬O¥Ø¿ý"
-
-#: ../ex_cmds.c:5446
-#, c-format
-msgid "E152: Cannot open %s for writing"
-msgstr "E152: µLªk¥H¼g¤J¼Ò¦¡¶}±Ò \"%s\""
-
-#: ../ex_cmds.c:5471
-#, c-format
-msgid "E153: Unable to open %s for reading"
-msgstr "E153: µLªkŪ¨úÀÉ®×: %s"
-
-#: ../ex_cmds.c:5500
-#, c-format
-msgid "E670: Mix of help file encodings within a language: %s"
-msgstr "E670: ¦P¤@»y¨¥ (%s) ¤¤¦³²V¦X¤£¦P¦r¤¸½s½Xªº»¡©úÀÉ"
-
-#: ../ex_cmds.c:5565
-#, fuzzy, c-format
-msgid "E154: Duplicate tag \"%s\" in file %s/%s"
-msgstr "E154: ¼ÐÅÒ(tag) \"%s\" ¦bÀÉ®× %s ¸Ì­«½Æ¥X²{¦h¦¸"
-
-#: ../ex_cmds.c:5687
-#, c-format
-msgid "E160: Unknown sign command: %s"
-msgstr "E160: ¥¼©w¸qªº sign command: %s"
-
-#: ../ex_cmds.c:5704
-msgid "E156: Missing sign name"
-msgstr "E156: ¯Ê¤Ö sign ¦WºÙ"
-
-#: ../ex_cmds.c:5746
-msgid "E612: Too many signs defined"
-msgstr "E612: ¤w©w¸q¤Ó¦h signs"
-
-#: ../ex_cmds.c:5813
-#, c-format
-msgid "E239: Invalid sign text: %s"
-msgstr "E239: ¤£¥¿½Tªº sign ¤å¦r: %s"
-
-#: ../ex_cmds.c:5844 ../ex_cmds.c:6035
-#, c-format
-msgid "E155: Unknown sign: %s"
-msgstr "E155: ¤£¥¿½Tªº sign: %s"
-
-#: ../ex_cmds.c:5877
-msgid "E159: Missing sign number"
-msgstr "E159: ¯Ê¤Ö sign number"
-
-#: ../ex_cmds.c:5971
-#, c-format
-msgid "E158: Invalid buffer name: %s"
-msgstr "E158: ½w½Ä°Ï¦WºÙ¿ù»~: %s"
-
-#: ../ex_cmds.c:6008
-#, c-format
-msgid "E157: Invalid sign ID: %<PRId64>"
-msgstr "E157: Sign ID ¿ù»~: %<PRId64>"
-
-#: ../ex_cmds.c:6066
-msgid " (not supported)"
-msgstr " (¤£¤ä´©) "
-
-#: ../ex_cmds.c:6169
-msgid "[Deleted]"
-msgstr "[¤w§R°£]"
-
-#: ../ex_cmds2.c:139
-msgid "Entering Debug mode. Type \"cont\" to continue."
-msgstr "¶i¤J°£¿ù¼Ò¦¡. ¿é¤J \"cont\" ¥H¦^¨ì¥¿±`¼Ò¦¡."
-
-#: ../ex_cmds2.c:143 ../ex_docmd.c:759
-#, c-format
-msgid "line %<PRId64>: %s"
-msgstr "¦æ %<PRId64>: %s"
-
-#: ../ex_cmds2.c:145
-#, c-format
-msgid "cmd: %s"
-msgstr "cmd: %s"
-
-#: ../ex_cmds2.c:322
-#, c-format
-msgid "Breakpoint in \"%s%s\" line %<PRId64>"
-msgstr "\"%s%s\" ¤¤Â_ÂI: ²Ä %<PRId64> ¦æ "
-
-#: ../ex_cmds2.c:581
-#, c-format
-msgid "E161: Breakpoint not found: %s"
-msgstr "E161: §ä¤£¨ì¤¤Â_ÂI: %s"
-
-#: ../ex_cmds2.c:611
-msgid "No breakpoints defined"
-msgstr "¨S¦³©w¸q¤¤Â_ÂI"
-
-#: ../ex_cmds2.c:617
-#, c-format
-msgid "%3d %s %s line %<PRId64>"
-msgstr "%3d %s %s ²Ä %<PRId64> ¦æ "
-
-#: ../ex_cmds2.c:942
-msgid "E750: First use \":profile start {fname}\""
-msgstr ""
-
-#: ../ex_cmds2.c:1269
-#, fuzzy, c-format
-msgid "Save changes to \"%s\"?"
-msgstr "±NÅܰʦsÀx¦Ü \"%.*s\"?"
-
-#: ../ex_cmds2.c:1271 ../ex_docmd.c:8851
-msgid "Untitled"
-msgstr "¥¼©R¦W"
-
-#: ../ex_cmds2.c:1421
-#, c-format
-msgid "E162: No write since last change for buffer \"%s\""
-msgstr "E162: ¤w§ó§ï¹L½w½Ä°Ï \"%s\" ¦ý©|¥¼¦sÀÉ (¥i¥Î ! ±j¨î°õ¦æ)"
-
-#: ../ex_cmds2.c:1480
-msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
-msgstr "ª`·N: ¤w¤Á´«¨ì¨ä¥¦½w½Ä°Ï (½ÐÀˬd Autocommands ¦³µL¿ù»~)"
-
-#: ../ex_cmds2.c:1826
-msgid "E163: There is only one file to edit"
-msgstr "E163: ¥u¦³¤@­ÓÀÉ®×¥i½s¿è"
-
-#: ../ex_cmds2.c:1828
-msgid "E164: Cannot go before first file"
-msgstr "E164: ¤w¸g¦b²Ä¤@­ÓÀɮפF"
-
-#: ../ex_cmds2.c:1830
-msgid "E165: Cannot go beyond last file"
-msgstr "E165: ¤w¸g¦b³Ì«á¤@­ÓÀɮפF"
-
-#: ../ex_cmds2.c:2175
-#, c-format
-msgid "E666: compiler not supported: %s"
-msgstr "E666: ½s;¹¤£¤ä´©: %s"
-
-#: ../ex_cmds2.c:2257
-#, c-format
-msgid "Searching for \"%s\" in \"%s\""
-msgstr "·j´M¤¤: \"%s\" -- \"%s\""
-
-#: ../ex_cmds2.c:2284
-#, c-format
-msgid "Searching for \"%s\""
-msgstr "·j´M¤¤: \"%s\""
-
-#: ../ex_cmds2.c:2307
-#, c-format
-msgid "not found in 'runtimepath': \"%s\""
-msgstr "¦b 'runtimepath' ¸Ì§ä¤£¨ì \"%s\""
-
-#: ../ex_cmds2.c:2472
-#, c-format
-msgid "Cannot source a directory: \"%s\""
-msgstr "µLªk°õ¦æ¥Ø¿ý¡G \"%s\""
-
-#: ../ex_cmds2.c:2518
-#, c-format
-msgid "could not source \"%s\""
-msgstr "µLªk°õ¦æ \"%s\""
-
-#: ../ex_cmds2.c:2520
-#, c-format
-msgid "line %<PRId64>: could not source \"%s\""
-msgstr "²Ä %<PRId64> ¦æ: µLªk°õ¦æ \"%s\""
-
-#: ../ex_cmds2.c:2535
-#, c-format
-msgid "sourcing \"%s\""
-msgstr "°õ¦æ \"%s\" ¤¤"
-
-#: ../ex_cmds2.c:2537
-#, c-format
-msgid "line %<PRId64>: sourcing \"%s\""
-msgstr "²Ä %<PRId64> ¦æ: µ²§ô°õ¦æ %s"
-
-#: ../ex_cmds2.c:2693
-#, c-format
-msgid "finished sourcing %s"
-msgstr "µ²§ô°õ¦æ %s"
-
-#: ../ex_cmds2.c:2765
-#, fuzzy
-msgid "modeline"
-msgstr "ÁÙ¦³¤@¦æ "
-
-#: ../ex_cmds2.c:2767
-#, fuzzy
-msgid "--cmd argument"
-msgstr "vim [°Ñ¼Æ] "
-
-#: ../ex_cmds2.c:2769
-#, fuzzy
-msgid "-c argument"
-msgstr "vim [°Ñ¼Æ] "
-
-#: ../ex_cmds2.c:2771
-msgid "environment variable"
-msgstr ""
-
-#: ../ex_cmds2.c:2773
-#, fuzzy
-msgid "error handler"
-msgstr "¿ù»~»P¤¤Â_"
-
-#: ../ex_cmds2.c:3020
-msgid "W15: Warning: Wrong line separator, ^M may be missing"
-msgstr "W15: ª`·N: ¿ù»~ªº¦æ¤À¹j¦r¤¸¡A¥i¯à¬O¤Ö¤F ^M"
-
-#: ../ex_cmds2.c:3139
-msgid "E167: :scriptencoding used outside of a sourced file"
-msgstr "E167: ¦b°õ¦æ script ÀÉ®×¥~¤£¥i¨Ï¥Î :scriptencoding"
-
-#: ../ex_cmds2.c:3166
-msgid "E168: :finish used outside of a sourced file"
-msgstr "E168: ¦b°õ¦æ script ÀÉ®×¥~¤£¥i¨Ï¥Î :finish"
-
-#: ../ex_cmds2.c:3389
-#, c-format
-msgid "Current %slanguage: \"%s\""
-msgstr "¥Ø«eªº %s»y¨¥: \"%s\""
-
-#: ../ex_cmds2.c:3404
-#, c-format
-msgid "E197: Cannot set language to \"%s\""
-msgstr "E197: ¤£¯à³]©w»y¨¥¦¨ \"%s\""
-
-#. don't redisplay the window
-#. don't wait for return
-#: ../ex_docmd.c:387
-msgid "Entering Ex mode. Type \"visual\" to go to Normal mode."
-msgstr "¶i¤J Ex ¼Ò¦¡. ¿é¤J \"visua\" ¥H¦^¨ì¥¿±`¼Ò¦¡."
-
-#: ../ex_docmd.c:428
-msgid "E501: At end-of-file"
-msgstr "E501: ¤w¨ìÀÉ®×µ²§À"
-
-#: ../ex_docmd.c:513
-msgid "E169: Command too recursive"
-msgstr "E169: ©R¥O»¼°j¼h¼Æ¹L¦h"
-
-#: ../ex_docmd.c:1006
-#, c-format
-msgid "E605: Exception not caught: %s"
-msgstr "E605: ¥¼ÄdºIªº¨Ò¥~¡G %s"
-
-#: ../ex_docmd.c:1085
-msgid "End of sourced file"
-msgstr "©R¥OÀɵ²§ô"
-
-#: ../ex_docmd.c:1086
-msgid "End of function"
-msgstr "¨ç¦¡µ²§À"
-
-#: ../ex_docmd.c:1628
-msgid "E464: Ambiguous use of user-defined command"
-msgstr "E464: ¨Ï¥ÎªÌ©w¸qªº©R¥O·|²V²c"
-
-#: ../ex_docmd.c:1638
-msgid "E492: Not an editor command"
-msgstr "E492: ¤£¬O½s¿è¾¹ªº©R¥O"
-
-#: ../ex_docmd.c:1729
-msgid "E493: Backwards range given"
-msgstr "E493: «ü©w¤F¦V«e°Ñ¦Òªº½d³ò"
-
-#: ../ex_docmd.c:1733
-msgid "Backwards range given, OK to swap"
-msgstr "«ü©w¤F¦V«e°Ñ¦Òªº½d³ò¡AOK to swap"
-
-#. append
-#. typed wrong
-#: ../ex_docmd.c:1787
-msgid "E494: Use w or w>>"
-msgstr "E494: ½Ð¨Ï¥Î w ©Î w>>"
-
-#: ../ex_docmd.c:3454
-msgid "E319: The command is not available in this version"
-msgstr "E319: ©êºp, ¥»©R¥O¦b¦¹ª©¥»¤¤¨S¦³¹ê§@"
-
-#: ../ex_docmd.c:3752
-msgid "E172: Only one file name allowed"
-msgstr "E172: ¥u¯à¦³¤@­ÓÀÉ"
-
-#: ../ex_docmd.c:4238
-msgid "1 more file to edit. Quit anyway?"
-msgstr "ÁÙ¦³¤@­ÓÀÉ®×¥¼½s¿è. ½T©w­nÂ÷¶}¡H"
-
-#: ../ex_docmd.c:4242
-#, c-format
-msgid "%d more files to edit. Quit anyway?"
-msgstr "ÁÙ¦³ %d ­ÓÀÉ®×¥¼½s¿è. ½T©w­nÂ÷¶}¡H"
-
-#: ../ex_docmd.c:4248
-msgid "E173: 1 more file to edit"
-msgstr "E173: ÁÙ¦³¤@­ÓÀÉ®×¥¼½s¿è "
-
-#: ../ex_docmd.c:4250
-#, c-format
-msgid "E173: %<PRId64> more files to edit"
-msgstr "E173: ÁÙ¦³ %<PRId64> ­ÓÀÉ®×¥¼½s¿è"
-
-#: ../ex_docmd.c:4320
-msgid "E174: Command already exists: add ! to replace it"
-msgstr "E174: ©R¥O¤w¸g¦s¦b, ½Ð¨Ï¥Î ! ±j¨î­«·s©w¸q"
-
-#: ../ex_docmd.c:4432
-msgid ""
-"\n"
-" Name Args Range Complete Definition"
-msgstr ""
-"\n"
-" ¦WºÙ °Ñ¼Æ ½d³ò §¹¾ã ©w¸q "
-
-#: ../ex_docmd.c:4516
-msgid "No user-defined commands found"
-msgstr "§ä¤£¨ì¨Ï¥ÎªÌ©w¸qªº©R¥O"
-
-#: ../ex_docmd.c:4538
-msgid "E175: No attribute specified"
-msgstr "E175: ¨S¦³«ü©wªºÄÝ©Ê"
-
-#: ../ex_docmd.c:4583
-msgid "E176: Invalid number of arguments"
-msgstr "E176: ¤£¥¿½Tªº°Ñ¼Æ¼Æ¥Ø"
-
-#: ../ex_docmd.c:4594
-msgid "E177: Count cannot be specified twice"
-msgstr "E177: ¤£¯à«ü©w¨â¦¸¼Æ¥Ø"
-
-#: ../ex_docmd.c:4603
-msgid "E178: Invalid default value for count"
-msgstr "E178: ¼Æ¥Øªº¹w³]°Ñ¼Æ¤£¥¿½T"
-
-#: ../ex_docmd.c:4625
-#, fuzzy
-msgid "E179: argument required for -complete"
-msgstr "E179: «ü¥O»Ý­n°Ñ¼Æ¤~¯à§¹¦¨"
-
-#: ../ex_docmd.c:4635
-#, c-format
-msgid "E181: Invalid attribute: %s"
-msgstr "E181: ¤£¥¿½TªºÄÝ©Ê: %s"
-
-#: ../ex_docmd.c:4678
-msgid "E182: Invalid command name"
-msgstr "E182: «ü¥O¦WºÙ¤£¥¿½T"
-
-#: ../ex_docmd.c:4691
-msgid "E183: User defined commands must start with an uppercase letter"
-msgstr "E183: ¨Ï¥ÎªÌ¦Û©w«ü¥O¥²¶·¥H¤j¼g¦r¥À¶}©l"
-
-#: ../ex_docmd.c:4696
-#, fuzzy
-msgid "E841: Reserved name, cannot be used for user defined command"
-msgstr "E464: ¨Ï¥ÎªÌ©w¸qªº©R¥O·|²V²c"
-
-#: ../ex_docmd.c:4751
-#, c-format
-msgid "E184: No such user-defined command: %s"
-msgstr "E184: ¨S¦³¨Ï¥ÎªÌ¦Û©wªº©R¥O¡G %s"
-
-#: ../ex_docmd.c:5219
-#, c-format
-msgid "E180: Invalid complete value: %s"
-msgstr "E180: ¤£§¹¾ãªº­È: '%s'"
-
-#: ../ex_docmd.c:5225
-msgid "E468: Completion argument only allowed for custom completion"
-msgstr "E468: ¦Û­q¸É§¹®É¤~¥i¸É§¹°Ñ¼Æ"
-
-#: ../ex_docmd.c:5231
-msgid "E467: Custom completion requires a function argument"
-msgstr "E467: ¦Û­q¸É§¹»Ý­n¨ç¦¡¬°°Ñ¼Æ"
-
-#: ../ex_docmd.c:5257
-#, fuzzy, c-format
-msgid "E185: Cannot find color scheme '%s'"
-msgstr "E185: §ä¤£¨ìÃC¦â¼Ë¦¡ %s"
-
-#: ../ex_docmd.c:5263
-msgid "Greetings, Vim user!"
-msgstr "¶Ù, Vim ¨Ï¥ÎªÌ¡I"
-
-#: ../ex_docmd.c:5431
-#, fuzzy
-msgid "E784: Cannot close last tab page"
-msgstr "E444: ¤£¯àÃö³¬³Ì«á¤@­Óµøµ¡"
-
-#: ../ex_docmd.c:5462
-#, fuzzy
-msgid "Already only one tab page"
-msgstr "¤w¸g¥u³Ñ¤@­Óµøµ¡¤F"
-
-#: ../ex_docmd.c:6004
-#, fuzzy, c-format
-msgid "Tab page %d"
-msgstr "²Ä %d ­¶"
-
-#: ../ex_docmd.c:6295
-msgid "No swap file"
-msgstr "µL¼È¦sÀÉ"
-
-#: ../ex_docmd.c:6478
-#, fuzzy
-msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
-msgstr "E509: µLªk«Ø¥ß³Æ¥÷ÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../ex_docmd.c:6485
-msgid "E186: No previous directory"
-msgstr "E186: ¨S¦³«e¤@­Ó¥Ø¿ý"
-
-#: ../ex_docmd.c:6530
-msgid "E187: Unknown"
-msgstr "E187: µLªk¿ìÃѪº¼Ð°O"
-
-#: ../ex_docmd.c:6610
-msgid "E465: :winsize requires two number arguments"
-msgstr "E465: :winsize »Ý­n¨â­Ó°Ñ¼Æ"
-
-#: ../ex_docmd.c:6655
-msgid "E188: Obtaining window position not implemented for this platform"
-msgstr "E188: ¦b±zªº¥­¥x¤WµLªkÀò±oµøµ¡¦ì¸m"
-
-#: ../ex_docmd.c:6662
-msgid "E466: :winpos requires two number arguments"
-msgstr "E466: :winpos »Ý­n¨â­Ó°Ñ¼Æ"
-
-#: ../ex_docmd.c:7241
-#, fuzzy, c-format
-msgid "E739: Cannot create directory: %s"
-msgstr "µLªk°õ¦æ¥Ø¿ý¡G \"%s\""
-
-#: ../ex_docmd.c:7268
-#, c-format
-msgid "E189: \"%s\" exists (add ! to override)"
-msgstr "E189: \"%s\" ¤w¦s¦b (½Ð¥Î ! ±j¨î°õ¦æ)"
-
-#: ../ex_docmd.c:7273
-#, c-format
-msgid "E190: Cannot open \"%s\" for writing"
-msgstr "E190: µLªk¥H¼g¤J¼Ò¦¡¶}±Ò \"%s\""
-
-#. set mark
-#: ../ex_docmd.c:7294
-msgid "E191: Argument must be a letter or forward/backward quote"
-msgstr "E191: °Ñ¼Æ¥²¶·¬O­^¤å¦r¥À©Î¦V«e/«áªº¤Þ¸¹"
-
-#: ../ex_docmd.c:7333
-msgid "E192: Recursive use of :normal too deep"
-msgstr "E192: :normal »¼°j¼h¼Æ¹L²`"
-
-#: ../ex_docmd.c:7807
-msgid "E194: No alternate file name to substitute for '#'"
-msgstr "E194: ¨S¦³ '#' ¥i´À¥NªºÀɦW"
-
-#: ../ex_docmd.c:7841
-msgid "E495: no autocommand file name to substitute for \"<afile>\""
-msgstr "E495: ¨S¦³ Autocommand ÀɦW¥H¨ú¥N \"<afile>\""
-
-#: ../ex_docmd.c:7850
-msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
-msgstr "E496: ¨S¦³ Autocommand ½w½Ä°Ï¦WºÙ¥H¨ú¥N \"<abuf>\""
-
-#: ../ex_docmd.c:7861
-msgid "E497: no autocommand match name to substitute for \"<amatch>\""
-msgstr "E497: ¨S¦³ Autocommand ²Å¦X¦WºÙ¥H¨ú¥N \"<amatch>\""
-
-#: ../ex_docmd.c:7870
-msgid "E498: no :source file name to substitute for \"<sfile>\""
-msgstr "E498: ¨S¦³ :source ÀɦW¥H¨ú¥N \"<sfile>\""
-
-#: ../ex_docmd.c:7876
-#, fuzzy
-msgid "E842: no line number to use for \"<slnum>\""
-msgstr "E498: ¨S¦³ :source ÀɦW¥H¨ú¥N \"<sfile>\""
-
-#: ../ex_docmd.c:7903
-#, fuzzy, c-format
-msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
-msgstr "E499: '%' ©Î '#' «ü¦VªÅÀɦW¡A¥u¯à¥Î©ó \":p:h\""
-
-#: ../ex_docmd.c:7905
-msgid "E500: Evaluates to an empty string"
-msgstr "E500: ¿é¤J¬°ªÅ¦r¦ê"
-
-#: ../ex_docmd.c:8838
-msgid "E195: Cannot open viminfo file for reading"
-msgstr "E195: µLªkŪ¨ú viminfo"
-
-#: ../ex_eval.c:464
-msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
-msgstr "E608: ¤£¯à :throw ¥Î 'Vim' ¶}ÀYªº¨Ò¥~"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:496
-#, c-format
-msgid "Exception thrown: %s"
-msgstr "¥á¥X¨Ò¥~¡G %s"
-
-#: ../ex_eval.c:545
-#, c-format
-msgid "Exception finished: %s"
-msgstr "¨Ò¥~µ²§ô¡G %s"
-
-#: ../ex_eval.c:546
-#, c-format
-msgid "Exception discarded: %s"
-msgstr "¤w¥á±ó¨Ò¥~¡G %s"
-
-#: ../ex_eval.c:588 ../ex_eval.c:634
-#, c-format
-msgid "%s, line %<PRId64>"
-msgstr "%s, ¦æ %<PRId64>"
-
-#. always scroll up, don't overwrite
-#: ../ex_eval.c:608
-#, c-format
-msgid "Exception caught: %s"
-msgstr "µo¥Í¨Ò¥~¡G%s"
-
-#: ../ex_eval.c:676
-#, c-format
-msgid "%s made pending"
-msgstr "%s ³y¦¨ pending"
-
-#: ../ex_eval.c:679
-#, c-format
-msgid "%s resumed"
-msgstr "%s ¤w¦^´_"
-
-#: ../ex_eval.c:683
-#, c-format
-msgid "%s discarded"
-msgstr "%s ¤w¥á±ó"
-
-#: ../ex_eval.c:708
-msgid "Exception"
-msgstr "¨Ò¥~"
-
-#: ../ex_eval.c:713
-msgid "Error and interrupt"
-msgstr "¿ù»~»P¤¤Â_"
-
-#: ../ex_eval.c:715
-msgid "Error"
-msgstr "¿ù»~"
-
-#. if (pending & CSTP_INTERRUPT)
-#: ../ex_eval.c:717
-msgid "Interrupt"
-msgstr "¤¤Â_"
-
-#: ../ex_eval.c:795
-msgid "E579: :if nesting too deep"
-msgstr "E579: :if ¼h¼Æ¹L²`"
-
-#: ../ex_eval.c:830
-msgid "E580: :endif without :if"
-msgstr "E580: :endif ¯Ê¤Ö¹ïÀ³ªº :if"
-
-#: ../ex_eval.c:873
-msgid "E581: :else without :if"
-msgstr "E581: :else ¯Ê¤Ö¹ïÀ³ªº :if"
-
-#: ../ex_eval.c:876
-msgid "E582: :elseif without :if"
-msgstr "E582: :elseif ¯Ê¤Ö¹ïÀ³ªº :if"
-
-#: ../ex_eval.c:880
-msgid "E583: multiple :else"
-msgstr "E583: ¦h­« :else"
-
-#: ../ex_eval.c:883
-msgid "E584: :elseif after :else"
-msgstr "E584: :elseif ¦b :else ¤§«á"
-
-#: ../ex_eval.c:941
-#, fuzzy
-msgid "E585: :while/:for nesting too deep"
-msgstr "E585: :while ¼h¼Æ¹L²`"
-
-#: ../ex_eval.c:1028
-#, fuzzy
-msgid "E586: :continue without :while or :for"
-msgstr "E586: :continue ¯Ê¤Ö¹ïÀ³ªº :while"
-
-#: ../ex_eval.c:1061
-#, fuzzy
-msgid "E587: :break without :while or :for"
-msgstr "E587: :break ¯Ê¤Ö¹ïÀ³ªº :while"
-
-#: ../ex_eval.c:1102
-#, fuzzy
-msgid "E732: Using :endfor with :while"
-msgstr "E170: ¯Ê¤Ö :endwhile"
-
-#: ../ex_eval.c:1104
-#, fuzzy
-msgid "E733: Using :endwhile with :for"
-msgstr "E170: ¯Ê¤Ö :endwhile"
-
-#: ../ex_eval.c:1247
-msgid "E601: :try nesting too deep"
-msgstr "E601: :if ¼h¼Æ¹L²`"
-
-#: ../ex_eval.c:1317
-msgid "E603: :catch without :try"
-msgstr "E603: :catch ¨S¦³ :try"
-
-#. Give up for a ":catch" after ":finally" and ignore it.
-#. * Just parse.
-#: ../ex_eval.c:1332
-msgid "E604: :catch after :finally"
-msgstr "E604: :catch ¦b :finally ¤§«á"
-
-#: ../ex_eval.c:1451
-msgid "E606: :finally without :try"
-msgstr "E606: :finally ¨S¦³ :try"
-
-#. Give up for a multiple ":finally" and ignore it.
-#: ../ex_eval.c:1467
-msgid "E607: multiple :finally"
-msgstr "E607: ¦h­« :finally"
-
-#: ../ex_eval.c:1571
-msgid "E602: :endtry without :try"
-msgstr "E602: :endif ¯Ê¤Ö¹ïÀ³ªº :if"
-
-#: ../ex_eval.c:2026
-msgid "E193: :endfunction not inside a function"
-msgstr "E193: :endfunction ¥²¶·¦b¨ç¦¡¤º³¡¨Ï¥Î"
-
-#: ../ex_getln.c:1643
-#, fuzzy
-msgid "E788: Not allowed to edit another buffer now"
-msgstr "E48: ¤£¯à¦b sandbox ¸Ì¥X²{"
-
-#: ../ex_getln.c:1656
-#, fuzzy
-msgid "E811: Not allowed to change buffer information now"
-msgstr "E94: §ä¤£¨ì %s"
-
-#: ../ex_getln.c:3178
-msgid "tagname"
-msgstr "¼ÐÅÒ¦WºÙ"
-
-#: ../ex_getln.c:3181
-msgid " kind file\n"
-msgstr "ÃþÀÉ®×\n"
-
-#: ../ex_getln.c:4799
-msgid "'history' option is zero"
-msgstr "¿ï¶µ 'history' ¬O¹s"
-
-#: ../ex_getln.c:5046
-#, c-format
-msgid ""
-"\n"
-"# %s History (newest to oldest):\n"
-msgstr ""
-"\n"
-"# %s ¾ú¥v°O¿ý (·s¨ìÂÂ):\n"
-
-#: ../ex_getln.c:5047
-msgid "Command Line"
-msgstr "©R¥O¦C"
-
-#: ../ex_getln.c:5048
-msgid "Search String"
-msgstr "·j´M¦r¦ê"
-
-#: ../ex_getln.c:5049
-msgid "Expression"
-msgstr "¹Bºâ¦¡"
-
-#: ../ex_getln.c:5050
-msgid "Input Line"
-msgstr "¿é¤J¦æ "
-
-#: ../ex_getln.c:5117
-msgid "E198: cmd_pchar beyond the command length"
-msgstr "E198: cmd_pchar ¶W¹L©R¥Oªø«×"
-
-#: ../ex_getln.c:5279
-msgid "E199: Active window or buffer deleted"
-msgstr "E199: ¤w§R°£±¼§@¥Î¤¤ªºµøµ¡©Î¼È¦s°Ï"
-
-#: ../file_search.c:203
-msgid "E854: path too long for completion"
-msgstr ""
-
-#: ../file_search.c:446
-#, c-format
-msgid ""
-"E343: Invalid path: '**[number]' must be at the end of the path or be "
-"followed by '%s'."
-msgstr "E343: ¤£¥¿½Tªº¸ô®|: '**[number]' ¥²»Ý­n¦b¸ô®|µ²§À©Î­n±µµÛ '%s'"
-
-#: ../file_search.c:1505
-#, c-format
-msgid "E344: Can't find directory \"%s\" in cdpath"
-msgstr "E344: cdpath ¤¤¨S¦³¥Ø¿ý \"%s\""
-
-#: ../file_search.c:1508
-#, c-format
-msgid "E345: Can't find file \"%s\" in path"
-msgstr "E345: ¦b¸ô®|¤¤§ä¤£¨ìÀÉ®× \"%s\""
-
-#: ../file_search.c:1512
-#, c-format
-msgid "E346: No more directory \"%s\" found in cdpath"
-msgstr "E346: ¦b¸ô®|¤¤§ä¤£¨ì§ó¦hªºÀÉ®× \"%s\""
-
-#: ../file_search.c:1515
-#, c-format
-msgid "E347: No more file \"%s\" found in path"
-msgstr "E347: ¦b¸ô®|¤¤§ä¤£¨ì§ó¦hªºÀÉ®× \"%s\""
-
-#: ../fileio.c:137
-#, fuzzy
-msgid "E812: Autocommands changed buffer or buffer name"
-msgstr "E135: *Filter* Autocommand ¤£¥i¥H§ó§ï½w½Ä°Ïªº¤º®e"
-
-#: ../fileio.c:368
-msgid "Illegal file name"
-msgstr "¤£¥¿½TªºÀɦW"
-
-#: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578
-msgid "is a directory"
-msgstr "¬O¥Ø¿ý"
-
-#: ../fileio.c:397
-msgid "is not a file"
-msgstr "¤£¬OÀÉ®×"
-
-#: ../fileio.c:508 ../fileio.c:3522
-msgid "[New File]"
-msgstr "[¥¼©R¦W]"
-
-#: ../fileio.c:511
-msgid "[New DIRECTORY]"
-msgstr ""
-
-#: ../fileio.c:529 ../fileio.c:532
-msgid "[File too big]"
-msgstr ""
-
-#: ../fileio.c:534
-msgid "[Permission Denied]"
-msgstr "[Åv­­¤£¨¬]"
-
-#: ../fileio.c:653
-msgid "E200: *ReadPre autocommands made the file unreadable"
-msgstr "E200: *ReadPre Autocommand ¨Ïµ{¦¡µLªkŪ¨ú¦¹ÀÉ"
-
-#: ../fileio.c:655
-msgid "E201: *ReadPre autocommands must not change current buffer"
-msgstr "E201: *Filter* Autocommand ¤£¥i¥H§ó§ï½w½Ä°Ïªº¤º®e"
-
-#: ../fileio.c:672
-msgid "Nvim: Reading from stdin...\n"
-msgstr "Vim: ±q¼Ð·Ç¿é¤JŪ¨ú...\n"
-
-#. Re-opening the original file failed!
-#: ../fileio.c:909
-msgid "E202: Conversion made file unreadable!"
-msgstr "E202: Âà´«¿ù»~"
-
-#. fifo or socket
-#: ../fileio.c:1782
-msgid "[fifo/socket]"
-msgstr "[fifo/socket]"
-
-#. fifo
-#: ../fileio.c:1788
-msgid "[fifo]"
-msgstr "[fifo]"
-
-#. or socket
-#: ../fileio.c:1794
-msgid "[socket]"
-msgstr "[socket]"
-
-#. or character special
-#: ../fileio.c:1801
-#, fuzzy
-msgid "[character special]"
-msgstr "¤@­Ó¦r¤¸"
-
-#: ../fileio.c:1815
-msgid "[CR missing]"
-msgstr "[¯Ê¤ÖCR]'"
-
-#: ../fileio.c:1819
-msgid "[long lines split]"
-msgstr "[¤À³Î¹Lªø¦æ]"
-
-#: ../fileio.c:1823 ../fileio.c:3512
-msgid "[NOT converted]"
-msgstr "[¥¼Âà´«]"
-
-#: ../fileio.c:1826 ../fileio.c:3515
-msgid "[converted]"
-msgstr "[¤wÂà´«]"
-
-#: ../fileio.c:1831
-#, fuzzy, c-format
-msgid "[CONVERSION ERROR in line %<PRId64>]"
-msgstr "[¦æ %<PRId64> ¦³¤£¥¿½Tªº¦ì¤¸]"
-
-#: ../fileio.c:1835
-#, c-format
-msgid "[ILLEGAL BYTE in line %<PRId64>]"
-msgstr "[¦æ %<PRId64> ¦³¤£¥¿½Tªº¦ì¤¸]"
-
-#: ../fileio.c:1838
-msgid "[READ ERRORS]"
-msgstr "[Ū¨ú¿ù»~]"
-
-#: ../fileio.c:2104
-msgid "Can't find temp file for conversion"
-msgstr "§ä¤£¨ìÂà´«¥Îªº¼È¦sÀÉ"
-
-#: ../fileio.c:2110
-msgid "Conversion with 'charconvert' failed"
-msgstr "¦r¤¸¶°Âà´«¿ù»~"
-
-#: ../fileio.c:2113
-msgid "can't read output of 'charconvert'"
-msgstr "µLªkŪ¨ú 'charconvert' ªº¿é¥X"
-
-#: ../fileio.c:2437
-#, fuzzy
-msgid "E676: No matching autocommands for acwrite buffer"
-msgstr "§ä¤£¨ì¹ïÀ³ªº autocommand"
-
-#: ../fileio.c:2466
-msgid "E203: Autocommands deleted or unloaded buffer to be written"
-msgstr "E203: Autocommand §R°£©ÎÄÀ©ñ¤F­n¼g¤Jªº½w½Ä°Ï"
-
-#: ../fileio.c:2486
-msgid "E204: Autocommand changed number of lines in unexpected way"
-msgstr "E204: Autocommand ·N¥~¦a§ïÅܤF¦æ¸¹"
-
-#: ../fileio.c:2548 ../fileio.c:2565
-msgid "is not a file or writable device"
-msgstr "¤£¬OÀɮשΥi¼g¤Jªº¸Ë¸m"
-
-#: ../fileio.c:2601
-msgid "is read-only (add ! to override)"
-msgstr "¬O°ßŪÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../fileio.c:2886
-msgid "E506: Can't write to backup file (add ! to override)"
-msgstr "E506: µLªk¼g¤J³Æ¥÷ÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../fileio.c:2898
-msgid "E507: Close error for backup file (add ! to override)"
-msgstr "E507: µLªkÃö³¬³Æ¥÷ÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../fileio.c:2901
-msgid "E508: Can't read file for backup (add ! to override)"
-msgstr "E508: µLªkŪ¨úÀÉ®×¥H¨Ñ³Æ¥÷ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../fileio.c:2923
-msgid "E509: Cannot create backup file (add ! to override)"
-msgstr "E509: µLªk«Ø¥ß³Æ¥÷ÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#: ../fileio.c:3008
-msgid "E510: Can't make backup file (add ! to override)"
-msgstr "E510: µLªk»s§@³Æ¥÷ÀÉ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#. Can't write without a tempfile!
-#: ../fileio.c:3121
-msgid "E214: Can't find temp file for writing"
-msgstr "E214: §ä¤£¨ì¼g¤J¥Îªº¼È¦sÀÉ"
-
-#: ../fileio.c:3134
-msgid "E213: Cannot convert (add ! to write without conversion)"
-msgstr "E213: µLªkÂà´« (½Ð¨Ï¥Î ! ±j¨î¤£Âà´«¼g¤J)"
-
-#: ../fileio.c:3169
-msgid "E166: Can't open linked file for writing"
-msgstr "E166: µLªk¥H¼g¤J¼Ò¦¡¶}±Ò³sµ²ÀÉ®×"
-
-#: ../fileio.c:3173
-msgid "E212: Can't open file for writing"
-msgstr "E212: µLªk¥H¼g¤J¼Ò¦¡¶}±Ò"
-
-#: ../fileio.c:3363
-msgid "E667: Fsync failed"
-msgstr "E667: Fsync ©R¥O°õ¦æ¥¢±Ñ"
-
-#: ../fileio.c:3398
-msgid "E512: Close failed"
-msgstr "E512: Ãö³¬¥¢±Ñ"
-
-#: ../fileio.c:3436
-#, fuzzy
-msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
-msgstr "E513: µLªk¼g¤J -- Âà´«¥¢±Ñ"
-
-#: ../fileio.c:3441
-#, c-format
-msgid ""
-"E513: write error, conversion failed in line %<PRId64> (make 'fenc' empty to "
-"override)"
-msgstr ""
-
-#: ../fileio.c:3448
-msgid "E514: write error (file system full?)"
-msgstr "E514: ¼g¤J¿ù»~ (Àɮרt²Î¤wº¡¡H)"
-
-#: ../fileio.c:3506
-msgid " CONVERSION ERROR"
-msgstr "Âà´«¿ù»~"
-
-#: ../fileio.c:3509
-#, fuzzy, c-format
-msgid " in line %<PRId64>;"
-msgstr "¦æ %<PRId64>"
-
-#: ../fileio.c:3519
-msgid "[Device]"
-msgstr "[¸Ë¸m]"
-
-#: ../fileio.c:3522
-msgid "[New]"
-msgstr "[·s]"
-
-#: ../fileio.c:3535
-msgid " [a]"
-msgstr "[a]"
-
-#: ../fileio.c:3535
-msgid " appended"
-msgstr " ¤wªþ¥["
-
-#: ../fileio.c:3537
-msgid " [w]"
-msgstr "[w]"
-
-#: ../fileio.c:3537
-msgid " written"
-msgstr " ¤w¼g¤J"
-
-#: ../fileio.c:3579
-msgid "E205: Patchmode: can't save original file"
-msgstr "E205: Patch ¼Ò¦¡: µLªkÀx¦s­ì©lÀÉ®×"
-
-#: ../fileio.c:3602
-msgid "E206: patchmode: can't touch empty original file"
-msgstr "E206: Patch ¼Ò¦¡: µLªkÅܧóªÅªº­ì©lÀÉ®×"
-
-#: ../fileio.c:3616
-msgid "E207: Can't delete backup file"
-msgstr "E207: µLªk§R°£³Æ¥÷ÀÉ"
-
-#: ../fileio.c:3672
-msgid ""
-"\n"
-"WARNING: Original file may be lost or damaged\n"
-msgstr ""
-"\n"
-"ĵ§i: ­ì©lÀɮ׬y¥¢©Î·lÃa\n"
-
-#: ../fileio.c:3675
-msgid "don't quit the editor until the file is successfully written!"
-msgstr "¦bÀÉ®×¥¿½T¼g¤J«e½Ð¤ÅÂ÷¶}½s¿è¾¹!"
-
-#: ../fileio.c:3795
-msgid "[dos]"
-msgstr "[dos]"
-
-#: ../fileio.c:3795
-msgid "[dos format]"
-msgstr "[dos ®æ¦¡]"
-
-#: ../fileio.c:3801
-msgid "[mac]"
-msgstr "[mac]"
-
-#: ../fileio.c:3801
-msgid "[mac format]"
-msgstr "[mac ®æ¦¡]"
-
-#: ../fileio.c:3807
-msgid "[unix]"
-msgstr "[unix]"
-
-#: ../fileio.c:3807
-msgid "[unix format]"
-msgstr "[unix ®æ¦¡]"
-
-#: ../fileio.c:3831
-msgid "1 line, "
-msgstr "1 ¦æ, "
-
-#: ../fileio.c:3833
-#, c-format
-msgid "%<PRId64> lines, "
-msgstr "%<PRId64> ¦æ, "
-
-#: ../fileio.c:3836
-msgid "1 character"
-msgstr "¤@­Ó¦r¤¸"
-
-#: ../fileio.c:3838
-#, c-format
-msgid "%<PRId64> characters"
-msgstr "%<PRId64>­Ó¦r¤¸"
-
-#: ../fileio.c:3849
-msgid "[noeol]"
-msgstr "[noeol]"
-
-#: ../fileio.c:3849
-msgid "[Incomplete last line]"
-msgstr "[µ²§À¦æ¤£§¹¾ã]"
-
-#. don't overwrite messages here
-#. must give this prompt
-#. don't use emsg() here, don't want to flush the buffers
-#: ../fileio.c:3865
-msgid "WARNING: The file has been changed since reading it!!!"
-msgstr "ĵ§i: ¥»ÀɮצۤW¦¸Åª¤J«á¤wÅܰÊ!!!"
-
-#: ../fileio.c:3867
-msgid "Do you really want to write to it"
-msgstr "½T©w­n¼g¤J¶Ü"
-
-#: ../fileio.c:4648
-#, c-format
-msgid "E208: Error writing to \"%s\""
-msgstr "E208: ¼g¤JÀÉ®× \"%s\" ¿ù»~"
-
-#: ../fileio.c:4655
-#, c-format
-msgid "E209: Error closing \"%s\""
-msgstr "E209: Ãö³¬ÀÉ®× \"%s\" ¿ù»~"
-
-#: ../fileio.c:4657
-#, c-format
-msgid "E210: Error reading \"%s\""
-msgstr "E210: Ū¨úÀÉ®× \"%s\" ¿ù»~"
-
-#: ../fileio.c:4883
-msgid "E246: FileChangedShell autocommand deleted buffer"
-msgstr "E246: FileChangedShell autocommand §R°£½w½Ä°Ï"
-
-#: ../fileio.c:4894
-#, fuzzy, c-format
-msgid "E211: File \"%s\" no longer available"
-msgstr "E211: ĵ§i: ÀÉ®× \"%s\" ¤w¸g¤£¦s¦b"
-
-#: ../fileio.c:4906
-#, c-format
-msgid ""
-"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
-"well"
-msgstr "W12: ĵ§i: ÀÉ®× \"%s\" ¦Û¤W¦¸Åª¤J«á¤wÅܰÊ, ¦Ó¥B½s¿è¤¤ªº½w½Ä°Ï¤]§ó°Ê¤F"
-
-#: ../fileio.c:4907
-#, fuzzy
-msgid "See \":help W12\" for more info."
-msgstr "¶i¤@¨B»¡©ú½Ð¨£ \":help W11\"¡C"
-
-#: ../fileio.c:4910
-#, c-format
-msgid "W11: Warning: File \"%s\" has changed since editing started"
-msgstr "W11: ĵ§i: ÀÉ®× \"%s\" ¦Û¤W¦¸Åª¤J«á¤wÅܰÊ"
-
-#: ../fileio.c:4911
-msgid "See \":help W11\" for more info."
-msgstr "¶i¤@¨B»¡©ú½Ð¨£ \":help W11\"¡C"
-
-#: ../fileio.c:4914
-#, c-format
-msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
-msgstr "W16: ĵ§i: ÀÉ®× \"%s\" ªºÅv­­»P¤W¦¸Åª¤J®É¤£¤@¼Ë (¦³ÅܰʹL)"
-
-#: ../fileio.c:4915
-#, fuzzy
-msgid "See \":help W16\" for more info."
-msgstr "¶i¤@¨B»¡©ú½Ð¨£ \":help W11\"¡C"
-
-# 'mode' seems better as translated to 'permission'?
-#: ../fileio.c:4927
-#, c-format
-msgid "W13: Warning: File \"%s\" has been created after editing started"
-msgstr "W13: ĵ§i: ÀÉ®× \"%s\" ¦b¶}©l½s¿è«á¤S³Q«Ø¥ß¤F"
-
-#: ../fileio.c:4947
-msgid "Warning"
-msgstr "ĵ§i"
-
-#: ../fileio.c:4948
-msgid ""
-"&OK\n"
-"&Load File"
-msgstr ""
-"½T©w(&O)\n"
-"¸ü¤JÀÉ®×(&L)"
-
-#: ../fileio.c:5065
-#, c-format
-msgid "E462: Could not prepare for reloading \"%s\""
-msgstr "E462: µLªk·Ç³Æ­«·s¸ü¤J \"%s\""
-
-#: ../fileio.c:5078
-#, c-format
-msgid "E321: Could not reload \"%s\""
-msgstr "E321: µLªk­«·s¸ü¤J \"%s\""
-
-#: ../fileio.c:5601
-msgid "--Deleted--"
-msgstr "--¤w§R°£--"
-
-#: ../fileio.c:5732
-#, c-format
-msgid "auto-removing autocommand: %s <buffer=%d>"
-msgstr ""
-
-#. the group doesn't exist
-#: ../fileio.c:5772
-#, c-format
-msgid "E367: No such group: \"%s\""
-msgstr "E367: µL¦¹¸s²Õ: \"%s\""
-
-#: ../fileio.c:5897
-#, c-format
-msgid "E215: Illegal character after *: %s"
-msgstr "E215: * «á­±¦³¤£¥¿½Tªº¦r¤¸: %s"
-
-#: ../fileio.c:5905
-#, c-format
-msgid "E216: No such event: %s"
-msgstr "E216: µL¦¹¨Æ¥ó: %s"
-
-#: ../fileio.c:5907
-#, c-format
-msgid "E216: No such group or event: %s"
-msgstr "E216: µL¦¹¸s²Õ©Î¨Æ¥ó: %s"
-
-#. Highlight title
-#: ../fileio.c:6090
-msgid ""
-"\n"
-"--- Auto-Commands ---"
-msgstr ""
-"\n"
-"--- Auto-Commands ---"
-
-#: ../fileio.c:6293
-#, fuzzy, c-format
-msgid "E680: <buffer=%d>: invalid buffer number "
-msgstr "½w½Ä°Ï¸¹½X¿ù»~"
-
-#: ../fileio.c:6370
-msgid "E217: Can't execute autocommands for ALL events"
-msgstr "E217: µLªk¹ï©Ò¦³¨Æ¥ó°õ¦æ autocommand"
-
-#: ../fileio.c:6393
-msgid "No matching autocommands"
-msgstr "§ä¤£¨ì¹ïÀ³ªº autocommand"
-
-#: ../fileio.c:6831
-msgid "E218: autocommand nesting too deep"
-msgstr "E218: autocommand ¼h¼Æ¹L²`"
-
-#: ../fileio.c:7143
-#, c-format
-msgid "%s Auto commands for \"%s\""
-msgstr "%s Auto commands: \"%s\""
-
-#: ../fileio.c:7149
-#, c-format
-msgid "Executing %s"
-msgstr "°õ¦æ %s"
-
-#: ../fileio.c:7211
-#, c-format
-msgid "autocommand %s"
-msgstr "autocommand %s"
-
-#: ../fileio.c:7795
-msgid "E219: Missing {."
-msgstr "E219: ¯Ê¤Ö {."
-
-#: ../fileio.c:7797
-msgid "E220: Missing }."
-msgstr "E220: ¯Ê¤Ö }."
-
-#: ../fold.c:93
-msgid "E490: No fold found"
-msgstr "E490: §ä¤£¨ì¥ô¦ó fold"
-
-#: ../fold.c:544
-msgid "E350: Cannot create fold with current 'foldmethod'"
-msgstr "E350: µLªk¦b¥Ø«eªº 'foldmethod' ¤U«Ø¥ß fold"
-
-#: ../fold.c:546
-msgid "E351: Cannot delete fold with current 'foldmethod'"
-msgstr "E351: µLªk¦b¥Ø«eªº 'foldmethod' ¤U§R°£ fold"
-
-#: ../fold.c:1784
-#, c-format
-msgid "+--%3ld lines folded "
-msgstr "+--¤w fold %3ld ¦æ "
-
-#. buffer has already been read
-#: ../getchar.c:273
-msgid "E222: Add to read buffer"
-msgstr "E222: ¥[¤JŪ¨ú½w½Ä°Ï¤¤"
-
-#: ../getchar.c:2040
-msgid "E223: recursive mapping"
-msgstr "E223: »¼°j mapping"
-
-#: ../getchar.c:2849
-#, c-format
-msgid "E224: global abbreviation already exists for %s"
-msgstr "E224: %s ¤w¸g¦³¥þ°ì abbreviation ¤F"
-
-#: ../getchar.c:2852
-#, c-format
-msgid "E225: global mapping already exists for %s"
-msgstr "E225: %s ¤w¸g¦³¥þ°ì mapping ¤F"
-
-#: ../getchar.c:2952
-#, c-format
-msgid "E226: abbreviation already exists for %s"
-msgstr "E226: %s ¤w¸g¦³ abbreviation ¤F"
-
-#: ../getchar.c:2955
-#, c-format
-msgid "E227: mapping already exists for %s"
-msgstr "E227: %s ªº mapping ¤w¸g¦s¦b"
-
-#: ../getchar.c:3008
-msgid "No abbreviation found"
-msgstr "§ä¤£¨ì abbreviation"
-
-#: ../getchar.c:3010
-msgid "No mapping found"
-msgstr "¨S¦³³o­Ó mapping ¹ïÀ³"
-
-#: ../getchar.c:3974
-msgid "E228: makemap: Illegal mode"
-msgstr "E228: makemap: ¤£¥¿½Tªº¼Ò¦¡"
-
-#. key value of 'cedit' option
-#. type of cmdline window or 0
-#. result of cmdline window or 0
-#: ../globals.h:924
-msgid "--No lines in buffer--"
-msgstr "--½w½Ä°ÏµL¸ê®Æ--"
-
-#.
-#. * The error messages that can be shared are included here.
-#. * Excluded are errors that are only used once and debugging messages.
-#.
-#: ../globals.h:996
-msgid "E470: Command aborted"
-msgstr "E470: ©R¥O³Q±j¨î¤¤Â_°õ¦æ "
-
-#: ../globals.h:997
-msgid "E471: Argument required"
-msgstr "E471: »Ý­n«ü¥O°Ñ¼Æ"
-
-#: ../globals.h:998
-msgid "E10: \\ should be followed by /, ? or &"
-msgstr "E10: \\ «á­±À³¸Ó¦³ / ? ©Î &"
-
-#: ../globals.h:1000
-msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
-msgstr "E11: ¤£¯à¦b©R¥O¦Cµøµ¡¤¤¨Ï¥Î¡C<CR>°õ¦æ¡ACTRL-C Â÷¶}"
-
-#: ../globals.h:1002
-msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
-msgstr "E12: exrc/vimrc ¸Ìªº«ü¥OµLªk°õ¦æ "
-
-#: ../globals.h:1003
-msgid "E171: Missing :endif"
-msgstr "E171: ¯Ê¤Ö :endif"
-
-#: ../globals.h:1004
-msgid "E600: Missing :endtry"
-msgstr "E600: ¯Ê¤Ö :endtry"
-
-#: ../globals.h:1005
-msgid "E170: Missing :endwhile"
-msgstr "E170: ¯Ê¤Ö :endwhile"
-
-#: ../globals.h:1006
-#, fuzzy
-msgid "E170: Missing :endfor"
-msgstr "E171: ¯Ê¤Ö :endif"
-
-#: ../globals.h:1007
-msgid "E588: :endwhile without :while"
-msgstr "E588: :endwhile ¯Ê¤Ö¹ïÀ³ªº :while"
-
-#: ../globals.h:1008
-#, fuzzy
-msgid "E588: :endfor without :for"
-msgstr "E580: :endif ¯Ê¤Ö¹ïÀ³ªº :if"
-
-#: ../globals.h:1009
-msgid "E13: File exists (add ! to override)"
-msgstr "E13: Àɮפw¸g¦s¦b (¥i¥Î ! ±j¨î¨ú¥N)"
-
-#: ../globals.h:1010
-msgid "E472: Command failed"
-msgstr "E472: ©R¥O°õ¦æ¥¢±Ñ"
-
-#: ../globals.h:1011
-msgid "E473: Internal error"
-msgstr "E473: ¤º³¡¿ù»~"
-
-#: ../globals.h:1012
-msgid "Interrupted"
-msgstr "¤w¤¤Â_"
-
-#: ../globals.h:1013
-msgid "E14: Invalid address"
-msgstr "E14: ¤£¥¿½Tªº¦ì§}"
-
-#: ../globals.h:1014
-msgid "E474: Invalid argument"
-msgstr "E474: ¤£¥¿½Tªº°Ñ¼Æ"
-
-#: ../globals.h:1015
-#, c-format
-msgid "E475: Invalid argument: %s"
-msgstr "E475: ¤£¥¿½Tªº°Ñ¼Æ: %s"
-
-#: ../globals.h:1016
-#, c-format
-msgid "E15: Invalid expression: %s"
-msgstr "E15: ¤£¥¿½Tªº¹Bºâ¦¡: %s"
-
-#: ../globals.h:1017
-msgid "E16: Invalid range"
-msgstr "E16: ¤£¥¿½Tªº½d³ò"
-
-#: ../globals.h:1018
-msgid "E476: Invalid command"
-msgstr "E476: ¤£¥¿½Tªº©R¥O"
-
-#: ../globals.h:1019
-#, c-format
-msgid "E17: \"%s\" is a directory"
-msgstr "E17: \"%s\" ¬O¥Ø¿ý"
-
-#: ../globals.h:1020
-#, fuzzy
-msgid "E900: Invalid job id"
-msgstr "E49: ¿ù»~ªº±²°Ê¤j¤p"
-
-#: ../globals.h:1021
-msgid "E901: Job table is full"
-msgstr ""
-
-#: ../globals.h:1022
-#, c-format
-msgid "E902: \"%s\" is not an executable"
-msgstr ""
-
-#: ../globals.h:1024
-#, c-format
-msgid "E364: Library call failed for \"%s()\""
-msgstr "E364: ©I¥s¨ç¦¡®w \"%s\"() ¥¢±Ñ"
-
-#: ../globals.h:1026
-msgid "E19: Mark has invalid line number"
-msgstr "E19: ¼Ð°Oªº¦æ¸¹¿ù»~"
-
-#: ../globals.h:1027
-msgid "E20: Mark not set"
-msgstr "E20: ¨S¦³³]©w¼Ð°O"
-
-#: ../globals.h:1029
-msgid "E21: Cannot make changes, 'modifiable' is off"
-msgstr "E21: ¦]¬° 'modifiable' ¿ï¶µ¬OÃö³¬ªº¡A©Ò¥H¤£¯à­×§ï"
-
-#: ../globals.h:1030
-msgid "E22: Scripts nested too deep"
-msgstr "E22: ±_ª¬»¼°j©I¥s¤Ó¦h¼h"
-
-#: ../globals.h:1031
-msgid "E23: No alternate file"
-msgstr "E23: ¨S¦³´À¥NªºÀÉ®×"
-
-#: ../globals.h:1032
-msgid "E24: No such abbreviation"
-msgstr "E24: ¨S¦³³o­Ó abbreviation ¹ïÀ³"
-
-#: ../globals.h:1033
-msgid "E477: No ! allowed"
-msgstr "E477: ¤£¥i¨Ï¥Î '!'"
-
-#: ../globals.h:1035
-msgid "E25: Nvim does not have a built-in GUI"
-msgstr "E25: ¦]¬°½sͮɍS¦³¥[¤J¹Ï«¬¬É­±ªºµ{¦¡½X¡A©Ò¥HµLªk¨Ï¥Î¹Ï«¬¬É­±"
-
-#: ../globals.h:1036
-#, c-format
-msgid "E28: No such highlight group name: %s"
-msgstr "E28: ¨S¦³¦W¬° '%s' ªº highlight group"
-
-#: ../globals.h:1037
-msgid "E29: No inserted text yet"
-msgstr "E29: ÁÙ¨S¦³´¡¤J¤å¦r¹L"
-
-#: ../globals.h:1038
-msgid "E30: No previous command line"
-msgstr "E30: ¨S¦³«e¤@¶µ©R¥O"
-
-#: ../globals.h:1039
-msgid "E31: No such mapping"
-msgstr "E31: ¨S¦³³o­Ó mapping ¹ïÀ³"
-
-#: ../globals.h:1040
-msgid "E479: No match"
-msgstr "E479: §ä¤£¨ì"
-
-#: ../globals.h:1041
-#, c-format
-msgid "E480: No match: %s"
-msgstr "E480: §ä¤£¨ì: %s"
-
-#: ../globals.h:1042
-msgid "E32: No file name"
-msgstr "E32: ¨S¦³ÀɦW"
-
-#: ../globals.h:1044
-msgid "E33: No previous substitute regular expression"
-msgstr "E33: ¨S¦³«e¤@­Ó·j´M/¨ú¥Nªº©R¥O"
-
-#: ../globals.h:1045
-msgid "E34: No previous command"
-msgstr "E34: ¨S¦³«e¤@­Ó©R¥O"
-
-#: ../globals.h:1046
-msgid "E35: No previous regular expression"
-msgstr "E35: ¨S¦³«e¤@­Ó·j´M«ü¥O"
-
-#: ../globals.h:1047
-msgid "E481: No range allowed"
-msgstr "E481: ¤£¥i¨Ï¥Î½d³ò«ü¥O"
-
-#: ../globals.h:1048
-msgid "E36: Not enough room"
-msgstr "E36: ¨S¦³¨¬°÷ªºªÅ¶¡"
-
-#: ../globals.h:1049
-#, c-format
-msgid "E482: Can't create file %s"
-msgstr "E482: ¤£¯à«Ø¥ßÀÉ®× %s"
-
-#: ../globals.h:1050
-msgid "E483: Can't get temp file name"
-msgstr "E483: µLªk±oª¾¼È¦sÀɦW"
-
-#: ../globals.h:1051
-#, c-format
-msgid "E484: Can't open file %s"
-msgstr "E484: µLªk¶}±ÒÀÉ®× %s"
-
-#: ../globals.h:1052
-#, c-format
-msgid "E485: Can't read file %s"
-msgstr "E485: µLªkŪ¨úÀÉ®× %s"
-
-#: ../globals.h:1054
-msgid "E37: No write since last change (add ! to override)"
-msgstr "E37: ¤w§ó§ï¹LÀɮצý©|¥¼¦sÀÉ (¥i¥Î ! ±j¨î°õ¦æ)"
-
-#: ../globals.h:1055
-#, fuzzy
-msgid "E37: No write since last change"
-msgstr "[§ó·s«á©|¥¼Àx¦s]\n"
-
-#: ../globals.h:1056
-msgid "E38: Null argument"
-msgstr "E38: ªÅªº (Null) °Ñ¼Æ"
-
-#: ../globals.h:1057
-msgid "E39: Number expected"
-msgstr "E39: À³¸Ó­n¦³¼Æ¦r"
-
-#: ../globals.h:1058
-#, c-format
-msgid "E40: Can't open errorfile %s"
-msgstr "E40: µLªk¶}±Ò¿ù»~ÀÉ®× %s"
-
-#: ../globals.h:1059
-msgid "E41: Out of memory!"
-msgstr "E41: °O¾ÐÅ餣¨¬!"
-
-#: ../globals.h:1060
-msgid "Pattern not found"
-msgstr "§ä¤£¨ì"
-
-#: ../globals.h:1061
-#, c-format
-msgid "E486: Pattern not found: %s"
-msgstr "E486: §ä¤£¨ì %s"
-
-#: ../globals.h:1062
-msgid "E487: Argument must be positive"
-msgstr "E487: °Ñ¼ÆÀ³¸Ó¬O¥¿¼Æ"
-
-#: ../globals.h:1064
-msgid "E459: Cannot go back to previous directory"
-msgstr "E459: µLªk¦^¨ì«e¤@­Ó¥Ø¿ý"
-
-#: ../globals.h:1066
-msgid "E42: No Errors"
-msgstr "E42: ¨S¦³¿ù»~"
-
-#: ../globals.h:1067
-msgid "E776: No location list"
-msgstr ""
-
-#: ../globals.h:1068
-msgid "E43: Damaged match string"
-msgstr "E43: ²Å¦X¦r¦ê¦³°ÝÃD"
-
-#: ../globals.h:1069
-msgid "E44: Corrupted regexp program"
-msgstr "E44: regexp ¦³°ÝÃD"
-
-#: ../globals.h:1071
-msgid "E45: 'readonly' option is set (add ! to override)"
-msgstr "E45: ¦³³]©w 'readonly' ¿ï¶µ(°ßŪ) (¥i¥Î ! ±j¨î°õ¦æ)"
-
-#: ../globals.h:1073
-#, fuzzy, c-format
-msgid "E46: Cannot change read-only variable \"%s\""
-msgstr "E46: µLªk³]©w°ßŪÅÜ¼Æ \"%s\""
-
-#: ../globals.h:1075
-#, fuzzy, c-format
-msgid "E794: Cannot set variable in the sandbox: \"%s\""
-msgstr "E46: µLªk³]©w°ßŪÅÜ¼Æ \"%s\""
-
-#: ../globals.h:1076
-msgid "E47: Error while reading errorfile"
-msgstr "E47: Ū¨ú¿ù»~ÀÉ®×¥¢±Ñ"
-
-#: ../globals.h:1078
-msgid "E48: Not allowed in sandbox"
-msgstr "E48: ¤£¯à¦b sandbox ¸Ì¥X²{"
-
-#: ../globals.h:1080
-msgid "E523: Not allowed here"
-msgstr "E523: ³o¸Ì¤£¥i¨Ï¥Î"
-
-#: ../globals.h:1082
-msgid "E359: Screen mode setting not supported"
-msgstr "E359: ¤£¤ä´©³]©w¿Ã¹õ¼Ò¦¡"
-
-#: ../globals.h:1083
-msgid "E49: Invalid scroll size"
-msgstr "E49: ¿ù»~ªº±²°Ê¤j¤p"
-
-#: ../globals.h:1084
-msgid "E91: 'shell' option is empty"
-msgstr "E91: 'E71: ¿ï¶µ 'shell' ¥¼³]©w"
-
-#: ../globals.h:1085
-msgid "E255: Couldn't read in sign data!"
-msgstr "E255: µLªkŪ¨ú sign data!"
-
-#: ../globals.h:1086
-msgid "E72: Close error on swap file"
-msgstr "E72: ¼È¦sÀÉÃö³¬¿ù»~"
-
-#: ../globals.h:1087
-msgid "E73: tag stack empty"
-msgstr "E73: ¼ÐÅÒ°ïÅ|¤wªÅ"
-
-#: ../globals.h:1088
-msgid "E74: Command too complex"
-msgstr "E74: ©R¥O¤Ó½ÆÂø"
-
-#: ../globals.h:1089
-msgid "E75: Name too long"
-msgstr "E75: ¦W¦r¤Óªø"
-
-#: ../globals.h:1090
-msgid "E76: Too many ["
-msgstr "E76: ¤Ó¦h ["
-
-#: ../globals.h:1091
-msgid "E77: Too many file names"
-msgstr "E77: ¤Ó¦hÀɦW"
-
-#: ../globals.h:1092
-msgid "E488: Trailing characters"
-msgstr "E488: §A¿é¤J¤F¦h¾lªº¦r¤¸"
-
-#: ../globals.h:1093
-msgid "E78: Unknown mark"
-msgstr "E78: µLªk¿ìÃѪº¼Ð°O"
-
-#: ../globals.h:1094
-msgid "E79: Cannot expand wildcards"
-msgstr "E79: µLªk®i¶}¸U¥Î¦r¤¸"
-
-#: ../globals.h:1096
-msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
-msgstr "E591: 'winheight' ¤£¯à¤ñ 'winminheight' §ó¤Ö"
-
-#: ../globals.h:1098
-msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
-msgstr "E592: 'winwidth' ¤£¯à¤ñ 'winminwidth' §ó¤Ö"
-
-#: ../globals.h:1099
-msgid "E80: Error while writing"
-msgstr "E80: ¼g¤J¿ù»~"
-
-#: ../globals.h:1100
-msgid "Zero count"
-msgstr "¼Æ¨ì¹s (?)"
-
-#: ../globals.h:1101
-msgid "E81: Using <SID> not in a script context"
-msgstr "E81: <SID> ¤£¯à¦b script ¥»¤å¥~¨Ï¥Î."
-
-#: ../globals.h:1102
-#, fuzzy, c-format
-msgid "E685: Internal error: %s"
-msgstr "E473: ¤º³¡¿ù»~"
-
-#: ../globals.h:1104
-msgid "E363: pattern uses more memory than 'maxmempattern'"
-msgstr ""
-
-#: ../globals.h:1105
-#, fuzzy
-msgid "E749: empty buffer"
-msgstr "E279: ¤£¬O SNiFF+ ªº½w½Ä°Ï"
-
-#: ../globals.h:1108
-#, fuzzy
-msgid "E682: Invalid search pattern or delimiter"
-msgstr "E383: ¿ù»~ªº·j´M¦r¦ê: %s"
-
-#: ../globals.h:1109
-msgid "E139: File is loaded in another buffer"
-msgstr "E139: ±z¦b¥t¤@­Ó½w½Ä°Ï¤]¸ü¤J¤F³o­ÓÀÉ®×"
-
-#: ../globals.h:1110
-#, fuzzy, c-format
-msgid "E764: Option '%s' is not set"
-msgstr "E236: \"%s\" ¤£¬O©T©w¼e«×¦r«¬"
-
-#: ../globals.h:1111
-#, fuzzy
-msgid "E850: Invalid register name"
-msgstr "E354: ¼È¦s¾¹¦WºÙ¿ù»~: '%s'"
-
-#: ../globals.h:1114
-msgid "search hit TOP, continuing at BOTTOM"
-msgstr "¤w·j´M¨ìÀÉ®×¶}ÀY¡F¦A±qµ²§ÀÄ~Äò·j´M"
-
-#: ../globals.h:1115
-msgid "search hit BOTTOM, continuing at TOP"
-msgstr "¤w·j´M¨ìÀÉ®×µ²§À¡F¦A±q¶}ÀYÄ~Äò·j´M"
-
-#: ../hardcopy.c:240
-msgid "E550: Missing colon"
-msgstr "E550: ¯Ê¤Ö colon"
-
-#: ../hardcopy.c:252
-msgid "E551: Illegal component"
-msgstr "E551: ¤£¥¿½Tªº¼Ò¦¡"
-
-#: ../hardcopy.c:259
-msgid "E552: digit expected"
-msgstr "E552: À³¸Ó­n¦³¼Æ¦r"
-
-#: ../hardcopy.c:473
-#, c-format
-msgid "Page %d"
-msgstr "²Ä %d ­¶"
-
-#: ../hardcopy.c:597
-msgid "No text to be printed"
-msgstr "¨S¦³­n¦C¦Lªº¤å¦r"
-
-#: ../hardcopy.c:668
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "¦C¦L¤¤: ²Ä %d ­¶ (%d%%)"
-
-#: ../hardcopy.c:680
-#, c-format
-msgid " Copy %d of %d"
-msgstr "½Æ»s %d / %d"
-
-#: ../hardcopy.c:733
-#, c-format
-msgid "Printed: %s"
-msgstr "¤w¦C¦L: %s"
-
-#: ../hardcopy.c:740
-msgid "Printing aborted"
-msgstr "¤w¨ú®ø¦C¦L"
-
-#: ../hardcopy.c:1365
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: µLªk¼g¤J PostScript ¿é¥XÀÉ"
-
-#: ../hardcopy.c:1747
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: µLªk¶}±ÒÀÉ®× \"%s\""
-
-#: ../hardcopy.c:1756 ../hardcopy.c:2470
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: µLªkŪ¨ú PostScript ¸ê·½ÀÉ \"%s\""
-
-#: ../hardcopy.c:1772
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: ÀÉ®× \"%s\" ¤£¬O PostScript ¸ê·½ÀÉ "
-
-#: ../hardcopy.c:1788 ../hardcopy.c:1805 ../hardcopy.c:1844
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: ¤£¤ä´© PostScript ¸ê·½ÀÉ \"%s\""
-
-#: ../hardcopy.c:1856
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: \"%s\" ¸ê·½Àɪ©¥»¿ù»~"
-
-#: ../hardcopy.c:2225
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr ""
-
-#: ../hardcopy.c:2238
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr ""
-
-#: ../hardcopy.c:2254
-msgid "E675: No default font specified for multi-byte printing."
-msgstr ""
-
-#: ../hardcopy.c:2426
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: µLªk¶}±Ò PostScript ¿é¥XÀÉ"
-
-#: ../hardcopy.c:2458
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: µLªk¶}±ÒÀÉ®× \"%s\""
-
-#: ../hardcopy.c:2583
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: µLªkŪ¨ú PostScript ¸ê·½ÀÉ \"prolog.ps\""
-
-#: ../hardcopy.c:2593
-#, fuzzy
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: µLªkŪ¨ú PostScript ¸ê·½ÀÉ \"%s.ps\""
-
-#: ../hardcopy.c:2622 ../hardcopy.c:2639 ../hardcopy.c:2665
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: µLªkŪ¨ú PostScript ¸ê·½ÀÉ \"%s.ps\""
-
-#: ../hardcopy.c:2654
-#, fuzzy, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620:µLªkÂà´«¦Ü \"%s\" ¦r¤¸½s½X"
-
-#: ../hardcopy.c:2877
-msgid "Sending to printer..."
-msgstr "¶Ç°e¸ê®Æ¨ì¦Lªí¾÷..."
-
-#: ../hardcopy.c:2881
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: µLªk¦C¦L PostScript ÀÉ®×"
-
-#: ../hardcopy.c:2883
-msgid "Print job sent."
-msgstr "¤w°e¥X¦C¦L¤u§@¡C"
-
-#: ../if_cscope.c:85
-msgid "Add a new database"
-msgstr "·s¼W¸ê®Æ®w"
-
-#: ../if_cscope.c:87
-msgid "Query for a pattern"
-msgstr "¿é¤J pattern"
-
-#: ../if_cscope.c:89
-msgid "Show this message"
-msgstr "Åã¥Ü¦¹°T®§"
-
-#: ../if_cscope.c:91
-msgid "Kill a connection"
-msgstr "µ²§ô³s½u"
-
-#: ../if_cscope.c:93
-msgid "Reinit all connections"
-msgstr "­«³]©Ò¦³³s½u"
-
-#: ../if_cscope.c:95
-msgid "Show connections"
-msgstr "Åã¥Ü³s½u"
-
-#: ../if_cscope.c:101
-#, c-format
-msgid "E560: Usage: cs[cope] %s"
-msgstr "E560: ¥Îªk: cs[cope] %s"
-
-#: ../if_cscope.c:225
-msgid "This cscope command does not support splitting the window.\n"
-msgstr "³o­Ó cscope ©R¥O¤£¤ä´©¤À³Î¿Ã¹õ\n"
-
-#: ../if_cscope.c:266
-msgid "E562: Usage: cstag <ident>"
-msgstr "E562: ¥Îªk: cstag <ÃѧO¦rident>"
-
-#: ../if_cscope.c:313
-msgid "E257: cstag: tag not found"
-msgstr "E257: cstag: §ä¤£¨ì tag"
-
-#: ../if_cscope.c:461
-#, c-format
-msgid "E563: stat(%s) error: %d"
-msgstr "E563: stat(%s) ¿ù»~: %d"
-
-#: ../if_cscope.c:551
-#, c-format
-msgid "E564: %s is not a directory or a valid cscope database"
-msgstr "E564: %s ¤£¬O¥Ø¿ý©Î cscope ¸ê®Æ®w"
-
-#: ../if_cscope.c:566
-#, c-format
-msgid "Added cscope database %s"
-msgstr "·s¼W cscope ¸ê®Æ®w %s"
-
-#: ../if_cscope.c:616
-#, c-format
-msgid "E262: error reading cscope connection %<PRId64>"
-msgstr "E262: Ū¨ú cscope ³s½u %<PRId64> ¿ù»~"
-
-#: ../if_cscope.c:711
-msgid "E561: unknown cscope search type"
-msgstr "E561: ¥¼ª¾ªº cscope ·j´M§ÎºA"
-
-#: ../if_cscope.c:752 ../if_cscope.c:789
-msgid "E566: Could not create cscope pipes"
-msgstr "E566: µLªk«Ø¥ß»P cscope ªº pipe ³s½u"
-
-#: ../if_cscope.c:767
-msgid "E622: Could not fork for cscope"
-msgstr "E622: µLªk fork ¥H°õ¦æ cscope "
-
-#: ../if_cscope.c:849
-#, fuzzy
-msgid "cs_create_connection setpgid failed"
-msgstr "cs_create_connection °õ¦æ¥¢±Ñ"
-
-#: ../if_cscope.c:853 ../if_cscope.c:889
-msgid "cs_create_connection exec failed"
-msgstr "cs_create_connection °õ¦æ¥¢±Ñ"
-
-#: ../if_cscope.c:863 ../if_cscope.c:902
-msgid "cs_create_connection: fdopen for to_fp failed"
-msgstr "cs_create_connection: fdopen ¥¢±Ñ (to_fp)"
-
-#: ../if_cscope.c:865 ../if_cscope.c:906
-msgid "cs_create_connection: fdopen for fr_fp failed"
-msgstr "cs_create_connection: fdopen ¥¢±Ñ (fr_fp)"
-
-#: ../if_cscope.c:890
-msgid "E623: Could not spawn cscope process"
-msgstr "E623: µLªk°õ¦æ cscope "
-
-#: ../if_cscope.c:932
-msgid "E567: no cscope connections"
-msgstr "E567: ¨S¦³ cscope ³s½u"
-
-#: ../if_cscope.c:1009
-#, c-format
-msgid "E469: invalid cscopequickfix flag %c for %c"
-msgstr "E469: cscopequickfix ªº flac %c (%c) ¤£¥¿½T"
-
-#: ../if_cscope.c:1058
-#, c-format
-msgid "E259: no matches found for cscope query %s of %s"
-msgstr "E259: §ä¤£¨ì²Å¦X cscope ªº·j´M %s / %s"
-
-#: ../if_cscope.c:1142
-msgid "cscope commands:\n"
-msgstr "cscope ©R¥O:\n"
-
-#: ../if_cscope.c:1150
-#, fuzzy, c-format
-msgid "%-5s: %s%*s (Usage: %s)"
-msgstr "%-5s: %-30s (¥Îªk: %s)"
-
-#: ../if_cscope.c:1155
-msgid ""
-"\n"
-" c: Find functions calling this function\n"
-" d: Find functions called by this function\n"
-" e: Find this egrep pattern\n"
-" f: Find this file\n"
-" g: Find this definition\n"
-" i: Find files #including this file\n"
-" s: Find this C symbol\n"
-" t: Find this text string\n"
-msgstr ""
-
-#: ../if_cscope.c:1226
-msgid "E568: duplicate cscope database not added"
-msgstr "E568: ­«½Æªº cscope ¸ê®Æ®w¥¼³Q¥[¤J"
-
-#: ../if_cscope.c:1335
-#, c-format
-msgid "E261: cscope connection %s not found"
-msgstr "E261: §ä¤£¨ì cscope ³s½u %s"
-
-#: ../if_cscope.c:1364
-#, c-format
-msgid "cscope connection %s closed"
-msgstr "cscope ³s½u %s ¤wÃö³¬"
-
-#. should not reach here
-#: ../if_cscope.c:1486
-msgid "E570: fatal error in cs_manage_matches"
-msgstr "E570: cs_manage_matches ÄY­«¿ù»~"
-
-#: ../if_cscope.c:1693
-#, c-format
-msgid "Cscope tag: %s"
-msgstr "Cscope ¼ÐÅÒ(tag): %s"
-
-#: ../if_cscope.c:1711
-msgid ""
-"\n"
-" # line"
-msgstr ""
-"\n"
-" # ¦æ "
-
-#: ../if_cscope.c:1713
-msgid "filename / context / line\n"
-msgstr "ÀɦW / ¤º¤å / ¦æ¸¹\n"
-
-#: ../if_cscope.c:1809
-#, c-format
-msgid "E609: Cscope error: %s"
-msgstr "E609: Csope ¿ù»~: %s"
-
-#: ../if_cscope.c:2053
-msgid "All cscope databases reset"
-msgstr "­«³]©Ò¦³ cscope ¸ê®Æ®w"
-
-#: ../if_cscope.c:2123
-msgid "no cscope connections\n"
-msgstr "¨S¦³ cscope ³s½u\n"
-
-#: ../if_cscope.c:2126
-msgid " # pid database name prepend path\n"
-msgstr " # pid ¸ê®Æ®w¦WºÙ prepend path\n"
-
-#: ../main.c:144
-#, fuzzy
-msgid "Unknown option argument"
-msgstr "¤£¥¿½Tªº¿ï¶µ"
-
-#: ../main.c:146
-msgid "Too many edit arguments"
-msgstr "¤Ó¦h½s¿è°Ñ¼Æ"
-
-#: ../main.c:148
-msgid "Argument missing after"
-msgstr "¯Ê¤Ö¥²­nªº°Ñ¼Æ:"
-
-#: ../main.c:150
-#, fuzzy
-msgid "Garbage after option argument"
-msgstr "µLªk¿ë»{¦¹¿ï¶µ«áªº©R¥O: "
-
-#: ../main.c:152
-msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
-msgstr "¤Ó¦h \"+command\" ¡B \"-c command\" ©Î \"--cmd command\" °Ñ¼Æ"
-
-#: ../main.c:154
-msgid "Invalid argument for"
-msgstr "¤£¥¿½Tªº°Ñ¼Æ: "
-
-#: ../main.c:294
-#, c-format
-msgid "%d files to edit\n"
-msgstr "ÁÙ¦³ %d ­ÓÀÉ®×µ¥«Ý½s¿è\n"
-
-#: ../main.c:1342
-msgid "Attempt to open script file again: \""
-msgstr "¸Õ¹Ï¦A¦¸¶}±Ò script ÀÉ: \""
-
-#: ../main.c:1350
-msgid "Cannot open for reading: \""
-msgstr "µLªk¶}±Ò¥HŪ¨ú: \""
-
-#: ../main.c:1393
-msgid "Cannot open for script output: \""
-msgstr "µLªk¶}±Ò¬° script ¿é¥X: \""
-
-#: ../main.c:1622
-msgid "Vim: Warning: Output is not to a terminal\n"
-msgstr "Vim: ª`·N: ¿é¥X¤£¬O²×ºÝ¾÷(¿Ã¹õ)\n"
-
-#: ../main.c:1624
-msgid "Vim: Warning: Input is not from a terminal\n"
-msgstr "Vim: ª`·N: ¿é¤J¤£¬O²×ºÝ¾÷(Áä½L)\n"
-
-#. just in case..
-#: ../main.c:1891
-msgid "pre-vimrc command line"
-msgstr "vimrc «e©R¥O¦C"
-
-#: ../main.c:1964
-#, c-format
-msgid "E282: Cannot read from \"%s\""
-msgstr "E282: µLªkŪ¨úÀÉ®× \"%s\""
-
-#: ../main.c:2149
-msgid ""
-"\n"
-"More info with: \"vim -h\"\n"
-msgstr ""
-"\n"
-"¬d¸ß§ó¦h¸ê°T½Ð°õ¦æ: \"vim -h\"\n"
-
-#: ../main.c:2178
-msgid "[file ..] edit specified file(s)"
-msgstr "[ÀÉ®× ..] ½s¿è«ü©wªºÀÉ®×"
-
-#: ../main.c:2179
-msgid "- read text from stdin"
-msgstr "- ±q¼Ð·Ç¿é¤J(stdin)Ū¨úÀÉ®×"
-
-#: ../main.c:2180
-msgid "-t tag edit file where tag is defined"
-msgstr "-t tag ½s¿è®É¨Ï¥Î«ü©wªº tag"
-
-#: ../main.c:2181
-msgid "-q [errorfile] edit file with first error"
-msgstr "-q [errorfile] ½s¿è®É¸ü¤J²Ä¤@­Ó¿ù»~"
-
-#: ../main.c:2187
-msgid ""
-"\n"
-"\n"
-"usage:"
-msgstr ""
-"\n"
-"\n"
-" ¥Îªk:"
-
-#: ../main.c:2189
-msgid " vim [arguments] "
-msgstr "vim [°Ñ¼Æ] "
-
-#: ../main.c:2193
-msgid ""
-"\n"
-" or:"
-msgstr ""
-"\n"
-" ©Î:"
-
-#: ../main.c:2196
-msgid ""
-"\n"
-"\n"
-"Arguments:\n"
-msgstr ""
-"\n"
-"\n"
-"°Ñ¼Æ:\n"
-
-#: ../main.c:2197
-msgid "--\t\t\tOnly file names after this"
-msgstr "--\t\t\t¥u¦³¦b³o¤§«áªºÀÉ®×"
-
-#: ../main.c:2199
-msgid "--literal\t\tDon't expand wildcards"
-msgstr "--literal\t\t¤£®i¶}¸U¥Î¦r¤¸"
-
-#: ../main.c:2201
-msgid "-v\t\t\tVi mode (like \"vi\")"
-msgstr "-v\t\t\tVi ¼Ò¦¡ (¦P \"vi\")"
-
-#: ../main.c:2202
-msgid "-e\t\t\tEx mode (like \"ex\")"
-msgstr "-e\t\t\tEx ¼Ò¦¡ (¦P \"ex\")"
-
-#: ../main.c:2203
-msgid "-E\t\t\tImproved Ex mode"
-msgstr ""
-
-#: ../main.c:2204
-msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
-msgstr "-s\t\t\t¦wÀR (batch) ¼Ò¦¡ (¥u¯à»P \"ex\" ¤@°_¨Ï¥Î)"
-
-#: ../main.c:2205
-msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
-msgstr "-d\t\t\tDiff ¼Ò¦¡ (¦P \"vimdiff\", ¥i¨³³t¤ñ¸û¨âÀɮפ£¦P³B)"
-
-#: ../main.c:2206
-msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
-msgstr "-y\t\t\t²©ö¼Ò¦¡ (¦P \"evim\", modeless)"
-
-#: ../main.c:2207
-msgid "-R\t\t\tReadonly mode (like \"view\")"
-msgstr "-R\t\t\t°ßŪ¼Ò¦¡ (¦P \"view\")"
-
-#: ../main.c:2208
-msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
-msgstr "-Z\t\t\t­­¨î¼Ò¦¡ (¦P \"rvim\")"
-
-#: ../main.c:2209
-msgid "-m\t\t\tModifications (writing files) not allowed"
-msgstr "-m\t\t\t¤£¥i­×§ï (¼g¤JÀÉ®×)"
-
-#: ../main.c:2210
-msgid "-M\t\t\tModifications in text not allowed"
-msgstr "-M\t\t\t¤£¥i­×§ï¤å¦r"
-
-#: ../main.c:2211
-msgid "-b\t\t\tBinary mode"
-msgstr "-b\t\t\t¤G¶i¦ì¼Ò¦¡"
-
-#: ../main.c:2212
-msgid "-l\t\t\tLisp mode"
-msgstr "-l\t\t\tLisp ¼Ò¦¡"
-
-#: ../main.c:2213
-msgid "-C\t\t\tCompatible with Vi: 'compatible'"
-msgstr "-C\t\t\t'compatible' ¶Ç²Î Vi ¬Û®e¼Ò¦¡"
-
-#: ../main.c:2214
-msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
-msgstr "-N\t\t\t'nocompatible' ¤£§¹¥þ»P¶Ç²Î Vi ¬Û®e¡A¥i¨Ï¥Î Vim ¥[±j¯à¤O"
-
-#: ../main.c:2215
-msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
-msgstr ""
-
-#: ../main.c:2216
-msgid "-D\t\t\tDebugging mode"
-msgstr "-D\t\t\t°£¿ù¼Ò¦¡"
-
-#: ../main.c:2217
-msgid "-n\t\t\tNo swap file, use memory only"
-msgstr "-n\t\t\t¤£¨Ï¥Î¼È¦sÀÉ, ¥u¨Ï¥Î°O¾ÐÅé"
-
-#: ../main.c:2218
-msgid "-r\t\t\tList swap files and exit"
-msgstr "-r\t\t\t¦C¥X¼È¦sÀÉ«áÂ÷¶}"
-
-#: ../main.c:2219
-msgid "-r (with file name)\tRecover crashed session"
-msgstr "-r (¥[ÀɦW) \t­×´_¤W¦¸·l·´ªº¸ê®Æ(Recover crashed session)"
-
-#: ../main.c:2220
-msgid "-L\t\t\tSame as -r"
-msgstr "-L\t\t\t¦P -r"
-
-#: ../main.c:2221
-msgid "-A\t\t\tstart in Arabic mode"
-msgstr "-A\t\t\t±Ò°Ê¬° Arabic ¼Ò¦¡"
-
-#: ../main.c:2222
-msgid "-H\t\t\tStart in Hebrew mode"
-msgstr "-H\t\t\t±Ò°Ê¬° Hebrew ¼Ò¦¡"
-
-#: ../main.c:2223
-msgid "-F\t\t\tStart in Farsi mode"
-msgstr "-F\t\t\t±Ò°Ê¬° Farsi ¼Ò¦¡"
-
-#: ../main.c:2224
-msgid "-T <terminal>\tSet terminal type to <terminal>"
-msgstr "-T <terminal>\t³]©w²×ºÝ¾÷¬° <terminal>"
-
-#: ../main.c:2225
-msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
-msgstr "-u <vimrc>\t\t¨Ï¥Î <vimrc> ¨ú¥N¥ô¦ó .vimrc"
-
-#: ../main.c:2226
-msgid "--noplugin\t\tDon't load plugin scripts"
-msgstr "--noplugin\t\t¤£¸ü¤J¥ô¦ó plugin"
-
-#: ../main.c:2227
-#, fuzzy
-msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
-msgstr "-o[N]\t\t¶}±Ò N ­Óµøµ¡ (¹w³]¬O¨C­ÓÀɮפ@­Ó)"
-
-#: ../main.c:2228
-msgid "-o[N]\t\tOpen N windows (default: one for each file)"
-msgstr "-o[N]\t\t¶}±Ò N ­Óµøµ¡ (¹w³]¬O¨C­ÓÀɮפ@­Ó)"
-
-#: ../main.c:2229
-msgid "-O[N]\t\tLike -o but split vertically"
-msgstr "-O[N]\t\t¦P -o ¦ý¨Ï¥Î««ª½¤À³Î"
-
-#: ../main.c:2230
-msgid "+\t\t\tStart at end of file"
-msgstr "+\t\t\t±Ò°Ê«á¸õ¨ìÀÉ®×µ²§À"
-
-#: ../main.c:2231
-msgid "+<lnum>\t\tStart at line <lnum>"
-msgstr "+<lnum>\t\t±Ò°Ê«á¸õ¨ì²Ä <lnum> ¦æ "
-
-#: ../main.c:2232
-msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
-msgstr "--cmd <command>\t¸ü¤J¥ô¦ó vimrc «e°õ¦æ <command>"
-
-#: ../main.c:2233
-msgid "-c <command>\t\tExecute <command> after loading the first file"
-msgstr "-c <command>\t\t¸ü¤J²Ä¤@­ÓÀɮ׫á°õ¦æ <command>"
-
-#: ../main.c:2235
-msgid "-S <session>\t\tSource file <session> after loading the first file"
-msgstr "-S <session>\t\t¸ü¤J²Ä¤@­ÓÀɮ׫á¸ü¤J Session ÀÉ <session>"
-
-#: ../main.c:2236
-msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
-msgstr "-s <scriptin>\t±q <scriptin> Ū¤J¤@¯ë¼Ò¦¡©R¥O"
-
-#: ../main.c:2237
-msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
-msgstr "-w <scriptout>\t¹ïÀÉ®× <scriptout> ªþ¥[(append)©Ò¦³¿é¤Jªº©R¥O"
-
-#: ../main.c:2238
-msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
-msgstr "-W <scriptout>\t¹ïÀÉ®× <scriptout> ¼g¤J©Ò¦³¿é¤Jªº©R¥O"
-
-#: ../main.c:2240
-msgid "--startuptime <file>\tWrite startup timing messages to <file>"
-msgstr ""
-
-#: ../main.c:2242
-msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
-msgstr "-i <viminfo>\t\t¨Ï¥Î <viminfo> ¦Ó«D .viminfo"
-
-#: ../main.c:2243
-msgid "-h or --help\tPrint Help (this message) and exit"
-msgstr "-h ©Î --help\t¦L¥X»¡©ú(¤]´N¬O¥»°T®§)«áÂ÷¶}"
-
-#: ../main.c:2244
-msgid "--version\t\tPrint version information and exit"
-msgstr "--version\t\t¦L¥Xª©¥»¸ê°T«áÂ÷¶}"
-
-#: ../mark.c:676
-msgid "No marks set"
-msgstr "¨S¦³³]©w¼Ð°O (mark)"
-
-#: ../mark.c:678
-#, c-format
-msgid "E283: No marks matching \"%s\""
-msgstr "E283: §ä¤£¨ì²Å¦X \"%s\" ªº¼Ð°O(mark)"
-
-#. Highlight title
-#: ../mark.c:687
-msgid ""
-"\n"
-"mark line col file/text"
-msgstr ""
-"\n"
-"¼Ð°O ¦æ¸¹ Äæ ÀÉ®×/¤å¦r"
-
-#. Highlight title
-#: ../mark.c:789
-msgid ""
-"\n"
-" jump line col file/text"
-msgstr ""
-"\n"
-" jump ¦æ¸¹ Äæ ÀÉ®×/¤å¦r"
-
-#. Highlight title
-#: ../mark.c:831
-msgid ""
-"\n"
-"change line col text"
-msgstr ""
-"\n"
-"§ïÅÜ ¦æ¸¹ Äæ ¤å¦r"
-
-#: ../mark.c:1238
-msgid ""
-"\n"
-"# File marks:\n"
-msgstr ""
-"\n"
-"# Àɮ׼аO:\n"
-
-#. Write the jumplist with -'
-#: ../mark.c:1271
-msgid ""
-"\n"
-"# Jumplist (newest first):\n"
-msgstr ""
-"\n"
-"# Jumplist (¥Ñ·s¨ìÂÂ):\n"
-
-#: ../mark.c:1352
-msgid ""
-"\n"
-"# History of marks within files (newest to oldest):\n"
-msgstr ""
-"\n"
-"# Àɮפº Mark °O¿ý (¥Ñ·s¨ìÂÂ):\n"
-
-#: ../mark.c:1431
-msgid "Missing '>'"
-msgstr "¯Ê¤Ö¹ïÀ³ªº '>'"
-
-#: ../memfile.c:426
-msgid "E293: block was not locked"
-msgstr "E293: °Ï¶ô¥¼³QÂê©w"
-
-#: ../memfile.c:799
-msgid "E294: Seek error in swap file read"
-msgstr "E294: ¼È¦sÀÉŪ¨ú¿ù»~"
-
-#: ../memfile.c:803
-msgid "E295: Read error in swap file"
-msgstr "E295: ¼È¦sÀÉŪ¨ú¿ù»~"
-
-#: ../memfile.c:849
-msgid "E296: Seek error in swap file write"
-msgstr "E296: ¼È¦sÀɼg¤J¿ù»~"
-
-#: ../memfile.c:865
-msgid "E297: Write error in swap file"
-msgstr "E297: ¼È¦sÀɼg¤J¿ù»~"
-
-#: ../memfile.c:1036
-msgid "E300: Swap file already exists (symlink attack?)"
-msgstr "E300: ¼È¦sÀɤw¸g¦s¦b! (¤p¤ß²Å¸¹³sµ²ªº¦w¥þº|¬}!?)"
-
-#: ../memline.c:318
-msgid "E298: Didn't get block nr 0?"
-msgstr "E298: §ä¤£¨ì°Ï¶ô 0?"
-
-#: ../memline.c:361
-msgid "E298: Didn't get block nr 1?"
-msgstr "E298: §ä¤£¨ì°Ï¶ô 1?"
-
-#: ../memline.c:377
-msgid "E298: Didn't get block nr 2?"
-msgstr "E298: §ä¤£¨ì°Ï¶ô 2?"
-
-#. could not (re)open the swap file, what can we do????
-#: ../memline.c:465
-msgid "E301: Oops, lost the swap file!!!"
-msgstr "E301: ¾¾¾¾, ¼È¦sÀɤ£¨£¤F!!!"
-
-#: ../memline.c:477
-msgid "E302: Could not rename swap file"
-msgstr "E302: µLªk§ïÅܼȦsÀɪº¦WºÙ"
-
-#: ../memline.c:554
-#, c-format
-msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
-msgstr "E303: µLªk¶}±Ò¼È¦sÀÉ \"%s\", ¤£¥i¯à­×´_¤F"
-
-#: ../memline.c:666
-#, fuzzy
-msgid "E304: ml_upd_block0(): Didn't get block 0??"
-msgstr "E304: ml_timestamp: §ä¤£¨ì°Ï¶ô 0??"
-
-#. no swap files found
-#: ../memline.c:830
-#, c-format
-msgid "E305: No swap file found for %s"
-msgstr "E305: §ä¤£¨ì %s ªº¼È¦sÀÉ"
-
-#: ../memline.c:839
-msgid "Enter number of swap file to use (0 to quit): "
-msgstr "½Ð¿ï¾Ü§A­n¨Ï¥Îªº¼È¦sÀÉ («ö0 Â÷¶}): "
-
-#: ../memline.c:879
-#, c-format
-msgid "E306: Cannot open %s"
-msgstr "E306: µLªk¶}±Ò %s"
-
-#: ../memline.c:897
-msgid "Unable to read block 0 from "
-msgstr "µLªkŪ¨ú°Ï¶ô 0:"
-
-#: ../memline.c:900
-msgid ""
-"\n"
-"Maybe no changes were made or Vim did not update the swap file."
-msgstr ""
-"\n"
-"¥i¯à¬O§A¨S°µ¹L¥ô¦ó­×§ï©Î¬O Vim ÁÙ¨Ó¤£¤Î§ó·s¼È¦sÀÉ."
-
-#: ../memline.c:909
-msgid " cannot be used with this version of Vim.\n"
-msgstr " µLªk¦b¥»ª©¥»ªº Vim ¤¤¨Ï¥Î.\n"
-
-#: ../memline.c:911
-msgid "Use Vim version 3.0.\n"
-msgstr "¨Ï¥Î Vim 3.0¡C\n"
-
-#: ../memline.c:916
-#, c-format
-msgid "E307: %s does not look like a Vim swap file"
-msgstr "E307: %s ¬Ý°_¨Ó¤£¹³¬O Vim ¼È¦sÀÉ"
-
-#: ../memline.c:922
-msgid " cannot be used on this computer.\n"
-msgstr " µLªk¦b³o»O¹q¸£¤W¨Ï¥Î.\n"
-
-#: ../memline.c:924
-msgid "The file was created on "
-msgstr "¥»Àɮ׫إߩó "
-
-#: ../memline.c:928
-msgid ""
-",\n"
-"or the file has been damaged."
-msgstr ""
-",\n"
-"©Î¬O³oÀɮפw¸g·l·´¡C"
-
-#: ../memline.c:945
-msgid " has been damaged (page size is smaller than minimum value).\n"
-msgstr ""
-
-#: ../memline.c:974
-#, c-format
-msgid "Using swap file \"%s\""
-msgstr "¨Ï¥Î¼È¦sÀÉ \"%s\""
-
-#: ../memline.c:980
-#, c-format
-msgid "Original file \"%s\""
-msgstr "­ì©lÀÉ \"%s\""
-
-#: ../memline.c:995
-msgid "E308: Warning: Original file may have been changed"
-msgstr "E308: ĵ§i: ­ì©lÀÉ®×¥i¯à¤w¸g­×§ï¹L¤F"
-
-#: ../memline.c:1061
-#, c-format
-msgid "E309: Unable to read block 1 from %s"
-msgstr "E309: µLªk±q %s Ū¨ú°Ï¶ô 1"
-
-#: ../memline.c:1065
-msgid "???MANY LINES MISSING"
-msgstr "???¯Ê¤Ö¤Ó¦h¦æ "
-
-#: ../memline.c:1076
-msgid "???LINE COUNT WRONG"
-msgstr "???¦æ¸¹¿ù»~"
-
-#: ../memline.c:1082
-msgid "???EMPTY BLOCK"
-msgstr "???ªÅªº BLOCK"
-
-#: ../memline.c:1103
-msgid "???LINES MISSING"
-msgstr "???§ä¤£¨ì¤@¨Ç¦æ "
-
-#: ../memline.c:1128
-#, c-format
-msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
-msgstr "E310: °Ï¶ô 1 ID ¿ù»~ (%s ¤£¬O¼È¦sÀÉ?)"
-
-#: ../memline.c:1133
-msgid "???BLOCK MISSING"
-msgstr "???§ä¤£¨ìBLOCK"
-
-#: ../memline.c:1147
-msgid "??? from here until ???END lines may be messed up"
-msgstr "??? ±q³o¸Ì¨ì ???END ªº¤º®e¥i¯à¦³°ÝÃD"
-
-#: ../memline.c:1164
-msgid "??? from here until ???END lines may have been inserted/deleted"
-msgstr "??? ±q³o¸Ì¨ì ???END ªº¤º®e¥i¯à³Q§R°£/´¡¤J¹L"
-
-# do not translate
-#: ../memline.c:1181
-msgid "???END"
-msgstr "???END"
-
-#: ../memline.c:1238
-msgid "E311: Recovery Interrupted"
-msgstr "E311: ­×´_¤w¤¤Â_"
-
-#: ../memline.c:1243
-msgid ""
-"E312: Errors detected while recovering; look for lines starting with ???"
-msgstr "E312: ­×´_®Éµo¥Í¿ù»~; ½Ðª`·N¶}ÀY¬° ??? ªº¦æ "
-
-#: ../memline.c:1245
-msgid "See \":help E312\" for more information."
-msgstr "¸Ô²Ó»¡©ú½Ð¨£ \":help E312\""
-
-#: ../memline.c:1249
-msgid "Recovery completed. You should check if everything is OK."
-msgstr "´_­ì§¹¦¨. ½Ð½T©w¤@¤Á¥¿±`."
-
-#: ../memline.c:1251
-msgid ""
-"\n"
-"(You might want to write out this file under another name\n"
-msgstr ""
-"\n"
-"(§A¥i¯à·|·Q­n§â³o­ÓÀÉ®×¥t¦s§OªºÀɦW¡A\n"
-
-#: ../memline.c:1252
-#, fuzzy
-msgid "and run diff with the original file to check for changes)"
-msgstr "¦A°õ¦æ diff »P­ìÀɮפñ¸û¥HÀˬd¬O§_¦³§ïÅÜ)\n"
-
-#: ../memline.c:1254
-msgid "Recovery completed. Buffer contents equals file contents."
-msgstr ""
-
-#: ../memline.c:1255
-#, fuzzy
-msgid ""
-"\n"
-"You may want to delete the .swp file now.\n"
-"\n"
-msgstr ""
-"(D)ª½±µ§R°£ .swp ¼È¦sÀÉ\n"
-"\n"
-
-#. use msg() to start the scrolling properly
-#: ../memline.c:1327
-msgid "Swap files found:"
-msgstr "§ä¨ì¥H¤Uªº¼È¦sÀÉ:"
-
-#: ../memline.c:1446
-msgid " In current directory:\n"
-msgstr " ¦b¥Ø«eªº¥Ø¿ý:\n"
-
-#: ../memline.c:1448
-msgid " Using specified name:\n"
-msgstr " Using specified name:\n"
-
-#: ../memline.c:1450
-msgid " In directory "
-msgstr " ¦b¥Ø¿ý "
-
-#: ../memline.c:1465
-msgid " -- none --\n"
-msgstr " -- µL --\n"
-
-#: ../memline.c:1527
-msgid " owned by: "
-msgstr " ¾Ö¦³ªÌ: "
-
-#: ../memline.c:1529
-msgid " dated: "
-msgstr " ¤é´Á: "
-
-#: ../memline.c:1532 ../memline.c:3231
-msgid " dated: "
-msgstr " ¤é´Á: "
-
-#: ../memline.c:1548
-msgid " [from Vim version 3.0]"
-msgstr " [±q Vim ª©¥» 3.0]"
-
-#: ../memline.c:1550
-msgid " [does not look like a Vim swap file]"
-msgstr " [¤£¹³ Vim ªº¼È¦sÀÉ]"
-
-#: ../memline.c:1552
-msgid " file name: "
-msgstr " ÀɦW: "
-
-#: ../memline.c:1558
-msgid ""
-"\n"
-" modified: "
-msgstr ""
-"\n"
-" ­×§ï¹L: "
-
-#: ../memline.c:1559
-msgid "YES"
-msgstr "¬O"
-
-#: ../memline.c:1559
-msgid "no"
-msgstr "§_"
-
-#: ../memline.c:1562
-msgid ""
-"\n"
-" user name: "
-msgstr ""
-"\n"
-" ¨Ï¥ÎªÌ: "
-
-#: ../memline.c:1568
-msgid " host name: "
-msgstr " ¥D¾÷¦WºÙ: "
-
-#: ../memline.c:1570
-msgid ""
-"\n"
-" host name: "
-msgstr ""
-"\n"
-" ¥D¾÷¦WºÙ: "
-
-#: ../memline.c:1575
-msgid ""
-"\n"
-" process ID: "
-msgstr ""
-"\n"
-" process ID: "
-
-#: ../memline.c:1579
-msgid " (still running)"
-msgstr " (°õ¦æ¤¤)"
-
-#: ../memline.c:1586
-msgid ""
-"\n"
-" [not usable on this computer]"
-msgstr ""
-"\n"
-" [µLªk¦b¥»¹q¸£¤W¨Ï¥Î]"
-
-#: ../memline.c:1590
-msgid " [cannot be read]"
-msgstr " [µLªkŪ¨ú]"
-
-#: ../memline.c:1593
-msgid " [cannot be opened]"
-msgstr " [µLªk¶}±Ò]"
-
-#: ../memline.c:1698
-msgid "E313: Cannot preserve, there is no swap file"
-msgstr "E313: µLªk«O¯d, ¤£¨Ï¥Î¼È¦sÀÉ"
-
-#: ../memline.c:1747
-msgid "File preserved"
-msgstr "Àɮפw«O¯d"
-
-#: ../memline.c:1749
-msgid "E314: Preserve failed"
-msgstr "E314: «O¯d¥¢±Ñ"
-
-#: ../memline.c:1819
-#, c-format
-msgid "E315: ml_get: invalid lnum: %<PRId64>"
-msgstr "E315: ml_get: ¿ù»~ªº lnum: %<PRId64>"
-
-#: ../memline.c:1851
-#, c-format
-msgid "E316: ml_get: cannot find line %<PRId64>"
-msgstr "E316: ml_get: §ä¤£¨ì²Ä %<PRId64> ¦æ "
-
-#: ../memline.c:2236
-msgid "E317: pointer block id wrong 3"
-msgstr "E317: «ü¼Ð°Ï¶ô id ¿ù»~ 3"
-
-#: ../memline.c:2311
-msgid "stack_idx should be 0"
-msgstr "stack_idx À³¸Ó¬O 0"
-
-#: ../memline.c:2369
-msgid "E318: Updated too many blocks?"
-msgstr "E318: §ó·s¤Ó¦h°Ï¶ô?"
-
-#: ../memline.c:2511
-msgid "E317: pointer block id wrong 4"
-msgstr "E317: «ü¼Ð°Ï¶ô id ¿ù»~ 4"
-
-#: ../memline.c:2536
-msgid "deleted block 1?"
-msgstr "§R°£°Ï¶ô 1?"
-
-#: ../memline.c:2707
-#, c-format
-msgid "E320: Cannot find line %<PRId64>"
-msgstr "E320: §ä¤£¨ì²Ä %<PRId64> ¦æ "
-
-#: ../memline.c:2916
-msgid "E317: pointer block id wrong"
-msgstr "E317: «ü¼Ð°Ï¶ô id ¿ù»~"
-
-#: ../memline.c:2930
-msgid "pe_line_count is zero"
-msgstr "pe_line_count ¬°¹s"
-
-#: ../memline.c:2955
-#, c-format
-msgid "E322: line number out of range: %<PRId64> past the end"
-msgstr "E322: ¦æ¸¹¶W¥X½d³ò: %<PRId64> ¶W¹Lµ²§À"
-
-#: ../memline.c:2959
-#, c-format
-msgid "E323: line count wrong in block %<PRId64>"
-msgstr "E323: °Ï¶ô %<PRId64> ¦æ¼Æ¿ù»~"
-
-#: ../memline.c:2999
-msgid "Stack size increases"
-msgstr "°ïÅ|¤j¤p¼W¥["
-
-#: ../memline.c:3038
-msgid "E317: pointer block id wrong 2"
-msgstr "E317: «ü¼Ð°Ï¶ô id ¿ù 2"
-
-#: ../memline.c:3070
-#, c-format
-msgid "E773: Symlink loop for \"%s\""
-msgstr ""
-
-#: ../memline.c:3221
-msgid "E325: ATTENTION"
-msgstr "E325: ª`·N"
-
-#: ../memline.c:3222
-msgid ""
-"\n"
-"Found a swap file by the name \""
-msgstr ""
-"\n"
-"§ä¨ì¼È¦sÀÉ \""
-
-#: ../memline.c:3226
-msgid "While opening file \""
-msgstr "¦b¶}±ÒÀÉ®× \""
-
-#: ../memline.c:3239
-msgid " NEWER than swap file!\n"
-msgstr " ¤ñ¼È¦sÀɧó·s!\n"
-
-#: ../memline.c:3244
-#, fuzzy
-msgid ""
-"\n"
-"(1) Another program may be editing the same file. If this is the case,\n"
-" be careful not to end up with two different instances of the same\n"
-" file when making changes."
-msgstr ""
-"\n"
-"(1) ¥i¯à¦³¥t¤@­Óµ{¦¡¤]¦b½s¿è¦P¤@­ÓÀÉ®×.\n"
-" ¦pªG¬O³o¼Ë¡A½Ð¤p¤ß¤£­n¨âÃä¤@°_¼g¤J¡A¤£µM§Aªº§V¤O³£·|­t½Ñ¬y¤ô¡C\n"
-
-#: ../memline.c:3245
-#, fuzzy
-msgid " Quit, or continue with caution.\n"
-msgstr " Â÷¶}¡A©Î¬OÄ~Äò½s¿è¡C\n"
-
-#: ../memline.c:3246
-#, fuzzy
-msgid "(2) An edit session for this file crashed.\n"
-msgstr ""
-"\n"
-"(2) «e¦¸½s¿è¦¹Àɮɷí¾÷\n"
-
-#: ../memline.c:3247
-msgid " If this is the case, use \":recover\" or \"vim -r "
-msgstr " ¦pªG¬O³o¼Ë, ½Ð¥Î \":recover\" ©Î \"vim -r"
-
-#: ../memline.c:3249
-msgid ""
-"\"\n"
-" to recover the changes (see \":help recovery\").\n"
-msgstr ""
-"\"\n"
-" ¨Ó±Ï¦^­×§ï¸ê®Æ (¸Ô²Ó»¡©ú½Ð¬Ý \":help recovery\").\n"
-
-#: ../memline.c:3250
-msgid " If you did this already, delete the swap file \""
-msgstr " ¦pªG¸Ó±Ïªº³£¤w¸g±Ï¤F, ½Ðª½±µ§R°£¦¹¼È¦sÀÉ \""
-
-#: ../memline.c:3252
-msgid ""
-"\"\n"
-" to avoid this message.\n"
-msgstr ""
-"\"\n"
-" ¥HÁ×§K¦A¬Ý¨ì¦¹°T®§.\n"
-
-#: ../memline.c:3450 ../memline.c:3452
-msgid "Swap file \""
-msgstr "¼È¦sÀÉ \""
-
-#: ../memline.c:3451 ../memline.c:3455
-msgid "\" already exists!"
-msgstr "\" ¤w¸g¦s¦b¤F!"
-
-#: ../memline.c:3457
-msgid "VIM - ATTENTION"
-msgstr "VIM - ª`·N"
-
-#: ../memline.c:3459
-msgid "Swap file already exists!"
-msgstr "¼È¦sÀɤw¸g¦s¦b!"
-
-#: ../memline.c:3464
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"¥H°ßŪ¤è¦¡¶}±Ò(&O)\n"
-"ª½±µ½s¿è(&E)\n"
-"­×´_(&R)\n"
-"Â÷¶}(&Q)\n"
-"¸õ¥X(&A)"
-
-#: ../memline.c:3467
-#, fuzzy
-msgid ""
-"&Open Read-Only\n"
-"&Edit anyway\n"
-"&Recover\n"
-"&Delete it\n"
-"&Quit\n"
-"&Abort"
-msgstr ""
-"¥H°ßŪ¤è¦¡¶}±Ò(&O)\n"
-"ª½±µ½s¿è(&E)\n"
-"­×´_(&R)\n"
-"Â÷¶}(&Q)\n"
-"¸õ¥X(&A)"
-
-#.
-#. * Change the ".swp" extension to find another file that can be used.
-#. * First decrement the last char: ".swo", ".swn", etc.
-#. * If that still isn't enough decrement the last but one char: ".svz"
-#. * Can happen when editing many "No Name" buffers.
-#.
-#. ".s?a"
-#. ".saa": tried enough, give up
-#: ../memline.c:3528
-msgid "E326: Too many swap files found"
-msgstr "E326: §ä¨ì¤Ó¦h¼È¦sÀÉ"
-
-#: ../memory.c:227
-#, c-format
-msgid "E342: Out of memory! (allocating %<PRIu64> bytes)"
-msgstr "E342: °O¾ÐÅ餣¨¬! (¹Á¸Õ°t¸m %<PRIu64> ¦ì¤¸²Õ)"
-
-#: ../menu.c:62
-msgid "E327: Part of menu-item path is not sub-menu"
-msgstr "E327: ³¡¥÷¿ï¶µ¸ô®|¤£¬O¤l¿ï³æ"
-
-#: ../menu.c:63
-msgid "E328: Menu only exists in another mode"
-msgstr "E328: ¿ï³æ¥u¯à¦b¨ä¥¦¼Ò¦¡¤¤¨Ï¥Î"
-
-#: ../menu.c:64
-#, fuzzy, c-format
-msgid "E329: No menu \"%s\""
-msgstr "E329: ¨S¦³¨º¼Ëªº¿ï³æ"
-
-#. Only a mnemonic or accelerator is not valid.
-#: ../menu.c:329
-msgid "E792: Empty menu name"
-msgstr ""
-
-#: ../menu.c:340
-msgid "E330: Menu path must not lead to a sub-menu"
-msgstr "E330: ¿ï³æ¸ô®|¤£¯à«ü¦V¤l¿ï³æ"
-
-#: ../menu.c:365
-msgid "E331: Must not add menu items directly to menu bar"
-msgstr "E331: ¤£¯àª½±µ§â¿ï¶µ¥[¨ì¿ï³æ¦C¤¤"
-
-#: ../menu.c:370
-msgid "E332: Separator cannot be part of a menu path"
-msgstr "E332: ¤À¹j½u¤£¯à¬O¿ï³æ¸ô®|ªº¤@³¡¥÷"
-
-#. Now we have found the matching menu, and we list the mappings
-#. Highlight title
-#: ../menu.c:762
-msgid ""
-"\n"
-"--- Menus ---"
-msgstr ""
-"\n"
-"--- ¿ï³æ ---"
-
-#: ../menu.c:1313
-msgid "E333: Menu path must lead to a menu item"
-msgstr "E333: ¿ï³æ¸ô®|¥²»Ý«ü¦V¤@­Ó¿ï¶µ"
-
-#: ../menu.c:1330
-#, c-format
-msgid "E334: Menu not found: %s"
-msgstr "E334: [¿ï³æ] §ä¤£¨ì %s"
-
-#: ../menu.c:1396
-#, c-format
-msgid "E335: Menu not defined for %s mode"
-msgstr "E335: %s ¼Ò¦¡¥¼©w¸q¿ï³æ"
-
-#: ../menu.c:1426
-msgid "E336: Menu path must lead to a sub-menu"
-msgstr "E336: ¿ï³æ¸ô®|¥²»Ý«ü¦V¤l¿ï³æ"
-
-#: ../menu.c:1447
-msgid "E337: Menu not found - check menu names"
-msgstr "E337: §ä¤£¨ì¿ï³æ - ½ÐÀˬd¿ï³æ¦WºÙ"
-
-#: ../message.c:423
-#, c-format
-msgid "Error detected while processing %s:"
-msgstr "³B²z %s ®Éµo¥Í¿ù»~:"
-
-#: ../message.c:445
-#, c-format
-msgid "line %4ld:"
-msgstr "¦æ %4ld:"
-
-#: ../message.c:617
-#, c-format
-msgid "E354: Invalid register name: '%s'"
-msgstr "E354: ¼È¦s¾¹¦WºÙ¿ù»~: '%s'"
-
-#: ../message.c:745
-msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
-msgstr ""
-"¥¿Å餤¤å°T®§ºûÅ@ªÌ: Francis S.Lin <piaip@csie.ntu.edu."
-"tw>, Cecil Sheng <b7506022@csie.ntu.edu.tw>"
-
-#: ../message.c:986
-msgid "Interrupt: "
-msgstr "¤w¤¤Â_: "
-
-#: ../message.c:988
-#, fuzzy
-msgid "Press ENTER or type command to continue"
-msgstr "½Ð«ö ENTER ©Î¨ä¥¦©R¥O¥HÄ~Äò"
-
-#: ../message.c:1843
-#, fuzzy, c-format
-msgid "%s line %<PRId64>"
-msgstr "%s, ¦æ %<PRId64>"
-
-#: ../message.c:2392
-msgid "-- More --"
-msgstr "-- ©|¦³ --"
-
-#: ../message.c:2398
-msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
-msgstr ""
-
-#: ../message.c:3021 ../message.c:3031
-msgid "Question"
-msgstr "°ÝÃD"
-
-#: ../message.c:3023
-msgid ""
-"&Yes\n"
-"&No"
-msgstr ""
-"&Y¬O\n"
-"&N§_"
-
-#: ../message.c:3033
-msgid ""
-"&Yes\n"
-"&No\n"
-"&Cancel"
-msgstr ""
-"&Y¬O\n"
-"&N§_\n"
-"&C¨ú®ø"
-
-#: ../message.c:3045
-msgid ""
-"&Yes\n"
-"&No\n"
-"Save &All\n"
-"&Discard All\n"
-"&Cancel"
-msgstr ""
-"&Y¬O\n"
-"&N§_\n"
-"&A¥þ³¡¦sÀÉ\n"
-"&D¥þ³¡¤£¦s\n"
-"&C¨ú®ø"
-
-#: ../message.c:3058
-#, fuzzy
-msgid "E766: Insufficient arguments for printf()"
-msgstr "E116: ¨ç¦¡ %s ªº¤Þ¼Æ¤£¥¿½T"
-
-#: ../message.c:3119
-msgid "E807: Expected Float argument for printf()"
-msgstr ""
-
-#: ../message.c:3873
-#, fuzzy
-msgid "E767: Too many arguments to printf()"
-msgstr "E118: ¨ç¦¡ %s ªº¤Þ¼Æ¹L¦h"
-
-#: ../misc1.c:2256
-msgid "W10: Warning: Changing a readonly file"
-msgstr "W10: ª`·N: §A¥¿¦b­×§ï¤@­Ó°ßŪÀÉ"
-
-#: ../misc1.c:2537
-msgid "Type number and <Enter> or click with mouse (empty cancels): "
-msgstr ""
-
-#: ../misc1.c:2539
-msgid "Type number and <Enter> (empty cancels): "
-msgstr ""
-
-#: ../misc1.c:2585
-msgid "1 more line"
-msgstr "ÁÙ¦³¤@¦æ "
-
-#: ../misc1.c:2588
-msgid "1 line less"
-msgstr "¤Ö©ó¤@¦æ "
-
-#: ../misc1.c:2593
-#, c-format
-msgid "%<PRId64> more lines"
-msgstr "ÁÙ¦³ %<PRId64> ¦æ "
-
-#: ../misc1.c:2596
-#, c-format
-msgid "%<PRId64> fewer lines"
-msgstr "¥u³Ñ %<PRId64> ¦æ "
-
-#: ../misc1.c:2599
-msgid " (Interrupted)"
-msgstr " (¤w¤¤Â_)"
-
-#: ../misc1.c:2635
-msgid "Beep!"
-msgstr ""
-
-#: ../misc2.c:738
-#, c-format
-msgid "Calling shell to execute: \"%s\""
-msgstr "©I¥s shell °õ¦æ: \"%s\""
-
-#: ../normal.c:183
-msgid "E349: No identifier under cursor"
-msgstr "E349: ´å¼Ð³B¨S¦³ÃѧO¦r"
-
-#: ../normal.c:1866
-#, fuzzy
-msgid "E774: 'operatorfunc' is empty"
-msgstr "E221: ¿ï¶µ 'commentstring' ¥¼³]©w"
-
-#: ../normal.c:2637
-msgid "Warning: terminal cannot highlight"
-msgstr "ª`·N: §Aªº²×ºÝ¾÷µLªkÅã¥Ü°ª«G«×"
-
-#: ../normal.c:2807
-msgid "E348: No string under cursor"
-msgstr "E348: ´å¼Ð³B¨S¦³¦r¦ê"
-
-#: ../normal.c:3937
-msgid "E352: Cannot erase folds with current 'foldmethod'"
-msgstr "E352: µLªk¦b¥Ø«eªº 'foldmethod' ¤U§R°£ fold"
-
-#: ../normal.c:5897
-msgid "E664: changelist is empty"
-msgstr "E664: Åܧó¦Cªí¬OªÅªº"
-
-#: ../normal.c:5899
-msgid "E662: At start of changelist"
-msgstr "E662: ¤w¦bÅܧó¦Cªíªº¶}ÀY"
-
-#: ../normal.c:5901
-msgid "E663: At end of changelist"
-msgstr "E663: ¤w¦bÅܧó¦Cªíªºµ²§À"
-
-#: ../normal.c:7053
-msgid "Type :quit<Enter> to exit Nvim"
-msgstr "­nÂ÷¶} Vim ½Ð¿é¤J :quit<Enter> "
-
-#: ../ops.c:248
-#, c-format
-msgid "1 line %sed 1 time"
-msgstr "¤@¦æ %s ¹L ¤@¦¸"
-
-#: ../ops.c:250
-#, c-format
-msgid "1 line %sed %d times"
-msgstr "¤@¦æ %s ¹L %d ¦¸"
-
-#: ../ops.c:253
-#, c-format
-msgid "%<PRId64> lines %sed 1 time"
-msgstr "%<PRId64> ¦æ %s ¹L ¤@¦¸"
-
-#: ../ops.c:256
-#, c-format
-msgid "%<PRId64> lines %sed %d times"
-msgstr "%<PRId64> ¦æ %s ¹L %d ¦¸"
-
-#: ../ops.c:592
-#, c-format
-msgid "%<PRId64> lines to indent... "
-msgstr "ÁY±Æ %<PRId64> ¦æ... "
-
-#: ../ops.c:634
-msgid "1 line indented "
-msgstr "¤@¦æ¤wÁY±Æ"
-
-#: ../ops.c:636
-#, c-format
-msgid "%<PRId64> lines indented "
-msgstr "¤wÁY±Æ %<PRId64> ¦æ "
-
-#: ../ops.c:938
-#, fuzzy
-msgid "E748: No previously used register"
-msgstr "E186: ¨S¦³«e¤@­Ó¥Ø¿ý"
-
-#. must display the prompt
-#: ../ops.c:1433
-msgid "cannot yank; delete anyway"
-msgstr "µLªk°Å¤U; ª½±µ§R°£"
-
-#: ../ops.c:1929
-msgid "1 line changed"
-msgstr " 1 ¦æ ~ed"
-
-#: ../ops.c:1931
-#, c-format
-msgid "%<PRId64> lines changed"
-msgstr "¤w§ïÅÜ %<PRId64> ¦æ "
-
-#: ../ops.c:2521
-#, fuzzy
-msgid "block of 1 line yanked"
-msgstr "¤w½Æ»s 1 ¦æ "
-
-#: ../ops.c:2523
-msgid "1 line yanked"
-msgstr "¤w½Æ»s 1 ¦æ "
-
-#: ../ops.c:2525
-#, fuzzy, c-format
-msgid "block of %<PRId64> lines yanked"
-msgstr "¤w½Æ»s %<PRId64> ¦æ "
-
-#: ../ops.c:2528
-#, c-format
-msgid "%<PRId64> lines yanked"
-msgstr "¤w½Æ»s %<PRId64> ¦æ "
-
-#: ../ops.c:2710
-#, c-format
-msgid "E353: Nothing in register %s"
-msgstr "E353: ¼È¦s¾¹ %s ¸Ì¨S¦³ªF¦è"
-
-#. Highlight title
-#: ../ops.c:3185
-msgid ""
-"\n"
-"--- Registers ---"
-msgstr ""
-"\n"
-"--- ¼È¦s¾¹ ---"
-
-#: ../ops.c:4455
-msgid "Illegal register name"
-msgstr "¤£¥¿½Tªº¼È¦s¾¹¦WºÙ"
-
-#: ../ops.c:4533
-msgid ""
-"\n"
-"# Registers:\n"
-msgstr ""
-"\n"
-"# ¼È¦s¾¹:\n"
-
-#: ../ops.c:4575
-#, c-format
-msgid "E574: Unknown register type %d"
-msgstr "E574: ¥¼ª¾ªºµù¥U«¬ºA: %d"
-
-#: ../ops.c:5089
-#, c-format
-msgid "%<PRId64> Cols; "
-msgstr "%<PRId64> Äæ; "
-
-#: ../ops.c:5097
-#, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"¿ï¾Ü¤F %s%<PRId64>/%<PRId64> ¦æ; %<PRId64>/%<PRId64> ¦r(Word); %<PRId64>/"
-"%<PRId64> ¦r¤¸(Bytes)"
-
-#: ../ops.c:5105
-#, fuzzy, c-format
-msgid ""
-"Selected %s%<PRId64> of %<PRId64> Lines; %<PRId64> of %<PRId64> Words; "
-"%<PRId64> of %<PRId64> Chars; %<PRId64> of %<PRId64> Bytes"
-msgstr ""
-"¿ï¾Ü¤F %s%<PRId64>/%<PRId64> ¦æ; %<PRId64>/%<PRId64> ¦r(Word); %<PRId64>/"
-"%<PRId64> ¦r¤¸(Bytes)"
-
-#: ../ops.c:5123
-#, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Byte "
-"%<PRId64> of %<PRId64>"
-msgstr ""
-"Äæ %s/%s; ¦æ %<PRId64>/%<PRId64>; ¦r(Word) %<PRId64>/%<PRId64>; ¦r¤¸(Byte) "
-"%<PRId64>/%<PRId64>"
-
-#: ../ops.c:5133
-#, fuzzy, c-format
-msgid ""
-"Col %s of %s; Line %<PRId64> of %<PRId64>; Word %<PRId64> of %<PRId64>; Char "
-"%<PRId64> of %<PRId64>; Byte %<PRId64> of %<PRId64>"
-msgstr ""
-"Äæ %s/%s; ¦æ %<PRId64>/%<PRId64>; ¦r(Word) %<PRId64>/%<PRId64>; ¦r¤¸(Byte) "
-"%<PRId64>/%<PRId64>"
-
-#: ../ops.c:5146
-#, c-format
-msgid "(+%<PRId64> for BOM)"
-msgstr "(+%<PRId64> for BOM)"
-
-#: ../option.c:1238
-msgid "%<%f%h%m%=Page %N"
-msgstr "%<%f%h%m%=²Ä %N ­¶"
-
-# ? what's this for?
-#: ../option.c:1574
-msgid "Thanks for flying Vim"
-msgstr "·PÁ±z·R¥Î Vim"
-
-#. found a mismatch: skip
-#: ../option.c:2698
-msgid "E518: Unknown option"
-msgstr "E518: ¤£¥¿½Tªº¿ï¶µ"
-
-#: ../option.c:2709
-msgid "E519: Option not supported"
-msgstr "E519: ¤£¤ä´©¸Ó¿ï¶µ"
-
-#: ../option.c:2740
-msgid "E520: Not allowed in a modeline"
-msgstr "E520: ¤£¯à¦b Modeline ¸Ì¥X²{"
-
-#: ../option.c:2815
-msgid "E846: Key code not set"
-msgstr ""
-
-#: ../option.c:2924
-msgid "E521: Number required after ="
-msgstr "E521: = «á»Ý­n¦³¼Æ¦r"
-
-#: ../option.c:3226 ../option.c:3864
-msgid "E522: Not found in termcap"
-msgstr "E522: Termcap ¸Ì­±§ä¤£¨ì"
-
-#: ../option.c:3335
-#, c-format
-msgid "E539: Illegal character <%s>"
-msgstr "E539: ¤£¥¿½Tªº¦r¤¸ <%s>"
-
-#: ../option.c:3862
-msgid "E529: Cannot set 'term' to empty string"
-msgstr "E529: µLªk³]©w 'term' ¬°ªÅ¦r¦ê"
-
-#: ../option.c:3885
-msgid "E589: 'backupext' and 'patchmode' are equal"
-msgstr "E589: 'backupext' ¸ò 'patchmode' ¬O¤@¼Ëªº"
-
-#: ../option.c:3964
-msgid "E834: Conflicts with value of 'listchars'"
-msgstr ""
-
-#: ../option.c:3966
-msgid "E835: Conflicts with value of 'fillchars'"
-msgstr ""
-
-#: ../option.c:4163
-msgid "E524: Missing colon"
-msgstr "E524: ¯Ê¤Ö colon"
-
-#: ../option.c:4165
-msgid "E525: Zero length string"
-msgstr "E525: ¹sªø«×¦r¦ê"
-
-#: ../option.c:4220
-#, c-format
-msgid "E526: Missing number after <%s>"
-msgstr "E526: <%s> «á¯Ê¤Ö¼Æ¦r"
-
-#: ../option.c:4232
-msgid "E527: Missing comma"
-msgstr "E527: ¯Ê¤Ö³r¸¹"
-
-#: ../option.c:4239
-msgid "E528: Must specify a ' value"
-msgstr "E528: ¥²»Ý«ü©w¤@­Ó ' ­È"
-
-#: ../option.c:4271
-msgid "E595: contains unprintable or wide character"
-msgstr "E595: ¤º§tµLªkÅã¥Üªº¦r¤¸"
-
-#: ../option.c:4469
-#, c-format
-msgid "E535: Illegal character after <%c>"
-msgstr "E535: <%c> «á¦³¤£¥¿½Tªº¦r¤¸"
-
-#: ../option.c:4534
-msgid "E536: comma required"
-msgstr "E536: »Ý­n³r¸¹"
-
-#: ../option.c:4543
-#, c-format
-msgid "E537: 'commentstring' must be empty or contain %s"
-msgstr "E537: 'commentstring' ¥²»Ý¬OªÅ¥Õ©Î¥]§t %s"
-
-#: ../option.c:4928
-msgid "E540: Unclosed expression sequence"
-msgstr "E540: ¨S¦³µ²§ôªº¹Bºâ¦¡: "
-
-#: ../option.c:4932
-msgid "E541: too many items"
-msgstr "E541: ¤Ó¦h¶µ¥Ø"
-
-#: ../option.c:4934
-msgid "E542: unbalanced groups"
-msgstr "E542: ¤£¹ïºÙªº group"
-
-#: ../option.c:5148
-msgid "E590: A preview window already exists"
-msgstr "E590: ¹wµøªºµøµ¡¤w¸g¦s¦b¤F"
-
-#: ../option.c:5311
-msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
-msgstr "W17: Arabic »Ý­n UTF-8, ½Ð°õ¦æ ':set encoding=utf-8'"
-
-#: ../option.c:5623
-#, c-format
-msgid "E593: Need at least %d lines"
-msgstr "E593: ¦Ü¤Ö»Ý­n %d ¦æ "
-
-#: ../option.c:5631
-#, c-format
-msgid "E594: Need at least %d columns"
-msgstr "E594: ¦Ü¤Ö»Ý­n %d Äæ"
-
-#: ../option.c:6011
-#, c-format
-msgid "E355: Unknown option: %s"
-msgstr "E355: ¤£¥¿½Tªº¿ï¶µ: %s"
-
-#. There's another character after zeros or the string
-#. * is empty. In both cases, we are trying to set a
-#. * num option using a string.
-#: ../option.c:6037
-#, fuzzy, c-format
-msgid "E521: Number required: &%s = '%s'"
-msgstr "E521: = «á»Ý­n¦³¼Æ¦r"
-
-#: ../option.c:6149
-msgid ""
-"\n"
-"--- Terminal codes ---"
-msgstr ""
-"\n"
-"--- ²×ºÝ¾÷½X ---"
-
-#: ../option.c:6151
-msgid ""
-"\n"
-"--- Global option values ---"
-msgstr ""
-"\n"
-"--- Global ¿ï¶µ­È ---"
-
-#: ../option.c:6153
-msgid ""
-"\n"
-"--- Local option values ---"
-msgstr ""
-"\n"
-"--- Local ¿ï¶µ­È ---"
-
-#: ../option.c:6155
-msgid ""
-"\n"
-"--- Options ---"
-msgstr ""
-"\n"
-"--- ¿ï¶µ ---"
-
-#: ../option.c:6816
-msgid "E356: get_varp ERROR"
-msgstr "E356: get_varp ¿ù»~"
-
-#: ../option.c:7696
-#, c-format
-msgid "E357: 'langmap': Matching character missing for %s"
-msgstr "E357: 'langmap': §ä¤£¨ì %s ¹ïÀ³ªº¦r¤¸"
-
-#: ../option.c:7715
-#, c-format
-msgid "E358: 'langmap': Extra characters after semicolon: %s"
-msgstr "E358: 'langmap': ¤À¸¹«á¦³¦h¾lªº¦r¤¸: %s"
-
-#: ../os/shell.c:194
-msgid ""
-"\n"
-"Cannot execute shell "
-msgstr ""
-"\n"
-"¤£¯à°õ¦æ shell"
-
-#: ../os/shell.c:439
-msgid ""
-"\n"
-"shell returned "
-msgstr ""
-"\n"
-"Shell ¤wªð¦^"
-
-#: ../os_unix.c:465 ../os_unix.c:471
-msgid ""
-"\n"
-"Could not get security context for "
-msgstr ""
-
-#: ../os_unix.c:479
-msgid ""
-"\n"
-"Could not set security context for "
-msgstr ""
-
-#: ../os_unix.c:1558 ../os_unix.c:1647
-#, c-format
-msgid "dlerror = \"%s\""
-msgstr ""
-
-#: ../path.c:1449
-#, c-format
-msgid "E447: Can't find file \"%s\" in path"
-msgstr "E447: ¦b¸ô®|¤¤§ä¤£¨ìÀÉ®× \"%s\""
-
-#: ../quickfix.c:359
-#, c-format
-msgid "E372: Too many %%%c in format string"
-msgstr "E372: ®æ¦¡¤Æ¦r¦ê¸Ì¦³¤Ó¦h %%%c "
-
-#: ../quickfix.c:371
-#, c-format
-msgid "E373: Unexpected %%%c in format string"
-msgstr "E373: ®æ¦¡¤Æ¦r¦ê¤£À³¸Ó¥X²{ %%%c "
-
-#: ../quickfix.c:420
-msgid "E374: Missing ] in format string"
-msgstr "E374: ®æ¦¡¤Æ¦r¦ê¸Ì¤Ö¤F ]"
-
-#: ../quickfix.c:431
-#, c-format
-msgid "E375: Unsupported %%%c in format string"
-msgstr "E375: ®æ¦¡¤Æ¦r¦ê¸Ì¦³¤£¤ä´©ªº %%%c "
-
-#: ../quickfix.c:448
-#, c-format
-msgid "E376: Invalid %%%c in format string prefix"
-msgstr "E376: ®æ¦¡¤Æ¦r¦ê¶}ÀY¸Ì¦³¤£¥¿½Tªº %%%c "
-
-#: ../quickfix.c:454
-#, c-format
-msgid "E377: Invalid %%%c in format string"
-msgstr "E377: ®æ¦¡¤Æ¦r¦ê¸Ì¦³¤£¥¿½Tªº %%%c "
-
-#. nothing found
-#: ../quickfix.c:477
-msgid "E378: 'errorformat' contains no pattern"
-msgstr "E378: 'errorformat' ¥¼³]©w"
-
-#: ../quickfix.c:695
-msgid "E379: Missing or empty directory name"
-msgstr "E379: §ä¤£¨ì¥Ø¿ý¦WºÙ©Î¬OªÅªº¥Ø¿ý¦WºÙ"
-
-#: ../quickfix.c:1305
-msgid "E553: No more items"
-msgstr "E553: ¨S¦³¨ä¥¦¶µ¥Ø"
-
-#: ../quickfix.c:1674
-#, c-format
-msgid "(%d of %d)%s%s: "
-msgstr "(%d / %d)%s%s: "
-
-#: ../quickfix.c:1676
-msgid " (line deleted)"
-msgstr " (¦æ¤w§R°£)"
-
-#: ../quickfix.c:1863
-msgid "E380: At bottom of quickfix stack"
-msgstr "E380: Quickfix °ïÅ|µ²§À"
-
-#: ../quickfix.c:1869
-msgid "E381: At top of quickfix stack"
-msgstr "E381: Quickfix °ïÅ|³»ºÝ"
-
-#: ../quickfix.c:1880
-#, c-format
-msgid "error list %d of %d; %d errors"
-msgstr "¿ù»~¦Cªí %d/%d; ¦@¦³ %d ¶µ¿ù»~"
-
-#: ../quickfix.c:2427
-msgid "E382: Cannot write, 'buftype' option is set"
-msgstr "E382: µLªk¼g¤J¡A'buftype' ¿ï¶µ¤w³]©w"
-
-#: ../quickfix.c:2812
-msgid "E683: File name missing or invalid pattern"
-msgstr ""
-
-#: ../quickfix.c:2911
-#, fuzzy, c-format
-msgid "Cannot open file \"%s\""
-msgstr "µLªk¶}±ÒÀÉ®× %s"
-
-#: ../quickfix.c:3429
-#, fuzzy
-msgid "E681: Buffer is not loaded"
-msgstr "¤wÄÀ©ñ¤@­Ó½w½Ä°Ï"
-
-#: ../quickfix.c:3487
-#, fuzzy
-msgid "E777: String or List expected"
-msgstr "E548: À³¸Ó­n¦³¼Æ¦r"
-
-#: ../regexp.c:359
-#, c-format
-msgid "E369: invalid item in %s%%[]"
-msgstr "E369: ¤£¥¿½Tªº¶µ¥Ø¡G %s%%[]"
-
-#: ../regexp.c:374
-#, fuzzy, c-format
-msgid "E769: Missing ] after %s["
-msgstr "E69: %s%%[ «á¯Ê¤Ö ]"
-
-#: ../regexp.c:375
-#, c-format
-msgid "E53: Unmatched %s%%("
-msgstr "E53: µL¹ïÀ³ªº %s%%("
-
-#: ../regexp.c:376
-#, c-format
-msgid "E54: Unmatched %s("
-msgstr "E54: µL¹ïÀ³ªº %s("
-
-#: ../regexp.c:377
-#, c-format
-msgid "E55: Unmatched %s)"
-msgstr "E55: µL¹ïÀ³ªº %s)"
-
-#: ../regexp.c:378
-msgid "E66: \\z( not allowed here"
-msgstr "E66: \\z( ¤£¯à¦b¦¹¥X²{"
-
-#: ../regexp.c:379
-msgid "E67: \\z1 et al. not allowed here"
-msgstr "E67: \\z1 et al. ¤£¯à¦b¦¹¥X²{"
-
-#: ../regexp.c:380
-#, c-format
-msgid "E69: Missing ] after %s%%["
-msgstr "E69: %s%%[ «á¯Ê¤Ö ]"
-
-#: ../regexp.c:381
-#, c-format
-msgid "E70: Empty %s%%[]"
-msgstr "E70: ªÅªº %s%%[]"
-
-#: ../regexp.c:1209 ../regexp.c:1224
-msgid "E339: Pattern too long"
-msgstr "E339: ¦W¦r¤Óªø"
-
-#: ../regexp.c:1371
-msgid "E50: Too many \\z("
-msgstr "E50: ¤Ó¦h \\z("
-
-#: ../regexp.c:1378
-#, c-format
-msgid "E51: Too many %s("
-msgstr "E51: ¤Ó¦h %s("
-
-#: ../regexp.c:1427
-msgid "E52: Unmatched \\z("
-msgstr "E52: µL¹ïÀ³ªº \\z("
-
-#: ../regexp.c:1637
-#, c-format
-msgid "E59: invalid character after %s@"
-msgstr "E59: «á­±¦³¤£¥¿½Tªº¦r¤¸: %s@"
-
-#: ../regexp.c:1672
-#, c-format
-msgid "E60: Too many complex %s{...}s"
-msgstr "E60: ¤Ó¦h½ÆÂøªº %s{...}s"
-
-#: ../regexp.c:1687
-#, c-format
-msgid "E61: Nested %s*"
-msgstr "E61: ±_ª¬ %s*"
-
-#: ../regexp.c:1690
-#, c-format
-msgid "E62: Nested %s%c"
-msgstr "E62: ±_ª¬ %s%c"
-
-#: ../regexp.c:1800
-msgid "E63: invalid use of \\_"
-msgstr "E63: ¤£¥¿½Tªº¨Ï¥Î \\_"
-
-#: ../regexp.c:1850
-#, c-format
-msgid "E64: %s%c follows nothing"
-msgstr "E64: %s%c ¨S¦³±µªF¦è"
-
-#: ../regexp.c:1902
-msgid "E65: Illegal back reference"
-msgstr "E65: ¤£¥¿½Tªº¤Ï¦V°Ñ¦Ò"
-
-#: ../regexp.c:1943
-msgid "E68: Invalid character after \\z"
-msgstr "E68: «á­±¦³¤£¥¿½Tªº¦r¤¸: \\z"
-
-#: ../regexp.c:2049 ../regexp_nfa.c:1296
-#, fuzzy, c-format
-msgid "E678: Invalid character after %s%%[dxouU]"
-msgstr "E71: «á­±¦³¤£¥¿½Tªº¦r¤¸: %s%%"
-
-#: ../regexp.c:2107
-#, c-format
-msgid "E71: Invalid character after %s%%"
-msgstr "E71: «á­±¦³¤£¥¿½Tªº¦r¤¸: %s%%"
-
-#: ../regexp.c:3017
-#, c-format
-msgid "E554: Syntax error in %s{...}"
-msgstr "E554: »yªk¿ù»~: %s{...}"
-
-#: ../regexp.c:3805
-msgid "External submatches:\n"
-msgstr "¥~³¡²Å¦X:\n"
-
-#: ../regexp.c:7022
-msgid ""
-"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
-"used "
-msgstr ""
-
-#: ../regexp_nfa.c:239
-msgid "E865: (NFA) Regexp end encountered prematurely"
-msgstr ""
-
-#: ../regexp_nfa.c:240
-#, c-format
-msgid "E866: (NFA regexp) Misplaced %c"
-msgstr ""
-
-#: ../regexp_nfa.c:242
-#, c-format
-msgid "E877: (NFA regexp) Invalid character class: %<PRId64>"
-msgstr ""
-
-#: ../regexp_nfa.c:1261
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\z%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1387
-#, c-format
-msgid "E867: (NFA) Unknown operator '\\%%%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1802
-#, c-format
-msgid "E869: (NFA) Unknown operator '\\@%c'"
-msgstr ""
-
-#: ../regexp_nfa.c:1831
-msgid "E870: (NFA regexp) Error reading repetition limits"
-msgstr ""
-
-#. Can't have a multi follow a multi.
-#: ../regexp_nfa.c:1895
-msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
-msgstr ""
-
-#. Too many `('
-#: ../regexp_nfa.c:2037
-msgid "E872: (NFA regexp) Too many '('"
-msgstr ""
-
-#: ../regexp_nfa.c:2042
-#, fuzzy
-msgid "E879: (NFA regexp) Too many \\z("
-msgstr "E50: ¤Ó¦h \\z("
-
-#: ../regexp_nfa.c:2066
-msgid "E873: (NFA regexp) proper termination error"
-msgstr ""
-
-#: ../regexp_nfa.c:2599
-msgid "E874: (NFA) Could not pop the stack !"
-msgstr ""
-
-#: ../regexp_nfa.c:3298
-msgid ""
-"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
-"left on stack"
-msgstr ""
-
-#: ../regexp_nfa.c:3302
-msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
-msgstr ""
-
-#: ../regexp_nfa.c:4571 ../regexp_nfa.c:4869
-msgid ""
-"Could not open temporary log file for writing, displaying on stderr ... "
-msgstr ""
-
-#: ../regexp_nfa.c:4840
-#, c-format
-msgid "(NFA) COULD NOT OPEN %s !"
-msgstr ""
-
-#: ../regexp_nfa.c:6049
-#, fuzzy
-msgid "Could not open temporary log file for writing "
-msgstr "E214: §ä¤£¨ì¼g¤J¥Îªº¼È¦sÀÉ"
-
-#: ../screen.c:7435
-msgid " VREPLACE"
-msgstr " V-¨ú¥N"
-
-#: ../screen.c:7437
-msgid " REPLACE"
-msgstr " ¨ú¥N"
-
-#: ../screen.c:7440
-msgid " REVERSE"
-msgstr " ¤ÏÂà"
-
-#: ../screen.c:7441
-msgid " INSERT"
-msgstr " ´¡¤J"
-
-#: ../screen.c:7443
-msgid " (insert)"
-msgstr " (´¡¤J)"
-
-#: ../screen.c:7445
-msgid " (replace)"
-msgstr " (¨ú¥N)"
-
-#: ../screen.c:7447
-msgid " (vreplace)"
-msgstr " (v-¨ú¥N)"
-
-#: ../screen.c:7449
-msgid " Hebrew"
-msgstr " Hebrew"
-
-#: ../screen.c:7454
-msgid " Arabic"
-msgstr " Arabic"
-
-#: ../screen.c:7456
-msgid " (lang)"
-msgstr " (»y¨¥)"
-
-#: ../screen.c:7459
-msgid " (paste)"
-msgstr " (¶K¤W)"
-
-#: ../screen.c:7469
-msgid " VISUAL"
-msgstr " ¿ï¨ú"
-
-#: ../screen.c:7470
-msgid " VISUAL LINE"
-msgstr " [¦æ] "
-
-#: ../screen.c:7471
-msgid " VISUAL BLOCK"
-msgstr " [°Ï¶ô] "
-
-#: ../screen.c:7472
-msgid " SELECT"
-msgstr " ¿ï¨ú"
-
-#: ../screen.c:7473
-msgid " SELECT LINE"
-msgstr " ¿ï¨ú¦æ "
-
-#: ../screen.c:7474
-msgid " SELECT BLOCK"
-msgstr " ¿ï¨ú°Ï¶ô"
-
-#: ../screen.c:7486 ../screen.c:7541
-msgid "recording"
-msgstr "°O¿ý¤¤"
-
-#: ../search.c:487
-#, c-format
-msgid "E383: Invalid search string: %s"
-msgstr "E383: ¿ù»~ªº·j´M¦r¦ê: %s"
-
-#: ../search.c:832
-#, c-format
-msgid "E384: search hit TOP without match for: %s"
-msgstr "E384: ¤w·j´M¨ìÀÉ®×¶}ÀY¤´§ä¤£¨ì %s"
-
-#: ../search.c:835
-#, c-format
-msgid "E385: search hit BOTTOM without match for: %s"
-msgstr "E385: ¤w·j´M¨ìÀÉ®×µ²§À¤´§ä¤£¨ì %s"
-
-#: ../search.c:1200
-msgid "E386: Expected '?' or '/' after ';'"
-msgstr "E386: ¦b ';' «á­±À³¸Ó¦³ '?' ©Î '/'"
-
-#: ../search.c:4085
-msgid " (includes previously listed match)"
-msgstr " (¥]¬A«e¦¸¦C¥X²Å¦X¶µ)"
-
-#. cursor at status line
-#: ../search.c:4104
-msgid "--- Included files "
-msgstr "--- ¤Þ¤JÀÉ®× "
-
-#: ../search.c:4106
-msgid "not found "
-msgstr "§ä¤£¨ì "
-
-#: ../search.c:4107
-msgid "in path ---\n"
-msgstr "---\n"
-
-#: ../search.c:4168
-msgid " (Already listed)"
-msgstr " (¤w¦C¥X)"
-
-#: ../search.c:4170
-msgid " NOT FOUND"
-msgstr " §ä¤£¨ì"
-
-#: ../search.c:4211
-#, c-format
-msgid "Scanning included file: %s"
-msgstr "·j´M¤Þ¤JÀÉ®×: %s"
-
-#: ../search.c:4216
-#, fuzzy, c-format
-msgid "Searching included file %s"
-msgstr "·j´M¤Þ¤JÀÉ®×: %s"
-
-#: ../search.c:4405
-msgid "E387: Match is on current line"
-msgstr "E387: ¥Ø«e©Ò¦b¦æ¤¤¦³¤@¤Ç°t"
-
-#: ../search.c:4517
-msgid "All included files were found"
-msgstr "©Ò¦³¤Þ¤JÀɮ׳£¤w§ä¨ì"
-
-#: ../search.c:4519
-msgid "No included files"
-msgstr "¨S¦³¤Þ¤JÀÉ®×"
-
-#: ../search.c:4527
-msgid "E388: Couldn't find definition"
-msgstr "E388: §ä¤£¨ì©w¸q"
-
-#: ../search.c:4529
-msgid "E389: Couldn't find pattern"
-msgstr "E389: §ä¤£¨ì pattern"
-
-#: ../search.c:4668
-#, fuzzy
-msgid "Substitute "
-msgstr "¨ú¥N¤@²Õ "
-
-#: ../search.c:4681
-#, c-format
-msgid ""
-"\n"
-"# Last %sSearch Pattern:\n"
-"~"
-msgstr ""
-
-#: ../spell.c:951
-#, fuzzy
-msgid "E759: Format error in spell file"
-msgstr "E297: ¼È¦sÀɼg¤J¿ù»~"
-
-#: ../spell.c:952
-msgid "E758: Truncated spell file"
-msgstr ""
-
-#: ../spell.c:953
-#, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:954
-#, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:955
-#, fuzzy
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E431: Tag ÀÉ \"%s\" ®æ¦¡¿ù»~"
-
-#: ../spell.c:957
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr ""
-
-#: ../spell.c:958
-msgid "Compressing word tree..."
-msgstr ""
-
-#: ../spell.c:1951
-msgid "E756: Spell checking is not enabled"
-msgstr ""
-
-#: ../spell.c:2249
-#, c-format
-msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
-msgstr ""
-
-#: ../spell.c:2473
-#, fuzzy, c-format
-msgid "Reading spell file \"%s\""
-msgstr "¨Ï¥Î¼È¦sÀÉ \"%s\""
-
-#: ../spell.c:2496
-#, fuzzy
-msgid "E757: This does not look like a spell file"
-msgstr "E307: %s ¬Ý°_¨Ó¤£¹³¬O Vim ¼È¦sÀÉ"
-
-#: ../spell.c:2501
-msgid "E771: Old spell file, needs to be updated"
-msgstr ""
-
-#: ../spell.c:2504
-msgid "E772: Spell file is for newer version of Vim"
-msgstr ""
-
-#: ../spell.c:2602
-#, fuzzy
-msgid "E770: Unsupported section in spell file"
-msgstr "E297: ¼È¦sÀɼg¤J¿ù»~"
-
-#: ../spell.c:3762
-#, fuzzy, c-format
-msgid "Warning: region %s not supported"
-msgstr "E519: ¤£¤ä´©¸Ó¿ï¶µ"
-
-#: ../spell.c:4550
-#, fuzzy, c-format
-msgid "Reading affix file %s ..."
-msgstr "·j´M tag ÀÉ®× \"%s\""
-
-#: ../spell.c:4589 ../spell.c:5635 ../spell.c:6140
-#, c-format
-msgid "Conversion failure for word in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4630 ../spell.c:6170
-#, c-format
-msgid "Conversion in %s not supported: from %s to %s"
-msgstr ""
-
-#: ../spell.c:4642
-#, c-format
-msgid "Invalid value for FLAG in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4655
-#, c-format
-msgid "FLAG after using flags in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4723
-#, c-format
-msgid ""
-"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4731
-#, c-format
-msgid ""
-"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
-"%d"
-msgstr ""
-
-#: ../spell.c:4747
-#, c-format
-msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4771
-#, c-format
-msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4777
-#, c-format
-msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4783
-#, c-format
-msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4795
-#, c-format
-msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4847
-#, c-format
-msgid "Different combining flag in continued affix block in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4850
-#, fuzzy, c-format
-msgid "Duplicate affix in %s line %d: %s"
-msgstr "E154: ¼ÐÅÒ(tag) \"%s\" ¦bÀÉ®× %s ¸Ì­«½Æ¥X²{¦h¦¸"
-
-#: ../spell.c:4871
-#, c-format
-msgid ""
-"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
-"line %d: %s"
-msgstr ""
-
-#: ../spell.c:4893
-#, c-format
-msgid "Expected Y or N in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:4968
-#, c-format
-msgid "Broken condition in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:5091
-#, c-format
-msgid "Expected REP(SAL) count in %s line %d"
-msgstr ""
-
-#: ../spell.c:5120
-#, c-format
-msgid "Expected MAP count in %s line %d"
-msgstr ""
-
-#: ../spell.c:5132
-#, c-format
-msgid "Duplicate character in MAP in %s line %d"
-msgstr ""
-
-#: ../spell.c:5176
-#, c-format
-msgid "Unrecognized or duplicate item in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:5197
-#, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr ""
-
-#: ../spell.c:5220
-msgid "COMPOUNDSYLMAX used without SYLLABLE"
-msgstr ""
-
-#: ../spell.c:5236
-#, fuzzy
-msgid "Too many postponed prefixes"
-msgstr "¤Ó¦h½s¿è°Ñ¼Æ"
-
-#: ../spell.c:5238
-#, fuzzy
-msgid "Too many compound flags"
-msgstr "¤Ó¦h½s¿è°Ñ¼Æ"
-
-#: ../spell.c:5240
-msgid "Too many postponed prefixes and/or compound flags"
-msgstr ""
-
-#: ../spell.c:5250
-#, c-format
-msgid "Missing SOFO%s line in %s"
-msgstr ""
-
-#: ../spell.c:5253
-#, c-format
-msgid "Both SAL and SOFO lines in %s"
-msgstr ""
-
-#: ../spell.c:5331
-#, c-format
-msgid "Flag is not a number in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:5334
-#, c-format
-msgid "Illegal flag in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:5493 ../spell.c:5501
-#, c-format
-msgid "%s value differs from what is used in another .aff file"
-msgstr ""
-
-#: ../spell.c:5602
-#, fuzzy, c-format
-msgid "Reading dictionary file %s ..."
-msgstr "±½ºË¦r¨å: %s"
-
-#: ../spell.c:5611
-#, c-format
-msgid "E760: No word count in %s"
-msgstr ""
-
-#: ../spell.c:5669
-#, c-format
-msgid "line %6d, word %6d - %s"
-msgstr ""
-
-#: ../spell.c:5691
-#, fuzzy, c-format
-msgid "Duplicate word in %s line %d: %s"
-msgstr "¨C¤@¦æ³£§ä¤£¨ì: %s"
-
-#: ../spell.c:5694
-#, c-format
-msgid "First duplicate word in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:5746
-#, c-format
-msgid "%d duplicate word(s) in %s"
-msgstr ""
-
-#: ../spell.c:5748
-#, c-format
-msgid "Ignored %d word(s) with non-ASCII characters in %s"
-msgstr ""
-
-#: ../spell.c:6115
-#, fuzzy, c-format
-msgid "Reading word file %s ..."
-msgstr "±q¼Ð·Ç¿é¤JŪ¨ú..."
-
-#: ../spell.c:6155
-#, c-format
-msgid "Duplicate /encoding= line ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6159
-#, c-format
-msgid "/encoding= line after word ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6180
-#, c-format
-msgid "Duplicate /regions= line ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6185
-#, c-format
-msgid "Too many regions in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6198
-#, c-format
-msgid "/ line ignored in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6224
-#, fuzzy, c-format
-msgid "Invalid region nr in %s line %d: %s"
-msgstr "E573: ¤£¥¿½Tªº¦øªA¾¹ id : %s"
-
-#: ../spell.c:6230
-#, c-format
-msgid "Unrecognized flags in %s line %d: %s"
-msgstr ""
-
-#: ../spell.c:6257
-#, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr ""
-
-#: ../spell.c:6656
-#, c-format
-msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
-msgstr ""
-
-#: ../spell.c:7340
-msgid "Reading back spell file..."
-msgstr ""
-
-#. Go through the trie of good words, soundfold each word and add it to
-#. the soundfold trie.
-#: ../spell.c:7357
-msgid "Performing soundfolding..."
-msgstr ""
-
-#: ../spell.c:7368
-#, c-format
-msgid "Number of words after soundfolding: %<PRId64>"
-msgstr ""
-
-#: ../spell.c:7476
-#, c-format
-msgid "Total number of words: %d"
-msgstr ""
-
-#: ../spell.c:7655
-#, fuzzy, c-format
-msgid "Writing suggestion file %s ..."
-msgstr "¼g¤J viminfo ÀÉ®× \"%s\" ¤¤"
-
-#: ../spell.c:7707 ../spell.c:7927
-#, c-format
-msgid "Estimated runtime memory use: %d bytes"
-msgstr ""
-
-#: ../spell.c:7820
-msgid "E751: Output file name must not have region name"
-msgstr ""
-
-#: ../spell.c:7822
-#, fuzzy
-msgid "E754: Only up to 8 regions supported"
-msgstr "E519: ¤£¤ä´©¸Ó¿ï¶µ"
-
-#: ../spell.c:7846
-#, fuzzy, c-format
-msgid "E755: Invalid region in %s"
-msgstr "E15: ¤£¥¿½Tªº¹Bºâ¦¡: %s"
-
-#: ../spell.c:7907
-msgid "Warning: both compounding and NOBREAK specified"
-msgstr ""
-
-#: ../spell.c:7920
-#, fuzzy, c-format
-msgid "Writing spell file %s ..."
-msgstr "¼g¤J viminfo ÀÉ®× \"%s\" ¤¤"
-
-#: ../spell.c:7925
-msgid "Done!"
-msgstr ""
-
-#: ../spell.c:8034
-#, c-format
-msgid "E765: 'spellfile' does not have %<PRId64> entries"
-msgstr ""
-
-#: ../spell.c:8074
-#, c-format
-msgid "Word '%.*s' removed from %s"
-msgstr ""
-
-#: ../spell.c:8117
-#, c-format
-msgid "Word '%.*s' added to %s"
-msgstr ""
-
-#: ../spell.c:8381
-msgid "E763: Word characters differ between spell files"
-msgstr ""
-
-#: ../spell.c:8684
-msgid "Sorry, no suggestions"
-msgstr ""
-
-#: ../spell.c:8687
-#, fuzzy, c-format
-msgid "Sorry, only %<PRId64> suggestions"
-msgstr "¡A½d³ò¡G %<PRId64> ¦æ "
-
-#. for when 'cmdheight' > 1
-#. avoid more prompt
-#: ../spell.c:8704
-#, fuzzy, c-format
-msgid "Change \"%.*s\" to:"
-msgstr "±NÅܰʦsÀx¦Ü \"%.*s\"?"
-
-#: ../spell.c:8737
-#, c-format
-msgid " < \"%.*s\""
-msgstr ""
-
-#: ../spell.c:8882
-#, fuzzy
-msgid "E752: No previous spell replacement"
-msgstr "E35: ¨S¦³«e¤@­Ó·j´M«ü¥O"
-
-#: ../spell.c:8925
-#, fuzzy, c-format
-msgid "E753: Not found: %s"
-msgstr "E334: [¿ï³æ] §ä¤£¨ì %s"
-
-#: ../spell.c:9276
-#, fuzzy, c-format
-msgid "E778: This does not look like a .sug file: %s"
-msgstr "E307: %s ¬Ý°_¨Ó¤£¹³¬O Vim ¼È¦sÀÉ"
-
-#: ../spell.c:9282
-#, c-format
-msgid "E779: Old .sug file, needs to be updated: %s"
-msgstr ""
-
-#: ../spell.c:9286
-#, c-format
-msgid "E780: .sug file is for newer version of Vim: %s"
-msgstr ""
-
-#: ../spell.c:9295
-#, c-format
-msgid "E781: .sug file doesn't match .spl file: %s"
-msgstr ""
-
-#: ../spell.c:9305
-#, fuzzy, c-format
-msgid "E782: error while reading .sug file: %s"
-msgstr "E47: Ū¨ú¿ù»~ÀÉ®×¥¢±Ñ"
-
-#. This should have been checked when generating the .spl
-#. file.
-#: ../spell.c:11575
-msgid "E783: duplicate char in MAP entry"
-msgstr ""
-
-#: ../syntax.c:266
-msgid "No Syntax items defined for this buffer"
-msgstr "³o­Ó½w½Ä°Ï¨S¦³©w¸q¥ô¦ó»yªk"
-
-#: ../syntax.c:3083 ../syntax.c:3104 ../syntax.c:3127
-#, c-format
-msgid "E390: Illegal argument: %s"
-msgstr "E390: °Ñ¼Æ¤£¥¿½T: %s"
-
-#: ../syntax.c:3299
-#, c-format
-msgid "E391: No such syntax cluster: %s"
-msgstr "E391: µL¦¹ syntax cluster: \"%s\""
-
-#: ../syntax.c:3433
-msgid "syncing on C-style comments"
-msgstr "C»y¨¥¦¡µù¸Ñ¦P¨B¤Æ¤¤"
-
-#: ../syntax.c:3439
-msgid "no syncing"
-msgstr "¨S¦³¦P¨B¤Æ"
-
-#: ../syntax.c:3441
-msgid "syncing starts "
-msgstr "¦P¨B¤Æ¶}©l"
-
-#: ../syntax.c:3443 ../syntax.c:3506
-msgid " lines before top line"
-msgstr "¦æ¸¹¶W¥X½d³ò"
-
-#: ../syntax.c:3448
-msgid ""
-"\n"
-"--- Syntax sync items ---"
-msgstr ""
-"\n"
-"--- »yªk¦P¨Bª«¥ó (Syntax sync items) ---"
-
-#: ../syntax.c:3452
-msgid ""
-"\n"
-"syncing on items"
-msgstr ""
-"\n"
-"¦P¨B¤Æ¤¤:"
-
-#: ../syntax.c:3457
-msgid ""
-"\n"
-"--- Syntax items ---"
-msgstr ""
-"\n"
-"--- »yªk¶µ¥Ø ---"
-
-#: ../syntax.c:3475
-#, c-format
-msgid "E392: No such syntax cluster: %s"
-msgstr "E392: µL¦¹ syntax cluster: \"%s\""
-
-#: ../syntax.c:3497
-msgid "minimal "
-msgstr "³Ì¤p"
-
-#: ../syntax.c:3503
-msgid "maximal "
-msgstr "³Ì¤j"
-
-#: ../syntax.c:3513
-msgid "; match "
-msgstr "; ²Å¦X "
-
-#: ../syntax.c:3515
-msgid " line breaks"
-msgstr "Â_¦æ "
-
-#: ../syntax.c:4076
-msgid "E395: contains argument not accepted here"
-msgstr "E395: ¨Ï¥Î¤F¤£¥¿½Tªº°Ñ¼Æ"
-
-#: ../syntax.c:4096
-#, fuzzy
-msgid "E844: invalid cchar value"
-msgstr "E474: ¤£¥¿½Tªº°Ñ¼Æ"
-
-#: ../syntax.c:4107
-msgid "E393: group[t]here not accepted here"
-msgstr "E393: ¨Ï¥Î¤F¤£¥¿½Tªº°Ñ¼Æ"
-
-#: ../syntax.c:4126
-#, c-format
-msgid "E394: Didn't find region item for %s"
-msgstr "E394: §ä¤£¨ì %s ªº region item"
-
-#: ../syntax.c:4188
-msgid "E397: Filename required"
-msgstr "E397: »Ý­nÀɮצWºÙ"
-
-#: ../syntax.c:4221
-#, fuzzy
-msgid "E847: Too many syntax includes"
-msgstr "E77: ¤Ó¦hÀɦW"
-
-#: ../syntax.c:4303
-#, fuzzy, c-format
-msgid "E789: Missing ']': %s"
-msgstr "E398: ¯Ê¤Ö \"=\": %s"
-
-#: ../syntax.c:4531
-#, c-format
-msgid "E398: Missing '=': %s"
-msgstr "E398: ¯Ê¤Ö \"=\": %s"
-
-#: ../syntax.c:4666
-#, c-format
-msgid "E399: Not enough arguments: syntax region %s"
-msgstr "E399: syntax region %s ªº¤Þ¼Æ¤Ó¤Ö"
-
-#: ../syntax.c:4870
-#, fuzzy
-msgid "E848: Too many syntax clusters"
-msgstr "E391: µL¦¹ syntax cluster: \"%s\""
-
-#: ../syntax.c:4954
-msgid "E400: No cluster specified"
-msgstr "E400: ¨S¦³«ü©wªºÄÝ©Ê"
-
-#. end delimiter not found
-#: ../syntax.c:4986
-#, c-format
-msgid "E401: Pattern delimiter not found: %s"
-msgstr "E401: §ä¤£¨ì¤À¹j²Å¸¹: %s"
-
-#: ../syntax.c:5049
-#, c-format
-msgid "E402: Garbage after pattern: %s"
-msgstr "E402: '%s' «á­±ªºªF¦èµLªk¿ëÃÑ"
-
-#: ../syntax.c:5120
-msgid "E403: syntax sync: line continuations pattern specified twice"
-msgstr "E403: »yªk¦P¨B: ³s±µ¦æ²Å¸¹³Q«ü©w¤F¨â¦¸"
-
-#: ../syntax.c:5169
-#, c-format
-msgid "E404: Illegal arguments: %s"
-msgstr "E404: °Ñ¼Æ¤£¥¿½T: %s"
-
-#: ../syntax.c:5217
-#, c-format
-msgid "E405: Missing equal sign: %s"
-msgstr "E405: ¯Ê¤Ö¬Ûµ¥²Å¸¹: %s"
-
-#: ../syntax.c:5222
-#, c-format
-msgid "E406: Empty argument: %s"
-msgstr "E406: ªÅ¥Õ°Ñ¼Æ: %s"
-
-#: ../syntax.c:5240
-#, c-format
-msgid "E407: %s not allowed here"
-msgstr "E407: %s ¤£¯à¦b¦¹¥X²{"
-
-#: ../syntax.c:5246
-#, c-format
-msgid "E408: %s must be first in contains list"
-msgstr "E408: %s ¥²¶·¬O¦Cªí¸Ìªº²Ä¤@­Ó"
-
-#: ../syntax.c:5304
-#, c-format
-msgid "E409: Unknown group name: %s"
-msgstr "E409: ¤£¥¿½Tªº¸s²Õ¦WºÙ: %s"
-
-#: ../syntax.c:5512
-#, c-format
-msgid "E410: Invalid :syntax subcommand: %s"
-msgstr "E410: ¤£¥¿½Tªº :syntax ¤l©R¥O: %s"
-
-#: ../syntax.c:5854
-msgid ""
-" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN"
-msgstr ""
-
-#: ../syntax.c:6146
-msgid "E679: recursive loop loading syncolor.vim"
-msgstr ""
-
-#: ../syntax.c:6256
-#, c-format
-msgid "E411: highlight group not found: %s"
-msgstr "E411: §ä¤£¨ì highlight group: %s"
-
-#: ../syntax.c:6278
-#, c-format
-msgid "E412: Not enough arguments: \":highlight link %s\""
-msgstr "E412: °Ñ¼Æ¤Ó¤Ö: \":highlight link %s\""
-
-#: ../syntax.c:6284
-#, c-format
-msgid "E413: Too many arguments: \":highlight link %s\""
-msgstr "E413: °Ñ¼Æ¹L¦h: \":highlight link %s\""
-
-#: ../syntax.c:6302
-msgid "E414: group has settings, highlight link ignored"
-msgstr "E414: ¤w³]©w¸s²Õ, ©¿²¤ highlight link"
-
-#: ../syntax.c:6367
-#, c-format
-msgid "E415: unexpected equal sign: %s"
-msgstr "E415: ¤£¸Ó¦³ªºµ¥¸¹: %s"
-
-#: ../syntax.c:6395
-#, c-format
-msgid "E416: missing equal sign: %s"
-msgstr "E416: ¯Ê¤Ö¬Ûµ¥²Å¸¹: %s"
-
-#: ../syntax.c:6418
-#, c-format
-msgid "E417: missing argument: %s"
-msgstr "E417: ¯Ê¤Ö°Ñ¼Æ: %s"
-
-#: ../syntax.c:6446
-#, c-format
-msgid "E418: Illegal value: %s"
-msgstr "E418: ¤£¦Xªkªº­È: %s"
-
-#: ../syntax.c:6496
-msgid "E419: FG color unknown"
-msgstr "E419: ¿ù»~ªº«e´ºÃC¦â"
-
-#: ../syntax.c:6504
-msgid "E420: BG color unknown"
-msgstr "E420: ¿ù»~ªº­I´ºÃC¦â"
-
-#: ../syntax.c:6564
-#, c-format
-msgid "E421: Color name or number not recognized: %s"
-msgstr "E421: ¿ù»~ªºÃC¦â¦WºÙ©Î¼Æ­È: %s"
-
-#: ../syntax.c:6714
-#, c-format
-msgid "E422: terminal code too long: %s"
-msgstr "E422: ²×ºÝ¾÷½X¤Óªø: %s"
-
-#: ../syntax.c:6753
-#, c-format
-msgid "E423: Illegal argument: %s"
-msgstr "E423: °Ñ¼Æ¤£¥¿½T: %s"
-
-#: ../syntax.c:6925
-msgid "E424: Too many different highlighting attributes in use"
-msgstr "E424: ¨Ï¥Î¤F¹L¦h¬Û²§ªº°ª«G«×ÄÝ©Ê"
-
-#: ../syntax.c:7427
-msgid "E669: Unprintable character in group name"
-msgstr "E669: ¸s²Õ¦WºÙ¤¤¦³µLªk¦C¦Lªº¦r¤¸"
-
-#: ../syntax.c:7434
-msgid "W18: Invalid character in group name"
-msgstr "W18: ¸s²Õ¦WºÙ¤¤¦³¤£¥¿½Tªº¦r¤¸"
-
-#: ../syntax.c:7448
-msgid "E849: Too many highlight and syntax groups"
-msgstr ""
-
-#: ../tag.c:104
-msgid "E555: at bottom of tag stack"
-msgstr "E555: ¼ÐÅÒ(tag)°ïÅ|µ²§À"
-
-#: ../tag.c:105
-msgid "E556: at top of tag stack"
-msgstr "E556: ¼ÐÅÒ(tag)°ïÅ|¶}ÀY"
-
-#: ../tag.c:380
-msgid "E425: Cannot go before first matching tag"
-msgstr "E425: ¤w¸g¦b³Ì«e­±ªº¼ÐÅÒ(tag)¤F"
-
-#: ../tag.c:504
-#, c-format
-msgid "E426: tag not found: %s"
-msgstr "E426: §ä¤£¨ì¼ÐÅÒ(tag): %s"
-
-#: ../tag.c:528
-msgid " # pri kind tag"
-msgstr " # pri kind tag"
-
-#: ../tag.c:531
-msgid "file\n"
-msgstr "ÀÉ®×\n"
-
-#: ../tag.c:829
-msgid "E427: There is only one matching tag"
-msgstr "E427: ¥u¦³¦¹¶µ²Å¦X"
-
-#: ../tag.c:831
-msgid "E428: Cannot go beyond last matching tag"
-msgstr "E428: ¤v¸g¦b³Ì«á¤@­Ó²Å¦Xªº tag ¤F"
-
-#: ../tag.c:850
-#, c-format
-msgid "File \"%s\" does not exist"
-msgstr "ÀÉ®× \"%s\" ¤£¦s¦b"
-
-#. Give an indication of the number of matching tags
-#: ../tag.c:859
-#, c-format
-msgid "tag %d of %d%s"
-msgstr "§ä¨ì tag: %d/%d%s"
-
-#: ../tag.c:862
-msgid " or more"
-msgstr " ©Î§ó¦h"
-
-#: ../tag.c:864
-msgid " Using tag with different case!"
-msgstr " ¥H¤£¦P¤j¤p¼g¨Ó¨Ï¥Î tag!"
-
-#: ../tag.c:909
-#, c-format
-msgid "E429: File \"%s\" does not exist"
-msgstr "E429: ÀÉ®× \"%s\" ¤£¦s¦b"
-
-#. Highlight title
-#: ../tag.c:960
-msgid ""
-"\n"
-" # TO tag FROM line in file/text"
-msgstr ""
-"\n"
-" # ¨ì tag ±q ¦æ ¦b ÀÉ®×/¤å¦r"
-
-#: ../tag.c:1303
-#, c-format
-msgid "Searching tags file %s"
-msgstr "·j´M tag ÀÉ®× \"%s\""
-
-#: ../tag.c:1545
-msgid "Ignoring long line in tags file"
-msgstr ""
-
-#: ../tag.c:1915
-#, c-format
-msgid "E431: Format error in tags file \"%s\""
-msgstr "E431: Tag ÀÉ \"%s\" ®æ¦¡¿ù»~"
-
-#: ../tag.c:1917
-#, c-format
-msgid "Before byte %<PRId64>"
-msgstr "¦b %<PRId64> ¦ì¤¸¤§«e"
-
-#: ../tag.c:1929
-#, c-format
-msgid "E432: Tags file not sorted: %s"
-msgstr "E432: Tag ÀÉ®×¥¼±Æ§Ç: %s"
-
-#. never opened any tags file
-#: ../tag.c:1960
-msgid "E433: No tags file"
-msgstr "E433: ¨S¦³ tag ÀÉ"
-
-#: ../tag.c:2536
-msgid "E434: Can't find tag pattern"
-msgstr "E434: §ä¤£¨ì tag"
-
-#: ../tag.c:2544
-msgid "E435: Couldn't find tag, just guessing!"
-msgstr "E435: §ä¤£¨ì tag, ¥Î²qªº!"
-
-#: ../tag.c:2797
-#, c-format
-msgid "Duplicate field name: %s"
-msgstr ""
-
-#: ../term.c:1442
-msgid "' not known. Available builtin terminals are:"
-msgstr "' µLªk¸ü¤J¡C¥i¥Îªº¤º«Ø²×ºÝ¾÷§Î¦¡¦³:"
-
-#: ../term.c:1463
-msgid "defaulting to '"
-msgstr "¹w³]: '"
-
-#: ../term.c:1731
-msgid "E557: Cannot open termcap file"
-msgstr "E557: µLªk¶}±Ò termcap ÀÉ®×"
-
-#: ../term.c:1735
-msgid "E558: Terminal entry not found in terminfo"
-msgstr "E558: terminfo ¤¤¨S¦³²×ºÝ¾÷¸ê®Æ¶µ"
-
-#: ../term.c:1737
-msgid "E559: Terminal entry not found in termcap"
-msgstr "E559: termcap ¤¤¨S¦³²×ºÝ¾÷¸ê®Æ¶µ"
-
-#: ../term.c:1878
-#, c-format
-msgid "E436: No \"%s\" entry in termcap"
-msgstr "E436: termcap ¨S¦³ \"%s\" entry"
-
-#: ../term.c:2249
-msgid "E437: terminal capability \"cm\" required"
-msgstr "E437: ²×ºÝ¾÷»Ý­n \"cm\" ªº¯à¤O"
-
-#. Highlight title
-#: ../term.c:4376
-msgid ""
-"\n"
-"--- Terminal keys ---"
-msgstr ""
-"\n"
-"--- ²×ºÝ¾÷«öÁä ---"
-
-#: ../ui.c:481
-msgid "Vim: Error reading input, exiting...\n"
-msgstr "Vim: Ū¨ú¿é¤J¿ù»~¡AÂ÷¶}¤¤...\n"
-
-#. This happens when the FileChangedRO autocommand changes the
-#. * file in a way it becomes shorter.
-#: ../undo.c:379
-msgid "E881: Line count changed unexpectedly"
-msgstr ""
-
-#: ../undo.c:627
-#, fuzzy, c-format
-msgid "E828: Cannot open undo file for writing: %s"
-msgstr "E212: µLªk¥H¼g¤J¼Ò¦¡¶}±Ò"
-
-#: ../undo.c:717
-#, c-format
-msgid "E825: Corrupted undo file (%s): %s"
-msgstr ""
-
-#: ../undo.c:1039
-msgid "Cannot write undo file in any directory in 'undodir'"
-msgstr ""
-
-#: ../undo.c:1074
-#, c-format
-msgid "Will not overwrite with undo file, cannot read: %s"
-msgstr ""
-
-#: ../undo.c:1092
-#, c-format
-msgid "Will not overwrite, this is not an undo file: %s"
-msgstr ""
-
-#: ../undo.c:1108
-msgid "Skipping undo file write, nothing to undo"
-msgstr ""
-
-#: ../undo.c:1121
-#, fuzzy, c-format
-msgid "Writing undo file: %s"
-msgstr "¼g¤J viminfo ÀÉ®× \"%s\" ¤¤"
-
-#: ../undo.c:1213
-#, fuzzy, c-format
-msgid "E829: write error in undo file: %s"
-msgstr "E297: ¼È¦sÀɼg¤J¿ù»~"
-
-#: ../undo.c:1280
-#, c-format
-msgid "Not reading undo file, owner differs: %s"
-msgstr ""
-
-#: ../undo.c:1292
-#, fuzzy, c-format
-msgid "Reading undo file: %s"
-msgstr "Ū¨ú viminfo ÀÉ®× \"%s\"%s%s%s"
-
-#: ../undo.c:1299
-#, fuzzy, c-format
-msgid "E822: Cannot open undo file for reading: %s"
-msgstr "E195: µLªkŪ¨ú viminfo"
-
-#: ../undo.c:1308
-#, fuzzy, c-format
-msgid "E823: Not an undo file: %s"
-msgstr "E484: µLªk¶}±ÒÀÉ®× %s"
-
-#: ../undo.c:1313
-#, fuzzy, c-format
-msgid "E824: Incompatible undo file: %s"
-msgstr "E484: µLªk¶}±ÒÀÉ®× %s"
-
-#: ../undo.c:1328
-msgid "File contents changed, cannot use undo info"
-msgstr ""
-
-#: ../undo.c:1497
-#, fuzzy, c-format
-msgid "Finished reading undo file %s"
-msgstr "µ²§ô°õ¦æ %s"
-
-#: ../undo.c:1586 ../undo.c:1812
-msgid "Already at oldest change"
-msgstr ""
-
-#: ../undo.c:1597 ../undo.c:1814
-msgid "Already at newest change"
-msgstr ""
-
-#: ../undo.c:1806
-#, fuzzy, c-format
-msgid "E830: Undo number %<PRId64> not found"
-msgstr "E92: §ä¤£¨ì²Ä %<PRId64> ­Ó½w½Ä°Ï"
-
-#: ../undo.c:1979
-msgid "E438: u_undo: line numbers wrong"
-msgstr "E438: u_undo: ¦æ¸¹¿ù»~"
-
-#: ../undo.c:2183
-#, fuzzy
-msgid "more line"
-msgstr "ÁÙ¦³¤@¦æ "
-
-#: ../undo.c:2185
-#, fuzzy
-msgid "more lines"
-msgstr "ÁÙ¦³¤@¦æ "
-
-#: ../undo.c:2187
-#, fuzzy
-msgid "line less"
-msgstr "¤Ö©ó¤@¦æ "
-
-#: ../undo.c:2189
-#, fuzzy
-msgid "fewer lines"
-msgstr "¥u³Ñ %<PRId64> ¦æ "
-
-#: ../undo.c:2193
-#, fuzzy
-msgid "change"
-msgstr "¤@¶µ§ïÅÜ"
-
-#: ../undo.c:2195
-#, fuzzy
-msgid "changes"
-msgstr "¤@¶µ§ïÅÜ"
-
-#: ../undo.c:2225
-#, fuzzy, c-format
-msgid "%<PRId64> %s; %s #%<PRId64> %s"
-msgstr "%<PRId64> ¦æ %s ¹L %d ¦¸"
-
-#: ../undo.c:2228
-msgid "before"
-msgstr ""
-
-#: ../undo.c:2228
-msgid "after"
-msgstr ""
-
-#: ../undo.c:2325
-#, fuzzy
-msgid "Nothing to undo"
-msgstr "¨S¦³³o­Ó mapping ¹ïÀ³"
-
-#: ../undo.c:2330
-msgid "number changes when saved"
-msgstr ""
-
-#: ../undo.c:2360
-#, fuzzy, c-format
-msgid "%<PRId64> seconds ago"
-msgstr "%<PRId64> Äæ; "
-
-#: ../undo.c:2372
-#, fuzzy
-msgid "E790: undojoin is not allowed after undo"
-msgstr "E407: %s ¤£¯à¦b¦¹¥X²{"
-
-#: ../undo.c:2466
-msgid "E439: undo list corrupt"
-msgstr "E439: ´_­ì¦Cªí·lÃa"
-
-#: ../undo.c:2495
-msgid "E440: undo line missing"
-msgstr "E440: §ä¤£¨ì­n undo ªº¦æ "
-
-#: ../version.c:600
-msgid ""
-"\n"
-"Included patches: "
-msgstr ""
-"\n"
-"¤Þ¤J­×¥¿: "
-
-#: ../version.c:627
-#, fuzzy
-msgid ""
-"\n"
-"Extra patches: "
-msgstr "¥~³¡²Å¦X:\n"
-
-#: ../version.c:639 ../version.c:864
-msgid "Modified by "
-msgstr "­×§ïªÌ¬°"
-
-#: ../version.c:646
-msgid ""
-"\n"
-"Compiled "
-msgstr ""
-"\n"
-"½sĶ"
-
-#: ../version.c:649
-msgid "by "
-msgstr "ªÌ:"
-
-#: ../version.c:660
-msgid ""
-"\n"
-"Huge version "
-msgstr ""
-"\n"
-"¶W±jª©¥» "
-
-#: ../version.c:661
-msgid "without GUI."
-msgstr "¤£¨Ï¥Î¹Ï«¬¬É­±¡C"
-
-#: ../version.c:662
-msgid " Features included (+) or not (-):\n"
-msgstr " ¥Ø«e¥i¨Ï¥Î(+)»P¤£¥i¨Ï¥Î(-)ªº¼Ò²Õ¦Cªí:\n"
-
-#: ../version.c:667
-msgid " system vimrc file: \""
-msgstr " ¨t²Î vimrc ³]©wÀÉ: \""
-
-#: ../version.c:672
-msgid " user vimrc file: \""
-msgstr " ¨Ï¥ÎªÌ­Ó¤H vimrc ³]©wÀÉ: \""
-
-#: ../version.c:677
-msgid " 2nd user vimrc file: \""
-msgstr " ²Ä¤G²Õ­Ó¤H vimrc ÀÉ®×: \""
-
-#: ../version.c:682
-msgid " 3rd user vimrc file: \""
-msgstr " ²Ä¤T²Õ­Ó¤H vimrc ÀÉ®×: \""
-
-#: ../version.c:687
-msgid " user exrc file: \""
-msgstr " ¨Ï¥ÎªÌ­Ó¤H exrc ³]©wÀÉ: \""
-
-#: ../version.c:692
-msgid " 2nd user exrc file: \""
-msgstr " ²Ä¤G²Õ¨Ï¥ÎªÌ exrc ÀÉ®×: \""
-
-#: ../version.c:699
-msgid " fall-back for $VIM: \""
-msgstr " $VIM ¹w³]­È: \""
-
-#: ../version.c:705
-msgid " f-b for $VIMRUNTIME: \""
-msgstr " $VIMRUNTIME ¹w³]­È: \""
-
-#: ../version.c:709
-msgid "Compilation: "
-msgstr "½sĶ¤è¦¡: "
-
-#: ../version.c:712
-msgid "Linking: "
-msgstr "Ãìµ²¤è¦¡: "
-
-#: ../version.c:717
-msgid " DEBUG BUILD"
-msgstr " °£¿ùª©¥»"
-
-#: ../version.c:767
-msgid "VIM - Vi IMproved"
-msgstr "VIM - Vi IMproved"
-
-#: ../version.c:769
-msgid "version "
-msgstr "ª©¥» "
-
-#: ../version.c:770
-msgid "by Bram Moolenaar et al."
-msgstr "ºûÅ@ªÌ: Bram Moolenaar et al."
-
-#: ../version.c:774
-msgid "Vim is open source and freely distributable"
-msgstr "Vim ¬°¥i¦Û¥Ñ´²§Gªº¶}©ñ­ì©l½X³nÅé"
-
-#: ../version.c:776
-msgid "Help poor children in Uganda!"
-msgstr "½ÐÀ°§U¯Q¤z¹Fªº¥i¼¦«Äµ£!"
-
-#: ../version.c:777
-msgid "type :help iccf<Enter> for information "
-msgstr "¶i¤@¨B»¡©ú½Ð¿é¤J :help iccf<Enter>"
-
-#: ../version.c:779
-msgid "type :q<Enter> to exit "
-msgstr "­nÂ÷¶}½Ð¿é¤J :q<Enter> "
-
-#: ../version.c:780
-msgid "type :help<Enter> or <F1> for on-line help"
-msgstr "½u¤W»¡©ú½Ð¿é¤J :help<Enter> "
-
-#: ../version.c:781
-msgid "type :help version7<Enter> for version info"
-msgstr "·sª©¥»¸ê°T½Ð¿é¤J :help version7<Enter>"
-
-#: ../version.c:784
-msgid "Running in Vi compatible mode"
-msgstr "Vi ¬Û®e¼Ò¦¡"
-
-#: ../version.c:785
-msgid "type :set nocp<Enter> for Vim defaults"
-msgstr "¦pªG­n§¹¥þ¼ÒÀÀ¶Ç²Î Vi ½Ð¿é¤J :set nocp<Enter>"
-
-#: ../version.c:786
-msgid "type :help cp-default<Enter> for info on this"
-msgstr "¦pªG»Ý­n¹ï Vi ¬Û®e¼Ò¦¡ªº¶i¤@¨B»¡©ú½Ð¿é¤J :help cp-default<Enter>"
-
-#: ../version.c:827
-msgid "Sponsor Vim development!"
-msgstr "ÃÙ§U Vim ªº¶}µo»P¦¨ªø¡I"
-
-#: ../version.c:828
-msgid "Become a registered Vim user!"
-msgstr "¦¨¬° Vim ªºµù¥U¨Ï¥ÎªÌ¡I"
-
-#: ../version.c:831
-msgid "type :help sponsor<Enter> for information "
-msgstr "¸Ô²Ó»¡©ú½Ð¿é¤J :help sponsor<Enter>"
-
-#: ../version.c:832
-msgid "type :help register<Enter> for information "
-msgstr "¸Ô²Ó»¡©ú½Ð¿é¤J :help register<Enter> "
-
-#: ../version.c:834
-msgid "menu Help->Sponsor/Register for information "
-msgstr "¸Ô²Ó»¡©ú½Ð¿ï¨ú¿ï³æªº »²§U»¡©ú->ÃÙ§U/µù¥U "
-
-#: ../window.c:119
-msgid "Already only one window"
-msgstr "¤w¸g¥u³Ñ¤@­Óµøµ¡¤F"
-
-#: ../window.c:224
-msgid "E441: There is no preview window"
-msgstr "E441: ¨S¦³¹wÄýµøµ¡"
-
-#: ../window.c:559
-msgid "E442: Can't split topleft and botright at the same time"
-msgstr "E442: ¤£¯à¦P®É¤À³Îµøµ¡¬°¥ª¤W©M¥k¤U¨¤"
-
-#: ../window.c:1228
-msgid "E443: Cannot rotate when another window is split"
-msgstr "E443: ¦³¨ä¥¦¤À³Îµøµ¡®ÉµLªk±ÛÂà"
-
-#: ../window.c:1803
-msgid "E444: Cannot close last window"
-msgstr "E444: ¤£¯àÃö³¬³Ì«á¤@­Óµøµ¡"
-
-#: ../window.c:1810
-#, fuzzy
-msgid "E813: Cannot close autocmd window"
-msgstr "E444: ¤£¯àÃö³¬³Ì«á¤@­Óµøµ¡"
-
-#: ../window.c:1814
-#, fuzzy
-msgid "E814: Cannot close window, only autocmd window would remain"
-msgstr "E444: ¤£¯àÃö³¬³Ì«á¤@­Óµøµ¡"
-
-#: ../window.c:2717
-msgid "E445: Other window contains changes"
-msgstr "E445: ¨ä¥¦µøµ¡¦³§ó°Ê¸ê®Æ"
-
-#: ../window.c:4805
-msgid "E446: No file name under cursor"
-msgstr "E446: ´å¼Ð³B¨S¦³ÀɦW"
-
-#~ msgid "[Error List]"
-#~ msgstr "[¿ù»~¦Cªí]"
-
-#~ msgid "[No File]"
-#~ msgstr "[¥¼©R¦W]"
-
-#~ msgid "Patch file"
-#~ msgstr "Patch ÀÉ®×"
-
-#~ msgid "E106: Unknown variable: \"%s\""
-#~ msgstr "E106: ¥¼©w¸qªºÅܼÆ: \"%s\""
-
-#~ msgid ""
-#~ "&OK\n"
-#~ "&Cancel"
-#~ msgstr ""
-#~ "½T©w(&O)\n"
-#~ "¨ú®ø(&C)"
-
-#~ msgid "E240: No connection to Vim server"
-#~ msgstr "E240: ¨S¦³»P Vim Server «Ø¥ß³s½u"
-
-#~ msgid "E277: Unable to read a server reply"
-#~ msgstr "E277: µLªkŪ¨ú¦øªA¾¹ªº¦^À³"
-
-#~ msgid "E258: Unable to send to client"
-#~ msgstr "E258: µLªk¶Ç°e¨ì client"
-
-#~ msgid "E241: Unable to send to %s"
-#~ msgstr "E241: µLªk¶Ç°e¨ì %s"
-
-#~ msgid "E130: Undefined function: %s"
-#~ msgstr "E130: ¨ç¦¡ %s ©|¥¼©w¸q"
-
-#~ msgid "Save As"
-#~ msgstr "¥t¦s·sÀÉ"
-
-#~ msgid "Edit File"
-#~ msgstr "½s¿èÀÉ®×"
-
-#~ msgid " (NOT FOUND)"
-#~ msgstr " (§ä¤£¨ì) "
-
-#~ msgid "Source Vim script"
-#~ msgstr "°õ¦æ Vim script"
-
-#~ msgid "Edit File in new window"
-#~ msgstr "¦b·sµøµ¡½s¿èÀÉ®×"
-
-#~ msgid "Append File"
-#~ msgstr "ªþ¥[ÀÉ®×"
-
-#~ msgid "Window position: X %d, Y %d"
-#~ msgstr "µøµ¡¦ì¸m: X %d, Y %d"
-
-#~ msgid "Save Redirection"
-#~ msgstr "Àx¦s Redirection"
-
-#~ msgid "Save View"
-#~ msgstr "Àx¦s View"
-
-#~ msgid "Save Session"
-#~ msgstr "Àx¦s Session"
-
-#~ msgid "Save Setup"
-#~ msgstr "Àx¦s³]©w"
-
-#~ msgid "E196: No digraphs in this version"
-#~ msgstr "E196: ¥»ª©¥»µL½Æ¦X¦r¤¸(digraph)"
-
-#~ msgid "[NL found]"
-#~ msgstr "[§ä¨ìNL]"
-
-#~ msgid "[crypted]"
-#~ msgstr "[¤w¥[±K]"
-
-#~ msgid "[CONVERSION ERROR]"
-#~ msgstr "Âà´«¿ù»~"
-
-#~ msgid "NetBeans disallows writes of unmodified buffers"
-#~ msgstr "NetBeans ¤£¯à¼g¥X¥¼­×§ïªº½w½Ä°Ï"
-
-#~ msgid "Partial writes disallowed for NetBeans buffers"
-#~ msgstr "³¡¥÷¤º®eµLªk¼g¤J Netbeans ½w½Ä°Ï"
-
-#~ msgid "E460: The resource fork would be lost (add ! to override)"
-#~ msgstr "E460: Resource fork ·|®ø¥¢ (½Ð¨Ï¥Î ! ±j¨î°õ¦æ)"
-
-#~ msgid "E229: Cannot start the GUI"
-#~ msgstr "E229: µLªk±Ò°Ê¹Ï«¬¬É­±"
-
-#~ msgid "E230: Cannot read from \"%s\""
-#~ msgstr "E230: µLªkŪ¨úÀÉ®× \"%s\""
-
-#~ msgid "E665: Cannot start GUI, no valid font found"
-#~ msgstr "E665: µLªk±Ò°Ê¹Ï«¬¬É­±¡A§ä¤£¨ì¥i¥Îªº¦r«¬"
-
-#~ msgid "E231: 'guifontwide' invalid"
-#~ msgstr "E231: ¤£¥¿½Tªº 'guifontwide'"
-
-#~ msgid "E599: Value of 'imactivatekey' is invalid"
-#~ msgstr "E599: 'imactivatekey' ªº­È¤£¥¿½T"
-
-#~ msgid "E254: Cannot allocate color %s"
-#~ msgstr "E254: ¤£¯à°t¸mÃC¦â %s"
-
-#~ msgid "<cannot open> "
-#~ msgstr "<¤£¯à¶}±Ò>"
-
-#~ msgid "E616: vim_SelFile: can't get font %s"
-#~ msgstr "E616: vim_SelFile: ¤£¯à¨Ï¥Î %s ¦r«¬"
-
-#~ msgid "E614: vim_SelFile: can't return to current directory"
-#~ msgstr "E614: vim_SelFile: µLªk¦^¨ì¥Ø«e¥Ø¿ý"
-
-#~ msgid "Pathname:"
-#~ msgstr "¸ô®|:"
-
-#~ msgid "E615: vim_SelFile: can't get current directory"
-#~ msgstr "E615: vim_SelFile: µLªk¨ú±o¥Ø«e¥Ø¿ý"
-
-#~ msgid "OK"
-#~ msgstr "½T©w"
-
-#~ msgid "Cancel"
-#~ msgstr "¨ú®ø"
-
-#~ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
-#~ msgstr "±²°Ê¶b: ¤£¯à³]©w thumb pixmap ªº¦ì¸m"
-
-#~ msgid "Vim dialog"
-#~ msgstr "Vim ¹ï¸Ü²°"
-
-#~ msgid "E232: Cannot create BalloonEval with both message and callback"
-#~ msgstr "E232: ¤£¯à¹ï°T®§»P callback «Ø¥ß BallonEval"
-
-#~ msgid "Vim dialog..."
-#~ msgstr "Vim ¹ï¸Ü²°..."
-
-#~ msgid "Input _Methods"
-#~ msgstr "¿é¤Jªk"
-
-#~ msgid "VIM - Search and Replace..."
-#~ msgstr "VIM - ´M§ä»P¨ú¥N..."
-
-#~ msgid "VIM - Search..."
-#~ msgstr "VIM - ´M§ä..."
-
-#~ msgid "Find what:"
-#~ msgstr "·j´M:"
-
-#~ msgid "Replace with:"
-#~ msgstr "¨ú¥N¬°:"
-
-#~ msgid "Match whole word only"
-#~ msgstr "¥u·j´M§¹¥þ¬Û¦Pªº¦r"
-
-#~ msgid "Match case"
-#~ msgstr "²Å¦X¤j¤p¼g"
-
-#~ msgid "Direction"
-#~ msgstr "¤è¦V"
-
-#~ msgid "Up"
-#~ msgstr "¦V¤W"
-
-#~ msgid "Down"
-#~ msgstr "¦V¤U"
-
-#~ msgid "Find Next"
-#~ msgstr "§ä¤U¤@­Ó"
-
-#~ msgid "Replace"
-#~ msgstr "¨ú¥N"
-
-#~ msgid "Replace All"
-#~ msgstr "¨ú¥N¥þ³¡"
-
-#~ msgid "Vim: Received \"die\" request from session manager\n"
-#~ msgstr "Vim: ¥Ñ Session ºÞ²z­û¦¬¨ì \"die\" ­n¨D\n"
-
-#~ msgid "Vim: Main window unexpectedly destroyed\n"
-#~ msgstr "Vim: ¥Dµøµ¡Äê±¼\n"
-
-#~ msgid "Font Selection"
-#~ msgstr "¦r«¬¿ï¾Ü"
-
-#~ msgid "Used CUT_BUFFER0 instead of empty selection"
-#~ msgstr "¨Ï¥Î CUT_BUFFER0 ¨Ó¨ú¥NªÅ¿ï¾Ü"
-
-#~ msgid "Filter"
-#~ msgstr "¹LÂo¾¹"
-
-#~ msgid "Directories"
-#~ msgstr "¥Ø¿ý"
-
-#~ msgid "Help"
-#~ msgstr "»²§U»¡©ú"
-
-#~ msgid "Files"
-#~ msgstr "ÀÉ®×"
-
-#~ msgid "Selection"
-#~ msgstr "¿ï¾Ü"
-
-#~ msgid "Undo"
-#~ msgstr "´_­ì"
-
-#~ msgid "E671: Cannot find window title \"%s\""
-#~ msgstr "E671: §ä¤£¨ì¼ÐÃD¬° \"%s\" ªºµøµ¡"
-
-#~ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
-#~ msgstr "E243: ¤£¤ä´©°Ñ¼Æ \"-%s\"¡C½Ð¥Î OLE ª©¥»¡C"
-
-#~ msgid "E672: Unable to open window inside MDI application"
-#~ msgstr "E672: µLªk¦b MDI µ{¦¡¤¤¶}±Òµøµ¡"
-
-#~ msgid "Find string (use '\\\\' to find a '\\')"
-#~ msgstr "·j´M¦r¦ê (¨Ï¥Î '\\\\' ¨Óªí¥Ü '\\')"
-
-#~ msgid "Find & Replace (use '\\\\' to find a '\\')"
-#~ msgstr "·j´M¤Î¨ú¥N¦r¦ê (¨Ï¥Î '\\\\' ¨Óªí¥Ü '\\')"
-
-#~ msgid ""
-#~ "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
-#~ msgstr "Vim E458: µLªk°t¸m color map ¶µ¥Ø¡A¦³¨ÇÃC¦â¬Ý°_¨Ó·|©Ç©Çªº"
-
-#~ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
-#~ msgstr "E250: Fontset %s ¨S¦³³]©w¥¿½Tªº¦r«¬¥H¨ÑÅã¥Ü³o¨Ç¦r¤¸¶°:"
-
-#~ msgid "E252: Fontset name: %s"
-#~ msgstr "E252: ¦r«¬¶°(Fontset)¦WºÙ: %s"
-
-#~ msgid "Font '%s' is not fixed-width"
-#~ msgstr "'%s' ¤£¬O©T©w¼e«×¦r«¬"
-
-#~ msgid "E253: Fontset name: %s\n"
-#~ msgstr "E253: ¦r«¬¶°(Fontset)¦WºÙ: %s\n"
-
-#~ msgid "Font0: %s\n"
-#~ msgstr "Font0: %s\n"
-
-#~ msgid "Font1: %s\n"
-#~ msgstr "Font1: %s\n"
-
-#~ msgid "Font%<PRId64> width is not twice that of font0\n"
-#~ msgstr "¦r«¬%<PRId64> ¼e«×¤£¬O ¦r«¬0 ªº¨â­¿\n"
-
-#~ msgid "Font0 width: %<PRId64>\n"
-#~ msgstr "¦r«¬0ªº¼e«×¡G%<PRId64>\n"
-
-#~ msgid ""
-#~ "Font1 width: %<PRId64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "¦r«¬1¼e«×: %<PRId64>\n"
-#~ "\n"
-
-#~ msgid "E256: Hangul automata ERROR"
-#~ msgstr "E256: Hangul automata ¿ù»~"
-
-#~ msgid "E563: stat error"
-#~ msgstr "E563: stat ¿ù»~"
-
-#~ msgid "E625: cannot open cscope database: %s"
-#~ msgstr "E625: µLªk¶}±Ò cscope ¸ê®Æ®w %s"
-
-#~ msgid "E626: cannot get cscope database information"
-#~ msgstr "E626: µLªk¨ú±o cscope ¸ê®Æ®w¸ê°T"
-
-#~ msgid "E569: maximum number of cscope connections reached"
-#~ msgstr "E569: ¤w¹F¨ì cscope ³Ì¤j³s½u¼Æ¥Ø"
-
-#~ msgid ""
-#~ "E263: Sorry, this command is disabled, the Python library could not be "
-#~ "loaded."
-#~ msgstr "E263: ©êºp¡A³o­Ó©R¥OµLªk¨Ï¥Î¡APython µ{¦¡®w¨S¦³¸ü¤J¡C"
-
-#~ msgid "E659: Cannot invoke Python recursively"
-#~ msgstr "E659: µLªk»¼°j°õ¦æ Python "
-
-#~ msgid "can't delete OutputObject attributes"
-#~ msgstr "µLªk§R°£ OutputObject ÄÝ©Ê"
-
-#~ msgid "softspace must be an integer"
-#~ msgstr "softspace ¥²»Ý¬O¾ã¼Æ"
-
-#~ msgid "invalid attribute"
-#~ msgstr "¤£¥¿½TªºÄÝ©Ê"
-
-#~ msgid "writelines() requires list of strings"
-#~ msgstr "writelines() »Ý­n string list ·í°Ñ¼Æ"
-
-#~ msgid "E264: Python: Error initialising I/O objects"
-#~ msgstr "E264: Python: µLªkªì©l I/O ª«¥ó"
-
-#~ msgid "invalid expression"
-#~ msgstr "¤£¥¿½Tªº¹Bºâ¦¡"
-
-#~ msgid "expressions disabled at compile time"
-#~ msgstr "¦]¬°½sͮɍS¦³¥[¤J¹Bºâ¦¡(expression)ªºµ{¦¡½X¡A©Ò¥HµLªk¨Ï¥Î¹Bºâ¦¡"
-
-#~ msgid "attempt to refer to deleted buffer"
-#~ msgstr "¸Õ¹Ï¨Ï¥Î¤w³Q§R°£ªº buffer"
-
-#~ msgid "line number out of range"
-#~ msgstr "¦æ¸¹¶W¥X½d³ò"
-
-#~ msgid "<buffer object (deleted) at %8lX>"
-#~ msgstr "<buffer ª«¥ó (¤w§R°£): %8lX>"
-
-#~ msgid "invalid mark name"
-#~ msgstr "¼Ð°O¦WºÙ¤£¥¿½T"
-
-#~ msgid "no such buffer"
-#~ msgstr "µL¦¹ buffer"
-
-#~ msgid "attempt to refer to deleted window"
-#~ msgstr "¸Õ¹Ï¨Ï¥Î¤w³Q§R°£ªºµøµ¡"
-
-#~ msgid "readonly attribute"
-#~ msgstr "°ßŪÄÝ©Ê"
-
-#~ msgid "cursor position outside buffer"
-#~ msgstr "´å¼Ð©w¦ì¦b½w½Ä°Ï¤§¥~"
-
-#~ msgid "<window object (deleted) at %.8lX>"
-#~ msgstr "<µøµ¡ª«¥ó(¤w§R°£): %.8lX>"
-
-#~ msgid "<window object (unknown) at %.8lX>"
-#~ msgstr "<µøµ¡ª«¥ó(¥¼ª¾): %.8lX>"
-
-#~ msgid "<window %d>"
-#~ msgstr "<µøµ¡ %d>"
-
-#~ msgid "no such window"
-#~ msgstr "µL¦¹µøµ¡"
-
-#~ msgid "cannot save undo information"
-#~ msgstr "µLªkÀx¦s´_­ì¸ê°T"
-
-#~ msgid "cannot delete line"
-#~ msgstr "¤£¯à§R°£¦¹¦æ "
-
-#~ msgid "cannot replace line"
-#~ msgstr "¤£¯à´À¥N¦¹¦æ "
-
-#~ msgid "cannot insert line"
-#~ msgstr "¤£¯à´À¥N´¡¤J¦¹¦æ "
-
-#~ msgid "string cannot contain newlines"
-#~ msgstr "¦r¦êµLªk¥]§t·s¦æ "
-
-#~ msgid ""
-#~ "E266: Sorry, this command is disabled, the Ruby library could not be "
-#~ "loaded."
-#~ msgstr "E266: ¦¹©R¥OµLªk¨Ï¥Î¡AµLªk¸ü¤J Ruby µ{¦¡®w(Library)"
-
-#~ msgid "E273: unknown longjmp status %d"
-#~ msgstr "E273: ¥¼ª¾ªº longjmp status %d"
-
-#~ msgid "Toggle implementation/definition"
-#~ msgstr "¤Á´«¹ê§@/©w¸q"
-
-#~ msgid "Show base class of"
-#~ msgstr "Åã¥Ü base class of:"
-
-#~ msgid "Show overridden member function"
-#~ msgstr "Åã¥Ü³Q override ªº member function"
-
-#~ msgid "Retrieve from file"
-#~ msgstr "Ū¨ú: ±qÀÉ®×"
-
-#~ msgid "Retrieve from project"
-#~ msgstr "Ū¨ú: ±qª«¥ó"
-
-#~ msgid "Retrieve from all projects"
-#~ msgstr "Ū¨ú: ±q©Ò¦³ project"
-
-#~ msgid "Retrieve"
-#~ msgstr "Ū¨ú"
-
-#~ msgid "Show source of"
-#~ msgstr "Åã¥Ü­ì©l½X: "
-
-#~ msgid "Find symbol"
-#~ msgstr "·j´M symbol"
-
-#~ msgid "Browse class"
-#~ msgstr "ÂsÄý class"
-
-#~ msgid "Show class in hierarchy"
-#~ msgstr "Åã¥Ü¶¥¼h¦¡ªº class"
-
-#~ msgid "Show class in restricted hierarchy"
-#~ msgstr "Åã¥Ü restricted ¶¥¼h¦¡ªº class"
-
-#~ msgid "Xref refers to"
-#~ msgstr "Xref °Ñ¦Ò¨ì"
-
-#~ msgid "Xref referred by"
-#~ msgstr "Xref ³Q½Ö°Ñ¦Ò:"
-
-#~ msgid "Xref has a"
-#~ msgstr "Xref ¦³"
-
-#~ msgid "Xref used by"
-#~ msgstr "Xref ³Q½Ö¨Ï¥Î:"
-
-#~ msgid "Show docu of"
-#~ msgstr "Åã¥Ü¤å¥ó: "
-
-#~ msgid "Generate docu for"
-#~ msgstr "²£¥Í¤å¥ó: "
-
-#~ msgid ""
-#~ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
-#~ "$PATH).\n"
-#~ msgstr ""
-#~ "µLªk³s½u¨ì SNiFF+¡C½ÐÀˬdÀô¹ÒÅÜ¼Æ ($PATH ¸Ì¥²»Ý¥i¥H§ä¨ì sniffemacs)\n"
-
-#~ msgid "E274: Sniff: Error during read. Disconnected"
-#~ msgstr "E274: Sniff: Ū¨ú¿ù»~. ¨ú®ø³s½u"
-
-#~ msgid "SNiFF+ is currently "
-#~ msgstr "SNiFF+ ¥Ø«e"
-
-#~ msgid "not "
-#~ msgstr "¥¼"
-
-#~ msgid "connected"
-#~ msgstr "³s½u¤¤"
-
-#~ msgid "E275: Unknown SNiFF+ request: %s"
-#~ msgstr "E275: ¤£¥¿½Tªº SNiff+ ©I¥s: %s"
-
-#~ msgid "E276: Error connecting to SNiFF+"
-#~ msgstr "E276: ³s½u¨ì SNiFF+ ¥¢±Ñ"
-
-#~ msgid "E278: SNiFF+ not connected"
-#~ msgstr "E278: ¥¼³s½u¨ì SNiFF+"
-
-#~ msgid "Sniff: Error during write. Disconnected"
-#~ msgstr "Sniff: ¼g¤J¿ù»~¡Cµ²§ô³s½u"
-
-#~ msgid "not implemented yet"
-#~ msgstr "©|¥¼¹ê§@"
-
-#~ msgid "unknown option"
-#~ msgstr "¤£¥¿½Tªº¿ï¶µ"
-
-#~ msgid "cannot set line(s)"
-#~ msgstr "¤£¯à³]©w¦æ "
-
-#~ msgid "mark not set"
-#~ msgstr "¨S¦³³]©w¼Ð°O"
-
-#~ msgid "row %d column %d"
-#~ msgstr "¦C %d ¦æ %d"
-
-#~ msgid "cannot insert/append line"
-#~ msgstr "¤£¯à´¡¤J©Îªþ¥[¦¹¦æ "
-
-#~ msgid "unknown flag: "
-#~ msgstr "¿ù»~ªººX¼Ð: "
-
-#~ msgid "unknown vimOption"
-#~ msgstr "¤£¥¿½Tªº VIM ¿ï¶µ"
-
-#~ msgid "keyboard interrupt"
-#~ msgstr "Áä½L¤¤Â_"
-
-#~ msgid "vim error"
-#~ msgstr "vim ¿ù»~"
-
-#~ msgid "cannot create buffer/window command: object is being deleted"
-#~ msgstr "µLªk«Ø¥ß½w½Ä°Ï/µøµ¡©R¥O: ª«¥ó±N·|³Q§R°£"
-
-#~ msgid ""
-#~ "cannot register callback command: buffer/window is already being deleted"
-#~ msgstr "µLªkµù¥U callback ©R¥O: ½w½Ä°Ï/µøµ¡¤w¸g³Q§R°£¤F"
-
-#~ msgid ""
-#~ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-"
-#~ "dev@vim.org"
-#~ msgstr "E280: TCL ÄY­«¿ù»~: reflist Äê±¼¤F!? ½Ð³ø§iµ¹ to vim-dev@vim.org"
-
-#~ msgid "cannot register callback command: buffer/window reference not found"
-#~ msgstr "µLªkµù¥U callback ©R¥O: §ä¤£¨ì½w½Ä°Ï/µøµ¡"
-
-#~ msgid ""
-#~ "E571: Sorry, this command is disabled: the Tcl library could not be "
-#~ "loaded."
-#~ msgstr "E571: ¦¹©R¥OµLªk¨Ï¥Î, ¦]¬°µLªk¸ü¤J Tcl µ{¦¡®w(Library)"
-
-#~ msgid ""
-#~ "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim."
-#~ "org"
-#~ msgstr "E281: TCL ¿ù»~: µ²§ô½X¤£¬O¾ã¼Æ!? ½Ð³ø§iµ¹ to vim-dev@vim.org"
-
-#~ msgid "cannot get line"
-#~ msgstr "¤£¯à¨ú±o¦¹¦æ "
-
-#~ msgid "Unable to register a command server name"
-#~ msgstr "µLªkµù¥U©R¥O¦øªA¾¹¦WºÙ"
-
-#~ msgid "E248: Failed to send command to the destination program"
-#~ msgstr "E248: µLªk°e¥X©R¥O¨ì¥Øªº¦aµ{¦¡"
-
-#~ msgid "E251: VIM instance registry property is badly formed. Deleted!"
-#~ msgstr "E251: VIM ªº registry ³]©w¶µ¦³»~¡C¤w§R°£¡C"
-
-#~ msgid "This Vim was not compiled with the diff feature."
-#~ msgstr "±zªº Vim ½sͮɍS¦³¥[¤J diff ªº¯à¤O"
-
-#~ msgid "-register\t\tRegister this gvim for OLE"
-#~ msgstr "-register\t\tµù¥U gvim ¨ì OLE"
-
-#~ msgid "-unregister\t\tUnregister gvim for OLE"
-#~ msgstr "-unregister\t\t¨ú®ø OLE ¤¤ªº gvim µù¥U"
-
-#~ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
-#~ msgstr "-g\t\t\t¨Ï¥Î¹Ï§Î¬É­± (¦P \"gvim\")"
-
-#~ msgid "-f or --nofork\tForeground: Don't fork when starting GUI"
-#~ msgstr "-f ©Î --nofork\t«e´º: °_©l¹Ï§Î¬É­±®É¤£ fork"
-
-#~ msgid "-V[N]\t\tVerbose level"
-#~ msgstr "-V[N]\t\tVerbose µ¥¯Å"
-
-#~ msgid "-f\t\t\tDon't use newcli to open window"
-#~ msgstr "-f\t\t\t¤£¨Ï¥Î newcli ¨Ó¶}±Òµøµ¡"
-
-#~ msgid "-dev <device>\t\tUse <device> for I/O"
-#~ msgstr "-dev <device>\t\t¨Ï¥Î <device> °µ¿é¥X¤J"
-
-#~ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
-#~ msgstr "-U <gvimrc>\t\t¨Ï¥Î <gvimrc> ¨ú¥N¥ô¦ó .gvimrc"
-
-#~ msgid "-x\t\t\tEdit encrypted files"
-#~ msgstr "-x\t\t\t½s¿è½s½X¹LªºÀÉ®×"
-
-#~ msgid "-display <display>\tConnect vim to this particular X-server"
-#~ msgstr "-display <display>\t±N vim »P«ü©wªº X-server ³s½u"
-
-#~ msgid "-X\t\t\tDo not connect to X server"
-#~ msgstr "-X\t\t\t¤£­n³s½u¨ì X Server"
-
-#~ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
-#~ msgstr "--remote <files>\t½s¿è Vim ¦øªA¾¹¤Wªº <files> «áÂ÷¶}"
-
-#~ msgid "--remote-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-silent <files> ¬Û¦P¡A¦ý¨S¦³¦øªA¾¹®É¤£Äµ§i"
-
-#~ msgid ""
-#~ "--remote-wait <files> As --remote but wait for files to have been edited"
-#~ msgstr "--remote-wait <files> ¦P --remote, ¦ý·|µ¥­ÔÀÉ®×§¹¦¨½s¿è"
-
-#~ msgid ""
-#~ "--remote-wait-silent <files> Same, don't complain if there is no server"
-#~ msgstr "--remote-wait-silent <files> ¬Û¦P¡A¦ý¨S¦øªA¾¹®É¤£Äµ§i"
-
-#~ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
-#~ msgstr "--remote-send <keys>\t°e¥X <keys> ¨ì Vim ¦øªA¾¹¨ÃÂ÷¶}"
-
-#~ msgid ""
-#~ "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
-#~ msgstr "--remote-expr <expr>\t¦b¦øªA¾¹¤W°õ¦æ <expr> ¨Ã¦L¥Xµ²ªG"
-
-#~ msgid "--serverlist\t\tList available Vim server names and exit"
-#~ msgstr "--serverlist\t\t¦C¥X¥i¥Îªº Vim ¦øªA¾¹¦WºÙ¨ÃÂ÷¶}"
-
-#~ msgid "--servername <name>\tSend to/become the Vim server <name>"
-#~ msgstr "--servername <name>\t°e¦Ü/¦¨¬° Vim ¦øªA¾¹ <name>"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Motif version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim »{±oªº°Ñ¼Æ (Motif ª©):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (neXtaw version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim »{±oªº°Ñ¼Æ (neXtaw ª©):\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (Athena version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim »{±oªº°Ñ¼Æ (Athena ª©):\n"
-
-#~ msgid "-display <display>\tRun vim on <display>"
-#~ msgstr "-display <display>\t¦bµøµ¡ <display> °õ¦æ vim"
-
-#~ msgid "-iconic\t\tStart vim iconified"
-#~ msgstr "-iconic\t\t±Ò°Ê«á¹Ï¥Ü¤Æ(iconified)"
-
-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
-#~ msgstr "-name <name>\t\tŪ¨ú Resource ®É§â vim ªº¦WºÙµø¬° <name>"
-
-#~ msgid "\t\t\t (Unimplemented)\n"
-#~ msgstr "\t\t\t (©|¥¼¹ê§@)\n"
-
-#~ msgid "-background <color>\tUse <color> for the background (also: -bg)"
-#~ msgstr "-background <color>\t³]©w <color> ¬°­I´º¦â (¤]¥i¥Î -bg)"
-
-#~ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
-#~ msgstr "-foreground <color>\t³]©w <color> ¬°¤@¯ë¤å¦rÃC¦â (¤]¥i¥Î -fg)"
-
-#~ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
-#~ msgstr "-font <font>\t¨Ï¥Î <font> ¬°¤@¯ë¦r«¬ (¤]¥i¥Î -fn)"
-
-#~ msgid "-boldfont <font>\tUse <font> for bold text"
-#~ msgstr "-boldfont <font>\t¨Ï¥Î <font> ¬°²ÊÅé¦r«¬"
-
-#~ msgid "-italicfont <font>\tUse <font> for italic text"
-#~ msgstr "-italicfont <font>\t¨Ï¥Î <font> ¬°±×Åé¦r«¬"
-
-#~ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
-#~ msgstr "-geometry <geom>\t¨Ï¥Î<geom>¬°°_©l¦ì¸m (¤]¥i¥Î -geom)"
-
-#~ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
-#~ msgstr "-borderwidth <width>\t¨Ï¥Î¼e«×¬° <width> ªºÃ䮨 (¤]¥i¥Î -bw)"
-
-#~ msgid ""
-#~ "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)"
-#~ msgstr "-scrollbarwidth <width> ³]©w±²°Ê¶b¼e«×¬° <width> (¤]¥i¥Î -sw)"
-
-#~ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
-#~ msgstr "-menuheight <height>\t³]©w¿ï³æ¦Cªº°ª«×¬° <height> (¤]¥i¥Î -mh)"
-
-#~ msgid "-reverse\t\tUse reverse video (also: -rv)"
-#~ msgstr "-reverse\t\t¨Ï¥Î¤Ï¬ÛÅã¥Ü (¤]¥i¥Î -rv)"
-
-#~ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
-#~ msgstr "+reverse\t\t¤£¨Ï¥Î¤Ï¬ÛÅã¥Ü (¤]¥i¥Î +rv)"
-
-#~ msgid "-xrm <resource>\tSet the specified resource"
-#~ msgstr "-xrm <resource>\t³]©w«ü©wªº resource"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (RISC OS version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim »{±oªº°Ñ¼Æ (RISC OS ª©):\n"
-
-#~ msgid "--columns <number>\tInitial width of window in columns"
-#~ msgstr "--columns <number>\tµøµ¡ªì©l¤Æ¼e«×"
-
-#~ msgid "--rows <number>\tInitial height of window in rows"
-#~ msgstr "--rows <number>\tµøµ¡ªì©l¤Æ°ª«×"
-
-#~ msgid ""
-#~ "\n"
-#~ "Arguments recognised by gvim (GTK+ version):\n"
-#~ msgstr ""
-#~ "\n"
-#~ "gvim »{±oªº°Ñ¼Æ (GTK+ ª©):\n"
-
-#~ msgid "-display <display>\tRun vim on <display> (also: --display)"
-#~ msgstr "-display <display>\t¦b <display> °õ¦æ vim (¤]¥i¥Î --display)"
-
-#~ msgid "--role <role>\tSet a unique role to identify the main window"
-#~ msgstr "--role <role>\t³]©w¿W¯Sªº¨¤¦â(role)¥H°Ï¤À¥Dµøµ¡"
-
-#~ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
-#~ msgstr "--socketid <xid>\t¦b¥t¤@­Ó GTK widget ¤º¶}±Ò Vim"
-
-#~ msgid "-P <parent title>\tOpen Vim inside parent application"
-#~ msgstr "-P <parent title>\t¦b¤÷µ{¦¡¤¤¶}±Ò Vim"
-
-#~ msgid "No display"
-#~ msgstr "µLÅã¥Ü"
-
-#~ msgid ": Send failed.\n"
-#~ msgstr ": ¶Ç°e¥¢±Ñ¡C\n"
-
-#~ msgid ": Send failed. Trying to execute locally\n"
-#~ msgstr ": °e¥X¥¢±Ñ¡C¸Õ¹Ï¦b¥»¦a°õ¦æ\n"
-
-#~ msgid "%d of %d edited"
-#~ msgstr "¤w½s¿è %d/%d ­ÓÀÉ®×"
-
-#~ msgid "No display: Send expression failed.\n"
-#~ msgstr "µL Display: µLªk¶Ç°e¹Bºâ¦¡¡C\n"
-
-#~ msgid ": Send expression failed.\n"
-#~ msgstr ": µLªk¶Ç°e¹Bºâ¦¡¡C\n"
-
-#~ msgid "E543: Not a valid codepage"
-#~ msgstr "E543: ¤£¥¿½Tªº codepage"
-
-#~ msgid "E285: Failed to create input context"
-#~ msgstr "E285: µLªk«Ø¥ß input context"
-
-#~ msgid "E286: Failed to open input method"
-#~ msgstr "E286: µLªk¶}±Ò¿é¤Jªk"
-
-#~ msgid "E287: Warning: Could not set destroy callback to IM"
-#~ msgstr "E287: ĵ§i: µLªk²¾°£ IM ªº callback"
-
-#~ msgid "E288: input method doesn't support any style"
-#~ msgstr "E288: ¿é¤Jªk¤£¤ä´©¥ô¦ó style"
-
-#~ msgid "E289: input method doesn't support my preedit type"
-#~ msgstr "E289: ¿é¤Jªk¤£¤ä´©¥ô¦ó style"
-
-#~ msgid "E290: over-the-spot style requires fontset"
-#~ msgstr "E290: over-the-spot »Ý­n¦r«¬¶°(Fontset)"
-
-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
-#~ msgstr "E291: §Aªº GTK+ ¤ñ 1.2.3 ÁÙ¡CµLªk¨Ï¥Îª¬ºA°Ï¡C"
-
-#~ msgid "E292: Input Method Server is not running"
-#~ msgstr "E292: ¨S¦³°õ¦æ¤¤ªº¿é¤JªkºÞ²zµ{¦¡(Input Method Server)"
-
-#~ msgid ""
-#~ "\n"
-#~ " [not usable with this version of Vim]"
-#~ msgstr ""
-#~ "\n"
-#~ " [µLªk¦b¥»ª©¥»ªº Vim ¤W¨Ï¥Î]"
-
-#~ msgid ""
-#~ "&Open Read-Only\n"
-#~ "&Edit anyway\n"
-#~ "&Recover\n"
-#~ "&Quit\n"
-#~ "&Abort\n"
-#~ "&Delete it"
-#~ msgstr ""
-#~ "¥H°ßŪ¤è¦¡¶}±Ò(&O)\n"
-#~ "ª½±µ½s¿è(&E)\n"
-#~ "­×´_(&R)\n"
-#~ "Â÷¶}(&Q)\n"
-#~ "¸õ¥X(&A)\n"
-#~ "§R°£¼È¦sÀÉ(&D)"
-
-#~ msgid "Tear off this menu"
-#~ msgstr "¤Á¤U¦¹¿ï³æ"
-
-#~ msgid "[string too long]"
-#~ msgstr "[¦¹¦æ¹Lªø]"
-
-#~ msgid "Hit ENTER to continue"
-#~ msgstr "½Ð«ö ENTER Ä~Äò"
-
-#~ msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-#~ msgstr " (RET/BS: ¦V¤U/¦V¤W¤@¦æ, ªÅ¥ÕÁä/b: ¤@­¶, d/u: ¥b­¶, q: Â÷¶})"
-
-#~ msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-#~ msgstr " (RET: ¦V¤U¤@¦æ, ªÅ¥ÕÁä: ¤@­¶, d: ¥b­¶, q: Â÷¶})"
-
-#~ msgid "Save File dialog"
-#~ msgstr "¦sÀÉ"
-
-#~ msgid "Open File dialog"
-#~ msgstr "¶}ÀÉ"
-
-#~ msgid "E338: Sorry, no file browser in console mode"
-#~ msgstr "E338: ¥D±±¥x(Console)¼Ò¦¡®É¨S¦³ÀÉ®×ÂsÄý¾¹(file browser)"
-
-#~ msgid "Vim: preserving files...\n"
-#~ msgstr "Vim: «O¯dÀɮפ¤...\n"
-
-#~ msgid "Vim: Finished.\n"
-#~ msgstr "Vim: µ²§ô.\n"
-
-#~ msgid "ERROR: "
-#~ msgstr "¿ù»~: "
-
-#~ msgid ""
-#~ "\n"
-#~ "[bytes] total alloc-freed %<PRIu64>-%<PRIu64>, in use %<PRIu64>, peak use "
-#~ "%<PRIu64>\n"
-#~ msgstr ""
-#~ "\n"
-#~ "[bytes] ¥þ³¡ alloc-freed %<PRIu64>-%<PRIu64>, ¨Ï¥Î¤¤ %<PRIu64>, peak ¨Ï¥Î "
-#~ "%<PRIu64>\n"
-
-#~ msgid ""
-#~ "[calls] total re/malloc()'s %<PRIu64>, total free()'s %<PRIu64>\n"
-#~ "\n"
-#~ msgstr ""
-#~ "[©I¥s] ¥þ³¡ re/malloc(): %<PRIu64>, ¥þ³¡ free()': %<PRIu64>\n"
-#~ "\n"
-
-#~ msgid "E340: Line is becoming too long"
-#~ msgstr "E340: ¦¹¦æ¹Lªø"
-
-#~ msgid "E341: Internal error: lalloc(%<PRId64>, )"
-#~ msgstr "E341: ¤º³¡¿ù»~: lalloc(%<PRId64>, )"
-
-#~ msgid "E547: Illegal mouseshape"
-#~ msgstr "E547: ¤£¥¿½Tªº·Æ¹«§Îª¬"
-
-#~ msgid "Enter encryption key: "
-#~ msgstr "¿é¤J±K½X: "
-
-#~ msgid "Enter same key again: "
-#~ msgstr "½Ð¦A¿é¤J¤@¦¸: "
-
-#~ msgid "Keys don't match!"
-#~ msgstr "¨â¦¸¿é¤J±K½X¤£¬Û¦P!"
-
-#~ msgid "Cannot connect to Netbeans #2"
-#~ msgstr "µLªk³s±µ¨ì Netbeans #2"
-
-#~ msgid "Cannot connect to Netbeans"
-#~ msgstr "µLªk³s±µ¨ì Netbeans"
-
-#~ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
-#~ msgstr "E668: NetBeans ³s½u¸ê°TÀÉ®×: \"%s\" ¦s¨ú¼Ò¦¡¤£¥¿½T"
-
-#~ msgid "read from Netbeans socket"
-#~ msgstr "¥Ñ Netbeans socket Ū¨ú"
-
-#~ msgid "E658: NetBeans connection lost for buffer %<PRId64>"
-#~ msgstr "E658: ½w½Ä°Ï %<PRId64> »P NetBeans ªº³s½u¤w¤¤Â_"
-
-#~ msgid "freeing %<PRId64> lines"
-#~ msgstr "ÄÀ©ñ %<PRId64> ¦æ¤¤ "
-
-#~ msgid "E530: Cannot change term in GUI"
-#~ msgstr "E530: ¦b¹Ï«¬¬É­±¤¤µLªk¤Á´« term"
-
-#~ msgid "E531: Use \":gui\" to start the GUI"
-#~ msgstr "E531: ¿é¤J \":gui\" ¨Ó±Ò°Ê¹Ï§Î¬É­±"
-
-#~ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
-#~ msgstr "E617: ¦b¹Ï«¬¬É­±¤¤µLªk¤Á´« term"
-
-#~ msgid "E597: can't select fontset"
-#~ msgstr "E597: µLªk¨Ï¥Î¦r«¬¶°(Fontset)"
-
-#~ msgid "E598: Invalid fontset"
-#~ msgstr "E598: ¤£¥¿½Tªº¦r«¬¶°(Fontset)"
-
-#~ msgid "E533: can't select wide font"
-#~ msgstr "E533: µLªk¨Ï¥Î³]©wªº¤¤¤å¦r«¬(Widefont)"
-
-#~ msgid "E534: Invalid wide font"
-#~ msgstr "E534: ¤£¥¿½Tªº¦r«¬(Widefont)"
-
-#~ msgid "E538: No mouse support"
-#~ msgstr "E538: ¤£¤ä´©·Æ¹«"
-
-#~ msgid "cannot open "
-#~ msgstr "¤£¯à¶}±Ò"
-
-#~ msgid "VIM: Can't open window!\n"
-#~ msgstr "VIM: µLªk¶}±Òµøµ¡!\n"
-
-#~ msgid "Need Amigados version 2.04 or later\n"
-#~ msgstr "»Ý­n Amigados ª©¥» 2.04 ¥H¤W\n"
-
-#~ msgid "Need %s version %<PRId64>\n"
-#~ msgstr "»Ý­n %s ª©¥» %<PRId64>\n"
-
-#~ msgid "Cannot open NIL:\n"
-#~ msgstr "µLªk¶}±Ò NIL:\n"
-
-#~ msgid "Cannot create "
-#~ msgstr "¤£¯à«Ø¥ß "
-
-#~ msgid "Vim exiting with %d\n"
-#~ msgstr "Vim µ²§ô¶Ç¦^­È: %d\n"
-
-#~ msgid "cannot change console mode ?!\n"
-#~ msgstr "µLªk¤Á´«¥D±±¥x(console)¼Ò¦¡ !?\n"
-
-#~ msgid "mch_get_shellsize: not a console??\n"
-#~ msgstr "mch_get_shellsize: ¤£¬O¥D±±¥x(console)??\n"
-
-#~ msgid "Cannot execute "
-#~ msgstr "¤£¯à°õ¦æ "
-
-#~ msgid "shell "
-#~ msgstr "shell "
-
-#~ msgid " returned\n"
-#~ msgstr " ¤wªð¦^\n"
-
-#~ msgid "ANCHOR_BUF_SIZE too small."
-#~ msgstr "ANCHOR_BUF_SIZE ¤Ó¤p"
-
-#~ msgid "I/O ERROR"
-#~ msgstr "I/O ¿ù»~"
-
-#~ msgid "...(truncated)"
-#~ msgstr "...(¤w¤Á±¼)"
-
-#~ msgid "'columns' is not 80, cannot execute external commands"
-#~ msgstr "'columns' ¤£¬O 80, µLªk°õ¦æ¥~³¡©R¥O"
-
-#~ msgid "to %s on %s"
-#~ msgstr "¨ì %s on %s"
-
-#~ msgid "E613: Unknown printer font: %s"
-#~ msgstr "E613: ¤£¥¿½Tªº¦Lªí¾÷¦r«¬: %s"
-
-#~ msgid "E238: Print error: %s"
-#~ msgstr "E238: ¦C¦L¿ù»~: %s"
-
-#~ msgid "Printing '%s'"
-#~ msgstr "¦C¦L¤¤: '%s'"
-
-#~ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
-#~ msgstr "E244: ¦r¤¸¶° \"%s\" µLªk¹ïÀ³¦r«¬\"%s\""
-
-#~ msgid "E245: Illegal char '%c' in font name \"%s\""
-#~ msgstr "E245: ¤£¥¿½Tªº¦r¤¸ '%c' ¥X²{¦b¦r«¬¦WºÙ \"%s\" ¤º"
-
-#~ msgid "Vim: Double signal, exiting\n"
-#~ msgstr "Vim: Âù­«signal, Â÷¶}¤¤\n"
-
-#~ msgid "Vim: Caught deadly signal %s\n"
-#~ msgstr "Vim: CVim: ÄdºI¨ì«H¸¹(signal) %s\n"
-
-#~ msgid "Vim: Caught deadly signal\n"
-#~ msgstr "Vim: ÄdºI¨ì­P©Rªº«H¸¹(deadly signale)\n"
-
-#~ msgid "Opening the X display took %<PRId64> msec"
-#~ msgstr "¶}±Ò X Window ¯Ó®É %<PRId64> msec"
-
-#~ msgid ""
-#~ "\n"
-#~ "Vim: Got X error\n"
-#~ msgstr ""
-#~ "\n"
-#~ "Vim: X ¿ù»~\n"
-
-#~ msgid "Testing the X display failed"
-#~ msgstr "´ú¸Õ X Window ¥¢±Ñ"
-
-#~ msgid "Opening the X display timed out"
-#~ msgstr "¶}±Ò X Window ¹O®É"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot execute shell sh\n"
-#~ msgstr ""
-#~ "\n"
-#~ "¤£¯à°õ¦æ shell sh\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot create pipes\n"
-#~ msgstr ""
-#~ "\n"
-#~ "¤£¯à«Ø¥ß pipe ºÞ½u\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Cannot fork\n"
-#~ msgstr ""
-#~ "\n"
-#~ "¤£¯à fork\n"
-
-#~ msgid ""
-#~ "\n"
-#~ "Command terminated\n"
-#~ msgstr ""
-#~ "\n"
-#~ "©R¥O¤w²×µ²\n"
-
-#~ msgid "XSMP lost ICE connection"
-#~ msgstr "XSMP ¥¢¥h ICE ³s½u"
-
-#~ msgid "Opening the X display failed"
-#~ msgstr "¶}±Ò X Window ¥¢±Ñ"
-
-#~ msgid "XSMP handling save-yourself request"
-#~ msgstr "XSMP ¥¿¦b³B²z¦Û§ÚÀx¦s­n¨D"
-
-#~ msgid "XSMP opening connection"
-#~ msgstr "¶}±Ò XSMP ³s½u¤¤"
-
-#~ msgid "XSMP ICE connection watch failed"
-#~ msgstr "XSMP ICE ³s½uºÊ¬Ý¥¢±Ñ"
-
-#~ msgid "XSMP SmcOpenConnection failed: %s"
-#~ msgstr "XSMP SmcOpenConnection ¥¢±Ñ: %s"
-
-#~ msgid "At line"
-#~ msgstr "¦b¦æ¸¹ "
-
-#~ msgid "Could not allocate memory for command line."
-#~ msgstr "µLªk¬°©R¥O¦C°t¸m°O¾ÐÅé¡C"
-
-#~ msgid "VIM Error"
-#~ msgstr "VIM ¿ù»~"
-
-#~ msgid "Could not load vim32.dll!"
-#~ msgstr "µLªk¸ü¤J vim32.dll¡I"
-
-#~ msgid "Could not fix up function pointers to the DLL!"
-#~ msgstr "¤£¯à­×¥¿¨ç¦¡«ü¼Ð¨ì DLL!"
-
-#~ msgid "shell returned %d"
-#~ msgstr "Shell ¶Ç¦^­È %d"
-
-#~ msgid "Vim: Caught %s event\n"
-#~ msgstr "Vim: ÄdºI¨ì %s \n"
-
-#~ msgid "close"
-#~ msgstr "Ãö³¬"
-
-#~ msgid "logoff"
-#~ msgstr "µn¥X"
-
-#~ msgid "shutdown"
-#~ msgstr "Ãö¾÷"
-
-#~ msgid "E371: Command not found"
-#~ msgstr "E371: §ä¤£¨ì©R¥O"
-
-#~ msgid ""
-#~ "VIMRUN.EXE not found in your $PATH.\n"
-#~ "External commands will not pause after completion.\n"
-#~ "See :help win32-vimrun for more information."
-#~ msgstr ""
-#~ "¦b§Aªº $PATH ¤¤§ä¤£¨ì VIMRUN.EXE.\n"
-#~ "¥~³¡©R¥O°õ¦æ§¹²¦«á±N¤£·|¼È°±.\n"
-#~ "¶i¤@¨B»¡©ú½Ð°õ¦æ :help win32-vimrun "
-
-#~ msgid "Vim Warning"
-#~ msgstr "Vim ĵ§i"
-
-#~ msgid "E56: %s* operand could be empty"
-#~ msgstr "E56: %s* ¹Bºâ¤¸¥i¥H¬OªÅªº"
-
-#~ msgid "E57: %s+ operand could be empty"
-#~ msgstr "E57: %s+ ¹Bºâ¤¸¥i¥H¬OªÅªº"
-
-#~ msgid "E58: %s{ operand could be empty"
-#~ msgstr "E58: %s{ ¹Bºâ¤¸¥i¥H¬OªÅªº"
-
-#~ msgid "E361: Crash intercepted; regexp too complex?"
-#~ msgstr "E361: µLªk°õ¦æ; regular expression ¤Ó½ÆÂø?"
-
-#~ msgid "E363: pattern caused out-of-stack error"
-#~ msgstr "E363: regular expression ³y¦¨°ïÅ|¥Î¥úªº¿ù»~"
-
-#~ msgid "E396: containedin argument not accepted here"
-#~ msgstr "E396: ¨Ï¥Î¤F¤£¥¿½Tªº°Ñ¼Æ"
-
-#~ msgid "Enter nr of choice (<CR> to abort): "
-#~ msgstr "¿é¤J nr ©Î¿ï¾Ü (<CR> Â÷¶}): "
-
-#~ msgid "E430: Tag file path truncated for %s\n"
-#~ msgstr "E430: Tag Àɮ׸ô®|³QºIÂ_¬° %s\n"
-
-#~ msgid "new shell started\n"
-#~ msgstr "°_°Ê·s shell\n"
-
-#~ msgid "No undo possible; continue anyway"
-#~ msgstr "µLªkÁÙ­ì¡F½ÐÄ~Äò§V¤O"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16/32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 16/32 Bit ¹Ï«¬¬É­±ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit GUI version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 Bit ¹Ï«¬¬É­±ª©¥»"
-
-#~ msgid " in Win32s mode"
-#~ msgstr "Win32s ¼Ò¦¡"
-
-#~ msgid " with OLE support"
-#~ msgstr "¤ä´© OLE"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 32-bit console version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 Bit console ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "MS-Windows 16-bit version"
-#~ msgstr ""
-#~ "\n"
-#~ "MS-Windows 32 Bit console ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "32-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "32 Bit MS-DOS ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "16-bit MS-DOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "16 Bit MS-DOS ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X (unix) version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X (unix) ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS X version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS X ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS version"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "RISC OS version"
-#~ msgstr ""
-#~ "\n"
-#~ "RISC OS ª©¥»"
-
-#~ msgid ""
-#~ "\n"
-#~ "Big version "
-#~ msgstr ""
-#~ "\n"
-#~ "¤j«¬ª©¥» "
-
-#~ msgid ""
-#~ "\n"
-#~ "Normal version "
-#~ msgstr ""
-#~ "\n"
-#~ "¤@¯ëª©¥» "
-
-#~ msgid ""
-#~ "\n"
-#~ "Small version "
-#~ msgstr ""
-#~ "\n"
-#~ "²©öª©¥» "
-
-#~ msgid ""
-#~ "\n"
-#~ "Tiny version "
-#~ msgstr ""
-#~ "\n"
-#~ "ºë²ª©¥» "
-
-#~ msgid "with GTK2-GNOME GUI."
-#~ msgstr "¨Ï¥Î GTK2-GNOME ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with GTK-GNOME GUI."
-#~ msgstr "¨Ï¥Î GTK-GNOME ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with GTK2 GUI."
-#~ msgstr "¨Ï¥Î GTK2 ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with GTK GUI."
-#~ msgstr "¨Ï¥Î GTK ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with X11-Motif GUI."
-#~ msgstr "¨Ï¥Î X11-Motif ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with X11-neXtaw GUI."
-#~ msgstr "¨Ï¥Î X11-neXtaw ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with X11-Athena GUI."
-#~ msgstr "¨Ï¥Î X11-Athena ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with BeOS GUI."
-#~ msgstr "¨Ï¥Î BeOS ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with Photon GUI."
-#~ msgstr "¨Ï¥ÎPhoton¹Ï«¬¬É­±¡C"
-
-#~ msgid "with GUI."
-#~ msgstr "¨Ï¥Î¹Ï«¬¬É­±¡C"
-
-#~ msgid "with Carbon GUI."
-#~ msgstr "¨Ï¥Î Carbon ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with Cocoa GUI."
-#~ msgstr "¨Ï¥Î Cocoa ¹Ï«¬¬É­±¡C"
-
-#~ msgid "with (classic) GUI."
-#~ msgstr "¨Ï¥Î (¶Ç²Î) ¹Ï«¬¬É­±¡C"
-
-#~ msgid " system gvimrc file: \""
-#~ msgstr " ¨t²Î gvimrc ÀÉ®×: \""
-
-#~ msgid " user gvimrc file: \""
-#~ msgstr " ¨Ï¥ÎªÌ­Ó¤H gvimrc ÀÉ: \""
-
-#~ msgid "2nd user gvimrc file: \""
-#~ msgstr " ²Ä¤G²Õ­Ó¤H gvimrc ÀÉ®×: \""
-
-#~ msgid "3rd user gvimrc file: \""
-#~ msgstr " ²Ä¤T²Õ­Ó¤H gvimrc ÀÉ®×: \""
-
-#~ msgid " system menu file: \""
-#~ msgstr " ¨t²Î¿ï³æ³]©wÀÉ: \""
-
-#~ msgid "Compiler: "
-#~ msgstr "½s;¹: "
-
-#~ msgid "menu Help->Orphans for information "
-#~ msgstr "¶i¤@¨B»¡©ú½Ð¿ï¨ú¿ï³æªº »²§U»¡©ú->¬@±Ï©t¨à"
-
-#~ msgid "Running modeless, typed text is inserted"
-#~ msgstr "°õ¦æ Modeless ¼Ò¦¡¡A¿é¤Jªº¤å¦r·|¦Û°Ê´¡¤J"
-
-#~ msgid "menu Edit->Global Settings->Toggle Insert Mode "
-#~ msgstr "¿ï¨ú¿ï³æªº¡u½s¿è¡v¡u¥þ°ì³]©w¡v¡u¤Á´«´¡¤J¼Ò¦¡¡v"
-
-#~ msgid " for two modes "
-#~ msgstr " ¨âºØ¼Ò¦¡ "
-
-#~ msgid "menu Edit->Global Settings->Toggle Vi Compatible"
-#~ msgstr "¿ï¨ú¿ï³æªº¡u½s¿è¡v¡u¥þ°ì³]©w¡v¡u¤Á´«¶Ç²ÎVi¬Û®e¼Ò¦¡¡v"
-
-#~ msgid " for Vim defaults "
-#~ msgstr " ¥H±o Vim ¹w³]­È "
-
-#~ msgid "WARNING: Windows 95/98/ME detected"
-#~ msgstr "ª`·N: °»´ú¨ì Windows 95/98/ME"
-
-#~ msgid "type :help windows95<Enter> for info on this"
-#~ msgstr "¦pªG»Ý­n¹ï Windows 95 ¤ä´©ªº§ó¦h¸ê°T½Ð¿é¤J :help windows95<Enter>"
-
-#~ msgid "E370: Could not load library %s"
-#~ msgstr "E370: µLªk­«·s¸ü¤Jµ{¦¡®w %s"
-
-#~ msgid ""
-#~ "Sorry, this command is disabled: the Perl library could not be loaded."
-#~ msgstr "©êºp, ¦¹©R¥OµLªk¨Ï¥Î. ­ì¦]: µLªk¸ü¤J Perl µ{¦¡®w(Library)"
-
-#~ msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
-#~ msgstr "E299: ¦b sandbox ¤¤µL Safe ¼Ò²Õ®ÉµLªk°õ¦æ Perl"
-
-#~ msgid "Edit with &multiple Vims"
-#~ msgstr "¨Ï¥Î¦h­Ó Vim session ½s¿è(&M)"
-
-#~ msgid "Edit with single &Vim"
-#~ msgstr "¥u¨Ï¥Î¦P¤@­Ó Vim session ½s¿è(&V)"
-
-#~ msgid "&Diff with Vim"
-#~ msgstr "¨Ï¥Î Vim ¨Ó¤ñ¸û(&Diff)"
-
-#~ msgid "Edit with &Vim"
-#~ msgstr "¨Ï¥Î Vim ½s¿è¦¹ÀÉ(&V)"
-
-#~ msgid "Edit with existing Vim - &"
-#~ msgstr "¨Ï¥Î°õ¦æ¤¤ªº Vim session ½s¿è - &"
-
-#~ msgid "Edits the selected file(s) with Vim"
-#~ msgstr "¨Ï¥Î Vim ½s¿è¤w¿ï¨úªºÀÉ®×"
-
-#~ msgid "Error creating process: Check if gvim is in your path!"
-#~ msgstr "µLªk°õ¦æµ{¦¡: ½ÐÀˬd gvim ¦³¨S¦³¦b§Aªº PATH ÅܼƸÌ!"
-
-#~ msgid "gvimext.dll error"
-#~ msgstr "gvimext.dll ¿ù»~"
-
-#~ msgid "Path length too long!"
-#~ msgstr "¸ô®|ªø«×¤Óªø!"
-
-#~ msgid "E234: Unknown fontset: %s"
-#~ msgstr "E234: ¤£¥¿½Tªº¦r¤¸¶° (Fontset): %s"
-
-#~ msgid "E235: Unknown font: %s"
-#~ msgstr "E235: ¤£¥¿½Tªº¦r«¬¦WºÙ: %s"
-
-#~ msgid "E448: Could not load library function %s"
-#~ msgstr "E448: µLªk¸ü¤Jµ{¦¡®wªº¨ç¦¡ %s"
-
-#~ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
-#~ msgstr "E26: ¦]¬°½sͮɍS¦³¥[¤J Hebrew ªºµ{¦¡½X¡A©Ò¥HµLªk¨Ï¥Î Hebrew\n"
-
-#~ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
-#~ msgstr "E27: ¦]¬°½sͮɍS¦³¥[¤J Farsi ªºµ{¦¡½X¡A©Ò¥HµLªk¨Ï¥Î Farsi\n"
-
-#~ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
-#~ msgstr "E800: ¦]¬°½sͮɍS¦³¥[¤J Arabic ªºµ{¦¡½X¡A©Ò¥HµLªk¨Ï¥Î\n"
-
-#~ msgid "E247: no registered server named \"%s\""
-#~ msgstr "E247: ¨S¦³µù¥U¬° \"%s\" ªº¦øªA¾¹"
-
-#~ msgid "E233: cannot open display"
-#~ msgstr "E233: <¤£¯à¶}±Ò X Server DISPLAY>"
-
-#~ msgid "E463: Region is guarded, cannot modify"
-#~ msgstr "E463: °Ï°ì³Q«OÅ@¡AµLªk­×§ï"
-
-#~ msgid "E565: error reading cscope connection %d"
-#~ msgstr "E565: Ū¨ú cscope ³s½u %d ¿ù»~"
-
-#~ msgid "E260: cscope connection not found"
-#~ msgstr "E260: §ä¤£¨ì cscope ³s½u"
-
-#~ msgid "cscope connection closed"
-#~ msgstr "cscope ³s½u¤wÃö³¬"
-
-#~ msgid "couldn't malloc\n"
-#~ msgstr "µLªk¨Ï¥Î malloc\n"
-
-#~ msgid "%2d %-5ld %-34s <none>\n"
-#~ msgstr "%2d %-5ld %-34s <µL>\n"
-
-#~ msgid "\"\n"
-#~ msgstr "\"\n"
-
-#~ msgid "--help\t\tShow Gnome arguments"
-#~ msgstr "--help\t\tÅã¥Ü Gnome ¬ÛÃö°Ñ¼Æ"
-
-#~ msgid " BLOCK"
-#~ msgstr " °Ï¶ô"
-
-#~ msgid " LINE"
-#~ msgstr " ¦æ¿ï¨ú"
-
-#~ msgid "Linear tag search"
-#~ msgstr "½u©Ê·j´M¼ÐÅÒ (Tags)"
-
-#~ msgid "Binary tag search"
-#~ msgstr "¤G¤À·j´M(Binary search) ¼ÐÅÒ(Tags)"
-
-#~ msgid "function "
-#~ msgstr "¨ç¦¡ "
-
-#~ msgid "Run Macro"
-#~ msgstr "°õ¦æ¥¨¶°"
-
-#~ msgid "E242: Color name not recognized: %s"
-#~ msgstr "E242: %s ¬°µLªkÃѧOªºÃC¦â¦WºÙ"
-
-#~ msgid "error reading cscope connection %d"
-#~ msgstr "Ū¨ú cscope ³s½u %d ®É¿ù»~"
-
-#~ msgid "E249: couldn't read VIM instance registry property"
-#~ msgstr "E249: µLªkŪ¨ú VIM ªº registry ³]©w¶µ"
-
-#~ msgid "E241: Unable to send to Vim server"
-#~ msgstr "E241: µLªk¶Ç°e¨ì Vim ¦øªA¾¹"
-
-#~ msgid ""
-#~ "\n"
-#~ "Send failed. No command server present ?\n"
-#~ msgstr ""
-#~ "\n"
-#~ "¶Ç°e¥¢±Ñ¡C¨S¦³©R¥O¦øªA¾¹¦s¦b ?\n"
-
-#~ msgid "PC (32 bits Vim)"
-#~ msgstr "PC (32 ¦ì¤¸ Vim)"
-
-#~ msgid "PC (16 bits Vim)"
-#~ msgstr "PC (16 ¦ì¤¸ Vim)"
-
-#~ msgid "E362: Unsupported screen mode"
-#~ msgstr "E362: ¿Ã¹õ¼Ò¦¡¤£¤ä´©"
-
-#~ msgid "No servers found for this display"
-#~ msgstr "¦¹Display¨S¦³¦øªA¾¹(Servers)"
-
-#~ msgid "E258: no matches found in cscope connections"
-#~ msgstr "E258: cscope ³s½u§ä¤£¨ì²Å¦Xªº"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS Carbon"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS Carbon"
-
-#~ msgid ""
-#~ "\n"
-#~ "MacOS 8"
-#~ msgstr ""
-#~ "\n"
-#~ "MacOS 8"
-
-#~ msgid "Retrieve next symbol"
-#~ msgstr "Ū¨ú: ±q¤U­Ó symbol"
-
-#~ msgid "-- SNiFF+ commands --"
-#~ msgstr "-- SNiFF+ ©R¥O --"
-
-#~ msgid "E277: Unrecognized sniff request [%s]"
-#~ msgstr "E277: µLªk¿ëÃÑ sniff ©R¥O [%s]"
diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c
index 5ad621e666..89180f76de 100644
--- a/src/nvim/popupmnu.c
+++ b/src/nvim/popupmnu.c
@@ -7,12 +7,12 @@
#include <stdbool.h>
#include "nvim/vim.h"
+#include "nvim/api/private/helpers.h"
#include "nvim/ascii.h"
#include "nvim/popupmnu.h"
#include "nvim/charset.h"
#include "nvim/ex_cmds.h"
#include "nvim/memline.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/option.h"
#include "nvim/screen.h"
@@ -21,6 +21,7 @@
#include "nvim/memory.h"
#include "nvim/window.h"
#include "nvim/edit.h"
+#include "nvim/ui.h"
static pumitem_T *pum_array = NULL; // items of displayed pum
static int pum_size; // nr of items in "pum_array"
@@ -36,8 +37,10 @@ static int pum_scrollbar; // TRUE when scrollbar present
static int pum_row; // top row of pum
static int pum_col; // left column of pum
-static int pum_do_redraw = FALSE; // do redraw anyway
+static bool pum_is_visible = false;
+static bool pum_external = false;
+static bool pum_wants_external = false;
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "popupmnu.c.generated.h"
@@ -53,7 +56,10 @@ static int pum_do_redraw = FALSE; // do redraw anyway
/// @param array
/// @param size
/// @param selected index of initially selected item, none if out of range
-void pum_display(pumitem_T *array, int size, int selected)
+/// @param array_changed if true, array contains different items since last call
+/// if false, a new item is selected, but the array
+/// is the same
+void pum_display(pumitem_T *array, int size, int selected, bool array_changed)
{
int w;
int def_width;
@@ -61,38 +67,77 @@ void pum_display(pumitem_T *array, int size, int selected)
int kind_width;
int extra_width;
int i;
- int top_clear;
int row;
int context_lines;
int col;
- int above_row = cmdline_row;
+ int above_row;
+ int below_row;
int redo_count = 0;
+ win_T *pvwin;
+
+ if (!pum_is_visible) {
+ // To keep the code simple, we only allow changing the
+ // draw mode when the popup menu is not being displayed
+ pum_external = pum_wants_external;
+ }
redo:
+ // Mark the pum as visible already here,
+ // to avoid that must_redraw is set when 'cursorcolumn' is on.
+ pum_is_visible = true;
+ validate_cursor_col();
+ above_row = 0;
+ below_row = cmdline_row;
+
+ // anchor position: the start of the completed word
+ row = curwin->w_wrow + curwin->w_winrow;
+ if (curwin->w_p_rl) {
+ col = curwin->w_wincol + curwin->w_width - curwin->w_wcol - 1;
+ } else {
+ col = curwin->w_wincol + curwin->w_wcol;
+ }
+
+ if (pum_external) {
+ Array args = ARRAY_DICT_INIT;
+ if (array_changed) {
+ Array arr = ARRAY_DICT_INIT;
+ for (i = 0; i < size; i++) {
+ Array item = ARRAY_DICT_INIT;
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_text)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_kind)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_extra)));
+ ADD(item, STRING_OBJ(cstr_to_string((char *)array[i].pum_info)));
+ ADD(arr, ARRAY_OBJ(item));
+ }
+ ADD(args, ARRAY_OBJ(arr));
+ ADD(args, INTEGER_OBJ(selected));
+ ADD(args, INTEGER_OBJ(row));
+ ADD(args, INTEGER_OBJ(col));
+ ui_event("popupmenu_show", args);
+ } else {
+ ADD(args, INTEGER_OBJ(selected));
+ ui_event("popupmenu_select", args);
+ }
+ return;
+ }
+
def_width = PUM_DEF_WIDTH;
max_width = 0;
kind_width = 0;
extra_width = 0;
- // Pretend the pum is already there to avoid that must_redraw is set when
- // 'cuc' is on.
- pum_array = (pumitem_T *)1;
- validate_cursor_col();
- pum_array = NULL;
-
- row = curwin->w_wrow + curwin->w_winrow;
-
- if (firstwin->w_p_pvw) {
- top_clear = firstwin->w_height;
- } else {
- top_clear = 0;
+ FOR_ALL_WINDOWS(pvwin) {
+ if (pvwin->w_p_pvw) {
+ break;
+ }
}
- // When the preview window is at the bottom stop just above it. Also
- // avoid drawing over the status line so that it's clear there is a window
- // boundary.
- if (lastwin->w_p_pvw) {
- above_row -= lastwin->w_height + lastwin->w_status_height + 1;
+ if (pvwin != NULL) {
+ if (pvwin->w_wrow < curwin->w_wrow) {
+ above_row = pvwin->w_wrow + pvwin->w_height;
+ } else if (pvwin->w_wrow > pvwin->w_wrow + curwin->w_height) {
+ below_row = pvwin->w_wrow;
+ }
}
// Figure out the size and position of the pum.
@@ -108,8 +153,8 @@ redo:
// Put the pum below "row" if possible. If there are few lines decide on
// where there is more room.
- if ((row + 2 >= above_row - pum_height)
- && (row > (above_row - top_clear) / 2)) {
+ if (row + 2 >= below_row - pum_height
+ && row - above_row > (below_row - above_row) / 2) {
// pum above "row"
// Leave two lines of context if possible
@@ -143,8 +188,8 @@ redo:
}
pum_row = row + context_lines;
- if (size > above_row - pum_row) {
- pum_height = above_row - pum_row;
+ if (size > below_row - pum_row) {
+ pum_height = below_row - pum_row;
} else {
pum_height = size;
}
@@ -159,12 +204,10 @@ redo:
return;
}
- // If there is a preview window at the top avoid drawing over it.
- if (firstwin->w_p_pvw
- && (pum_row < firstwin->w_height)
- && (pum_height > firstwin->w_height + 4)) {
- pum_row += firstwin->w_height;
- pum_height -= firstwin->w_height;
+ // If there is a preview window at the above avoid drawing over it.
+ if (pvwin != NULL && pum_row < above_row && pum_height > above_row) {
+ pum_row += above_row;
+ pum_height -= above_row;
}
// Compute the width of the widest match and the widest extra.
@@ -194,13 +237,6 @@ redo:
pum_base_width = max_width;
pum_kind_width = kind_width;
- // Calculate column
- if (curwin->w_p_rl) {
- col = curwin->w_wincol + curwin->w_width - curwin->w_wcol - 1;
- } else {
- col = curwin->w_wincol + curwin->w_wcol;
- }
-
// if there are more items than room we need a scrollbar
if (pum_height < size) {
pum_scrollbar = 1;
@@ -554,7 +590,9 @@ static int pum_set_selected(int n, int repeat)
g_do_tagpreview = 0;
if (curwin->w_p_pvw) {
- if ((curbuf->b_fname == NULL)
+ if (!resized
+ && (curbuf->b_nwindows == 1)
+ && (curbuf->b_fname == NULL)
&& (curbuf->b_p_bt[0] == 'n')
&& (curbuf->b_p_bt[2] == 'f')
&& (curbuf->b_p_bh[0] == 'w')) {
@@ -641,9 +679,9 @@ static int pum_set_selected(int n, int repeat)
// Update the screen before drawing the popup menu.
// Enable updating the status lines.
- pum_do_redraw = TRUE;
+ pum_is_visible = false;
update_screen(0);
- pum_do_redraw = FALSE;
+ pum_is_visible = true;
if (!resized && win_valid(curwin_save)) {
no_u_sync++;
@@ -653,9 +691,9 @@ static int pum_set_selected(int n, int repeat)
// May need to update the screen again when there are
// autocommands involved.
- pum_do_redraw = TRUE;
+ pum_is_visible = false;
update_screen(0);
- pum_do_redraw = FALSE;
+ pum_is_visible = true;
}
}
}
@@ -672,10 +710,17 @@ static int pum_set_selected(int n, int repeat)
/// Undisplay the popup menu (later).
void pum_undisplay(void)
{
+ pum_is_visible = false;
pum_array = NULL;
- redraw_all_later(SOME_VALID);
- redraw_tabline = TRUE;
- status_redraw_all();
+
+ if (pum_external) {
+ Array args = ARRAY_DICT_INIT;
+ ui_event("popupmenu_hide", args);
+ } else {
+ redraw_all_later(SOME_VALID);
+ redraw_tabline = true;
+ status_redraw_all();
+ }
}
/// Clear the popup menu. Currently only resets the offset to the first
@@ -685,12 +730,16 @@ void pum_clear(void)
pum_first = 0;
}
-/// Overruled when "pum_do_redraw" is set, used to redraw the status lines.
-///
-/// @return TRUE if the popup menu is displayed.
-int pum_visible(void)
+/// @return true if the popup menu is displayed.
+bool pum_visible(void)
+{
+ return pum_is_visible;
+}
+
+/// @return true if the popup menu is displayed and drawn on the grid.
+bool pum_drawn(void)
{
- return !pum_do_redraw && pum_array != NULL;
+ return pum_visible() && !pum_external;
}
/// Gets the height of the menu.
@@ -701,3 +750,8 @@ int pum_get_height(void)
{
return pum_height;
}
+
+void pum_set_external(bool external)
+{
+ pum_wants_external = external;
+}
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c
index 151b9d3790..cebff5e8b7 100644
--- a/src/nvim/quickfix.c
+++ b/src/nvim/quickfix.c
@@ -27,7 +27,6 @@
#include "nvim/memline.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/memory.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -49,8 +48,6 @@ struct dir_stack_T {
char_u *dirname;
};
-static struct dir_stack_T *dir_stack = NULL;
-
/*
* For each error the next struct is allocated and linked in a list.
*/
@@ -77,13 +74,14 @@ struct qfline_S {
#define LISTCOUNT 10
typedef struct qf_list_S {
- qfline_T *qf_start; /* pointer to the first error */
- qfline_T *qf_ptr; /* pointer to the current error */
- int qf_count; /* number of errors (0 means no error list) */
- int qf_index; /* current index in the error list */
- int qf_nonevalid; /* TRUE if not a single valid entry found */
- char_u *qf_title; /* title derived from the command that created
- * the error list */
+ qfline_T *qf_start; // pointer to the first error
+ qfline_T *qf_last; // pointer to the last error
+ qfline_T *qf_ptr; // pointer to the current error
+ int qf_count; // number of errors (0 means no error list)
+ int qf_index; // current index in the error list
+ int qf_nonevalid; // TRUE if not a single valid entry found
+ char_u *qf_title; // title derived from the command that created
+ // the error list
} qf_list_T;
struct qf_info_S {
@@ -97,6 +95,15 @@ struct qf_info_S {
int qf_listcount; /* current number of lists */
int qf_curlist; /* current error list */
qf_list_T qf_lists[LISTCOUNT];
+
+ int qf_dir_curlist; ///< error list for qf_dir_stack
+ struct dir_stack_T *qf_dir_stack;
+ char_u *qf_directory;
+ struct dir_stack_T *qf_file_stack;
+ char_u *qf_currfile;
+ bool qf_multiline;
+ bool qf_multiignore;
+ bool qf_multiscan;
};
static qf_info_T ql_info; /* global quickfix list */
@@ -169,17 +176,268 @@ qf_init (
qf_title);
}
-/*
- * Read the errorfile "efile" into memory, line by line, building the error
- * list.
- * Alternative: when "efile" is null read errors from buffer "buf".
- * Always use 'errorformat' from "buf" if there is a local value.
- * Then "lnumfirst" and "lnumlast" specify the range of lines to use.
- * Set the title of the list to "qf_title".
- * Return -1 for error, number of errors for success.
- */
-static int
-qf_init_ext (
+// Maximum number of bytes allowed per line while reading an errorfile.
+static const size_t LINE_MAXLEN = 4096;
+
+static char_u *qf_grow_linebuf(char_u **growbuf, size_t *growbufsiz,
+ size_t newsz, size_t *allocsz)
+{
+ // If the line exceeds LINE_MAXLEN exclude the last
+ // byte since it's not a NL character.
+ *allocsz = newsz > LINE_MAXLEN ? LINE_MAXLEN - 1 : newsz;
+ if (*growbuf == NULL) {
+ *growbuf = xmalloc(*allocsz + 1);
+ *growbufsiz = *allocsz;
+ } else if (*allocsz > *growbufsiz) {
+ *growbuf = xrealloc(*growbuf, *allocsz + 1);
+ *growbufsiz = *allocsz;
+ }
+ return *growbuf;
+}
+
+static struct fmtpattern
+{
+ char_u convchar;
+ char *pattern;
+} fmt_pat[FMT_PATTERNS] =
+{
+ { 'f', ".\\+" }, // only used when at end
+ { 'n', "\\d\\+" },
+ { 'l', "\\d\\+" },
+ { 'c', "\\d\\+" },
+ { 't', "." },
+ { 'm', ".\\+" },
+ { 'r', ".*" },
+ { 'p', "[- .]*" }, // NOLINT(whitespace/tab)
+ { 'v', "\\d\\+" },
+ { 's', ".\\+" }
+};
+
+// Converts a 'errorformat' string to regular expression pattern
+static int efm_to_regpat(char_u *efm, int len, efm_T *fmt_ptr,
+ char_u *regpat, char_u *errmsg)
+{
+ // Build regexp pattern from current 'errorformat' option
+ char_u *ptr = regpat;
+ *ptr++ = '^';
+ int round = 0;
+ for (char_u *efmp = efm; efmp < efm + len; efmp++) {
+ if (*efmp == '%') {
+ efmp++;
+ int idx;
+ for (idx = 0; idx < FMT_PATTERNS; idx++) {
+ if (fmt_pat[idx].convchar == *efmp) {
+ break;
+ }
+ }
+ if (idx < FMT_PATTERNS) {
+ if (fmt_ptr->addr[idx]) {
+ snprintf((char *)errmsg, CMDBUFFSIZE + 1,
+ _("E372: Too many %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return -1;
+ }
+ if ((idx
+ && idx < 6
+ && vim_strchr((char_u *)"DXOPQ", fmt_ptr->prefix) != NULL)
+ || (idx == 6
+ && vim_strchr((char_u *)"OPQ", fmt_ptr->prefix) == NULL)) {
+ snprintf((char *)errmsg, CMDBUFFSIZE + 1,
+ _("E373: Unexpected %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return -1;
+ }
+ round++;
+ fmt_ptr->addr[idx] = (char_u)round;
+ *ptr++ = '\\';
+ *ptr++ = '(';
+#ifdef BACKSLASH_IN_FILENAME
+ if (*efmp == 'f') {
+ // Also match "c:" in the file name, even when
+ // checking for a colon next: "%f:".
+ // "\%(\a:\)\="
+ STRCPY(ptr, "\\%(\\a:\\)\\=");
+ ptr += 10;
+ }
+#endif
+ if (*efmp == 'f' && efmp[1] != NUL) {
+ if (efmp[1] != '\\' && efmp[1] != '%') {
+ // A file name may contain spaces, but this isn't
+ // in "\f". For "%f:%l:%m" there may be a ":" in
+ // the file name. Use ".\{-1,}x" instead (x is
+ // the next character), the requirement that :999:
+ // follows should work.
+ STRCPY(ptr, ".\\{-1,}");
+ ptr += 7;
+ } else {
+ // File name followed by '\\' or '%': include as
+ // many file name chars as possible.
+ STRCPY(ptr, "\\f\\+");
+ ptr += 4;
+ }
+ } else {
+ char_u *srcptr = (char_u *)fmt_pat[idx].pattern;
+ while ((*ptr = *srcptr++) != NUL) {
+ ptr++;
+ }
+ }
+ *ptr++ = '\\';
+ *ptr++ = ')';
+ } else if (*efmp == '*') {
+ if (*++efmp == '[' || *efmp == '\\') {
+ if ((*ptr++ = *efmp) == '[') { // %*[^a-z0-9] etc.
+ if (efmp[1] == '^') {
+ *ptr++ = *++efmp;
+ }
+ if (efmp < efm + len) {
+ efmp++;
+ *ptr++ = *efmp; // could be ']'
+ while (efmp < efm + len) {
+ efmp++;
+ if ((*ptr++ = *efmp) == ']') {
+ break;
+ }
+ }
+ if (efmp == efm + len) {
+ EMSG(_("E374: Missing ] in format string"));
+ return -1;
+ }
+ }
+ } else if (efmp < efm + len) { // %*\D, %*\s etc.
+ efmp++;
+ *ptr++ = *efmp;
+ }
+ *ptr++ = '\\';
+ *ptr++ = '+';
+ } else {
+ // TODO(vim): scanf()-like: %*ud, %*3c, %*f, ... ?
+ snprintf((char *)errmsg, CMDBUFFSIZE + 1,
+ _("E375: Unsupported %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return -1;
+ }
+ } else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL) {
+ *ptr++ = *efmp; // regexp magic characters
+ } else if (*efmp == '#') {
+ *ptr++ = '*';
+ } else if (*efmp == '>') {
+ fmt_ptr->conthere = true;
+ } else if (efmp == efm + 1) { // analyse prefix
+ if (vim_strchr((char_u *)"+-", *efmp) != NULL) {
+ fmt_ptr->flags = *efmp++;
+ }
+ if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL) {
+ fmt_ptr->prefix = *efmp;
+ } else {
+ snprintf((char *)errmsg, CMDBUFFSIZE + 1,
+ _("E376: Invalid %%%c in format string prefix"), *efmp);
+ EMSG(errmsg);
+ return -1;
+ }
+ } else {
+ snprintf((char *)errmsg, CMDBUFFSIZE + 1,
+ _("E377: Invalid %%%c in format string"), *efmp);
+ EMSG(errmsg);
+ return -1;
+ }
+ } else { // copy normal character
+ if (*efmp == '\\' && efmp + 1 < efm + len) {
+ efmp++;
+ } else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL) {
+ *ptr++ = '\\'; // escape regexp atoms
+ }
+ if (*efmp) {
+ *ptr++ = *efmp;
+ }
+ }
+ }
+ *ptr++ = '$';
+ *ptr = NUL;
+
+ return 0;
+}
+
+static void free_efm_list(efm_T **efm_first)
+{
+ for (efm_T *efm_ptr = *efm_first; efm_ptr != NULL; efm_ptr = *efm_first) {
+ *efm_first = efm_ptr->next;
+ vim_regfree(efm_ptr->prog);
+ xfree(efm_ptr);
+ }
+}
+
+// Parse 'errorformat' option
+static efm_T * parse_efm_option(char_u *efm)
+{
+ efm_T *fmt_ptr = NULL;
+ efm_T *fmt_first = NULL;
+ efm_T *fmt_last = NULL;
+ int len;
+
+ size_t errmsglen = CMDBUFFSIZE + 1;
+ char_u *errmsg = xmalloc(errmsglen);
+
+ // Get some space to modify the format string into.
+ size_t i = (FMT_PATTERNS * 3) + (STRLEN(efm) << 2);
+ for (int round = FMT_PATTERNS - 1; round >= 0; ) {
+ i += STRLEN(fmt_pat[round--].pattern);
+ }
+ i += 2; // "%f" can become two chars longer
+ char_u *fmtstr = xmalloc(i);
+
+ while (efm[0] != NUL) {
+ // Allocate a new eformat structure and put it at the end of the list
+ fmt_ptr = (efm_T *)xcalloc(1, sizeof(efm_T));
+ if (fmt_first == NULL) { // first one
+ fmt_first = fmt_ptr;
+ } else {
+ fmt_last->next = fmt_ptr;
+ }
+ fmt_last = fmt_ptr;
+
+ // Isolate one part in the 'errorformat' option
+ for (len = 0; efm[len] != NUL && efm[len] != ','; len++) {
+ if (efm[len] == '\\' && efm[len + 1] != NUL) {
+ len++;
+ }
+ }
+
+ if (efm_to_regpat(efm, len, fmt_ptr, fmtstr, errmsg) == -1) {
+ goto parse_efm_error;
+ }
+ if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL) {
+ goto parse_efm_error;
+ }
+ // Advance to next part
+ efm = skip_to_option_part(efm + len); // skip comma and spaces
+ }
+
+ if (fmt_first == NULL) { // nothing found
+ EMSG(_("E378: 'errorformat' contains no pattern"));
+ }
+
+ goto parse_efm_end;
+
+parse_efm_error:
+ free_efm_list(&fmt_first);
+
+parse_efm_end:
+ xfree(fmtstr);
+ xfree(errmsg);
+
+ return fmt_first;
+}
+
+// Read the errorfile "efile" into memory, line by line, building the error
+// list.
+// Alternative: when "efile" is NULL read errors from buffer "buf".
+// Alternative: when "tv" is not NULL get errors from the string or list.
+// Always use 'errorformat' from "buf" if there is a local value.
+// Then "lnumfirst" and "lnumlast" specify the range of lines to use.
+// Set the title of the list to "qf_title".
+// Return -1 for error, number of errors for success.
+static int
+qf_init_ext(
qf_info_T *qi,
char_u *efile,
buf_T *buf,
@@ -193,8 +451,14 @@ qf_init_ext (
{
char_u *namebuf;
char_u *errmsg;
+ size_t errmsglen;
char_u *pattern;
- char_u *fmtstr = NULL;
+ char_u *growbuf = NULL;
+ size_t growbuflen;
+ size_t growbufsiz = 0;
+ char_u *linebuf = NULL;
+ size_t linelen = 0;
+ bool discard;
int col = 0;
bool use_viscol = false;
char_u type = 0;
@@ -202,49 +466,25 @@ qf_init_ext (
long lnum = 0L;
int enr = 0;
FILE *fd = NULL;
- qfline_T *qfprev = NULL; /* init to make SASC shut up */
- char_u *efmp;
- efm_T *fmt_first = NULL;
- efm_T *fmt_last = NULL;
+ qfline_T *old_last = NULL;
+ static efm_T *fmt_first = NULL;
efm_T *fmt_ptr;
efm_T *fmt_start = NULL;
char_u *efm;
- char_u *ptr;
- char_u *srcptr;
- int len;
+ static char_u *last_efm = NULL;
+ size_t len;
int i;
- int round;
int idx = 0;
- bool multiline = false;
- bool multiignore = false;
- bool multiscan = false;
int retval = -1; // default: return error flag
- char_u *directory = NULL;
- char_u *currfile = NULL;
char_u *tail = NULL;
+ char_u *p_buf = NULL;
char_u *p_str = NULL;
listitem_T *p_li = NULL;
- struct dir_stack_T *file_stack = NULL;
regmatch_T regmatch;
- static struct fmtpattern {
- char_u convchar;
- char *pattern;
- } fmt_pat[FMT_PATTERNS] =
- {
- {'f', ".\\+"}, /* only used when at end */
- {'n', "\\d\\+"},
- {'l', "\\d\\+"},
- {'c', "\\d\\+"},
- {'t', "."},
- {'m', ".\\+"},
- {'r', ".*"},
- {'p', "[- .]*"},
- {'v', "\\d\\+"},
- {'s', ".\\+"}
- };
namebuf = xmalloc(CMDBUFFSIZE + 1);
- errmsg = xmalloc(CMDBUFFSIZE + 1);
+ errmsglen = CMDBUFFSIZE + 1;
+ errmsg = xmalloc(errmsglen);
pattern = xmalloc(CMDBUFFSIZE + 1);
if (efile != NULL && (fd = mch_fopen((char *)efile, "r")) == NULL) {
@@ -252,14 +492,13 @@ qf_init_ext (
goto qf_init_end;
}
- if (newlist || qi->qf_curlist == qi->qf_listcount)
- /* make place for a new list */
+ if (newlist || qi->qf_curlist == qi->qf_listcount) {
+ // make place for a new list
qf_new_list(qi, qf_title);
- else if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
- /* Adding to existing list, find last entry. */
- for (qfprev = qi->qf_lists[qi->qf_curlist].qf_start;
- qfprev->qf_next != qfprev; qfprev = qfprev->qf_next)
- ;
+ } else if (qi->qf_lists[qi->qf_curlist].qf_count > 0) {
+ // Adding to existing list, use last entry.
+ old_last = qi->qf_lists[qi->qf_curlist].qf_last;
+ }
/*
* Each part of the format string is copied and modified from errorformat to
@@ -270,172 +509,35 @@ qf_init_ext (
efm = buf->b_p_efm;
else
efm = errorformat;
- /*
- * Get some space to modify the format string into.
- */
- size_t fmtstr_size = 3 * FMT_PATTERNS + 4 * STRLEN(efm);
- for (round = FMT_PATTERNS; round > 0; ) {
- fmtstr_size += STRLEN(fmt_pat[--round].pattern);
- }
-#ifdef COLON_IN_FILENAME
- fmtstr_size += 12; // "%f" can become twelve chars longer
-#else
- fmtstr_size += 2; // "%f" can become two chars longer
-#endif
- fmtstr = xmalloc(fmtstr_size);
- while (efm[0] != NUL) {
- /*
- * Allocate a new eformat structure and put it at the end of the list
- */
- fmt_ptr = xcalloc(1, sizeof(efm_T));
- if (fmt_first == NULL) /* first one */
- fmt_first = fmt_ptr;
- else
- fmt_last->next = fmt_ptr;
- fmt_last = fmt_ptr;
-
- /*
- * Isolate one part in the 'errorformat' option
- */
- for (len = 0; efm[len] != NUL && efm[len] != ','; ++len)
- if (efm[len] == '\\' && efm[len + 1] != NUL)
- ++len;
+ // If we are not adding or adding to another list: clear the state.
+ if (newlist || qi->qf_curlist != qi->qf_dir_curlist) {
+ qi->qf_dir_curlist = qi->qf_curlist;
+ qf_clean_dir_stack(&qi->qf_dir_stack);
+ qi->qf_directory = NULL;
+ qf_clean_dir_stack(&qi->qf_file_stack);
+ qi->qf_currfile = NULL;
+ qi->qf_multiline = false;
+ qi->qf_multiignore = false;
+ qi->qf_multiscan = false;
+ }
- /*
- * Build regexp pattern from current 'errorformat' option
- */
- ptr = fmtstr;
- *ptr++ = '^';
- round = 0;
- for (efmp = efm; efmp < efm + len; ++efmp) {
- if (*efmp == '%') {
- ++efmp;
- for (idx = 0; idx < FMT_PATTERNS; ++idx)
- if (fmt_pat[idx].convchar == *efmp)
- break;
- if (idx < FMT_PATTERNS) {
- if (fmt_ptr->addr[idx]) {
- sprintf((char *)errmsg,
- _("E372: Too many %%%c in format string"), *efmp);
- EMSG(errmsg);
- goto error2;
- }
- if ((idx
- && idx < 6
- && vim_strchr((char_u *)"DXOPQ",
- fmt_ptr->prefix) != NULL)
- || (idx == 6
- && vim_strchr((char_u *)"OPQ",
- fmt_ptr->prefix) == NULL)) {
- sprintf((char *)errmsg,
- _("E373: Unexpected %%%c in format string"), *efmp);
- EMSG(errmsg);
- goto error2;
- }
- fmt_ptr->addr[idx] = (char_u)++ round;
- *ptr++ = '\\';
- *ptr++ = '(';
-#ifdef BACKSLASH_IN_FILENAME
- if (*efmp == 'f') {
- /* Also match "c:" in the file name, even when
- * checking for a colon next: "%f:".
- * "\%(\a:\)\=" */
- STRCPY(ptr, "\\%(\\a:\\)\\=");
- ptr += 10;
- }
-#endif
- if (*efmp == 'f' && efmp[1] != NUL) {
- if (efmp[1] != '\\' && efmp[1] != '%') {
- /* A file name may contain spaces, but this isn't
- * in "\f". For "%f:%l:%m" there may be a ":" in
- * the file name. Use ".\{-1,}x" instead (x is
- * the next character), the requirement that :999:
- * follows should work. */
- STRCPY(ptr, ".\\{-1,}");
- ptr += 7;
- } else {
- /* File name followed by '\\' or '%': include as
- * many file name chars as possible. */
- STRCPY(ptr, "\\f\\+");
- ptr += 4;
- }
- } else {
- srcptr = (char_u *)fmt_pat[idx].pattern;
- while ((*ptr = *srcptr++) != NUL)
- ++ptr;
- }
- *ptr++ = '\\';
- *ptr++ = ')';
- } else if (*efmp == '*') {
- if (*++efmp == '[' || *efmp == '\\') {
- if ((*ptr++ = *efmp) == '[') { /* %*[^a-z0-9] etc. */
- if (efmp[1] == '^')
- *ptr++ = *++efmp;
- if (efmp < efm + len) {
- *ptr++ = *++efmp; /* could be ']' */
- while (efmp < efm + len
- && (*ptr++ = *++efmp) != ']')
- /* skip */;
- if (efmp == efm + len) {
- EMSG(_("E374: Missing ] in format string"));
- goto error2;
- }
- }
- } else if (efmp < efm + len) /* %*\D, %*\s etc. */
- *ptr++ = *++efmp;
- *ptr++ = '\\';
- *ptr++ = '+';
- } else {
- /* TODO: scanf()-like: %*ud, %*3c, %*f, ... ? */
- sprintf((char *)errmsg,
- _("E375: Unsupported %%%c in format string"), *efmp);
- EMSG(errmsg);
- goto error2;
- }
- } else if (vim_strchr((char_u *)"%\\.^$~[", *efmp) != NULL)
- *ptr++ = *efmp; /* regexp magic characters */
- else if (*efmp == '#')
- *ptr++ = '*';
- else if (*efmp == '>')
- fmt_ptr->conthere = TRUE;
- else if (efmp == efm + 1) { /* analyse prefix */
- if (vim_strchr((char_u *)"+-", *efmp) != NULL)
- fmt_ptr->flags = *efmp++;
- if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
- fmt_ptr->prefix = *efmp;
- else {
- sprintf((char *)errmsg,
- _("E376: Invalid %%%c in format string prefix"), *efmp);
- EMSG(errmsg);
- goto error2;
- }
- } else {
- sprintf((char *)errmsg,
- _("E377: Invalid %%%c in format string"), *efmp);
- EMSG(errmsg);
- goto error2;
- }
- } else { /* copy normal character */
- if (*efmp == '\\' && efmp + 1 < efm + len)
- ++efmp;
- else if (vim_strchr((char_u *)".*^$~[", *efmp) != NULL)
- *ptr++ = '\\'; /* escape regexp atoms */
- if (*efmp)
- *ptr++ = *efmp;
- }
+ // If the errorformat didn't change between calls, then reuse the previously
+ // parsed values.
+ if (last_efm == NULL || (STRCMP(last_efm, efm) != 0)) {
+ // free the previously parsed data
+ xfree(last_efm);
+ last_efm = NULL;
+ free_efm_list(&fmt_first);
+
+ // parse the current 'efm'
+ fmt_first = parse_efm_option(efm);
+ if (fmt_first != NULL) {
+ last_efm = vim_strsave(efm);
}
- *ptr++ = '$';
- *ptr = NUL;
- if ((fmt_ptr->prog = vim_regcomp(fmtstr, RE_MAGIC + RE_STRING)) == NULL)
- goto error2;
- /*
- * Advance to next part
- */
- efm = skip_to_option_part(efm + len); /* skip comma and spaces */
}
- if (fmt_first == NULL) { /* nothing found */
- EMSG(_("E378: 'errorformat' contains no pattern"));
+
+ if (fmt_first == NULL) { // nothing found
goto error2;
}
@@ -467,34 +569,49 @@ qf_init_ext (
/* Get the next line from the supplied string */
char_u *p;
- if (!*p_str) /* Reached the end of the string */
+ if (*p_str == NUL) { // Reached the end of the string
break;
+ }
p = vim_strchr(p_str, '\n');
- if (p)
- len = (int)(p - p_str + 1);
- else
- len = (int)STRLEN(p_str);
+ if (p != NULL) {
+ len = (size_t)(p - p_str) + 1;
+ } else {
+ len = STRLEN(p_str);
+ }
- if (len > CMDBUFFSIZE - 2)
- STRLCPY(IObuff, p_str, CMDBUFFSIZE - 1);
- else
- STRLCPY(IObuff, p_str, len + 1);
+ if (len > IOSIZE - 2) {
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
+ } else {
+ linebuf = IObuff;
+ linelen = len;
+ }
+ STRLCPY(linebuf, p_str, linelen + 1);
+ // Increment using len in order to discard the rest of the line if it
+ // exceeds LINE_MAXLEN.
p_str += len;
} else if (tv->v_type == VAR_LIST) {
- /* Get the next line from the supplied list */
- while (p_li && p_li->li_tv.v_type != VAR_STRING)
- p_li = p_li->li_next; /* Skip non-string items */
+ // Get the next line from the supplied list
+ while (p_li != NULL
+ && (p_li->li_tv.v_type != VAR_STRING
+ || p_li->li_tv.vval.v_string == NULL)) {
+ p_li = p_li->li_next; // Skip non-string items
+ }
- if (!p_li) /* End of the list */
+ if (p_li == NULL) { // End of the list
break;
+ }
- len = (int)STRLEN(p_li->li_tv.vval.v_string);
- if (len > CMDBUFFSIZE - 2)
- len = CMDBUFFSIZE - 2;
+ len = STRLEN(p_li->li_tv.vval.v_string);
+ if (len > IOSIZE - 2) {
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
+ } else {
+ linebuf = IObuff;
+ linelen = len;
+ }
- STRLCPY(IObuff, p_li->li_tv.vval.v_string, len + 1);
+ STRLCPY(linebuf, p_li->li_tv.vval.v_string, linelen + 1);
p_li = p_li->li_next; /* next item */
}
@@ -502,21 +619,94 @@ qf_init_ext (
/* Get the next line from the supplied buffer */
if (buflnum > lnumlast)
break;
- STRLCPY(IObuff, ml_get_buf(buf, buflnum++, FALSE),
- CMDBUFFSIZE - 1);
+ p_buf = ml_get_buf(buf, buflnum++, false);
+ len = STRLEN(p_buf);
+ if (len > IOSIZE - 2) {
+ linebuf = qf_grow_linebuf(&growbuf, &growbufsiz, len, &linelen);
+ } else {
+ linebuf = IObuff;
+ linelen = len;
+ }
+ STRLCPY(linebuf, p_buf, linelen + 1);
+ }
+ } else {
+ if (fgets((char *)IObuff, IOSIZE, fd) == NULL) {
+ break;
}
- } else if (fgets((char *)IObuff, CMDBUFFSIZE - 2, fd) == NULL)
- break;
- IObuff[CMDBUFFSIZE - 2] = NUL; /* for very long lines */
- remove_bom(IObuff);
+ discard = false;
+ linelen = STRLEN(IObuff);
+ if (linelen == IOSIZE - 1 && !(IObuff[linelen - 1] == '\n'
+#ifdef USE_CRNL
+ || IObuff[linelen - 1] == '\r'
+#endif
+ )) { // NOLINT(whitespace/parens)
+ // The current line exceeds IObuff, continue reading using growbuf
+ // until EOL or LINE_MAXLEN bytes is read.
+ if (growbuf == NULL) {
+ growbufsiz = 2 * (IOSIZE - 1);
+ growbuf = xmalloc(growbufsiz);
+ }
+
+ // Copy the read part of the line, excluding null-terminator
+ memcpy(growbuf, IObuff, IOSIZE - 1);
+ growbuflen = linelen;
+
+ for (;;) {
+ if (fgets((char *)growbuf + growbuflen,
+ (int)(growbufsiz - growbuflen), fd) == NULL) {
+ break;
+ }
+ linelen = STRLEN(growbuf + growbuflen);
+ growbuflen += linelen;
+ if (growbuf[growbuflen - 1] == '\n'
+#ifdef USE_CRNL
+ || growbuf[growbuflen - 1] == '\r'
+#endif
+ ) {
+ break;
+ }
+ if (growbufsiz == LINE_MAXLEN) {
+ discard = true;
+ break;
+ }
+
+ growbufsiz = (2 * growbufsiz < LINE_MAXLEN)
+ ? 2 * growbufsiz : LINE_MAXLEN;
+ growbuf = xrealloc(growbuf, 2 * growbufsiz);
+ }
- if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
- *efmp = NUL;
+ while (discard) {
+ // The current line is longer than LINE_MAXLEN, continue reading but
+ // discard everything until EOL or EOF is reached.
+ if (fgets((char *)IObuff, IOSIZE, fd) == NULL
+ || STRLEN(IObuff) < IOSIZE - 1
+ || IObuff[IOSIZE - 1] == '\n'
#ifdef USE_CRNL
- if ((efmp = vim_strrchr(IObuff, '\r')) != NULL)
- *efmp = NUL;
+ || IObuff[IOSIZE - 1] == '\r'
#endif
+ ) {
+ break;
+ }
+ }
+
+ linebuf = growbuf;
+ linelen = growbuflen;
+ } else {
+ linebuf = IObuff;
+ }
+ }
+
+ if (linelen > 0 && linebuf[linelen - 1] == '\n') {
+ linebuf[linelen - 1] = NUL;
+ }
+#ifdef USE_CRNL
+ if (linelen > 0 && linebuf[linelen - 1] == '\r') {
+ linebuf[linelen - 1] = NUL;
+ }
+#endif
+
+ remove_bom(linebuf);
/* If there was no %> item start at the first pattern */
if (fmt_start == NULL)
@@ -532,12 +722,14 @@ qf_init_ext (
restofline:
for (; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next) {
idx = fmt_ptr->prefix;
- if (multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL)
+ if (qi->qf_multiscan && vim_strchr((char_u *)"OPQ", idx) == NULL) {
continue;
+ }
namebuf[0] = NUL;
pattern[0] = NUL;
- if (!multiscan)
+ if (!qi->qf_multiscan) {
errmsg[0] = NUL;
+ }
lnum = 0;
col = 0;
use_viscol = false;
@@ -546,10 +738,10 @@ restofline:
tail = NULL;
regmatch.regprog = fmt_ptr->prog;
- int r = vim_regexec(&regmatch, IObuff, (colnr_T)0);
+ int r = vim_regexec(&regmatch, linebuf, (colnr_T)0);
fmt_ptr->prog = regmatch.regprog;
if (r) {
- if ((idx == 'C' || idx == 'Z') && !multiline) {
+ if ((idx == 'C' || idx == 'Z') && !qi->qf_multiline) {
continue;
}
if (vim_strchr((char_u *)"EWI", idx) != NULL) {
@@ -571,8 +763,9 @@ restofline:
*regmatch.endp[i] = c;
if (vim_strchr((char_u *)"OPQ", idx) != NULL
- && !os_file_exists(namebuf))
+ && !os_path_exists(namebuf)) {
continue;
+ }
}
if ((i = (int)fmt_ptr->addr[1]) > 0) { /* %n */
if (regmatch.startp[i] == NULL)
@@ -594,12 +787,23 @@ restofline:
continue;
type = *regmatch.startp[i];
}
- if (fmt_ptr->flags == '+' && !multiscan) /* %+ */
- STRCPY(errmsg, IObuff);
- else if ((i = (int)fmt_ptr->addr[5]) > 0) { /* %m */
- if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ if (fmt_ptr->flags == '+' && !qi->qf_multiscan) { // %+
+ if (linelen > errmsglen) {
+ // linelen + null terminator
+ errmsg = xrealloc(errmsg, linelen + 1);
+ errmsglen = linelen + 1;
+ }
+ STRLCPY(errmsg, linebuf, linelen + 1);
+ } else if ((i = (int)fmt_ptr->addr[5]) > 0) { // %m
+ if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL) {
continue;
- len = (int)(regmatch.endp[i] - regmatch.startp[i]);
+ }
+ len = (size_t)(regmatch.endp[i] - regmatch.startp[i]);
+ if (len > errmsglen) {
+ // len + null terminator
+ errmsg = xrealloc(errmsg, len + 1);
+ errmsglen = len + 1;
+ }
STRLCPY(errmsg, regmatch.startp[i], len + 1);
}
if ((i = (int)fmt_ptr->addr[6]) > 0) { /* %r */
@@ -633,9 +837,10 @@ restofline:
if ((i = (int)fmt_ptr->addr[9]) > 0) { /* %s */
if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
continue;
- len = (int)(regmatch.endp[i] - regmatch.startp[i]);
- if (len > CMDBUFFSIZE - 5)
+ len = (size_t)(regmatch.endp[i] - regmatch.startp[i]);
+ if (len > CMDBUFFSIZE - 5) {
len = CMDBUFFSIZE - 5;
+ }
STRCPY(pattern, "^\\V");
STRNCAT(pattern, regmatch.startp[i], len);
pattern[len + 3] = '\\';
@@ -645,7 +850,7 @@ restofline:
break;
}
}
- multiscan = false;
+ qi->qf_multiscan = false;
if (fmt_ptr == NULL || idx == 'D' || idx == 'X') {
if (fmt_ptr != NULL) {
@@ -654,17 +859,25 @@ restofline:
EMSG(_("E379: Missing or empty directory name"));
goto error2;
}
- if ((directory = qf_push_dir(namebuf, &dir_stack)) == NULL)
+ qi->qf_directory = qf_push_dir(namebuf, &qi->qf_dir_stack, false);
+ if (qi->qf_directory == NULL) {
goto error2;
- } else if (idx == 'X') /* leave directory */
- directory = qf_pop_dir(&dir_stack);
+ }
+ } else if (idx == 'X') { // leave directory
+ qi->qf_directory = qf_pop_dir(&qi->qf_dir_stack);
+ }
}
namebuf[0] = NUL; // no match found, remove file name
lnum = 0; // don't jump to this line
valid = false;
- STRCPY(errmsg, IObuff); // copy whole line to error message
+ if (linelen > errmsglen) {
+ // linelen + null terminator
+ errmsg = xrealloc(errmsg, linelen + 1);
+ }
+ // copy whole line to error message
+ STRLCPY(errmsg, linebuf, linelen + 1);
if (fmt_ptr == NULL) {
- multiline = multiignore = false;
+ qi->qf_multiline = qi->qf_multiignore = false;
}
} else if (fmt_ptr != NULL) {
/* honor %> item */
@@ -672,13 +885,15 @@ restofline:
fmt_start = fmt_ptr;
if (vim_strchr((char_u *)"AEWI", idx) != NULL) {
- multiline = true; // start of a multi-line message
- multiignore = false; // reset continuation
+ qi->qf_multiline = true; // start of a multi-line message
+ qi->qf_multiignore = false; // reset continuation
} else if (vim_strchr((char_u *)"CZ", idx)
- != NULL) { /* continuation of multi-line msg */
- if (qfprev == NULL)
+ != NULL) { // continuation of multi-line msg
+ qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
+ if (qfprev == NULL) {
goto error2;
- if (*errmsg && !multiignore) {
+ }
+ if (*errmsg && !qi->qf_multiignore) {
size_t len = STRLEN(qfprev->qf_text);
qfprev->qf_text = xrealloc(qfprev->qf_text, len + STRLEN(errmsg) + 2);
qfprev->qf_text[len] = '\n';
@@ -693,55 +908,60 @@ restofline:
if (!qfprev->qf_col)
qfprev->qf_col = col;
qfprev->qf_viscol = use_viscol;
- if (!qfprev->qf_fnum)
- qfprev->qf_fnum = qf_get_fnum(directory,
+ if (!qfprev->qf_fnum) {
+ qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
*namebuf
- || directory ? namebuf : currfile
- && valid ? currfile : 0);
+ || qi->qf_directory
+ ? namebuf : qi->qf_currfile
+ && valid ? qi->qf_currfile : 0);
+ }
if (idx == 'Z') {
- multiline = multiignore = false;
+ qi->qf_multiline = qi->qf_multiignore = false;
}
line_breakcheck();
continue;
} else if (vim_strchr((char_u *)"OPQ", idx) != NULL) {
// global file names
valid = false;
- if (*namebuf == NUL || os_file_exists(namebuf)) {
- if (*namebuf && idx == 'P')
- currfile = qf_push_dir(namebuf, &file_stack);
- else if (idx == 'Q')
- currfile = qf_pop_dir(&file_stack);
+ if (*namebuf == NUL || os_path_exists(namebuf)) {
+ if (*namebuf && idx == 'P') {
+ qi->qf_currfile = qf_push_dir(namebuf, &qi->qf_file_stack, true);
+ } else if (idx == 'Q') {
+ qi->qf_currfile = qf_pop_dir(&qi->qf_file_stack);
+ }
*namebuf = NUL;
if (tail && *tail) {
STRMOVE(IObuff, skipwhite(tail));
- multiscan = true;
+ qi->qf_multiscan = true;
goto restofline;
}
}
}
if (fmt_ptr->flags == '-') { // generally exclude this line
- if (multiline) {
- multiignore = true; // also exclude continuation lines
+ if (qi->qf_multiline) {
+ // also exclude continuation lines
+ qi->qf_multiignore = true;
}
continue;
}
}
- if (qf_add_entry(qi, &qfprev,
- directory,
- (*namebuf || directory)
- ? namebuf
- : ((currfile && valid) ? currfile : (char_u *)NULL),
- 0,
- errmsg,
- lnum,
- col,
- use_viscol,
- pattern,
- enr,
- type,
- valid) == FAIL)
+ if (qf_add_entry(qi,
+ qi->qf_directory,
+ (*namebuf || qi->qf_directory)
+ ? namebuf : ((qi->qf_currfile && valid)
+ ? qi->qf_currfile : (char_u *)NULL),
+ 0,
+ errmsg,
+ lnum,
+ col,
+ use_viscol,
+ pattern,
+ enr,
+ type,
+ valid) == FAIL) {
goto error2;
+ }
line_breakcheck();
}
if (fd == NULL || !ferror(fd)) {
@@ -759,31 +979,25 @@ restofline:
}
/* return number of matches */
retval = qi->qf_lists[qi->qf_curlist].qf_count;
- goto qf_init_ok;
+ goto qf_init_end;
}
EMSG(_(e_readerrf));
error2:
qf_free(qi, qi->qf_curlist);
qi->qf_listcount--;
- if (qi->qf_curlist > 0)
- --qi->qf_curlist;
-qf_init_ok:
- if (fd != NULL)
- fclose(fd);
- for (fmt_ptr = fmt_first; fmt_ptr != NULL; fmt_ptr = fmt_first) {
- fmt_first = fmt_ptr->next;
- vim_regfree(fmt_ptr->prog);
- xfree(fmt_ptr);
+ if (qi->qf_curlist > 0) {
+ qi->qf_curlist--;
}
- qf_clean_dir_stack(&dir_stack);
- qf_clean_dir_stack(&file_stack);
qf_init_end:
+ if (fd != NULL) {
+ fclose(fd);
+ }
xfree(namebuf);
xfree(errmsg);
xfree(pattern);
- xfree(fmtstr);
+ xfree(growbuf);
- qf_update_buffer(qi);
+ qf_update_buffer(qi, old_last);
return retval;
}
@@ -866,7 +1080,6 @@ void qf_free_all(win_T *wp)
/// Add an entry to the end of the list of errors.
///
/// @param qi quickfix list
-/// @param prevp nonnull pointer (to previously added entry or NULL)
/// @param dir optional directory name
/// @param fname file name or NULL
/// @param bufnum buffer number or zero
@@ -880,17 +1093,24 @@ void qf_free_all(win_T *wp)
/// @param valid valid entry
///
/// @returns OK or FAIL.
-static int qf_add_entry(qf_info_T *qi, qfline_T **prevp, char_u *dir,
- char_u *fname, int bufnum, char_u *mesg, long lnum,
- int col, char_u vis_col, char_u *pattern, int nr,
- char_u type, char_u valid)
+static int qf_add_entry(qf_info_T *qi, char_u *dir, char_u *fname, int bufnum,
+ char_u *mesg, long lnum, int col, char_u vis_col,
+ char_u *pattern, int nr, char_u type, char_u valid)
{
qfline_T *qfp = xmalloc(sizeof(qfline_T));
+ qfline_T **lastp; // pointer to qf_last or NULL
+
+ if (bufnum != 0) {
+ buf_T *buf = buflist_findnr(bufnum);
- if (bufnum != 0)
qfp->qf_fnum = bufnum;
- else
- qfp->qf_fnum = qf_get_fnum(dir, fname);
+ if (buf != NULL) {
+ buf->b_has_qf_entry |=
+ (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ }
+ } else {
+ qfp->qf_fnum = qf_get_fnum(qi, dir, fname);
+ }
qfp->qf_text = vim_strsave(mesg);
qfp->qf_lnum = lnum;
qfp->qf_col = col;
@@ -906,19 +1126,22 @@ static int qf_add_entry(qf_info_T *qi, qfline_T **prevp, char_u *dir,
qfp->qf_type = type;
qfp->qf_valid = valid;
+ lastp = &qi->qf_lists[qi->qf_curlist].qf_last;
if (qi->qf_lists[qi->qf_curlist].qf_count == 0) {
/* first element in the list */
qi->qf_lists[qi->qf_curlist].qf_start = qfp;
- qfp->qf_prev = qfp; /* first element points to itself */
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qfp;
+ qi->qf_lists[qi->qf_curlist].qf_index = 0;
+ qfp->qf_prev = NULL;
} else {
- assert(*prevp);
- qfp->qf_prev = *prevp;
- (*prevp)->qf_next = qfp;
- }
- qfp->qf_next = qfp; /* last element points to itself */
- qfp->qf_cleared = FALSE;
- *prevp = qfp;
- ++qi->qf_lists[qi->qf_curlist].qf_count;
+ assert(*lastp);
+ qfp->qf_prev = *lastp;
+ (*lastp)->qf_next = qfp;
+ }
+ qfp->qf_next = NULL;
+ qfp->qf_cleared = false;
+ *lastp = qfp;
+ qi->qf_lists[qi->qf_curlist].qf_count++;
if (qi->qf_lists[qi->qf_curlist].qf_index == 0 && qfp->qf_valid) {
/* first valid entry */
qi->qf_lists[qi->qf_curlist].qf_index =
@@ -1003,6 +1226,7 @@ void copy_loclist(win_T *from, win_T *to)
to_qfl->qf_count = 0;
to_qfl->qf_index = 0;
to_qfl->qf_start = NULL;
+ to_qfl->qf_last = NULL;
to_qfl->qf_ptr = NULL;
if (from_qfl->qf_title != NULL)
to_qfl->qf_title = vim_strsave(from_qfl->qf_title);
@@ -1011,23 +1235,24 @@ void copy_loclist(win_T *from, win_T *to)
if (from_qfl->qf_count) {
qfline_T *from_qfp;
- qfline_T *prevp = NULL;
-
- /* copy all the location entries in this list */
- for (i = 0, from_qfp = from_qfl->qf_start; i < from_qfl->qf_count;
- ++i, from_qfp = from_qfp->qf_next) {
- if (qf_add_entry(to->w_llist, &prevp,
- NULL,
- NULL,
- 0,
- from_qfp->qf_text,
- from_qfp->qf_lnum,
- from_qfp->qf_col,
- from_qfp->qf_viscol,
- from_qfp->qf_pattern,
- from_qfp->qf_nr,
- 0,
- from_qfp->qf_valid) == FAIL) {
+ qfline_T *prevp;
+
+ // copy all the location entries in this list
+ for (i = 0, from_qfp = from_qfl->qf_start;
+ i < from_qfl->qf_count && from_qfp != NULL;
+ i++, from_qfp = from_qfp->qf_next) {
+ if (qf_add_entry(to->w_llist,
+ NULL,
+ NULL,
+ 0,
+ from_qfp->qf_text,
+ from_qfp->qf_lnum,
+ from_qfp->qf_col,
+ from_qfp->qf_viscol,
+ from_qfp->qf_pattern,
+ from_qfp->qf_nr,
+ 0,
+ from_qfp->qf_valid) == FAIL) {
qf_free_all(to);
return;
}
@@ -1036,10 +1261,12 @@ void copy_loclist(win_T *from, win_T *to)
* directory and file names are not supplied. So the qf_fnum
* field is copied here.
*/
- prevp->qf_fnum = from_qfp->qf_fnum; /* file number */
- prevp->qf_type = from_qfp->qf_type; /* error type */
- if (from_qfl->qf_ptr == from_qfp)
- to_qfl->qf_ptr = prevp; /* current location */
+ prevp = to->w_llist->qf_lists[to->w_llist->qf_curlist].qf_last;
+ prevp->qf_fnum = from_qfp->qf_fnum; // file number
+ prevp->qf_type = from_qfp->qf_type; // error type
+ if (from_qfl->qf_ptr == from_qfp) {
+ to_qfl->qf_ptr = prevp; // current location
+ }
}
}
@@ -1056,52 +1283,55 @@ void copy_loclist(win_T *from, win_T *to)
to->w_llist->qf_curlist = qi->qf_curlist; /* current list */
}
-/*
- * get buffer number for file "dir.name"
- */
-static int qf_get_fnum(char_u *directory, char_u *fname)
+// Get buffer number for file "directory.fname".
+// Also sets the b_has_qf_entry flag.
+static int qf_get_fnum(qf_info_T *qi, char_u *directory, char_u *fname)
{
- if (fname == NULL || *fname == NUL) /* no file name */
+ char_u *ptr;
+ buf_T *buf;
+ if (fname == NULL || *fname == NUL) { // no file name
return 0;
- {
- char_u *ptr;
- int fnum;
+ }
#ifdef BACKSLASH_IN_FILENAME
- if (directory != NULL)
- slash_adjust(directory);
- slash_adjust(fname);
+ if (directory != NULL) {
+ slash_adjust(directory);
+ }
+ slash_adjust(fname);
#endif
- if (directory != NULL && !vim_isAbsName(fname)) {
- ptr = (char_u *)concat_fnames((char *)directory, (char *)fname, TRUE);
- /*
- * Here we check if the file really exists.
- * This should normally be true, but if make works without
- * "leaving directory"-messages we might have missed a
- * directory change.
- */
- if (!os_file_exists(ptr)) {
- xfree(ptr);
- directory = qf_guess_filepath(fname);
- if (directory)
- ptr = (char_u *)concat_fnames((char *)directory, (char *)fname, TRUE);
- else
- ptr = vim_strsave(fname);
- }
- /* Use concatenated directory name and file name */
- fnum = buflist_add(ptr, 0);
+ if (directory != NULL && !vim_isAbsName(fname)) {
+ ptr = (char_u *)concat_fnames((char *)directory, (char *)fname, true);
+ // Here we check if the file really exists.
+ // This should normally be true, but if make works without
+ // "leaving directory"-messages we might have missed a
+ // directory change.
+ if (!os_path_exists(ptr)) {
xfree(ptr);
- return fnum;
+ directory = qf_guess_filepath(qi, fname);
+ if (directory) {
+ ptr = (char_u *)concat_fnames((char *)directory, (char *)fname, true);
+ } else {
+ ptr = vim_strsave(fname);
+ }
}
- return buflist_add(fname, 0);
+ // Use concatenated directory name and file name
+ buf = buflist_new(ptr, NULL, (linenr_T)0, 0);
+ xfree(ptr);
+ } else {
+ buf = buflist_new(fname, NULL, (linenr_T)0, 0);
}
+ if (buf == NULL) {
+ return 0;
+ }
+ buf->b_has_qf_entry =
+ (qi == &ql_info) ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ return buf->b_fnum;
}
-/*
- * push dirbuf onto the directory stack and return pointer to actual dir or
- * NULL on error
- */
-static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr)
+// Push dirbuf onto the directory stack and return pointer to actual dir or
+// NULL on error.
+static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr,
+ bool is_file_stack)
{
struct dir_stack_T *ds_ptr;
@@ -1114,7 +1344,7 @@ static char_u *qf_push_dir(char_u *dirbuf, struct dir_stack_T **stackptr)
/* store directory on the stack */
if (vim_isAbsName(dirbuf)
|| (*stackptr)->next == NULL
- || (*stackptr && dir_stack != *stackptr))
+ || (*stackptr && is_file_stack))
(*stackptr)->dirname = vim_strsave(dirbuf);
else {
/* Okay we don't have an absolute path.
@@ -1216,40 +1446,67 @@ static void qf_clean_dir_stack(struct dir_stack_T **stackptr)
* Then qf_push_dir thinks we are in ./aa/bb, but we are in ./bb.
* qf_guess_filepath will return NULL.
*/
-static char_u *qf_guess_filepath(char_u *filename)
+static char_u *qf_guess_filepath(qf_info_T *qi, char_u *filename)
{
struct dir_stack_T *ds_ptr;
struct dir_stack_T *ds_tmp;
char_u *fullname;
- /* no dirs on the stack - there's nothing we can do */
- if (dir_stack == NULL)
+ // no dirs on the stack - there's nothing we can do
+ if (qi->qf_dir_stack == NULL) {
return NULL;
+ }
- ds_ptr = dir_stack->next;
+ ds_ptr = qi->qf_dir_stack->next;
fullname = NULL;
while (ds_ptr) {
xfree(fullname);
fullname = (char_u *)concat_fnames((char *)ds_ptr->dirname, (char *)filename, TRUE);
- if (os_file_exists(fullname))
+ if (os_path_exists(fullname)) {
break;
+ }
ds_ptr = ds_ptr->next;
}
xfree(fullname);
- /* clean up all dirs we already left */
- while (dir_stack->next != ds_ptr) {
- ds_tmp = dir_stack->next;
- dir_stack->next = dir_stack->next->next;
+ // clean up all dirs we already left
+ while (qi->qf_dir_stack->next != ds_ptr) {
+ ds_tmp = qi->qf_dir_stack->next;
+ qi->qf_dir_stack->next = qi->qf_dir_stack->next->next;
xfree(ds_tmp->dirname);
xfree(ds_tmp);
}
- return ds_ptr==NULL ? NULL : ds_ptr->dirname;
+ return ds_ptr == NULL ? NULL : ds_ptr->dirname;
+}
+
+/// When loading a file from the quickfix, the auto commands may modify it.
+/// This may invalidate the current quickfix entry. This function checks
+/// whether a entry is still present in the quickfix.
+/// Similar to location list.
+static bool is_qf_entry_present(qf_info_T *qi, qfline_T *qf_ptr)
+{
+ qf_list_T *qfl;
+ qfline_T *qfp;
+ int i;
+
+ qfl = &qi->qf_lists[qi->qf_curlist];
+ // Search for the entry in the current list
+ for (i = 0, qfp = qfl->qf_start; i < qfl->qf_count; i++, qfp = qfp->qf_next) {
+ if (qfp == NULL || qfp == qf_ptr) {
+ break;
+ }
+ }
+
+ if (i == qfl->qf_count) { // Entry is not found
+ return false;
+ }
+
+ return true;
}
/*
@@ -1576,14 +1833,38 @@ win_found:
* set b_p_ro flag). */
if (!can_abandon(curbuf, forceit)) {
EMSG(_(e_nowrtmsg));
- ok = FALSE;
- } else
+ ok = false;
+ } else {
ok = do_ecmd(qf_ptr->qf_fnum, NULL, NULL, NULL, (linenr_T)1,
- ECMD_HIDE + ECMD_SET_HELP,
- oldwin == curwin ? curwin : NULL);
- } else
- ok = buflist_getfile(qf_ptr->qf_fnum,
- (linenr_T)1, GETF_SETMARK | GETF_SWITCH, forceit);
+ ECMD_HIDE + ECMD_SET_HELP,
+ oldwin == curwin ? curwin : NULL);
+ }
+ } else {
+ int old_qf_curlist = qi->qf_curlist;
+ bool is_abort = false;
+
+ ok = buflist_getfile(qf_ptr->qf_fnum, (linenr_T)1,
+ GETF_SETMARK | GETF_SWITCH, forceit);
+ if (qi != &ql_info && !win_valid(oldwin)) {
+ EMSG(_("E924: Current window was closed"));
+ is_abort = true;
+ opened_window = false;
+ } else if (old_qf_curlist != qi->qf_curlist
+ || !is_qf_entry_present(qi, qf_ptr)) {
+ if (qi == &ql_info) {
+ EMSG(_("E925: Current quickfix was changed"));
+ } else {
+ EMSG(_("E926: Current location list was changed"));
+ }
+ is_abort = true;
+ }
+
+ if (is_abort) {
+ ok = false;
+ qi = NULL;
+ qf_ptr = NULL;
+ }
+ }
}
if (ok == OK) {
@@ -1663,21 +1944,22 @@ win_found:
msg_scroll = (int)i;
}
} else {
- if (opened_window)
- win_close(curwin, TRUE); /* Close opened window */
- if (qf_ptr->qf_fnum != 0) {
- /*
- * Couldn't open file, so put index back where it was. This could
- * happen if the file was readonly and we changed something.
- */
+ if (opened_window) {
+ win_close(curwin, true); // Close opened window
+ }
+ if (qf_ptr != NULL && qf_ptr->qf_fnum != 0) {
+ // Couldn't open file, so put index back where it was. This could
+ // happen if the file was readonly and we changed something.
failed:
qf_ptr = old_qf_ptr;
qf_index = old_qf_index;
}
}
theend:
- qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
- qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ if (qi != NULL) {
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qf_ptr;
+ qi->qf_lists[qi->qf_curlist].qf_index = qf_index;
+ }
if (p_swb != old_swb && opened_window) {
/* Restore old 'switchbuf' value, but not when an autocommand or
* modeline has changed the value. */
@@ -1719,15 +2001,29 @@ void qf_list(exarg_T *eap)
EMSG(_(e_quickfix));
return;
}
+
+ bool plus = false;
+ if (*arg == '+') {
+ arg++;
+ plus = true;
+ }
if (!get_list_range(&arg, &idx1, &idx2) || *arg != NUL) {
EMSG(_(e_trailing));
return;
}
- i = qi->qf_lists[qi->qf_curlist].qf_count;
- if (idx1 < 0)
- idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
- if (idx2 < 0)
- idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ if (plus) {
+ i = qi->qf_lists[qi->qf_curlist].qf_index;
+ idx2 = i + idx1;
+ idx1 = i;
+ } else {
+ i = qi->qf_lists[qi->qf_curlist].qf_count;
+ if (idx1 < 0) {
+ idx1 = (-idx1 > i) ? 0 : idx1 + i + 1;
+ }
+ if (idx2 < 0) {
+ idx2 = (-idx2 > i) ? 0 : idx2 + i + 1;
+ }
+ }
if (qi->qf_lists[qi->qf_curlist].qf_nonevalid)
all = TRUE;
@@ -1751,16 +2047,18 @@ void qf_list(exarg_T *eap)
vim_snprintf((char *)IObuff, IOSIZE, "%2d %s",
i, (char *)fname);
msg_outtrans_attr(IObuff, i == qi->qf_lists[qi->qf_curlist].qf_index
- ? hl_attr(HLF_L) : hl_attr(HLF_D));
- if (qfp->qf_lnum == 0)
+ ? hl_attr(HLF_QFL) : hl_attr(HLF_D));
+ if (qfp->qf_lnum == 0) {
IObuff[0] = NUL;
- else if (qfp->qf_col == 0)
- sprintf((char *)IObuff, ":%" PRId64, (int64_t)qfp->qf_lnum);
- else
- sprintf((char *)IObuff, ":%" PRId64 " col %d",
- (int64_t)qfp->qf_lnum, qfp->qf_col);
- sprintf((char *)IObuff + STRLEN(IObuff), "%s:",
- (char *)qf_types(qfp->qf_type, qfp->qf_nr));
+ } else if (qfp->qf_col == 0) {
+ vim_snprintf((char *)IObuff, IOSIZE, ":%" PRId64,
+ (int64_t)qfp->qf_lnum);
+ } else {
+ vim_snprintf((char *)IObuff, IOSIZE, ":%" PRId64 " col %d",
+ (int64_t)qfp->qf_lnum, qfp->qf_col);
+ }
+ vim_snprintf((char *)IObuff + STRLEN(IObuff), IOSIZE, "%s:",
+ (char *)qf_types(qfp->qf_type, qfp->qf_nr));
msg_puts_attr(IObuff, hl_attr(HLF_N));
if (qfp->qf_pattern != NULL) {
qf_fmt_text(qfp->qf_pattern, IObuff, IOSIZE);
@@ -1780,7 +2078,10 @@ void qf_list(exarg_T *eap)
}
qfp = qfp->qf_next;
- ++i;
+ if (qfp == NULL) {
+ break;
+ }
+ i++;
os_breakcheck();
}
}
@@ -1806,6 +2107,31 @@ static void qf_fmt_text(char_u *text, char_u *buf, int bufsize)
buf[i] = NUL;
}
+static void qf_msg(qf_info_T *qi, int which, char *lead)
+{
+ char *title = (char *)qi->qf_lists[which].qf_title;
+ int count = qi->qf_lists[which].qf_count;
+ char_u buf[IOSIZE];
+
+ vim_snprintf((char *)buf, IOSIZE, _("%serror list %d of %d; %d errors "),
+ lead,
+ which + 1,
+ qi->qf_listcount,
+ count);
+
+ if (title != NULL) {
+ size_t len = STRLEN(buf);
+
+ if (len < 34) {
+ memset(buf + len, ' ', 34 - len);
+ buf[34] = NUL;
+ }
+ xstrlcat((char *)buf, title, IOSIZE);
+ }
+ trunc_string(buf, buf, (int)Columns - 1, IOSIZE);
+ msg(buf);
+}
+
/*
* ":colder [count]": Up in the quickfix stack.
* ":cnewer [count]": Down in the quickfix stack.
@@ -1846,15 +2172,26 @@ void qf_age(exarg_T *eap)
++qi->qf_curlist;
}
}
- qf_msg(qi);
+ qf_msg(qi, qi->qf_curlist, "");
+ qf_update_buffer(qi, NULL);
}
-static void qf_msg(qf_info_T *qi)
+void qf_history(exarg_T *eap)
{
- smsg(_("error list %d of %d; %d errors"),
- qi->qf_curlist + 1, qi->qf_listcount,
- qi->qf_lists[qi->qf_curlist].qf_count);
- qf_update_buffer(qi);
+ qf_info_T *qi = &ql_info;
+ int i;
+
+ if (eap->cmdidx == CMD_lhistory) {
+ qi = GET_LOC_LIST(curwin);
+ }
+ if (qi == NULL || (qi->qf_listcount == 0
+ && qi->qf_lists[qi->qf_curlist].qf_count == 0)) {
+ MSG(_("No entries"));
+ } else {
+ for (i = 0; i < qi->qf_listcount; i++) {
+ qf_msg(qi, i, i == qi->qf_curlist ? "> " : " ");
+ }
+ }
}
/*
@@ -1863,29 +2200,35 @@ static void qf_msg(qf_info_T *qi)
static void qf_free(qf_info_T *qi, int idx)
{
qfline_T *qfp;
- int stop = FALSE;
+ qfline_T *qfpnext;
+ bool stop = false;
- while (qi->qf_lists[idx].qf_count) {
- qfp = qi->qf_lists[idx].qf_start->qf_next;
+ while (qi->qf_lists[idx].qf_count && qi->qf_lists[idx].qf_start != NULL) {
+ qfp = qi->qf_lists[idx].qf_start;
+ qfpnext = qfp->qf_next;
if (qi->qf_lists[idx].qf_title != NULL && !stop) {
- xfree(qi->qf_lists[idx].qf_start->qf_text);
- stop = (qi->qf_lists[idx].qf_start == qfp);
- xfree(qi->qf_lists[idx].qf_start->qf_pattern);
- xfree(qi->qf_lists[idx].qf_start);
- if (stop)
- /* Somehow qf_count may have an incorrect value, set it to 1
- * to avoid crashing when it's wrong.
- * TODO: Avoid qf_count being incorrect. */
+ xfree(qfp->qf_text);
+ stop = (qfp == qfpnext);
+ xfree(qfp->qf_pattern);
+ xfree(qfp);
+ if (stop) {
+ // Somehow qf_count may have an incorrect value, set it to 1
+ // to avoid crashing when it's wrong.
+ // TODO(vim): Avoid qf_count being incorrect.
qi->qf_lists[idx].qf_count = 1;
+ }
}
- qi->qf_lists[idx].qf_start = qfp;
- --qi->qf_lists[idx].qf_count;
+ qi->qf_lists[idx].qf_start = qfpnext;
+ qi->qf_lists[idx].qf_count--;
}
xfree(qi->qf_lists[idx].qf_title);
qi->qf_lists[idx].qf_start = NULL;
qi->qf_lists[idx].qf_ptr = NULL;
qi->qf_lists[idx].qf_title = NULL;
qi->qf_lists[idx].qf_index = 0;
+
+ qf_clean_dir_stack(&qi->qf_dir_stack);
+ qf_clean_dir_stack(&qi->qf_file_stack);
}
/*
@@ -1897,7 +2240,12 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long
qfline_T *qfp;
int idx;
qf_info_T *qi = &ql_info;
+ bool found_one = false;
+ int buf_has_flag = wp == NULL ? BUF_HAS_QF_ENTRY : BUF_HAS_LL_ENTRY;
+ if (!(curbuf->b_has_qf_entry & buf_has_flag)) {
+ return;
+ }
if (wp != NULL) {
if (wp->w_llist == NULL)
return;
@@ -1907,8 +2255,10 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long
for (idx = 0; idx < qi->qf_listcount; ++idx)
if (qi->qf_lists[idx].qf_count)
for (i = 0, qfp = qi->qf_lists[idx].qf_start;
- i < qi->qf_lists[idx].qf_count; ++i, qfp = qfp->qf_next)
+ i < qi->qf_lists[idx].qf_count && qfp != NULL;
+ i++, qfp = qfp->qf_next) {
if (qfp->qf_fnum == curbuf->b_fnum) {
+ found_one = true;
if (qfp->qf_lnum >= line1 && qfp->qf_lnum <= line2) {
if (amount == MAXLNUM)
qfp->qf_cleared = TRUE;
@@ -1917,6 +2267,11 @@ void qf_mark_adjust(win_T *wp, linenr_T line1, linenr_T line2, long amount, long
} else if (amount_after && qfp->qf_lnum > line2)
qfp->qf_lnum += amount_after;
}
+ }
+
+ if (!found_one) {
+ curbuf->b_has_qf_entry &= ~buf_has_flag;
+ }
}
/*
@@ -2122,7 +2477,7 @@ void ex_copen(exarg_T *eap)
qf_set_title_var(qi);
// Fill the buffer with the quickfix list.
- qf_fill_buffer(qi);
+ qf_fill_buffer(qi, curbuf, NULL);
curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
curwin->w_cursor.col = 0;
@@ -2130,6 +2485,44 @@ void ex_copen(exarg_T *eap)
update_topline(); /* scroll to show the line */
}
+// Move the cursor in the quickfix window to "lnum".
+static void qf_win_goto(win_T *win, linenr_T lnum)
+{
+ win_T *old_curwin = curwin;
+
+ curwin = win;
+ curbuf = win->w_buffer;
+ curwin->w_cursor.lnum = lnum;
+ curwin->w_cursor.col = 0;
+ curwin->w_cursor.coladd = 0;
+ curwin->w_curswant = 0;
+ update_topline(); // scroll to show the line
+ redraw_later(VALID);
+ curwin->w_redr_status = true; // update ruler
+ curwin = old_curwin;
+ curbuf = curwin->w_buffer;
+}
+
+// :cbottom/:lbottom command.
+void ex_cbottom(exarg_T *eap)
+{
+ qf_info_T *qi = &ql_info;
+
+ if (eap->cmdidx == CMD_lbottom) {
+ qi = GET_LOC_LIST(curwin);
+ if (qi == NULL) {
+ EMSG(_(e_loclist));
+ return;
+ }
+ }
+
+ win_T *win = qf_find_win(qi);
+
+ if (win != NULL && win->w_cursor.lnum != win->w_buffer->b_ml.ml_line_count) {
+ qf_win_goto(win, win->w_buffer->b_ml.ml_line_count);
+ }
+}
+
/*
* Return the number of the current entry (line number in the quickfix
* window).
@@ -2166,24 +2559,14 @@ qf_win_pos_update (
if (win != NULL
&& qf_index <= win->w_buffer->b_ml.ml_line_count
&& old_qf_index != qf_index) {
- win_T *old_curwin = curwin;
-
- curwin = win;
- curbuf = win->w_buffer;
if (qf_index > old_qf_index) {
- curwin->w_redraw_top = old_qf_index;
- curwin->w_redraw_bot = qf_index;
+ win->w_redraw_top = old_qf_index;
+ win->w_redraw_bot = qf_index;
} else {
- curwin->w_redraw_top = qf_index;
- curwin->w_redraw_bot = old_qf_index;
+ win->w_redraw_top = qf_index;
+ win->w_redraw_bot = old_qf_index;
}
- curwin->w_cursor.lnum = qf_index;
- curwin->w_cursor.col = 0;
- update_topline(); /* scroll to show the line */
- redraw_later(VALID);
- curwin->w_redr_status = TRUE; /* update ruler */
- curwin = old_curwin;
- curbuf = curwin->w_buffer;
+ qf_win_goto(win, qf_index);
}
return win != NULL;
}
@@ -2241,7 +2624,7 @@ static buf_T *qf_find_buf(qf_info_T *qi)
/*
* Find the quickfix buffer. If it exists, update the contents.
*/
-static void qf_update_buffer(qf_info_T *qi)
+static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last)
{
buf_T *buf;
win_T *win;
@@ -2251,8 +2634,12 @@ static void qf_update_buffer(qf_info_T *qi)
/* Check if a buffer for the quickfix list exists. Update it. */
buf = qf_find_buf(qi);
if (buf != NULL) {
- /* set curwin/curbuf to buf and save a few things */
- aucmd_prepbuf(&aco, buf);
+ linenr_T old_line_count = buf->b_ml.ml_line_count;
+
+ if (old_last == NULL) {
+ // set curwin/curbuf to buf and save a few things
+ aucmd_prepbuf(&aco, buf);
+ }
if ((win = qf_find_win(qi)) != NULL) {
curwin_save = curwin;
@@ -2260,12 +2647,21 @@ static void qf_update_buffer(qf_info_T *qi)
qf_set_title_var(qi);
curwin = curwin_save;
}
- qf_fill_buffer(qi);
- /* restore curwin/curbuf and a few other things */
- aucmd_restbuf(&aco);
+ qf_fill_buffer(qi, buf, old_last);
+
+ if (old_last == NULL) {
+ (void)qf_win_pos_update(qi, 0);
+
+ // restore curwin/curbuf and a few other things
+ aucmd_restbuf(&aco);
+ }
- (void)qf_win_pos_update(qi, 0);
+ // Only redraw when added lines are visible. This avoids flickering when
+ // the added lines are not visible.
+ if ((win = qf_find_win(qi)) != NULL && old_line_count < win->w_botline) {
+ redraw_buf_later(buf, NOT_VALID);
+ }
}
}
@@ -2278,11 +2674,12 @@ static void qf_set_title_var(qf_info_T *qi)
}
}
-/*
- * Fill current buffer with quickfix errors, replacing any previous contents.
- * curbuf must be the quickfix buffer!
- */
-static void qf_fill_buffer(qf_info_T *qi)
+// Fill current buffer with quickfix errors, replacing any previous contents.
+// curbuf must be the quickfix buffer!
+// If "old_last" is not NULL append the items after this one.
+// When "old_last" is NULL then "buf" must equal "curbuf"! Because ml_delete()
+// is used and autocommands will be triggered.
+static void qf_fill_buffer(qf_info_T *qi, buf_T *buf, qfline_T *old_last)
{
linenr_T lnum;
qfline_T *qfp;
@@ -2290,15 +2687,29 @@ static void qf_fill_buffer(qf_info_T *qi)
int len;
int old_KeyTyped = KeyTyped;
- /* delete all existing lines */
- while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0)
- (void)ml_delete((linenr_T)1, FALSE);
+ if (old_last == NULL) {
+ if (buf != curbuf) {
+ EMSG2(_(e_intern2), "qf_fill_buffer()");
+ return;
+ }
+
+ // delete all existing lines
+ while ((curbuf->b_ml.ml_flags & ML_EMPTY) == 0) {
+ (void)ml_delete((linenr_T)1, false);
+ }
+ }
/* Check if there is anything to display */
if (qi->qf_curlist < qi->qf_listcount) {
- /* Add one line for each error */
- qfp = qi->qf_lists[qi->qf_curlist].qf_start;
- for (lnum = 0; lnum < qi->qf_lists[qi->qf_curlist].qf_count; ++lnum) {
+ // Add one line for each error
+ if (old_last == NULL) {
+ qfp = qi->qf_lists[qi->qf_curlist].qf_start;
+ lnum = 0;
+ } else {
+ qfp = old_last->qf_next;
+ lnum = buf->b_ml.ml_line_count;
+ }
+ while (lnum < qi->qf_lists[qi->qf_curlist].qf_count) {
if (qfp->qf_fnum != 0
&& (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL
&& errbuf->b_fname != NULL) {
@@ -2338,33 +2749,42 @@ static void qf_fill_buffer(qf_info_T *qi)
qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text,
IObuff + len, IOSIZE - len);
- if (ml_append(lnum, IObuff, (colnr_T)STRLEN(IObuff) + 1, FALSE)
- == FAIL)
+ if (ml_append_buf(buf, lnum, IObuff, (colnr_T)STRLEN(IObuff) + 1, false)
+ == FAIL) {
break;
+ }
+ lnum++;
qfp = qfp->qf_next;
+ if (qfp == NULL) {
+ break;
+ }
+ }
+ if (old_last == NULL) {
+ // Delete the empty line which is now at the end
+ (void)ml_delete(lnum + 1, false);
}
- /* Delete the empty line which is now at the end */
- (void)ml_delete(lnum + 1, FALSE);
}
/* correct cursor position */
check_lnums(TRUE);
- /* Set the 'filetype' to "qf" each time after filling the buffer. This
- * resembles reading a file into a buffer, it's more logical when using
- * autocommands. */
- set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
- curbuf->b_p_ma = FALSE;
-
- keep_filetype = TRUE; /* don't detect 'filetype' */
- apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
- FALSE, curbuf);
- apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
- FALSE, curbuf);
- keep_filetype = FALSE;
-
- /* make sure it will be redrawn */
- redraw_curbuf_later(NOT_VALID);
+ if (old_last == NULL) {
+ // Set the 'filetype' to "qf" each time after filling the buffer. This
+ // resembles reading a file into a buffer, it's more logical when using
+ // autocommands.
+ set_option_value((char_u *)"ft", 0L, (char_u *)"qf", OPT_LOCAL);
+ curbuf->b_p_ma = false;
+
+ keep_filetype = true; // don't detect 'filetype'
+ apply_autocmds(EVENT_BUFREADPOST, (char_u *)"quickfix", NULL,
+ false, curbuf);
+ apply_autocmds(EVENT_BUFWINENTER, (char_u *)"quickfix", NULL,
+ false, curbuf);
+ keep_filetype = false;
+
+ // make sure it will be redrawn
+ redraw_curbuf_later(NOT_VALID);
+ }
/* Restore KeyTyped, setting 'filetype' may reset it. */
KeyTyped = old_KeyTyped;
@@ -2890,7 +3310,6 @@ void ex_vimgrep(exarg_T *eap)
int fi;
qf_info_T *qi = &ql_info;
qfline_T *cur_qf_start;
- qfline_T *prevp = NULL;
long lnum;
buf_T *buf;
int duplicate_name = FALSE;
@@ -2942,6 +3361,7 @@ void ex_vimgrep(exarg_T *eap)
/* Get the search pattern: either white-separated or enclosed in // */
regmatch.regprog = NULL;
+ char_u *title = vim_strsave(*eap->cmdlinep);
p = skip_vimgrep_pat(eap->arg, &s, &flags);
if (p == NULL) {
EMSG(_(e_invalpat));
@@ -2973,13 +3393,7 @@ void ex_vimgrep(exarg_T *eap)
&& eap->cmdidx != CMD_vimgrepadd && eap->cmdidx != CMD_lvimgrepadd)
|| qi->qf_curlist == qi->qf_listcount) {
// make place for a new list
- qf_new_list(qi, *eap->cmdlinep);
- } else if (qi->qf_lists[qi->qf_curlist].qf_count > 0) {
- // Adding to existing list, find last entry.
- for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
- prevp->qf_next != prevp;
- prevp = prevp->qf_next) {
- }
+ qf_new_list(qi, title != NULL ? title : *eap->cmdlinep);
}
/* parse the list of arguments */
@@ -3075,23 +3489,25 @@ void ex_vimgrep(exarg_T *eap)
++lnum) {
col = 0;
while (vim_regexec_multi(&regmatch, curwin, buf, lnum,
- col, NULL) > 0) {
- ;
- if (qf_add_entry(qi, &prevp,
- NULL, /* dir */
- fname,
- 0,
- ml_get_buf(buf,
- regmatch.startpos[0].lnum + lnum, FALSE),
- regmatch.startpos[0].lnum + lnum,
- regmatch.startpos[0].col + 1,
- FALSE, /* vis_col */
- NULL, /* search pattern */
- 0, /* nr */
- 0, /* type */
- TRUE /* valid */
- ) == FAIL) {
- got_int = TRUE;
+ col, NULL) > 0) {
+ // Pass the buffer number so that it gets used even for a
+ // dummy buffer, unless duplicate_name is set, then the
+ // buffer will be wiped out below.
+ if (qf_add_entry(qi,
+ NULL, // dir
+ fname,
+ duplicate_name ? 0 : buf->b_fnum,
+ ml_get_buf(buf,
+ regmatch.startpos[0].lnum + lnum, false),
+ regmatch.startpos[0].lnum + lnum,
+ regmatch.startpos[0].col + 1,
+ false, // vis_col
+ NULL, // search pattern
+ 0, // nr
+ 0, // type
+ true) // valid
+ == FAIL) {
+ got_int = true;
break;
}
found_match = TRUE;
@@ -3134,17 +3550,23 @@ void ex_vimgrep(exarg_T *eap)
buf = NULL;
} else if (buf != first_match_buf || (flags & VGR_NOJUMP)) {
unload_dummy_buffer(buf, dirname_start);
+ // Keeping the buffer, remove the dummy flag.
+ buf->b_flags &= ~BF_DUMMY;
buf = NULL;
}
}
if (buf != NULL) {
- /* If the buffer is still loaded we need to use the
- * directory we jumped to below. */
+ // Keeping the buffer, remove the dummy flag.
+ buf->b_flags &= ~BF_DUMMY;
+
+ // If the buffer is still loaded we need to use the
+ // directory we jumped to below.
if (buf == first_match_buf
&& target_dir == NULL
- && STRCMP(dirname_start, dirname_now) != 0)
+ && STRCMP(dirname_start, dirname_now) != 0) {
target_dir = vim_strsave(dirname_now);
+ }
/* The buffer is still loaded, the Filetype autocommands
* need to be done now, in that buffer. And the modelines
@@ -3166,7 +3588,7 @@ void ex_vimgrep(exarg_T *eap)
qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
qi->qf_lists[qi->qf_curlist].qf_index = 1;
- qf_update_buffer(qi);
+ qf_update_buffer(qi, NULL);
if (au_name != NULL)
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
@@ -3201,6 +3623,7 @@ void ex_vimgrep(exarg_T *eap)
}
theend:
+ xfree(title);
xfree(dirname_now);
xfree(dirname_start);
xfree(target_dir);
@@ -3298,10 +3721,11 @@ load_dummy_buffer (
int failed = TRUE;
aco_save_T aco;
- /* Allocate a buffer without putting it in the buffer list. */
+ // Allocate a buffer without putting it in the buffer list.
newbuf = buflist_new(NULL, NULL, (linenr_T)1, BLN_DUMMY);
- if (newbuf == NULL)
+ if (newbuf == NULL) {
return NULL;
+ }
/* Init the options. */
buf_copy_options(newbuf, BCO_ENTER | BCO_NOHELP);
@@ -3448,19 +3872,21 @@ int get_errorlist(win_T *wp, list_T *list)
return FAIL;
qfp = qfp->qf_next;
+ if (qfp == NULL) {
+ break;
+ }
}
return OK;
}
-/*
- * Populate the quickfix list with the items supplied in the list
- * of dictionaries. "title" will be copied to w:quickfix_title
- */
+// Populate the quickfix list with the items supplied in the list
+// of dictionaries. "title" will be copied to w:quickfix_title
+// "action" is 'a' for add, 'r' for replace. Otherwise create a new list.
int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
{
listitem_T *li;
dict_T *d;
- qfline_T *prevp = NULL;
+ qfline_T *old_last = NULL;
int retval = OK;
qf_info_T *qi = &ql_info;
bool did_bufnr_emsg = false;
@@ -3469,15 +3895,13 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
qi = ll_get_or_alloc_list(wp);
}
- if (action == ' ' || qi->qf_curlist == qi->qf_listcount)
- /* make place for a new list */
+ if (action == ' ' || qi->qf_curlist == qi->qf_listcount) {
+ // make place for a new list
qf_new_list(qi, title);
- else if (action == 'a' && qi->qf_lists[qi->qf_curlist].qf_count > 0)
- /* Adding to existing list, find last entry. */
- for (prevp = qi->qf_lists[qi->qf_curlist].qf_start;
- prevp->qf_next != prevp; prevp = prevp->qf_next)
- ;
- else if (action == 'r') {
+ } else if (action == 'a' && qi->qf_lists[qi->qf_curlist].qf_count > 0) {
+ // Adding to existing list, use last entry.
+ old_last = qi->qf_lists[qi->qf_curlist].qf_last;
+ } else if (action == 'r') {
qf_free(qi, qi->qf_curlist);
qf_store_title(qi, title);
}
@@ -3490,15 +3914,15 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
if (d == NULL)
continue;
- char_u *filename = get_dict_string(d, (char_u *)"filename", true);
- int bufnum = (int)get_dict_number(d, (char_u *)"bufnr");
- long lnum = get_dict_number(d, (char_u *)"lnum");
- int col = (int)get_dict_number(d, (char_u *)"col");
- char_u vcol = (char_u)get_dict_number(d, (char_u *)"vcol");
- int nr = (int)get_dict_number(d, (char_u *)"nr");
- char_u *type = get_dict_string(d, (char_u *)"type", true);
- char_u *pattern = get_dict_string(d, (char_u *)"pattern", true);
- char_u *text = get_dict_string(d, (char_u *)"text", true);
+ char_u *filename = get_dict_string(d, "filename", true);
+ int bufnum = (int)get_dict_number(d, "bufnr");
+ long lnum = get_dict_number(d, "lnum");
+ int col = (int)get_dict_number(d, "col");
+ char_u vcol = (char_u)get_dict_number(d, "vcol");
+ int nr = (int)get_dict_number(d, "nr");
+ char_u *type = get_dict_string(d, "type", true);
+ char_u *pattern = get_dict_string(d, "pattern", true);
+ char_u *text = get_dict_string(d, "text", true);
if (text == NULL) {
text = vim_strsave((char_u *)"");
}
@@ -3519,7 +3943,6 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
}
int status = qf_add_entry(qi,
- &prevp,
NULL, // dir
filename,
bufnum,
@@ -3543,15 +3966,21 @@ int set_errorlist(win_T *wp, list_T *list, int action, char_u *title)
}
}
- if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
- /* no valid entry */
- qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
- else
- qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
- qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
- qi->qf_lists[qi->qf_curlist].qf_index = 1;
+ if (qi->qf_lists[qi->qf_curlist].qf_index == 0) {
+ // no valid entry
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = true;
+ } else {
+ qi->qf_lists[qi->qf_curlist].qf_nonevalid = false;
+ }
+ if (action != 'a') {
+ qi->qf_lists[qi->qf_curlist].qf_ptr = qi->qf_lists[qi->qf_curlist].qf_start;
+ if (qi->qf_lists[qi->qf_curlist].qf_count > 0) {
+ qi->qf_lists[qi->qf_curlist].qf_index = 1;
+ }
+ }
- qf_update_buffer(qi);
+ // Don't update the cursor in quickfix window when appending entries
+ qf_update_buffer(qi, old_last);
return retval;
}
@@ -3656,7 +4085,6 @@ void ex_helpgrep(exarg_T *eap)
char_u **fnames;
FILE *fd;
int fi;
- qfline_T *prevp = NULL;
long lnum;
char_u *lang;
qf_info_T *qi = &ql_info;
@@ -3759,23 +4187,24 @@ void ex_helpgrep(exarg_T *eap)
while (l > 0 && line[l - 1] <= ' ')
line[--l] = NUL;
- if (qf_add_entry(qi, &prevp,
- NULL, /* dir */
- fnames[fi],
- 0,
- line,
- lnum,
- (int)(regmatch.startp[0] - line)
- + 1, /* col */
- FALSE, /* vis_col */
- NULL, /* search pattern */
- 0, /* nr */
- 1, /* type */
- TRUE /* valid */
- ) == FAIL) {
- got_int = TRUE;
- if (line != IObuff)
+ if (qf_add_entry(qi,
+ NULL, // dir
+ fnames[fi],
+ 0,
+ line,
+ lnum,
+ (int)(regmatch.startp[0] - line)
+ + 1, // col
+ false, // vis_col
+ NULL, // search pattern
+ 0, // nr
+ 1, // type
+ true) // valid
+ == FAIL) {
+ got_int = true;
+ if (line != IObuff) {
xfree(line);
+ }
break;
}
}
@@ -3807,7 +4236,7 @@ void ex_helpgrep(exarg_T *eap)
/* Darn, some plugin changed the value. */
free_string_option(save_cpo);
- qf_update_buffer(qi);
+ qf_update_buffer(qi, NULL);
if (au_name != NULL) {
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
diff --git a/src/nvim/rbuffer.c b/src/nvim/rbuffer.c
index b3805a3a28..111af0d0fb 100644
--- a/src/nvim/rbuffer.c
+++ b/src/nvim/rbuffer.c
@@ -15,10 +15,10 @@ RBuffer *rbuffer_new(size_t capacity)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET
{
if (!capacity) {
- capacity = 0xffff;
+ capacity = 0x10000;
}
- RBuffer *rv = xmalloc(sizeof(RBuffer) + capacity);
+ RBuffer *rv = xcalloc(1, sizeof(RBuffer) + capacity);
rv->full_cb = rv->nonfull_cb = NULL;
rv->data = NULL;
rv->size = 0;
@@ -78,7 +78,7 @@ void rbuffer_reset(RBuffer *buf) FUNC_ATTR_NONNULL_ALL
size_t temp_size;
if ((temp_size = rbuffer_size(buf))) {
if (buf->temp == NULL) {
- buf->temp = xmalloc(rbuffer_capacity(buf));
+ buf->temp = xcalloc(1, rbuffer_capacity(buf));
}
rbuffer_read(buf, buf->temp, buf->size);
}
@@ -153,7 +153,7 @@ void rbuffer_consumed(RBuffer *buf, size_t count)
// Higher level functions for copying from/to RBuffer instances and data
// pointers
-size_t rbuffer_write(RBuffer *buf, char *src, size_t src_size)
+size_t rbuffer_write(RBuffer *buf, const char *src, size_t src_size)
FUNC_ATTR_NONNULL_ALL
{
size_t size = src_size;
diff --git a/src/nvim/rbuffer.h b/src/nvim/rbuffer.h
index 35fb16508e..a8dfcac580 100644
--- a/src/nvim/rbuffer.h
+++ b/src/nvim/rbuffer.h
@@ -1,4 +1,4 @@
-// Ring buffer implementation. This is basically an array that wraps read/write
+// Specialized ring buffer. This is basically an array that wraps read/write
// pointers around the memory region. It should be more efficient than the old
// RBuffer which required memmove() calls to relocate read/write positions.
//
@@ -36,30 +36,36 @@
//
// Note that the rbuffer_{produced,consumed} calls are necessary or these macros
// create infinite loops
-#define RBUFFER_UNTIL_EMPTY(buf, rptr, rcnt) \
- for (size_t rcnt = 0, _r = 1; _r; _r = 0) \
- for (char *rptr = rbuffer_read_ptr(buf, &rcnt); \
- buf->size; \
- rptr = rbuffer_read_ptr(buf, &rcnt))
+#define RBUFFER_UNTIL_EMPTY(buf, rptr, rcnt) \
+ for (size_t rcnt = 0, _r = 1; _r; _r = 0) /* NOLINT(readability/braces) */ \
+ for ( /* NOLINT(readability/braces) */ \
+ char *rptr = rbuffer_read_ptr(buf, &rcnt); \
+ buf->size; \
+ rptr = rbuffer_read_ptr(buf, &rcnt))
-#define RBUFFER_UNTIL_FULL(buf, wptr, wcnt) \
- for (size_t wcnt = 0, _r = 1; _r; _r = 0) \
- for (char *wptr = rbuffer_write_ptr(buf, &wcnt); \
- rbuffer_space(buf); \
- wptr = rbuffer_write_ptr(buf, &wcnt))
+#define RBUFFER_UNTIL_FULL(buf, wptr, wcnt) \
+ for (size_t wcnt = 0, _r = 1; _r; _r = 0) /* NOLINT(readability/braces) */ \
+ for ( /* NOLINT(readability/braces) */ \
+ char *wptr = rbuffer_write_ptr(buf, &wcnt); \
+ rbuffer_space(buf); \
+ wptr = rbuffer_write_ptr(buf, &wcnt))
// Iteration
-#define RBUFFER_EACH(buf, c, i) \
- for (size_t i = 0; i < buf->size; i = buf->size) \
- for (char c = 0; \
- i < buf->size ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \
+#define RBUFFER_EACH(buf, c, i) \
+ for (size_t i = 0; /* NOLINT(readability/braces) */ \
+ i < buf->size; \
+ i = buf->size) \
+ for (char c = 0; /* NOLINT(readability/braces) */ \
+ i < buf->size ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \
i++)
-#define RBUFFER_EACH_REVERSE(buf, c, i) \
- for (size_t i = buf->size; i != SIZE_MAX; i = SIZE_MAX) \
- for (char c = 0; \
- i-- > 0 ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \
+#define RBUFFER_EACH_REVERSE(buf, c, i) \
+ for (size_t i = buf->size; /* NOLINT(readability/braces) */ \
+ i != SIZE_MAX; \
+ i = SIZE_MAX) \
+ for (char c = 0; /* NOLINT(readability/braces) */ \
+ i-- > 0 ? ((int)(c = *rbuffer_get(buf, i))) || 1 : 0; \
)
typedef struct rbuffer RBuffer;
diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c
index 886a48e7c5..6613d284d7 100644
--- a/src/nvim/regexp.c
+++ b/src/nvim/regexp.c
@@ -59,7 +59,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/strings.h"
@@ -1389,6 +1388,10 @@ int vim_regcomp_had_eol(void)
return had_eol;
}
+// variables for parsing reginput
+static int at_start; // True when on the first character
+static int prev_at_start; // True when on the second character
+
/*
* Parse regular expression, i.e. main body or parenthesized thing.
*
@@ -1768,6 +1771,7 @@ static char_u *regatom(int *flagp)
int c;
char_u *p;
int extra = 0;
+ int save_prev_at_start = prev_at_start;
*flagp = WORST; /* Tentatively. */
@@ -2143,17 +2147,21 @@ static char_u *regatom(int *flagp)
}
break;
} else if (c == 'l' || c == 'c' || c == 'v') {
- if (c == 'l')
+ if (c == 'l') {
ret = regnode(RE_LNUM);
- else if (c == 'c')
+ if (save_prev_at_start) {
+ at_start = true;
+ }
+ } else if (c == 'c') {
ret = regnode(RE_COL);
- else
+ } else {
ret = regnode(RE_VCOL);
- if (ret == JUST_CALC_SIZE)
+ }
+ if (ret == JUST_CALC_SIZE) {
regsize += 5;
- else {
- /* put the number and the optional
- * comparator after the opcode */
+ } else {
+ // put the number and the optional
+ // comparator after the opcode
regcode = re_put_uint32(regcode, n);
*regcode++ = cmp;
}
@@ -2301,48 +2309,64 @@ collection:
}
break;
case CLASS_ALNUM:
- for (cu = 1; cu <= 255; cu++)
- if (isalnum(cu))
- regc(cu);
+ for (cu = 1; cu < 128; cu++) {
+ if (isalnum(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_ALPHA:
- for (cu = 1; cu <= 255; cu++)
- if (isalpha(cu))
- regc(cu);
+ for (cu = 1; cu < 128; cu++) {
+ if (isalpha(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_BLANK:
regc(' ');
regc('\t');
break;
case CLASS_CNTRL:
- for (cu = 1; cu <= 255; cu++)
- if (iscntrl(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (iscntrl(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_DIGIT:
- for (cu = 1; cu <= 255; cu++)
- if (ascii_isdigit(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (ascii_isdigit(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_GRAPH:
- for (cu = 1; cu <= 255; cu++)
- if (isgraph(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (isgraph(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_LOWER:
- for (cu = 1; cu <= 255; cu++)
- if (vim_islower(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (vim_islower(cu) && cu != 170 && cu != 186) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_PRINT:
- for (cu = 1; cu <= 255; cu++)
- if (vim_isprintc(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (vim_isprintc(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_PUNCT:
- for (cu = 1; cu <= 255; cu++)
- if (ispunct(cu))
- regc(cu);
+ for (cu = 1; cu < 128; cu++) {
+ if (ispunct(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_SPACE:
for (cu = 9; cu <= 13; cu++)
@@ -2350,14 +2374,18 @@ collection:
regc(' ');
break;
case CLASS_UPPER:
- for (cu = 1; cu <= 255; cu++)
- if (vim_isupper(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (vim_isupper(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_XDIGIT:
- for (cu = 1; cu <= 255; cu++)
- if (ascii_isxdigit(cu))
- regc(cu);
+ for (cu = 1; cu <= 255; cu++) {
+ if (ascii_isxdigit(cu)) {
+ regmbc(cu);
+ }
+ }
break;
case CLASS_TAB:
regc('\t');
@@ -2679,9 +2707,6 @@ static void regoptail(char_u *p, char_u *val)
* Functions for getting characters from the regexp input.
*/
-static int at_start; /* True when on the first character */
-static int prev_at_start; /* True when on the second character */
-
/*
* Start parsing at "str".
*/
diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c
index 7e53b2ccd1..474f3df32a 100644
--- a/src/nvim/regexp_nfa.c
+++ b/src/nvim/regexp_nfa.c
@@ -11,7 +11,6 @@
#include <limits.h>
#include "nvim/ascii.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
/*
@@ -357,13 +356,14 @@ static int nfa_ll_index = 0;
# include "regexp_nfa.c.generated.h"
#endif
-/* helper functions used when doing re2post() ... regatom() parsing */
-#define EMIT(c) do { \
- if (post_ptr >= post_end) { \
- realloc_post_list(); \
- } \
- *post_ptr++ = c; \
-} while (0)
+// Helper functions used when doing re2post() ... regatom() parsing
+#define EMIT(c) \
+ do { \
+ if (post_ptr >= post_end) { \
+ realloc_post_list(); \
+ } \
+ *post_ptr++ = c; \
+ } while (0)
/*
* Initialize internal variables before NFA compilation.
@@ -723,13 +723,70 @@ static void nfa_emit_equi_class(int c)
if (enc_utf8 || STRCMP(p_enc, "latin1") == 0
|| STRCMP(p_enc, "iso-8859-15") == 0) {
+#define A_grave 0xc0
+#define A_acute 0xc1
+#define A_circumflex 0xc2
+#define A_virguilla 0xc3
+#define A_diaeresis 0xc4
+#define A_ring 0xc5
+#define C_cedilla 0xc7
+#define E_grave 0xc8
+#define E_acute 0xc9
+#define E_circumflex 0xca
+#define E_diaeresis 0xcb
+#define I_grave 0xcc
+#define I_acute 0xcd
+#define I_circumflex 0xce
+#define I_diaeresis 0xcf
+#define N_virguilla 0xd1
+#define O_grave 0xd2
+#define O_acute 0xd3
+#define O_circumflex 0xd4
+#define O_virguilla 0xd5
+#define O_diaeresis 0xd6
+#define O_slash 0xd8
+#define U_grave 0xd9
+#define U_acute 0xda
+#define U_circumflex 0xdb
+#define U_diaeresis 0xdc
+#define Y_acute 0xdd
+#define a_grave 0xe0
+#define a_acute 0xe1
+#define a_circumflex 0xe2
+#define a_virguilla 0xe3
+#define a_diaeresis 0xe4
+#define a_ring 0xe5
+#define c_cedilla 0xe7
+#define e_grave 0xe8
+#define e_acute 0xe9
+#define e_circumflex 0xea
+#define e_diaeresis 0xeb
+#define i_grave 0xec
+#define i_acute 0xed
+#define i_circumflex 0xee
+#define i_diaeresis 0xef
+#define n_virguilla 0xf1
+#define o_grave 0xf2
+#define o_acute 0xf3
+#define o_circumflex 0xf4
+#define o_virguilla 0xf5
+#define o_diaeresis 0xf6
+#define o_slash 0xf8
+#define u_grave 0xf9
+#define u_acute 0xfa
+#define u_circumflex 0xfb
+#define u_diaeresis 0xfc
+#define y_acute 0xfd
+#define y_diaeresis 0xff
switch (c) {
- case 'A': case 0300: case 0301: case 0302:
- case 0303: case 0304: case 0305:
- CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
- CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
- EMIT2('A'); EMIT2(0300); EMIT2(0301); EMIT2(0302);
- EMIT2(0303); EMIT2(0304); EMIT2(0305);
+ case 'A': case A_grave: case A_acute: case A_circumflex:
+ case A_virguilla: case A_diaeresis: case A_ring:
+ CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104)
+ CASEMBC(0x1cd) CASEMBC(0x1de) CASEMBC(0x1e0)
+ CASEMBC(0x1ea2)
+ EMIT2('A'); EMIT2(A_grave); EMIT2(A_acute);
+ EMIT2(A_circumflex); EMIT2(A_virguilla);
+ EMIT2(A_diaeresis); EMIT2(A_ring);
EMITMBC(0x100) EMITMBC(0x102) EMITMBC(0x104)
EMITMBC(0x1cd) EMITMBC(0x1de) EMITMBC(0x1e0)
EMITMBC(0x1ea2)
@@ -739,23 +796,24 @@ static void nfa_emit_equi_class(int c)
EMIT2('B'); EMITMBC(0x1e02) EMITMBC(0x1e06)
return;
- case 'C': case 0307:
- CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
- EMIT2('C'); EMIT2(0307); EMITMBC(0x106) EMITMBC(0x108)
+ case 'C': case C_cedilla: CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a)
+ CASEMBC(0x10c)
+ EMIT2('C'); EMIT2(C_cedilla); EMITMBC(0x106) EMITMBC(0x108)
EMITMBC(0x10a) EMITMBC(0x10c)
return;
case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
- CASEMBC(0x1e0e) CASEMBC(0x1e10)
+ CASEMBC(0x1e0e) CASEMBC(0x1e10)
EMIT2('D'); EMITMBC(0x10e) EMITMBC(0x110) EMITMBC(0x1e0a)
EMITMBC(0x1e0e) EMITMBC(0x1e10)
return;
- case 'E': case 0310: case 0311: case 0312: case 0313:
- CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
- CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
- EMIT2('E'); EMIT2(0310); EMIT2(0311); EMIT2(0312);
- EMIT2(0313);
+ case 'E': case E_grave: case E_acute: case E_circumflex:
+ case E_diaeresis: CASEMBC(0x112) CASEMBC(0x114)
+ CASEMBC(0x116) CASEMBC(0x118) CASEMBC(0x11a)
+ CASEMBC(0x1eba) CASEMBC(0x1ebc)
+ EMIT2('E'); EMIT2(E_grave); EMIT2(E_acute);
+ EMIT2(E_circumflex); EMIT2(E_diaeresis);
EMITMBC(0x112) EMITMBC(0x114) EMITMBC(0x116)
EMITMBC(0x118) EMITMBC(0x11a) EMITMBC(0x1eba)
EMITMBC(0x1ebc)
@@ -766,24 +824,26 @@ static void nfa_emit_equi_class(int c)
return;
case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
- CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
- CASEMBC(0x1e20)
+ CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6)
+ CASEMBC(0x1f4) CASEMBC(0x1e20)
EMIT2('G'); EMITMBC(0x11c) EMITMBC(0x11e) EMITMBC(0x120)
EMITMBC(0x122) EMITMBC(0x1e4) EMITMBC(0x1e6)
EMITMBC(0x1f4) EMITMBC(0x1e20)
return;
case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
- CASEMBC(0x1e26) CASEMBC(0x1e28)
+ CASEMBC(0x1e26) CASEMBC(0x1e28)
EMIT2('H'); EMITMBC(0x124) EMITMBC(0x126) EMITMBC(0x1e22)
EMITMBC(0x1e26) EMITMBC(0x1e28)
return;
- case 'I': case 0314: case 0315: case 0316: case 0317:
- CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
- CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
- EMIT2('I'); EMIT2(0314); EMIT2(0315); EMIT2(0316);
- EMIT2(0317); EMITMBC(0x128) EMITMBC(0x12a)
+ case 'I': case I_grave: case I_acute: case I_circumflex:
+ case I_diaeresis: CASEMBC(0x128) CASEMBC(0x12a)
+ CASEMBC(0x12c) CASEMBC(0x12e) CASEMBC(0x130)
+ CASEMBC(0x1cf) CASEMBC(0x1ec8)
+ EMIT2('I'); EMIT2(I_grave); EMIT2(I_acute);
+ EMIT2(I_circumflex); EMIT2(I_diaeresis);
+ EMITMBC(0x128) EMITMBC(0x12a)
EMITMBC(0x12c) EMITMBC(0x12e) EMITMBC(0x130)
EMITMBC(0x1cf) EMITMBC(0x1ec8)
return;
@@ -793,13 +853,13 @@ static void nfa_emit_equi_class(int c)
return;
case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
- CASEMBC(0x1e34)
+ CASEMBC(0x1e34)
EMIT2('K'); EMITMBC(0x136) EMITMBC(0x1e8) EMITMBC(0x1e30)
EMITMBC(0x1e34)
return;
case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
- CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
+ CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
EMIT2('L'); EMITMBC(0x139) EMITMBC(0x13b) EMITMBC(0x13d)
EMITMBC(0x13f) EMITMBC(0x141) EMITMBC(0x1e3a)
return;
@@ -808,19 +868,21 @@ static void nfa_emit_equi_class(int c)
EMIT2('M'); EMITMBC(0x1e3e) EMITMBC(0x1e40)
return;
- case 'N': case 0321:
- CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
- CASEMBC(0x1e48)
- EMIT2('N'); EMIT2(0321); EMITMBC(0x143) EMITMBC(0x145)
+ case 'N': case N_virguilla: CASEMBC(0x143) CASEMBC(0x145)
+ CASEMBC(0x147) CASEMBC(0x1e44) CASEMBC(0x1e48)
+ EMIT2('N'); EMIT2(N_virguilla);
+ EMITMBC(0x143) EMITMBC(0x145)
EMITMBC(0x147) EMITMBC(0x1e44) EMITMBC(0x1e48)
return;
- case 'O': case 0322: case 0323: case 0324: case 0325:
- case 0326: case 0330:
- CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
- CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
- EMIT2('O'); EMIT2(0322); EMIT2(0323); EMIT2(0324);
- EMIT2(0325); EMIT2(0326); EMIT2(0330);
+ case 'O': case O_grave: case O_acute: case O_circumflex:
+ case O_virguilla: case O_diaeresis: case O_slash:
+ CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150)
+ CASEMBC(0x1a0) CASEMBC(0x1d1) CASEMBC(0x1ea)
+ CASEMBC(0x1ec) CASEMBC(0x1ece)
+ EMIT2('O'); EMIT2(O_grave); EMIT2(O_acute);
+ EMIT2(O_circumflex); EMIT2(O_virguilla);
+ EMIT2(O_diaeresis); EMIT2(O_slash);
EMITMBC(0x14c) EMITMBC(0x14e) EMITMBC(0x150)
EMITMBC(0x1a0) EMITMBC(0x1d1) EMITMBC(0x1ea)
EMITMBC(0x1ec) EMITMBC(0x1ece)
@@ -831,29 +893,31 @@ static void nfa_emit_equi_class(int c)
return;
case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
- CASEMBC(0x1e58) CASEMBC(0x1e5e)
+ CASEMBC(0x1e58) CASEMBC(0x1e5e)
EMIT2('R'); EMITMBC(0x154) EMITMBC(0x156) EMITMBC(0x158)
EMITMBC(0x1e58) EMITMBC(0x1e5e)
return;
case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
- CASEMBC(0x160) CASEMBC(0x1e60)
+ CASEMBC(0x160) CASEMBC(0x1e60)
EMIT2('S'); EMITMBC(0x15a) EMITMBC(0x15c) EMITMBC(0x15e)
EMITMBC(0x160) EMITMBC(0x1e60)
return;
case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
- CASEMBC(0x1e6a) CASEMBC(0x1e6e)
+ CASEMBC(0x1e6a) CASEMBC(0x1e6e)
EMIT2('T'); EMITMBC(0x162) EMITMBC(0x164) EMITMBC(0x166)
EMITMBC(0x1e6a) EMITMBC(0x1e6e)
return;
- case 'U': case 0331: case 0332: case 0333: case 0334:
- CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
- CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
- CASEMBC(0x1ee6)
- EMIT2('U'); EMIT2(0331); EMIT2(0332); EMIT2(0333);
- EMIT2(0334); EMITMBC(0x168) EMITMBC(0x16a)
+ case 'U': case U_grave: case U_acute: case U_diaeresis:
+ case U_circumflex: CASEMBC(0x168) CASEMBC(0x16a)
+ CASEMBC(0x16c) CASEMBC(0x16e) CASEMBC(0x170)
+ CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
+ CASEMBC(0x1ee6)
+ EMIT2('U'); EMIT2(U_grave); EMIT2(U_acute);
+ EMIT2(U_diaeresis); EMIT2(U_circumflex);
+ EMITMBC(0x168) EMITMBC(0x16a)
EMITMBC(0x16c) EMITMBC(0x16e) EMITMBC(0x170)
EMITMBC(0x172) EMITMBC(0x1af) EMITMBC(0x1d3)
EMITMBC(0x1ee6)
@@ -864,7 +928,7 @@ static void nfa_emit_equi_class(int c)
return;
case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
- CASEMBC(0x1e84) CASEMBC(0x1e86)
+ CASEMBC(0x1e84) CASEMBC(0x1e86)
EMIT2('W'); EMITMBC(0x174) EMITMBC(0x1e80) EMITMBC(0x1e82)
EMITMBC(0x1e84) EMITMBC(0x1e86)
return;
@@ -873,26 +937,29 @@ static void nfa_emit_equi_class(int c)
EMIT2('X'); EMITMBC(0x1e8a) EMITMBC(0x1e8c)
return;
- case 'Y': case 0335:
- CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
- CASEMBC(0x1ef6) CASEMBC(0x1ef8)
- EMIT2('Y'); EMIT2(0335); EMITMBC(0x176) EMITMBC(0x178)
+ case 'Y': case Y_acute: CASEMBC(0x176) CASEMBC(0x178)
+ CASEMBC(0x1e8e) CASEMBC(0x1ef2) CASEMBC(0x1ef6)
+ CASEMBC(0x1ef8)
+ EMIT2('Y'); EMIT2(Y_acute);
+ EMITMBC(0x176) EMITMBC(0x178)
EMITMBC(0x1e8e) EMITMBC(0x1ef2) EMITMBC(0x1ef6)
EMITMBC(0x1ef8)
return;
case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
- CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
+ CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
EMIT2('Z'); EMITMBC(0x179) EMITMBC(0x17b) EMITMBC(0x17d)
EMITMBC(0x1b5) EMITMBC(0x1e90) EMITMBC(0x1e94)
return;
- case 'a': case 0340: case 0341: case 0342:
- case 0343: case 0344: case 0345:
- CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
- CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
- EMIT2('a'); EMIT2(0340); EMIT2(0341); EMIT2(0342);
- EMIT2(0343); EMIT2(0344); EMIT2(0345);
+ case 'a': case a_grave: case a_acute: case a_circumflex:
+ case a_virguilla: case a_diaeresis: case a_ring:
+ CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105)
+ CASEMBC(0x1ce) CASEMBC(0x1df) CASEMBC(0x1e1)
+ CASEMBC(0x1ea3)
+ EMIT2('a'); EMIT2(a_grave); EMIT2(a_acute);
+ EMIT2(a_circumflex); EMIT2(a_virguilla);
+ EMIT2(a_diaeresis); EMIT2(a_ring);
EMITMBC(0x101) EMITMBC(0x103) EMITMBC(0x105)
EMITMBC(0x1ce) EMITMBC(0x1df) EMITMBC(0x1e1)
EMITMBC(0x1ea3)
@@ -902,23 +969,26 @@ static void nfa_emit_equi_class(int c)
EMIT2('b'); EMITMBC(0x1e03) EMITMBC(0x1e07)
return;
- case 'c': case 0347:
- CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
- EMIT2('c'); EMIT2(0347); EMITMBC(0x107) EMITMBC(0x109)
+ case 'c': case c_cedilla: CASEMBC(0x107) CASEMBC(0x109)
+ CASEMBC(0x10b) CASEMBC(0x10d)
+ EMIT2('c'); EMIT2(c_cedilla);
+ EMITMBC(0x107) EMITMBC(0x109)
EMITMBC(0x10b) EMITMBC(0x10d)
return;
case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1e0b)
- CASEMBC(0x1e0f) CASEMBC(0x1e11)
+ CASEMBC(0x1e0f) CASEMBC(0x1e11)
EMIT2('d'); EMITMBC(0x10f) EMITMBC(0x111) EMITMBC(0x1e0b)
EMITMBC(0x1e0f) EMITMBC(0x1e11)
return;
- case 'e': case 0350: case 0351: case 0352: case 0353:
- CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
- CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
- EMIT2('e'); EMIT2(0350); EMIT2(0351); EMIT2(0352);
- EMIT2(0353); EMITMBC(0x113) EMITMBC(0x115)
+ case 'e': case e_grave: case e_acute: case e_circumflex:
+ case e_diaeresis: CASEMBC(0x113) CASEMBC(0x115)
+ CASEMBC(0x117) CASEMBC(0x119) CASEMBC(0x11b)
+ CASEMBC(0x1ebb) CASEMBC(0x1ebd)
+ EMIT2('e'); EMIT2(e_grave); EMIT2(e_acute);
+ EMIT2(e_circumflex); EMIT2(e_diaeresis);
+ EMITMBC(0x113) EMITMBC(0x115)
EMITMBC(0x117) EMITMBC(0x119) EMITMBC(0x11b)
EMITMBC(0x1ebb) EMITMBC(0x1ebd)
return;
@@ -928,24 +998,26 @@ static void nfa_emit_equi_class(int c)
return;
case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
- CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
- CASEMBC(0x1e21)
+ CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7)
+ CASEMBC(0x1f5) CASEMBC(0x1e21)
EMIT2('g'); EMITMBC(0x11d) EMITMBC(0x11f) EMITMBC(0x121)
EMITMBC(0x123) EMITMBC(0x1e5) EMITMBC(0x1e7)
EMITMBC(0x1f5) EMITMBC(0x1e21)
return;
case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
- CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
+ CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
EMIT2('h'); EMITMBC(0x125) EMITMBC(0x127) EMITMBC(0x1e23)
EMITMBC(0x1e27) EMITMBC(0x1e29) EMITMBC(0x1e96)
return;
- case 'i': case 0354: case 0355: case 0356: case 0357:
- CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
- CASEMBC(0x1d0) CASEMBC(0x1ec9)
- EMIT2('i'); EMIT2(0354); EMIT2(0355); EMIT2(0356);
- EMIT2(0357); EMITMBC(0x129) EMITMBC(0x12b)
+ case 'i': case i_grave: case i_acute: case i_circumflex:
+ case i_diaeresis: CASEMBC(0x129) CASEMBC(0x12b)
+ CASEMBC(0x12d) CASEMBC(0x12f) CASEMBC(0x1d0)
+ CASEMBC(0x1ec9)
+ EMIT2('i'); EMIT2(i_grave); EMIT2(i_acute);
+ EMIT2(i_circumflex); EMIT2(i_diaeresis);
+ EMITMBC(0x129) EMITMBC(0x12b)
EMITMBC(0x12d) EMITMBC(0x12f) EMITMBC(0x1d0)
EMITMBC(0x1ec9)
return;
@@ -955,13 +1027,13 @@ static void nfa_emit_equi_class(int c)
return;
case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
- CASEMBC(0x1e35)
+ CASEMBC(0x1e35)
EMIT2('k'); EMITMBC(0x137) EMITMBC(0x1e9) EMITMBC(0x1e31)
EMITMBC(0x1e35)
return;
case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
- CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
+ CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
EMIT2('l'); EMITMBC(0x13a) EMITMBC(0x13c) EMITMBC(0x13e)
EMITMBC(0x140) EMITMBC(0x142) EMITMBC(0x1e3b)
return;
@@ -970,20 +1042,23 @@ static void nfa_emit_equi_class(int c)
EMIT2('m'); EMITMBC(0x1e3f) EMITMBC(0x1e41)
return;
- case 'n': case 0361:
- CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
- CASEMBC(0x1e45) CASEMBC(0x1e49)
- EMIT2('n'); EMIT2(0361); EMITMBC(0x144) EMITMBC(0x146)
+ case 'n': case n_virguilla: CASEMBC(0x144) CASEMBC(0x146)
+ CASEMBC(0x148) CASEMBC(0x149) CASEMBC(0x1e45)
+ CASEMBC(0x1e49)
+ EMIT2('n'); EMIT2(n_virguilla);
+ EMITMBC(0x144) EMITMBC(0x146)
EMITMBC(0x148) EMITMBC(0x149) EMITMBC(0x1e45)
EMITMBC(0x1e49)
return;
- case 'o': case 0362: case 0363: case 0364: case 0365:
- case 0366: case 0370:
- CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
- CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
- EMIT2('o'); EMIT2(0362); EMIT2(0363); EMIT2(0364);
- EMIT2(0365); EMIT2(0366); EMIT2(0370);
+ case 'o': case o_grave: case o_acute: case o_circumflex:
+ case o_virguilla: case o_diaeresis: case o_slash:
+ CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151)
+ CASEMBC(0x1a1) CASEMBC(0x1d2) CASEMBC(0x1eb)
+ CASEMBC(0x1ed) CASEMBC(0x1ecf)
+ EMIT2('o'); EMIT2(o_grave); EMIT2(o_acute);
+ EMIT2(o_circumflex); EMIT2(o_virguilla);
+ EMIT2(o_diaeresis); EMIT2(o_slash);
EMITMBC(0x14d) EMITMBC(0x14f) EMITMBC(0x151)
EMITMBC(0x1a1) EMITMBC(0x1d2) EMITMBC(0x1eb)
EMITMBC(0x1ed) EMITMBC(0x1ecf)
@@ -994,29 +1069,31 @@ static void nfa_emit_equi_class(int c)
return;
case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
- CASEMBC(0x1e59) CASEMBC(0x1e5f)
+ CASEMBC(0x1e59) CASEMBC(0x1e5f)
EMIT2('r'); EMITMBC(0x155) EMITMBC(0x157) EMITMBC(0x159)
EMITMBC(0x1e59) EMITMBC(0x1e5f)
return;
case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
- CASEMBC(0x161) CASEMBC(0x1e61)
+ CASEMBC(0x161) CASEMBC(0x1e61)
EMIT2('s'); EMITMBC(0x15b) EMITMBC(0x15d) EMITMBC(0x15f)
EMITMBC(0x161) EMITMBC(0x1e61)
return;
case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
- CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
+ CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
EMIT2('t'); EMITMBC(0x163) EMITMBC(0x165) EMITMBC(0x167)
EMITMBC(0x1e6b) EMITMBC(0x1e6f) EMITMBC(0x1e97)
return;
- case 'u': case 0371: case 0372: case 0373: case 0374:
- CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
- CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
- CASEMBC(0x1ee7)
- EMIT2('u'); EMIT2(0371); EMIT2(0372); EMIT2(0373);
- EMIT2(0374); EMITMBC(0x169) EMITMBC(0x16b)
+ case 'u': case u_grave: case u_acute: case u_circumflex:
+ case u_diaeresis: CASEMBC(0x169) CASEMBC(0x16b)
+ CASEMBC(0x16d) CASEMBC(0x16f) CASEMBC(0x171)
+ CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
+ CASEMBC(0x1ee7)
+ EMIT2('u'); EMIT2(u_grave); EMIT2(u_acute);
+ EMIT2(u_circumflex); EMIT2(u_diaeresis);
+ EMITMBC(0x169) EMITMBC(0x16b)
EMITMBC(0x16d) EMITMBC(0x16f) EMITMBC(0x171)
EMITMBC(0x173) EMITMBC(0x1b0) EMITMBC(0x1d4)
EMITMBC(0x1ee7)
@@ -1027,7 +1104,7 @@ static void nfa_emit_equi_class(int c)
return;
case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
- CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
+ CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
EMIT2('w'); EMITMBC(0x175) EMITMBC(0x1e81) EMITMBC(0x1e83)
EMITMBC(0x1e85) EMITMBC(0x1e87) EMITMBC(0x1e98)
return;
@@ -1036,16 +1113,17 @@ static void nfa_emit_equi_class(int c)
EMIT2('x'); EMITMBC(0x1e8b) EMITMBC(0x1e8d)
return;
- case 'y': case 0375: case 0377:
- CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
- CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
- EMIT2('y'); EMIT2(0375); EMIT2(0377); EMITMBC(0x177)
+ case 'y': case y_acute: case y_diaeresis: CASEMBC(0x177)
+ CASEMBC(0x1e8f) CASEMBC(0x1e99) CASEMBC(0x1ef3)
+ CASEMBC(0x1ef7) CASEMBC(0x1ef9)
+ EMIT2('y'); EMIT2(y_acute); EMIT2(y_diaeresis);
+ EMITMBC(0x177)
EMITMBC(0x1e8f) EMITMBC(0x1e99) EMITMBC(0x1ef3)
EMITMBC(0x1ef7) EMITMBC(0x1ef9)
return;
case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
- CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
+ CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
EMIT2('z'); EMITMBC(0x17a) EMITMBC(0x17c) EMITMBC(0x17e)
EMITMBC(0x1b6) EMITMBC(0x1e91) EMITMBC(0x1e95)
return;
@@ -1095,6 +1173,7 @@ static int nfa_regatom(void)
int startc = -1;
int endc = -1;
int oldstartc = -1;
+ int save_prev_at_start = prev_at_start;
c = getchr();
switch (c) {
@@ -1411,18 +1490,22 @@ static int nfa_regatom(void)
c = getchr();
}
if (c == 'l' || c == 'c' || c == 'v') {
- if (c == 'l')
- /* \%{n}l \%{n}<l \%{n}>l */
+ if (c == 'l') {
+ // \%{n}l \%{n}<l \%{n}>l
EMIT(cmp == '<' ? NFA_LNUM_LT :
- cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
- else if (c == 'c')
- /* \%{n}c \%{n}<c \%{n}>c */
+ cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
+ if (save_prev_at_start) {
+ at_start = true;
+ }
+ } else if (c == 'c') {
+ // \%{n}c \%{n}<c \%{n}>c
EMIT(cmp == '<' ? NFA_COL_LT :
- cmp == '>' ? NFA_COL_GT : NFA_COL);
- else
- /* \%{n}v \%{n}<v \%{n}>v */
+ cmp == '>' ? NFA_COL_GT : NFA_COL);
+ } else {
+ // \%{n}v \%{n}<v \%{n}>v
EMIT(cmp == '<' ? NFA_VCOL_LT :
- cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
+ cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
+ }
EMIT(n);
break;
} else if (c == '\'' && n == 0) {
@@ -2892,12 +2975,11 @@ static nfa_state_T *post2nfa(int *postfix, int *end, int nfa_calc_size)
return NULL;
#define PUSH(s) st_push((s), &stackp, stack_end)
-#define POP() st_pop(&stackp, stack); \
- if (stackp < stack) \
- { \
- st_error(postfix, end, p); \
- xfree(stack); \
- return NULL; \
+#define POP() st_pop(&stackp, stack); \
+ if (stackp < stack) { \
+ st_error(postfix, end, p); \
+ xfree(stack); \
+ return NULL; \
}
if (nfa_calc_size == FALSE) {
@@ -4238,12 +4320,14 @@ static int check_char_class(int class, int c)
{
switch (class) {
case NFA_CLASS_ALNUM:
- if (c >= 1 && c <= 255 && isalnum(c))
+ if (c >= 1 && c < 128 && isalnum(c)) {
return OK;
+ }
break;
case NFA_CLASS_ALPHA:
- if (c >= 1 && c <= 255 && isalpha(c))
+ if (c >= 1 && c < 128 && isalpha(c)) {
return OK;
+ }
break;
case NFA_CLASS_BLANK:
if (c == ' ' || c == '\t')
@@ -4262,16 +4346,18 @@ static int check_char_class(int class, int c)
return OK;
break;
case NFA_CLASS_LOWER:
- if (vim_islower(c))
+ if (vim_islower(c) && c != 170 && c != 186) {
return OK;
+ }
break;
case NFA_CLASS_PRINT:
if (vim_isprintc(c))
return OK;
break;
case NFA_CLASS_PUNCT:
- if (c >= 1 && c <= 255 && ispunct(c))
+ if (c >= 1 && c < 128 && ispunct(c)) {
return OK;
+ }
break;
case NFA_CLASS_SPACE:
if ((c >= 9 && c <= 13) || (c == ' '))
@@ -4556,9 +4642,11 @@ static int recursive_regmatch(nfa_state_T *state, nfa_pim_T *pim, nfa_regprog_T
if (REG_MULTI)
regline = reg_getline(reglnum);
reginput = regline + save_reginput_col;
- nfa_match = save_nfa_match;
+ if (result != NFA_TOO_EXPENSIVE) {
+ nfa_match = save_nfa_match;
+ nfa_listid = save_nfa_listid;
+ }
nfa_endp = save_nfa_endp;
- nfa_listid = save_nfa_listid;
#ifdef REGEXP_DEBUG
log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
@@ -4850,9 +4938,15 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start,
// recursive_regmatch(). Allow interrupting them with CTRL-C.
fast_breakcheck();
if (got_int) {
+#ifdef NFA_REGEXP_DEBUG_LOG
+ fclose(debug);
+#endif
return false;
}
if (nfa_time_limit != NULL && profile_passed_limit(*nfa_time_limit)) {
+#ifdef NFA_REGEXP_DEBUG_LOG
+ fclose(debug);
+#endif
return false;
}
@@ -4904,10 +4998,10 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start,
} else
addstate(thislist, start, m, NULL, 0);
-#define ADD_STATE_IF_MATCH(state) \
- if (result) { \
- add_state = state->out; \
- add_off = clen; \
+#define ADD_STATE_IF_MATCH(state) \
+ if (result) { \
+ add_state = state->out; \
+ add_off = clen; \
}
/*
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index 34eef83164..c0db076eff 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -108,7 +108,6 @@
#include "nvim/menu.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/move.h"
#include "nvim/normal.h"
@@ -120,6 +119,7 @@
#include "nvim/regexp.h"
#include "nvim/search.h"
#include "nvim/spell.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/terminal.h"
@@ -420,9 +420,10 @@ void update_screen(int type)
}
}
end_search_hl();
- /* May need to redraw the popup menu. */
- if (pum_visible())
+ // May need to redraw the popup menu.
+ if (pum_drawn()) {
pum_redraw();
+ }
/* Reset b_mod_set flags. Going through all windows is probably faster
* than going through all buffers (there could be many buffers). */
@@ -485,6 +486,11 @@ void update_single_line(win_T *wp, linenr_T lnum)
int row;
int j;
+ // Don't do anything if the screen structures are (not yet) valid.
+ if (!screen_valid(true)) {
+ return;
+ }
+
if (lnum >= wp->w_topline && lnum < wp->w_botline
&& foldedCount(wp, lnum, &win_foldinfo) == 0) {
row = 0;
@@ -575,15 +581,6 @@ void update_debug_sign(buf_T *buf, linenr_T lnum)
}
/*
- * Return TRUE when window "wp" has a column to draw signs in.
- */
-static int draw_signcolumn(win_T *wp)
-{
- return (wp->w_buffer->b_signlist != NULL);
-}
-
-
-/*
* Update a single window.
*
* This may cause the windows below it also to be redrawn (when clearing the
@@ -1400,7 +1397,7 @@ static void win_update(win_T *wp)
&& wp->w_lines[idx].wl_valid
&& wp->w_lines[idx].wl_lnum == lnum
&& lnum > wp->w_topline
- && !(dy_flags & DY_LASTLINE)
+ && !(dy_flags & (DY_LASTLINE | DY_TRUNCATE))
&& srow + wp->w_lines[idx].wl_size > wp->w_height
&& diff_check_fill(wp, lnum) == 0
) {
@@ -1483,10 +1480,20 @@ static void win_update(win_T *wp)
/* Window ends in filler lines. */
wp->w_botline = lnum;
wp->w_filler_rows = wp->w_height - srow;
- } else if (dy_flags & DY_LASTLINE) { /* 'display' has "lastline" */
- /*
- * Last line isn't finished: Display "@@@" at the end.
- */
+ } else if (dy_flags & DY_TRUNCATE) { // 'display' has "truncate"
+ int scr_row = wp->w_winrow + wp->w_height - 1;
+
+ // Last line isn't finished: Display "@@@" in the last screen line.
+ screen_puts_len((char_u *)"@@", 2, scr_row, wp->w_wincol,
+ hl_attr(HLF_AT));
+
+ screen_fill(scr_row, scr_row + 1,
+ (int)wp->w_wincol + 2, (int)W_ENDCOL(wp),
+ '@', ' ', hl_attr(HLF_AT));
+ set_empty_rows(wp, srow);
+ wp->w_botline = lnum;
+ } else if (dy_flags & DY_LASTLINE) { // 'display' has "lastline"
+ // Last line isn't finished: Display "@@@" at the end.
screen_fill(wp->w_winrow + wp->w_height - 1,
wp->w_winrow + wp->w_height,
W_ENDCOL(wp) - 3, W_ENDCOL(wp),
@@ -1587,7 +1594,7 @@ static void win_draw_end(win_T *wp, int c1, int c2, int row, int endrow, hlf_T h
' ', ' ', hl_attr(HLF_FC));
}
- if (draw_signcolumn(wp)) {
+ if (signcolumn_on(wp)) {
int nn = n + 2;
/* draw the sign column left of the fold column */
@@ -1628,8 +1635,7 @@ static void win_draw_end(win_T *wp, int c1, int c2, int row, int endrow, hlf_T h
n = nn;
}
- if (draw_signcolumn(wp))
- {
+ if (signcolumn_on(wp)) {
int nn = n + 2;
/* draw the sign column after the fold column */
@@ -1741,8 +1747,8 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
* text */
RL_MEMSET(col, hl_attr(HLF_FL), wp->w_width - col);
- /* If signs are being displayed, add two spaces. */
- if (draw_signcolumn(wp)) {
+ // If signs are being displayed, add two spaces.
+ if (signcolumn_on(wp)) {
len = wp->w_width - col;
if (len > 0) {
if (len > 2) {
@@ -2209,8 +2215,8 @@ win_line (
///< force wrapping
int vcol_off = 0; ///< offset for concealed characters
int did_wcol = false;
- int match_conc = false; ///< cchar for match functions
- int has_match_conc = false; ///< match wants to conceal
+ int match_conc = 0; ///< cchar for match functions
+ int has_match_conc = 0; ///< match wants to conceal
int old_boguscols = 0;
# define VCOL_HLC (vcol - vcol_off)
# define FIX_FOR_BOGUSCOLS \
@@ -2403,11 +2409,14 @@ win_line (
if (v != 0)
line_attr = sign_get_attr((int)v, TRUE);
- /* Highlight the current line in the quickfix window. */
- if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum)
- line_attr = hl_attr(HLF_L);
- if (line_attr != 0)
- area_highlighting = TRUE;
+ // Highlight the current line in the quickfix window.
+ if (bt_quickfix(wp->w_buffer) && qf_current_entry(wp) == lnum) {
+ line_attr = hl_attr(HLF_QFL);
+ }
+
+ if (line_attr != 0) {
+ area_highlighting = true;
+ }
line = ml_get_buf(wp->w_buffer, lnum, FALSE);
ptr = line;
@@ -2578,11 +2587,13 @@ win_line (
shl->startcol = MAXCOL;
shl->endcol = MAXCOL;
shl->attr_cur = 0;
+ shl->is_addpos = false;
v = (long)(ptr - line);
if (cur != NULL) {
cur->pos.cur = 0;
}
- next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+ next_search_hl(wp, shl, lnum, (colnr_T)v,
+ shl == &search_hl ? NULL : cur);
// Need to get the line again, a multi-line regexp may have made it
// invalid.
@@ -2624,7 +2635,12 @@ win_line (
* then. */
if (wp->w_p_cul && lnum == wp->w_cursor.lnum
&& !(wp == curwin && VIsual_active)) {
- line_attr = hl_attr(HLF_CUL);
+ if (line_attr != 0 && !(State & INSERT) && bt_quickfix(wp->w_buffer)
+ && qf_current_entry(wp) == lnum) {
+ line_attr = hl_combine_attr(hl_attr(HLF_CUL), line_attr);
+ } else {
+ line_attr = hl_attr(HLF_CUL);
+ }
area_highlighting = true;
}
@@ -2647,7 +2663,7 @@ win_line (
// Repeat for the whole displayed line.
for (;; ) {
- has_match_conc = false;
+ has_match_conc = 0;
// Skip this quickly when working on the text.
if (draw_state != WL_LINE) {
if (draw_state == WL_CMDLINE - 1 && n_extra == 0) {
@@ -2680,7 +2696,7 @@ win_line (
draw_state = WL_SIGN;
/* Show the sign column when there are any signs in this
* buffer or when using Netbeans. */
- if (draw_signcolumn(wp)) {
+ if (signcolumn_on(wp)) {
int text_sign;
/* Draw two cells with the sign value or blank. */
c_extra = ' ';
@@ -2897,16 +2913,17 @@ win_line (
shl->attr_cur = shl->attr;
if (cur != NULL && syn_name2id((char_u *)"Conceal")
== cur->hlg_id) {
- has_match_conc = true;
+ has_match_conc = v == (long)shl->startcol ? 2 : 1;
match_conc = cur->conceal_char;
} else {
- has_match_conc = match_conc = false;
+ has_match_conc = match_conc = 0;
}
} else if (v == (long)shl->endcol) {
shl->attr_cur = 0;
prev_syntax_id = 0;
- next_search_hl(wp, shl, lnum, (colnr_T)v, cur);
+ next_search_hl(wp, shl, lnum, (colnr_T)v,
+ shl == &search_hl ? NULL : cur);
pos_inprogress = !(cur == NULL || cur->pos.cur == 0);
/* Need to get the line again, a multi-line regexp
@@ -3416,12 +3433,10 @@ win_line (
/*
* Handling of non-printable characters.
*/
- if (!(chartab[c & 0xff] & CT_PRINT_CHAR)) {
- /*
- * when getting a character from the file, we may have to
- * turn it into something else on the way to putting it
- * into "ScreenLines".
- */
+ if (!vim_isprintc(c)) {
+ // when getting a character from the file, we may have to
+ // turn it into something else on the way to putting it
+ // into "ScreenLines".
if (c == TAB && (!wp->w_p_list || lcs_tab1)) {
int tab_len = 0;
long vcol_adjusted = vcol; // removed showbreak length
@@ -3626,11 +3641,11 @@ win_line (
if (wp->w_p_cole > 0
&& (wp != curwin || lnum != wp->w_cursor.lnum
|| conceal_cursor_line(wp))
- && ((syntax_flags & HL_CONCEAL) != 0 || has_match_conc)
+ && ((syntax_flags & HL_CONCEAL) != 0 || has_match_conc > 0)
&& !(lnum_in_visual_area
&& vim_strchr(wp->w_p_cocu, 'v') == NULL)) {
char_attr = conceal_attr;
- if (prev_syntax_id != syntax_seqnr
+ if ((prev_syntax_id != syntax_seqnr || has_match_conc > 1)
&& (syn_get_sub_char() != NUL || match_conc
|| wp->w_p_cole == 1)
&& wp->w_p_cole != 3) {
@@ -3743,18 +3758,18 @@ win_line (
if ((long)(wp->w_p_wrap ? wp->w_skipcol : wp->w_leftcol) > prevcol)
++prevcol;
- /* Invert at least one char, used for Visual and empty line or
- * highlight match at end of line. If it's beyond the last
- * char on the screen, just overwrite that one (tricky!) Not
- * needed when a '$' was displayed for 'list'. */
- prevcol_hl_flag = FALSE;
- if (prevcol == (long)search_hl.startcol)
- prevcol_hl_flag = TRUE;
- else {
+ // Invert at least one char, used for Visual and empty line or
+ // highlight match at end of line. If it's beyond the last
+ // char on the screen, just overwrite that one (tricky!) Not
+ // needed when a '$' was displayed for 'list'.
+ prevcol_hl_flag = false;
+ if (!search_hl.is_addpos && prevcol == (long)search_hl.startcol) {
+ prevcol_hl_flag = true;
+ } else {
cur = wp->w_match_head;
while (cur != NULL) {
- if (prevcol == (long)cur->hl.startcol) {
- prevcol_hl_flag = TRUE;
+ if (!cur->hl.is_addpos && prevcol == (long)cur->hl.startcol) {
+ prevcol_hl_flag = true;
break;
}
cur = cur->next;
@@ -3804,10 +3819,13 @@ win_line (
shl_flag = TRUE;
} else
shl = &cur->hl;
- if ((ptr - line) - 1 == (long)shl->startcol)
+ if ((ptr - line) - 1 == (long)shl->startcol
+ && (shl == &search_hl || !shl->is_addpos)) {
char_attr = shl->attr;
- if (shl != &search_hl && cur != NULL)
+ }
+ if (shl != &search_hl && cur != NULL) {
cur = cur->next;
+ }
}
}
ScreenAttrs[off] = char_attr;
@@ -4821,15 +4839,12 @@ void win_redr_status(win_T *wp)
wp->w_redr_status = FALSE;
if (wp->w_status_height == 0) {
- /* no status line, can only be last window */
- redraw_cmdline = TRUE;
- } else if (!redrawing()
- /* don't update status line when popup menu is visible and may be
- * drawn over it */
- || pum_visible()
- ) {
- /* Don't redraw right now, do it later. */
- wp->w_redr_status = TRUE;
+ // no status line, can only be last window
+ redraw_cmdline = true;
+ } else if (!redrawing() || pum_drawn()) {
+ // Don't redraw right now, do it later. Don't update status line when
+ // popup menu is visible and may be drawn over it
+ wp->w_redr_status = true;
} else if (*p_stl != NUL || *wp->w_p_stl != NUL) {
/* redraw custom status line */
redraw_custom_statusline(wp);
@@ -4897,7 +4912,7 @@ void win_redr_status(win_T *wp)
screen_fill(row, row + 1, len + wp->w_wincol,
this_ru_col + wp->w_wincol, fillchar, fillchar, attr);
- if (get_keymap_str(wp, NameBuff, MAXPATHL)
+ if (get_keymap_str(wp, (char_u *)"<%s>", NameBuff, MAXPATHL)
&& this_ru_col - len > (int)(STRLEN(NameBuff) + 1))
screen_puts(NameBuff, row, (int)(this_ru_col - STRLEN(NameBuff)
- 1 + wp->w_wincol), attr);
@@ -4925,8 +4940,8 @@ void win_redr_status(win_T *wp)
*/
static void redraw_custom_statusline(win_T *wp)
{
- static int entered = FALSE;
- int save_called_emsg = called_emsg;
+ static int entered = false;
+ int saved_did_emsg = did_emsg;
/* When called recursively return. This can happen when the statusline
* contains an expression that triggers a redraw. */
@@ -4934,18 +4949,18 @@ static void redraw_custom_statusline(win_T *wp)
return;
entered = TRUE;
- called_emsg = FALSE;
- win_redr_custom(wp, FALSE);
- if (called_emsg) {
- /* When there is an error disable the statusline, otherwise the
- * display is messed up with errors and a redraw triggers the problem
- * again and again. */
+ did_emsg = false;
+ win_redr_custom(wp, false);
+ if (did_emsg) {
+ // When there is an error disable the statusline, otherwise the
+ // display is messed up with errors and a redraw triggers the problem
+ // again and again.
set_string_option_direct((char_u *)"statusline", -1,
(char_u *)"", OPT_FREE | (*wp->w_p_stl != NUL
? OPT_LOCAL : OPT_GLOBAL), SID_ERROR);
}
- called_emsg |= save_called_emsg;
- entered = FALSE;
+ did_emsg |= saved_did_emsg;
+ entered = false;
}
/*
@@ -4978,8 +4993,9 @@ int stl_connected(win_T *wp)
int
get_keymap_str (
win_T *wp,
- char_u *buf, /* buffer for the result */
- int len /* length of buffer */
+ char_u *fmt, // format string containing one %s item
+ char_u *buf, // buffer for the result
+ int len // length of buffer
)
{
char_u *p;
@@ -5006,10 +5022,9 @@ get_keymap_str (
else
p = (char_u *)"lang";
}
- if ((int)(STRLEN(p) + 3) < len)
- sprintf((char *)buf, "<%s>", p);
- else
+ if (vim_snprintf((char *)buf, len, (char *)fmt, p) > len - 1) {
buf[0] = NUL;
+ }
xfree(s);
}
return buf[0] != NUL;
@@ -5278,7 +5293,7 @@ void screen_puts_len(char_u *text, int textlen, int row, int col, int attr)
int force_redraw_next = FALSE;
int need_redraw;
- const int l_has_mbyte = has_mbyte;
+ const bool l_has_mbyte = has_mbyte;
const bool l_enc_utf8 = enc_utf8;
const int l_enc_dbcs = enc_dbcs;
@@ -5445,9 +5460,6 @@ void screen_puts_len(char_u *text, int textlen, int row, int col, int attr)
/* If we detected the next character needs to be redrawn, but the text
* doesn't extend up to there, update the character here. */
if (force_redraw_next && col < screen_Columns) {
- if (l_enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1)
- screen_char_2(off, row, col);
- else
screen_char(off, row, col);
}
}
@@ -5546,8 +5558,9 @@ static void prepare_search_hl(win_T *wp, linenr_T lnum)
// in progress
n = 0;
while (shl->first_lnum < lnum && (shl->rm.regprog != NULL
- || (cur != NULL && pos_inprogress))) {
- next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n, cur);
+ || (cur != NULL && pos_inprogress))) {
+ next_search_hl(wp, shl, shl->first_lnum, (colnr_T)n,
+ shl == &search_hl ? NULL : cur);
pos_inprogress = !(cur == NULL || cur->pos.cur == 0);
if (shl->lnum != 0) {
shl->first_lnum = shl->lnum
@@ -5680,6 +5693,8 @@ next_search_hl (
}
}
+/// If there is a match fill "shl" and return one.
+/// Return zero otherwise.
static int
next_search_hl_pos(
match_T *shl, // points to a match
@@ -5689,47 +5704,50 @@ next_search_hl_pos(
)
{
int i;
- int bot = -1;
+ int found = -1;
shl->lnum = 0;
for (i = posmatch->cur; i < MAXPOSMATCH; i++) {
- if (posmatch->pos[i].lnum == 0) {
+ llpos_T *pos = &posmatch->pos[i];
+
+ if (pos->lnum == 0) {
break;
}
- if (posmatch->pos[i].col < mincol) {
+ if (pos->len == 0 && pos->col < mincol) {
continue;
}
- if (posmatch->pos[i].lnum == lnum) {
- if (bot != -1) {
- // partially sort positions by column numbers
- // on the same line
- if (posmatch->pos[i].col < posmatch->pos[bot].col) {
- llpos_T tmp = posmatch->pos[i];
+ if (pos->lnum == lnum) {
+ if (found >= 0) {
+ // if this match comes before the one at "found" then swap
+ // them
+ if (pos->col < posmatch->pos[found].col) {
+ llpos_T tmp = *pos;
- posmatch->pos[i] = posmatch->pos[bot];
- posmatch->pos[bot] = tmp;
+ *pos = posmatch->pos[found];
+ posmatch->pos[found] = tmp;
}
} else {
- bot = i;
- shl->lnum = lnum;
+ found = i;
}
}
}
posmatch->cur = 0;
- if (bot != -1) {
- colnr_T start = posmatch->pos[bot].col == 0
- ? 0: posmatch->pos[bot].col - 1;
- colnr_T end = posmatch->pos[bot].col == 0
- ? MAXCOL : start + posmatch->pos[bot].len;
+ if (found >= 0) {
+ colnr_T start = posmatch->pos[found].col == 0
+ ? 0: posmatch->pos[found].col - 1;
+ colnr_T end = posmatch->pos[found].col == 0
+ ? MAXCOL : start + posmatch->pos[found].len;
+ shl->lnum = lnum;
shl->rm.startpos[0].lnum = 0;
shl->rm.startpos[0].col = start;
shl->rm.endpos[0].lnum = 0;
shl->rm.endpos[0].col = end;
- posmatch->cur = bot + 1;
- return true;
+ shl->is_addpos = true;
+ posmatch->cur = found + 1;
+ return 1;
}
- return false;
+ return 0;
}
static void screen_start_highlight(int attr)
@@ -6734,10 +6752,12 @@ int showmode(void)
if (p_fkmap)
MSG_PUTS_ATTR(farsi_text_5, attr);
if (State & LANGMAP) {
- if (curwin->w_p_arab)
+ if (curwin->w_p_arab) {
MSG_PUTS_ATTR(_(" Arabic"), attr);
- else
- MSG_PUTS_ATTR(_(" (lang)"), attr);
+ } else if (get_keymap_str(curwin, (char_u *)" (%s)",
+ NameBuff, MAXPATHL)) {
+ MSG_PUTS_ATTR(NameBuff, attr);
+ }
}
if ((State & INSERT) && p_paste)
MSG_PUTS_ATTR(_(" (paste)"), attr);
@@ -6816,12 +6836,18 @@ void unshowmode(bool force)
if (!redrawing() || (!force && char_avail() && !KeyTyped)) {
redraw_cmdline = true; // delete mode later
} else {
+ clearmode();
+ }
+}
+
+// Clear the mode message.
+void clearmode(void)
+{
msg_pos_mode();
if (Recording) {
recording_mode(hl_attr(HLF_CM));
}
msg_clr_eos();
- }
}
static void recording_mode(int attr)
@@ -6871,16 +6897,17 @@ static void draw_tabline(void)
/* Use the 'tabline' option if it's set. */
if (*p_tal != NUL) {
- int save_called_emsg = called_emsg;
+ int saved_did_emsg = did_emsg;
- /* Check for an error. If there is one we would loop in redrawing the
- * screen. Avoid that by making 'tabline' empty. */
- called_emsg = FALSE;
- win_redr_custom(NULL, FALSE);
- if (called_emsg)
+ // Check for an error. If there is one we would loop in redrawing the
+ // screen. Avoid that by making 'tabline' empty.
+ did_emsg = false;
+ win_redr_custom(NULL, false);
+ if (did_emsg) {
set_string_option_direct((char_u *)"tabline", -1,
- (char_u *)"", OPT_FREE, SID_ERROR);
- called_emsg |= save_called_emsg;
+ (char_u *)"", OPT_FREE, SID_ERROR);
+ }
+ did_emsg |= saved_did_emsg;
} else {
FOR_ALL_TABS(tp) {
++tabcount;
@@ -7075,9 +7102,9 @@ void showruler(int always)
{
if (!always && !redrawing())
return;
- if (pum_visible()) {
- /* Don't redraw right now, do it later. */
- curwin->w_redr_status = TRUE;
+ if (pum_drawn()) {
+ // Don't redraw right now, do it later.
+ curwin->w_redr_status = true;
return;
}
if ((*p_stl != NUL || *curwin->w_p_stl != NUL) && curwin->w_status_height) {
@@ -7113,9 +7140,10 @@ static void win_redr_ruler(win_T *wp, int always)
if (wp == lastwin && lastwin->w_status_height == 0)
if (edit_submode != NULL)
return;
- /* Don't draw the ruler when the popup menu is visible, it may overlap. */
- if (pum_visible())
+ // Don't draw the ruler when the popup menu is visible, it may overlap.
+ if (pum_drawn()) {
return;
+ }
if (*p_ruf) {
int save_called_emsg = called_emsg;
@@ -7365,7 +7393,7 @@ void screen_resize(int width, int height)
redrawcmdline();
} else {
update_topline();
- if (pum_visible()) {
+ if (pum_drawn()) {
redraw_later(NOT_VALID);
ins_compl_show_pum(); /* This includes the redraw. */
} else
diff --git a/src/nvim/search.c b/src/nvim/search.c
index 6e2b69fff7..2a087276e7 100644
--- a/src/nvim/search.c
+++ b/src/nvim/search.c
@@ -31,7 +31,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/move.h"
#include "nvim/mouse.h"
#include "nvim/normal.h"
@@ -3977,12 +3976,10 @@ current_search (
return OK;
}
-/*
- * Check if the pattern is one character or zero-width.
- * If move is true, check from the beginning of the buffer,
- * else from the current cursor position.
- * Returns TRUE, FALSE or -1 for failure.
- */
+/// Check if the pattern is one character long or zero-width.
+/// If move is true, check from the beginning of the buffer,
+/// else from the current cursor position.
+/// Returns TRUE, FALSE or -1 for failure.
static int is_one_char(char_u *pattern, bool move)
{
regmmatch_T regmatch;
@@ -3992,11 +3989,17 @@ static int is_one_char(char_u *pattern, bool move)
int save_called_emsg = called_emsg;
int flag = 0;
+ if (pattern == NULL) {
+ pattern = spats[last_idx].pat;
+ }
+
if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
SEARCH_KEEP, &regmatch) == FAIL)
return -1;
- /* move to match */
+ // init startcol correctly
+ regmatch.startpos[0].col = -1;
+ // move to match
if (move) {
clearpos(&pos);
} else {
@@ -4004,21 +4007,29 @@ static int is_one_char(char_u *pattern, bool move)
/* accept a match at the cursor position */
flag = SEARCH_START;
}
- if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
- SEARCH_KEEP + flag, RE_SEARCH, 0, NULL) != FAIL) {
- /* Zero-width pattern should match somewhere, then we can check if
- * start and end are in the same position. */
- called_emsg = FALSE;
- nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
- pos.lnum, (colnr_T)0, NULL);
-
- if (!called_emsg)
+ if (searchit(curwin, curbuf, &pos, FORWARD, pattern, 1,
+ SEARCH_KEEP + flag, RE_SEARCH, 0, NULL) != FAIL) {
+ // Zero-width pattern should match somewhere, then we can check if
+ // start and end are in the same position.
+ called_emsg = false;
+ do {
+ regmatch.startpos[0].col++;
+ nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
+ pos.lnum, regmatch.startpos[0].col, NULL);
+ if (!nmatched) {
+ break;
+ }
+ } while (regmatch.startpos[0].col < pos.col);
+
+ if (!called_emsg) {
result = (nmatched != 0
&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
&& regmatch.startpos[0].col == regmatch.endpos[0].col);
-
- if (!result && inc(&pos) >= 0 && pos.col == regmatch.endpos[0].col)
- result = TRUE;
+ // one char width
+ if (!result && inc(&pos) >= 0 && pos.col == regmatch.endpos[0].col) {
+ result = true;
+ }
+ }
}
called_emsg |= save_called_emsg;
@@ -4550,7 +4561,7 @@ exit_matched:
}
line_breakcheck();
if (action == ACTION_EXPAND)
- ins_compl_check_keys(30);
+ ins_compl_check_keys(30, false);
if (got_int || compl_interrupted)
break;
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index 51c8597d53..197b029591 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -5,7 +5,6 @@
#include <stdint.h>
#include <inttypes.h>
#include <errno.h>
-#include <fcntl.h>
#include <assert.h>
#include <msgpack.h>
@@ -28,7 +27,6 @@
#include "nvim/api/private/helpers.h"
#include "nvim/buffer.h"
#include "nvim/buffer_defs.h"
-#include "nvim/misc2.h"
#include "nvim/ex_getln.h"
#include "nvim/search.h"
#include "nvim/regexp.h"
@@ -36,6 +34,7 @@
#include "nvim/version.h"
#include "nvim/path.h"
#include "nvim/fileio.h"
+#include "nvim/os/fileio.h"
#include "nvim/strings.h"
#include "nvim/quickfix.h"
#include "nvim/eval/encode.h"
@@ -119,9 +118,10 @@ KHASH_SET_INIT_STR(strset)
// E576: Missing '>'
// E577: Illegal register name
// E886: Can't rename viminfo file to %s!
+// E929: Too many viminfo temp files, like %s!
// Now only six of them are used:
// E137: ShaDa file is not writeable (for pre-open checks)
-// E138: All %s.tmp.X files exist, cannot write ShaDa file!
+// E929: All %s.tmp.X files exist, cannot write ShaDa file!
// RCERR (E576) for critical read errors.
// RNERR (E136) for various errors when renaming.
// RERR (E575) for various errors inside read ShaDa file.
@@ -149,6 +149,9 @@ KHASH_SET_INIT_STR(strset)
/// Common prefix for all ignorable “write†errors
#define WERR "E574: "
+/// Callback function for add_search_pattern
+typedef void (*SearchPatternGetter)(SearchPattern *);
+
/// Flags for shada_read_file and children
typedef enum {
kShaDaWantInfo = 1, ///< Load non-mark information
@@ -409,7 +412,7 @@ typedef struct sd_read_def {
ShaDaFileSkipper skip; ///< Function used to skip some bytes.
void *cookie; ///< Data describing object read from.
bool eof; ///< True if reader reached end of file.
- char *error; ///< Error message in case of error.
+ const char *error; ///< Error message in case of error.
uintmax_t fpos; ///< Current position (amount of bytes read since
///< reader structure initialization). May overflow.
vimconv_T sd_conv; ///< Structure used for converting encodings of some
@@ -433,7 +436,7 @@ typedef struct sd_write_def {
ShaDaFileWriter write; ///< Writer function.
ShaDaWriteCloser close; ///< Close function.
void *cookie; ///< Data describing object written to.
- char *error; ///< Error message in case of error.
+ const char *error; ///< Error message in case of error.
vimconv_T sd_conv; ///< Structure used for converting encodings of some
///< items.
} ShaDaWriteDef;
@@ -666,38 +669,14 @@ static ptrdiff_t read_file(ShaDaReadDef *const sd_reader, void *const dest,
const size_t size)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
- size_t read_bytes = 0;
- bool did_try_to_free = false;
- const int fd = (int)(intptr_t) sd_reader->cookie;
- while (read_bytes != size) {
- const ptrdiff_t cur_read_bytes = read(fd, ((char *) dest) + read_bytes,
- size - read_bytes);
- if (cur_read_bytes > 0) {
- read_bytes += (size_t) cur_read_bytes;
- sd_reader->fpos += (uintmax_t) cur_read_bytes;
- assert(read_bytes <= size);
- }
- if (cur_read_bytes < 0) {
- if (errno == EINTR || errno == EAGAIN) {
- errno = 0;
- continue;
- } else if (errno == ENOMEM && !did_try_to_free) {
- try_to_free_memory();
- did_try_to_free = true;
- errno = 0;
- continue;
- } else {
- sd_reader->error = strerror(errno);
- errno = 0;
- return -1;
- }
- }
- if (cur_read_bytes == 0) {
- sd_reader->eof = true;
- break;
- }
+ const ptrdiff_t ret = file_read(sd_reader->cookie, dest, size);
+ sd_reader->eof = file_eof(sd_reader->cookie);
+ if (ret < 0) {
+ sd_reader->error = os_strerror((int)ret);
+ return -1;
}
- return (ptrdiff_t) read_bytes;
+ sd_reader->fpos += (size_t)ret;
+ return ret;
}
/// Read one character
@@ -720,50 +699,26 @@ static ptrdiff_t write_file(ShaDaWriteDef *const sd_writer,
const size_t size)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
- size_t written_bytes = 0;
- const int fd = (int)(intptr_t) sd_writer->cookie;
- while (written_bytes != size) {
- const ptrdiff_t cur_written_bytes = write(fd, (char *) dest + written_bytes,
- size - written_bytes);
- if (cur_written_bytes > 0) {
- written_bytes += (size_t) cur_written_bytes;
- }
- if (cur_written_bytes < 0) {
- if (errno == EINTR || errno == EAGAIN) {
- errno = 0;
- continue;
- } else {
- sd_writer->error = strerror(errno);
- errno = 0;
- return -1;
- }
- }
- if (cur_written_bytes == 0) {
- sd_writer->error = "Zero bytes written.";
- return -1;
- }
+ const ptrdiff_t ret = file_write(sd_writer->cookie, dest, size);
+ if (ret < 0) {
+ sd_writer->error = os_strerror((int)ret);
+ return -1;
}
- return (ptrdiff_t) written_bytes;
+ return ret;
}
/// Wrapper for closing file descriptors opened for reading
static void close_sd_reader(ShaDaReadDef *const sd_reader)
FUNC_ATTR_NONNULL_ALL
{
- close_file((int)(intptr_t) sd_reader->cookie);
+ close_file(sd_reader->cookie);
}
/// Wrapper for closing file descriptors opened for writing
static void close_sd_writer(ShaDaWriteDef *const sd_writer)
FUNC_ATTR_NONNULL_ALL
{
- const int fd = (int)(intptr_t) sd_writer->cookie;
- if (os_fsync(fd) < 0) {
- emsgf(_(SERR "System error while synchronizing ShaDa file: %s"),
- os_strerror(errno));
- errno = 0;
- }
- close_file(fd);
+ close_file(sd_writer->cookie);
}
/// Wrapper for read that reads to IObuff and ignores bytes read
@@ -779,19 +734,20 @@ static int sd_reader_skip_read(ShaDaReadDef *const sd_reader,
const size_t offset)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
- size_t read_bytes = 0;
- do {
- ptrdiff_t new_read_bytes = sd_reader->read(
- sd_reader, IObuff, (size_t) (offset - read_bytes > IOSIZE
- ? IOSIZE
- : offset - read_bytes));
- if (new_read_bytes == -1) {
- return FAIL;
+ const ptrdiff_t skip_bytes = file_skip(sd_reader->cookie, offset);
+ if (skip_bytes < 0) {
+ sd_reader->error = os_strerror((int)skip_bytes);
+ return FAIL;
+ } else if (skip_bytes != (ptrdiff_t)offset) {
+ assert(skip_bytes < (ptrdiff_t)offset);
+ sd_reader->eof = file_eof(sd_reader->cookie);
+ if (!sd_reader->eof) {
+ sd_reader->error = _("too few bytes read");
}
- read_bytes += (size_t) new_read_bytes;
- } while (read_bytes < offset && !sd_reader->eof);
-
- return (read_bytes == offset ? OK : FAIL);
+ return FAIL;
+ }
+ sd_reader->fpos += (size_t)skip_bytes;
+ return OK;
}
/// Wrapper for read that can be used when lseek cannot be used
@@ -824,37 +780,6 @@ static ShaDaReadResult sd_reader_skip(ShaDaReadDef *const sd_reader,
return kSDReadStatusSuccess;
}
-/// Wrapper for opening file descriptors
-///
-/// All arguments are passed to os_open().
-///
-/// @return file descriptor or libuv error on failure.
-static int open_file(const char *const fname, const int flags, const int mode)
- FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
-{
- bool did_try_to_free = false;
- int fd;
-open_file_start:
- fd = os_open(fname, flags, mode);
-
- if (fd < 0) {
- if (fd == UV_ENOENT) {
- return fd;
- }
- if (fd == UV_ENOMEM && !did_try_to_free) {
- try_to_free_memory();
- did_try_to_free = true;
- goto open_file_start;
- }
- if (fd != UV_EEXIST) {
- emsgf(_(SERR "System error while opening ShaDa file %s: %s"),
- fname, os_strerror(fd));
- }
- return fd;
- }
- return fd;
-}
-
/// Open ShaDa file for reading
///
/// @param[in] fname File name to open.
@@ -865,11 +790,7 @@ static int open_shada_file_for_reading(const char *const fname,
ShaDaReadDef *sd_reader)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
- const intptr_t fd = (intptr_t) open_file(fname, O_RDONLY, 0);
-
- if (fd < 0) {
- return (int) fd;
- }
+ int error;
*sd_reader = (ShaDaReadDef) {
.read = &read_file,
@@ -878,8 +799,11 @@ static int open_shada_file_for_reading(const char *const fname,
.error = NULL,
.eof = false,
.fpos = 0,
- .cookie = (void *) fd,
+ .cookie = file_open_new(&error, fname, kFileReadOnly, 0),
};
+ if (sd_reader->cookie == NULL) {
+ return error;
+ }
convert_setup(&sd_reader->sd_conv, "utf-8", p_enc);
@@ -887,18 +811,12 @@ static int open_shada_file_for_reading(const char *const fname,
}
/// Wrapper for closing file descriptors
-static void close_file(int fd)
+static void close_file(void *cookie)
{
-close_file_start:
- if (close(fd) == -1) {
- if (errno == EINTR) {
- errno = 0;
- goto close_file_start;
- } else {
- emsgf(_(SERR "System error while closing ShaDa file: %s"),
- strerror(errno));
- errno = 0;
- }
+ const int error = file_free(cookie);
+ if (error != 0) {
+ emsgf(_(SERR "System error while closing ShaDa file: %s"),
+ os_strerror(error));
}
}
@@ -978,7 +896,7 @@ static int shada_read_file(const char *const file, const int flags)
}
if (of_ret != 0) {
- if (of_ret == UV_ENOENT && (flags & kShaDaMissingError)) {
+ if (of_ret != UV_ENOENT || (flags & kShaDaMissingError)) {
emsgf(_(SERR "System error while opening ShaDa file %s for reading: %s"),
fname, os_strerror(of_ret));
}
@@ -1421,8 +1339,8 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags)
}
}
if (!op_register_set(cur_entry.data.reg.name, (yankreg_T) {
- .y_array = (char_u **) cur_entry.data.reg.contents,
- .y_size = (linenr_T) cur_entry.data.reg.contents_size,
+ .y_array = (char_u **)cur_entry.data.reg.contents,
+ .y_size = cur_entry.data.reg.contents_size,
.y_type = cur_entry.data.reg.type,
.y_width = (colnr_T) cur_entry.data.reg.width,
.timestamp = cur_entry.timestamp,
@@ -1609,7 +1527,7 @@ static const char *shada_get_default_file(void)
FUNC_ATTR_WARN_UNUSED_RESULT
{
if (default_shada_file == NULL) {
- char *shada_dir = stdpaths_user_data_subpath("shada", 0);
+ char *shada_dir = stdpaths_user_data_subpath("shada", 0, false);
default_shada_file = concat_fnames_realloc(shada_dir, "main.shada", true);
}
return default_shada_file;
@@ -1661,7 +1579,9 @@ static char *shada_filename(const char *file)
do { \
const String s_ = (s); \
msgpack_pack_bin(spacker, s_.size); \
- msgpack_pack_bin_body(spacker, s_.data, s_.size); \
+ if (s_.size > 0) { \
+ msgpack_pack_bin_body(spacker, s_.data, s_.size); \
+ } \
} while (0)
/// Write single ShaDa entry
@@ -2066,7 +1986,7 @@ static ShaDaWriteResult shada_pack_encoded_entry(msgpack_packer *const packer,
entry.data.data.reg.contents =
xmemdup(entry.data.data.reg.contents,
(entry.data.data.reg.contents_size
- * sizeof(entry.data.data.reg.contents)));
+ * sizeof(entry.data.data.reg.contents[0])));
for (size_t i = 0; i < entry.data.data.reg.contents_size; i++) {
if (i >= first_non_ascii) {
entry.data.data.reg.contents[i] = get_converted_string(
@@ -2402,6 +2322,113 @@ static inline ShaDaWriteResult shada_read_when_writing(
return ret;
}
+/// Get list of buffers to write to the shada file
+///
+/// @param[in] removable_bufs Buffers which are ignored
+///
+/// @return ShadaEntry List of buffers to save, kSDItemBufferList entry.
+static inline ShadaEntry shada_get_buflist(
+ khash_t(bufset) *const removable_bufs)
+ FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_ALWAYS_INLINE
+{
+ int max_bufs = get_shada_parameter('%');
+ size_t buf_count = 0;
+#define IGNORE_BUF(buf)\
+ (buf->b_ffname == NULL || !buf->b_p_bl || bt_quickfix(buf) \
+ || in_bufset(removable_bufs, buf)) // NOLINT(whitespace/indent)
+ FOR_ALL_BUFFERS(buf) {
+ if (!IGNORE_BUF(buf) && (max_bufs < 0 || buf_count < (size_t)max_bufs)) {
+ buf_count++;
+ }
+ }
+
+ ShadaEntry buflist_entry = (ShadaEntry) {
+ .type = kSDItemBufferList,
+ .timestamp = os_time(),
+ .data = {
+ .buffer_list = {
+ .size = buf_count,
+ .buffers = xmalloc(buf_count
+ * sizeof(*buflist_entry.data.buffer_list.buffers)),
+ },
+ },
+ };
+ size_t i = 0;
+ FOR_ALL_BUFFERS(buf) {
+ if (IGNORE_BUF(buf)) {
+ continue;
+ }
+ if (i >= buf_count) {
+ break;
+ }
+ buflist_entry.data.buffer_list.buffers[i] = (struct buffer_list_buffer) {
+ .pos = buf->b_last_cursor.mark,
+ .fname = (char *)buf->b_ffname,
+ .additional_data = buf->additional_data,
+ };
+ i++;
+ }
+
+#undef IGNORE_BUF
+ return buflist_entry;
+}
+
+/// Save search pattern to PossiblyFreedShadaEntry
+///
+/// @param[out] ret_pse Location where result will be saved.
+/// @param[in] get_pattern Function used to get pattern.
+/// @param[in] is_substitute_pattern True if pattern in question is substitute
+/// pattern. Also controls whether some
+/// fields should be initialized to default
+/// or values from get_pattern.
+/// @param[in] search_last_used Result of search_was_last_used().
+/// @param[in] search_highlighted True if search pattern was highlighted by
+/// &hlsearch and this information should be
+/// saved.
+static inline void add_search_pattern(PossiblyFreedShadaEntry *const ret_pse,
+ const SearchPatternGetter get_pattern,
+ const bool is_substitute_pattern,
+ const bool search_last_used,
+ const bool search_highlighted)
+ FUNC_ATTR_ALWAYS_INLINE
+{
+ const ShadaEntry defaults = sd_default_values[kSDItemSearchPattern];
+ SearchPattern pat;
+ get_pattern(&pat);
+ if (pat.pat != NULL) {
+ *ret_pse = (PossiblyFreedShadaEntry) {
+ .can_free_entry = false,
+ .data = {
+ .type = kSDItemSearchPattern,
+ .timestamp = pat.timestamp,
+ .data = {
+ .search_pattern = {
+ .magic = pat.magic,
+ .smartcase = !pat.no_scs,
+ .has_line_offset = (is_substitute_pattern
+ ? defaults.data.search_pattern.has_line_offset
+ : pat.off.line),
+ .place_cursor_at_end = (
+ is_substitute_pattern
+ ? defaults.data.search_pattern.place_cursor_at_end
+ : pat.off.end),
+ .offset = (is_substitute_pattern
+ ? defaults.data.search_pattern.offset
+ : pat.off.off),
+ .is_last_used = (is_substitute_pattern ^ search_last_used),
+ .is_substitute_pattern = is_substitute_pattern,
+ .highlighted = ((is_substitute_pattern ^ search_last_used)
+ && search_highlighted),
+ .pat = (char *)pat.pat,
+ .additional_data = pat.additional_data,
+ .search_backward = (!is_substitute_pattern && pat.off.dir == '?'),
+ }
+ }
+ }
+ };
+ }
+}
+
/// Write ShaDa file
///
/// @param[in] sd_writer Structure containing file writer definition.
@@ -2508,46 +2535,13 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
// Write buffer list
if (find_shada_parameter('%') != NULL) {
- size_t buf_count = 0;
-#define IGNORE_BUF(buf)\
- (buf->b_ffname == NULL || !buf->b_p_bl || bt_quickfix(buf) \
- || in_bufset(&removable_bufs, buf))
- FOR_ALL_BUFFERS(buf) {
- if (!IGNORE_BUF(buf)) {
- buf_count++;
- }
- }
-
- ShadaEntry buflist_entry = (ShadaEntry) {
- .type = kSDItemBufferList,
- .timestamp = os_time(),
- .data = {
- .buffer_list = {
- .size = buf_count,
- .buffers = xmalloc(buf_count
- * sizeof(*buflist_entry.data.buffer_list.buffers)),
- },
- },
- };
- size_t i = 0;
- FOR_ALL_BUFFERS(buf) {
- if (IGNORE_BUF(buf)) {
- continue;
- }
- buflist_entry.data.buffer_list.buffers[i] = (struct buffer_list_buffer) {
- .pos = buf->b_last_cursor.mark,
- .fname = (char *) buf->b_ffname,
- .additional_data = buf->additional_data,
- };
- i++;
- }
+ ShadaEntry buflist_entry = shada_get_buflist(&removable_bufs);
if (shada_pack_entry(packer, buflist_entry, 0) == kSDWriteFailed) {
xfree(buflist_entry.data.buffer_list.buffers);
ret = kSDWriteFailed;
goto shada_write_exit;
}
xfree(buflist_entry.data.buffer_list.buffers);
-#undef IGNORE_BUF
}
// Write some of the variables
@@ -2596,45 +2590,14 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
const bool search_highlighted = !(no_hlsearch
|| find_shada_parameter('h') != NULL);
const bool search_last_used = search_was_last_used();
-#define ADD_SEARCH_PAT(func, wms_attr, hlo, pcae, o, is_sub) \
- do { \
- SearchPattern pat; \
- func(&pat); \
- if (pat.pat != NULL) { \
- wms->wms_attr = (PossiblyFreedShadaEntry) { \
- .can_free_entry = false, \
- .data = { \
- .type = kSDItemSearchPattern, \
- .timestamp = pat.timestamp, \
- .data = { \
- .search_pattern = { \
- .magic = pat.magic, \
- .smartcase = !pat.no_scs, \
- .has_line_offset = hlo, \
- .place_cursor_at_end = pcae, \
- .offset = o, \
- .is_last_used = (is_sub ^ search_last_used), \
- .is_substitute_pattern = is_sub, \
- .highlighted = ((is_sub ^ search_last_used) \
- && search_highlighted), \
- .pat = (char *) pat.pat, \
- .additional_data = pat.additional_data, \
- .search_backward = (!is_sub && pat.off.dir == '?'), \
- } \
- } \
- } \
- }; \
- } \
- } while (0)
// Initialize search pattern
- ADD_SEARCH_PAT(get_search_pattern, search_pattern, pat.off.line, \
- pat.off.end, pat.off.off, false);
+ add_search_pattern(&wms->search_pattern, &get_search_pattern, false,
+ search_last_used, search_highlighted);
// Initialize substitute search pattern
- ADD_SEARCH_PAT(get_substitute_pattern, sub_search_pattern, false, false, 0,
- true);
-#undef ADD_SEARCH_PAT
+ add_search_pattern(&wms->sub_search_pattern, &get_substitute_pattern, true,
+ search_last_used, search_highlighted);
// Initialize substitute replacement string
{
@@ -2657,10 +2620,12 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
// Initialize jump list
const void *jump_iter = NULL;
+ setpcmark();
+ cleanup_jumplist();
do {
xfmark_T fm;
- cleanup_jumplist();
jump_iter = mark_jumplist_iter(jump_iter, curwin, &fm);
+
const buf_T *const buf = (fm.fmark.fnum == 0
? NULL
: buflist_findnr(fm.fmark.fnum));
@@ -2745,7 +2710,7 @@ static ShaDaWriteResult shada_write(ShaDaWriteDef *const sd_writer,
if (name == NUL) {
break;
}
- if (limit_reg_lines && reg.y_size > max_reg_lines) {
+ if (limit_reg_lines && reg.y_size > (size_t)max_reg_lines) {
continue;
}
wms->registers[op_reg_index(name)] = (PossiblyFreedShadaEntry) {
@@ -2968,17 +2933,23 @@ int shada_write_file(const char *const file, bool nomerge)
char *const fname = shada_filename(file);
char *tempname = NULL;
- ShaDaWriteDef sd_writer = (ShaDaWriteDef) {
+ ShaDaWriteDef sd_writer = {
.write = &write_file,
.close = &close_sd_writer,
.error = NULL,
};
- ShaDaReadDef sd_reader;
-
- intptr_t fd;
+ ShaDaReadDef sd_reader = { .close = NULL };
if (!nomerge) {
- if (open_shada_file_for_reading(fname, &sd_reader) != 0) {
+ int error;
+ if ((error = open_shada_file_for_reading(fname, &sd_reader)) != 0) {
+ if (error != UV_ENOENT) {
+ emsgf(_(SERR "System error while opening ShaDa file %s for reading "
+ "to merge before writing it: %s"),
+ fname, os_strerror(error));
+ // Try writing the file even if opening it emerged any issues besides
+ // file not existing: maybe writing will succeed nevertheless.
+ }
nomerge = true;
goto shada_write_file_nomerge;
}
@@ -2996,15 +2967,11 @@ int shada_write_file(const char *const file, bool nomerge)
// 2: Make sure that user can always read and write the result.
// 3: If somebody happened to delete the file after it was opened for
// reading use u=rw permissions.
-shada_write_file_open:
- fd = (intptr_t) open_file(tempname, O_CREAT|O_WRONLY|O_NOFOLLOW|O_EXCL,
- perm);
- if (fd < 0) {
- if (fd == UV_EEXIST
-#ifdef ELOOP
- || fd == UV_ELOOP
-#endif
- ) {
+shada_write_file_open: {}
+ sd_writer.cookie = file_open_new(
+ &error, tempname, kFileCreateOnly|kFileNoSymlink, perm);
+ if (sd_writer.cookie == NULL) {
+ if (error == UV_EEXIST || error == UV_ELOOP) {
// File already exists, try another name
char *const wp = tempname + strlen(tempname) - 1;
if (*wp == 'z') {
@@ -3014,11 +2981,16 @@ shada_write_file_open:
fname);
xfree(fname);
xfree(tempname);
+ assert(sd_reader.close != NULL);
+ sd_reader.close(&sd_reader);
return FAIL;
} else {
(*wp)++;
goto shada_write_file_open;
}
+ } else {
+ emsgf(_(SERR "System error while opening temporary ShaDa file %s "
+ "for writing: %s"), tempname, os_strerror(error));
}
}
}
@@ -3042,23 +3014,29 @@ shada_write_file_nomerge: {}
}
*tail = tail_save;
}
- fd = (intptr_t) open_file(fname, O_CREAT|O_WRONLY|O_TRUNC,
- 0600);
- }
-
- if (p_verbose > 0) {
- verbose_enter();
- smsg(_("Writing ShaDa file \"%s\""), fname);
- verbose_leave();
+ int error;
+ sd_writer.cookie = file_open_new(&error, fname, kFileCreate|kFileTruncate,
+ 0600);
+ if (sd_writer.cookie == NULL) {
+ emsgf(_(SERR "System error while opening ShaDa file %s for writing: %s"),
+ fname, os_strerror(error));
+ }
}
- if (fd < 0) {
+ if (sd_writer.cookie == NULL) {
xfree(fname);
xfree(tempname);
+ if (sd_reader.cookie != NULL) {
+ sd_reader.close(&sd_reader);
+ }
return FAIL;
}
- sd_writer.cookie = (void *) fd;
+ if (p_verbose > 0) {
+ verbose_enter();
+ smsg(_("Writing ShaDa file \"%s\""), fname);
+ verbose_leave();
+ }
convert_setup(&sd_writer.sd_conv, p_enc, "utf-8");
@@ -3066,15 +3044,11 @@ shada_write_file_nomerge: {}
? NULL
: &sd_reader));
assert(sw_ret != kSDWriteIgnError);
-#ifndef UNIX
- sd_writer.close(&sd_writer);
-#endif
if (!nomerge) {
sd_reader.close(&sd_reader);
bool did_remove = false;
if (sw_ret == kSDWriteSuccessfull) {
#ifdef UNIX
- bool closed = false;
// For Unix we check the owner of the file. It's not very nice to
// overwrite a user’s viminfo file after a "su root", with a
// viminfo file that the user can't read.
@@ -3083,16 +3057,15 @@ shada_write_file_nomerge: {}
if (getuid() == ROOT_UID) {
if (old_info.stat.st_uid != ROOT_UID
|| old_info.stat.st_gid != getgid()) {
- const uv_uid_t old_uid = (uv_uid_t) old_info.stat.st_uid;
- const uv_gid_t old_gid = (uv_gid_t) old_info.stat.st_gid;
- const int fchown_ret = os_fchown((int) fd, old_uid, old_gid);
- sd_writer.close(&sd_writer);
+ const uv_uid_t old_uid = (uv_uid_t)old_info.stat.st_uid;
+ const uv_gid_t old_gid = (uv_gid_t)old_info.stat.st_gid;
+ const int fchown_ret = os_fchown(file_fd(sd_writer.cookie),
+ old_uid, old_gid);
if (fchown_ret != 0) {
EMSG3(_(RNERR "Failed setting uid and gid for file %s: %s"),
tempname, os_strerror(fchown_ret));
goto shada_write_file_did_not_remove;
}
- closed = true;
}
} else if (!(old_info.stat.st_uid == getuid()
? (old_info.stat.st_mode & 0200)
@@ -3100,13 +3073,9 @@ shada_write_file_nomerge: {}
? (old_info.stat.st_mode & 0020)
: (old_info.stat.st_mode & 0002)))) {
EMSG2(_("E137: ShaDa file is not writable: %s"), fname);
- sd_writer.close(&sd_writer);
goto shada_write_file_did_not_remove;
}
}
- if (!closed) {
- sd_writer.close(&sd_writer);
- }
#endif
if (vim_rename(tempname, fname) == -1) {
EMSG3(_(RNERR "Can't rename ShaDa file from %s to %s!"),
@@ -3133,6 +3102,7 @@ shada_write_file_did_not_remove:
}
xfree(tempname);
}
+ sd_writer.close(&sd_writer);
xfree(fname);
return OK;
@@ -3262,20 +3232,20 @@ static ShaDaReadResult fread_len(ShaDaReadDef *const sd_reader,
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
const ptrdiff_t read_bytes = sd_reader->read(sd_reader, buffer, length);
- (void) read_bytes;
- if (sd_reader->error != NULL) {
- emsgf(_(SERR "System error while reading ShaDa file: %s"),
- sd_reader->error);
- return kSDReadStatusReadError;
- } else if (sd_reader->eof) {
- emsgf(_(RCERR "Error while reading ShaDa file: "
- "last entry specified that it occupies %" PRIu64 " bytes, "
- "but file ended earlier"),
- (uint64_t) length);
- return kSDReadStatusNotShaDa;
+ if (read_bytes != (ptrdiff_t)length) {
+ if (sd_reader->error != NULL) {
+ emsgf(_(SERR "System error while reading ShaDa file: %s"),
+ sd_reader->error);
+ return kSDReadStatusReadError;
+ } else {
+ emsgf(_(RCERR "Error while reading ShaDa file: "
+ "last entry specified that it occupies %" PRIu64 " bytes, "
+ "but file ended earlier"),
+ (uint64_t)length);
+ return kSDReadStatusNotShaDa;
+ }
}
- assert(read_bytes >= 0 && (size_t) read_bytes == length);
return kSDReadStatusSuccess;
}
diff --git a/src/nvim/spell.c b/src/nvim/spell.c
index 0acaa9ae2b..7e0bbd6ad1 100644
--- a/src/nvim/spell.c
+++ b/src/nvim/spell.c
@@ -45,6 +45,9 @@
// Use SPELL_PRINTTREE for debugging: dump the word tree after adding a word.
// Only use it for small word lists!
+// Use SPELL_COMPRESS_ALLWAYS for debugging: compress the word tree after
+// adding a word. Only use it for small word lists!
+
// Use DEBUG_TRIEWALK to print the changes made in suggest_trie_walk() for a
// specific word.
@@ -156,6 +159,8 @@
//
// sectionID == SN_NOSPLITSUGS: nothing
//
+// sectionID == SN_NOCOMPOUNDSUGS: nothing
+//
// sectionID == SN_WORDS: <word> ...
// <word> N bytes NUL terminated common word
//
@@ -287,6 +292,9 @@
#include <stdlib.h>
#include <wctype.h>
+/* for offsetof() */
+#include <stddef.h>
+
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/spell.h"
@@ -307,7 +315,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/garray.h"
#include "nvim/normal.h"
#include "nvim/option.h"
@@ -482,7 +489,7 @@ struct slang_S {
regprog_T **sl_prefprog; // table with regprogs for prefixes
garray_T sl_rep; // list of fromto_T entries from REP lines
- short sl_rep_first[256]; // indexes where byte first appears, -1 if
+ int16_t sl_rep_first[256]; // indexes where byte first appears, -1 if
// there is none
garray_T sl_sal; // list of salitem_T entries from SAL lines
salfirst_T sl_sal_first[256]; // indexes where byte first appears, -1 if
@@ -494,8 +501,9 @@ struct slang_S {
// "sl_sal_first" maps chars, when has_mbyte
// "sl_sal" is a list of wide char lists.
garray_T sl_repsal; // list of fromto_T entries from REPSAL lines
- short sl_repsal_first[256]; // sl_rep_first for REPSAL lines
- bool sl_nosplitsugs; // don't suggest splitting a word
+ int16_t sl_repsal_first[256]; // sl_rep_first for REPSAL lines
+ bool sl_nosplitsugs; // don't suggest splitting a word
+ bool sl_nocompoundsugs; // don't suggest compounding
// Info from the .sug file. Loaded on demand.
time_t sl_sugtime; // timestamp for .sug file
@@ -558,6 +566,7 @@ typedef struct langp_S {
#define SN_WORDS 13 // common words
#define SN_NOSPLITSUGS 14 // don't split word for suggestions
#define SN_INFO 15 // info section
+#define SN_NOCOMPOUNDSUGS 16 // don't compound for suggestions
#define SN_END 255 // end of sections
#define SNF_REQUIRED 1 // <sectionflags>: required section
@@ -577,9 +586,8 @@ typedef struct wordcount_S {
char_u wc_word[1]; // word, actually longer
} wordcount_T;
-static wordcount_T dumwc;
-#define WC_KEY_OFF (unsigned)(dumwc.wc_word - (char_u *)&dumwc)
-#define HI2WC(hi) ((wordcount_T *)((hi)->hi_key - WC_KEY_OFF))
+#define WC_KEY_OFF offsetof(wordcount_T, wc_word)
+#define HI2WC(hi) ((wordcount_T *)((hi)->hi_key - WC_KEY_OFF))
#define MAXWORDCOUNT 0xffff
// Information used when looking for suggestions.
@@ -948,6 +956,7 @@ typedef struct spellinfo_S {
char_u *si_sofoto; // SOFOTO text
int si_nosugfile; // NOSUGFILE item found
int si_nosplitsugs; // NOSPLITSUGS item found
+ int si_nocompoundsugs; // NOCOMPOUNDSUGS item found
int si_followup; // soundsalike: ?
int si_collapse; // soundsalike: ?
hashtab_T si_commonwords; // hashtable for common words
@@ -2309,16 +2318,14 @@ static void spell_load_lang(char_u *lang)
for (round = 1; round <= 2; ++round) {
// Find the first spell file for "lang" in 'runtimepath' and load it.
vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
- "spell/%s.%s.spl",
- lang, spell_enc());
- r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ "spell/%s.%s.spl", lang, spell_enc());
+ r = do_in_runtimepath(fname_enc, 0, spell_load_cb, &sl);
if (r == FAIL && *sl.sl_lang != NUL) {
// Try loading the ASCII version.
vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
- "spell/%s.ascii.spl",
- lang);
- r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ "spell/%s.ascii.spl", lang);
+ r = do_in_runtimepath(fname_enc, 0, spell_load_cb, &sl);
if (r == FAIL && *sl.sl_lang != NUL && round == 1
&& apply_autocmds(EVENT_SPELLFILEMISSING, lang,
@@ -2346,7 +2353,7 @@ static void spell_load_lang(char_u *lang)
} else if (sl.sl_slang != NULL) {
// At least one file was loaded, now load ALL the additions.
STRCPY(fname_enc + STRLEN(fname_enc) - 3, "add.spl");
- do_in_runtimepath(fname_enc, TRUE, spell_load_cb, &sl);
+ do_in_runtimepath(fname_enc, DIP_ALL, spell_load_cb, &sl);
}
}
@@ -2666,7 +2673,11 @@ spell_load_file (
break;
case SN_NOSPLITSUGS:
- lp->sl_nosplitsugs = true; // <timestamp>
+ lp->sl_nosplitsugs = true;
+ break;
+
+ case SN_NOCOMPOUNDSUGS:
+ lp->sl_nocompoundsugs = true;
break;
case SN_COMPOUND:
@@ -2868,7 +2879,7 @@ static int read_prefcond_section(FILE *fd, slang_T *lp)
// Read REP or REPSAL items section from "fd": <repcount> <rep> ...
// Return SP_*ERROR flags.
-static int read_rep_section(FILE *fd, garray_T *gap, short *first)
+static int read_rep_section(FILE *fd, garray_T *gap, int16_t *first)
{
int cnt;
fromto_T *ftp;
@@ -4266,9 +4277,9 @@ static void spell_print_node(wordnode_T *node, int depth)
PRINTSOME(line1, depth, "(%d)", node->wn_nr, 0);
PRINTSOME(line2, depth, " ", 0, 0);
PRINTSOME(line3, depth, " ", 0, 0);
- msg(line1);
- msg(line2);
- msg(line3);
+ msg((char_u *)line1);
+ msg((char_u *)line2);
+ msg((char_u *)line3);
} else {
node->wn_u1.index = TRUE;
@@ -4289,9 +4300,9 @@ static void spell_print_node(wordnode_T *node, int depth)
PRINTSOME(line3, depth, " ", 0, 0);
if (node->wn_byte == NUL) {
- msg(line1);
- msg(line2);
- msg(line3);
+ msg((char_u *)line1);
+ msg((char_u *)line2);
+ msg((char_u *)line3);
}
// do the children
@@ -4633,6 +4644,8 @@ static afffile_T *spell_read_aff(spellinfo_T *spin, char_u *fname)
spin->si_nobreak = true;
} else if (is_aff_rule(items, itemcnt, "NOSPLITSUGS", 1)) {
spin->si_nosplitsugs = true;
+ } else if (is_aff_rule(items, itemcnt, "NOCOMPOUNDSUGS", 1)) {
+ spin->si_nocompoundsugs = true;
} else if (is_aff_rule(items, itemcnt, "NOSUGFILE", 1)) {
spin->si_nosugfile = true;
} else if (is_aff_rule(items, itemcnt, "PFXPOSTPONE", 1)) {
@@ -6289,7 +6302,7 @@ static int tree_add_word(spellinfo_T *spin, char_u *word, wordnode_T *root, int
node = *prev;
}
#ifdef SPELL_PRINTTREE
- smsg("Added \"%s\"", word);
+ smsg((char_u *)"Added \"%s\"", word);
spell_print_tree(root->wn_sibling);
#endif
@@ -6312,8 +6325,8 @@ static int tree_add_word(spellinfo_T *spin, char_u *word, wordnode_T *root, int
// 3. When compressed before, added "compress_added" words
// (si_compress_cnt == 1) and the number of free nodes drops below the
// maximum word length.
-#ifndef SPELL_PRINTTREE
- if (spin->si_compress_cnt == 1
+#ifndef SPELL_COMPRESS_ALLWAYS
+ if (spin->si_compress_cnt == 1 // NOLINT(readability/braces)
? spin->si_free_count < MAXWLEN
: spin->si_blocks_cnt >= compress_start)
#endif
@@ -6857,6 +6870,15 @@ static int write_vim_spell(spellinfo_T *spin, char_u *fname)
put_bytes(fd, 0, 4); // <sectionlen>
}
+ // SN_NOCOMPUNDSUGS: nothing
+ // This is used to notify that no suggestions with compounds are to be
+ // made.
+ if (spin->si_nocompoundsugs) {
+ putc(SN_NOCOMPOUNDSUGS, fd); // <sectionID>
+ putc(0, fd); // <sectionflags>
+ put_bytes(fd, 0, 4); // <sectionlen>
+ }
+
// SN_COMPOUND: compound info.
// We don't mark it required, when not supported all compound words will
// be bad words.
@@ -7607,7 +7629,7 @@ mkspell (
else {
// Check for overwriting before doing things that may take a lot of
// time.
- if (!over_write && os_file_exists(wfname)) {
+ if (!over_write && os_path_exists(wfname)) {
EMSG(_(e_exists));
goto theend;
}
@@ -7663,7 +7685,7 @@ mkspell (
spin.si_region = 1 << i;
vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
- if (os_file_exists(fname)) {
+ if (os_path_exists(fname)) {
// Read the .aff file. Will init "spin->si_conv" based on the
// "SET" line.
afile[i] = spell_read_aff(&spin, fname);
@@ -9246,9 +9268,7 @@ static void allcap_copy(char_u *word, char_u *wcopy)
else
c = *s++;
- // We only change 0xdf to SS when we are certain latin1 is used. It
- // would cause weird errors in other 8-bit encodings.
- if (enc_latin1like && c == 0xdf) {
+ if (c == 0xdf) {
c = 'S';
if (d - wcopy >= MAXWLEN - 1)
break;
@@ -9296,7 +9316,56 @@ static void suggest_try_special(suginfo_T *su)
}
}
+// Measure how much time is spent in each state.
+// Output is dumped in "suggestprof".
+
+#ifdef SUGGEST_PROFILE
+proftime_T current;
+proftime_T total;
+proftime_T times[STATE_FINAL + 1];
+long counts[STATE_FINAL + 1];
+
+ static void
+prof_init(void)
+{
+ for (int i = 0; i <= STATE_FINAL; i++) {
+ profile_zero(&times[i]);
+ counts[i] = 0;
+ }
+ profile_start(&current);
+ profile_start(&total);
+}
+
+// call before changing state
+ static void
+prof_store(state_T state)
+{
+ profile_end(&current);
+ profile_add(&times[state], &current);
+ counts[state]++;
+ profile_start(&current);
+}
+# define PROF_STORE(state) prof_store(state);
+
+ static void
+prof_report(char *name)
+{
+ FILE *fd = fopen("suggestprof", "a");
+
+ profile_end(&total);
+ fprintf(fd, "-----------------------\n");
+ fprintf(fd, "%s: %s\n", name, profile_msg(&total));
+ for (int i = 0; i <= STATE_FINAL; i++) {
+ fprintf(fd, "%d: %s ("%" PRId64)\n", i, profile_msg(&times[i]), counts[i]);
+ }
+ fclose(fd);
+}
+#else
+# define PROF_STORE(state)
+#endif
+
// Try finding suggestions by adding/removing/swapping letters.
+
static void suggest_try_change(suginfo_T *su)
{
char_u fword[MAXWLEN]; // copy of the bad word, case-folded
@@ -9321,7 +9390,14 @@ static void suggest_try_change(suginfo_T *su)
continue;
// Try it for this language. Will add possible suggestions.
+ //
+#ifdef SUGGEST_PROFILE
+ prof_init();
+#endif
suggest_trie_walk(su, lp, fword, false);
+#ifdef SUGGEST_PROFILE
+ prof_report("try_change");
+#endif
}
}
@@ -9455,6 +9531,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// Always past NUL bytes now.
n = (int)sp->ts_state;
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_ENDNUL;
sp->ts_save_badflags = su->su_badflags;
@@ -9494,6 +9571,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if (sp->ts_curi > len || byts[arridx] != 0) {
// Past bytes in node and/or past NUL bytes.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_ENDNUL;
sp->ts_save_badflags = su->su_badflags;
break;
@@ -9771,6 +9849,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// be possible to compound another (short) word.
try_compound = false;
if (!soundfold
+ && !slang->sl_nocompoundsugs
&& slang->sl_compprog != NULL
&& ((unsigned)flags >> 24) != 0
&& sp->ts_twordlen - sp->ts_splitoff
@@ -9791,21 +9870,21 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// For NOBREAK we never try splitting, it won't make any word
// valid.
- if (slang->sl_nobreak)
+ if (slang->sl_nobreak && !slang->sl_nocompoundsugs) {
try_compound = true;
-
- // If we could add a compound word, and it's also possible to
- // split at this point, do the split first and set
- // TSF_DIDSPLIT to avoid doing it again.
- else if (!fword_ends
- && try_compound
- && (sp->ts_flags & TSF_DIDSPLIT) == 0) {
+ } else if (!fword_ends
+ && try_compound
+ && (sp->ts_flags & TSF_DIDSPLIT) == 0) {
+ // If we could add a compound word, and it's also possible to
+ // split at this point, do the split first and set
+ // TSF_DIDSPLIT to avoid doing it again.
try_compound = false;
sp->ts_flags |= TSF_DIDSPLIT;
--sp->ts_curi; // do the same NUL again
compflags[sp->ts_complen] = NUL;
- } else
+ } else {
sp->ts_flags &= ~TSF_DIDSPLIT;
+ }
if (try_split || try_compound) {
if (!try_compound && (!fword_ends || !goodword_ends)) {
@@ -9846,6 +9925,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
#endif
// Save things to be restored at STATE_SPLITUNDO.
sp->ts_save_badflags = su->su_badflags;
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_SPLITUNDO;
++depth;
@@ -9912,6 +9992,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
byts = pbyts;
idxs = pidxs;
sp->ts_prefixdepth = PFD_PREFIXTREE;
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_NOPREFIX;
}
}
@@ -9924,6 +10005,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
su->su_badflags = sp->ts_save_badflags;
// Continue looking for NUL bytes.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_START;
// In case we went into the prefix tree.
@@ -9938,9 +10020,11 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
&& sp->ts_tcharlen == 0
) {
// The badword ends, can't use STATE_PLAIN.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_DEL;
break;
}
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_PLAIN;
// FALLTHROUGH
@@ -9951,10 +10035,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if (sp->ts_curi > byts[arridx]) {
// Done all bytes at this node, do next state. When still at
// already changed bytes skip the other tricks.
- if (sp->ts_fidx >= sp->ts_fidxtry)
+ PROF_STORE(sp->ts_state)
+ if (sp->ts_fidx >= sp->ts_fidxtry) {
sp->ts_state = STATE_DEL;
- else
+ } else {
sp->ts_state = STATE_FINAL;
+ }
} else {
arridx += sp->ts_curi++;
c = byts[arridx];
@@ -10086,10 +10172,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// When past the first byte of a multi-byte char don't try
// delete/insert/swap a character.
if (has_mbyte && sp->ts_tcharlen > 0) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_FINAL;
break;
}
// Try skipping one character in the bad word (delete it).
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_INS_PREP;
sp->ts_curi = 1;
if (soundfold && sp->ts_fidx == 0 && fword[sp->ts_fidx] == '*')
@@ -10137,6 +10225,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if (sp->ts_flags & TSF_DIDDEL) {
// If we just deleted a byte then inserting won't make sense,
// a substitute is always cheaper.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_SWAP;
break;
}
@@ -10146,11 +10235,13 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
for (;; ) {
if (sp->ts_curi > byts[n]) {
// Only NUL bytes at this node, go to next state.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_SWAP;
break;
}
if (byts[n + sp->ts_curi] != NUL) {
// Found a byte to insert.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_INS;
break;
}
@@ -10166,6 +10257,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
n = sp->ts_arridx;
if (sp->ts_curi > byts[n]) {
// Done all bytes at this node, go to next state.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_SWAP;
break;
}
@@ -10226,6 +10318,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
c = *p;
if (c == NUL) {
// End of word, can't swap or replace.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_FINAL;
break;
}
@@ -10233,6 +10326,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// Don't swap if the first character is not a word character.
// SWAP3 etc. also don't make sense then.
if (!soundfold && !spell_iswordp(p, curwin)) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
break;
}
@@ -10257,6 +10351,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// When the second character is NUL we can't swap.
if (c2 == NUL) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
break;
}
@@ -10264,6 +10359,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// When characters are identical, swap won't do anything.
// Also get here if the second char is not a word character.
if (c == c2) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_SWAP3;
break;
}
@@ -10274,6 +10370,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
sp->ts_twordlen, tword, fword + sp->ts_fidx,
c, c2);
#endif
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_UNSWAP;
++depth;
if (has_mbyte) {
@@ -10288,6 +10385,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
}
} else
// If this swap doesn't work then SWAP3 won't either.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
break;
@@ -10335,6 +10433,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
// Also get here when the third character is not a word character.
// Second character may any char: "a.b" -> "b.a"
if (c == c3 || c3 == NUL) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
break;
}
@@ -10345,6 +10444,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
sp->ts_twordlen, tword, fword + sp->ts_fidx,
c, c3);
#endif
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_UNSWAP3;
++depth;
if (has_mbyte) {
@@ -10358,8 +10458,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
p[2] = c;
stack[depth].ts_fidxtry = sp->ts_fidx + 3;
}
- } else
+ } else {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
+ }
break;
case STATE_UNSWAP3:
@@ -10385,6 +10487,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if (!soundfold && !spell_iswordp(p, curwin)) {
// Middle char is not a word char, skip the rotate. First and
// third char were already checked at swap and swap3.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
break;
}
@@ -10399,6 +10502,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
sp->ts_twordlen, tword, fword + sp->ts_fidx,
p[0], p[1], p[2]);
#endif
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_UNROT3L;
++depth;
p = fword + sp->ts_fidx;
@@ -10417,8 +10521,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
p[2] = c;
stack[depth].ts_fidxtry = sp->ts_fidx + 3;
}
- } else
+ } else {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
+ }
break;
case STATE_UNROT3L:
@@ -10448,6 +10554,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
sp->ts_twordlen, tword, fword + sp->ts_fidx,
p[0], p[1], p[2]);
#endif
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_UNROT3R;
++depth;
p = fword + sp->ts_fidx;
@@ -10466,8 +10573,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
*p = c;
stack[depth].ts_fidxtry = sp->ts_fidx + 3;
}
- } else
+ } else {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_INI;
+ }
break;
case STATE_UNROT3R:
@@ -10497,6 +10606,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if ((lp->lp_replang == NULL && !soundfold)
|| sp->ts_score + SCORE_REP >= su->su_maxscore
|| sp->ts_fidx < sp->ts_fidxtry) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_FINAL;
break;
}
@@ -10509,10 +10619,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
sp->ts_curi = lp->lp_replang->sl_rep_first[fword[sp->ts_fidx]];
if (sp->ts_curi < 0) {
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_FINAL;
break;
}
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP;
// FALLTHROUGH
@@ -10542,6 +10654,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
ftp->ft_from, ftp->ft_to);
#endif
// Need to undo this afterwards.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP_UNDO;
// Change the "from" to the "to" string.
@@ -10561,6 +10674,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
if (sp->ts_curi >= gap->ga_len && sp->ts_state == STATE_REP)
// No (more) matches.
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_FINAL;
break;
@@ -10580,6 +10694,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so
repextra -= tl - fl;
}
memmove(p, ftp->ft_from, fl);
+ PROF_STORE(sp->ts_state)
sp->ts_state = STATE_REP;
break;
@@ -10990,7 +11105,13 @@ static void suggest_try_soundalike(suginfo_T *su)
// try all kinds of inserts/deletes/swaps/etc.
// TODO: also soundfold the next words, so that we can try joining
// and splitting
+#ifdef SUGGEST_PROFILE
+ prof_init();
+#endif
suggest_trie_walk(su, lp, salword, true);
+#ifdef SUGGEST_PROFILE
+ prof_report("soundalike");
+#endif
}
}
}
@@ -12481,7 +12602,7 @@ static int spell_edit_score(slang_T *slang, char_u *badword, char_u *goodword)
char_u *p;
int wbadword[MAXWLEN];
int wgoodword[MAXWLEN];
- const int l_has_mbyte = has_mbyte;
+ const bool l_has_mbyte = has_mbyte;
if (l_has_mbyte) {
// Get the characters from the multi-byte strings and put them in an
@@ -13041,7 +13162,7 @@ spell_dump_compl (
// Done all bytes at this node, go up one level.
--depth;
line_breakcheck();
- ins_compl_check_keys(50);
+ ins_compl_check_keys(50, false);
} else {
// Do one more byte at this node.
n = arridx[depth] + curi[depth];
@@ -13340,3 +13461,4 @@ int expand_spelling(linenr_T lnum, char_u *pat, char_u ***matchp)
return ga.ga_len;
}
+
diff --git a/src/nvim/state.c b/src/nvim/state.c
index b2f3f0bebe..44c6441e40 100644
--- a/src/nvim/state.c
+++ b/src/nvim/state.c
@@ -2,9 +2,12 @@
#include "nvim/lib/kvec.h"
+#include "nvim/ascii.h"
#include "nvim/state.h"
#include "nvim/vim.h"
+#include "nvim/main.h"
#include "nvim/getchar.h"
+#include "nvim/option_defs.h"
#include "nvim/ui.h"
#include "nvim/os/input.h"
@@ -32,8 +35,8 @@ getkey:
// processing. Characters can come from mappings, scripts and other
// sources, so this scenario is very common.
key = safe_vgetc();
- } else if (!queue_empty(loop.events)) {
- // Event was made available after the last queue_process_events call
+ } else if (!multiqueue_empty(main_loop.events)) {
+ // Event was made available after the last multiqueue_process_events call
key = K_EVENT;
} else {
input_enable_events();
@@ -45,7 +48,7 @@ getkey:
// directly.
(void)os_inchar(NULL, 0, -1, 0);
input_disable_events();
- key = !queue_empty(loop.events) ? K_EVENT : safe_vgetc();
+ key = !multiqueue_empty(main_loop.events) ? K_EVENT : safe_vgetc();
}
if (key == K_EVENT) {
@@ -60,3 +63,35 @@ getkey:
}
}
}
+
+/// Return TRUE if in the current mode we need to use virtual.
+int virtual_active(void)
+{
+ // While an operator is being executed we return "virtual_op", because
+ // VIsual_active has already been reset, thus we can't check for "block"
+ // being used.
+ if (virtual_op != MAYBE) {
+ return virtual_op;
+ }
+ return ve_flags == VE_ALL
+ || ((ve_flags & VE_BLOCK) && VIsual_active && VIsual_mode == Ctrl_V)
+ || ((ve_flags & VE_INSERT) && (State & INSERT));
+}
+
+/// VISUAL, SELECTMODE and OP_PENDING State are never set, they are equal to
+/// NORMAL State with a condition. This function returns the real State.
+int get_real_state(void)
+{
+ if (State & NORMAL) {
+ if (VIsual_active) {
+ if (VIsual_select) {
+ return SELECTMODE;
+ }
+ return VISUAL;
+ } else if (finish_op) {
+ return OP_PENDING;
+ }
+ }
+ return State;
+}
+
diff --git a/src/nvim/strings.c b/src/nvim/strings.c
index 37a0fb82da..b38d4f8a58 100644
--- a/src/nvim/strings.c
+++ b/src/nvim/strings.c
@@ -5,7 +5,6 @@
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/strings.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/buffer.h"
#include "nvim/charset.h"
@@ -52,15 +51,14 @@ char_u *vim_strsave(const char_u *string)
return (char_u *)xstrdup((char *)string);
}
-/*
- * Copy up to "len" bytes of "string" into newly allocated memory and
- * terminate with a NUL.
- * The allocated memory always has size "len + 1", also when "string" is
- * shorter.
- */
+/// Copy up to `len` bytes of `string` into newly allocated memory and
+/// terminate with a NUL. The allocated memory always has size `len + 1`, even
+/// when `string` is shorter.
char_u *vim_strnsave(const char_u *string, size_t len)
FUNC_ATTR_NONNULL_RET FUNC_ATTR_MALLOC FUNC_ATTR_NONNULL_ALL
{
+ // strncpy is intentional: some parts of Vim use `string` shorter than `len`
+ // and expect the remainder to be zeroed out.
return (char_u *)strncpy(xmallocz(len), (char *)string, len);
}
@@ -345,24 +343,6 @@ void del_trailing_spaces(char_u *ptr)
*q = NUL;
}
-/*
- * Like strcat(), but make sure the result fits in "tosize" bytes and is
- * always NUL terminated.
- */
-void vim_strcat(char_u *restrict to, const char_u *restrict from,
- size_t tosize)
- FUNC_ATTR_NONNULL_ALL
-{
- size_t tolen = STRLEN(to);
- size_t fromlen = STRLEN(from);
-
- if (tolen + fromlen + 1 > tosize) {
- memcpy(to + tolen, from, tosize - tolen - 1);
- to[tosize - 1] = NUL;
- } else
- STRCPY(to + tolen, from);
-}
-
#if (!defined(HAVE_STRCASECMP) && !defined(HAVE_STRICMP))
/*
* Compare two strings, ignoring case, using current locale.
diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c
index 1f9dbd8228..37e5542dad 100644
--- a/src/nvim/syntax.c
+++ b/src/nvim/syntax.c
@@ -25,7 +25,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/keymap.h"
#include "nvim/garray.h"
#include "nvim/option.h"
@@ -393,7 +392,9 @@ void syntax_start(win_T *wp, linenr_T lnum)
* Also do this when a change was made, the current state may be invalid
* then.
*/
- if (syn_block != wp->w_s || changedtick != syn_buf->b_changedtick) {
+ if (syn_block != wp->w_s
+ || syn_buf != wp->w_buffer
+ || changedtick != syn_buf->b_changedtick) {
invalidate_current_state();
syn_buf = wp->w_buffer;
syn_block = wp->w_s;
@@ -812,19 +813,39 @@ static void syn_sync(win_T *wp, linenr_T start_lnum, synstate_T *last_valid)
validate_current_state();
}
+static void save_chartab(char_u *chartab)
+{
+ if (syn_block->b_syn_isk != empty_option) {
+ memmove(chartab, syn_buf->b_chartab, (size_t)32);
+ memmove(syn_buf->b_chartab, syn_win->w_s->b_syn_chartab, (size_t)32);
+ }
+}
+
+static void restore_chartab(char_u *chartab)
+{
+ if (syn_win->w_s->b_syn_isk != empty_option) {
+ memmove(syn_buf->b_chartab, chartab, (size_t)32);
+ }
+}
+
/*
* Return TRUE if the line-continuation pattern matches in line "lnum".
*/
static int syn_match_linecont(linenr_T lnum)
{
- regmmatch_T regmatch;
-
if (syn_block->b_syn_linecont_prog != NULL) {
+ regmmatch_T regmatch;
+ // chartab array for syn iskeyword
+ char_u buf_chartab[32];
+ save_chartab(buf_chartab);
+
regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
regmatch.regprog = syn_block->b_syn_linecont_prog;
int r = syn_regexec(&regmatch, lnum, (colnr_T)0,
IF_SYN_TIME(&syn_block->b_syn_linecont_time));
syn_block->b_syn_linecont_prog = regmatch.regprog;
+
+ restore_chartab(buf_chartab);
return r;
}
return FALSE;
@@ -1617,8 +1638,9 @@ syn_current_attr (
lpos_T pos;
int lc_col;
reg_extmatch_T *cur_extmatch = NULL;
- char_u *line; /* current line. NOTE: becomes invalid after
- looking for a pattern match! */
+ char_u buf_chartab[32]; // chartab array for syn iskeyword
+ char_u *line; // current line. NOTE: becomes invalid after
+ // looking for a pattern match!
/* variables for zero-width matches that have a "nextgroup" argument */
int keep_next_list;
@@ -1668,6 +1690,9 @@ syn_current_attr (
* avoid matching the same item in the same position twice. */
ga_init(&zero_width_next_ga, (int)sizeof(int), 10);
+ // use syntax iskeyword option
+ save_chartab(buf_chartab);
+
/*
* Repeat matching keywords and patterns, to find contained items at the
* same column. This stops when there are no extra matches at the current
@@ -1992,6 +2017,8 @@ syn_current_attr (
} while (found_match);
+ restore_chartab(buf_chartab);
+
/*
* Use attributes from the current state, if within its highlighting.
* If not, use attributes from the current-but-one state, etc.
@@ -2522,7 +2549,8 @@ find_endpos (
regmmatch_T best_regmatch; /* startpos/endpos of best match */
lpos_T pos;
char_u *line;
- int had_match = FALSE;
+ int had_match = false;
+ char_u buf_chartab[32]; // chartab array for syn option iskeyword
/* just in case we are invoked for a keyword */
if (idx < 0)
@@ -2562,9 +2590,13 @@ find_endpos (
unref_extmatch(re_extmatch_in);
re_extmatch_in = ref_extmatch(start_ext);
- matchcol = startpos->col; /* start looking for a match at sstart */
- start_idx = idx; /* remember the first END pattern. */
- best_regmatch.startpos[0].col = 0; /* avoid compiler warning */
+ matchcol = startpos->col; // start looking for a match at sstart
+ start_idx = idx; // remember the first END pattern.
+ best_regmatch.startpos[0].col = 0; // avoid compiler warning
+
+ // use syntax iskeyword option
+ save_chartab(buf_chartab);
+
for (;; ) {
/*
* Find end pattern that matches first after "matchcol".
@@ -2707,6 +2739,8 @@ find_endpos (
if (!had_match)
m_endpos->lnum = 0;
+ restore_chartab(buf_chartab);
+
/* Remove external matches. */
unref_extmatch(re_extmatch_in);
re_extmatch_in = NULL;
@@ -3027,6 +3061,46 @@ static void syn_cmd_spell(exarg_T *eap, int syncing)
redraw_win_later(curwin, NOT_VALID);
}
+/// Handle ":syntax iskeyword" command.
+static void syn_cmd_iskeyword(exarg_T *eap, int syncing)
+{
+ char_u *arg = eap->arg;
+ char_u save_chartab[32];
+ char_u *save_isk;
+
+ if (eap->skip) {
+ return;
+ }
+
+ arg = skipwhite(arg);
+ if (*arg == NUL) {
+ MSG_PUTS("\n");
+ MSG_PUTS(_("syntax iskeyword "));
+ if (curwin->w_s->b_syn_isk != empty_option) {
+ msg_outtrans(curwin->w_s->b_syn_isk);
+ } else {
+ msg_outtrans((char_u *)"not set");
+ }
+ } else {
+ if (STRNICMP(arg, "clear", 5) == 0) {
+ memmove(curwin->w_s->b_syn_chartab, curbuf->b_chartab, (size_t)32);
+ clear_string_option(&curwin->w_s->b_syn_isk);
+ } else {
+ memmove(save_chartab, curbuf->b_chartab, (size_t)32);
+ save_isk = curbuf->b_p_isk;
+ curbuf->b_p_isk = vim_strsave(arg);
+
+ buf_init_chartab(curbuf, false);
+ memmove(curwin->w_s->b_syn_chartab, curbuf->b_chartab, (size_t)32);
+ memmove(curbuf->b_chartab, save_chartab, (size_t)32);
+ clear_string_option(&curwin->w_s->b_syn_isk);
+ curwin->w_s->b_syn_isk = curbuf->b_p_isk;
+ curbuf->b_p_isk = save_isk;
+ }
+ }
+ redraw_win_later(curwin, NOT_VALID);
+}
+
/*
* Clear all syntax info for one buffer.
*/
@@ -3065,6 +3139,7 @@ void syntax_clear(synblock_T *block)
xfree(block->b_syn_linecont_pat);
block->b_syn_linecont_pat = NULL;
block->b_syn_folditems = 0;
+ clear_string_option(&block->b_syn_isk);
/* free the stored states */
syn_stack_free_all(block);
@@ -3107,6 +3182,7 @@ static void syntax_sync_clear(void)
curwin->w_s->b_syn_linecont_prog = NULL;
xfree(curwin->w_s->b_syn_linecont_pat);
curwin->w_s->b_syn_linecont_pat = NULL;
+ clear_string_option(&curwin->w_s->b_syn_isk);
syn_stack_free_all(curwin->w_s); /* Need to recompute all syntax. */
}
@@ -3266,6 +3342,7 @@ static void syn_cmd_enable(exarg_T *eap, int syncing)
/*
* Handle ":syntax reset" command.
+ * It actually resets highlighting, not syntax.
*/
static void syn_cmd_reset(exarg_T *eap, int syncing)
{
@@ -3300,7 +3377,7 @@ static void syn_cmd_onoff(exarg_T *eap, char *name)
eap->nextcmd = check_nextcmd(eap->arg);
if (!eap->skip) {
char buf[100];
- strncpy(buf, "so ", 4);
+ memcpy(buf, "so ", 4);
vim_snprintf(buf + 3, sizeof(buf) - 3, SYNTAX_FNAME, name);
do_cmdline_cmd(buf);
}
@@ -4131,9 +4208,10 @@ static void syn_cmd_include(exarg_T *eap, int syncing)
current_syn_inc_tag = ++running_syn_inc_tag;
prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
curwin->w_s->b_syn_topgrp = sgl_id;
- if (source ? do_source(eap->arg, FALSE, DOSO_NONE) == FAIL
- : source_runtime(eap->arg, TRUE) == FAIL)
+ if (source ? do_source(eap->arg, false, DOSO_NONE) == FAIL
+ : source_runtime(eap->arg, DIP_ALL) == FAIL) {
EMSG2(_(e_notopen), eap->arg);
+ }
curwin->w_s->b_syn_topgrp = prev_toplvl_grp;
current_syn_inc_tag = prev_syn_inc_tag;
}
@@ -5363,24 +5441,25 @@ struct subcommand {
static struct subcommand subcommands[] =
{
- {"case", syn_cmd_case},
- {"clear", syn_cmd_clear},
- {"cluster", syn_cmd_cluster},
- {"conceal", syn_cmd_conceal},
- {"enable", syn_cmd_enable},
- {"include", syn_cmd_include},
- {"keyword", syn_cmd_keyword},
- {"list", syn_cmd_list},
- {"manual", syn_cmd_manual},
- {"match", syn_cmd_match},
- {"on", syn_cmd_on},
- {"off", syn_cmd_off},
- {"region", syn_cmd_region},
- {"reset", syn_cmd_reset},
- {"spell", syn_cmd_spell},
- {"sync", syn_cmd_sync},
- {"", syn_cmd_list},
- {NULL, NULL}
+ { "case", syn_cmd_case },
+ { "clear", syn_cmd_clear },
+ { "cluster", syn_cmd_cluster },
+ { "conceal", syn_cmd_conceal },
+ { "enable", syn_cmd_enable },
+ { "include", syn_cmd_include },
+ { "iskeyword", syn_cmd_iskeyword },
+ { "keyword", syn_cmd_keyword },
+ { "list", syn_cmd_list },
+ { "manual", syn_cmd_manual },
+ { "match", syn_cmd_match },
+ { "on", syn_cmd_on },
+ { "off", syn_cmd_off },
+ { "region", syn_cmd_region },
+ { "reset", syn_cmd_reset },
+ { "spell", syn_cmd_spell },
+ { "sync", syn_cmd_sync },
+ { "", syn_cmd_list },
+ { NULL, NULL }
};
/*
@@ -5434,6 +5513,7 @@ void ex_ownsyntax(exarg_T *eap)
clear_string_option(&curwin->w_s->b_p_spc);
clear_string_option(&curwin->w_s->b_p_spf);
clear_string_option(&curwin->w_s->b_p_spl);
+ clear_string_option(&curwin->w_s->b_syn_isk);
}
/* save value of b:current_syntax */
@@ -5459,7 +5539,7 @@ void ex_ownsyntax(exarg_T *eap)
}
}
-int syntax_present(win_T *win)
+bool syntax_present(win_T *win)
{
return win->w_s->b_syn_patterns.ga_len != 0
|| win->w_s->b_syn_clusters.ga_len != 0
@@ -5582,6 +5662,24 @@ int get_syntax_info(int *seqnrp)
return current_flags;
}
+
+/// Get the sequence number of the concealed file position.
+///
+/// @return seqnr if the file position is concealed, 0 otherwise.
+int syn_get_concealed_id(win_T *wp, linenr_T lnum, colnr_T col)
+{
+ int seqnr;
+ int syntax_flags;
+
+ (void)syn_get_id(wp, lnum, col, false, NULL, false);
+ syntax_flags = get_syntax_info(&seqnr);
+
+ if (syntax_flags & HL_CONCEAL) {
+ return seqnr;
+ }
+ return 0;
+}
+
/*
* Return conceal substitution character
*/
@@ -5805,6 +5903,8 @@ static char *highlight_init_both[] =
"VertSplit cterm=reverse gui=reverse",
"WildMenu ctermbg=Yellow ctermfg=Black guibg=Yellow guifg=Black",
"default link EndOfBuffer NonText",
+ "default link QuickFixLine Search",
+ "default link Substitute Search",
NULL
};
@@ -5945,12 +6045,12 @@ init_highlight (
if (get_var_value((char_u *)"g:syntax_on") != NULL) {
static int recursive = 0;
- if (recursive >= 5)
+ if (recursive >= 5) {
EMSG(_("E679: recursive loop loading syncolor.vim"));
- else {
- ++recursive;
- (void)source_runtime((char_u *)"syntax/syncolor.vim", TRUE);
- --recursive;
+ } else {
+ recursive++;
+ (void)source_runtime((char_u *)"syntax/syncolor.vim", DIP_ALL);
+ recursive--;
}
}
}
@@ -5963,22 +6063,24 @@ int load_colors(char_u *name)
{
char_u *buf;
int retval = FAIL;
- static int recursive = FALSE;
+ static int recursive = false;
- /* When being called recursively, this is probably because setting
- * 'background' caused the highlighting to be reloaded. This means it is
- * working, thus we should return OK. */
- if (recursive)
+ // When being called recursively, this is probably because setting
+ // 'background' caused the highlighting to be reloaded. This means it is
+ // working, thus we should return OK.
+ if (recursive) {
return OK;
+ }
- recursive = TRUE;
- buf = xmalloc(STRLEN(name) + 12);
- sprintf((char *)buf, "colors/%s.vim", name);
- retval = source_runtime(buf, FALSE);
+ recursive = true;
+ size_t buflen = STRLEN(name) + 12;
+ buf = xmalloc(buflen);
+ snprintf((char *)buf, buflen, "colors/%s.vim", name);
+ retval = source_runtime(buf, DIP_START + DIP_OPT);
xfree(buf);
apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf);
- recursive = FALSE;
+ recursive = false;
ui_refresh();
return retval;
@@ -6498,6 +6600,9 @@ do_highlight (
else {
if (is_normal_group) {
HL_TABLE()[idx].sg_attr = 0;
+ // Need to update all groups, because they might be using "bg" and/or
+ // "fg", which have been changed now.
+ highlight_attr_set_all();
// If the normal group has changed, it is simpler to refresh every UI
ui_refresh();
} else
@@ -6797,8 +6902,8 @@ static int highlight_list_arg(int id, int didh, int type, int iarg, char_u *sarg
for (i = 0; hl_attr_table[i] != 0; ++i) {
if (iarg & hl_attr_table[i]) {
if (buf[0] != NUL)
- vim_strcat(buf, (char_u *)",", 100);
- vim_strcat(buf, (char_u *)hl_name_table[i], 100);
+ xstrlcat((char *)buf, ",", 100);
+ xstrlcat((char *)buf, hl_name_table[i], 100);
iarg &= ~hl_attr_table[i]; /* don't want "inverse" */
}
}
@@ -6874,8 +6979,23 @@ highlight_color (
else if (!(TOLOWER_ASC(what[0]) == 'b' && TOLOWER_ASC(what[1]) == 'g'))
return NULL;
if (modec == 'g') {
- if (fg)
+ if (what[2] == '#' && ui_rgb_attached()) {
+ if (fg) {
+ n = HL_TABLE()[id - 1].sg_rgb_fg;
+ } else if (sp) {
+ n = HL_TABLE()[id - 1].sg_rgb_sp;
+ } else {
+ n = HL_TABLE()[id - 1].sg_rgb_bg;
+ }
+ if (n < 0 || n > 0xffffff) {
+ return NULL;
+ }
+ snprintf((char *)name, sizeof(name), "#%06x", n);
+ return name;
+ }
+ if (fg) {
return HL_TABLE()[id - 1].sg_rgb_fg_name;
+ }
if (sp) {
return HL_TABLE()[id - 1].sg_rgb_sp_name;
}
@@ -6884,11 +7004,15 @@ highlight_color (
if (font || sp)
return NULL;
if (modec == 'c') {
- if (fg)
+ if (fg) {
n = HL_TABLE()[id - 1].sg_cterm_fg - 1;
- else
+ } else {
n = HL_TABLE()[id - 1].sg_cterm_bg - 1;
- sprintf((char *)name, "%d", n);
+ }
+ if (n < 0) {
+ return NULL;
+ }
+ snprintf((char *)name, sizeof(name), "%d", n);
return name;
}
/* term doesn't have color */
@@ -7038,16 +7162,13 @@ int syn_namen2id(char_u *linep, int len)
*/
int syn_check_group(char_u *pp, int len)
{
- int id;
- char_u *name;
-
- name = vim_strnsave(pp, len);
-
- id = syn_name2id(name);
- if (id == 0) /* doesn't exist yet */
+ char_u *name = vim_strnsave(pp, len);
+ int id = syn_name2id(name);
+ if (id == 0) { // doesn't exist yet
id = syn_add_group(name);
- else
+ } else {
xfree(name);
+ }
return id;
}
@@ -7147,6 +7268,23 @@ int syn_get_final_id(int hl_id)
return hl_id;
}
+/// Refresh the color attributes of all highlight groups.
+static void highlight_attr_set_all(void)
+{
+ for (int idx = 0; idx < highlight_ga.ga_len; idx++) {
+ struct hl_group *sgp = &HL_TABLE()[idx];
+ if (sgp->sg_rgb_bg_name != NULL) {
+ sgp->sg_rgb_bg = name_to_color(sgp->sg_rgb_bg_name);
+ }
+ if (sgp->sg_rgb_fg_name != NULL) {
+ sgp->sg_rgb_fg = name_to_color(sgp->sg_rgb_fg_name);
+ }
+ if (sgp->sg_rgb_sp_name != NULL) {
+ sgp->sg_rgb_sp = name_to_color(sgp->sg_rgb_sp_name);
+ }
+ set_hl_attr(idx);
+ }
+}
/*
* Translate the 'highlight' option into attributes in highlight_attr[] and
@@ -7409,175 +7547,687 @@ char_u *get_highlight_name(expand_T *xp, int idx)
}
color_name_table_T color_name_table[] = {
- // Color names taken from
- // http://www.rapidtables.com/web/color/RGB_Color.htm
- {"Maroon", RGB(0x80, 0x00, 0x00)},
- {"DarkRed", RGB(0x8b, 0x00, 0x00)},
- {"Brown", RGB(0xa5, 0x2a, 0x2a)},
- {"Firebrick", RGB(0xb2, 0x22, 0x22)},
- {"Crimson", RGB(0xdc, 0x14, 0x3c)},
- {"Red", RGB(0xff, 0x00, 0x00)},
- {"Tomato", RGB(0xff, 0x63, 0x47)},
- {"Coral", RGB(0xff, 0x7f, 0x50)},
- {"IndianRed", RGB(0xcd, 0x5c, 0x5c)},
- {"LightCoral", RGB(0xf0, 0x80, 0x80)},
- {"DarkSalmon", RGB(0xe9, 0x96, 0x7a)},
- {"Salmon", RGB(0xfa, 0x80, 0x72)},
- {"LightSalmon", RGB(0xff, 0xa0, 0x7a)},
- {"OrangeRed", RGB(0xff, 0x45, 0x00)},
- {"DarkOrange", RGB(0xff, 0x8c, 0x00)},
- {"Orange", RGB(0xff, 0xa5, 0x00)},
- {"Gold", RGB(0xff, 0xd7, 0x00)},
- {"DarkGoldenRod", RGB(0xb8, 0x86, 0x0b)},
- {"GoldenRod", RGB(0xda, 0xa5, 0x20)},
- {"PaleGoldenRod", RGB(0xee, 0xe8, 0xaa)},
- {"DarkKhaki", RGB(0xbd, 0xb7, 0x6b)},
- {"Khaki", RGB(0xf0, 0xe6, 0x8c)},
- {"Olive", RGB(0x80, 0x80, 0x00)},
- {"Yellow", RGB(0xff, 0xff, 0x00)},
- {"YellowGreen", RGB(0x9a, 0xcd, 0x32)},
- {"DarkOliveGreen", RGB(0x55, 0x6b, 0x2f)},
- {"OliveDrab", RGB(0x6b, 0x8e, 0x23)},
- {"LawnGreen", RGB(0x7c, 0xfc, 0x00)},
- {"ChartReuse", RGB(0x7f, 0xff, 0x00)},
- {"GreenYellow", RGB(0xad, 0xff, 0x2f)},
- {"DarkGreen", RGB(0x00, 0x64, 0x00)},
- {"Green", RGB(0x00, 0x80, 0x00)},
- {"ForestGreen", RGB(0x22, 0x8b, 0x22)},
- {"Lime", RGB(0x00, 0xff, 0x00)},
- {"LimeGreen", RGB(0x32, 0xcd, 0x32)},
- {"LightGreen", RGB(0x90, 0xee, 0x90)},
- {"PaleGreen", RGB(0x98, 0xfb, 0x98)},
- {"DarkSeaGreen", RGB(0x8f, 0xbc, 0x8f)},
- {"MediumSpringGreen", RGB(0x00, 0xfa, 0x9a)},
- {"SpringGreen", RGB(0x00, 0xff, 0x7f)},
- {"SeaGreen", RGB(0x2e, 0x8b, 0x57)},
- {"MediumAquamarine", RGB(0x66, 0xcd, 0xaa)},
- {"MediumSeaGreen", RGB(0x3c, 0xb3, 0x71)},
- {"LightSeaGreen", RGB(0x20, 0xb2, 0xaa)},
- {"DarkSlateGray", RGB(0x2f, 0x4f, 0x4f)},
- {"Teal", RGB(0x00, 0x80, 0x80)},
- {"DarkCyan", RGB(0x00, 0x8b, 0x8b)},
- {"Aqua", RGB(0x00, 0xff, 0xff)},
- {"Cyan", RGB(0x00, 0xff, 0xff)},
- {"LightCyan", RGB(0xe0, 0xff, 0xff)},
- {"DarkTurquoise", RGB(0x00, 0xce, 0xd1)},
- {"Turquoise", RGB(0x40, 0xe0, 0xd0)},
- {"MediumTurquoise", RGB(0x48, 0xd1, 0xcc)},
- {"PaleTurquoise", RGB(0xaf, 0xee, 0xee)},
- {"Aquamarine", RGB(0x7f, 0xff, 0xd4)},
- {"PowderBlue", RGB(0xb0, 0xe0, 0xe6)},
- {"CadetBlue", RGB(0x5f, 0x9e, 0xa0)},
- {"SteelBlue", RGB(0x46, 0x82, 0xb4)},
- {"CornFlowerBlue", RGB(0x64, 0x95, 0xed)},
- {"DeepSkyBlue", RGB(0x00, 0xbf, 0xff)},
- {"DodgerBlue", RGB(0x1e, 0x90, 0xff)},
- {"LightBlue", RGB(0xad, 0xd8, 0xe6)},
- {"SkyBlue", RGB(0x87, 0xce, 0xeb)},
- {"LightSkyBlue", RGB(0x87, 0xce, 0xfa)},
- {"MidnightBlue", RGB(0x19, 0x19, 0x70)},
- {"Navy", RGB(0x00, 0x00, 0x80)},
- {"DarkBlue", RGB(0x00, 0x00, 0x8b)},
- {"MediumBlue", RGB(0x00, 0x00, 0xcd)},
- {"Blue", RGB(0x00, 0x00, 0xff)},
- {"RoyalBlue", RGB(0x41, 0x69, 0xe1)},
- {"BlueViolet", RGB(0x8a, 0x2b, 0xe2)},
- {"Indigo", RGB(0x4b, 0x00, 0x82)},
- {"DarkSlateBlue", RGB(0x48, 0x3d, 0x8b)},
- {"SlateBlue", RGB(0x6a, 0x5a, 0xcd)},
- {"MediumSlateBlue", RGB(0x7b, 0x68, 0xee)},
- {"MediumPurple", RGB(0x93, 0x70, 0xdb)},
- {"DarkMagenta", RGB(0x8b, 0x00, 0x8b)},
- {"DarkViolet", RGB(0x94, 0x00, 0xd3)},
- {"DarkOrchid", RGB(0x99, 0x32, 0xcc)},
- {"MediumOrchid", RGB(0xba, 0x55, 0xd3)},
- {"Purple", RGB(0x80, 0x00, 0x80)},
- {"Thistle", RGB(0xd8, 0xbf, 0xd8)},
- {"Plum", RGB(0xdd, 0xa0, 0xdd)},
- {"Violet", RGB(0xee, 0x82, 0xee)},
- {"Magenta", RGB(0xff, 0x00, 0xff)},
- {"Fuchsia", RGB(0xff, 0x00, 0xff)},
- {"Orchid", RGB(0xda, 0x70, 0xd6)},
- {"MediumVioletRed", RGB(0xc7, 0x15, 0x85)},
- {"PaleVioletRed", RGB(0xdb, 0x70, 0x93)},
- {"DeepPink", RGB(0xff, 0x14, 0x93)},
- {"HotPink", RGB(0xff, 0x69, 0xb4)},
- {"LightPink", RGB(0xff, 0xb6, 0xc1)},
- {"Pink", RGB(0xff, 0xc0, 0xcb)},
- {"AntiqueWhite", RGB(0xfa, 0xeb, 0xd7)},
- {"Beige", RGB(0xf5, 0xf5, 0xdc)},
- {"Bisque", RGB(0xff, 0xe4, 0xc4)},
- {"BlanchedAlmond", RGB(0xff, 0xeb, 0xcd)},
- {"Wheat", RGB(0xf5, 0xde, 0xb3)},
- {"Cornsilk", RGB(0xff, 0xf8, 0xdc)},
- {"LemonChiffon", RGB(0xff, 0xfa, 0xcd)},
- {"LightGoldenRodYellow", RGB(0xfa, 0xfa, 0xd2)},
- {"LightYellow", RGB(0xff, 0xff, 0xe0)},
- {"SaddleBrown", RGB(0x8b, 0x45, 0x13)},
- {"Sienna", RGB(0xa0, 0x52, 0x2d)},
- {"Chocolate", RGB(0xd2, 0x69, 0x1e)},
- {"Peru", RGB(0xcd, 0x85, 0x3f)},
- {"SandyBrown", RGB(0xf4, 0xa4, 0x60)},
- {"BurlyWood", RGB(0xde, 0xb8, 0x87)},
- {"Tan", RGB(0xd2, 0xb4, 0x8c)},
- {"RosyBrown", RGB(0xbc, 0x8f, 0x8f)},
- {"Moccasin", RGB(0xff, 0xe4, 0xb5)},
- {"NavajoWhite", RGB(0xff, 0xde, 0xad)},
- {"PeachPuff", RGB(0xff, 0xda, 0xb9)},
- {"MistyRose", RGB(0xff, 0xe4, 0xe1)},
- {"LavenderBlush", RGB(0xff, 0xf0, 0xf5)},
- {"Linen", RGB(0xfa, 0xf0, 0xe6)},
- {"Oldlace", RGB(0xfd, 0xf5, 0xe6)},
- {"PapayaWhip", RGB(0xff, 0xef, 0xd5)},
- {"SeaShell", RGB(0xff, 0xf5, 0xee)},
- {"MintCream", RGB(0xf5, 0xff, 0xfa)},
- {"SlateGray", RGB(0x70, 0x80, 0x90)},
- {"LightSlateGray", RGB(0x77, 0x88, 0x99)},
- {"LightSteelBlue", RGB(0xb0, 0xc4, 0xde)},
- {"Lavender", RGB(0xe6, 0xe6, 0xfa)},
- {"FloralWhite", RGB(0xff, 0xfa, 0xf0)},
- {"AliceBlue", RGB(0xf0, 0xf8, 0xff)},
- {"GhostWhite", RGB(0xf8, 0xf8, 0xff)},
- {"Honeydew", RGB(0xf0, 0xff, 0xf0)},
- {"Ivory", RGB(0xff, 0xff, 0xf0)},
- {"Azure", RGB(0xf0, 0xff, 0xff)},
- {"Snow", RGB(0xff, 0xfa, 0xfa)},
- {"Black", RGB(0x00, 0x00, 0x00)},
- {"DimGray", RGB(0x69, 0x69, 0x69)},
- {"DimGrey", RGB(0x69, 0x69, 0x69)},
- {"Gray", RGB(0x80, 0x80, 0x80)},
- {"Grey", RGB(0x80, 0x80, 0x80)},
- {"DarkGray", RGB(0xa9, 0xa9, 0xa9)},
- {"DarkGrey", RGB(0xa9, 0xa9, 0xa9)},
- {"Silver", RGB(0xc0, 0xc0, 0xc0)},
- {"LightGray", RGB(0xd3, 0xd3, 0xd3)},
- {"LightGrey", RGB(0xd3, 0xd3, 0xd3)},
- {"Gainsboro", RGB(0xdc, 0xdc, 0xdc)},
- {"WhiteSmoke", RGB(0xf5, 0xf5, 0xf5)},
- {"White", RGB(0xff, 0xff, 0xff)},
- // The color names below were taken from gui_x11.c in vim source
- {"LightRed", RGB(0xff, 0xbb, 0xbb)},
- {"LightMagenta",RGB(0xff, 0xbb, 0xff)},
- {"DarkYellow", RGB(0xbb, 0xbb, 0x00)},
- {"Gray10", RGB(0x1a, 0x1a, 0x1a)},
- {"Grey10", RGB(0x1a, 0x1a, 0x1a)},
- {"Gray20", RGB(0x33, 0x33, 0x33)},
- {"Grey20", RGB(0x33, 0x33, 0x33)},
- {"Gray30", RGB(0x4d, 0x4d, 0x4d)},
- {"Grey30", RGB(0x4d, 0x4d, 0x4d)},
- {"Gray40", RGB(0x66, 0x66, 0x66)},
- {"Grey40", RGB(0x66, 0x66, 0x66)},
- {"Gray50", RGB(0x7f, 0x7f, 0x7f)},
- {"Grey50", RGB(0x7f, 0x7f, 0x7f)},
- {"Gray60", RGB(0x99, 0x99, 0x99)},
- {"Grey60", RGB(0x99, 0x99, 0x99)},
- {"Gray70", RGB(0xb3, 0xb3, 0xb3)},
- {"Grey70", RGB(0xb3, 0xb3, 0xb3)},
- {"Gray80", RGB(0xcc, 0xcc, 0xcc)},
- {"Grey80", RGB(0xcc, 0xcc, 0xcc)},
- {"Gray90", RGB(0xe5, 0xe5, 0xe5)},
- {"Grey90", RGB(0xe5, 0xe5, 0xe5)},
- {NULL, 0},
+ // Colors from rgb.txt
+ { "AliceBlue", RGB(0xf0, 0xf8, 0xff) },
+ { "AntiqueWhite", RGB(0xfa, 0xeb, 0xd7) },
+ { "AntiqueWhite1", RGB(0xff, 0xef, 0xdb) },
+ { "AntiqueWhite2", RGB(0xee, 0xdf, 0xcc) },
+ { "AntiqueWhite3", RGB(0xcd, 0xc0, 0xb0) },
+ { "AntiqueWhite4", RGB(0x8b, 0x83, 0x78) },
+ { "Aqua", RGB(0x00, 0xff, 0xff) },
+ { "Aquamarine", RGB(0x7f, 0xff, 0xd4) },
+ { "Aquamarine1", RGB(0x7f, 0xff, 0xd4) },
+ { "Aquamarine2", RGB(0x76, 0xee, 0xc6) },
+ { "Aquamarine3", RGB(0x66, 0xcd, 0xaa) },
+ { "Aquamarine4", RGB(0x45, 0x8b, 0x74) },
+ { "Azure", RGB(0xf0, 0xff, 0xff) },
+ { "Azure1", RGB(0xf0, 0xff, 0xff) },
+ { "Azure2", RGB(0xe0, 0xee, 0xee) },
+ { "Azure3", RGB(0xc1, 0xcd, 0xcd) },
+ { "Azure4", RGB(0x83, 0x8b, 0x8b) },
+ { "Beige", RGB(0xf5, 0xf5, 0xdc) },
+ { "Bisque", RGB(0xff, 0xe4, 0xc4) },
+ { "Bisque1", RGB(0xff, 0xe4, 0xc4) },
+ { "Bisque2", RGB(0xee, 0xd5, 0xb7) },
+ { "Bisque3", RGB(0xcd, 0xb7, 0x9e) },
+ { "Bisque4", RGB(0x8b, 0x7d, 0x6b) },
+ { "Black", RGB(0x00, 0x00, 0x00) },
+ { "BlanchedAlmond", RGB(0xff, 0xeb, 0xcd) },
+ { "Blue", RGB(0x00, 0x00, 0xff) },
+ { "Blue1", RGB(0x0, 0x0, 0xff) },
+ { "Blue2", RGB(0x0, 0x0, 0xee) },
+ { "Blue3", RGB(0x0, 0x0, 0xcd) },
+ { "Blue4", RGB(0x0, 0x0, 0x8b) },
+ { "BlueViolet", RGB(0x8a, 0x2b, 0xe2) },
+ { "Brown", RGB(0xa5, 0x2a, 0x2a) },
+ { "Brown1", RGB(0xff, 0x40, 0x40) },
+ { "Brown2", RGB(0xee, 0x3b, 0x3b) },
+ { "Brown3", RGB(0xcd, 0x33, 0x33) },
+ { "Brown4", RGB(0x8b, 0x23, 0x23) },
+ { "BurlyWood", RGB(0xde, 0xb8, 0x87) },
+ { "Burlywood1", RGB(0xff, 0xd3, 0x9b) },
+ { "Burlywood2", RGB(0xee, 0xc5, 0x91) },
+ { "Burlywood3", RGB(0xcd, 0xaa, 0x7d) },
+ { "Burlywood4", RGB(0x8b, 0x73, 0x55) },
+ { "CadetBlue", RGB(0x5f, 0x9e, 0xa0) },
+ { "CadetBlue1", RGB(0x98, 0xf5, 0xff) },
+ { "CadetBlue2", RGB(0x8e, 0xe5, 0xee) },
+ { "CadetBlue3", RGB(0x7a, 0xc5, 0xcd) },
+ { "CadetBlue4", RGB(0x53, 0x86, 0x8b) },
+ { "ChartReuse", RGB(0x7f, 0xff, 0x00) },
+ { "Chartreuse1", RGB(0x7f, 0xff, 0x0) },
+ { "Chartreuse2", RGB(0x76, 0xee, 0x0) },
+ { "Chartreuse3", RGB(0x66, 0xcd, 0x0) },
+ { "Chartreuse4", RGB(0x45, 0x8b, 0x0) },
+ { "Chocolate", RGB(0xd2, 0x69, 0x1e) },
+ { "Chocolate1", RGB(0xff, 0x7f, 0x24) },
+ { "Chocolate2", RGB(0xee, 0x76, 0x21) },
+ { "Chocolate3", RGB(0xcd, 0x66, 0x1d) },
+ { "Chocolate4", RGB(0x8b, 0x45, 0x13) },
+ { "Coral", RGB(0xff, 0x7f, 0x50) },
+ { "Coral1", RGB(0xff, 0x72, 0x56) },
+ { "Coral2", RGB(0xee, 0x6a, 0x50) },
+ { "Coral3", RGB(0xcd, 0x5b, 0x45) },
+ { "Coral4", RGB(0x8b, 0x3e, 0x2f) },
+ { "CornFlowerBlue", RGB(0x64, 0x95, 0xed) },
+ { "Cornsilk", RGB(0xff, 0xf8, 0xdc) },
+ { "Cornsilk1", RGB(0xff, 0xf8, 0xdc) },
+ { "Cornsilk2", RGB(0xee, 0xe8, 0xcd) },
+ { "Cornsilk3", RGB(0xcd, 0xc8, 0xb1) },
+ { "Cornsilk4", RGB(0x8b, 0x88, 0x78) },
+ { "Crimson", RGB(0xdc, 0x14, 0x3c) },
+ { "Cyan", RGB(0x00, 0xff, 0xff) },
+ { "Cyan1", RGB(0x0, 0xff, 0xff) },
+ { "Cyan2", RGB(0x0, 0xee, 0xee) },
+ { "Cyan3", RGB(0x0, 0xcd, 0xcd) },
+ { "Cyan4", RGB(0x0, 0x8b, 0x8b) },
+ { "DarkBlue", RGB(0x00, 0x00, 0x8b) },
+ { "DarkCyan", RGB(0x00, 0x8b, 0x8b) },
+ { "DarkGoldenRod", RGB(0xb8, 0x86, 0x0b) },
+ { "DarkGoldenrod1", RGB(0xff, 0xb9, 0xf) },
+ { "DarkGoldenrod2", RGB(0xee, 0xad, 0xe) },
+ { "DarkGoldenrod3", RGB(0xcd, 0x95, 0xc) },
+ { "DarkGoldenrod4", RGB(0x8b, 0x65, 0x8) },
+ { "DarkGray", RGB(0xa9, 0xa9, 0xa9) },
+ { "DarkGreen", RGB(0x00, 0x64, 0x00) },
+ { "DarkGrey", RGB(0xa9, 0xa9, 0xa9) },
+ { "DarkKhaki", RGB(0xbd, 0xb7, 0x6b) },
+ { "DarkMagenta", RGB(0x8b, 0x00, 0x8b) },
+ { "DarkOliveGreen", RGB(0x55, 0x6b, 0x2f) },
+ { "DarkOliveGreen1", RGB(0xca, 0xff, 0x70) },
+ { "DarkOliveGreen2", RGB(0xbc, 0xee, 0x68) },
+ { "DarkOliveGreen3", RGB(0xa2, 0xcd, 0x5a) },
+ { "DarkOliveGreen4", RGB(0x6e, 0x8b, 0x3d) },
+ { "DarkOrange", RGB(0xff, 0x8c, 0x00) },
+ { "DarkOrange1", RGB(0xff, 0x7f, 0x0) },
+ { "DarkOrange2", RGB(0xee, 0x76, 0x0) },
+ { "DarkOrange3", RGB(0xcd, 0x66, 0x0) },
+ { "DarkOrange4", RGB(0x8b, 0x45, 0x0) },
+ { "DarkOrchid", RGB(0x99, 0x32, 0xcc) },
+ { "DarkOrchid1", RGB(0xbf, 0x3e, 0xff) },
+ { "DarkOrchid2", RGB(0xb2, 0x3a, 0xee) },
+ { "DarkOrchid3", RGB(0x9a, 0x32, 0xcd) },
+ { "DarkOrchid4", RGB(0x68, 0x22, 0x8b) },
+ { "DarkRed", RGB(0x8b, 0x00, 0x00) },
+ { "DarkSalmon", RGB(0xe9, 0x96, 0x7a) },
+ { "DarkSeaGreen", RGB(0x8f, 0xbc, 0x8f) },
+ { "DarkSeaGreen1", RGB(0xc1, 0xff, 0xc1) },
+ { "DarkSeaGreen2", RGB(0xb4, 0xee, 0xb4) },
+ { "DarkSeaGreen3", RGB(0x9b, 0xcd, 0x9b) },
+ { "DarkSeaGreen4", RGB(0x69, 0x8b, 0x69) },
+ { "DarkSlateBlue", RGB(0x48, 0x3d, 0x8b) },
+ { "DarkSlateGray", RGB(0x2f, 0x4f, 0x4f) },
+ { "DarkSlateGray1", RGB(0x97, 0xff, 0xff) },
+ { "DarkSlateGray2", RGB(0x8d, 0xee, 0xee) },
+ { "DarkSlateGray3", RGB(0x79, 0xcd, 0xcd) },
+ { "DarkSlateGray4", RGB(0x52, 0x8b, 0x8b) },
+ { "DarkSlateGrey", RGB(0x2f, 0x4f, 0x4f) },
+ { "DarkTurquoise", RGB(0x00, 0xce, 0xd1) },
+ { "DarkViolet", RGB(0x94, 0x00, 0xd3) },
+ { "DarkYellow", RGB(0xbb, 0xbb, 0x00) },
+ { "DeepPink", RGB(0xff, 0x14, 0x93) },
+ { "DeepPink1", RGB(0xff, 0x14, 0x93) },
+ { "DeepPink2", RGB(0xee, 0x12, 0x89) },
+ { "DeepPink3", RGB(0xcd, 0x10, 0x76) },
+ { "DeepPink4", RGB(0x8b, 0xa, 0x50) },
+ { "DeepSkyBlue", RGB(0x00, 0xbf, 0xff) },
+ { "DeepSkyBlue1", RGB(0x0, 0xbf, 0xff) },
+ { "DeepSkyBlue2", RGB(0x0, 0xb2, 0xee) },
+ { "DeepSkyBlue3", RGB(0x0, 0x9a, 0xcd) },
+ { "DeepSkyBlue4", RGB(0x0, 0x68, 0x8b) },
+ { "DimGray", RGB(0x69, 0x69, 0x69) },
+ { "DimGrey", RGB(0x69, 0x69, 0x69) },
+ { "DodgerBlue", RGB(0x1e, 0x90, 0xff) },
+ { "DodgerBlue1", RGB(0x1e, 0x90, 0xff) },
+ { "DodgerBlue2", RGB(0x1c, 0x86, 0xee) },
+ { "DodgerBlue3", RGB(0x18, 0x74, 0xcd) },
+ { "DodgerBlue4", RGB(0x10, 0x4e, 0x8b) },
+ { "Firebrick", RGB(0xb2, 0x22, 0x22) },
+ { "Firebrick1", RGB(0xff, 0x30, 0x30) },
+ { "Firebrick2", RGB(0xee, 0x2c, 0x2c) },
+ { "Firebrick3", RGB(0xcd, 0x26, 0x26) },
+ { "Firebrick4", RGB(0x8b, 0x1a, 0x1a) },
+ { "FloralWhite", RGB(0xff, 0xfa, 0xf0) },
+ { "ForestGreen", RGB(0x22, 0x8b, 0x22) },
+ { "Fuchsia", RGB(0xff, 0x00, 0xff) },
+ { "Gainsboro", RGB(0xdc, 0xdc, 0xdc) },
+ { "GhostWhite", RGB(0xf8, 0xf8, 0xff) },
+ { "Gold", RGB(0xff, 0xd7, 0x00) },
+ { "Gold1", RGB(0xff, 0xd7, 0x0) },
+ { "Gold2", RGB(0xee, 0xc9, 0x0) },
+ { "Gold3", RGB(0xcd, 0xad, 0x0) },
+ { "Gold4", RGB(0x8b, 0x75, 0x0) },
+ { "GoldenRod", RGB(0xda, 0xa5, 0x20) },
+ { "Goldenrod1", RGB(0xff, 0xc1, 0x25) },
+ { "Goldenrod2", RGB(0xee, 0xb4, 0x22) },
+ { "Goldenrod3", RGB(0xcd, 0x9b, 0x1d) },
+ { "Goldenrod4", RGB(0x8b, 0x69, 0x14) },
+ { "Gray", RGB(0x80, 0x80, 0x80) },
+ { "Gray0", RGB(0x0, 0x0, 0x0) },
+ { "Gray1", RGB(0x3, 0x3, 0x3) },
+ { "Gray10", RGB(0x1a, 0x1a, 0x1a) },
+ { "Gray100", RGB(0xff, 0xff, 0xff) },
+ { "Gray11", RGB(0x1c, 0x1c, 0x1c) },
+ { "Gray12", RGB(0x1f, 0x1f, 0x1f) },
+ { "Gray13", RGB(0x21, 0x21, 0x21) },
+ { "Gray14", RGB(0x24, 0x24, 0x24) },
+ { "Gray15", RGB(0x26, 0x26, 0x26) },
+ { "Gray16", RGB(0x29, 0x29, 0x29) },
+ { "Gray17", RGB(0x2b, 0x2b, 0x2b) },
+ { "Gray18", RGB(0x2e, 0x2e, 0x2e) },
+ { "Gray19", RGB(0x30, 0x30, 0x30) },
+ { "Gray2", RGB(0x5, 0x5, 0x5) },
+ { "Gray20", RGB(0x33, 0x33, 0x33) },
+ { "Gray21", RGB(0x36, 0x36, 0x36) },
+ { "Gray22", RGB(0x38, 0x38, 0x38) },
+ { "Gray23", RGB(0x3b, 0x3b, 0x3b) },
+ { "Gray24", RGB(0x3d, 0x3d, 0x3d) },
+ { "Gray25", RGB(0x40, 0x40, 0x40) },
+ { "Gray26", RGB(0x42, 0x42, 0x42) },
+ { "Gray27", RGB(0x45, 0x45, 0x45) },
+ { "Gray28", RGB(0x47, 0x47, 0x47) },
+ { "Gray29", RGB(0x4a, 0x4a, 0x4a) },
+ { "Gray3", RGB(0x8, 0x8, 0x8) },
+ { "Gray30", RGB(0x4d, 0x4d, 0x4d) },
+ { "Gray31", RGB(0x4f, 0x4f, 0x4f) },
+ { "Gray32", RGB(0x52, 0x52, 0x52) },
+ { "Gray33", RGB(0x54, 0x54, 0x54) },
+ { "Gray34", RGB(0x57, 0x57, 0x57) },
+ { "Gray35", RGB(0x59, 0x59, 0x59) },
+ { "Gray36", RGB(0x5c, 0x5c, 0x5c) },
+ { "Gray37", RGB(0x5e, 0x5e, 0x5e) },
+ { "Gray38", RGB(0x61, 0x61, 0x61) },
+ { "Gray39", RGB(0x63, 0x63, 0x63) },
+ { "Gray4", RGB(0xa, 0xa, 0xa) },
+ { "Gray40", RGB(0x66, 0x66, 0x66) },
+ { "Gray41", RGB(0x69, 0x69, 0x69) },
+ { "Gray42", RGB(0x6b, 0x6b, 0x6b) },
+ { "Gray43", RGB(0x6e, 0x6e, 0x6e) },
+ { "Gray44", RGB(0x70, 0x70, 0x70) },
+ { "Gray45", RGB(0x73, 0x73, 0x73) },
+ { "Gray46", RGB(0x75, 0x75, 0x75) },
+ { "Gray47", RGB(0x78, 0x78, 0x78) },
+ { "Gray48", RGB(0x7a, 0x7a, 0x7a) },
+ { "Gray49", RGB(0x7d, 0x7d, 0x7d) },
+ { "Gray5", RGB(0xd, 0xd, 0xd) },
+ { "Gray50", RGB(0x7f, 0x7f, 0x7f) },
+ { "Gray51", RGB(0x82, 0x82, 0x82) },
+ { "Gray52", RGB(0x85, 0x85, 0x85) },
+ { "Gray53", RGB(0x87, 0x87, 0x87) },
+ { "Gray54", RGB(0x8a, 0x8a, 0x8a) },
+ { "Gray55", RGB(0x8c, 0x8c, 0x8c) },
+ { "Gray56", RGB(0x8f, 0x8f, 0x8f) },
+ { "Gray57", RGB(0x91, 0x91, 0x91) },
+ { "Gray58", RGB(0x94, 0x94, 0x94) },
+ { "Gray59", RGB(0x96, 0x96, 0x96) },
+ { "Gray6", RGB(0xf, 0xf, 0xf) },
+ { "Gray60", RGB(0x99, 0x99, 0x99) },
+ { "Gray61", RGB(0x9c, 0x9c, 0x9c) },
+ { "Gray62", RGB(0x9e, 0x9e, 0x9e) },
+ { "Gray63", RGB(0xa1, 0xa1, 0xa1) },
+ { "Gray64", RGB(0xa3, 0xa3, 0xa3) },
+ { "Gray65", RGB(0xa6, 0xa6, 0xa6) },
+ { "Gray66", RGB(0xa8, 0xa8, 0xa8) },
+ { "Gray67", RGB(0xab, 0xab, 0xab) },
+ { "Gray68", RGB(0xad, 0xad, 0xad) },
+ { "Gray69", RGB(0xb0, 0xb0, 0xb0) },
+ { "Gray7", RGB(0x12, 0x12, 0x12) },
+ { "Gray70", RGB(0xb3, 0xb3, 0xb3) },
+ { "Gray71", RGB(0xb5, 0xb5, 0xb5) },
+ { "Gray72", RGB(0xb8, 0xb8, 0xb8) },
+ { "Gray73", RGB(0xba, 0xba, 0xba) },
+ { "Gray74", RGB(0xbd, 0xbd, 0xbd) },
+ { "Gray75", RGB(0xbf, 0xbf, 0xbf) },
+ { "Gray76", RGB(0xc2, 0xc2, 0xc2) },
+ { "Gray77", RGB(0xc4, 0xc4, 0xc4) },
+ { "Gray78", RGB(0xc7, 0xc7, 0xc7) },
+ { "Gray79", RGB(0xc9, 0xc9, 0xc9) },
+ { "Gray8", RGB(0x14, 0x14, 0x14) },
+ { "Gray80", RGB(0xcc, 0xcc, 0xcc) },
+ { "Gray81", RGB(0xcf, 0xcf, 0xcf) },
+ { "Gray82", RGB(0xd1, 0xd1, 0xd1) },
+ { "Gray83", RGB(0xd4, 0xd4, 0xd4) },
+ { "Gray84", RGB(0xd6, 0xd6, 0xd6) },
+ { "Gray85", RGB(0xd9, 0xd9, 0xd9) },
+ { "Gray86", RGB(0xdb, 0xdb, 0xdb) },
+ { "Gray87", RGB(0xde, 0xde, 0xde) },
+ { "Gray88", RGB(0xe0, 0xe0, 0xe0) },
+ { "Gray89", RGB(0xe3, 0xe3, 0xe3) },
+ { "Gray9", RGB(0x17, 0x17, 0x17) },
+ { "Gray90", RGB(0xe5, 0xe5, 0xe5) },
+ { "Gray91", RGB(0xe8, 0xe8, 0xe8) },
+ { "Gray92", RGB(0xeb, 0xeb, 0xeb) },
+ { "Gray93", RGB(0xed, 0xed, 0xed) },
+ { "Gray94", RGB(0xf0, 0xf0, 0xf0) },
+ { "Gray95", RGB(0xf2, 0xf2, 0xf2) },
+ { "Gray96", RGB(0xf5, 0xf5, 0xf5) },
+ { "Gray97", RGB(0xf7, 0xf7, 0xf7) },
+ { "Gray98", RGB(0xfa, 0xfa, 0xfa) },
+ { "Gray99", RGB(0xfc, 0xfc, 0xfc) },
+ { "Green", RGB(0x00, 0x80, 0x00) },
+ { "Green1", RGB(0x0, 0xff, 0x0) },
+ { "Green2", RGB(0x0, 0xee, 0x0) },
+ { "Green3", RGB(0x0, 0xcd, 0x0) },
+ { "Green4", RGB(0x0, 0x8b, 0x0) },
+ { "GreenYellow", RGB(0xad, 0xff, 0x2f) },
+ { "Grey", RGB(0x80, 0x80, 0x80) },
+ { "Grey0", RGB(0x0, 0x0, 0x0) },
+ { "Grey1", RGB(0x3, 0x3, 0x3) },
+ { "Grey10", RGB(0x1a, 0x1a, 0x1a) },
+ { "Grey100", RGB(0xff, 0xff, 0xff) },
+ { "Grey11", RGB(0x1c, 0x1c, 0x1c) },
+ { "Grey12", RGB(0x1f, 0x1f, 0x1f) },
+ { "Grey13", RGB(0x21, 0x21, 0x21) },
+ { "Grey14", RGB(0x24, 0x24, 0x24) },
+ { "Grey15", RGB(0x26, 0x26, 0x26) },
+ { "Grey16", RGB(0x29, 0x29, 0x29) },
+ { "Grey17", RGB(0x2b, 0x2b, 0x2b) },
+ { "Grey18", RGB(0x2e, 0x2e, 0x2e) },
+ { "Grey19", RGB(0x30, 0x30, 0x30) },
+ { "Grey2", RGB(0x5, 0x5, 0x5) },
+ { "Grey20", RGB(0x33, 0x33, 0x33) },
+ { "Grey21", RGB(0x36, 0x36, 0x36) },
+ { "Grey22", RGB(0x38, 0x38, 0x38) },
+ { "Grey23", RGB(0x3b, 0x3b, 0x3b) },
+ { "Grey24", RGB(0x3d, 0x3d, 0x3d) },
+ { "Grey25", RGB(0x40, 0x40, 0x40) },
+ { "Grey26", RGB(0x42, 0x42, 0x42) },
+ { "Grey27", RGB(0x45, 0x45, 0x45) },
+ { "Grey28", RGB(0x47, 0x47, 0x47) },
+ { "Grey29", RGB(0x4a, 0x4a, 0x4a) },
+ { "Grey3", RGB(0x8, 0x8, 0x8) },
+ { "Grey30", RGB(0x4d, 0x4d, 0x4d) },
+ { "Grey31", RGB(0x4f, 0x4f, 0x4f) },
+ { "Grey32", RGB(0x52, 0x52, 0x52) },
+ { "Grey33", RGB(0x54, 0x54, 0x54) },
+ { "Grey34", RGB(0x57, 0x57, 0x57) },
+ { "Grey35", RGB(0x59, 0x59, 0x59) },
+ { "Grey36", RGB(0x5c, 0x5c, 0x5c) },
+ { "Grey37", RGB(0x5e, 0x5e, 0x5e) },
+ { "Grey38", RGB(0x61, 0x61, 0x61) },
+ { "Grey39", RGB(0x63, 0x63, 0x63) },
+ { "Grey4", RGB(0xa, 0xa, 0xa) },
+ { "Grey40", RGB(0x66, 0x66, 0x66) },
+ { "Grey41", RGB(0x69, 0x69, 0x69) },
+ { "Grey42", RGB(0x6b, 0x6b, 0x6b) },
+ { "Grey43", RGB(0x6e, 0x6e, 0x6e) },
+ { "Grey44", RGB(0x70, 0x70, 0x70) },
+ { "Grey45", RGB(0x73, 0x73, 0x73) },
+ { "Grey46", RGB(0x75, 0x75, 0x75) },
+ { "Grey47", RGB(0x78, 0x78, 0x78) },
+ { "Grey48", RGB(0x7a, 0x7a, 0x7a) },
+ { "Grey49", RGB(0x7d, 0x7d, 0x7d) },
+ { "Grey5", RGB(0xd, 0xd, 0xd) },
+ { "Grey50", RGB(0x7f, 0x7f, 0x7f) },
+ { "Grey51", RGB(0x82, 0x82, 0x82) },
+ { "Grey52", RGB(0x85, 0x85, 0x85) },
+ { "Grey53", RGB(0x87, 0x87, 0x87) },
+ { "Grey54", RGB(0x8a, 0x8a, 0x8a) },
+ { "Grey55", RGB(0x8c, 0x8c, 0x8c) },
+ { "Grey56", RGB(0x8f, 0x8f, 0x8f) },
+ { "Grey57", RGB(0x91, 0x91, 0x91) },
+ { "Grey58", RGB(0x94, 0x94, 0x94) },
+ { "Grey59", RGB(0x96, 0x96, 0x96) },
+ { "Grey6", RGB(0xf, 0xf, 0xf) },
+ { "Grey60", RGB(0x99, 0x99, 0x99) },
+ { "Grey61", RGB(0x9c, 0x9c, 0x9c) },
+ { "Grey62", RGB(0x9e, 0x9e, 0x9e) },
+ { "Grey63", RGB(0xa1, 0xa1, 0xa1) },
+ { "Grey64", RGB(0xa3, 0xa3, 0xa3) },
+ { "Grey65", RGB(0xa6, 0xa6, 0xa6) },
+ { "Grey66", RGB(0xa8, 0xa8, 0xa8) },
+ { "Grey67", RGB(0xab, 0xab, 0xab) },
+ { "Grey68", RGB(0xad, 0xad, 0xad) },
+ { "Grey69", RGB(0xb0, 0xb0, 0xb0) },
+ { "Grey7", RGB(0x12, 0x12, 0x12) },
+ { "Grey70", RGB(0xb3, 0xb3, 0xb3) },
+ { "Grey71", RGB(0xb5, 0xb5, 0xb5) },
+ { "Grey72", RGB(0xb8, 0xb8, 0xb8) },
+ { "Grey73", RGB(0xba, 0xba, 0xba) },
+ { "Grey74", RGB(0xbd, 0xbd, 0xbd) },
+ { "Grey75", RGB(0xbf, 0xbf, 0xbf) },
+ { "Grey76", RGB(0xc2, 0xc2, 0xc2) },
+ { "Grey77", RGB(0xc4, 0xc4, 0xc4) },
+ { "Grey78", RGB(0xc7, 0xc7, 0xc7) },
+ { "Grey79", RGB(0xc9, 0xc9, 0xc9) },
+ { "Grey8", RGB(0x14, 0x14, 0x14) },
+ { "Grey80", RGB(0xcc, 0xcc, 0xcc) },
+ { "Grey81", RGB(0xcf, 0xcf, 0xcf) },
+ { "Grey82", RGB(0xd1, 0xd1, 0xd1) },
+ { "Grey83", RGB(0xd4, 0xd4, 0xd4) },
+ { "Grey84", RGB(0xd6, 0xd6, 0xd6) },
+ { "Grey85", RGB(0xd9, 0xd9, 0xd9) },
+ { "Grey86", RGB(0xdb, 0xdb, 0xdb) },
+ { "Grey87", RGB(0xde, 0xde, 0xde) },
+ { "Grey88", RGB(0xe0, 0xe0, 0xe0) },
+ { "Grey89", RGB(0xe3, 0xe3, 0xe3) },
+ { "Grey9", RGB(0x17, 0x17, 0x17) },
+ { "Grey90", RGB(0xe5, 0xe5, 0xe5) },
+ { "Grey91", RGB(0xe8, 0xe8, 0xe8) },
+ { "Grey92", RGB(0xeb, 0xeb, 0xeb) },
+ { "Grey93", RGB(0xed, 0xed, 0xed) },
+ { "Grey94", RGB(0xf0, 0xf0, 0xf0) },
+ { "Grey95", RGB(0xf2, 0xf2, 0xf2) },
+ { "Grey96", RGB(0xf5, 0xf5, 0xf5) },
+ { "Grey97", RGB(0xf7, 0xf7, 0xf7) },
+ { "Grey98", RGB(0xfa, 0xfa, 0xfa) },
+ { "Grey99", RGB(0xfc, 0xfc, 0xfc) },
+ { "Honeydew", RGB(0xf0, 0xff, 0xf0) },
+ { "Honeydew1", RGB(0xf0, 0xff, 0xf0) },
+ { "Honeydew2", RGB(0xe0, 0xee, 0xe0) },
+ { "Honeydew3", RGB(0xc1, 0xcd, 0xc1) },
+ { "Honeydew4", RGB(0x83, 0x8b, 0x83) },
+ { "HotPink", RGB(0xff, 0x69, 0xb4) },
+ { "HotPink1", RGB(0xff, 0x6e, 0xb4) },
+ { "HotPink2", RGB(0xee, 0x6a, 0xa7) },
+ { "HotPink3", RGB(0xcd, 0x60, 0x90) },
+ { "HotPink4", RGB(0x8b, 0x3a, 0x62) },
+ { "IndianRed", RGB(0xcd, 0x5c, 0x5c) },
+ { "IndianRed1", RGB(0xff, 0x6a, 0x6a) },
+ { "IndianRed2", RGB(0xee, 0x63, 0x63) },
+ { "IndianRed3", RGB(0xcd, 0x55, 0x55) },
+ { "IndianRed4", RGB(0x8b, 0x3a, 0x3a) },
+ { "Indigo", RGB(0x4b, 0x00, 0x82) },
+ { "Ivory", RGB(0xff, 0xff, 0xf0) },
+ { "Ivory1", RGB(0xff, 0xff, 0xf0) },
+ { "Ivory2", RGB(0xee, 0xee, 0xe0) },
+ { "Ivory3", RGB(0xcd, 0xcd, 0xc1) },
+ { "Ivory4", RGB(0x8b, 0x8b, 0x83) },
+ { "Khaki", RGB(0xf0, 0xe6, 0x8c) },
+ { "Khaki1", RGB(0xff, 0xf6, 0x8f) },
+ { "Khaki2", RGB(0xee, 0xe6, 0x85) },
+ { "Khaki3", RGB(0xcd, 0xc6, 0x73) },
+ { "Khaki4", RGB(0x8b, 0x86, 0x4e) },
+ { "Lavender", RGB(0xe6, 0xe6, 0xfa) },
+ { "LavenderBlush", RGB(0xff, 0xf0, 0xf5) },
+ { "LavenderBlush1", RGB(0xff, 0xf0, 0xf5) },
+ { "LavenderBlush2", RGB(0xee, 0xe0, 0xe5) },
+ { "LavenderBlush3", RGB(0xcd, 0xc1, 0xc5) },
+ { "LavenderBlush4", RGB(0x8b, 0x83, 0x86) },
+ { "LawnGreen", RGB(0x7c, 0xfc, 0x00) },
+ { "LemonChiffon", RGB(0xff, 0xfa, 0xcd) },
+ { "LemonChiffon1", RGB(0xff, 0xfa, 0xcd) },
+ { "LemonChiffon2", RGB(0xee, 0xe9, 0xbf) },
+ { "LemonChiffon3", RGB(0xcd, 0xc9, 0xa5) },
+ { "LemonChiffon4", RGB(0x8b, 0x89, 0x70) },
+ { "LightBlue", RGB(0xad, 0xd8, 0xe6) },
+ { "LightBlue1", RGB(0xbf, 0xef, 0xff) },
+ { "LightBlue2", RGB(0xb2, 0xdf, 0xee) },
+ { "LightBlue3", RGB(0x9a, 0xc0, 0xcd) },
+ { "LightBlue4", RGB(0x68, 0x83, 0x8b) },
+ { "LightCoral", RGB(0xf0, 0x80, 0x80) },
+ { "LightCyan", RGB(0xe0, 0xff, 0xff) },
+ { "LightCyan1", RGB(0xe0, 0xff, 0xff) },
+ { "LightCyan2", RGB(0xd1, 0xee, 0xee) },
+ { "LightCyan3", RGB(0xb4, 0xcd, 0xcd) },
+ { "LightCyan4", RGB(0x7a, 0x8b, 0x8b) },
+ { "LightGoldenrod", RGB(0xee, 0xdd, 0x82) },
+ { "LightGoldenrod1", RGB(0xff, 0xec, 0x8b) },
+ { "LightGoldenrod2", RGB(0xee, 0xdc, 0x82) },
+ { "LightGoldenrod3", RGB(0xcd, 0xbe, 0x70) },
+ { "LightGoldenrod4", RGB(0x8b, 0x81, 0x4c) },
+ { "LightGoldenRodYellow", RGB(0xfa, 0xfa, 0xd2) },
+ { "LightGray", RGB(0xd3, 0xd3, 0xd3) },
+ { "LightGreen", RGB(0x90, 0xee, 0x90) },
+ { "LightGrey", RGB(0xd3, 0xd3, 0xd3) },
+ { "LightMagenta", RGB(0xff, 0xbb, 0xff) },
+ { "LightPink", RGB(0xff, 0xb6, 0xc1) },
+ { "LightPink1", RGB(0xff, 0xae, 0xb9) },
+ { "LightPink2", RGB(0xee, 0xa2, 0xad) },
+ { "LightPink3", RGB(0xcd, 0x8c, 0x95) },
+ { "LightPink4", RGB(0x8b, 0x5f, 0x65) },
+ { "LightRed", RGB(0xff, 0xbb, 0xbb) },
+ { "LightSalmon", RGB(0xff, 0xa0, 0x7a) },
+ { "LightSalmon1", RGB(0xff, 0xa0, 0x7a) },
+ { "LightSalmon2", RGB(0xee, 0x95, 0x72) },
+ { "LightSalmon3", RGB(0xcd, 0x81, 0x62) },
+ { "LightSalmon4", RGB(0x8b, 0x57, 0x42) },
+ { "LightSeaGreen", RGB(0x20, 0xb2, 0xaa) },
+ { "LightSkyBlue", RGB(0x87, 0xce, 0xfa) },
+ { "LightSkyBlue1", RGB(0xb0, 0xe2, 0xff) },
+ { "LightSkyBlue2", RGB(0xa4, 0xd3, 0xee) },
+ { "LightSkyBlue3", RGB(0x8d, 0xb6, 0xcd) },
+ { "LightSkyBlue4", RGB(0x60, 0x7b, 0x8b) },
+ { "LightSlateBlue", RGB(0x84, 0x70, 0xff) },
+ { "LightSlateGray", RGB(0x77, 0x88, 0x99) },
+ { "LightSlateGrey", RGB(0x77, 0x88, 0x99) },
+ { "LightSteelBlue", RGB(0xb0, 0xc4, 0xde) },
+ { "LightSteelBlue1", RGB(0xca, 0xe1, 0xff) },
+ { "LightSteelBlue2", RGB(0xbc, 0xd2, 0xee) },
+ { "LightSteelBlue3", RGB(0xa2, 0xb5, 0xcd) },
+ { "LightSteelBlue4", RGB(0x6e, 0x7b, 0x8b) },
+ { "LightYellow", RGB(0xff, 0xff, 0xe0) },
+ { "LightYellow1", RGB(0xff, 0xff, 0xe0) },
+ { "LightYellow2", RGB(0xee, 0xee, 0xd1) },
+ { "LightYellow3", RGB(0xcd, 0xcd, 0xb4) },
+ { "LightYellow4", RGB(0x8b, 0x8b, 0x7a) },
+ { "Lime", RGB(0x00, 0xff, 0x00) },
+ { "LimeGreen", RGB(0x32, 0xcd, 0x32) },
+ { "Linen", RGB(0xfa, 0xf0, 0xe6) },
+ { "Magenta", RGB(0xff, 0x00, 0xff) },
+ { "Magenta1", RGB(0xff, 0x0, 0xff) },
+ { "Magenta2", RGB(0xee, 0x0, 0xee) },
+ { "Magenta3", RGB(0xcd, 0x0, 0xcd) },
+ { "Magenta4", RGB(0x8b, 0x0, 0x8b) },
+ { "Maroon", RGB(0x80, 0x00, 0x00) },
+ { "Maroon1", RGB(0xff, 0x34, 0xb3) },
+ { "Maroon2", RGB(0xee, 0x30, 0xa7) },
+ { "Maroon3", RGB(0xcd, 0x29, 0x90) },
+ { "Maroon4", RGB(0x8b, 0x1c, 0x62) },
+ { "MediumAquamarine", RGB(0x66, 0xcd, 0xaa) },
+ { "MediumBlue", RGB(0x00, 0x00, 0xcd) },
+ { "MediumOrchid", RGB(0xba, 0x55, 0xd3) },
+ { "MediumOrchid1", RGB(0xe0, 0x66, 0xff) },
+ { "MediumOrchid2", RGB(0xd1, 0x5f, 0xee) },
+ { "MediumOrchid3", RGB(0xb4, 0x52, 0xcd) },
+ { "MediumOrchid4", RGB(0x7a, 0x37, 0x8b) },
+ { "MediumPurple", RGB(0x93, 0x70, 0xdb) },
+ { "MediumPurple1", RGB(0xab, 0x82, 0xff) },
+ { "MediumPurple2", RGB(0x9f, 0x79, 0xee) },
+ { "MediumPurple3", RGB(0x89, 0x68, 0xcd) },
+ { "MediumPurple4", RGB(0x5d, 0x47, 0x8b) },
+ { "MediumSeaGreen", RGB(0x3c, 0xb3, 0x71) },
+ { "MediumSlateBlue", RGB(0x7b, 0x68, 0xee) },
+ { "MediumSpringGreen", RGB(0x00, 0xfa, 0x9a) },
+ { "MediumTurquoise", RGB(0x48, 0xd1, 0xcc) },
+ { "MediumVioletRed", RGB(0xc7, 0x15, 0x85) },
+ { "MidnightBlue", RGB(0x19, 0x19, 0x70) },
+ { "MintCream", RGB(0xf5, 0xff, 0xfa) },
+ { "MistyRose", RGB(0xff, 0xe4, 0xe1) },
+ { "MistyRose1", RGB(0xff, 0xe4, 0xe1) },
+ { "MistyRose2", RGB(0xee, 0xd5, 0xd2) },
+ { "MistyRose3", RGB(0xcd, 0xb7, 0xb5) },
+ { "MistyRose4", RGB(0x8b, 0x7d, 0x7b) },
+ { "Moccasin", RGB(0xff, 0xe4, 0xb5) },
+ { "NavajoWhite", RGB(0xff, 0xde, 0xad) },
+ { "NavajoWhite1", RGB(0xff, 0xde, 0xad) },
+ { "NavajoWhite2", RGB(0xee, 0xcf, 0xa1) },
+ { "NavajoWhite3", RGB(0xcd, 0xb3, 0x8b) },
+ { "NavajoWhite4", RGB(0x8b, 0x79, 0x5e) },
+ { "Navy", RGB(0x00, 0x00, 0x80) },
+ { "NavyBlue", RGB(0x0, 0x0, 0x80) },
+ { "OldLace", RGB(0xfd, 0xf5, 0xe6) },
+ { "Olive", RGB(0x80, 0x80, 0x00) },
+ { "OliveDrab", RGB(0x6b, 0x8e, 0x23) },
+ { "OliveDrab1", RGB(0xc0, 0xff, 0x3e) },
+ { "OliveDrab2", RGB(0xb3, 0xee, 0x3a) },
+ { "OliveDrab3", RGB(0x9a, 0xcd, 0x32) },
+ { "OliveDrab4", RGB(0x69, 0x8b, 0x22) },
+ { "Orange", RGB(0xff, 0xa5, 0x00) },
+ { "Orange1", RGB(0xff, 0xa5, 0x0) },
+ { "Orange2", RGB(0xee, 0x9a, 0x0) },
+ { "Orange3", RGB(0xcd, 0x85, 0x0) },
+ { "Orange4", RGB(0x8b, 0x5a, 0x0) },
+ { "OrangeRed", RGB(0xff, 0x45, 0x00) },
+ { "OrangeRed1", RGB(0xff, 0x45, 0x0) },
+ { "OrangeRed2", RGB(0xee, 0x40, 0x0) },
+ { "OrangeRed3", RGB(0xcd, 0x37, 0x0) },
+ { "OrangeRed4", RGB(0x8b, 0x25, 0x0) },
+ { "Orchid", RGB(0xda, 0x70, 0xd6) },
+ { "Orchid1", RGB(0xff, 0x83, 0xfa) },
+ { "Orchid2", RGB(0xee, 0x7a, 0xe9) },
+ { "Orchid3", RGB(0xcd, 0x69, 0xc9) },
+ { "Orchid4", RGB(0x8b, 0x47, 0x89) },
+ { "PaleGoldenRod", RGB(0xee, 0xe8, 0xaa) },
+ { "PaleGreen", RGB(0x98, 0xfb, 0x98) },
+ { "PaleGreen1", RGB(0x9a, 0xff, 0x9a) },
+ { "PaleGreen2", RGB(0x90, 0xee, 0x90) },
+ { "PaleGreen3", RGB(0x7c, 0xcd, 0x7c) },
+ { "PaleGreen4", RGB(0x54, 0x8b, 0x54) },
+ { "PaleTurquoise", RGB(0xaf, 0xee, 0xee) },
+ { "PaleTurquoise1", RGB(0xbb, 0xff, 0xff) },
+ { "PaleTurquoise2", RGB(0xae, 0xee, 0xee) },
+ { "PaleTurquoise3", RGB(0x96, 0xcd, 0xcd) },
+ { "PaleTurquoise4", RGB(0x66, 0x8b, 0x8b) },
+ { "PaleVioletRed", RGB(0xdb, 0x70, 0x93) },
+ { "PaleVioletRed1", RGB(0xff, 0x82, 0xab) },
+ { "PaleVioletRed2", RGB(0xee, 0x79, 0x9f) },
+ { "PaleVioletRed3", RGB(0xcd, 0x68, 0x89) },
+ { "PaleVioletRed4", RGB(0x8b, 0x47, 0x5d) },
+ { "PapayaWhip", RGB(0xff, 0xef, 0xd5) },
+ { "PeachPuff", RGB(0xff, 0xda, 0xb9) },
+ { "PeachPuff1", RGB(0xff, 0xda, 0xb9) },
+ { "PeachPuff2", RGB(0xee, 0xcb, 0xad) },
+ { "PeachPuff3", RGB(0xcd, 0xaf, 0x95) },
+ { "PeachPuff4", RGB(0x8b, 0x77, 0x65) },
+ { "Peru", RGB(0xcd, 0x85, 0x3f) },
+ { "Pink", RGB(0xff, 0xc0, 0xcb) },
+ { "Pink1", RGB(0xff, 0xb5, 0xc5) },
+ { "Pink2", RGB(0xee, 0xa9, 0xb8) },
+ { "Pink3", RGB(0xcd, 0x91, 0x9e) },
+ { "Pink4", RGB(0x8b, 0x63, 0x6c) },
+ { "Plum", RGB(0xdd, 0xa0, 0xdd) },
+ { "Plum1", RGB(0xff, 0xbb, 0xff) },
+ { "Plum2", RGB(0xee, 0xae, 0xee) },
+ { "Plum3", RGB(0xcd, 0x96, 0xcd) },
+ { "Plum4", RGB(0x8b, 0x66, 0x8b) },
+ { "PowderBlue", RGB(0xb0, 0xe0, 0xe6) },
+ { "Purple", RGB(0x80, 0x00, 0x80) },
+ { "Purple1", RGB(0x9b, 0x30, 0xff) },
+ { "Purple2", RGB(0x91, 0x2c, 0xee) },
+ { "Purple3", RGB(0x7d, 0x26, 0xcd) },
+ { "Purple4", RGB(0x55, 0x1a, 0x8b) },
+ { "RebeccaPurple", RGB(0x66, 0x33, 0x99) },
+ { "Red", RGB(0xff, 0x00, 0x00) },
+ { "Red1", RGB(0xff, 0x0, 0x0) },
+ { "Red2", RGB(0xee, 0x0, 0x0) },
+ { "Red3", RGB(0xcd, 0x0, 0x0) },
+ { "Red4", RGB(0x8b, 0x0, 0x0) },
+ { "RosyBrown", RGB(0xbc, 0x8f, 0x8f) },
+ { "RosyBrown1", RGB(0xff, 0xc1, 0xc1) },
+ { "RosyBrown2", RGB(0xee, 0xb4, 0xb4) },
+ { "RosyBrown3", RGB(0xcd, 0x9b, 0x9b) },
+ { "RosyBrown4", RGB(0x8b, 0x69, 0x69) },
+ { "RoyalBlue", RGB(0x41, 0x69, 0xe1) },
+ { "RoyalBlue1", RGB(0x48, 0x76, 0xff) },
+ { "RoyalBlue2", RGB(0x43, 0x6e, 0xee) },
+ { "RoyalBlue3", RGB(0x3a, 0x5f, 0xcd) },
+ { "RoyalBlue4", RGB(0x27, 0x40, 0x8b) },
+ { "SaddleBrown", RGB(0x8b, 0x45, 0x13) },
+ { "Salmon", RGB(0xfa, 0x80, 0x72) },
+ { "Salmon1", RGB(0xff, 0x8c, 0x69) },
+ { "Salmon2", RGB(0xee, 0x82, 0x62) },
+ { "Salmon3", RGB(0xcd, 0x70, 0x54) },
+ { "Salmon4", RGB(0x8b, 0x4c, 0x39) },
+ { "SandyBrown", RGB(0xf4, 0xa4, 0x60) },
+ { "SeaGreen", RGB(0x2e, 0x8b, 0x57) },
+ { "SeaGreen1", RGB(0x54, 0xff, 0x9f) },
+ { "SeaGreen2", RGB(0x4e, 0xee, 0x94) },
+ { "SeaGreen3", RGB(0x43, 0xcd, 0x80) },
+ { "SeaGreen4", RGB(0x2e, 0x8b, 0x57) },
+ { "SeaShell", RGB(0xff, 0xf5, 0xee) },
+ { "Seashell1", RGB(0xff, 0xf5, 0xee) },
+ { "Seashell2", RGB(0xee, 0xe5, 0xde) },
+ { "Seashell3", RGB(0xcd, 0xc5, 0xbf) },
+ { "Seashell4", RGB(0x8b, 0x86, 0x82) },
+ { "Sienna", RGB(0xa0, 0x52, 0x2d) },
+ { "Sienna1", RGB(0xff, 0x82, 0x47) },
+ { "Sienna2", RGB(0xee, 0x79, 0x42) },
+ { "Sienna3", RGB(0xcd, 0x68, 0x39) },
+ { "Sienna4", RGB(0x8b, 0x47, 0x26) },
+ { "Silver", RGB(0xc0, 0xc0, 0xc0) },
+ { "SkyBlue", RGB(0x87, 0xce, 0xeb) },
+ { "SkyBlue1", RGB(0x87, 0xce, 0xff) },
+ { "SkyBlue2", RGB(0x7e, 0xc0, 0xee) },
+ { "SkyBlue3", RGB(0x6c, 0xa6, 0xcd) },
+ { "SkyBlue4", RGB(0x4a, 0x70, 0x8b) },
+ { "SlateBlue", RGB(0x6a, 0x5a, 0xcd) },
+ { "SlateBlue1", RGB(0x83, 0x6f, 0xff) },
+ { "SlateBlue2", RGB(0x7a, 0x67, 0xee) },
+ { "SlateBlue3", RGB(0x69, 0x59, 0xcd) },
+ { "SlateBlue4", RGB(0x47, 0x3c, 0x8b) },
+ { "SlateGray", RGB(0x70, 0x80, 0x90) },
+ { "SlateGray1", RGB(0xc6, 0xe2, 0xff) },
+ { "SlateGray2", RGB(0xb9, 0xd3, 0xee) },
+ { "SlateGray3", RGB(0x9f, 0xb6, 0xcd) },
+ { "SlateGray4", RGB(0x6c, 0x7b, 0x8b) },
+ { "SlateGrey", RGB(0x70, 0x80, 0x90) },
+ { "Snow", RGB(0xff, 0xfa, 0xfa) },
+ { "Snow1", RGB(0xff, 0xfa, 0xfa) },
+ { "Snow2", RGB(0xee, 0xe9, 0xe9) },
+ { "Snow3", RGB(0xcd, 0xc9, 0xc9) },
+ { "Snow4", RGB(0x8b, 0x89, 0x89) },
+ { "SpringGreen", RGB(0x00, 0xff, 0x7f) },
+ { "SpringGreen1", RGB(0x0, 0xff, 0x7f) },
+ { "SpringGreen2", RGB(0x0, 0xee, 0x76) },
+ { "SpringGreen3", RGB(0x0, 0xcd, 0x66) },
+ { "SpringGreen4", RGB(0x0, 0x8b, 0x45) },
+ { "SteelBlue", RGB(0x46, 0x82, 0xb4) },
+ { "SteelBlue1", RGB(0x63, 0xb8, 0xff) },
+ { "SteelBlue2", RGB(0x5c, 0xac, 0xee) },
+ { "SteelBlue3", RGB(0x4f, 0x94, 0xcd) },
+ { "SteelBlue4", RGB(0x36, 0x64, 0x8b) },
+ { "Tan", RGB(0xd2, 0xb4, 0x8c) },
+ { "Tan1", RGB(0xff, 0xa5, 0x4f) },
+ { "Tan2", RGB(0xee, 0x9a, 0x49) },
+ { "Tan3", RGB(0xcd, 0x85, 0x3f) },
+ { "Tan4", RGB(0x8b, 0x5a, 0x2b) },
+ { "Teal", RGB(0x00, 0x80, 0x80) },
+ { "Thistle", RGB(0xd8, 0xbf, 0xd8) },
+ { "Thistle1", RGB(0xff, 0xe1, 0xff) },
+ { "Thistle2", RGB(0xee, 0xd2, 0xee) },
+ { "Thistle3", RGB(0xcd, 0xb5, 0xcd) },
+ { "Thistle4", RGB(0x8b, 0x7b, 0x8b) },
+ { "Tomato", RGB(0xff, 0x63, 0x47) },
+ { "Tomato1", RGB(0xff, 0x63, 0x47) },
+ { "Tomato2", RGB(0xee, 0x5c, 0x42) },
+ { "Tomato3", RGB(0xcd, 0x4f, 0x39) },
+ { "Tomato4", RGB(0x8b, 0x36, 0x26) },
+ { "Turquoise", RGB(0x40, 0xe0, 0xd0) },
+ { "Turquoise1", RGB(0x0, 0xf5, 0xff) },
+ { "Turquoise2", RGB(0x0, 0xe5, 0xee) },
+ { "Turquoise3", RGB(0x0, 0xc5, 0xcd) },
+ { "Turquoise4", RGB(0x0, 0x86, 0x8b) },
+ { "Violet", RGB(0xee, 0x82, 0xee) },
+ { "VioletRed", RGB(0xd0, 0x20, 0x90) },
+ { "VioletRed1", RGB(0xff, 0x3e, 0x96) },
+ { "VioletRed2", RGB(0xee, 0x3a, 0x8c) },
+ { "VioletRed3", RGB(0xcd, 0x32, 0x78) },
+ { "VioletRed4", RGB(0x8b, 0x22, 0x52) },
+ { "WebGray", RGB(0x80, 0x80, 0x80) },
+ { "WebGreen", RGB(0x0, 0x80, 0x0) },
+ { "WebGrey", RGB(0x80, 0x80, 0x80) },
+ { "WebMaroon", RGB(0x80, 0x0, 0x0) },
+ { "WebPurple", RGB(0x80, 0x0, 0x80) },
+ { "Wheat", RGB(0xf5, 0xde, 0xb3) },
+ { "Wheat1", RGB(0xff, 0xe7, 0xba) },
+ { "Wheat2", RGB(0xee, 0xd8, 0xae) },
+ { "Wheat3", RGB(0xcd, 0xba, 0x96) },
+ { "Wheat4", RGB(0x8b, 0x7e, 0x66) },
+ { "White", RGB(0xff, 0xff, 0xff) },
+ { "WhiteSmoke", RGB(0xf5, 0xf5, 0xf5) },
+ { "X11Gray", RGB(0xbe, 0xbe, 0xbe) },
+ { "X11Green", RGB(0x0, 0xff, 0x0) },
+ { "X11Grey", RGB(0xbe, 0xbe, 0xbe) },
+ { "X11Maroon", RGB(0xb0, 0x30, 0x60) },
+ { "X11Purple", RGB(0xa0, 0x20, 0xf0) },
+ { "Yellow", RGB(0xff, 0xff, 0x00) },
+ { "Yellow1", RGB(0xff, 0xff, 0x0) },
+ { "Yellow2", RGB(0xee, 0xee, 0x0) },
+ { "Yellow3", RGB(0xcd, 0xcd, 0x0) },
+ { "Yellow4", RGB(0x8b, 0x8b, 0x0) },
+ { "YellowGreen", RGB(0x9a, 0xcd, 0x32) },
+ { NULL, 0 },
};
RgbValue name_to_color(uint8_t *name)
@@ -7588,6 +8238,10 @@ RgbValue name_to_color(uint8_t *name)
&& isxdigit(name[6]) && name[7] == NUL) {
// rgb hex string
return strtol((char *)(name + 1), NULL, 16);
+ } else if (!STRICMP(name, "bg") || !STRICMP(name, "background")) {
+ return normal_bg;
+ } else if (!STRICMP(name, "fg") || !STRICMP(name, "foreground")) {
+ return normal_fg;
}
for (int i = 0; color_name_table[i].name != NULL; i++) {
diff --git a/src/nvim/tag.c b/src/nvim/tag.c
index 7885d467d8..0b76e36a6b 100644
--- a/src/nvim/tag.c
+++ b/src/nvim/tag.c
@@ -26,7 +26,6 @@
#include "nvim/mbyte.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
@@ -215,8 +214,12 @@ do_tag (
* Don't add a tag to the tagstack if 'tagstack' has been reset.
*/
if (!p_tgst && *tag != NUL) {
- use_tagstack = FALSE;
- new_tag = TRUE;
+ use_tagstack = false;
+ new_tag = true;
+ if (g_do_tagpreview != 0) {
+ xfree(ptag_entry.tagname);
+ ptag_entry.tagname = vim_strsave(tag);
+ }
} else {
if (g_do_tagpreview != 0)
use_tagstack = FALSE;
@@ -787,7 +790,7 @@ do_tag (
vim_snprintf((char *)IObuff, IOSIZE, "ltag %s", tag);
set_errorlist(curwin, list, ' ', IObuff);
- list_free(list, TRUE);
+ list_free(list);
xfree(fname);
xfree(cmd);
@@ -1294,9 +1297,14 @@ find_tags (
* Read and parse the lines in the file one by one
*/
for (;; ) {
- line_breakcheck(); /* check for CTRL-C typed */
+ // check for CTRL-C typed, more often when jumping around
+ if (state == TS_BINARY || state == TS_SKIP_BACK) {
+ line_breakcheck();
+ } else {
+ fast_breakcheck();
+ }
if ((flags & TAG_INS_COMP)) /* Double brackets for gcc */
- ins_compl_check_keys(30);
+ ins_compl_check_keys(30, false);
if (got_int || compl_interrupted) {
stop_searching = TRUE;
break;
@@ -1859,7 +1867,7 @@ parse_line:
&& memcmp(mfp2->match, mfp->match,
(size_t)mfp->len) == 0)
break;
- line_breakcheck();
+ fast_breakcheck();
}
if (i < 0) {
((struct match_found **)(ga_match[mtt].ga_data))
@@ -2023,9 +2031,8 @@ get_tagfname (
if (first) {
ga_clear_strings(&tag_fnames);
ga_init(&tag_fnames, (int)sizeof(char_u *), 10);
- do_in_runtimepath((char_u *)
- "doc/tags doc/tags-??"
- , TRUE, found_tagfile_cb, NULL);
+ do_in_runtimepath((char_u *)"doc/tags doc/tags-??", DIP_ALL,
+ found_tagfile_cb, NULL);
}
if (tnp->tn_hf_idx >= tag_fnames.ga_len) {
@@ -2353,7 +2360,7 @@ jumpto_tag (
* file. Also accept a file name for which there is a matching BufReadCmd
* autocommand event (e.g., http://sys/file).
*/
- if (!os_file_exists(fname)
+ if (!os_path_exists(fname)
&& !has_autocmd(EVENT_BUFREADCMD, fname, NULL)
) {
retval = NOTAGFILE;
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index 104cc47cda..bd7b9fc58f 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -63,6 +63,7 @@
#include "nvim/map.h"
#include "nvim/misc1.h"
#include "nvim/move.h"
+#include "nvim/main.h"
#include "nvim/state.h"
#include "nvim/ex_docmd.h"
#include "nvim/ex_cmds.h"
@@ -126,7 +127,7 @@ struct terminal {
// we can't store a direct reference to the buffer because the
// refresh_timer_cb may be called after the buffer was freed, and there's
// no way to know if the memory was reused.
- uint64_t buf_handle;
+ handle_T buf_handle;
// program exited
bool closed, destroy;
// some vterm properties
@@ -163,9 +164,9 @@ static VTermColor default_vt_bg_rgb;
void terminal_init(void)
{
invalidated_terminals = pmap_new(ptr_t)();
- time_watcher_init(&loop, &refresh_timer, NULL);
+ time_watcher_init(&main_loop, &refresh_timer, NULL);
// refresh_timer_cb will redraw the screen which can call vimscript
- refresh_timer.events = queue_new_child(loop.events);
+ refresh_timer.events = multiqueue_new_child(main_loop.events);
// initialize a rgb->color index map for cterm attributes(VTermScreenCell
// only has RGB information and we need color indexes for terminal UIs)
@@ -200,7 +201,7 @@ void terminal_init(void)
void terminal_teardown(void)
{
time_watcher_stop(&refresh_timer);
- queue_free(refresh_timer.events);
+ multiqueue_free(refresh_timer.events);
time_watcher_close(&refresh_timer, NULL);
pmap_free(ptr_t)(invalidated_terminals);
map_free(int, int)(color_indexes);
@@ -240,6 +241,7 @@ Terminal *terminal_open(TerminalOptions opts)
set_option_value((uint8_t *)"wrap", false, NULL, OPT_LOCAL);
set_option_value((uint8_t *)"number", false, NULL, OPT_LOCAL);
set_option_value((uint8_t *)"relativenumber", false, NULL, OPT_LOCAL);
+ buf_set_term_title(curbuf, (char *)curbuf->b_ffname);
RESET_BINDING(curwin);
// Apply TermOpen autocmds so the user can configure the terminal
apply_autocmds(EVENT_TERMOPEN, NULL, NULL, false, curbuf);
@@ -347,15 +349,6 @@ void terminal_resize(Terminal *term, uint16_t width, uint16_t height)
height = (uint16_t)curheight;
}
- // The new width/height are the minimum for all windows that display the
- // terminal in the current tab.
- FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- if (!wp->w_closing && wp->w_buffer->terminal == term) {
- width = (uint16_t)MIN(width, (uint16_t)(wp->w_width - win_col_off(wp)));
- height = (uint16_t)MIN(height, (uint16_t)wp->w_height);
- }
- }
-
if (curheight == height && curwidth == width) {
return;
}
@@ -373,10 +366,10 @@ void terminal_resize(Terminal *term, uint16_t width, uint16_t height)
void terminal_enter(void)
{
buf_T *buf = curbuf;
+ assert(buf->terminal); // Should only be called when curbuf has a terminal.
TerminalState state, *s = &state;
memset(s, 0, sizeof(TerminalState));
s->term = buf->terminal;
- assert(s->term && "should only be called when curbuf has a terminal");
// Ensure the terminal is properly sized.
terminal_resize(s->term, 0, 0);
@@ -452,7 +445,7 @@ static int terminal_execute(VimState *state, int key)
case K_EVENT:
// We cannot let an event free the terminal yet. It is still needed.
s->term->refcount++;
- queue_process_events(loop.events);
+ multiqueue_process_events(main_loop.events);
s->term->refcount--;
if (s->term->buf_handle == 0) {
s->close = true;
@@ -626,6 +619,18 @@ static int term_movecursor(VTermPos new, VTermPos old, int visible,
return 1;
}
+static void buf_set_term_title(buf_T *buf, char *title)
+ FUNC_ATTR_NONNULL_ALL
+{
+ Error err;
+ dict_set_value(buf->b_vars,
+ cstr_as_string("term_title"),
+ STRING_OBJ(cstr_as_string(title)),
+ false,
+ false,
+ &err);
+}
+
static int term_settermprop(VTermProp prop, VTermValue *val, void *data)
{
Terminal *term = data;
@@ -641,12 +646,7 @@ static int term_settermprop(VTermProp prop, VTermValue *val, void *data)
case VTERM_PROP_TITLE: {
buf_T *buf = handle_get_buffer(term->buf_handle);
- Error err;
- api_free_object(dict_set_value(buf->b_vars,
- cstr_as_string("term_title"),
- STRING_OBJ(cstr_as_string(val->string)),
- false,
- &err));
+ buf_set_term_title(buf, val->string);
break;
}
@@ -955,7 +955,6 @@ static void invalidate_terminal(Terminal *term, int start_row, int end_row)
static void refresh_terminal(Terminal *term)
{
- // TODO(SplinterOfChaos): Find the condition that makes term->buf invalid.
buf_T *buf = handle_get_buffer(term->buf_handle);
bool valid = true;
if (!buf || !(valid = buf_valid(buf))) {
@@ -1082,7 +1081,8 @@ static void redraw(bool restore_cursor)
restore_cursor = true;
}
- int save_row, save_col;
+ int save_row = 0;
+ int save_col = 0;
if (restore_cursor) {
// save the current row/col to restore after updating screen when not
// focused
@@ -1158,15 +1158,15 @@ static bool is_focused(Terminal *term)
return State & TERM_FOCUS && curbuf->terminal == term;
}
-#define GET_CONFIG_VALUE(k, o) \
- do { \
- Error err; \
- /* Only called from terminal_open where curbuf->terminal is the */ \
- /* context */ \
- o = dict_get_value(curbuf->b_vars, cstr_as_string(k), &err); \
- if (o.type == kObjectTypeNil) { \
- o = dict_get_value(&globvardict, cstr_as_string(k), &err); \
- } \
+#define GET_CONFIG_VALUE(k, o) \
+ do { \
+ Error err; \
+ /* Only called from terminal_open where curbuf->terminal is the */ \
+ /* context */ \
+ o = dict_get_value(curbuf->b_vars, cstr_as_string(k), &err); \
+ if (o.type == kObjectTypeNil) { \
+ o = dict_get_value(&globvardict, cstr_as_string(k), &err); \
+ } \
} while (0)
static char *get_config_string(char *key)
diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile
index 03e6d213df..13b7da43dd 100644
--- a/src/nvim/testdir/Makefile
+++ b/src/nvim/testdir/Makefile
@@ -9,37 +9,45 @@ SCRIPTSOURCE := ../../../runtime
SCRIPTS := \
test8.out \
- test10.out \
- test12.out \
test13.out \
test14.out \
test17.out \
test24.out \
- test30.out \
test32.out \
- test34.out \
test37.out \
test40.out \
test42.out \
- test47.out \
test48.out \
test49.out \
test52.out \
test53.out \
- test55.out \
test64.out \
test73.out \
test79.out \
- test_listlbr.out \
test_marks.out \
# Tests using runtest.vim.vim.
# Keep test_alot*.res as the last one, sort the others.
NEW_TESTS = \
- test_cursor_func.res \
+ test_bufwintabinfo.res \
+ test_cmdline.res \
+ test_cscope.res \
+ test_diffmode.res \
+ test_gn.res \
+ test_hardcopy.res \
test_help_tagjump.res \
- test_menu.res \
+ test_history.res \
+ test_langmap.res \
+ test_match.res \
+ test_matchadd_conceal.res \
+ test_quickfix.res \
+ test_signs.res \
+ test_syntax.res \
+ test_timers.res \
+ test_usercommands.res \
test_viml.res \
+ test_visual.res \
+ test_window_id.res \
test_alot.res
SCRIPTS_GUI := test16.out
@@ -58,7 +66,7 @@ ifdef USE_VALGRIND
TOOL := valgrind -q \
-q \
$(VALGRIND_TOOL) \
- --suppressions=../../../.valgrind.supp \
+ --suppressions=../../.valgrind.supp \
--error-exitcode=123 \
--log-file=valgrind.\%p.$* \
$(VGDB) \
@@ -112,6 +120,7 @@ clean:
valgrind.* \
.*.swp \
.*.swo \
+ .gdbinit \
del
test1.out: .gdbinit test1.in
diff --git a/src/nvim/testdir/runtest.vim b/src/nvim/testdir/runtest.vim
index 5b34b4fc31..eb5912086b 100644
--- a/src/nvim/testdir/runtest.vim
+++ b/src/nvim/testdir/runtest.vim
@@ -2,6 +2,11 @@
" When the script is successful the .res file will be created.
" Errors are appended to the test.log file.
"
+" To execute only specific test functions, add a second argument. It will be
+" matched against the names of the Test_ function. E.g.:
+" ../vim -u NONE -S runtest.vim test_channel.vim open_delay
+" The output can be found in the "messages" file.
+"
" The test script may contain anything, only functions that start with
" "Test_" are special. These will be invoked and should contain assert
" functions. See test_assert.vim for an example.
@@ -19,6 +24,10 @@
"
" If cleanup after each Test_ function is needed, define a TearDown function.
" It will be called after each Test_ function.
+"
+" When debugging a test it can be useful to add messages to v:errors:
+" call add(v:errors, "this happened")
+
" Check that the screen size is at least 24 x 80 characters.
if &lines < 24 || &columns < 80
@@ -30,96 +39,151 @@ if &lines < 24 || &columns < 80
cquit
endif
+" Common with all tests on all systems.
+source setup.vim
+
" This also enables use of line continuation.
set viminfo+=nviminfo
+" Use utf-8 or latin1 be default, instead of whatever the system default
+" happens to be. Individual tests can overrule this at the top of the file.
+if has('multi_byte')
+ set encoding=utf-8
+else
+ set encoding=latin1
+endif
+
" Avoid stopping at the "hit enter" prompt
set nomore
" Output all messages in English.
lang mess C
+" Always use forward slashes.
+set shellslash
+
+" Align with vim defaults.
+set directory^=.
+set nohidden
+
+function RunTheTest(test)
+ echo 'Executing ' . a:test
+ if exists("*SetUp")
+ call SetUp()
+ endif
+
+ call add(s:messages, 'Executing ' . a:test)
+ let s:done += 1
+ try
+ exe 'call ' . a:test
+ catch /^\cskipped/
+ call add(s:messages, ' Skipped')
+ call add(s:skipped, 'SKIPPED ' . a:test . ': ' . substitute(v:exception, '^\S*\s\+', '', ''))
+ catch
+ call add(v:errors, 'Caught exception in ' . a:test . ': ' . v:exception . ' @ ' . v:throwpoint)
+ endtry
+
+ if exists("*TearDown")
+ call TearDown()
+ endif
+
+ " Close any extra windows and make the current one not modified.
+ while winnr('$') > 1
+ bwipe!
+ endwhile
+ set nomodified
+endfunc
+
" Source the test script. First grab the file name, in case the script
-" navigates away.
-let testname = expand('%')
-let done = 0
-let fail = 0
-let errors = []
-let messages = []
+" navigates away. g:testname can be used by the tests.
+let g:testname = expand('%')
+let s:done = 0
+let s:fail = 0
+let s:errors = []
+let s:messages = []
+let s:skipped = []
if expand('%') =~ 'test_viml.vim'
- " this test has intentional errors, don't use try/catch.
+ " this test has intentional s:errors, don't use try/catch.
source %
else
try
source %
catch
- let fail += 1
- call add(errors, 'Caught exception: ' . v:exception . ' @ ' . v:throwpoint)
+ let s:fail += 1
+ call add(s:errors, 'Caught exception: ' . v:exception . ' @ ' . v:throwpoint)
endtry
endif
+" Names of flaky tests.
+let s:flaky = []
+
" Locate Test_ functions and execute them.
set nomore
redir @q
-function /^Test_
+silent function /^Test_
redir END
-let tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
+let s:tests = split(substitute(@q, 'function \(\k*()\)', '\1', 'g'))
-for test in tests
- if exists("*SetUp")
- call SetUp()
- endif
+" If there is an extra argument filter the function names against it.
+if argc() > 1
+ let s:tests = filter(s:tests, 'v:val =~ argv(1)')
+endif
- call add(messages, 'Executing ' . test)
- let done += 1
- try
- exe 'call ' . test
- catch
- let fail += 1
- call add(v:errors, 'Caught exception in ' . test . ': ' . v:exception . ' @ ' . v:throwpoint)
- endtry
+" Execute the tests in alphabetical order.
+for s:test in sort(s:tests)
+ call RunTheTest(s:test)
+
+ if len(v:errors) > 0 && index(s:flaky, s:test) >= 0
+ call add(s:messages, 'Flaky test failed, running it again')
+ let v:errors = []
+ call RunTheTest(s:test)
+ endif
if len(v:errors) > 0
- let fail += 1
- call add(errors, 'Found errors in ' . test . ':')
- call extend(errors, v:errors)
+ let s:fail += 1
+ call add(s:errors, 'Found errors in ' . s:test . ':')
+ call extend(s:errors, v:errors)
let v:errors = []
endif
- if exists("*TearDown")
- call TearDown()
- endif
endfor
-if fail == 0
+" Don't write viminfo on exit.
+set viminfo=
+
+if s:fail == 0
" Success, create the .res file so that make knows it's done.
- exe 'split ' . fnamemodify(testname, ':r') . '.res'
+ exe 'split ' . fnamemodify(g:testname, ':r') . '.res'
write
endif
-if len(errors) > 0
+if len(s:errors) > 0
" Append errors to test.log
split test.log
call append(line('$'), '')
- call append(line('$'), 'From ' . testname . ':')
- call append(line('$'), errors)
+ call append(line('$'), 'From ' . g:testname . ':')
+ call append(line('$'), s:errors)
write
endif
-let message = 'Executed ' . done . (done > 1 ? ' tests': ' test')
+let message = 'Executed ' . s:done . (s:done > 1 ? ' tests': ' test')
echo message
-call add(messages, message)
-if fail > 0
- let message = fail . ' FAILED'
+call add(s:messages, message)
+if s:fail > 0
+ let message = s:fail . ' FAILED'
echo message
- call add(messages, message)
+ call add(s:messages, message)
+ call extend(s:messages, s:errors)
endif
-" Append messages to "messages"
+" Add SKIPPED messages
+call extend(s:messages, s:skipped)
+
+" Append messages to the file "messages"
split messages
call append(line('$'), '')
-call append(line('$'), 'From ' . testname . ':')
-call append(line('$'), messages)
+call append(line('$'), 'From ' . g:testname . ':')
+call append(line('$'), s:messages)
write
qall!
diff --git a/src/nvim/testdir/samples/quickfix.txt b/src/nvim/testdir/samples/quickfix.txt
new file mode 100644
index 0000000000..2de3835473
--- /dev/null
+++ b/src/nvim/testdir/samples/quickfix.txt
@@ -0,0 +1,4 @@
+samples/quickfix.txt:1:1:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+samples/quickfix.txt:2:1:bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+samples/quickfix.txt:3:1:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
+samples/quickfix.txt:4:1:dddddddddd
diff --git a/src/nvim/testdir/setup.vim b/src/nvim/testdir/setup.vim
new file mode 100644
index 0000000000..52876d1e6c
--- /dev/null
+++ b/src/nvim/testdir/setup.vim
@@ -0,0 +1,7 @@
+" Common preparations for running tests.
+
+" Make sure 'runtimepath' does not include $HOME.
+set rtp=$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after
+
+" Make sure $HOME does not get read or written.
+let $HOME = '/does/not/exist'
diff --git a/src/nvim/testdir/test10.in b/src/nvim/testdir/test10.in
deleted file mode 100644
index 2178cf41ce..0000000000
--- a/src/nvim/testdir/test10.in
+++ /dev/null
@@ -1,110 +0,0 @@
-Test for 'errorformat'. This will fail if the quickfix feature was disabled.
-
-STARTTEST
-:7/start of errorfile/,/end of errorfile/w! Xerrorfile1
-:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
-:/start of testfile/,/end of testfile/w! Xtestfile
-:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
-:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
-:cf Xerrorfile2
-:clast
-:copen
-:let a=w:quickfix_title
-:wincmd p
-lgR=a 
-:cf Xerrorfile1
-grA
-:cn
-gRLINE 6, COL 19
-:cn
-gRNO COLUMN SPECIFIED
-:cn
-gRAGAIN NO COLUMN
-:cn
-gRCOL 1
-:cn
-gRCOL 2
-:cn
-gRCOL 10
-:cn
-gRVCOL 10
-:cn
-grI
-:cn
-gR. SPACE POINTER
-:cn
-gR. DOT POINTER
-:cn
-gR. DASH POINTER
-:cn
-gR. TAB-SPACE POINTER
-:clast
-:cprev
-:cprev
-:wincmd w
-:let a=w:quickfix_title
-:wincmd p
-lgR=a 
-:w! test.out " Write contents of this file
-:qa!
-ENDTEST
-
-start of errorfile
-"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
-"Xtestfile", line 6 col 19; this is an error
-gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c
-Xtestfile:9: parse error before `asd'
-make: *** [vim] Error 1
-in file "Xtestfile" linenr 10: there is an error
-
-2 returned
-"Xtestfile", line 11 col 1; this is an error
-"Xtestfile", line 12 col 2; this is another error
-"Xtestfile", line 14:10; this is an error in column 10
-=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
-"Xtestfile", linenr 16: yet another problem
-Error in "Xtestfile" at line 17:
-x should be a dot
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
- ^
-Error in "Xtestfile" at line 18:
-x should be a dot
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
-.............^
-Error in "Xtestfile" at line 19:
-x should be a dot
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
---------------^
-Error in "Xtestfile" at line 20:
-x should be a dot
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
- ^
-
-Does anyone know what is the problem and how to correction it?
-"Xtestfile", line 21 col 9: What is the title of the quickfix window?
-"Xtestfile", line 22 col 9: What is the title of the quickfix window?
-end of errorfile
-
-start of testfile
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22
-end of testfile
diff --git a/src/nvim/testdir/test10.ok b/src/nvim/testdir/test10.ok
deleted file mode 100644
index 76a02f40b4..0000000000
--- a/src/nvim/testdir/test10.ok
+++ /dev/null
@@ -1,23 +0,0 @@
-start of testfile
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3
- xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx line 4
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5
- xxxxxxxxxxxxxxxxxLINE 6, COL 19 line 6
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8
- NO COLUMN SPECIFIEDxxxxxxxxxxx line 9
- AGAIN NO COLUMNxxxxxxxxxxxxxxx line 10
-COL 1 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11
- COL 2xxxxxxxxxxxxxxxxxxxxxxxxx line 12
- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13
- xxxxxxxxCOL 10xxxxxxxxxxxxxxxx line 14
- xVCOL 10xxxxxxxxxxxxxxxxxxxxxx line 15
- Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16
- xxxx. SPACE POINTERxxxxxxxxxxx line 17
- xxxxx. DOT POINTERxxxxxxxxxxxx line 18
- xxxxxx. DASH POINTERxxxxxxxxxx line 19
- xxxxxxx. TAB-SPACE POINTERxxxx line 20
- xxxxxxxx:cf Xerrorfile1xxxxxxx line 21
- xxxxxxxx:cf Xerrorfile2xxxxxxx line 22
-end of testfile
diff --git a/src/nvim/testdir/test10a.in b/src/nvim/testdir/test10a.in
deleted file mode 100644
index 99a5a03db8..0000000000
--- a/src/nvim/testdir/test10a.in
+++ /dev/null
@@ -1,72 +0,0 @@
-Test for 'errorformat'.
-
-STARTTEST
-:/start of errorfile/,/end of errorfile/w! Xerrorfile
-:/start of testfile/,/end of testfile/w! Xtestfile
-:cf Xerrorfile
-rA
-:cn
-rB
-:cn
-rC
-:cn
-rD
-:cn
-rE
-:w! test.out " Write contents of this file
-:qa!
-ENDTEST
-
-start of errorfile
-
- printf(" %d \n", (number/other)%10 );
-..................^
-%CC-E-NOSEMI, Missing ";".
-at line number 4 in file SYS$DISK:XTESTFILE
-
- other=10000000;
-.............^
-%CC-E-UNDECLARED, In this statement, "oszt" is not declared.
-at line number 7 in file SYS$DISK:XTESTFILE
-
- for (i = 0; i<7 ; i++ ){
-..................^
-%CC-E-UNDECLARED, In this statement, "i" is not declared.
-at line number 16 in file SYS$DISK:XTESTFILE
-
-some other error somewhere here.
-...........................^
-%CC-W-WARRING, Sorry, but no expalnation for such an warring.
-at line number 19 in file SYS$DISK:XTESTFILE
-
-and finally some other error exactly here.
-.....................................^
-%CC-I-INFORMATIONAL, It should be some informational message.
-at line number 20 in file SYS$DISK:XTESTFILE
-
-Does anyone know what is the problem and how to correct ?? :)
-end of errorfile
-
-start of testfile
-01234567890123456789012345678901234567
-line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-end of testfile
diff --git a/src/nvim/testdir/test10a.ok b/src/nvim/testdir/test10a.ok
deleted file mode 100644
index 10e78c9239..0000000000
--- a/src/nvim/testdir/test10a.ok
+++ /dev/null
@@ -1,23 +0,0 @@
-start of testfile
-01234567890123456789012345678901234567
-line 3 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 4 xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx
-line 5 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 6 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 7 xxxxxBxxxxxxxxxxxxxxxxxxxxxxxx
-line 8 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 9 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 16 xxxxxxxxxxCxxxxxxxxxxxxxxxxxxx
-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 19 xxxxxxxxxxxxxxxxxxxDxxxxxxxxxx
-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxE
-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-end of testfile
diff --git a/src/nvim/testdir/test12.in b/src/nvim/testdir/test12.in
deleted file mode 100644
index 0c0623e5d4..0000000000
--- a/src/nvim/testdir/test12.in
+++ /dev/null
@@ -1,50 +0,0 @@
-Tests for 'directory' option.
-- ".", in same dir as file
-- "./dir", in directory relative to file
-- "dir", in directory relative to current dir
-
-STARTTEST
-:set dir=.,~
-:/start of testfile/,/end of testfile/w! Xtest1
-:" do an ls of the current dir to find the swap file (should not be there)
-:if has("unix")
-: !ls .X*.swp >test.out
-:else
-: r !ls X*.swp >test.out
-:endif
-:!echo first line >>test.out
-:e Xtest1
-:if has("unix")
-:" Do an ls of the current dir to find the swap file, remove the leading dot
-:" to make the result the same for all systems.
-: r!ls .X*.swp
-: s/\.*X/X/
-: .w >>test.out
-: undo
-:else
-: !ls X*.swp >>test.out
-:endif
-:!echo under Xtest1.swp >>test.out
-:!mkdir Xtest2
-:set dir=./Xtest2,.,~
-:e Xtest1
-:!ls X*.swp >>test.out
-:!echo under under >>test.out
-:!ls Xtest2 >>test.out
-:!echo under Xtest1.swp >>test.out
-:!mkdir Xtest.je
-:/start of testfile/,/end of testfile/w! Xtest2/Xtest3
-:set dir=Xtest.je,~
-:e Xtest2/Xtest3
-:swap
-:!ls Xtest2 >>test.out
-:!echo under Xtest3 >>test.out
-:!ls Xtest.je >>test.out
-:!echo under Xtest3.swp >>test.out
-:qa!
-ENDTEST
-
-start of testfile
-line 2 Abcdefghij
-line 3 Abcdefghij
-end of testfile
diff --git a/src/nvim/testdir/test12.ok b/src/nvim/testdir/test12.ok
deleted file mode 100644
index 605623b117..0000000000
--- a/src/nvim/testdir/test12.ok
+++ /dev/null
@@ -1,10 +0,0 @@
-first line
-Xtest1.swp
-under Xtest1.swp
-under under
-Xtest1.swp
-under Xtest1.swp
-Xtest3
-under Xtest3
-Xtest3.swp
-under Xtest3.swp
diff --git a/src/nvim/testdir/test17.in b/src/nvim/testdir/test17.in
index 83abe17770..1a4ac6b6d1 100644
--- a/src/nvim/testdir/test17.in
+++ b/src/nvim/testdir/test17.in
@@ -4,13 +4,7 @@ Tests for:
STARTTEST
:set isfname=@,48-57,/,.,-,_,+,,,$,:,~,{,}
-:function! DeleteDirectory(dir)
-: if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
-: exec "silent !rmdir /Q /S " . a:dir
-: else
-: exec "silent !rm -rf " . a:dir
-: endif
-:endfun
+:"
:if has("unix")
:let $CDIR = "."
/CDIR
@@ -36,7 +30,7 @@ STARTTEST
:" check for 'include' without \zs or \ze
:lang C
:call delete("./Xbase.a")
-:call DeleteDirectory("Xdir1")
+:call delete("Xdir1", "rf")
:!mkdir Xdir1
:!mkdir "Xdir1/dir2"
:e! Xdir1/dir2/foo.a
@@ -61,7 +55,7 @@ ENDTEST
STARTTEST
:" check for 'include' with \zs and \ze
:call delete("./Xbase.b")
-:call DeleteDirectory("Xdir1")
+:call delete("Xdir1", "rf")
:!mkdir Xdir1
:!mkdir "Xdir1/dir2"
:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
@@ -91,7 +85,7 @@ ENDTEST
STARTTEST
:" check for 'include' with \zs and no \ze
:call delete("./Xbase.c")
-:call DeleteDirectory("Xdir1")
+:call delete("Xdir1", "rf")
:!mkdir Xdir1
:!mkdir "Xdir1/dir2"
:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
diff --git a/src/nvim/testdir/test30.in b/src/nvim/testdir/test30.in
deleted file mode 100644
index 56d5d5c6c2..0000000000
--- a/src/nvim/testdir/test30.in
+++ /dev/null
@@ -1,230 +0,0 @@
-Test for a lot of variations of the 'fileformats' option
-
-Note: This test will fail if "cat" is not available.
-
-STARTTEST
-:" first write three test files, one in each format
-:set fileformat=unix
-:set fileformats=
-:/^unix/;/eof/-1w! XXUnix
-:/^dos/;/eof/-1w! XXDos
-:set bin noeol
-:$w! XXMac
-Gonoeol
-:$w! XXEol
-:set nobin eol
-:enew!
-:bwipe XXUnix XXDos XXMac
-:" create mixed format files
-:if has("win32")
-: !copy /b XXUnix+XXDos XXUxDs
-: !copy /b XXUnix+XXMac XXUxMac
-: !copy /b XXDos+XXMac XXDosMac
-: !copy /b XXMac+XXEol XXMacEol
-: !copy /b XXUnix+XXDos+XXMac XXUxDsMc
-:else
-: !cat XXUnix XXDos >XXUxDs
-: !cat XXUnix XXMac >XXUxMac
-: !cat XXDos XXMac >XXDosMac
-: !cat XXMac XXEol >XXMacEol
-: !cat XXUnix XXDos XXMac >XXUxDsMc
-:endif
-:"
-:" try reading and writing with 'fileformats' empty
-:set fileformat=unix
-:e! XXUnix
-:w! test.out
-:e! XXDos
-:w! XXtt01
-:e! XXMac
-:w! XXtt02
-:bwipe XXUnix XXDos XXMac
-:set fileformat=dos
-:e! XXUnix
-:w! XXtt11
-:e! XXDos
-:w! XXtt12
-:e! XXMac
-:w! XXtt13
-:bwipe XXUnix XXDos XXMac
-:set fileformat=mac
-:e! XXUnix
-:w! XXtt21
-:e! XXDos
-:w! XXtt22
-:e! XXMac
-:w! XXtt23
-:bwipe XXUnix XXDos XXMac
-:"
-:" try reading and writing with 'fileformats' set to one format
-:set fileformats=unix
-:e! XXUxDsMc
-:w! XXtt31
-:bwipe XXUxDsMc
-:set fileformats=dos
-:e! XXUxDsMc
-:w! XXtt32
-:bwipe XXUxDsMc
-:set fileformats=mac
-:e! XXUxDsMc
-:w! XXtt33
-:bwipe XXUxDsMc
-:"
-:" try reading and writing with 'fileformats' set to two formats
-:set fileformats=unix,dos
-:e! XXUxDsMc
-:w! XXtt41
-:bwipe XXUxDsMc
-:e! XXUxMac
-:w! XXtt42
-:bwipe XXUxMac
-:e! XXDosMac
-:w! XXtt43
-:bwipe XXDosMac
-:set fileformats=unix,mac
-:e! XXUxDs
-:w! XXtt51
-:bwipe XXUxDs
-:e! XXUxDsMc
-:w! XXtt52
-:bwipe XXUxDsMc
-:e! XXDosMac
-:w! XXtt53
-:bwipe XXDosMac
-:e! XXEol
-ggO=&ffs
-:=&ff
-:w! XXtt54
-:bwipe XXEol
-:set fileformats=dos,mac
-:e! XXUxDs
-:w! XXtt61
-:bwipe XXUxDs
-:e! XXUxMac
-ggO=&ffs
-:=&ff
-:w! XXtt62
-:bwipe XXUxMac
-:e! XXUxDsMc
-:w! XXtt63
-:bwipe XXUxDsMc
-:e! XXMacEol
-ggO=&ffs
-:=&ff
-:w! XXtt64
-:bwipe XXMacEol
-:"
-:" try reading and writing with 'fileformats' set to three formats
-:set fileformats=unix,dos,mac
-:e! XXUxDsMc
-:w! XXtt71
-:bwipe XXUxDsMc
-:e! XXEol
-ggO=&ffs
-:=&ff
-:w! XXtt72
-:bwipe XXEol
-:set fileformats=mac,dos,unix
-:e! XXUxDsMc
-:w! XXtt81
-:bwipe XXUxDsMc
-:e! XXEol
-ggO=&ffs
-:=&ff
-:w! XXtt82
-:bwipe XXEol
-:" try with 'binary' set
-:set fileformats=mac,unix,dos
-:set binary
-:e! XXUxDsMc
-:w! XXtt91
-:bwipe XXUxDsMc
-:set fileformats=mac
-:e! XXUxDsMc
-:w! XXtt92
-:bwipe XXUxDsMc
-:set fileformats=dos
-:e! XXUxDsMc
-:w! XXtt93
-:"
-:" Append "END" to each file so that we can see what the last written char was.
-:set fileformat=unix nobin
-ggdGaEND:w >>XXtt01
-:w >>XXtt02
-:w >>XXtt11
-:w >>XXtt12
-:w >>XXtt13
-:w >>XXtt21
-:w >>XXtt22
-:w >>XXtt23
-:w >>XXtt31
-:w >>XXtt32
-:w >>XXtt33
-:w >>XXtt41
-:w >>XXtt42
-:w >>XXtt43
-:w >>XXtt51
-:w >>XXtt52
-:w >>XXtt53
-:w >>XXtt54
-:w >>XXtt61
-:w >>XXtt62
-:w >>XXtt63
-:w >>XXtt64
-:w >>XXtt71
-:w >>XXtt72
-:w >>XXtt81
-:w >>XXtt82
-:w >>XXtt91
-:w >>XXtt92
-:w >>XXtt93
-:"
-:" Concatenate the results.
-:" Make fileformat of test.out the native fileformat.
-:" Add a newline at the end.
-:set binary
-:e! test.out
-:$r XXtt01
-:$r XXtt02
-Go1:$r XXtt11
-:$r XXtt12
-:$r XXtt13
-Go2:$r XXtt21
-:$r XXtt22
-:$r XXtt23
-Go3:$r XXtt31
-:$r XXtt32
-:$r XXtt33
-Go4:$r XXtt41
-:$r XXtt42
-:$r XXtt43
-Go5:$r XXtt51
-:$r XXtt52
-:$r XXtt53
-:$r XXtt54
-Go6:$r XXtt61
-:$r XXtt62
-:$r XXtt63
-:$r XXtt64
-Go7:$r XXtt71
-:$r XXtt72
-Go8:$r XXtt81
-:$r XXtt82
-Go9:$r XXtt91
-:$r XXtt92
-:$r XXtt93
-Go10:$r XXUnix
-:set nobinary ff&
-:w
-:qa!
-ENDTEST
-
-unix
-unix
-eof
-
-dos
-dos
-eof
-
-mac mac
diff --git a/src/nvim/testdir/test30.ok b/src/nvim/testdir/test30.ok
deleted file mode 100644
index b35f4f5904..0000000000
--- a/src/nvim/testdir/test30.ok
+++ /dev/null
@@ -1,130 +0,0 @@
-unix
-unix
-dos
-dos
-END
-mac mac
-END
-1
-unix
-unix
-END
-dos
-dos
-END
-mac mac
-END
-2
-unix
-unix
- END
-dos
-dos
- END
-mac mac END
-3
-unix
-unix
-dos
-dos
-mac mac
-END
-unix
-unix
-dos
-dos
-mac mac
-END
-unix
-unix
-dos
-dos
-mac mac END
-4
-unix
-unix
-dos
-dos
-mac mac
-END
-unix
-unix
-mac mac
-END
-dos
-dos
-mac mac
-END
-5
-unix
-unix
-dos
-dos
-END
-unix
-unix
-dos
-dos
-mac mac
-END
-dos
-dos
-mac mac END
-unix,mac:unix
-noeol
-END
-6
-unix
-unix
-dos
-dos
-END
-dos,mac:dos
-unix
-unix
-mac mac
-END
-unix
-unix
-dos
-dos
-mac mac
-END
-dos,mac:mac mac mac noeol END
-7
-unix
-unix
-dos
-dos
-mac mac
-END
-unix,dos,mac:unix
-noeol
-END
-8
-unix
-unix
-dos
-dos
-mac mac
-END
-mac,dos,unix:mac noeol END
-9
-unix
-unix
-dos
-dos
-mac mac END
-unix
-unix
-dos
-dos
-mac mac END
-unix
-unix
-dos
-dos
-mac mac END
-10
-unix
-unix
diff --git a/src/nvim/testdir/test34.in b/src/nvim/testdir/test34.in
deleted file mode 100644
index 4cb7e9494a..0000000000
--- a/src/nvim/testdir/test34.in
+++ /dev/null
@@ -1,86 +0,0 @@
-Test for user functions.
-Also test an <expr> mapping calling a function.
-Also test that a builtin function cannot be replaced.
-Also test for regression when calling arbitrary expression.
-
-STARTTEST
-:function Table(title, ...)
-: let ret = a:title
-: let idx = 1
-: while idx <= a:0
-: exe "let ret = ret . a:" . idx
-: let idx = idx + 1
-: endwhile
-: return ret
-:endfunction
-:function Compute(n1, n2, divname)
-: if a:n2 == 0
-: return "fail"
-: endif
-: exe "let g:" . a:divname . " = ". a:n1 / a:n2
-: return "ok"
-:endfunction
-:func Expr1()
-: normal! v
-: return "111"
-:endfunc
-:func Expr2()
-: call search('XX', 'b')
-: return "222"
-:endfunc
-:func ListItem()
-: let g:counter += 1
-: return g:counter . '. '
-:endfunc
-:func ListReset()
-: let g:counter = 0
-: return ''
-:endfunc
-:func FuncWithRef(a)
-: unlet g:FuncRef
-: return a:a
-:endfunc
-:let g:FuncRef=function("FuncWithRef")
-:let counter = 0
-:inoremap <expr> ( ListItem()
-:inoremap <expr> [ ListReset()
-:imap <expr> + Expr1()
-:imap <expr> * Expr2()
-:let retval = "nop"
-/^here
-C=Table("xxx", 4, "asdf")
- =Compute(45, 0, "retval")
- =retval
- =Compute(45, 5, "retval")
- =retval
- =g:FuncRef(333)
-
-XX+-XX
----*---
-(one
-(two
-[(one again:call append(line('$'), max([1, 2, 3]))
-:call extend(g:, {'max': function('min')})
-:call append(line('$'), max([1, 2, 3]))
-:try
-: " Regression: the first line below used to throw ?E110: Missing ')'?
-: " Second is here just to prove that this line is correct when not skipping
-: " rhs of &&.
-: $put =(0&&(function('tr'))(1, 2, 3))
-: $put =(1&&(function('tr'))(1, 2, 3))
-:catch
-: $put ='!!! Unexpected exception:'
-: $put =v:exception
-:endtry
-:$-9,$w! test.out
-:delfunc Table
-:delfunc Compute
-:delfunc Expr1
-:delfunc Expr2
-:delfunc ListItem
-:delfunc ListReset
-:unlet retval counter
-:q!
-ENDTEST
-
-here
diff --git a/src/nvim/testdir/test34.ok b/src/nvim/testdir/test34.ok
deleted file mode 100644
index 97995de80e..0000000000
--- a/src/nvim/testdir/test34.ok
+++ /dev/null
@@ -1,10 +0,0 @@
-xxx4asdf fail nop ok 9 333
-XX111-XX
----222---
-1. one
-2. two
-1. one again
-3
-3
-0
-1
diff --git a/src/nvim/testdir/test47.in b/src/nvim/testdir/test47.in
deleted file mode 100644
index c95c6a6850..0000000000
--- a/src/nvim/testdir/test47.in
+++ /dev/null
@@ -1,102 +0,0 @@
-Tests for vertical splits and filler lines in diff mode
-
-Also tests restoration of saved options by :diffoff.
-
-STARTTEST
-:" Disable the title to avoid xterm keeping the wrong one.
-:set notitle noicon
-/^1
-yG:new
-pkdd:w! Xtest
-ddGpkkrXoxxx:w! Xtest2
-:file Nop
-ggoyyyjjjozzzz
-:set foldmethod=marker foldcolumn=4
-:redir => nodiffsettings
-:silent! :set diff? fdm? fdc? scb? crb? wrap?
-:redir END
-:vert diffsplit Xtest
-:vert diffsplit Xtest2
-:redir => diffsettings
-:silent! :set diff? fdm? fdc? scb? crb? wrap?
-:redir END
-:let diff_fdm = &fdm
-:let diff_fdc = &fdc
-:" repeat entering diff mode here to see if this saves the wrong settings
-:diffthis
-:" jump to second window for a moment to have filler line appear at start of
-:" first window
-ggpgg:let one = winline()
-j:let one = one . "-" . winline()
-j:let one = one . "-" . winline()
-j:let one = one . "-" . winline()
-j:let one = one . "-" . winline()
-j:let one = one . "-" . winline()
-gg:let two = winline()
-j:let two = two . "-" . winline()
-j:let two = two . "-" . winline()
-j:let two = two . "-" . winline()
-j:let two = two . "-" . winline()
-gg:let three = winline()
-j:let three = three . "-" . winline()
-j:let three = three . "-" . winline()
-j:let three = three . "-" . winline()
-j:let three = three . "-" . winline()
-j:let three = three . "-" . winline()
-j:let three = three . "-" . winline()
-:call append("$", one)
-:call append("$", two)
-:call append("$", three)
-:$-2,$w! test.out
-:"
-:" Test diffoff
-:diffoff!
-1
-:let &diff = 1
-:let &fdm = diff_fdm
-:let &fdc = diff_fdc
-4
-:diffoff!
-:$put =nodiffsettings
-:$put =diffsettings
-1
-:redir => nd1
-:silent! :set diff? fdm? fdc? scb? crb? wrap?
-:redir END
-
-:redir => nd2
-:silent! :set diff? fdm? fdc? scb? crb? wrap?
-:redir END
-
-:redir => nd3
-:silent! :set diff? fdm? fdc? scb? crb? wrap?
-:redir END
-
-:$put =nd1
-:$put =nd2
-:$put =nd3
-:$-39,$w >> test.out
-:"
-:" Test that diffing shows correct filler lines
-:windo :bw!
-:enew
-:put =range(4,10)
-:1d _
-:vnew
-:put =range(1,10)
-:1d _
-:windo :diffthis
-:wincmd h
-:let w0=line('w0')
-:enew
-:put =w0
-:.w >> test.out
-:unlet! one two three nodiffsettings diffsettings diff_fdm diff_fdc nd1 nd2 nd3 w0
-:qa!
-ENDTEST
-
-1 aa
-2 bb
-3 cc
-4 dd
-5 ee
diff --git a/src/nvim/testdir/test47.ok b/src/nvim/testdir/test47.ok
deleted file mode 100644
index 83e96571ad..0000000000
--- a/src/nvim/testdir/test47.ok
+++ /dev/null
@@ -1,44 +0,0 @@
-2-4-5-6-8-9
-1-2-4-5-8
-2-3-4-5-6-7-8
-
-
-nodiff
- foldmethod=marker
- foldcolumn=4
-noscrollbind
-nocursorbind
- wrap
-
-
- diff
- foldmethod=diff
- foldcolumn=2
- scrollbind
- cursorbind
-nowrap
-
-
-nodiff
- foldmethod=marker
- foldcolumn=4
-noscrollbind
-nocursorbind
- wrap
-
-
-nodiff
- foldmethod=marker
- foldcolumn=4
-noscrollbind
-nocursorbind
- wrap
-
-
-nodiff
- foldmethod=marker
- foldcolumn=4
-noscrollbind
-nocursorbind
- wrap
-1
diff --git a/src/nvim/testdir/test53.in b/src/nvim/testdir/test53.in
index f3778c5192..20b5d019af 100644
--- a/src/nvim/testdir/test53.in
+++ b/src/nvim/testdir/test53.in
@@ -4,8 +4,6 @@ Note that the end-of-line moves the cursor to the next test line.
Also test match() and matchstr()
-Also test the gn command and repeating it.
-
STARTTEST
/^start:/
da"
@@ -52,35 +50,6 @@ dit
:put =match('abc', '\zs', 2, 1) " 2
:put =match('abc', '\zs', 3, 1) " 3
:put =match('abc', '\zs', 4, 1) " -1
-/^foobar
-gncsearchmatch/one\_s*two\_s
-:1
-gnd
-/[a]bcdx
-:1
-2gnd/join
-/$
-0gnd
-/\>\zs
-0gnd/^
-gnd$h/\zs
-gnd/[u]niquepattern/s
-vlgnd
-/mother
-:set selection=exclusive
-$cgNmongoose/i
-cgnj
-:" Make sure there is no other match y uppercase.
-/x59
-gggnd
-:" test repeating dgn
-/^Johnny
-ggdgn.
-:" test repeating gUgn
-/^Depp
-gggUgn.
-gg/a:0\@!\zs\d\+
-nygnop
:/^start:/,/^end:/wq! test.out
ENDTEST
@@ -102,32 +71,4 @@ innertext object
</b>
</begin>
SEARCH:
-foobar
-one
-two
-abcdx | abcdx | abcdx
-join
-lines
-zero width pattern
-delete first and last chars
-uniquepattern uniquepattern
-my very excellent mother just served us nachos
-for (i=0; i<=10; i++)
-a:10
-
-a:1
-
-a:20
-Y
-text
-Y
---1
-Johnny
---2
-Johnny
---3
-Depp
---4
-Depp
---5
end:
diff --git a/src/nvim/testdir/test53.ok b/src/nvim/testdir/test53.ok
index 05206972a4..d57d86bbb0 100644
--- a/src/nvim/testdir/test53.ok
+++ b/src/nvim/testdir/test53.ok
@@ -42,30 +42,4 @@ a
3
-1
SEARCH:
-searchmatch
-abcdx | | abcdx
-join lines
-zerowidth pattern
-elete first and last char
- uniquepattern
-my very excellent mongoose just served us nachos
-for (j=0; i<=10; i++)
-a:10
-
-a:1
-1
-
-a:20
-
-text
-Y
---1
-
---2
-
---3
-DEPP
---4
-DEPP
---5
end:
diff --git a/src/nvim/testdir/test55.in b/src/nvim/testdir/test55.in
deleted file mode 100644
index 9a55eac6f6..0000000000
--- a/src/nvim/testdir/test55.in
+++ /dev/null
@@ -1,600 +0,0 @@
-Tests for List and Dictionary types. vim: set ft=vim :
-
-STARTTEST
-:fun Test(...)
-:lang C
-:" Creating List directly with different types
-:let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
-:$put =string(l)
-:$put =string(l[-1])
-:$put =string(l[-4])
-:try
-: $put =string(l[-5])
-:catch
-: $put =v:exception[:14]
-:endtry
-:" List slices
-:$put =string(l[:])
-:$put =string(l[1:])
-:$put =string(l[:-2])
-:$put =string(l[0:8])
-:$put =string(l[8:-1])
-:"
-:" List identity
-:let ll = l
-:let lx = copy(l)
-:try
-: $put =(l == ll) . (l isnot ll) . (l is ll) . (l == lx) . (l is lx) . (l isnot lx)
-:catch
-: $put =v:exception
-:endtry
-:"
-:" Creating Dictionary directly with different types
-:let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},}
-:$put =string(d) . d.1
-:$put =string(sort(keys(d)))
-:$put =string (values(d))
-:for [key, val] in items(d)
-: $put =key . ':' . string(val)
-: unlet key val
-:endfor
-:call extend (d, {3:33, 1:99})
-:call extend(d, {'b':'bbb', 'c':'ccc'}, "keep")
-:try
-: call extend(d, {3:333,4:444}, "error")
-:catch
-: $put =v:exception[:15] . v:exception[-1:-1]
-:endtry
-:$put =string(d)
-:call filter(d, 'v:key =~ ''[ac391]''')
-:$put =string(d)
-:"
-:" Dictionary identity
-:let dd = d
-:let dx = copy(d)
-:try
-: $put =(d == dd) . (d isnot dd) . (d is dd) . (d == dx) . (d is dx) . (d isnot dx)
-:catch
-: $put =v:exception
-:endtry
-:"
-:" Changing var type should fail
-:try
-: let d = []
-:catch
-: $put =v:exception[:14] . v:exception[-1:-1]
-:endtry
-:try
-: let l = {}
-:catch
-: $put =v:exception[:14] . v:exception[-1:-1]
-:endtry
-:"
-:" removing items with :unlet
-:unlet l[2]
-:$put =string(l)
-:let l = range(8)
-:try
-:unlet l[:3]
-:unlet l[1:]
-:catch
-:$put =v:exception
-:endtry
-:$put =string(l)
-:"
-:unlet d.c
-:unlet d[-1]
-:$put =string(d)
-:"
-:" removing items out of range: silently skip items that don't exist
-let l = [0, 1, 2, 3]
-:unlet l[2:1]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[2:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[2:3]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[2:4]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[2:5]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-1:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-2:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-3:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-4:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-5:2]
-:$put =string(l)
-let l = [0, 1, 2, 3]
-:unlet l[-6:2]
-:$put =string(l)
-:"
-:" assignment to a list
-:let l = [0, 1, 2, 3]
-:let [va, vb] = l[2:3]
-:$put =va
-:$put =vb
-:try
-: let [va, vb] = l
-:catch
-: $put =v:exception[:14]
-:endtry
-:try
-: let [va, vb] = l[1:1]
-:catch
-: $put =v:exception[:14]
-:endtry
-:"
-:" manipulating a big Dictionary (hashtable.c has a border of 1000 entries)
-:let d = {}
-:for i in range(1500)
-: let d[i] = 3000 - i
-:endfor
-:$put =d[0] . ' ' . d[100] . ' ' . d[999] . ' ' . d[1400] . ' ' . d[1499]
-:try
-: let n = d[1500]
-:catch
-: $put =substitute(v:exception, '\v(.{14}).*( \d{4}).*', '\1\2', '')
-:endtry
-:" lookup each items
-:for i in range(1500)
-: if d[i] != 3000 - i
-: $put =d[i]
-: endif
-:endfor
-: let i += 1
-:" delete even items
-:while i >= 2
-: let i -= 2
-: unlet d[i]
-:endwhile
-:$put =get(d, 1500 - 100, 'NONE') . ' ' . d[1]
-:" delete odd items, checking value, one intentionally wrong
-:let d[33] = 999
-:let i = 1
-:while i < 1500
-: if d[i] != 3000 - i
-: $put =i . '=' . d[i]
-: else
-: unlet d[i]
-: endif
-: let i += 2
-:endwhile
-:$put =string(d) " must be almost empty now
-:unlet d
-:"
-:" Dictionary function
-:let dict = {}
-:func dict.func(a) dict
-: $put =a:a . len(self.data)
-:endfunc
-:let dict.data = [1,2,3]
-:call dict.func("len: ")
-:let x = dict.func("again: ")
-:try
-: let Fn = dict.func
-: call Fn('xxx')
-:catch
-: $put =v:exception[:15]
-:endtry
-:"
-:" Function in script-local List or Dict
-:let g:dict = {}
-:function g:dict.func() dict
-: $put ='g:dict.func'.self.foo[1].self.foo[0]('asdf')
-:endfunc
-:let g:dict.foo = ['-', 2, 3]
-:call insert(g:dict.foo, function('strlen'))
-:call g:dict.func()
-:"
-:" Nasty: remove func from Dict that's being called (works)
-:let d = {1:1}
-:func d.func(a)
-: return "a:". a:a
-:endfunc
-:$put =d.func(string(remove(d, 'func')))
-:"
-:" Nasty: deepcopy() dict that refers to itself (fails when noref used)
-:let d = {1:1, 2:2}
-:let l = [4, d, 6]
-:let d[3] = l
-:let dc = deepcopy(d)
-:try
-: let dc = deepcopy(d, 1)
-:catch
-: $put =v:exception[:14]
-:endtry
-:let l2 = [0, l, l, 3]
-:let l[1] = l2
-:let l3 = deepcopy(l2)
-:$put ='same list: ' . (l3[1] is l3[2])
-:"
-:" Locked variables
-:for depth in range(5)
-: $put ='depth is ' . depth
-: for u in range(3)
-: unlet l
-: let l = [0, [1, [2, 3]], {4: 5, 6: {7: 8}}]
-: exe "lockvar " . depth . " l"
-: if u == 1
-: exe "unlockvar l"
-: elseif u == 2
-: exe "unlockvar " . depth . " l"
-: endif
-: let ps = islocked("l").islocked("l[1]").islocked("l[1][1]").islocked("l[1][1][0]").'-'.islocked("l[2]").islocked("l[2]['6']").islocked("l[2]['6'][7]")
-: $put =ps
-: let ps = ''
-: try
-: let l[1][1][0] = 99
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l[1][1] = [99]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l[1] = [99]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l[2]['6'][7] = 99
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l[2][6] = {99: 99}
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l[2] = {99: 99}
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: let l = [99]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: $put =ps
-: endfor
-:endfor
-:"
-:" Unletting locked variables
-:$put ='Unletting:'
-:for depth in range(5)
-: $put ='depth is ' . depth
-: for u in range(3)
-: unlet l
-: let l = [0, [1, [2, 3]], {4: 5, 6: {7: 8}}]
-: exe "lockvar " . depth . " l"
-: if u == 1
-: exe "unlockvar l"
-: elseif u == 2
-: exe "unlockvar " . depth . " l"
-: endif
-: let ps = islocked("l").islocked("l[1]").islocked("l[1][1]").islocked("l[1][1][0]").'-'.islocked("l[2]").islocked("l[2]['6']").islocked("l[2]['6'][7]")
-: $put =ps
-: let ps = ''
-: try
-: unlet l[2]['6'][7]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l[2][6]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l[2]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l[1][1][0]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l[1][1]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l[1]
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: try
-: unlet l
-: let ps .= 'p'
-: catch
-: let ps .= 'F'
-: endtry
-: $put =ps
-: endfor
-:endfor
-:"
-:" Locked variables and :unlet or list / dict functions
-:$put ='Locks and commands or functions:'
-:"
-:$put ='No :unlet after lock on dict:'
-:unlet! d
-:let d = {'a': 99, 'b': 100}
-:lockvar 1 d
-:try
-: unlet d.a
-: $put ='did :unlet'
-:catch
-: $put =v:exception[:16]
-:endtry
-:$put =string(d)
-:"
-:$put =':unlet after lock on dict item:'
-:unlet! d
-:let d = {'a': 99, 'b': 100}
-:lockvar d.a
-:try
-: unlet d.a
-: $put ='did :unlet'
-:catch
-: $put =v:exception[:16]
-:endtry
-:$put =string(d)
-:"
-:$put ='filter() after lock on dict item:'
-:unlet! d
-:let d = {'a': 99, 'b': 100}
-:lockvar d.a
-:try
-: call filter(d, 'v:key != "a"')
-: $put ='did filter()'
-:catch
-: $put =v:exception[:16]
-:endtry
-:$put =string(d)
-:"
-:$put ='map() after lock on dict:'
-:unlet! d
-:let d = {'a': 99, 'b': 100}
-:lockvar 1 d
-:try
-: call map(d, 'v:val + 200')
-: $put ='did map()'
-:catch
-: $put =v:exception[:16]
-:endtry
-:$put =string(d)
-:"
-:$put ='No extend() after lock on dict item:'
-:unlet! d
-:let d = {'a': 99, 'b': 100}
-:lockvar d.a
-:try
-: $put =string(extend(d, {'a': 123}))
-: $put ='did extend()'
-:catch
-: $put =v:exception[:14]
-:endtry
-:$put =string(d)
-:"
-:$put ='No remove() of write-protected scope-level variable:'
-:fun! Tfunc(this_is_a_loooooooooong_parameter_name)
-: try
-: $put =string(remove(a:, 'this_is_a_loooooooooong_parameter_name'))
-: $put ='did remove()'
-: catch
-: $put =v:exception[:14]
-: endtry
-:endfun
-:call Tfunc('testval')
-:"
-:$put ='No extend() of write-protected scope-level variable:'
-:fun! Tfunc(this_is_a_loooooooooong_parameter_name)
-: try
-: $put =string(extend(a:, {'this_is_a_loooooooooong_parameter_name': 1234}))
-: $put ='did extend()'
-: catch
-: $put =v:exception[:14]
-: endtry
-:endfun
-:call Tfunc('testval')
-:"
-:$put ='No :unlet of variable in locked scope:'
-:let b:testvar = 123
-:lockvar 1 b:
-:try
-: unlet b:testvar
-: $put ='b:testvar was :unlet: '. (!exists('b:testvar'))
-:catch
-: $put =v:exception[:16]
-:endtry
-:unlockvar 1 b:
-:unlet! b:testvar
-:"
-:$put ='No :let += of locked list variable:'
-:let l = ['a', 'b', 3]
-:lockvar 1 l
-:try
-: let l += ['x']
-: $put ='did :let +='
-:catch
-: $put =v:exception[:14]
-:endtry
-:$put =string(l)
-:"
-:unlet l
-:let l = [1, 2, 3, 4]
-:lockvar! l
-:$put =string(l)
-:unlockvar l[1]
-:unlet l[0:1]
-:$put =string(l)
-:unlet l[1:2]
-:$put =string(l)
-:unlockvar l[1]
-:let l[0:1] = [0, 1]
-:$put =string(l)
-:let l[1:2] = [0, 1]
-:$put =string(l)
-:unlet l
-:" :lockvar/islocked() triggering script autoloading
-:set rtp+=./sautest
-:lockvar g:footest#x
-:unlockvar g:footest#x
-:$put ='locked g:footest#x:'.islocked('g:footest#x')
-:$put ='exists g:footest#x:'.exists('g:footest#x')
-:$put ='g:footest#x: '.g:footest#x
-:"
-:" a:000 function argument
-:" first the tests that should fail
-:try
-: let a:000 = [1, 2]
-:catch
-: $put ='caught a:000'
-:endtry
-:try
-: let a:000[0] = 9
-:catch
-: $put ='caught a:000[0]'
-:endtry
-:try
-: let a:000[2] = [9, 10]
-:catch
-: $put ='caught a:000[2]'
-:endtry
-:try
-: let a:000[3] = {9: 10}
-:catch
-: $put ='caught a:000[3]'
-:endtry
-:" now the tests that should pass
-:try
-: let a:000[2][1] = 9
-: call extend(a:000[2], [5, 6])
-: let a:000[3][5] = 8
-: let a:000[3]['a'] = 12
-: $put =string(a:000)
-:catch
-: $put ='caught ' . v:exception
-:endtry
-:"
-:" reverse(), sort(), uniq()
-:let l = ['-0', 'A11', 2, 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5]
-:$put =string(uniq(copy(l)))
-:$put =string(reverse(l))
-:$put =string(reverse(reverse(l)))
-:$put =string(sort(l))
-:$put =string(reverse(sort(l)))
-:$put =string(sort(reverse(sort(l))))
-:$put =string(uniq(sort(l)))
-:let l=[7, 9, 'one', 18, 12, 22, 'two', 10.0e-16, -1, 'three', 0xff, 0.22, 'four']
-:$put =string(sort(copy(l), 'n'))
-:let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', {}, []]
-:$put =string(sort(copy(l), 1))
-:$put =string(sort(copy(l), 'i'))
-:$put =string(sort(copy(l)))
-:"
-:" splitting a string to a List
-:$put =string(split(' aa bb '))
-:$put =string(split(' aa bb ', '\W\+', 0))
-:$put =string(split(' aa bb ', '\W\+', 1))
-:$put =string(split(' aa bb ', '\W', 1))
-:$put =string(split(':aa::bb:', ':', 0))
-:$put =string(split(':aa::bb:', ':', 1))
-:$put =string(split('aa,,bb, cc,', ',\s*', 1))
-:$put =string(split('abc', '\zs'))
-:$put =string(split('abc', '\zs', 1))
-:"
-:" compare recursively linked list and dict
-:let l = [1, 2, 3, 4]
-:let d = {'1': 1, '2': l, '3': 3}
-:let l[1] = d
-:$put =(l == l)
-:$put =(d == d)
-:$put =(l != deepcopy(l))
-:$put =(d != deepcopy(d))
-:"
-:" compare complex recursively linked list and dict
-:let l = []
-:call add(l, l)
-:let dict4 = {"l": l}
-:call add(dict4.l, dict4)
-:let lcopy = deepcopy(l)
-:let dict4copy = deepcopy(dict4)
-:$put =(l == lcopy)
-:$put =(dict4 == dict4copy)
-:"
-:" Pass the same List to extend()
-:let l = [1, 2, 3, 4, 5]
-:call extend(l, l)
-:$put =string(l)
-:"
-:" Pass the same Dict to extend()
-:let d = { 'a': {'b': 'B'}}
-:call extend(d, d)
-:$put =string(d)
-:"
-:" Pass the same Dict to extend() with "error"
-:try
-: call extend(d, d, "error")
-:catch
-: $put =v:exception[:15] . v:exception[-1:-1]
-:endtry
-:$put =string(d)
-:"
-:" test for range assign
-:let l = [0]
-:let l[:] = [1, 2]
-:$put =string(l)
-:endfun
-:"
-:call Test(1, 2, [3, 4], {5: 6}) " This may take a while
-:"
-:delfunc Test
-:unlet dict
-:call garbagecollect(1)
-:"
-:" test for patch 7.3.637
-:let a = 'No error caught'
-:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-o=a :"
-:lang C
-:redir => a
-:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-:redir END
-o=a :"
-:"
-:/^start:/,$wq! test.out
-ENDTEST
-
-start:
diff --git a/src/nvim/testdir/test55.ok b/src/nvim/testdir/test55.ok
deleted file mode 100644
index 607a95ead9..0000000000
--- a/src/nvim/testdir/test55.ok
+++ /dev/null
@@ -1,199 +0,0 @@
-start:
-[1, 'as''d', [1, 2, function('strlen')], {'a': 1}]
-{'a': 1}
-1
-Vim(put):E684:
-[1, 'as''d', [1, 2, function('strlen')], {'a': 1}]
-['as''d', [1, 2, function('strlen')], {'a': 1}]
-[1, 'as''d', [1, 2, function('strlen')]]
-[1, 'as''d', [1, 2, function('strlen')], {'a': 1}]
-[]
-101101
-{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}asd
-['-1', '1', 'b']
-['asd', [1, 2, function('strlen')], {'a': 1}]
-1:'asd'
-b:[1, 2, function('strlen')]
--1:{'a': 1}
-Vim(call):E737: 3
-{'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}}
-{'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}}
-101101
-Vim(let):E706: d
-Vim(let):E706: l
-[1, 'as''d', {'a': 1}]
-[4]
-{'1': 99, '3': 33}
-[0, 1, 2, 3]
-[0, 1, 3]
-[0, 1]
-[0, 1]
-[0, 1]
-[0, 1, 2, 3]
-[0, 1, 3]
-[0, 3]
-[3]
-[3]
-[3]
-2
-3
-Vim(let):E687:
-Vim(let):E688:
-3000 2900 2001 1600 1501
-Vim(let):E716: 1500
-NONE 2999
-33=999
-{'33': 999}
-len: 3
-again: 3
-Vim(call):E725:
-g:dict.func-4
-a:function('3')
-Vim(let):E698:
-same list: 1
-depth is 0
-0000-000
-ppppppp
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 1
-1000-000
-ppppppF
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 2
-1100-100
-ppFppFF
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 3
-1110-110
-pFFpFFF
-0010-010
-pFppFpp
-0000-000
-ppppppp
-depth is 4
-1111-111
-FFFFFFF
-0011-011
-FFpFFpp
-0000-000
-ppppppp
-Unletting:
-depth is 0
-0000-000
-ppppppp
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 1
-1000-000
-ppFppFp
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 2
-1100-100
-pFFpFFp
-0000-000
-ppppppp
-0000-000
-ppppppp
-depth is 3
-1110-110
-FFFFFFp
-0010-010
-FppFppp
-0000-000
-ppppppp
-depth is 4
-1111-111
-FFFFFFp
-0011-011
-FppFppp
-0000-000
-ppppppp
-Locks and commands or functions:
-No :unlet after lock on dict:
-Vim(unlet):E741:
-{'a': 99, 'b': 100}
-:unlet after lock on dict item:
-did :unlet
-{'b': 100}
-filter() after lock on dict item:
-did filter()
-{'b': 100}
-map() after lock on dict:
-did map()
-{'a': 299, 'b': 300}
-No extend() after lock on dict item:
-Vim(put):E741:
-{'a': 99, 'b': 100}
-No remove() of write-protected scope-level variable:
-Vim(put):E795:
-No extend() of write-protected scope-level variable:
-Vim(put):E742:
-No :unlet of variable in locked scope:
-Vim(unlet):E741:
-No :let += of locked list variable:
-Vim(let):E741:
-['a', 'b', 3]
-[1, 2, 3, 4]
-[1, 2, 3, 4]
-[1, 2, 3, 4]
-[1, 2, 3, 4]
-[1, 2, 3, 4]
-locked g:footest#x:-1
-exists g:footest#x:0
-g:footest#x: 1
-caught a:000
-caught a:000[0]
-caught a:000[2]
-caught a:000[3]
-[1, 2, [3, 9, 5, 6], {'a': 12, '5': 8}]
-['-0', 'A11', 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5]
-[1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0']
-[1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0']
-['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
-[[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0']
-['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]]
-['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]]
-[-1, 'one', 'two', 'three', 'four', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255]
-['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
-['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
-['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}]
-['aa', 'bb']
-['aa', 'bb']
-['', 'aa', 'bb', '']
-['', '', 'aa', '', 'bb', '', '']
-['aa', '', 'bb']
-['', 'aa', '', 'bb', '']
-['aa', '', 'bb', 'cc', '']
-['a', 'b', 'c']
-['', 'a', '', 'b', '', 'c', '']
-1
-1
-0
-0
-1
-1
-[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
-{'a': {'b': 'B'}}
-Vim(call):E737: a
-{'a': {'b': 'B'}}
-[1, 2]
-Vim(foldopen):E490:
-
-
-Error detected while processing :
-E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-
diff --git a/src/nvim/testdir/test64.in b/src/nvim/testdir/test64.in
index c4585ecbce..ec11e15e35 100644
--- a/src/nvim/testdir/test64.in
+++ b/src/nvim/testdir/test64.in
@@ -20,6 +20,7 @@ STARTTEST
:"""" Previously written tests """"""""""""""""""""""""""""""""
:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
:"
+:set noautoindent
:call add(tl, [2, 'ab', 'aab', 'ab'])
:call add(tl, [2, 'b', 'abcdef', 'b'])
:call add(tl, [2, 'bc*', 'abccccdef', 'bcccc'])
@@ -577,7 +578,7 @@ Gop:"
:" Check patterns matching cursor position.
:func! Postest()
new
- call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_'])
+ call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_', ' xxxxxxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx'])
call setpos('.', [0, 1, 0, 0])
s/\%>3c.//g
call setpos('.', [0, 2, 4, 0])
@@ -589,6 +590,7 @@ Gop:"
%s/\%>6l\%3c./!/g
%s/\%>7l\%12c./?/g
%s/\%>7l\%<9l\%>5v\%<8v./#/g
+ $s/\%(|\u.*\)\@<=[^|\t]\+$//ge
1,$yank
quit!
endfunc
diff --git a/src/nvim/testdir/test64.ok b/src/nvim/testdir/test64.ok
index 92f06ea9f3..c218f8ea17 100644
--- a/src/nvim/testdir/test64.ok
+++ b/src/nvim/testdir/test64.ok
@@ -1076,6 +1076,7 @@ moooooo
ab!babababababfoo
ba!ab##abab?bafoo
**!*****_
+ ! xxx?xxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx
-1-
ffo
bob
@@ -1086,6 +1087,7 @@ moooooo
ab!babababababfoo
ba!ab##abab?bafoo
**!*****_
+ ! xxx?xxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx
-2-
ffo
bob
@@ -1096,6 +1098,7 @@ moooooo
ab!babababababfoo
ba!ab##abab?bafoo
**!*****_
+ ! xxx?xxxxxxxx xxxx xxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxx xxxxx xxxxxxx xx xxxx xxxxxxxx xxxx xxxxxxxxxxx xxx xxxxxxx xxxxxxxxx xx xxxxxx xx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxx xxxx xxx xxxx xxx xxx xxxxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxxxxxxx xx xxxxx xxx xxxxxxxx xxxxxx xxx xxx xxxxxxxxx xxxxxxx x xxxxxxxxx xx xxxxxx xxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxx xxxxxxx xxx xxx xxxxxxxx xxxxxxx xxxx xxx xxxxxx xxxxx xxxxx xx xxxxxx xxxxxxx xxx xxxxxxxxxxxx xxxx xxxxxxxxx xxxxxx xxxxxx xxxxx xxx xxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxx xxxxxxxxxx xxxx xx xxxxxxxx xxx xxxxxxxxxxx xxxxx
Test
Test END
EN
diff --git a/src/nvim/testdir/test73.in b/src/nvim/testdir/test73.in
index 7d6c7287a5..9d50f7a789 100644
--- a/src/nvim/testdir/test73.in
+++ b/src/nvim/testdir/test73.in
@@ -8,16 +8,9 @@ STARTTEST
:" This will cause a few errors, do it silently.
:set visualbell
:"
-:function! DeleteDirectory(dir)
-: if has("win16") || has("win32") || has("win64") || has("dos16") || has("dos32")
-: exec "silent !rmdir /Q /S " . a:dir
-: else
-: exec "silent !rm -rf " . a:dir
-: endif
-:endfun
:" On windows a stale "Xfind" directory may exist, remove it so that
:" we start from a clean state.
-:call DeleteDirectory("Xfind")
+:call delete("Xfind", "rf")
:new
:let cwd=getcwd()
:let test_out = cwd . '/test.out'
@@ -169,7 +162,7 @@ SVoyager 2:w
:exec "w >>" . test_out
:q
:exec "cd " . cwd
-:call DeleteDirectory("Xfind")
+:call delete("Xfind", "rf")
:qa!
ENDTEST
diff --git a/src/nvim/testdir/test_alot.vim b/src/nvim/testdir/test_alot.vim
index 1d1da94bac..60248bf430 100644
--- a/src/nvim/testdir/test_alot.vim
+++ b/src/nvim/testdir/test_alot.vim
@@ -1,3 +1,28 @@
" A series of tests that can run in one Vim invocation.
" This makes testing go faster, since Vim doesn't need to restart.
+source test_assign.vim
+source test_autocmd.vim
+source test_cursor_func.vim
+source test_execute_func.vim
+source test_ex_undo.vim
+source test_expr.vim
+source test_expr_utf8.vim
+source test_feedkeys.vim
+source test_goto.vim
+source test_jumps.vim
+source test_match.vim
+source test_matchadd_conceal_utf8.vim
+source test_menu.vim
+source test_messages.vim
+source test_options.vim
+source test_partial.vim
+source test_popup.vim
+source test_regexp_utf8.vim
+source test_statusline.vim
+source test_syn_attr.vim
+source test_tabline.vim
+source test_tabpage.vim
+source test_tagjump.vim
+source test_unlet.vim
+source test_window_cmd.vim
diff --git a/src/nvim/testdir/test_assign.vim b/src/nvim/testdir/test_assign.vim
new file mode 100644
index 0000000000..3d2e7a8998
--- /dev/null
+++ b/src/nvim/testdir/test_assign.vim
@@ -0,0 +1,9 @@
+" Test for assignment
+
+func Test_no_type_checking()
+ let v = 1
+ let v = [1,2,3]
+ let v = {'a':1, 'b':2}
+ let v = 3.4
+ let v = 'hello'
+endfunc
diff --git a/src/nvim/testdir/test_autocmd.vim b/src/nvim/testdir/test_autocmd.vim
new file mode 100644
index 0000000000..f05a55f1aa
--- /dev/null
+++ b/src/nvim/testdir/test_autocmd.vim
@@ -0,0 +1,198 @@
+" Tests for autocommands
+
+func Test_vim_did_enter()
+ call assert_false(v:vim_did_enter)
+
+ " This script will never reach the main loop, can't check if v:vim_did_enter
+ " becomes one.
+endfunc
+
+if has('timers')
+ func ExitInsertMode(id)
+ call feedkeys("\<Esc>")
+ endfunc
+
+ func Test_cursorhold_insert()
+ let g:triggered = 0
+ au CursorHoldI * let g:triggered += 1
+ set updatetime=20
+ call timer_start(100, 'ExitInsertMode')
+ call feedkeys('a', 'x!')
+ call assert_equal(1, g:triggered)
+ au! CursorHoldI
+ endfunc
+
+ func Test_cursorhold_insert_ctrl_x()
+ let g:triggered = 0
+ au CursorHoldI * let g:triggered += 1
+ set updatetime=20
+ call timer_start(100, 'ExitInsertMode')
+ " CursorHoldI does not trigger after CTRL-X
+ call feedkeys("a\<C-X>", 'x!')
+ call assert_equal(0, g:triggered)
+ au! CursorHoldI
+ endfunc
+endif
+
+function Test_bufunload()
+ augroup test_bufunload_group
+ autocmd!
+ autocmd BufUnload * call add(s:li, "bufunload")
+ autocmd BufDelete * call add(s:li, "bufdelete")
+ autocmd BufWipeout * call add(s:li, "bufwipeout")
+ augroup END
+
+ let s:li=[]
+ new
+ setlocal bufhidden=
+ bunload
+ call assert_equal(["bufunload", "bufdelete"], s:li)
+
+ let s:li=[]
+ new
+ setlocal bufhidden=delete
+ bunload
+ call assert_equal(["bufunload", "bufdelete"], s:li)
+
+ let s:li=[]
+ new
+ setlocal bufhidden=unload
+ bwipeout
+ call assert_equal(["bufunload", "bufdelete", "bufwipeout"], s:li)
+
+ au! test_bufunload_group
+ augroup! test_bufunload_group
+endfunc
+
+" SEGV occurs in older versions. (At least 7.4.2005 or older)
+function Test_autocmd_bufunload_with_tabnext()
+ tabedit
+ tabfirst
+
+ augroup test_autocmd_bufunload_with_tabnext_group
+ autocmd!
+ autocmd BufUnload <buffer> tabnext
+ augroup END
+
+ quit
+ call assert_equal(2, tabpagenr('$'))
+
+ augroup! test_autocmd_bufunload_with_tabnext_group
+ tablast
+ quit
+endfunc
+
+func Test_win_tab_autocmd()
+ let g:record = []
+
+ augroup testing
+ au WinNew * call add(g:record, 'WinNew')
+ au WinEnter * call add(g:record, 'WinEnter')
+ au WinLeave * call add(g:record, 'WinLeave')
+ au TabNew * call add(g:record, 'TabNew')
+ au TabClosed * call add(g:record, 'TabClosed')
+ au TabEnter * call add(g:record, 'TabEnter')
+ au TabLeave * call add(g:record, 'TabLeave')
+ augroup END
+
+ split
+ tabnew
+ close
+ close
+
+ call assert_equal([
+ \ 'WinLeave', 'WinNew', 'WinEnter',
+ \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
+ \ 'WinLeave', 'TabLeave', 'TabClosed', 'WinEnter', 'TabEnter',
+ \ 'WinLeave', 'WinEnter'
+ \ ], g:record)
+
+ let g:record = []
+ tabnew somefile
+ tabnext
+ bwipe somefile
+
+ call assert_equal([
+ \ 'WinLeave', 'TabLeave', 'WinNew', 'WinEnter', 'TabNew', 'TabEnter',
+ \ 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter',
+ \ 'TabClosed'
+ \ ], g:record)
+
+ augroup testing
+ au!
+ augroup END
+ unlet g:record
+endfunc
+
+func s:AddAnAutocmd()
+ augroup vimBarTest
+ au BufReadCmd * echo 'hello'
+ augroup END
+ call assert_equal(3, len(split(execute('au vimBarTest'), "\n")))
+endfunc
+
+func Test_early_bar()
+ " test that a bar is recognized before the {event}
+ call s:AddAnAutocmd()
+ augroup vimBarTest | au! | augroup END
+ call assert_equal(1, len(split(execute('au vimBarTest'), "\n")))
+
+ call s:AddAnAutocmd()
+ augroup vimBarTest| au!| augroup END
+ call assert_equal(1, len(split(execute('au vimBarTest'), "\n")))
+
+ " test that a bar is recognized after the {event}
+ call s:AddAnAutocmd()
+ augroup vimBarTest| au!BufReadCmd| augroup END
+ call assert_equal(1, len(split(execute('au vimBarTest'), "\n")))
+
+ " test that a bar is recognized after the {group}
+ call s:AddAnAutocmd()
+ au! vimBarTest|echo 'hello'
+ call assert_equal(1, len(split(execute('au vimBarTest'), "\n")))
+endfunc
+
+func RemoveGroup()
+ autocmd! StartOK
+ augroup! StartOK
+endfunc
+
+func Test_augroup_warning()
+ augroup TheWarning
+ au VimEnter * echo 'entering'
+ augroup END
+ call assert_true(match(execute('au VimEnter'), "TheWarning.*VimEnter") >= 0)
+ redir => res
+ augroup! TheWarning
+ redir END
+ call assert_true(match(res, "W19:") >= 0)
+ call assert_true(match(execute('au VimEnter'), "-Deleted-.*VimEnter") >= 0)
+
+ " check "Another" does not take the pace of the deleted entry
+ augroup Another
+ augroup END
+ call assert_true(match(execute('au VimEnter'), "-Deleted-.*VimEnter") >= 0)
+
+ " no warning for postpone aucmd delete
+ augroup StartOK
+ au VimEnter * call RemoveGroup()
+ augroup END
+ call assert_true(match(execute('au VimEnter'), "StartOK.*VimEnter") >= 0)
+ redir => res
+ doautocmd VimEnter
+ redir END
+ call assert_true(match(res, "W19:") < 0)
+ au! VimEnter
+endfunc
+
+func Test_augroup_deleted()
+ " This caused a crash before E936 was introduced
+ augroup x
+ call assert_fails('augroup! x', 'E936:')
+ au VimEnter * echo
+ augroup end
+ augroup! x
+ call assert_true(match(execute('au VimEnter'), "-Deleted-.*VimEnter") >= 0)
+ au! VimEnter
+endfunc
+
diff --git a/src/nvim/testdir/test_bufwintabinfo.vim b/src/nvim/testdir/test_bufwintabinfo.vim
new file mode 100644
index 0000000000..5c916e2dd7
--- /dev/null
+++ b/src/nvim/testdir/test_bufwintabinfo.vim
@@ -0,0 +1,103 @@
+" Tests for the getbufinfo(), getwininfo() and gettabinfo() functions
+
+function Test_getbufwintabinfo()
+ 1,$bwipeout
+ edit Xtestfile1
+ edit Xtestfile2
+ let buflist = getbufinfo()
+ call assert_equal(2, len(buflist))
+ call assert_match('Xtestfile1', buflist[0].name)
+ call assert_match('Xtestfile2', getbufinfo('Xtestfile2')[0].name)
+ call assert_equal([], getbufinfo(2016))
+ edit Xtestfile1
+ hide edit Xtestfile2
+ hide enew
+ call assert_equal(3, len(getbufinfo({'bufloaded':1})))
+
+ set tabstop&vim
+ let b:editor = 'vim'
+ let l = getbufinfo('%')
+ call assert_equal(bufnr('%'), l[0].bufnr)
+ call assert_equal('vim', l[0].variables.editor)
+ call assert_notequal(-1, index(l[0].windows, bufwinid('%')))
+
+ if has('signs')
+ call append(0, ['Linux', 'Windows', 'Mac'])
+ sign define Mark text=>> texthl=Search
+ exe "sign place 2 line=3 name=Mark buffer=" . bufnr('%')
+ let l = getbufinfo('%')
+ call assert_equal(2, l[0].signs[0].id)
+ call assert_equal(3, l[0].signs[0].lnum)
+ call assert_equal('Mark', l[0].signs[0].name)
+ sign unplace *
+ sign undefine Mark
+ enew!
+ endif
+
+ only
+ let w1_id = win_getid()
+ new
+ let w2_id = win_getid()
+ tabnew | let w3_id = win_getid()
+ new | let w4_id = win_getid()
+ new | let w5_id = win_getid()
+ call setwinvar(0, 'signal', 'green')
+ tabfirst
+ let winlist = getwininfo()
+ call assert_equal(5, len(winlist))
+ call assert_equal(winbufnr(2), winlist[1].bufnr)
+ call assert_equal(winheight(2), winlist[1].height)
+ call assert_equal(1, winlist[2].winnr)
+ call assert_equal(2, winlist[3].tabnr)
+ call assert_equal('green', winlist[2].variables.signal)
+ call assert_equal(winwidth(1), winlist[0].width)
+ call assert_equal(w4_id, winlist[3].winid)
+ let winfo = getwininfo(w5_id)[0]
+ call assert_equal(2, winfo.tabnr)
+ call assert_equal([], getwininfo(3))
+
+ call settabvar(1, 'space', 'build')
+ let tablist = gettabinfo()
+ call assert_equal(2, len(tablist))
+ call assert_equal(3, len(tablist[1].windows))
+ call assert_equal(2, tablist[1].tabnr)
+ call assert_equal('build', tablist[0].variables.space)
+ call assert_equal(w2_id, tablist[0].windows[0])
+ call assert_equal([], gettabinfo(3))
+
+ tabonly | only
+
+ lexpr ''
+ lopen
+ copen
+ let winlist = getwininfo()
+ call assert_false(winlist[0].quickfix)
+ call assert_false(winlist[0].loclist)
+ call assert_true(winlist[1].quickfix)
+ call assert_true(winlist[1].loclist)
+ call assert_true(winlist[2].quickfix)
+ call assert_false(winlist[2].loclist)
+ wincmd t | only
+endfunction
+
+function Test_get_buf_options()
+ let opts = getbufvar(bufnr('%'), '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(8, opts.tabstop)
+endfunc
+
+function Test_get_win_options()
+ let opts = getwinvar(1, '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(0, opts.linebreak)
+ if has('signs')
+ call assert_equal('auto', opts.signcolumn)
+ endif
+
+ let opts = gettabwinvar(1, 1, '&')
+ call assert_equal(v:t_dict, type(opts))
+ call assert_equal(0, opts.linebreak)
+ if has('signs')
+ call assert_equal('auto', opts.signcolumn)
+ endif
+endfunc
diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim
new file mode 100644
index 0000000000..21bb057fe1
--- /dev/null
+++ b/src/nvim/testdir/test_cmdline.vim
@@ -0,0 +1,186 @@
+" Tests for editing the command line.
+
+func Test_complete_tab()
+ call writefile(['testfile'], 'Xtestfile')
+ call feedkeys(":e Xtest\t\r", "tx")
+ call assert_equal('testfile', getline(1))
+ call delete('Xtestfile')
+endfunc
+
+func Test_complete_list()
+ " We can't see the output, but at least we check the code runs properly.
+ call feedkeys(":e test\<C-D>\r", "tx")
+ call assert_equal('test', expand('%:t'))
+endfunc
+
+func Test_complete_wildmenu()
+ call writefile(['testfile1'], 'Xtestfile1')
+ call writefile(['testfile2'], 'Xtestfile2')
+ set wildmenu
+ call feedkeys(":e Xtest\t\t\r", "tx")
+ call assert_equal('testfile2', getline(1))
+
+ call delete('Xtestfile1')
+ call delete('Xtestfile2')
+ set nowildmenu
+endfunc
+
+func Test_getcompletion()
+ if !has('cmdline_compl')
+ return
+ endif
+ let groupcount = len(getcompletion('', 'event'))
+ call assert_true(groupcount > 0)
+ let matchcount = len(getcompletion('File', 'event'))
+ call assert_true(matchcount > 0)
+ call assert_true(groupcount > matchcount)
+
+ if has('menu')
+ source $VIMRUNTIME/menu.vim
+ let matchcount = len(getcompletion('', 'menu'))
+ call assert_true(matchcount > 0)
+ call assert_equal(['File.'], getcompletion('File', 'menu'))
+ call assert_true(matchcount > 0)
+ let matchcount = len(getcompletion('File.', 'menu'))
+ call assert_true(matchcount > 0)
+ endif
+
+ let l = getcompletion('v:n', 'var')
+ call assert_true(index(l, 'v:null') >= 0)
+ let l = getcompletion('v:notexists', 'var')
+ call assert_equal([], l)
+
+ let l = getcompletion('', 'augroup')
+ call assert_true(index(l, 'END') >= 0)
+ let l = getcompletion('blahblah', 'augroup')
+ call assert_equal([], l)
+
+ let l = getcompletion('', 'behave')
+ call assert_true(index(l, 'mswin') >= 0)
+ let l = getcompletion('not', 'behave')
+ call assert_equal([], l)
+
+ let l = getcompletion('', 'color')
+ call assert_true(index(l, 'default') >= 0)
+ let l = getcompletion('dirty', 'color')
+ call assert_equal([], l)
+
+ let l = getcompletion('', 'command')
+ call assert_true(index(l, 'sleep') >= 0)
+ let l = getcompletion('awake', 'command')
+ call assert_equal([], l)
+
+ let l = getcompletion('', 'dir')
+ call assert_true(index(l, 'sautest/') >= 0)
+ let l = getcompletion('NoMatch', 'dir')
+ call assert_equal([], l)
+
+ let l = getcompletion('exe', 'expression')
+ call assert_true(index(l, 'executable(') >= 0)
+ let l = getcompletion('kill', 'expression')
+ call assert_equal([], l)
+
+ let l = getcompletion('tag', 'function')
+ call assert_true(index(l, 'taglist(') >= 0)
+ let l = getcompletion('paint', 'function')
+ call assert_equal([], l)
+
+ let l = getcompletion('run', 'file')
+ call assert_true(index(l, 'runtest.vim') >= 0)
+ let l = getcompletion('walk', 'file')
+ call assert_equal([], l)
+ set wildignore=*.vim
+ let l = getcompletion('run', 'file', 1)
+ call assert_true(index(l, 'runtest.vim') < 0)
+ set wildignore&
+
+ let l = getcompletion('ha', 'filetype')
+ call assert_true(index(l, 'hamster') >= 0)
+ let l = getcompletion('horse', 'filetype')
+ call assert_equal([], l)
+
+ let l = getcompletion('z', 'syntax')
+ call assert_true(index(l, 'zimbu') >= 0)
+ let l = getcompletion('emacs', 'syntax')
+ call assert_equal([], l)
+
+ let l = getcompletion('jikes', 'compiler')
+ call assert_true(index(l, 'jikes') >= 0)
+ let l = getcompletion('break', 'compiler')
+ call assert_equal([], l)
+
+ helptags ALL
+ let l = getcompletion('last', 'help')
+ call assert_true(index(l, ':tablast') >= 0)
+ let l = getcompletion('giveup', 'help')
+ call assert_equal([], l)
+
+ let l = getcompletion('time', 'option')
+ call assert_true(index(l, 'timeoutlen') >= 0)
+ let l = getcompletion('space', 'option')
+ call assert_equal([], l)
+
+ let l = getcompletion('er', 'highlight')
+ call assert_true(index(l, 'ErrorMsg') >= 0)
+ let l = getcompletion('dark', 'highlight')
+ call assert_equal([], l)
+
+ if has('cscope')
+ let l = getcompletion('', 'cscope')
+ let cmds = ['add', 'find', 'help', 'kill', 'reset', 'show']
+ call assert_equal(cmds, l)
+ " using cmdline completion must not change the result
+ call feedkeys(":cscope find \<c-d>\<c-c>", 'xt')
+ let l = getcompletion('', 'cscope')
+ call assert_equal(cmds, l)
+ let keys = ['a', 'c', 'd', 'e', 'f', 'g', 'i', 's', 't']
+ let l = getcompletion('find ', 'cscope')
+ call assert_equal(keys, l)
+ endif
+
+ if has('signs')
+ sign define Testing linehl=Comment
+ let l = getcompletion('', 'sign')
+ let cmds = ['define', 'jump', 'list', 'place', 'undefine', 'unplace']
+ call assert_equal(cmds, l)
+ " using cmdline completion must not change the result
+ call feedkeys(":sign list \<c-d>\<c-c>", 'xt')
+ let l = getcompletion('', 'sign')
+ call assert_equal(cmds, l)
+ let l = getcompletion('list ', 'sign')
+ call assert_equal(['Testing'], l)
+ endif
+
+ " For others test if the name is recognized.
+ let names = ['buffer', 'environment', 'file_in_path',
+ \ 'mapping', 'shellcmd', 'tag', 'tag_listfiles', 'user']
+ if has('cmdline_hist')
+ call add(names, 'history')
+ endif
+ if has('gettext')
+ call add(names, 'locale')
+ endif
+ if has('profile')
+ call add(names, 'syntime')
+ endif
+
+ set tags=Xtags
+ call writefile(["!_TAG_FILE_ENCODING\tutf-8\t//", "word\tfile\tcmd"], 'Xtags')
+
+ for name in names
+ let matchcount = len(getcompletion('', name))
+ call assert_true(matchcount >= 0, 'No matches for ' . name)
+ endfor
+
+ call delete('Xtags')
+
+ call assert_fails('call getcompletion("", "burp")', 'E475:')
+endfunc
+
+func Test_expand_star_star()
+ call mkdir('a/b', 'p')
+ call writefile(['asdfasdf'], 'a/b/fileXname')
+ call feedkeys(":find **/fileXname\<Tab>\<CR>", 'xt')
+ call assert_equal('find a/b/fileXname', getreg(':'))
+ call delete('a', 'rf')
+endfunc
diff --git a/src/nvim/testdir/test_cscope.vim b/src/nvim/testdir/test_cscope.vim
new file mode 100644
index 0000000000..b6d70f0765
--- /dev/null
+++ b/src/nvim/testdir/test_cscope.vim
@@ -0,0 +1,15 @@
+" Test for cscope commands.
+
+if !has('cscope')
+ finish
+endif
+
+func Test_cscopequickfix()
+ set cscopequickfix=s-,g-,d+,c-,t+,e-,f0,i-,a-
+ call assert_equal('s-,g-,d+,c-,t+,e-,f0,i-,a-', &cscopequickfix)
+
+ call assert_fails('set cscopequickfix=x-', 'E474:')
+ call assert_fails('set cscopequickfix=s', 'E474:')
+ call assert_fails('set cscopequickfix=s7', 'E474:')
+ call assert_fails('set cscopequickfix=s-a', 'E474:')
+endfunc
diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim
new file mode 100644
index 0000000000..7666594862
--- /dev/null
+++ b/src/nvim/testdir/test_diffmode.vim
@@ -0,0 +1,204 @@
+" Tests for diff mode
+
+func Test_diff_fold_sync()
+ enew!
+ let l = range(50)
+ call setline(1, l)
+ diffthis
+ let winone = win_getid()
+ new
+ let l[25] = 'diff'
+ call setline(1, l)
+ diffthis
+ let wintwo = win_getid()
+ " line 15 is inside the closed fold
+ call assert_equal(19, foldclosedend(10))
+ call win_gotoid(winone)
+ call assert_equal(19, foldclosedend(10))
+ " open the fold
+ normal zv
+ call assert_equal(-1, foldclosedend(10))
+ " fold in other window must have opened too
+ call win_gotoid(wintwo)
+ call assert_equal(-1, foldclosedend(10))
+
+ " cursor position is in sync
+ normal 23G
+ call win_gotoid(winone)
+ call assert_equal(23, getcurpos()[1])
+
+ windo diffoff
+ close!
+ set nomodified
+endfunc
+
+func Test_vert_split()
+ " Disable the title to avoid xterm keeping the wrong one.
+ set notitle noicon
+ new
+ let l = ['1 aa', '2 bb', '3 cc', '4 dd', '5 ee']
+ call setline(1, l)
+ w! Xtest
+ normal dd
+ $
+ put
+ normal kkrXoxxx
+ w! Xtest2
+ file Nop
+ normal ggoyyyjjjozzzz
+ set foldmethod=marker foldcolumn=4
+ call assert_equal(0, &diff)
+ call assert_equal('marker', &foldmethod)
+ call assert_equal(4, &foldcolumn)
+ call assert_equal(0, &scrollbind)
+ call assert_equal(0, &cursorbind)
+ call assert_equal(1, &wrap)
+
+ vert diffsplit Xtest
+ vert diffsplit Xtest2
+ call assert_equal(1, &diff)
+ call assert_equal('diff', &foldmethod)
+ call assert_equal(2, &foldcolumn)
+ call assert_equal(1, &scrollbind)
+ call assert_equal(1, &cursorbind)
+ call assert_equal(0, &wrap)
+
+ let diff_fdm = &fdm
+ let diff_fdc = &fdc
+ " repeat entering diff mode here to see if this saves the wrong settings
+ diffthis
+ " jump to second window for a moment to have filler line appear at start of
+ " first window
+ wincmd w
+ normal gg
+ wincmd p
+ normal gg
+ call assert_equal(2, winline())
+ normal j
+ call assert_equal(4, winline())
+ normal j
+ call assert_equal(5, winline())
+ normal j
+ call assert_equal(6, winline())
+ normal j
+ call assert_equal(8, winline())
+ normal j
+ call assert_equal(9, winline())
+
+ wincmd w
+ normal gg
+ call assert_equal(1, winline())
+ normal j
+ call assert_equal(2, winline())
+ normal j
+ call assert_equal(4, winline())
+ normal j
+ call assert_equal(5, winline())
+ normal j
+ call assert_equal(8, winline())
+
+ wincmd w
+ normal gg
+ call assert_equal(2, winline())
+ normal j
+ call assert_equal(3, winline())
+ normal j
+ call assert_equal(4, winline())
+ normal j
+ call assert_equal(5, winline())
+ normal j
+ call assert_equal(6, winline())
+ normal j
+ call assert_equal(7, winline())
+ normal j
+ call assert_equal(8, winline())
+
+ " Test diffoff
+ diffoff!
+ 1wincmd 2
+ let &diff = 1
+ let &fdm = diff_fdm
+ let &fdc = diff_fdc
+ 4wincmd w
+ diffoff!
+ 1wincmd w
+ call assert_equal(0, &diff)
+ call assert_equal('marker', &foldmethod)
+ call assert_equal(4, &foldcolumn)
+ call assert_equal(0, &scrollbind)
+ call assert_equal(0, &cursorbind)
+ call assert_equal(1, &wrap)
+
+ wincmd w
+ call assert_equal(0, &diff)
+ call assert_equal('marker', &foldmethod)
+ call assert_equal(4, &foldcolumn)
+ call assert_equal(0, &scrollbind)
+ call assert_equal(0, &cursorbind)
+ call assert_equal(1, &wrap)
+
+ wincmd w
+ call assert_equal(0, &diff)
+ call assert_equal('marker', &foldmethod)
+ call assert_equal(4, &foldcolumn)
+ call assert_equal(0, &scrollbind)
+ call assert_equal(0, &cursorbind)
+ call assert_equal(1, &wrap)
+
+ call delete('Xtest')
+ call delete('Xtest2')
+ windo bw!
+endfunc
+
+func Test_filler_lines()
+ " Test that diffing shows correct filler lines
+ enew!
+ put =range(4,10)
+ 1d _
+ vnew
+ put =range(1,10)
+ 1d _
+ windo diffthis
+ wincmd h
+ call assert_equal(1, line('w0'))
+ unlet! diff_fdm diff_fdc
+ windo diffoff
+ bwipe!
+ enew!
+endfunc
+
+func Test_diffget_diffput()
+ enew!
+ let l = range(50)
+ call setline(1, l)
+ call assert_fails('diffget', 'E99:')
+ diffthis
+ call assert_fails('diffget', 'E100:')
+ new
+ let l[10] = 'one'
+ let l[20] = 'two'
+ let l[30] = 'three'
+ let l[40] = 'four'
+ call setline(1, l)
+ diffthis
+ call assert_equal('one', getline(11))
+ 11diffget
+ call assert_equal('10', getline(11))
+ 21diffput
+ wincmd w
+ call assert_equal('two', getline(21))
+ normal 31Gdo
+ call assert_equal('three', getline(31))
+ call assert_equal('40', getline(41))
+ normal 41Gdp
+ wincmd w
+ call assert_equal('40', getline(41))
+ new
+ diffthis
+ call assert_fails('diffget', 'E101:')
+
+ windo diffoff
+ bwipe!
+ bwipe!
+ enew!
+endfunc
diff --git a/src/nvim/testdir/test_ex_undo.vim b/src/nvim/testdir/test_ex_undo.vim
new file mode 100644
index 0000000000..44feb3680a
--- /dev/null
+++ b/src/nvim/testdir/test_ex_undo.vim
@@ -0,0 +1,19 @@
+" Tests for :undo
+
+func Test_ex_undo()
+ new ex-undo
+ setlocal ul=10
+ exe "normal ione\n\<Esc>"
+ setlocal ul=10
+ exe "normal itwo\n\<Esc>"
+ setlocal ul=10
+ exe "normal ithree\n\<Esc>"
+ call assert_equal(4, line('$'))
+ undo
+ call assert_equal(3, line('$'))
+ undo 1
+ call assert_equal(2, line('$'))
+ undo 0
+ call assert_equal(1, line('$'))
+ quit!
+endfunc
diff --git a/src/nvim/testdir/test_execute_func.vim b/src/nvim/testdir/test_execute_func.vim
new file mode 100644
index 0000000000..6f61bede93
--- /dev/null
+++ b/src/nvim/testdir/test_execute_func.vim
@@ -0,0 +1,55 @@
+" test execute()
+
+func NestedEval()
+ let nested = execute('echo "nested\nlines"')
+ echo 'got: "' . nested . '"'
+endfunc
+
+func NestedRedir()
+ redir => var
+ echo 'broken'
+ redir END
+endfunc
+
+func Test_execute_string()
+ call assert_equal("\nnocompatible", execute('set compatible?'))
+ call assert_equal("\nsomething\nnice", execute('echo "something\nnice"'))
+ call assert_equal("noendofline", execute('echon "noendofline"'))
+ call assert_equal("", execute(123))
+
+ call assert_equal("\ngot: \"\nnested\nlines\"", execute('call NestedEval()'))
+ redir => redired
+ echo 'this'
+ let evaled = execute('echo "that"')
+ echo 'theend'
+ redir END
+" Nvim supports execute('... :redir ...'), so this test is intentionally
+" disabled.
+" call assert_equal("\nthis\ntheend", redired)
+ call assert_equal("\nthat", evaled)
+
+ call assert_fails('call execute("doesnotexist")', 'E492:')
+ call assert_fails('call execute(3.4)', 'E806:')
+" Nvim supports execute('... :redir ...'), so this test is intentionally
+" disabled.
+" call assert_fails('call execute("call NestedRedir()")', 'E930:')
+
+ call assert_equal("\nsomething", execute('echo "something"', ''))
+ call assert_equal("\nsomething", execute('echo "something"', 'silent'))
+ call assert_equal("\nsomething", execute('echo "something"', 'silent!'))
+ call assert_equal("", execute('burp', 'silent!'))
+ call assert_fails('call execute("echo \"x\"", 3.4)', 'E806:')
+
+ call assert_equal("", execute(""))
+endfunc
+
+func Test_execute_list()
+ call assert_equal("\nsomething\nnice", execute(['echo "something"', 'echo "nice"']))
+ let l = ['for n in range(0, 3)',
+ \ 'echo n',
+ \ 'endfor']
+ call assert_equal("\n0\n1\n2\n3", execute(l))
+
+ call assert_equal("", execute([]))
+ call assert_equal("", execute(v:_null_list))
+endfunc
diff --git a/src/nvim/testdir/test_expr.vim b/src/nvim/testdir/test_expr.vim
new file mode 100644
index 0000000000..39dcacb55f
--- /dev/null
+++ b/src/nvim/testdir/test_expr.vim
@@ -0,0 +1,108 @@
+" Tests for expressions.
+
+func Test_equal()
+ let base = {}
+ func base.method()
+ return 1
+ endfunc
+ func base.other() dict
+ return 1
+ endfunc
+ let instance = copy(base)
+ call assert_true(base.method == instance.method)
+ call assert_true([base.method] == [instance.method])
+ call assert_true(base.other == instance.other)
+ call assert_true([base.other] == [instance.other])
+
+ call assert_false(base.method == base.other)
+ call assert_false([base.method] == [base.other])
+ call assert_false(base.method == instance.other)
+ call assert_false([base.method] == [instance.other])
+
+ call assert_fails('echo base.method > instance.method')
+endfunc
+
+func Test_version()
+ call assert_true(has('patch-7.4.001'))
+ call assert_true(has('patch-7.4.01'))
+ call assert_true(has('patch-7.4.1'))
+ call assert_true(has('patch-6.9.999'))
+ call assert_true(has('patch-7.1.999'))
+ call assert_true(has('patch-7.4.123'))
+
+ call assert_false(has('patch-7'))
+ call assert_false(has('patch-7.4'))
+ call assert_false(has('patch-7.4.'))
+ call assert_false(has('patch-9.1.0'))
+ call assert_false(has('patch-9.9.1'))
+endfunc
+
+func Test_dict()
+ let d = {'': 'empty', 'a': 'a', 0: 'zero'}
+ call assert_equal('empty', d[''])
+ call assert_equal('a', d['a'])
+ call assert_equal('zero', d[0])
+ call assert_true(has_key(d, ''))
+ call assert_true(has_key(d, 'a'))
+
+ let d[''] = 'none'
+ let d['a'] = 'aaa'
+ call assert_equal('none', d[''])
+ call assert_equal('aaa', d['a'])
+endfunc
+
+func Test_strgetchar()
+ call assert_equal(char2nr('a'), strgetchar('axb', 0))
+ call assert_equal(char2nr('x'), strgetchar('axb', 1))
+ call assert_equal(char2nr('b'), strgetchar('axb', 2))
+
+ call assert_equal(-1, strgetchar('axb', -1))
+ call assert_equal(-1, strgetchar('axb', 3))
+ call assert_equal(-1, strgetchar('', 0))
+endfunc
+
+func Test_strcharpart()
+ call assert_equal('a', strcharpart('axb', 0, 1))
+ call assert_equal('x', strcharpart('axb', 1, 1))
+ call assert_equal('b', strcharpart('axb', 2, 1))
+ call assert_equal('xb', strcharpart('axb', 1))
+
+ call assert_equal('', strcharpart('axb', 1, 0))
+ call assert_equal('', strcharpart('axb', 1, -1))
+ call assert_equal('', strcharpart('axb', -1, 1))
+ call assert_equal('', strcharpart('axb', -2, 2))
+
+ call assert_equal('a', strcharpart('axb', -1, 2))
+endfunc
+
+func Test_loop_over_null_list()
+ let null_list = submatch(1, 1)
+ for i in null_list
+ call assert_true(0, 'should not get here')
+ endfor
+endfunc
+
+func Test_compare_null_dict()
+ call assert_fails('let x = v:_null_dict[10]')
+ call assert_equal({}, {})
+ call assert_equal(v:_null_dict, v:_null_dict)
+ call assert_notequal({}, v:_null_dict)
+endfunc
+
+func Test_set_reg_null_list()
+ call setreg('x', v:_null_list)
+endfunc
+
+func Test_special_char()
+ " The failure is only visible using valgrind.
+ call assert_fails('echo "\<C-">')
+endfunc
+
+func Test_setmatches()
+ hi def link 1 Comment
+ hi def link 2 PreProc
+ let set = [{"group": 1, "pattern": 2, "id": 3, "priority": 4, "conceal": 5}]
+ let exp = [{"group": '1', "pattern": '2', "id": 3, "priority": 4, "conceal": '5'}]
+ call setmatches(set)
+ call assert_equal(exp, getmatches())
+endfunc
diff --git a/src/nvim/testdir/test_expr_utf8.vim b/src/nvim/testdir/test_expr_utf8.vim
new file mode 100644
index 0000000000..097d708329
--- /dev/null
+++ b/src/nvim/testdir/test_expr_utf8.vim
@@ -0,0 +1,94 @@
+" Tests for expressions using utf-8.
+if !has('multi_byte')
+ finish
+endif
+
+func Test_strgetchar_utf8()
+ call assert_equal(char2nr('á'), strgetchar('áxb', 0))
+ call assert_equal(char2nr('x'), strgetchar('áxb', 1))
+
+ call assert_equal(char2nr('a'), strgetchar('àxb', 0))
+ call assert_equal(char2nr('̀'), strgetchar('àxb', 1))
+ call assert_equal(char2nr('x'), strgetchar('àxb', 2))
+
+ call assert_equal(char2nr('ã‚'), strgetchar('ã‚aã„', 0))
+ call assert_equal(char2nr('a'), strgetchar('ã‚aã„', 1))
+ call assert_equal(char2nr('ã„'), strgetchar('ã‚aã„', 2))
+endfunc
+
+func Test_strcharpart_utf8()
+ call assert_equal('áxb', strcharpart('áxb', 0))
+ call assert_equal('á', strcharpart('áxb', 0, 1))
+ call assert_equal('x', strcharpart('áxb', 1, 1))
+
+ call assert_equal('ã„ã†eãŠ', strcharpart('ã‚ã„ã†eãŠ', 1))
+ call assert_equal('ã„', strcharpart('ã‚ã„ã†eãŠ', 1, 1))
+ call assert_equal('ã„ã†', strcharpart('ã‚ã„ã†eãŠ', 1, 2))
+ call assert_equal('ã„ã†e', strcharpart('ã‚ã„ã†eãŠ', 1, 3))
+ call assert_equal('ã„ã†eãŠ', strcharpart('ã‚ã„ã†eãŠ', 1, 4))
+ call assert_equal('eãŠ', strcharpart('ã‚ã„ã†eãŠ', 3))
+ call assert_equal('e', strcharpart('ã‚ã„ã†eãŠ', 3, 1))
+
+ call assert_equal('ã‚', strcharpart('ã‚ã„ã†eãŠ', -3, 4))
+
+ call assert_equal('a', strcharpart('àxb', 0, 1))
+ call assert_equal('̀', strcharpart('àxb', 1, 1))
+ call assert_equal('x', strcharpart('àxb', 2, 1))
+endfunc
+
+func s:classes_test()
+ set isprint=@,161-255
+ call assert_equal('Motörhead', matchstr('Motörhead', '[[:print:]]\+'))
+
+ let alphachars = ''
+ let lowerchars = ''
+ let upperchars = ''
+ let alnumchars = ''
+ let printchars = ''
+ let punctchars = ''
+ let xdigitchars = ''
+ let i = 1
+ while i <= 255
+ let c = nr2char(i)
+ if c =~ '[[:alpha:]]'
+ let alphachars .= c
+ endif
+ if c =~ '[[:lower:]]'
+ let lowerchars .= c
+ endif
+ if c =~ '[[:upper:]]'
+ let upperchars .= c
+ endif
+ if c =~ '[[:alnum:]]'
+ let alnumchars .= c
+ endif
+ if c =~ '[[:print:]]'
+ let printchars .= c
+ endif
+ if c =~ '[[:punct:]]'
+ let punctchars .= c
+ endif
+ if c =~ '[[:xdigit:]]'
+ let xdigitchars .= c
+ endif
+ let i += 1
+ endwhile
+
+ call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alphachars)
+ call assert_equal('abcdefghijklmnopqrstuvwxyzµßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ', lowerchars)
+ call assert_equal('ABCDEFGHIJKLMNOPQRSTUVWXYZÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖØÙÚÛÜÃÞ', upperchars)
+ call assert_equal('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', alnumchars)
+ call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÃÂÃÄÅÆÇÈÉÊËÌÃÃŽÃÃÑÒÓÔÕÖרÙÚÛÜÃÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ', printchars)
+ call assert_equal('!"#$%&''()*+,-./:;<=>?@[\]^_`{|}~', punctchars)
+ call assert_equal('0123456789ABCDEFabcdef', xdigitchars)
+endfunc
+
+func Test_classes_re1()
+ set re=1
+ call s:classes_test()
+endfunc
+
+func Test_classes_re2()
+ set re=2
+ call s:classes_test()
+endfunc
diff --git a/src/nvim/testdir/test_feedkeys.vim b/src/nvim/testdir/test_feedkeys.vim
new file mode 100644
index 0000000000..70500f2bb5
--- /dev/null
+++ b/src/nvim/testdir/test_feedkeys.vim
@@ -0,0 +1,14 @@
+" Test feedkeys() function.
+
+func Test_feedkeys_x_with_empty_string()
+ new
+ call feedkeys("ifoo\<Esc>")
+ call assert_equal('', getline('.'))
+ call feedkeys('', 'x')
+ call assert_equal('foo', getline('.'))
+
+ " check it goes back to normal mode immediately.
+ call feedkeys('i', 'x')
+ call assert_equal('foo', getline('.'))
+ quit!
+endfunc
diff --git a/src/nvim/testdir/test_gn.vim b/src/nvim/testdir/test_gn.vim
new file mode 100644
index 0000000000..3eca99bd99
--- /dev/null
+++ b/src/nvim/testdir/test_gn.vim
@@ -0,0 +1,93 @@
+" Test for gn command
+
+func Test_gn_command()
+ noa new
+ " replace a single char by itsself quoted:
+ call setline('.', 'abc x def x ghi x jkl')
+ let @/='x'
+ exe "norm! cgn'x'\<esc>.."
+ call assert_equal("abc 'x' def 'x' ghi 'x' jkl", getline('.'))
+ sil! %d_
+ " simple search match
+ call setline('.', 'foobar')
+ let @/='foobar'
+ exe "norm! gncsearchmatch"
+ call assert_equal('searchmatch', getline('.'))
+ sil! %d _
+ " replace a multi-line match
+ call setline('.', ['', 'one', 'two'])
+ let @/='one\_s*two\_s'
+ exe "norm! gnceins\<CR>zwei"
+ call assert_equal(['','eins','zwei'], getline(1,'$'))
+ sil! %d _
+ " test count argument
+ call setline('.', ['', 'abcdx | abcdx | abcdx'])
+ let @/='[a]bcdx'
+ exe "norm! 2gnd"
+ call assert_equal(['','abcdx | | abcdx'], getline(1,'$'))
+ sil! %d _
+ " join lines
+ call setline('.', ['join ', 'lines'])
+ let @/='$'
+ exe "norm! 0gnd"
+ call assert_equal(['join lines'], getline(1,'$'))
+ sil! %d _
+ " zero-width match
+ call setline('.', ['', 'zero width pattern'])
+ let @/='\>\zs'
+ exe "norm! 0gnd"
+ call assert_equal(['', 'zerowidth pattern'], getline(1,'$'))
+ sil! %d _
+ " delete first and last chars
+ call setline('.', ['delete first and last chars'])
+ let @/='^'
+ exe "norm! 0gnd$"
+ let @/='\zs'
+ exe "norm! gnd"
+ call assert_equal(['elete first and last char'], getline(1,'$'))
+ sil! %d _
+ " using visual mode
+ call setline('.', ['', 'uniquepattern uniquepattern'])
+ exe "norm! /[u]niquepattern/s\<cr>vlgnd"
+ call assert_equal(['', ' uniquepattern'], getline(1,'$'))
+ sil! %d _
+ " backwards search
+ call setline('.', ['my very excellent mother just served us nachos'])
+ let @/='mother'
+ exe "norm! $cgNmongoose"
+ call assert_equal(['my very excellent mongoose just served us nachos'], getline(1,'$'))
+ sil! %d _
+ " search for single char
+ call setline('.', ['','for (i=0; i<=10; i++)'])
+ let @/='i'
+ exe "norm! cgnj"
+ call assert_equal(['','for (j=0; i<=10; i++)'], getline(1,'$'))
+ sil! %d _
+ " search hex char
+ call setline('.', ['','Y'])
+ set noignorecase
+ let @/='\%x59'
+ exe "norm! gnd"
+ call assert_equal(['',''], getline(1,'$'))
+ sil! %d _
+ " test repeating gdn
+ call setline('.', ['', '1', 'Johnny', '2', 'Johnny', '3'])
+ let @/='Johnny'
+ exe "norm! dgn."
+ call assert_equal(['','1', '', '2', '', '3'], getline(1,'$'))
+ sil! %d _
+ " test repeating gUgn
+ call setline('.', ['', '1', 'Depp', '2', 'Depp', '3'])
+ let @/='Depp'
+ exe "norm! gUgn."
+ call assert_equal(['', '1', 'DEPP', '2', 'DEPP', '3'], getline(1,'$'))
+ sil! %d _
+ " test using look-ahead assertions
+ call setline('.', ['a:10', '', 'a:1', '', 'a:20'])
+ let @/='a:0\@!\zs\d\+'
+ exe "norm! 2nygno\<esc>p"
+ call assert_equal(['a:10', '', 'a:1', '1', '', 'a:20'], getline(1,'$'))
+ sil! %d _
+endfu
+
+" vim: tabstop=2 shiftwidth=0 expandtab
diff --git a/src/nvim/testdir/test_goto.vim b/src/nvim/testdir/test_goto.vim
new file mode 100644
index 0000000000..b6ac5720c3
--- /dev/null
+++ b/src/nvim/testdir/test_goto.vim
@@ -0,0 +1,35 @@
+" Test commands that jump somewhere.
+
+func Test_geeDEE()
+ new
+ call setline(1, ["Filename x;", "", "int Filename", "int func() {", "Filename y;"])
+ /y;/
+ normal gD
+ call assert_equal(1, line('.'))
+ quit!
+endfunc
+
+func Test_gee_dee()
+ new
+ call setline(1, ["int x;", "", "int func(int x)", "{", " return x;", "}"])
+ /return/
+ normal $hgd
+ call assert_equal(3, line('.'))
+ call assert_equal(14, col('.'))
+ quit!
+endfunc
+
+" Check that setting 'cursorline' does not change curswant
+func Test_cursorline_keep_col()
+ new
+ call setline(1, ['long long long line', 'short line'])
+ normal ggfi
+ let pos = getcurpos()
+ normal j
+ set cursorline
+ normal k
+ call assert_equal(pos, getcurpos())
+ bwipe!
+ set nocursorline
+endfunc
+
diff --git a/src/nvim/testdir/test_hardcopy.vim b/src/nvim/testdir/test_hardcopy.vim
new file mode 100644
index 0000000000..ea9790d134
--- /dev/null
+++ b/src/nvim/testdir/test_hardcopy.vim
@@ -0,0 +1,62 @@
+" Test :hardcopy
+
+func Test_printoptions_parsing()
+ " Only test that this doesn't throw an error.
+ set printoptions=left:5in,right:10pt,top:8mm,bottom:2pc
+ set printoptions=left:2in,top:30pt,right:16mm,bottom:3pc
+ set printoptions=header:3,syntax:y,number:7,wrap:n
+ set printoptions=duplex:short,collate:n,jobsplit:y,portrait:n
+ set printoptions=paper:10x14
+ set printoptions=paper:A3
+ set printoptions=paper:A4
+ set printoptions=paper:A5
+ set printoptions=paper:B4
+ set printoptions=paper:B5
+ set printoptions=paper:executive
+ set printoptions=paper:folio
+ set printoptions=paper:ledger
+ set printoptions=paper:legal
+ set printoptions=paper:letter
+ set printoptions=paper:quarto
+ set printoptions=paper:statement
+ set printoptions=paper:tabloid
+ set printoptions=formfeed:y
+ set printoptions=
+ set printoptions&
+
+ call assert_fails('set printoptions=paper', 'E550:')
+ call assert_fails('set printoptions=shredder:on', 'E551:')
+ call assert_fails('set printoptions=left:no', 'E552:')
+endfunc
+
+func Test_printmbfont_parsing()
+ " Only test that this doesn't throw an error.
+ set printmbfont=r:WadaMin-Regular,b:WadaMin-Bold,i:WadaMin-Italic,o:WadaMin-Bold-Italic,c:yes,a:no
+ set printmbfont=
+ set printmbfont&
+endfunc
+
+func Test_printheader_parsing()
+ " Only test that this doesn't throw an error.
+ set printheader=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
+ set printheader=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
+ set printheader=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
+ set printheader=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
+ set printheader=
+ set printheader&
+endfunc
+
+" Test that :hardcopy produces a non-empty file.
+" We don't check much of the contents.
+func Test_with_syntax()
+ if has('postscript')
+ set printoptions=syntax:y
+ syn on
+ hardcopy > Xhardcopy
+ let lines = readfile('Xhardcopy')
+ call assert_true(len(lines) > 20)
+ call assert_true(lines[0] =~ 'PS-Adobe')
+ call delete('Xhardcopy')
+ set printoptions&
+ endif
+endfunc
diff --git a/src/nvim/testdir/test_help_tagjump.vim b/src/nvim/testdir/test_help_tagjump.vim
index 9f9207d27d..cc1c81c7f6 100644
--- a/src/nvim/testdir/test_help_tagjump.vim
+++ b/src/nvim/testdir/test_help_tagjump.vim
@@ -37,4 +37,129 @@ func Test_help_tagjump()
call assert_equal("help", &filetype)
call assert_true(getline('.') =~ '\*arglistid()\*')
helpclose
+
+ exec "help! 'autoindent'."
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ "\\*'autoindent'\\*")
+ helpclose
+
+ exec "help! {address}."
+ call assert_equal("help", &filetype)
+ call assert_true(getline('.') =~ '\*{address}\*')
+ helpclose
+endfunc
+
+let s:langs = ['en', 'ab', 'ja']
+
+func s:doc_config_setup()
+ let s:helpfile_save = &helpfile
+ let &helpfile="Xdir1/doc-en/doc/testdoc.txt"
+ let s:rtp_save = &rtp
+ let &rtp="Xdir1/doc-en"
+ if has('multi_lang')
+ let s:helplang_save=&helplang
+ endif
+
+ call delete('Xdir1', 'rf')
+
+ for lang in s:langs
+ if lang ==# 'en'
+ let tagfname = 'tags'
+ let docfname = 'testdoc.txt'
+ else
+ let tagfname = 'tags-' . lang
+ let docfname = 'testdoc.' . lang . 'x'
+ endif
+ let docdir = "Xdir1/doc-" . lang . "/doc"
+ call mkdir(docdir, "p")
+ call writefile(["\t*test-char*", "\t*test-col*"], docdir . '/' . docfname)
+ call writefile(["test-char\t" . docfname . "\t/*test-char*",
+ \ "test-col\t" . docfname . "\t/*test-col*"],
+ \ docdir . '/' . tagfname)
+ endfor
+endfunc
+
+func s:doc_config_teardown()
+ call delete('Xdir1', 'rf')
+
+ let &helpfile = s:helpfile_save
+ let &rtp = s:rtp_save
+ if has('multi_lang')
+ let &helplang = s:helplang_save
+ endif
+endfunc
+
+func s:get_cmd_compl_list(cmd)
+ let list = []
+ let str = ''
+ for cnt in range(1, 999)
+ call feedkeys(a:cmd . repeat("\<Tab>", cnt) . "'\<C-B>let str='\<CR>", 'tx')
+ if str ==# a:cmd[1:]
+ break
+ endif
+ call add(list, str)
+ endfor
+ return list
endfunc
+
+func Test_help_complete()
+ try
+ let list = []
+ call s:doc_config_setup()
+
+ " 'helplang=' and help file lang is 'en'
+ if has('multi_lang')
+ set helplang=
+ endif
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(['h test-col', 'h test-char'], list)
+
+ if has('multi_lang')
+ " 'helplang=ab' and help file lang is 'en'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(['h test-col', 'h test-char'], list)
+
+ " 'helplang=' and help file lang is 'en' and 'ab'
+ set rtp+=Xdir1/doc-ab
+ set helplang=
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col@en', 'h test-col@ab',
+ \ 'h test-char@en', 'h test-char@ab']), sort(list))
+
+ " 'helplang=ab' and help file lang is 'en' and 'ab'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@en',
+ \ 'h test-char', 'h test-char@en']), sort(list))
+
+ " 'helplang=' and help file lang is 'en', 'ab' and 'ja'
+ set rtp+=Xdir1/doc-ja
+ set helplang=
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col@en', 'h test-col@ab',
+ \ 'h test-col@ja', 'h test-char@en',
+ \ 'h test-char@ab', 'h test-char@ja']), sort(list))
+
+ " 'helplang=ab' and help file lang is 'en', 'ab' and 'ja'
+ set helplang=ab
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@en',
+ \ 'h test-col@ja', 'h test-char',
+ \ 'h test-char@en', 'h test-char@ja']), sort(list))
+
+ " 'helplang=ab,ja' and help file lang is 'en', 'ab' and 'ja'
+ set helplang=ab,ja
+ let list = s:get_cmd_compl_list(":h test")
+ call assert_equal(sort(['h test-col', 'h test-col@ja',
+ \ 'h test-col@en', 'h test-char',
+ \ 'h test-char@ja', 'h test-char@en']), sort(list))
+ endif
+ catch
+ call assert_exception('X')
+ finally
+ call s:doc_config_teardown()
+ endtry
+endfunc
+
+" vim: et sw=2:
diff --git a/src/nvim/testdir/test_history.vim b/src/nvim/testdir/test_history.vim
new file mode 100644
index 0000000000..ee6acfffc3
--- /dev/null
+++ b/src/nvim/testdir/test_history.vim
@@ -0,0 +1,65 @@
+" Tests for the history functions
+
+if !has('cmdline_hist')
+ finish
+endif
+
+set history=7
+
+function History_Tests(hist)
+ " First clear the history
+ call histadd(a:hist, 'dummy')
+ call assert_true(histdel(a:hist))
+ call assert_equal(-1, histnr(a:hist))
+ call assert_equal('', histget(a:hist))
+
+ call assert_true(histadd(a:hist, 'ls'))
+ call assert_true(histadd(a:hist, 'buffers'))
+ call assert_equal('buffers', histget(a:hist))
+ call assert_equal('ls', histget(a:hist, -2))
+ call assert_equal('ls', histget(a:hist, 1))
+ call assert_equal('', histget(a:hist, 5))
+ call assert_equal('', histget(a:hist, -5))
+ call assert_equal(2, histnr(a:hist))
+ call assert_true(histdel(a:hist, 2))
+ call assert_false(histdel(a:hist, 7))
+ call assert_equal(1, histnr(a:hist))
+ call assert_equal('ls', histget(a:hist, -1))
+
+ call assert_true(histadd(a:hist, 'buffers'))
+ call assert_true(histadd(a:hist, 'ls'))
+ call assert_equal('ls', histget(a:hist, -1))
+ call assert_equal(4, histnr(a:hist))
+
+ " Test for removing entries matching a pattern
+ for i in range(1, 3)
+ call histadd(a:hist, 'text_' . i)
+ endfor
+ call assert_true(histdel(a:hist, 'text_\d\+'))
+ call assert_equal('ls', histget(a:hist, -1))
+
+ " Test for freeing the entire history list
+ for i in range(1, 7)
+ call histadd(a:hist, 'text_' . i)
+ endfor
+ call histdel(a:hist)
+ for i in range(1, 7)
+ call assert_equal('', histget(a:hist, i))
+ call assert_equal('', histget(a:hist, i - 7 - 1))
+ endfor
+endfunction
+
+function Test_History()
+ for h in ['cmd', ':', '', 'search', '/', '?', 'expr', '=', 'input', '@', 'debug', '>']
+ call History_Tests(h)
+ endfor
+
+ " Negative tests
+ call assert_false(histdel('abc'))
+ call assert_equal('', histget('abc'))
+ call assert_fails('call histdel([])', 'E730:')
+ call assert_equal('', histget(10))
+ call assert_fails('call histget([])', 'E730:')
+ call assert_equal(-1, histnr('abc'))
+ call assert_fails('call histnr([])', 'E730:')
+endfunction
diff --git a/src/nvim/testdir/test_jumps.vim b/src/nvim/testdir/test_jumps.vim
new file mode 100644
index 0000000000..5a3717d165
--- /dev/null
+++ b/src/nvim/testdir/test_jumps.vim
@@ -0,0 +1,11 @@
+func Test_empty_buffer()
+ new
+ insert
+a
+b
+c
+d
+.
+ call assert_equal(1, line("''"))
+ bwipe!
+endfunc
diff --git a/src/nvim/testdir/test_langmap.vim b/src/nvim/testdir/test_langmap.vim
new file mode 100644
index 0000000000..066c3bf2bd
--- /dev/null
+++ b/src/nvim/testdir/test_langmap.vim
@@ -0,0 +1,24 @@
+" tests for 'langmap'
+
+func Test_langmap()
+ new
+ set langmap=}l,^x,%v
+
+ call setline(1, ['abc'])
+ call feedkeys('gg0}^', 'tx')
+ call assert_equal('ac', getline(1))
+
+ " in Replace mode
+ " need silent! to avoid a delay when entering Insert mode
+ call setline(1, ['abcde'])
+ silent! call feedkeys("gg0lR%{z\<Esc>00", 'tx')
+ call assert_equal('a%{ze', getline(1))
+
+ " in Select mode
+ " need silent! to avoid a delay when entering Insert mode
+ call setline(1, ['abcde'])
+ silent! call feedkeys("gg0}%}\<C-G>}^\<Esc>00", 'tx')
+ call assert_equal('a}^de', getline(1))
+
+ quit!
+endfunc
diff --git a/src/nvim/testdir/test_listlbr.in b/src/nvim/testdir/test_listlbr.in
deleted file mode 100644
index b5bac080ee..0000000000
--- a/src/nvim/testdir/test_listlbr.in
+++ /dev/null
@@ -1,119 +0,0 @@
-Test for linebreak and list option (non-utf8)
-
-STARTTEST
-:if !exists("+linebreak") | e! test.ok | w! test.out | qa! | endif
-:set wildchar=^E
-:10new|:vsp|:vert resize 20
-:put =\"\tabcdef hijklmn\tpqrstuvwxyz_1060ABCDEFGHIJKLMNOP \"
-:norm! zt
-:set ts=4 sw=4 sts=4 linebreak sbr=+ wrap
-:fu! ScreenChar(width)
-: let c=''
-: for j in range(1,4)
-: for i in range(1,a:width)
-: let c.=nr2char(screenchar(j, i))
-: endfor
-: let c.="\n"
-: endfor
-: return c
-:endfu
-:fu! DoRecordScreen()
-: wincmd l
-: $put =printf(\"\n%s\", g:test)
-: $put =g:line
-: wincmd p
-:endfu
-:"
-:let g:test="Test 1: set linebreak"
-:redraw!
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:"
-:let g:test="Test 2: set linebreak + set list"
-:set linebreak list listchars=
-:redraw!
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:"
-:let g:test ="Test 3: set linebreak nolist"
-:set nolist linebreak
-:redraw!
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:"
-:let g:test ="Test 4: set linebreak with tab and 1 line as long as screen: should break!"
-:set nolist linebreak ts=8
-:let line="1\t".repeat('a', winwidth(0)-2)
-:$put =line
-:$
-:norm! zt
-:redraw!
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:let line="_S_\t bla"
-:$put =line
-:$
-:norm! zt
-:"
-:let g:test ="Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)"
-:set cpo&vim list linebreak conceallevel=2 concealcursor=nv listchars=tab:ab
-:syn match ConcealVar contained /_/ conceal
-:syn match All /.*/ contains=ConcealVar
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:set cpo&vim linebreak
-:"
-:let g:test ="Test 6: set linebreak with visual block mode"
-:let line="REMOVE: this not"
-:$put =g:test
-:$put =line
-:let line="REMOVE: aaaaaaaaaaaaa"
-:$put =line
-:1/^REMOVE:
-0jf x:$put
-:set cpo&vim linebreak
-:"
-:let g:test ="Test 7: set linebreak with visual block mode and v_b_A"
-:$put =g:test
-Golong line: 40afoobar aTARGET at end
-:exe "norm! $3B\<C-v>eAx\<Esc>"
-:set cpo&vim linebreak sbr=
-:"
-:let g:test ="Test 8: set linebreak with visual char mode and changing block"
-:$put =g:test
-Go1111-1111-1111-11-1111-1111-11110f-lv3lc2222bgj.
-:"
-:let g:test ="Test 9: using redo after block visual mode"
-:$put =g:test
-Go
-aaa
-aaa
-a2k2j~e.
-:"
-:let g:test ="Test 10: using normal commands after block-visual"
-:$put =g:test
-:set linebreak
-Go
-abcd{ef
-ghijklm
-no}pqrs2k0f{c%
-:"
-:let g:test ="Test 11: using block replace mode after wrapping"
-:$put =g:test
-:set linebreak wrap
-Go150aayypk147|jr0
-:"
-:let g:test ="Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$"
-:set list listchars=space:_,trail:-,tab:>-,eol:$
-:$put =g:test
-:let line="a aaaaaaaaaaaaaaaaaaaaaa\ta "
-:$put =line
-:$
-:norm! zt
-:redraw!
-:let line=ScreenChar(winwidth(0))
-:call DoRecordScreen()
-:%w! test.out
-:qa!
-ENDTEST
-dummy text
diff --git a/src/nvim/testdir/test_listlbr.ok b/src/nvim/testdir/test_listlbr.ok
deleted file mode 100644
index b32a54969e..0000000000
--- a/src/nvim/testdir/test_listlbr.ok
+++ /dev/null
@@ -1,62 +0,0 @@
-
- abcdef hijklmn pqrstuvwxyz_1060ABCDEFGHIJKLMNOP
-
-Test 1: set linebreak
- abcdef
-+hijklmn
-+pqrstuvwxyz_1060ABC
-+DEFGHIJKLMNOP
-
-Test 2: set linebreak + set list
-^Iabcdef hijklmn^I
-+pqrstuvwxyz_1060ABC
-+DEFGHIJKLMNOP
-
-
-Test 3: set linebreak nolist
- abcdef
-+hijklmn
-+pqrstuvwxyz_1060ABC
-+DEFGHIJKLMNOP
-1 aaaaaaaaaaaaaaaaaa
-
-Test 4: set linebreak with tab and 1 line as long as screen: should break!
-1
-+aaaaaaaaaaaaaaaaaa
-~
-~
-_S_ bla
-
-Test 5: set linebreak with conceal and set list and tab displayed by different char (line may not be truncated)
-Sabbbbbb bla
-~
-~
-~
-Test 6: set linebreak with visual block mode
-this not
-aaaaaaaaaaaaa
-REMOVE:
-REMOVE:
-Test 7: set linebreak with visual block mode and v_b_A
-long line: foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar foobar TARGETx at end
-Test 8: set linebreak with visual char mode and changing block
-1111-2222-1111-11-1111-2222-1111
-Test 9: using redo after block visual mode
-
-AaA
-AaA
-A
-Test 10: using normal commands after block-visual
-
-abcdpqrs
-Test 11: using block replace mode after wrapping
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0aaa
-Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$
-a aaaaaaaaaaaaaaaaaaaaaa a
-
-Test 12: set linebreak list listchars=space:_,tab:>-,tail:-,eol:$
-a_
-aaaaaaaaaaaaaaaaaaaa
-aa>-----a-$
-~
diff --git a/src/nvim/testdir/test_match.vim b/src/nvim/testdir/test_match.vim
new file mode 100644
index 0000000000..7748dee87f
--- /dev/null
+++ b/src/nvim/testdir/test_match.vim
@@ -0,0 +1,234 @@
+" Test for :match, :2match, :3match, clearmatches(), getmatches(), matchadd(),
+" matchaddpos(), matcharg(), matchdelete(), matchstrpos() and setmatches().
+
+function Test_match()
+ highlight MyGroup1 term=bold ctermbg=red guibg=red
+ highlight MyGroup2 term=italic ctermbg=green guibg=green
+ highlight MyGroup3 term=underline ctermbg=blue guibg=blue
+
+ " --- Check that "matcharg()" returns the correct group and pattern if a match
+ " --- is defined.
+ match MyGroup1 /TODO/
+ 2match MyGroup2 /FIXME/
+ 3match MyGroup3 /XXX/
+ call assert_equal(['MyGroup1', 'TODO'], matcharg(1))
+ call assert_equal(['MyGroup2', 'FIXME'], matcharg(2))
+ call assert_equal(['MyGroup3', 'XXX'], matcharg(3))
+
+ " --- Check that "matcharg()" returns an empty list if the argument is not 1,
+ " --- 2 or 3 (only 0 and 4 are tested).
+ call assert_equal([], matcharg(0))
+ call assert_equal([], matcharg(4))
+
+ " --- Check that "matcharg()" returns ['', ''] if a match is not defined.
+ match
+ 2match
+ 3match
+ call assert_equal(['', ''], matcharg(1))
+ call assert_equal(['', ''], matcharg(2))
+ call assert_equal(['', ''], matcharg(3))
+
+ " --- Check that "matchadd()" and "getmatches()" agree on added matches and
+ " --- that default values apply.
+ let m1 = matchadd("MyGroup1", "TODO")
+ let m2 = matchadd("MyGroup2", "FIXME", 42)
+ let m3 = matchadd("MyGroup3", "XXX", 60, 17)
+ let ans = [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 4},
+ \ {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 42, 'id': 5},
+ \ {'group': 'MyGroup3', 'pattern': 'XXX', 'priority': 60, 'id': 17}]
+ call assert_equal(ans, getmatches())
+
+ " --- Check that "matchdelete()" deletes the matches defined in the previous
+ " --- test correctly.
+ call matchdelete(m1)
+ call matchdelete(m2)
+ call matchdelete(m3)
+ call assert_equal([], getmatches())
+
+ " --- Check that "matchdelete()" returns 0 if successful and otherwise -1.
+ let m = matchadd("MyGroup1", "TODO")
+ call assert_equal(0, matchdelete(m))
+ call assert_fails('call matchdelete(42)', 'E803:')
+
+ " --- Check that "clearmatches()" clears all matches defined by ":match" and
+ " --- "matchadd()".
+ let m1 = matchadd("MyGroup1", "TODO")
+ let m2 = matchadd("MyGroup2", "FIXME", 42)
+ let m3 = matchadd("MyGroup3", "XXX", 60, 17)
+ match MyGroup1 /COFFEE/
+ 2match MyGroup2 /HUMPPA/
+ 3match MyGroup3 /VIM/
+ call clearmatches()
+ call assert_equal([], getmatches())
+
+ " --- Check that "setmatches()" restores a list of matches saved by
+ " --- "getmatches()" without changes. (Matches with equal priority must also
+ " --- remain in the same order.)
+ let m1 = matchadd("MyGroup1", "TODO")
+ let m2 = matchadd("MyGroup2", "FIXME", 42)
+ let m3 = matchadd("MyGroup3", "XXX", 60, 17)
+ match MyGroup1 /COFFEE/
+ 2match MyGroup2 /HUMPPA/
+ 3match MyGroup3 /VIM/
+ let ml = getmatches()
+ call clearmatches()
+ call setmatches(ml)
+ call assert_equal(ml, getmatches())
+ call clearmatches()
+
+ " --- Check that "setmatches()" will not add two matches with the same ID. The
+ " --- expected behaviour (for now) is to add the first match but not the
+ " --- second and to return 0 (even though it is a matter of debate whether
+ " --- this can be considered successful behaviour).
+ let data = [{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1},
+ \ {'group': 'MyGroup2', 'pattern': 'FIXME', 'priority': 10, 'id': 1}]
+ call assert_fails('call setmatches(data)', 'E801:')
+ call assert_equal([data[0]], getmatches())
+ call clearmatches()
+
+ " --- Check that "setmatches()" returns 0 if successful and otherwise -1.
+ " --- (A range of valid and invalid input values are tried out to generate the
+ " --- return values.)
+ call assert_equal(0, setmatches([]))
+ call assert_equal(0, setmatches([{'group': 'MyGroup1', 'pattern': 'TODO', 'priority': 10, 'id': 1}]))
+ call clearmatches()
+ call assert_fails('call setmatches(0)', 'E714:')
+ call assert_fails('call setmatches([0])', 'E474:')
+ call assert_fails("call setmatches([{'wrong key': 'wrong value'}])", 'E474:')
+
+ call setline(1, 'abcdefghijklmnopq')
+ call matchaddpos("MyGroup1", [[1, 5], [1, 8, 3]], 10, 3)
+ 1
+ redraw!
+ let v1 = screenattr(1, 1)
+ let v5 = screenattr(1, 5)
+ let v6 = screenattr(1, 6)
+ let v8 = screenattr(1, 8)
+ let v10 = screenattr(1, 10)
+ let v11 = screenattr(1, 11)
+ call assert_notequal(v1, v5)
+ call assert_equal(v6, v1)
+ call assert_equal(v8, v5)
+ call assert_equal(v10, v5)
+ call assert_equal(v11, v1)
+ call assert_equal([{'group': 'MyGroup1', 'id': 3, 'priority': 10, 'pos1': [1, 5, 1], 'pos2': [1, 8, 3]}], getmatches())
+ call clearmatches()
+
+ "
+ if has('multi_byte')
+ call setline(1, 'abcdΣabcdef')
+ call matchaddpos("MyGroup1", [[1, 4, 2], [1, 9, 2]])
+ 1
+ redraw!
+ let v1 = screenattr(1, 1)
+ let v4 = screenattr(1, 4)
+ let v5 = screenattr(1, 5)
+ let v6 = screenattr(1, 6)
+ let v7 = screenattr(1, 7)
+ let v8 = screenattr(1, 8)
+ let v9 = screenattr(1, 9)
+ let v10 = screenattr(1, 10)
+ call assert_equal([{'group': 'MyGroup1', 'id': 11, 'priority': 10, 'pos1': [1, 4, 2], 'pos2': [1, 9, 2]}], getmatches())
+ call assert_notequal(v1, v4)
+ call assert_equal(v5, v4)
+ call assert_equal(v6, v1)
+ call assert_equal(v7, v1)
+ call assert_equal(v8, v4)
+ call assert_equal(v9, v4)
+ call assert_equal(v10, v1)
+
+ " Check, that setmatches() can correctly restore the matches from matchaddpos()
+ call matchadd('MyGroup1', '\%2lmatchadd')
+ let m=getmatches()
+ call clearmatches()
+ call setmatches(m)
+ call assert_equal([{'group': 'MyGroup1', 'id': 11, 'priority': 10, 'pos1': [1, 4, 2], 'pos2': [1,9, 2]}, {'group': 'MyGroup1', 'pattern': '\%2lmatchadd', 'priority': 10, 'id': 12}], getmatches())
+ endif
+
+ highlight MyGroup1 NONE
+ highlight MyGroup2 NONE
+ highlight MyGroup3 NONE
+endfunc
+
+func Test_matchstrpos()
+ call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing'))
+
+ call assert_equal(['ing', 4, 7], matchstrpos('testing', 'ing', 2))
+
+ call assert_equal(['', -1, -1], matchstrpos('testing', 'ing', 5))
+
+ call assert_equal(['ing', 1, 4, 7], matchstrpos(['vim', 'testing', 'execute'], 'ing'))
+
+ call assert_equal(['', -1, -1, -1], matchstrpos(['vim', 'testing', 'execute'], 'img'))
+endfunc
+
+func Test_matchaddpos()
+ syntax on
+ set hlsearch
+
+ call setline(1, ['12345', 'NP'])
+ call matchaddpos('Error', [[1,2], [1,6], [2,2]])
+ redraw!
+ call assert_notequal(screenattr(2,2), 0)
+ call assert_equal(screenattr(2,2), screenattr(1,2))
+ call assert_notequal(screenattr(2,2), screenattr(1,6))
+ 1
+ call matchadd('Search', 'N\|\n')
+ redraw!
+ call assert_notequal(screenattr(2,1), 0)
+ call assert_equal(screenattr(2,1), screenattr(1,6))
+ exec "norm! i0\<Esc>"
+ redraw!
+ call assert_equal(screenattr(2,2), screenattr(1,6))
+
+ " Check overlapping pos
+ call clearmatches()
+ call setline(1, ['1234567890', 'NH'])
+ call matchaddpos('Error', [[1,1,5], [1,3,5], [2,2]])
+ redraw!
+ call assert_notequal(screenattr(2,2), 0)
+ call assert_equal(screenattr(2,2), screenattr(1,5))
+ call assert_equal(screenattr(2,2), screenattr(1,7))
+ call assert_notequal(screenattr(2,2), screenattr(1,8))
+
+ call clearmatches()
+ call matchaddpos('Error', [[1], [2,2]])
+ redraw!
+ call assert_equal(screenattr(2,2), screenattr(1,1))
+ call assert_equal(screenattr(2,2), screenattr(1,10))
+ call assert_notequal(screenattr(2,2), screenattr(1,11))
+
+ nohl
+ call clearmatches()
+ syntax off
+ set hlsearch&
+endfunc
+
+func Test_matchaddpos_using_negative_priority()
+ set hlsearch
+
+ call clearmatches()
+
+ call setline(1, 'x')
+ let @/='x'
+ redraw!
+ let search_attr = screenattr(1,1)
+
+ let @/=''
+ call matchaddpos('Error', [1], 10)
+ redraw!
+ let error_attr = screenattr(1,1)
+
+ call setline(2, '-1 match priority')
+ call matchaddpos('Error', [2], -1)
+ redraw!
+ let negative_match_priority_attr = screenattr(2,1)
+
+ call assert_notequal(negative_match_priority_attr, search_attr, "Match with negative priority is incorrectly highlighted with Search highlight.")
+ call assert_equal(negative_match_priority_attr, error_attr)
+
+ nohl
+ set hlsearch&
+endfunc
+
+" vim: et ts=2 sw=2
diff --git a/src/nvim/testdir/test_matchadd_conceal.vim b/src/nvim/testdir/test_matchadd_conceal.vim
new file mode 100644
index 0000000000..bc1c28d6e9
--- /dev/null
+++ b/src/nvim/testdir/test_matchadd_conceal.vim
@@ -0,0 +1,262 @@
+" Test for matchadd() and conceal feature
+if !has('conceal')
+ finish
+endif
+
+function! s:screenline(lnum) abort
+ let line = []
+ for c in range(1, winwidth(0))
+ call add(line, nr2char(screenchar(a:lnum, c)))
+ endfor
+ return s:trim(join(line, ''))
+endfunction
+
+function! s:trim(str) abort
+ return matchstr(a:str,'^\s*\zs.\{-}\ze\s*$')
+endfunction
+
+function! Test_simple_matchadd()
+ new
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '# This is a Test'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ')
+ redraw!
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ quit!
+endfunction
+
+function! Test_simple_matchadd_and_conceal()
+ new
+ setlocal concealcursor=n conceallevel=1
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '#XThisXisXaXTest'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
+ redraw!
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ quit!
+endfunction
+
+function! Test_matchadd_and_conceallevel_3()
+ new
+
+ setlocal conceallevel=3
+ " set filetype and :syntax on to change screenattr()
+ setlocal filetype=conf
+ syntax on
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '#ThisisaTest'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'X'})
+ redraw!
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ " more matchadd()
+ " 1234567890123456
+ let expect = '#Thisisa Test'
+
+ call matchadd('ErrorMsg', '\%2l Test', 20, -1, {'conceal': 'X'})
+ redraw!
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2) , screenattr(lnum, 7))
+ call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 10), screenattr(lnum, 12))
+ call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 16))
+ call assert_notequal(screenattr(lnum, 10), screenattr(lnum, 16))
+
+ syntax off
+ quit!
+endfunction
+
+function! Test_default_conceal_char()
+ new
+ setlocal concealcursor=n conceallevel=1
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '# This is a Test'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 10, -1, {})
+ redraw!
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ " 1234567890123456
+ let expect = '#+This+is+a+Test'
+ let listchars_save = &listchars
+ set listchars=conceal:+
+ redraw!
+
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ let &listchars = listchars_save
+ quit!
+endfunction
+
+function! Test_syn_and_match_conceal()
+ new
+ setlocal concealcursor=n conceallevel=1
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '#ZThisZisZaZTest'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
+ syntax match MyConceal /\%2l / conceal containedin=ALL cchar=*
+ redraw!
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ " 1234567890123456
+ let expect = '#*This*is*a*Test'
+ call clearmatches()
+ redraw!
+
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ syntax off
+ quit!
+endfunction
+
+function! Test_clearmatches()
+ new
+ setlocal concealcursor=n conceallevel=1
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '# This is a Test'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 10, -1, {'conceal': 'Z'})
+ let a = getmatches()
+ call clearmatches()
+ redraw!
+
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ " reset match using setmatches()
+ " 1234567890123456
+ let expect = '#ZThisZisZaZTest'
+ call setmatches(a)
+ redraw!
+
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+ call assert_equal({'group': 'Conceal', 'pattern': '\%2l ', 'priority': 10, 'id': a[0].id, 'conceal': 'Z'}, a[0])
+
+ quit!
+endfunction
+
+function! Test_using_matchaddpos()
+ new
+ setlocal concealcursor=n conceallevel=1
+ " set filetype and :syntax on to change screenattr()
+ setlocal filetype=conf
+ syntax on
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '#Pis a Test'
+
+ call cursor(1, 1)
+ call matchaddpos('Conceal', [[2,2,6]], 10, -1, {'conceal': 'P'})
+ let a = getmatches()
+ redraw!
+
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 2))
+ call assert_notequal(screenattr(lnum, 2) , screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 1) , screenattr(lnum, 10))
+ call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 12))
+ call assert_notequal(screenattr(lnum, 1) , screenattr(lnum, 16))
+ call assert_equal(screenattr(lnum, 12), screenattr(lnum, 16))
+ call assert_equal({'group': 'Conceal', 'id': a[0].id, 'priority': 10, 'pos1': [2, 2, 6], 'conceal': 'P'}, a[0])
+
+ syntax off
+ quit!
+endfunction
+
+function! Test_matchadd_repeat_conceal_with_syntax_off()
+ new
+
+ " To test targets in the same line string is replaced with conceal char
+ " correctly, repeat 'TARGET'
+ 1put ='TARGET_TARGETTARGET'
+ call cursor(1, 1)
+ redraw
+ call assert_equal('TARGET_TARGETTARGET', s:screenline(2))
+
+ setlocal conceallevel=2
+ call matchadd('Conceal', 'TARGET', 10, -1, {'conceal': 't'})
+
+ redraw
+ call assert_equal('t_tt', s:screenline(2))
+
+ quit!
+endfunction
diff --git a/src/nvim/testdir/test_matchadd_conceal_utf8.vim b/src/nvim/testdir/test_matchadd_conceal_utf8.vim
new file mode 100644
index 0000000000..24c848a99c
--- /dev/null
+++ b/src/nvim/testdir/test_matchadd_conceal_utf8.vim
@@ -0,0 +1,39 @@
+" Test for matchadd() and conceal feature using utf-8.
+if !has('conceal') || !has('multi_byte')
+ finish
+endif
+
+function! s:screenline(lnum) abort
+ let line = []
+ for c in range(1, winwidth(0))
+ call add(line, nr2char(screenchar(a:lnum, c)))
+ endfor
+ return s:trim(join(line, ''))
+endfunction
+
+function! s:trim(str) abort
+ return matchstr(a:str,'^\s*\zs.\{-}\ze\s*$')
+endfunction
+
+function! Test_match_using_multibyte_conceal_char()
+ new
+ setlocal concealcursor=n conceallevel=1
+
+ 1put='# This is a Test'
+ " 1234567890123456
+ let expect = '#ˑThisˑisˑaˑTest'
+
+ call cursor(1, 1)
+ call matchadd('Conceal', '\%2l ', 20, -1, {'conceal': "\u02d1"})
+ redraw!
+
+ let lnum = 2
+ call assert_equal(expect, s:screenline(lnum))
+ call assert_notequal(screenattr(lnum, 1), screenattr(lnum, 2))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 7))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 10))
+ call assert_equal(screenattr(lnum, 2), screenattr(lnum, 12))
+ call assert_equal(screenattr(lnum, 1), screenattr(lnum, 16))
+
+ quit!
+endfunction
diff --git a/src/nvim/testdir/test_messages.vim b/src/nvim/testdir/test_messages.vim
new file mode 100644
index 0000000000..188406e440
--- /dev/null
+++ b/src/nvim/testdir/test_messages.vim
@@ -0,0 +1,40 @@
+" Tests for :messages
+
+function Test_messages()
+ let oldmore = &more
+ try
+ set nomore
+ " Avoid the "message maintainer" line.
+ let $LANG = ''
+
+ let arr = map(range(10), '"hello" . v:val')
+ for s in arr
+ echomsg s | redraw
+ endfor
+ let result = ''
+
+ " get last two messages
+ redir => result
+ 2messages | redraw
+ redir END
+ let msg_list = split(result, "\n")
+ call assert_equal(["hello8", "hello9"], msg_list)
+
+ " clear messages without last one
+ 1messages clear
+ redir => result
+ redraw | messages
+ redir END
+ let msg_list = split(result, "\n")
+ call assert_equal(['hello9'], msg_list)
+
+ " clear all messages
+ messages clear
+ redir => result
+ redraw | messages
+ redir END
+ call assert_equal('', result)
+ finally
+ let &more = oldmore
+ endtry
+endfunction
diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim
new file mode 100644
index 0000000000..5ee0919e18
--- /dev/null
+++ b/src/nvim/testdir/test_options.vim
@@ -0,0 +1,99 @@
+" Test for options
+
+function! Test_whichwrap()
+ set whichwrap=b,s
+ call assert_equal('b,s', &whichwrap)
+
+ set whichwrap+=h,l
+ call assert_equal('b,s,h,l', &whichwrap)
+
+ set whichwrap+=h,l
+ call assert_equal('b,s,h,l', &whichwrap)
+
+ set whichwrap+=h,l
+ call assert_equal('b,s,h,l', &whichwrap)
+
+ set whichwrap&
+endfunction
+
+function! Test_options()
+ let caught = 'ok'
+ try
+ options
+ catch
+ let caught = v:throwpoint . "\n" . v:exception
+ endtry
+ call assert_equal('ok', caught)
+
+ " close option-window
+ close
+endfunction
+
+function! Test_path_keep_commas()
+ " Test that changing 'path' keeps two commas.
+ set path=foo,,bar
+ set path-=bar
+ set path+=bar
+ call assert_equal('foo,,bar', &path)
+
+ set path&
+endfunction
+
+func Test_filetype_valid()
+ if !has('autocmd')
+ return
+ endif
+ set ft=valid_name
+ call assert_equal("valid_name", &filetype)
+ set ft=valid-name
+ call assert_equal("valid-name", &filetype)
+
+ call assert_fails(":set ft=wrong;name", "E474:")
+ call assert_fails(":set ft=wrong\\\\name", "E474:")
+ call assert_fails(":set ft=wrong\\|name", "E474:")
+ call assert_fails(":set ft=wrong/name", "E474:")
+ call assert_fails(":set ft=wrong\\\nname", "E474:")
+ call assert_equal("valid-name", &filetype)
+
+ exe "set ft=trunc\x00name"
+ call assert_equal("trunc", &filetype)
+endfunc
+
+func Test_syntax_valid()
+ if !has('syntax')
+ return
+ endif
+ set syn=valid_name
+ call assert_equal("valid_name", &syntax)
+ set syn=valid-name
+ call assert_equal("valid-name", &syntax)
+
+ call assert_fails(":set syn=wrong;name", "E474:")
+ call assert_fails(":set syn=wrong\\\\name", "E474:")
+ call assert_fails(":set syn=wrong\\|name", "E474:")
+ call assert_fails(":set syn=wrong/name", "E474:")
+ call assert_fails(":set syn=wrong\\\nname", "E474:")
+ call assert_equal("valid-name", &syntax)
+
+ exe "set syn=trunc\x00name"
+ call assert_equal("trunc", &syntax)
+endfunc
+
+func Test_keymap_valid()
+ if !has('keymap')
+ return
+ endif
+ call assert_fails(":set kmp=valid_name", "E544:")
+ call assert_fails(":set kmp=valid_name", "valid_name")
+ call assert_fails(":set kmp=valid-name", "E544:")
+ call assert_fails(":set kmp=valid-name", "valid-name")
+
+ call assert_fails(":set kmp=wrong;name", "E474:")
+ call assert_fails(":set kmp=wrong\\\\name", "E474:")
+ call assert_fails(":set kmp=wrong\\|name", "E474:")
+ call assert_fails(":set kmp=wrong/name", "E474:")
+ call assert_fails(":set kmp=wrong\\\nname", "E474:")
+
+ call assert_fails(":set kmp=trunc\x00name", "E544:")
+ call assert_fails(":set kmp=trunc\x00name", "trunc")
+endfunc
diff --git a/src/nvim/testdir/test_partial.vim b/src/nvim/testdir/test_partial.vim
new file mode 100644
index 0000000000..3a6e162453
--- /dev/null
+++ b/src/nvim/testdir/test_partial.vim
@@ -0,0 +1,330 @@
+" Test binding arguments to a Funcref.
+
+func MyFunc(arg1, arg2, arg3)
+ return a:arg1 . '/' . a:arg2 . '/' . a:arg3
+endfunc
+
+func MySort(up, one, two)
+ if a:one == a:two
+ return 0
+ endif
+ if a:up
+ return a:one > a:two ? 1 : -1
+ endif
+ return a:one < a:two ? 1 : -1
+endfunc
+
+func Test_partial_args()
+ let Cb = function('MyFunc', ["foo", "bar"])
+
+ call Cb("zzz")
+ call assert_equal("foo/bar/xxx", Cb("xxx"))
+ call assert_equal("foo/bar/yyy", call(Cb, ["yyy"]))
+ let Cb2 = function(Cb)
+ call assert_equal("foo/bar/zzz", Cb2("zzz"))
+ let Cb3 = function(Cb, ["www"])
+ call assert_equal("foo/bar/www", Cb3())
+
+ let Cb = function('MyFunc', [])
+ call assert_equal("a/b/c", Cb("a", "b", "c"))
+ let Cb2 = function(Cb, [])
+ call assert_equal("a/b/d", Cb2("a", "b", "d"))
+ let Cb3 = function(Cb, ["a", "b"])
+ call assert_equal("a/b/e", Cb3("e"))
+
+ let Sort = function('MySort', [1])
+ call assert_equal([1, 2, 3], sort([3, 1, 2], Sort))
+ let Sort = function('MySort', [0])
+ call assert_equal([3, 2, 1], sort([3, 1, 2], Sort))
+endfunc
+
+func MyDictFunc(arg1, arg2) dict
+ return self.name . '/' . a:arg1 . '/' . a:arg2
+endfunc
+
+func Test_partial_dict()
+ let dict = {'name': 'hello'}
+ let Cb = function('MyDictFunc', ["foo", "bar"], dict)
+ call assert_equal("hello/foo/bar", Cb())
+ call assert_fails('Cb("xxx")', 'E492:')
+
+ let Cb = function('MyDictFunc', [], dict)
+ call assert_equal("hello/ttt/xxx", Cb("ttt", "xxx"))
+ call assert_fails('Cb("yyy")', 'E492:')
+
+ let Cb = function('MyDictFunc', ["foo"], dict)
+ call assert_equal("hello/foo/xxx", Cb("xxx"))
+ call assert_fails('Cb()', 'E492:')
+ let Cb = function('MyDictFunc', dict)
+ call assert_equal("hello/xxx/yyy", Cb("xxx", "yyy"))
+ call assert_fails('Cb("fff")', 'E492:')
+
+ let dict = {"tr": function('tr', ['hello', 'h', 'H'])}
+ call assert_equal("Hello", dict.tr())
+endfunc
+
+func Test_partial_implicit()
+ let dict = {'name': 'foo'}
+ func dict.MyFunc(arg) dict
+ return self.name . '/' . a:arg
+ endfunc
+
+ call assert_equal('foo/bar', dict.MyFunc('bar'))
+
+ call assert_fails('let func = dict.MyFunc', 'E704:')
+ let Func = dict.MyFunc
+ call assert_equal('foo/aaa', Func('aaa'))
+
+ let Func = function(dict.MyFunc, ['bbb'])
+ call assert_equal('foo/bbb', Func())
+endfunc
+
+fun InnerCall(funcref)
+ return a:funcref
+endfu
+
+fun OuterCall()
+ let opt = { 'func' : function('sin') }
+ call InnerCall(opt.func)
+endfu
+
+func Test_function_in_dict()
+ call OuterCall()
+endfunc
+
+function! s:cache_clear() dict
+ return self.name
+endfunction
+
+func Test_script_function_in_dict()
+ let s:obj = {'name': 'foo'}
+ let s:obj2 = {'name': 'bar'}
+
+ let s:obj['clear'] = function('s:cache_clear')
+
+ call assert_equal('foo', s:obj.clear())
+ let F = s:obj.clear
+ call assert_equal('foo', F())
+ call assert_equal('foo', call(s:obj.clear, [], s:obj))
+ call assert_equal('bar', call(s:obj.clear, [], s:obj2))
+
+ let s:obj2['clear'] = function('s:cache_clear')
+ call assert_equal('bar', s:obj2.clear())
+ let B = s:obj2.clear
+ call assert_equal('bar', B())
+endfunc
+
+function! s:cache_arg(arg) dict
+ let s:result = self.name . '/' . a:arg
+ return s:result
+endfunction
+
+func Test_script_function_in_dict_arg()
+ let s:obj = {'name': 'foo'}
+ let s:obj['clear'] = function('s:cache_arg')
+
+ call assert_equal('foo/bar', s:obj.clear('bar'))
+ let F = s:obj.clear
+ let s:result = ''
+ call assert_equal('foo/bar', F('bar'))
+ call assert_equal('foo/bar', s:result)
+
+ let s:obj['clear'] = function('s:cache_arg', ['bar'])
+ call assert_equal('foo/bar', s:obj.clear())
+ let s:result = ''
+ call s:obj.clear()
+ call assert_equal('foo/bar', s:result)
+
+ let F = s:obj.clear
+ call assert_equal('foo/bar', F())
+ let s:result = ''
+ call F()
+ call assert_equal('foo/bar', s:result)
+
+ call assert_equal('foo/bar', call(s:obj.clear, [], s:obj))
+endfunc
+
+func Test_partial_exists()
+ let F = function('MyFunc')
+ call assert_true(exists('*F'))
+ let lF = [F]
+ call assert_true(exists('*lF[0]'))
+
+ let F = function('MyFunc', ['arg'])
+ call assert_true(exists('*F'))
+ let lF = [F]
+ call assert_true(exists('*lF[0]'))
+endfunc
+
+func Test_partial_string()
+ let F = function('MyFunc')
+ call assert_equal("function('MyFunc')", string(F))
+ let F = function('MyFunc', ['foo'])
+ call assert_equal("function('MyFunc', ['foo'])", string(F))
+ let F = function('MyFunc', ['foo', 'bar'])
+ call assert_equal("function('MyFunc', ['foo', 'bar'])", string(F))
+ let d = {'one': 1}
+ let F = function('MyFunc', d)
+ call assert_equal("function('MyFunc', {'one': 1})", string(F))
+ let F = function('MyFunc', ['foo'], d)
+ call assert_equal("function('MyFunc', ['foo'], {'one': 1})", string(F))
+endfunc
+
+func Test_func_unref()
+ let obj = {}
+ function! obj.func() abort
+ endfunction
+ let funcnumber = matchstr(string(obj.func), '^function(''\zs.\{-}\ze''')
+ call assert_true(exists('*{' . funcnumber . '}'))
+ unlet obj
+ call assert_false(exists('*{' . funcnumber . '}'))
+endfunc
+
+func Test_redefine_dict_func()
+ let d = {}
+ function d.test4()
+ endfunction
+ let d.test4 = d.test4
+ try
+ function! d.test4(name)
+ endfunction
+ catch
+ call assert_true(v:errmsg, v:exception)
+ endtry
+endfunc
+
+" This caused double free on exit if EXITFREE is defined.
+func Test_cyclic_list_arg()
+ let l = []
+ let Pt = function('string', [l])
+ call add(l, Pt)
+ unlet l
+ unlet Pt
+endfunc
+
+" This caused double free on exit if EXITFREE is defined.
+func Test_cyclic_dict_arg()
+ let d = {}
+ let Pt = function('string', [d])
+ let d.Pt = Pt
+ unlet d
+ unlet Pt
+endfunc
+
+func Ignored(job1, job2, status)
+endfunc
+
+" func Test_cycle_partial_job()
+" let job = job_start('echo')
+" call job_setoptions(job, {'exit_cb': function('Ignored', [job])})
+" unlet job
+" endfunc
+
+" func Test_ref_job_partial_dict()
+" let g:ref_job = job_start('echo')
+" let d = {'a': 'b'}
+" call job_setoptions(g:ref_job, {'exit_cb': function('string', [], d)})
+" endfunc
+
+func Test_auto_partial_rebind()
+ let dict1 = {'name': 'dict1'}
+ func! dict1.f1()
+ return self.name
+ endfunc
+ let dict1.f2 = function(dict1.f1, dict1)
+
+ call assert_equal('dict1', dict1.f1())
+ call assert_equal('dict1', dict1['f1']())
+ call assert_equal('dict1', dict1.f2())
+ call assert_equal('dict1', dict1['f2']())
+
+ let dict2 = {'name': 'dict2'}
+ let dict2.f1 = dict1.f1
+ let dict2.f2 = dict1.f2
+
+ call assert_equal('dict2', dict2.f1())
+ call assert_equal('dict2', dict2['f1']())
+ call assert_equal('dict1', dict2.f2())
+ call assert_equal('dict1', dict2['f2']())
+endfunc
+
+func Test_get_partial_items()
+ let dict = {'name': 'hello'}
+ let args = ["foo", "bar"]
+ let Func = function('MyDictFunc')
+ let Cb = function('MyDictFunc', args, dict)
+
+ call assert_equal(Func, get(Cb, 'func'))
+ call assert_equal('MyDictFunc', get(Cb, 'name'))
+ call assert_equal(args, get(Cb, 'args'))
+ call assert_equal(dict, get(Cb, 'dict'))
+ call assert_fails('call get(Cb, "xxx")', 'E475:')
+
+ call assert_equal(Func, get(Func, 'func'))
+ call assert_equal('MyDictFunc', get(Func, 'name'))
+ call assert_equal([], get(Func, 'args'))
+ call assert_true(empty( get(Func, 'dict')))
+endfunc
+
+func Test_compare_partials()
+ let d1 = {}
+ let d2 = {}
+
+ function d1.f1() dict
+ endfunction
+
+ function d1.f2() dict
+ endfunction
+
+ let F1 = get(d1, 'f1')
+ let F2 = get(d1, 'f2')
+
+ let F1d1 = function(F1, d1)
+ let F2d1 = function(F2, d2)
+ let F1d1a1 = function(F1d1, [1])
+ let F1d1a12 = function(F1d1, [1, 2])
+ let F1a1 = function(F1, [1])
+ let F1a2 = function(F1, [2])
+ let F1d2 = function(F1, d2)
+ let d3 = {'f1': F1, 'f2': F2}
+ let F1d3 = function(F1, d3)
+ let F1ad1 = function(F1, [d1])
+ let F1ad3 = function(F1, [d3])
+
+ call assert_match('^function(''\d\+'')$', string(F1)) " Not a partial
+ call assert_match('^function(''\d\+'')$', string(F2)) " Not a partial
+ call assert_match('^function(''\d\+'', {.*})$', string(F1d1)) " A partial
+ call assert_match('^function(''\d\+'', {.*})$', string(F2d1)) " A partial
+ call assert_match('^function(''\d\+'', \[.*\])$', string(F1a1)) " No dict
+
+ " !=
+ let X = F1
+ call assert_false(F1 != X) " same function
+ let X = F1d1
+ call assert_false(F1d1 != X) " same partial
+ let X = F1d1a1
+ call assert_false(F1d1a1 != X) " same partial
+ let X = F1a1
+ call assert_false(F1a1 != X) " same partial
+
+ call assert_true(F1 != F2) " Different functions
+ call assert_true(F1 != F1d1) " Partial /= non-partial
+ call assert_true(F1d1a1 != F1d1a12) " Different number of arguments
+ call assert_true(F1a1 != F1d1a12) " One has no dict
+ call assert_true(F1a1 != F1a2) " Different arguments
+ call assert_true(F1d2 != F1d1) " Different dictionaries
+ call assert_false(F1d1 != F1d3) " Equal dictionaries, even though d1 isnot d3
+
+ " isnot, option 1
+ call assert_true(F1 isnot# F2) " Different functions
+ call assert_true(F1 isnot# F1d1) " Partial /= non-partial
+ call assert_true(F1d1 isnot# F1d3) " d1 isnot d3, even though d1 == d3
+ call assert_true(F1a1 isnot# F1d1a12) " One has no dict
+ call assert_true(F1a1 isnot# F1a2) " Different number of arguments
+ call assert_true(F1ad1 isnot# F1ad3) " In arguments d1 isnot d3
+
+ " isnot, option 2
+ call assert_true(F1 isnot# F2) " Different functions
+ call assert_true(F1 isnot# F1d1) " Partial /= non-partial
+ call assert_true(d1.f1 isnot# d1.f1) " handle_subscript creates new partial each time
+endfunc
diff --git a/src/nvim/testdir/test_popup.vim b/src/nvim/testdir/test_popup.vim
new file mode 100644
index 0000000000..50110dd622
--- /dev/null
+++ b/src/nvim/testdir/test_popup.vim
@@ -0,0 +1,485 @@
+" Test for completion menu
+
+let g:months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
+let g:setting = ''
+
+func! ListMonths()
+ if g:setting != ''
+ exe ":set" g:setting
+ endif
+ let mth=copy(g:months)
+ let entered = strcharpart(getline('.'),0,col('.'))
+ if !empty(entered)
+ let mth=filter(mth, 'v:val=~"^".entered')
+ endif
+ call complete(1, mth)
+ return ''
+endfunc
+
+func! Test_popup_complete2()
+ " Although the popupmenu is not visible, this does not mean completion mode
+ " has ended. After pressing <f5> to complete the currently typed char, Vim
+ " still stays in the first state of the completion (:h ins-completion-menu),
+ " although the popupmenu wasn't shown <c-e> will remove the inserted
+ " completed text (:h complete_CTRL-E), while the following <c-e> will behave
+ " like expected (:h i_CTRL-E)
+ new
+ inoremap <f5> <c-r>=ListMonths()<cr>
+ call append(1, ["December2015"])
+ :1
+ call feedkeys("aD\<f5>\<C-E>\<C-E>\<C-E>\<C-E>\<enter>\<esc>", 'tx')
+ call assert_equal(["Dece", "", "December2015"], getline(1,3))
+ %d
+ bw!
+endfu
+
+func! Test_popup_complete()
+ new
+ inoremap <f5> <c-r>=ListMonths()<cr>
+
+ " <C-E> - select original typed text before the completion started
+ call feedkeys("aJu\<f5>\<down>\<c-e>\<esc>", 'tx')
+ call assert_equal(["Ju"], getline(1,2))
+ %d
+
+ " <C-Y> - accept current match
+ call feedkeys("a\<f5>". repeat("\<down>",7). "\<c-y>\<esc>", 'tx')
+ call assert_equal(["August"], getline(1,2))
+ %d
+
+ " <BS> - Delete one character from the inserted text (state: 1)
+ " TODO: This should not end the completion, but it does.
+ " This should according to the documentation:
+ " January
+ " but instead, this does
+ " Januar
+ " (idea is, C-L inserts the match from the popup menu
+ " but if the menu is closed, it will insert the character <c-l>
+ call feedkeys("aJ\<f5>\<bs>\<c-l>\<esc>", 'tx')
+ call assert_equal(["Januar "], getline(1,2))
+ %d
+
+ " any-non special character: Stop completion without changing the match
+ " and insert the typed character
+ call feedkeys("a\<f5>20", 'tx')
+ call assert_equal(["January20"], getline(1,2))
+ %d
+
+ " any-non printable, non-white character: Add this character and
+ " reduce number of matches
+ call feedkeys("aJu\<f5>\<c-p>l\<c-y>", 'tx')
+ call assert_equal(["Jul"], getline(1,2))
+ %d
+
+ " any-non printable, non-white character: Add this character and
+ " reduce number of matches
+ call feedkeys("aJu\<f5>\<c-p>l\<c-n>\<c-y>", 'tx')
+ call assert_equal(["July"], getline(1,2))
+ %d
+
+ " any-non printable, non-white character: Add this character and
+ " reduce number of matches
+ call feedkeys("aJu\<f5>\<c-p>l\<c-e>", 'tx')
+ call assert_equal(["Jul"], getline(1,2))
+ %d
+
+ " <BS> - Delete one character from the inserted text (state: 2)
+ call feedkeys("a\<f5>\<c-n>\<bs>", 'tx')
+ call assert_equal(["Februar"], getline(1,2))
+ %d
+
+ " <c-l> - Insert one character from the current match
+ call feedkeys("aJ\<f5>".repeat("\<c-n>",3)."\<c-l>\<esc>", 'tx')
+ call assert_equal(["J "], getline(1,2))
+ %d
+
+ " <c-l> - Insert one character from the current match
+ call feedkeys("aJ\<f5>".repeat("\<c-n>",4)."\<c-l>\<esc>", 'tx')
+ call assert_equal(["January "], getline(1,2))
+ %d
+
+ " <c-y> - Accept current selected match
+ call feedkeys("aJ\<f5>\<c-y>\<esc>", 'tx')
+ call assert_equal(["January"], getline(1,2))
+ %d
+
+ " <c-e> - End completion, go back to what was there before selecting a match
+ call feedkeys("aJu\<f5>\<c-e>\<esc>", 'tx')
+ call assert_equal(["Ju"], getline(1,2))
+ %d
+
+ " <PageUp> - Select a match several entries back
+ call feedkeys("a\<f5>\<PageUp>\<c-y>\<esc>", 'tx')
+ call assert_equal([""], getline(1,2))
+ %d
+
+ " <PageUp><PageUp> - Select a match several entries back
+ call feedkeys("a\<f5>\<PageUp>\<PageUp>\<c-y>\<esc>", 'tx')
+ call assert_equal(["December"], getline(1,2))
+ %d
+
+ " <PageUp><PageUp><PageUp> - Select a match several entries back
+ call feedkeys("a\<f5>\<PageUp>\<PageUp>\<PageUp>\<c-y>\<esc>", 'tx')
+ call assert_equal(["February"], getline(1,2))
+ %d
+
+ " <PageDown> - Select a match several entries further
+ call feedkeys("a\<f5>\<PageDown>\<c-y>\<esc>", 'tx')
+ call assert_equal(["November"], getline(1,2))
+ %d
+
+ " <PageDown><PageDown> - Select a match several entries further
+ call feedkeys("a\<f5>\<PageDown>\<PageDown>\<c-y>\<esc>", 'tx')
+ call assert_equal(["December"], getline(1,2))
+ %d
+
+ " <PageDown><PageDown><PageDown> - Select a match several entries further
+ call feedkeys("a\<f5>\<PageDown>\<PageDown>\<PageDown>\<c-y>\<esc>", 'tx')
+ call assert_equal([""], getline(1,2))
+ %d
+
+ " <PageDown><PageDown><PageDown><PageDown> - Select a match several entries further
+ call feedkeys("a\<f5>".repeat("\<PageDown>",4)."\<c-y>\<esc>", 'tx')
+ call assert_equal(["October"], getline(1,2))
+ %d
+
+ " <Up> - Select a match don't insert yet
+ call feedkeys("a\<f5>\<Up>\<c-y>\<esc>", 'tx')
+ call assert_equal([""], getline(1,2))
+ %d
+
+ " <Up><Up> - Select a match don't insert yet
+ call feedkeys("a\<f5>\<Up>\<Up>\<c-y>\<esc>", 'tx')
+ call assert_equal(["December"], getline(1,2))
+ %d
+
+ " <Up><Up><Up> - Select a match don't insert yet
+ call feedkeys("a\<f5>\<Up>\<Up>\<Up>\<c-y>\<esc>", 'tx')
+ call assert_equal(["November"], getline(1,2))
+ %d
+
+ " <Tab> - Stop completion and insert the match
+ call feedkeys("a\<f5>\<Tab>\<c-y>\<esc>", 'tx')
+ call assert_equal(["January "], getline(1,2))
+ %d
+
+ " <Space> - Stop completion and insert the match
+ call feedkeys("a\<f5>".repeat("\<c-p>",5)." \<esc>", 'tx')
+ call assert_equal(["September "], getline(1,2))
+ %d
+
+ " <Enter> - Use the text and insert line break (state: 1)
+ call feedkeys("a\<f5>\<enter>\<esc>", 'tx')
+ call assert_equal(["January", ''], getline(1,2))
+ %d
+
+ " <Enter> - Insert the current selected text (state: 2)
+ call feedkeys("a\<f5>".repeat("\<Up>",5)."\<enter>\<esc>", 'tx')
+ call assert_equal(["September"], getline(1,2))
+ %d
+
+ " Insert match immediately, if there is only one match
+ " <c-y> selects a character from the line above
+ call append(0, ["December2015"])
+ call feedkeys("aD\<f5>\<C-Y>\<C-Y>\<C-Y>\<C-Y>\<enter>\<esc>", 'tx')
+ call assert_equal(["December2015", "December2015", ""], getline(1,3))
+ %d
+
+ " use menuone for 'completeopt'
+ " Since for the first <c-y> the menu is still shown, will only select
+ " three letters from the line above
+ set completeopt&vim
+ set completeopt+=menuone
+ call append(0, ["December2015"])
+ call feedkeys("aD\<f5>\<C-Y>\<C-Y>\<C-Y>\<C-Y>\<enter>\<esc>", 'tx')
+ call assert_equal(["December2015", "December201", ""], getline(1,3))
+ %d
+
+ " use longest for 'completeopt'
+ set completeopt&vim
+ call feedkeys("aM\<f5>\<C-N>\<C-P>\<c-e>\<enter>\<esc>", 'tx')
+ set completeopt+=longest
+ call feedkeys("aM\<f5>\<C-N>\<C-P>\<c-e>\<enter>\<esc>", 'tx')
+ call assert_equal(["M", "Ma", ""], getline(1,3))
+ %d
+
+ " use noselect/noinsert for 'completeopt'
+ set completeopt&vim
+ call feedkeys("aM\<f5>\<enter>\<esc>", 'tx')
+ set completeopt+=noselect
+ call feedkeys("aM\<f5>\<enter>\<esc>", 'tx')
+ set completeopt-=noselect completeopt+=noinsert
+ call feedkeys("aM\<f5>\<enter>\<esc>", 'tx')
+ call assert_equal(["March", "M", "March"], getline(1,4))
+ %d
+endfu
+
+
+func! Test_popup_completion_insertmode()
+ new
+ inoremap <F5> <C-R>=ListMonths()<CR>
+
+ call feedkeys("a\<f5>\<down>\<enter>\<esc>", 'tx')
+ call assert_equal('February', getline(1))
+ %d
+ " Set noinsertmode
+ let g:setting = 'noinsertmode'
+ call feedkeys("a\<f5>\<down>\<enter>\<esc>", 'tx')
+ call assert_equal('February', getline(1))
+ call assert_false(pumvisible())
+ %d
+ " Go through all matches, until none is selected
+ let g:setting = ''
+ call feedkeys("a\<f5>". repeat("\<c-n>",12)."\<enter>\<esc>", 'tx')
+ call assert_equal('', getline(1))
+ %d
+ " select previous entry
+ call feedkeys("a\<f5>\<c-p>\<enter>\<esc>", 'tx')
+ call assert_equal('', getline(1))
+ %d
+ " select last entry
+ call feedkeys("a\<f5>\<c-p>\<c-p>\<enter>\<esc>", 'tx')
+ call assert_equal('December', getline(1))
+
+ iunmap <F5>
+endfunc
+
+func Test_noinsert_complete()
+ function! s:complTest1() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+ endfunction
+
+ function! s:complTest2() abort
+ call complete(1, ['source', 'soundfold'])
+ return ''
+ endfunction
+
+ new
+ set completeopt+=noinsert
+ inoremap <F5> <C-R>=s:complTest1()<CR>
+ call feedkeys("i\<F5>soun\<CR>\<CR>\<ESC>.", 'tx')
+ call assert_equal('soundfold', getline(1))
+ call assert_equal('soundfold', getline(2))
+ bwipe!
+
+ new
+ inoremap <F5> <C-R>=s:complTest2()<CR>
+ call feedkeys("i\<F5>\<CR>\<ESC>", 'tx')
+ call assert_equal('source', getline(1))
+ bwipe!
+
+ set completeopt-=noinsert
+ iunmap <F5>
+endfunc
+
+func Test_compl_vim_cmds_after_register_expr()
+ function! s:test_func()
+ return 'autocmd '
+ endfunction
+ augroup AAAAA_Group
+ au!
+ augroup END
+
+ new
+ call feedkeys("i\<c-r>=s:test_func()\<CR>\<C-x>\<C-v>\<Esc>", 'tx')
+ call assert_equal('autocmd AAAAA_Group', getline(1))
+ autocmd! AAAAA_Group
+ augroup! AAAAA_Group
+ bwipe!
+endfunc
+
+func DummyCompleteOne(findstart, base)
+ if a:findstart
+ return 0
+ else
+ wincmd n
+ return ['onedef', 'oneDEF']
+ endif
+endfunc
+
+" Test that nothing happens if the 'completefunc' opens
+" a new window (no completion, no crash)
+func Test_completefunc_opens_new_window_one()
+ new
+ let winid = win_getid()
+ setlocal completefunc=DummyCompleteOne
+ call setline(1, 'one')
+ /^one
+ call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E839:')
+ call assert_notequal(winid, win_getid())
+ q!
+ call assert_equal(winid, win_getid())
+ call assert_equal('', getline(1))
+ q!
+endfunc
+
+" Test that nothing happens if the 'completefunc' opens
+" a new window (no completion, no crash)
+func DummyCompleteTwo(findstart, base)
+ if a:findstart
+ wincmd n
+ return 0
+ else
+ return ['twodef', 'twoDEF']
+ endif
+endfunction
+
+" Test that nothing happens if the 'completefunc' opens
+" a new window (no completion, no crash)
+func Test_completefunc_opens_new_window_two()
+ new
+ let winid = win_getid()
+ setlocal completefunc=DummyCompleteTwo
+ call setline(1, 'two')
+ /^two
+ call assert_fails('call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")', 'E764:')
+ call assert_notequal(winid, win_getid())
+ q!
+ call assert_equal(winid, win_getid())
+ call assert_equal('two', getline(1))
+ q!
+endfunc
+
+func DummyCompleteThree(findstart, base)
+ if a:findstart
+ return 0
+ else
+ return ['threedef', 'threeDEF']
+ endif
+endfunc
+
+:"Test that 'completefunc' works when it's OK.
+func Test_completefunc_works()
+ new
+ let winid = win_getid()
+ setlocal completefunc=DummyCompleteThree
+ call setline(1, 'three')
+ /^three
+ call feedkeys("A\<C-X>\<C-U>\<C-N>\<Esc>", "x")
+ call assert_equal(winid, win_getid())
+ call assert_equal('threeDEF', getline(1))
+ q!
+endfunc
+
+func DummyCompleteFour(findstart, base)
+ if a:findstart
+ return 0
+ else
+ call complete_add('four1')
+ call complete_add('four2')
+ call complete_check()
+ call complete_add('four3')
+ call complete_add('four4')
+ call complete_check()
+ call complete_add('four5')
+ call complete_add('four6')
+ return []
+ endif
+endfunc
+
+" Test that 'omnifunc' works when it's OK.
+func Test_omnifunc_with_check()
+ new
+ setlocal omnifunc=DummyCompleteFour
+ call setline(1, 'four')
+ /^four
+ call feedkeys("A\<C-X>\<C-O>\<C-N>\<Esc>", "x")
+ call assert_equal('four2', getline(1))
+
+ call setline(1, 'four')
+ /^four
+ call feedkeys("A\<C-X>\<C-O>\<C-N>\<C-N>\<Esc>", "x")
+ call assert_equal('four3', getline(1))
+
+ call setline(1, 'four')
+ /^four
+ call feedkeys("A\<C-X>\<C-O>\<C-N>\<C-N>\<C-N>\<C-N>\<Esc>", "x")
+ call assert_equal('four5', getline(1))
+
+ q!
+endfunc
+
+function UndoComplete()
+ call complete(1, ['January', 'February', 'March',
+ \ 'April', 'May', 'June', 'July', 'August', 'September',
+ \ 'October', 'November', 'December'])
+ return ''
+endfunc
+
+" Test that no undo item is created when no completion is inserted
+func Test_complete_no_undo()
+ set completeopt=menu,preview,noinsert,noselect
+ inoremap <Right> <C-R>=UndoComplete()<CR>
+ new
+ call feedkeys("ixxx\<CR>\<CR>yyy\<Esc>k", 'xt')
+ call feedkeys("iaaa\<Esc>0", 'xt')
+ call assert_equal('aaa', getline(2))
+ call feedkeys("i\<Right>\<Esc>", 'xt')
+ call assert_equal('aaa', getline(2))
+ call feedkeys("u", 'xt')
+ call assert_equal('', getline(2))
+
+ call feedkeys("ibbb\<Esc>0", 'xt')
+ call assert_equal('bbb', getline(2))
+ call feedkeys("A\<Right>\<Down>\<CR>\<Esc>", 'xt')
+ call assert_equal('January', getline(2))
+ call feedkeys("u", 'xt')
+ call assert_equal('bbb', getline(2))
+
+ call feedkeys("A\<Right>\<C-N>\<Esc>", 'xt')
+ call assert_equal('January', getline(2))
+ call feedkeys("u", 'xt')
+ call assert_equal('bbb', getline(2))
+
+ iunmap <Right>
+ set completeopt&
+ q!
+endfunc
+
+function! DummyCompleteFive(findstart, base)
+ if a:findstart
+ return 0
+ else
+ return [
+ \ { 'word': 'January', 'info': "info1-1\n1-2\n1-3" },
+ \ { 'word': 'February', 'info': "info2-1\n2-2\n2-3" },
+ \ { 'word': 'March', 'info': "info3-1\n3-2\n3-3" },
+ \ { 'word': 'April', 'info': "info4-1\n4-2\n4-3" },
+ \ { 'word': 'May', 'info': "info5-1\n5-2\n5-3" },
+ \ ]
+ endif
+endfunc
+
+" Test that 'completefunc' on Scratch buffer with preview window works when
+" it's OK.
+func Test_completefunc_with_scratch_buffer()
+ new +setlocal\ buftype=nofile\ bufhidden=wipe\ noswapfile
+ set completeopt+=preview
+ setlocal completefunc=DummyCompleteFive
+ call feedkeys("A\<C-X>\<C-U>\<C-N>\<C-N>\<C-N>\<Esc>", "x")
+ call assert_equal(['April'], getline(1, '$'))
+ pclose
+ q!
+ set completeopt&
+endfunc
+
+" <C-E> - select original typed text before the completion started without
+" auto-wrap text.
+func Test_completion_ctrl_e_without_autowrap()
+ new
+ let tw_save=&tw
+ set tw=78
+ let li = [
+ \ '" zzz',
+ \ '" zzzyyyyyyyyyyyyyyyyyyy']
+ call setline(1, li)
+ 0
+ call feedkeys("A\<C-X>\<C-N>\<C-E>\<Esc>", "tx")
+ call assert_equal(li, getline(1, '$'))
+
+ let &tw=tw_save
+ q!
+endfunc
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim
new file mode 100644
index 0000000000..7464a11abd
--- /dev/null
+++ b/src/nvim/testdir/test_quickfix.vim
@@ -0,0 +1,1464 @@
+" Test for the quickfix commands.
+
+if !has('quickfix')
+ finish
+endif
+
+set encoding=utf-8
+
+function! s:setup_commands(cchar)
+ if a:cchar == 'c'
+ command! -nargs=* -bang Xlist <mods>clist<bang> <args>
+ command! -nargs=* Xgetexpr <mods>cgetexpr <args>
+ command! -nargs=* Xaddexpr <mods>caddexpr <args>
+ command! -nargs=* Xolder <mods>colder <args>
+ command! -nargs=* Xnewer <mods>cnewer <args>
+ command! -nargs=* Xopen <mods>copen <args>
+ command! -nargs=* Xwindow <mods>cwindow <args>
+ command! -nargs=* Xbottom <mods>cbottom <args>
+ command! -nargs=* Xclose <mods>cclose <args>
+ command! -nargs=* -bang Xfile <mods>cfile<bang> <args>
+ command! -nargs=* Xgetfile <mods>cgetfile <args>
+ command! -nargs=* Xaddfile <mods>caddfile <args>
+ command! -nargs=* -bang Xbuffer <mods>cbuffer<bang> <args>
+ command! -nargs=* Xgetbuffer <mods>cgetbuffer <args>
+ command! -nargs=* Xaddbuffer <mods>caddbuffer <args>
+ command! -nargs=* Xrewind <mods>crewind <args>
+ command! -nargs=* -bang Xnext <mods>cnext<bang> <args>
+ command! -nargs=* -bang Xprev <mods>cprev<bang> <args>
+ command! -nargs=* -bang Xfirst <mods>cfirst<bang> <args>
+ command! -nargs=* -bang Xlast <mods>clast<bang> <args>
+ command! -nargs=* -bang Xnfile <mods>cnfile<bang> <args>
+ command! -nargs=* -bang Xpfile <mods>cpfile<bang> <args>
+ command! -nargs=* Xexpr <mods>cexpr <args>
+ command! -nargs=* Xvimgrep <mods>vimgrep <args>
+ command! -nargs=* Xgrep <mods> grep <args>
+ command! -nargs=* Xgrepadd <mods> grepadd <args>
+ command! -nargs=* Xhelpgrep helpgrep <args>
+ let g:Xgetlist = function('getqflist')
+ let g:Xsetlist = function('setqflist')
+ else
+ command! -nargs=* -bang Xlist <mods>llist<bang> <args>
+ command! -nargs=* Xgetexpr <mods>lgetexpr <args>
+ command! -nargs=* Xaddexpr <mods>laddexpr <args>
+ command! -nargs=* Xolder <mods>lolder <args>
+ command! -nargs=* Xnewer <mods>lnewer <args>
+ command! -nargs=* Xopen <mods>lopen <args>
+ command! -nargs=* Xwindow <mods>lwindow <args>
+ command! -nargs=* Xbottom <mods>lbottom <args>
+ command! -nargs=* Xclose <mods>lclose <args>
+ command! -nargs=* -bang Xfile <mods>lfile<bang> <args>
+ command! -nargs=* Xgetfile <mods>lgetfile <args>
+ command! -nargs=* Xaddfile <mods>laddfile <args>
+ command! -nargs=* -bang Xbuffer <mods>lbuffer<bang> <args>
+ command! -nargs=* Xgetbuffer <mods>lgetbuffer <args>
+ command! -nargs=* Xaddbuffer <mods>laddbuffer <args>
+ command! -nargs=* Xrewind <mods>lrewind <args>
+ command! -nargs=* -bang Xnext <mods>lnext<bang> <args>
+ command! -nargs=* -bang Xprev <mods>lprev<bang> <args>
+ command! -nargs=* -bang Xfirst <mods>lfirst<bang> <args>
+ command! -nargs=* -bang Xlast <mods>llast<bang> <args>
+ command! -nargs=* -bang Xnfile <mods>lnfile<bang> <args>
+ command! -nargs=* -bang Xpfile <mods>lpfile<bang> <args>
+ command! -nargs=* Xexpr <mods>lexpr <args>
+ command! -nargs=* Xvimgrep <mods>lvimgrep <args>
+ command! -nargs=* Xgrep <mods> lgrep <args>
+ command! -nargs=* Xgrepadd <mods> lgrepadd <args>
+ command! -nargs=* Xhelpgrep lhelpgrep <args>
+ let g:Xgetlist = function('getloclist', [0])
+ let g:Xsetlist = function('setloclist', [0])
+ endif
+endfunction
+
+" Tests for the :clist and :llist commands
+function XlistTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ " With an empty list, command should return error
+ Xgetexpr []
+ silent! Xlist
+ call assert_true(v:errmsg ==# 'E42: No Errors')
+
+ " Populate the list and then try
+ Xgetexpr ['non-error 1', 'Xtestfile1:1:3:Line1',
+ \ 'non-error 2', 'Xtestfile2:2:2:Line2',
+ \ 'non-error 3', 'Xtestfile3:3:1:Line3']
+
+ " List only valid entries
+ redir => result
+ Xlist
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 2 Xtestfile1:1 col 3: Line1',
+ \ ' 4 Xtestfile2:2 col 2: Line2',
+ \ ' 6 Xtestfile3:3 col 1: Line3'], l)
+
+ " List all the entries
+ redir => result
+ Xlist!
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 1: non-error 1', ' 2 Xtestfile1:1 col 3: Line1',
+ \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2',
+ \ ' 5: non-error 3', ' 6 Xtestfile3:3 col 1: Line3'], l)
+
+ " List a range of errors
+ redir => result
+ Xlist 3,6
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 4 Xtestfile2:2 col 2: Line2',
+ \ ' 6 Xtestfile3:3 col 1: Line3'], l)
+
+ redir => result
+ Xlist! 3,4
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l)
+
+ redir => result
+ Xlist -6,-4
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 2 Xtestfile1:1 col 3: Line1'], l)
+
+ redir => result
+ Xlist! -5,-3
+ redir END
+ let l = split(result, "\n")
+ call assert_equal([' 2 Xtestfile1:1 col 3: Line1',
+ \ ' 3: non-error 2', ' 4 Xtestfile2:2 col 2: Line2'], l)
+endfunction
+
+function Test_clist()
+ call XlistTests('c')
+ call XlistTests('l')
+endfunction
+
+" Tests for the :colder, :cnewer, :lolder and :lnewer commands
+" Note that this test assumes that a quickfix/location list is
+" already set by the caller.
+function XageTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ " Jumping to a non existent list should return error
+ silent! Xolder 99
+ call assert_true(v:errmsg ==# 'E380: At bottom of quickfix stack')
+
+ silent! Xnewer 99
+ call assert_true(v:errmsg ==# 'E381: At top of quickfix stack')
+
+ " Add three quickfix/location lists
+ Xgetexpr ['Xtestfile1:1:3:Line1']
+ Xgetexpr ['Xtestfile2:2:2:Line2']
+ Xgetexpr ['Xtestfile3:3:1:Line3']
+
+ " Go back two lists
+ Xolder
+ let l = g:Xgetlist()
+ call assert_equal('Line2', l[0].text)
+
+ " Go forward two lists
+ Xnewer
+ let l = g:Xgetlist()
+ call assert_equal('Line3', l[0].text)
+
+ " Test for the optional count argument
+ Xolder 2
+ let l = g:Xgetlist()
+ call assert_equal('Line1', l[0].text)
+
+ Xnewer 2
+ let l = g:Xgetlist()
+ call assert_equal('Line3', l[0].text)
+endfunction
+
+function Test_cage()
+ let list = [{'bufnr': 1, 'lnum': 1}]
+ call setqflist(list)
+ call XageTests('c')
+
+ call setloclist(0, list)
+ call XageTests('l')
+endfunction
+
+" Tests for the :cwindow, :lwindow :cclose, :lclose, :copen and :lopen
+" commands
+function XwindowTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ " Create a list with no valid entries
+ Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3']
+
+ " Quickfix/Location window should not open with no valid errors
+ Xwindow
+ call assert_true(winnr('$') == 1)
+
+ " Create a list with valid entries
+ Xgetexpr ['Xtestfile1:1:3:Line1', 'Xtestfile2:2:2:Line2',
+ \ 'Xtestfile3:3:1:Line3']
+
+ " Open the window
+ Xwindow
+ call assert_true(winnr('$') == 2 && winnr() == 2 &&
+ \ getline('.') ==# 'Xtestfile1|1 col 3| Line1')
+ redraw!
+
+ " Close the window
+ Xclose
+ call assert_true(winnr('$') == 1)
+
+ " Create a list with no valid entries
+ Xgetexpr ['non-error 1', 'non-error 2', 'non-error 3']
+
+ " Open the window
+ Xopen 5
+ call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1'
+ \ && winheight('.') == 5)
+
+ " Opening the window again, should move the cursor to that window
+ wincmd t
+ Xopen 7
+ call assert_true(winnr('$') == 2 && winnr() == 2 &&
+ \ winheight('.') == 7 &&
+ \ getline('.') ==# '|| non-error 1')
+
+
+ " Calling cwindow should close the quickfix window with no valid errors
+ Xwindow
+ call assert_true(winnr('$') == 1)
+endfunction
+
+function Test_cwindow()
+ call XwindowTests('c')
+ call XwindowTests('l')
+endfunction
+
+" Tests for the :cfile, :lfile, :caddfile, :laddfile, :cgetfile and :lgetfile
+" commands.
+function XfileTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ call writefile(['Xtestfile1:700:10:Line 700',
+ \ 'Xtestfile2:800:15:Line 800'], 'Xqftestfile1')
+
+ enew!
+ Xfile Xqftestfile1
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 2 &&
+ \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' &&
+ \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800')
+
+ " Test with a non existent file
+ call assert_fails('Xfile non_existent_file', 'E40')
+
+ " Run cfile/lfile from a modified buffer
+ enew!
+ silent! put ='Quickfix'
+ silent! Xfile Xqftestfile1
+ call assert_true(v:errmsg ==# 'E37: No write since last change (add ! to override)')
+
+ call writefile(['Xtestfile3:900:30:Line 900'], 'Xqftestfile1')
+ Xaddfile Xqftestfile1
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 3 &&
+ \ l[2].lnum == 900 && l[2].col == 30 && l[2].text ==# 'Line 900')
+
+ call writefile(['Xtestfile1:222:77:Line 222',
+ \ 'Xtestfile2:333:88:Line 333'], 'Xqftestfile1')
+
+ enew!
+ Xgetfile Xqftestfile1
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 2 &&
+ \ l[0].lnum == 222 && l[0].col == 77 && l[0].text ==# 'Line 222' &&
+ \ l[1].lnum == 333 && l[1].col == 88 && l[1].text ==# 'Line 333')
+
+ call delete('Xqftestfile1')
+endfunction
+
+function Test_cfile()
+ call XfileTests('c')
+ call XfileTests('l')
+endfunction
+
+" Tests for the :cbuffer, :lbuffer, :caddbuffer, :laddbuffer, :cgetbuffer and
+" :lgetbuffer commands.
+function XbufferTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ enew!
+ silent! call setline(1, ['Xtestfile7:700:10:Line 700',
+ \ 'Xtestfile8:800:15:Line 800'])
+ Xbuffer!
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 2 &&
+ \ l[0].lnum == 700 && l[0].col == 10 && l[0].text ==# 'Line 700' &&
+ \ l[1].lnum == 800 && l[1].col == 15 && l[1].text ==# 'Line 800')
+
+ enew!
+ silent! call setline(1, ['Xtestfile9:900:55:Line 900',
+ \ 'Xtestfile10:950:66:Line 950'])
+ Xgetbuffer
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 2 &&
+ \ l[0].lnum == 900 && l[0].col == 55 && l[0].text ==# 'Line 900' &&
+ \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950')
+
+ enew!
+ silent! call setline(1, ['Xtestfile11:700:20:Line 700',
+ \ 'Xtestfile12:750:25:Line 750'])
+ Xaddbuffer
+ let l = g:Xgetlist()
+ call assert_true(len(l) == 4 &&
+ \ l[1].lnum == 950 && l[1].col == 66 && l[1].text ==# 'Line 950' &&
+ \ l[2].lnum == 700 && l[2].col == 20 && l[2].text ==# 'Line 700' &&
+ \ l[3].lnum == 750 && l[3].col == 25 && l[3].text ==# 'Line 750')
+ enew!
+
+endfunction
+
+function Test_cbuffer()
+ call XbufferTests('c')
+ call XbufferTests('l')
+endfunction
+
+function XexprTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ call assert_fails('Xexpr 10', 'E777:')
+endfunction
+
+function Test_cexpr()
+ call XexprTests('c')
+ call XexprTests('l')
+endfunction
+
+" Tests for :cnext, :cprev, :cfirst, :clast commands
+function Xtest_browse(cchar)
+ call s:setup_commands(a:cchar)
+
+ call s:create_test_file('Xqftestfile1')
+ call s:create_test_file('Xqftestfile2')
+
+ Xgetexpr ['Xqftestfile1:5:Line5',
+ \ 'Xqftestfile1:6:Line6',
+ \ 'Xqftestfile2:10:Line10',
+ \ 'Xqftestfile2:11:Line11']
+
+ Xfirst
+ call assert_fails('Xprev', 'E553')
+ call assert_fails('Xpfile', 'E553')
+ Xnfile
+ call assert_equal('Xqftestfile2', bufname('%'))
+ call assert_equal(10, line('.'))
+ Xpfile
+ call assert_equal('Xqftestfile1', bufname('%'))
+ call assert_equal(6, line('.'))
+ Xlast
+ call assert_equal('Xqftestfile2', bufname('%'))
+ call assert_equal(11, line('.'))
+ call assert_fails('Xnext', 'E553')
+ call assert_fails('Xnfile', 'E553')
+ Xrewind
+ call assert_equal('Xqftestfile1', bufname('%'))
+ call assert_equal(5, line('.'))
+
+ call delete('Xqftestfile1')
+ call delete('Xqftestfile2')
+endfunction
+
+function Test_browse()
+ call Xtest_browse('c')
+ call Xtest_browse('l')
+endfunction
+
+function! s:test_xhelpgrep(cchar)
+ call s:setup_commands(a:cchar)
+ Xhelpgrep quickfix
+ Xopen
+ if a:cchar == 'c'
+ let title_text = ':helpgrep quickfix'
+ else
+ let title_text = ':lhelpgrep quickfix'
+ endif
+ call assert_true(w:quickfix_title =~ title_text, w:quickfix_title)
+ " This wipes out the buffer, make sure that doesn't cause trouble.
+ Xclose
+endfunction
+
+function Test_helpgrep()
+ call s:test_xhelpgrep('c')
+ call s:test_xhelpgrep('l')
+endfunc
+
+func Test_errortitle()
+ augroup QfBufWinEnter
+ au!
+ au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE')
+ augroup END
+ copen
+ let a=[{'lnum': 308, 'bufnr': bufnr(''), 'col': 58, 'valid': 1, 'vcol': 0, 'nr': 0, 'type': '', 'pattern': '', 'text': ' au BufWinEnter * :let g:a=get(w:, ''quickfix_title'', ''NONE'')'}]
+ call setqflist(a)
+ call assert_equal(':setqflist()', g:a)
+ augroup QfBufWinEnter
+ au!
+ augroup END
+ augroup! QfBufWinEnter
+endfunc
+
+func Test_vimgreptitle()
+ augroup QfBufWinEnter
+ au!
+ au BufWinEnter * :let g:a=get(w:, 'quickfix_title', 'NONE')
+ augroup END
+ try
+ vimgrep /pattern/j file
+ catch /E480/
+ endtry
+ copen
+ call assert_equal(': vimgrep /pattern/j file', g:a)
+ augroup QfBufWinEnter
+ au!
+ augroup END
+ augroup! QfBufWinEnter
+endfunc
+
+function XqfTitleTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ Xgetexpr ['file:1:1:message']
+ let l = g:Xgetlist()
+ if a:cchar == 'c'
+ call setqflist(l, 'r')
+ else
+ call setloclist(0, l, 'r')
+ endif
+
+ Xopen
+ if a:cchar == 'c'
+ let title = ':setqflist()'
+ else
+ let title = ':setloclist()'
+ endif
+ call assert_equal(title, w:quickfix_title)
+ Xclose
+endfunction
+
+" Tests for quickfix window's title
+function Test_qf_title()
+ call XqfTitleTests('c')
+ call XqfTitleTests('l')
+endfunction
+
+" Tests for 'errorformat'
+function Test_efm()
+ let save_efm = &efm
+ set efm=%EEEE%m,%WWWW%m,%+CCCC%.%#,%-GGGG%.%#
+ cgetexpr ['WWWW', 'EEEE', 'CCCC']
+ let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
+ call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l)
+ cgetexpr ['WWWW', 'GGGG', 'EEEE', 'CCCC']
+ let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
+ call assert_equal("[['W', 1], ['E^@CCCC', 1]]", l)
+ cgetexpr ['WWWW', 'GGGG', 'ZZZZ', 'EEEE', 'CCCC', 'YYYY']
+ let l = strtrans(string(map(getqflist(), '[v:val.text, v:val.valid]')))
+ call assert_equal("[['W', 1], ['ZZZZ', 0], ['E^@CCCC', 1], ['YYYY', 0]]", l)
+ let &efm = save_efm
+endfunction
+
+" This will test for problems in quickfix:
+" A. incorrectly copying location lists which caused the location list to show
+" a different name than the file that was actually being displayed.
+" B. not reusing the window for which the location list window is opened but
+" instead creating new windows.
+" C. make sure that the location list window is not reused instead of the
+" window it belongs to.
+"
+" Set up the test environment:
+function! ReadTestProtocol(name)
+ let base = substitute(a:name, '\v^test://(.*)%(\.[^.]+)?', '\1', '')
+ let word = substitute(base, '\v(.*)\..*', '\1', '')
+
+ setl modifiable
+ setl noreadonly
+ setl noswapfile
+ setl bufhidden=delete
+ %del _
+ " For problem 2:
+ " 'buftype' has to be set to reproduce the constant opening of new windows
+ setl buftype=nofile
+
+ call setline(1, word)
+
+ setl nomodified
+ setl nomodifiable
+ setl readonly
+ exe 'doautocmd BufRead ' . substitute(a:name, '\v^test://(.*)', '\1', '')
+endfunction
+
+function Test_locationlist()
+ enew
+
+ augroup testgroup
+ au!
+ autocmd BufReadCmd test://* call ReadTestProtocol(expand("<amatch>"))
+ augroup END
+
+ let words = [ "foo", "bar", "baz", "quux", "shmoo", "spam", "eggs" ]
+
+ let qflist = []
+ for word in words
+ call add(qflist, {'filename': 'test://' . word . '.txt', 'text': 'file ' . word . '.txt', })
+ " NOTE: problem 1:
+ " intentionally not setting 'lnum' so that the quickfix entries are not
+ " valid
+ call setloclist(0, qflist, ' ')
+ endfor
+
+ " Test A
+ lrewind
+ enew
+ lopen
+ lnext
+ lnext
+ lnext
+ lnext
+ vert split
+ wincmd L
+ lopen
+ wincmd p
+ lnext
+ let fileName = expand("%")
+ wincmd p
+ let locationListFileName = substitute(getline(line('.')), '\([^|]*\)|.*', '\1', '')
+ let fileName = substitute(fileName, '\\', '/', 'g')
+ let locationListFileName = substitute(locationListFileName, '\\', '/', 'g')
+ call assert_equal("test://bar.txt", fileName)
+ call assert_equal("test://bar.txt", locationListFileName)
+
+ wincmd n | only
+
+ " Test B:
+ lrewind
+ lopen
+ 2
+ exe "normal \<CR>"
+ wincmd p
+ 3
+ exe "normal \<CR>"
+ wincmd p
+ 4
+ exe "normal \<CR>"
+ call assert_equal(2, winnr('$'))
+ wincmd n | only
+
+ " Test C:
+ lrewind
+ lopen
+ " Let's move the location list window to the top to check whether it (the
+ " first window found) will be reused when we try to open new windows:
+ wincmd K
+ 2
+ exe "normal \<CR>"
+ wincmd p
+ 3
+ exe "normal \<CR>"
+ wincmd p
+ 4
+ exe "normal \<CR>"
+ 1wincmd w
+ call assert_equal('quickfix', &buftype)
+ 2wincmd w
+ let bufferName = expand("%")
+ let bufferName = substitute(bufferName, '\\', '/', 'g')
+ call assert_equal('test://quux.txt', bufferName)
+
+ wincmd n | only
+
+ augroup! testgroup
+endfunction
+
+function Test_locationlist_curwin_was_closed()
+ augroup testgroup
+ au!
+ autocmd BufReadCmd test_curwin.txt call R(expand("<amatch>"))
+ augroup END
+
+ function! R(n)
+ quit
+ endfunc
+
+ new
+ let q = []
+ call add(q, {'filename': 'test_curwin.txt' })
+ call setloclist(0, q)
+ call assert_fails('lrewind', 'E924:')
+
+ augroup! testgroup
+endfunction
+
+" More tests for 'errorformat'
+function! Test_efm1()
+ if !has('unix')
+ " The 'errorformat' setting is different on non-Unix systems.
+ " This test works only on Unix-like systems.
+ return
+ endif
+
+ let l = [
+ \ '"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.',
+ \ '"Xtestfile", line 6 col 19; this is an error',
+ \ 'gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include version.c',
+ \ 'Xtestfile:9: parse error before `asd''',
+ \ 'make: *** [vim] Error 1',
+ \ 'in file "Xtestfile" linenr 10: there is an error',
+ \ '',
+ \ '2 returned',
+ \ '"Xtestfile", line 11 col 1; this is an error',
+ \ '"Xtestfile", line 12 col 2; this is another error',
+ \ '"Xtestfile", line 14:10; this is an error in column 10',
+ \ '=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time',
+ \ '"Xtestfile", linenr 16: yet another problem',
+ \ 'Error in "Xtestfile" at line 17:',
+ \ 'x should be a dot',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17',
+ \ ' ^',
+ \ 'Error in "Xtestfile" at line 18:',
+ \ 'x should be a dot',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18',
+ \ '.............^',
+ \ 'Error in "Xtestfile" at line 19:',
+ \ 'x should be a dot',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19',
+ \ '--------------^',
+ \ 'Error in "Xtestfile" at line 20:',
+ \ 'x should be a dot',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20',
+ \ ' ^',
+ \ '',
+ \ 'Does anyone know what is the problem and how to correction it?',
+ \ '"Xtestfile", line 21 col 9: What is the title of the quickfix window?',
+ \ '"Xtestfile", line 22 col 9: What is the title of the quickfix window?'
+ \ ]
+
+ call writefile(l, 'Xerrorfile1')
+ call writefile(l[:-2], 'Xerrorfile2')
+
+ let m = [
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 2',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 3',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 4',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 5',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 6',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 7',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 8',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 9',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 10',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 11',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 12',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 13',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 14',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 15',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 16',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 17',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 18',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 19',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 20',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 21',
+ \ ' xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx line 22'
+ \ ]
+ call writefile(m, 'Xtestfile')
+
+ let save_efm = &efm
+ set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
+ set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
+
+ exe 'cf Xerrorfile2'
+ clast
+ copen
+ call assert_equal(':cf Xerrorfile2', w:quickfix_title)
+ wincmd p
+
+ exe 'cf Xerrorfile1'
+ call assert_equal([4, 12], [line('.'), col('.')])
+ cn
+ call assert_equal([6, 19], [line('.'), col('.')])
+ cn
+ call assert_equal([9, 2], [line('.'), col('.')])
+ cn
+ call assert_equal([10, 2], [line('.'), col('.')])
+ cn
+ call assert_equal([11, 1], [line('.'), col('.')])
+ cn
+ call assert_equal([12, 2], [line('.'), col('.')])
+ cn
+ call assert_equal([14, 10], [line('.'), col('.')])
+ cn
+ call assert_equal([15, 3, 10], [line('.'), col('.'), virtcol('.')])
+ cn
+ call assert_equal([16, 2], [line('.'), col('.')])
+ cn
+ call assert_equal([17, 6], [line('.'), col('.')])
+ cn
+ call assert_equal([18, 7], [line('.'), col('.')])
+ cn
+ call assert_equal([19, 8], [line('.'), col('.')])
+ cn
+ call assert_equal([20, 9], [line('.'), col('.')])
+ clast
+ cprev
+ cprev
+ wincmd w
+ call assert_equal(':cf Xerrorfile1', w:quickfix_title)
+ wincmd p
+
+ let &efm = save_efm
+ call delete('Xerrorfile1')
+ call delete('Xerrorfile2')
+ call delete('Xtestfile')
+endfunction
+
+" Test for quickfix directory stack support
+function! s:dir_stack_tests(cchar)
+ call s:setup_commands(a:cchar)
+
+ let save_efm=&efm
+ set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f'
+
+ let lines = ["Entering dir 'dir1/a'",
+ \ 'habits2.txt:1:Nine Healthy Habits',
+ \ "Entering dir 'b'",
+ \ 'habits3.txt:2:0 Hours of television',
+ \ 'habits2.txt:7:5 Small meals',
+ \ "Entering dir 'dir1/c'",
+ \ 'habits4.txt:3:1 Hour of exercise',
+ \ "Leaving dir 'dir1/c'",
+ \ "Leaving dir 'dir1/a'",
+ \ 'habits1.txt:4:2 Liters of water',
+ \ "Entering dir 'dir2'",
+ \ 'habits5.txt:5:3 Cups of hot green tea',
+ \ "Leaving dir 'dir2'"
+ \]
+
+ Xexpr ""
+ for l in lines
+ Xaddexpr l
+ endfor
+
+ let qf = g:Xgetlist()
+
+ call assert_equal('dir1/a/habits2.txt', bufname(qf[1].bufnr))
+ call assert_equal(1, qf[1].lnum)
+ call assert_equal('dir1/a/b/habits3.txt', bufname(qf[3].bufnr))
+ call assert_equal(2, qf[3].lnum)
+ call assert_equal('dir1/a/habits2.txt', bufname(qf[4].bufnr))
+ call assert_equal(7, qf[4].lnum)
+ call assert_equal('dir1/c/habits4.txt', bufname(qf[6].bufnr))
+ call assert_equal(3, qf[6].lnum)
+ call assert_equal('habits1.txt', bufname(qf[9].bufnr))
+ call assert_equal(4, qf[9].lnum)
+ call assert_equal('dir2/habits5.txt', bufname(qf[11].bufnr))
+ call assert_equal(5, qf[11].lnum)
+
+ let &efm=save_efm
+endfunction
+
+" Tests for %D and %X errorformat options
+function! Test_efm_dirstack()
+ " Create the directory stack and files
+ call mkdir('dir1')
+ call mkdir('dir1/a')
+ call mkdir('dir1/a/b')
+ call mkdir('dir1/c')
+ call mkdir('dir2')
+
+ let lines = ["Nine Healthy Habits",
+ \ "0 Hours of television",
+ \ "1 Hour of exercise",
+ \ "2 Liters of water",
+ \ "3 Cups of hot green tea",
+ \ "4 Short mental breaks",
+ \ "5 Small meals",
+ \ "6 AM wake up time",
+ \ "7 Minutes of laughter",
+ \ "8 Hours of sleep (at least)",
+ \ "9 PM end of the day and off to bed"
+ \ ]
+ call writefile(lines, 'habits1.txt')
+ call writefile(lines, 'dir1/a/habits2.txt')
+ call writefile(lines, 'dir1/a/b/habits3.txt')
+ call writefile(lines, 'dir1/c/habits4.txt')
+ call writefile(lines, 'dir2/habits5.txt')
+
+ call s:dir_stack_tests('c')
+ call s:dir_stack_tests('l')
+
+ call delete('dir1', 'rf')
+ call delete('dir2', 'rf')
+ call delete('habits1.txt')
+endfunction
+
+" Tests for invalid error format specifies
+function Xinvalid_efm_Tests(cchar)
+ call s:setup_commands(a:cchar)
+
+ let save_efm = &efm
+
+ set efm=%f:%l:%m,%f:%f:%l:%m
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E372:')
+
+ set efm=%f:%l:%m,%f:%l:%r:%m
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:')
+
+ set efm=%f:%l:%m,%O:%f:%l:%m
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E373:')
+
+ set efm=%f:%l:%m,%f:%l:%*[^a-z
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E374:')
+
+ set efm=%f:%l:%m,%f:%l:%*c
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E375:')
+
+ set efm=%f:%l:%m,%L%M%N
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E376:')
+
+ set efm=%f:%l:%m,%f:%l:%m:%R
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:')
+
+ set efm=
+ call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:')
+
+ set efm=%DEntering\ dir\ abc,%f:%l:%m
+ call assert_fails('Xexpr ["Entering dir abc", "abc.txt:1:Hello world"]', 'E379:')
+
+ let &efm = save_efm
+endfunction
+
+function Test_invalid_efm()
+ call Xinvalid_efm_Tests('c')
+ call Xinvalid_efm_Tests('l')
+endfunction
+
+" TODO:
+" Add tests for the following formats in 'errorformat'
+" %r %O
+function! Test_efm2()
+ let save_efm = &efm
+
+ " Test for %s format in efm
+ set efm=%f:%s
+ cexpr 'Xtestfile:Line search text'
+ let l = getqflist()
+ call assert_equal(l[0].pattern, '^\VLine search text\$')
+ call assert_equal(l[0].lnum, 0)
+
+ " Test for %P, %Q and %t format specifiers
+ let lines=["[Xtestfile1]",
+ \ "(1,17) error: ';' missing",
+ \ "(21,2) warning: variable 'z' not defined",
+ \ "(67,3) error: end of file found before string ended",
+ \ "",
+ \ "[Xtestfile2]",
+ \ "",
+ \ "[Xtestfile3]",
+ \ "NEW compiler v1.1",
+ \ "(2,2) warning: variable 'x' not defined",
+ \ "(67,3) warning: 's' already defined"
+ \]
+ set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q
+ cexpr ""
+ for l in lines
+ caddexpr l
+ endfor
+ let l = getqflist()
+ call assert_equal(9, len(l))
+ call assert_equal(21, l[2].lnum)
+ call assert_equal(2, l[2].col)
+ call assert_equal('w', l[2].type)
+ call assert_equal('e', l[3].type)
+
+ " Tests for %E, %C and %Z format specifiers
+ let lines = ["Error 275",
+ \ "line 42",
+ \ "column 3",
+ \ "' ' expected after '--'"
+ \]
+ set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m
+ cgetexpr lines
+ let l = getqflist()
+ call assert_equal(275, l[0].nr)
+ call assert_equal(42, l[0].lnum)
+ call assert_equal(3, l[0].col)
+ call assert_equal('E', l[0].type)
+ call assert_equal("\n' ' expected after '--'", l[0].text)
+
+ " Test for %>
+ let lines = ["Error in line 147 of foo.c:",
+ \"unknown variable 'i'"
+ \]
+ set efm=unknown\ variable\ %m,%E%>Error\ in\ line\ %l\ of\ %f:,%Z%m
+ cgetexpr lines
+ let l = getqflist()
+ call assert_equal(147, l[0].lnum)
+ call assert_equal('E', l[0].type)
+ call assert_equal("\nunknown variable 'i'", l[0].text)
+
+ let &efm = save_efm
+endfunction
+
+function XquickfixChangedByAutocmd(cchar)
+ call s:setup_commands(a:cchar)
+ if a:cchar == 'c'
+ let ErrorNr = 'E925'
+ function! ReadFunc()
+ colder
+ cgetexpr []
+ endfunc
+ else
+ let ErrorNr = 'E926'
+ function! ReadFunc()
+ lolder
+ lgetexpr []
+ endfunc
+ endif
+
+ augroup testgroup
+ au!
+ autocmd BufReadCmd test_changed.txt call ReadFunc()
+ augroup END
+
+ new | only
+ let words = [ "a", "b" ]
+ let qflist = []
+ for word in words
+ call add(qflist, {'filename': 'test_changed.txt'})
+ call g:Xsetlist(qflist, ' ')
+ endfor
+ call assert_fails('Xrewind', ErrorNr . ':')
+
+ augroup! testgroup
+endfunc
+
+function Test_quickfix_was_changed_by_autocmd()
+ call XquickfixChangedByAutocmd('c')
+ call XquickfixChangedByAutocmd('l')
+endfunction
+
+func Test_caddbuffer_to_empty()
+ helpgr quickfix
+ call setqflist([], 'r')
+ cad
+ try
+ cn
+ catch
+ " number of matches is unknown
+ call assert_true(v:exception =~ 'E553:')
+ endtry
+ quit!
+endfunc
+
+func Test_cgetexpr_works()
+ " this must not crash Vim
+ cgetexpr [$x]
+ lgetexpr [$x]
+endfunc
+
+" Tests for the setqflist() and setloclist() functions
+function SetXlistTests(cchar, bnum)
+ call s:setup_commands(a:cchar)
+
+ call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 1},
+ \ {'bufnr': a:bnum, 'lnum': 2}])
+ let l = g:Xgetlist()
+ call assert_equal(2, len(l))
+ call assert_equal(2, l[1].lnum)
+
+ Xnext
+ call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3}], 'a')
+ let l = g:Xgetlist()
+ call assert_equal(3, len(l))
+ Xnext
+ call assert_equal(3, line('.'))
+
+ " Appending entries to the list should not change the cursor position
+ " in the quickfix window
+ Xwindow
+ 1
+ call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 4},
+ \ {'bufnr': a:bnum, 'lnum': 5}], 'a')
+ call assert_equal(1, line('.'))
+ close
+
+ call g:Xsetlist([{'bufnr': a:bnum, 'lnum': 3},
+ \ {'bufnr': a:bnum, 'lnum': 4},
+ \ {'bufnr': a:bnum, 'lnum': 5}], 'r')
+ let l = g:Xgetlist()
+ call assert_equal(3, len(l))
+ call assert_equal(5, l[2].lnum)
+
+ call g:Xsetlist([])
+ let l = g:Xgetlist()
+ call assert_equal(0, len(l))
+endfunction
+
+function Test_setqflist()
+ new Xtestfile | only
+ let bnum = bufnr('%')
+ call setline(1, range(1,5))
+
+ call SetXlistTests('c', bnum)
+ call SetXlistTests('l', bnum)
+
+ enew!
+ call delete('Xtestfile')
+endfunction
+
+function Xlist_empty_middle(cchar)
+ call s:setup_commands(a:cchar)
+
+ " create three quickfix lists
+ Xvimgrep Test_ test_quickfix.vim
+ let testlen = len(g:Xgetlist())
+ call assert_true(testlen > 0)
+ Xvimgrep empty test_quickfix.vim
+ call assert_true(len(g:Xgetlist()) > 0)
+ Xvimgrep matches test_quickfix.vim
+ let matchlen = len(g:Xgetlist())
+ call assert_true(matchlen > 0)
+ Xolder
+ " make the middle list empty
+ call g:Xsetlist([], 'r')
+ call assert_true(len(g:Xgetlist()) == 0)
+ Xolder
+ call assert_equal(testlen, len(g:Xgetlist()))
+ Xnewer
+ Xnewer
+ call assert_equal(matchlen, len(g:Xgetlist()))
+endfunc
+
+function Test_setqflist_empty_middle()
+ call Xlist_empty_middle('c')
+ call Xlist_empty_middle('l')
+endfunction
+
+function Xlist_empty_older(cchar)
+ call s:setup_commands(a:cchar)
+
+ " create three quickfix lists
+ Xvimgrep one test_quickfix.vim
+ let onelen = len(g:Xgetlist())
+ call assert_true(onelen > 0)
+ Xvimgrep two test_quickfix.vim
+ let twolen = len(g:Xgetlist())
+ call assert_true(twolen > 0)
+ Xvimgrep three test_quickfix.vim
+ let threelen = len(g:Xgetlist())
+ call assert_true(threelen > 0)
+ Xolder 2
+ " make the first list empty, check the others didn't change
+ call g:Xsetlist([], 'r')
+ call assert_true(len(g:Xgetlist()) == 0)
+ Xnewer
+ call assert_equal(twolen, len(g:Xgetlist()))
+ Xnewer
+ call assert_equal(threelen, len(g:Xgetlist()))
+endfunction
+
+function Test_setqflist_empty_older()
+ call Xlist_empty_older('c')
+ call Xlist_empty_older('l')
+endfunction
+
+function! XquickfixSetListWithAct(cchar)
+ call s:setup_commands(a:cchar)
+
+ let list1 = [{'filename': 'fnameA', 'text': 'A'},
+ \ {'filename': 'fnameB', 'text': 'B'}]
+ let list2 = [{'filename': 'fnameC', 'text': 'C'},
+ \ {'filename': 'fnameD', 'text': 'D'},
+ \ {'filename': 'fnameE', 'text': 'E'}]
+
+ " {action} is unspecified. Same as specifing ' '.
+ new | only
+ silent! Xnewer 99
+ call g:Xsetlist(list1)
+ call g:Xsetlist(list2)
+ let li = g:Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+ silent! Xolder
+ let li = g:Xgetlist()
+ call assert_equal(2, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+
+ " {action} is specified ' '.
+ new | only
+ silent! Xnewer 99
+ call g:Xsetlist(list1)
+ call g:Xsetlist(list2, ' ')
+ let li = g:Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+ silent! Xolder
+ let li = g:Xgetlist()
+ call assert_equal(2, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+
+ " {action} is specified 'a'.
+ new | only
+ silent! Xnewer 99
+ call g:Xsetlist(list1)
+ call g:Xsetlist(list2, 'a')
+ let li = g:Xgetlist()
+ call assert_equal(5, len(li))
+ call assert_equal('A', li[0]['text'])
+ call assert_equal('B', li[1]['text'])
+ call assert_equal('C', li[2]['text'])
+ call assert_equal('D', li[3]['text'])
+ call assert_equal('E', li[4]['text'])
+
+ " {action} is specified 'r'.
+ new | only
+ silent! Xnewer 99
+ call g:Xsetlist(list1)
+ call g:Xsetlist(list2, 'r')
+ let li = g:Xgetlist()
+ call assert_equal(3, len(li))
+ call assert_equal('C', li[0]['text'])
+ call assert_equal('D', li[1]['text'])
+ call assert_equal('E', li[2]['text'])
+
+ " Test for wrong value.
+ new | only
+ call assert_fails("call g:Xsetlist(0)", 'E714:')
+ call assert_fails("call g:Xsetlist(list1, '')", 'E927:')
+ call assert_fails("call g:Xsetlist(list1, 'aa')", 'E927:')
+ call assert_fails("call g:Xsetlist(list1, ' a')", 'E927:')
+ call assert_fails("call g:Xsetlist(list1, 0)", 'E928:')
+endfunc
+
+function Test_quickfix_set_list_with_act()
+ call XquickfixSetListWithAct('c')
+ call XquickfixSetListWithAct('l')
+endfunction
+
+function XLongLinesTests(cchar)
+ let l = g:Xgetlist()
+
+ call assert_equal(4, len(l))
+ call assert_equal(1, l[0].lnum)
+ call assert_equal(1, l[0].col)
+ call assert_equal(1975, len(l[0].text))
+ call assert_equal(2, l[1].lnum)
+ call assert_equal(1, l[1].col)
+ call assert_equal(4070, len(l[1].text))
+ call assert_equal(3, l[2].lnum)
+ call assert_equal(1, l[2].col)
+ call assert_equal(4070, len(l[2].text))
+ call assert_equal(4, l[3].lnum)
+ call assert_equal(1, l[3].col)
+ call assert_equal(10, len(l[3].text))
+
+ call g:Xsetlist([], 'r')
+endfunction
+
+function s:long_lines_tests(cchar)
+ call s:setup_commands(a:cchar)
+
+ let testfile = 'samples/quickfix.txt'
+
+ " file
+ exe 'Xgetfile' testfile
+ call XLongLinesTests(a:cchar)
+
+ " list
+ Xexpr readfile(testfile)
+ call XLongLinesTests(a:cchar)
+
+ " string
+ Xexpr join(readfile(testfile), "\n")
+ call XLongLinesTests(a:cchar)
+
+ " buffer
+ exe 'edit' testfile
+ exe 'Xbuffer' bufnr('%')
+ call XLongLinesTests(a:cchar)
+endfunction
+
+function Test_long_lines()
+ call s:long_lines_tests('c')
+ call s:long_lines_tests('l')
+endfunction
+
+function! s:create_test_file(filename)
+ let l = []
+ for i in range(1, 20)
+ call add(l, 'Line' . i)
+ endfor
+ call writefile(l, a:filename)
+endfunction
+
+function! Test_switchbuf()
+ call s:create_test_file('Xqftestfile1')
+ call s:create_test_file('Xqftestfile2')
+ call s:create_test_file('Xqftestfile3')
+
+ new | only
+ edit Xqftestfile1
+ let file1_winid = win_getid()
+ new Xqftestfile2
+ let file2_winid = win_getid()
+ cgetexpr ['Xqftestfile1:5:Line5',
+ \ 'Xqftestfile1:6:Line6',
+ \ 'Xqftestfile2:10:Line10',
+ \ 'Xqftestfile2:11:Line11',
+ \ 'Xqftestfile3:15:Line15',
+ \ 'Xqftestfile3:16:Line16']
+
+ new
+ let winid = win_getid()
+ cfirst | cnext
+ call assert_equal(winid, win_getid())
+ cnext | cnext
+ call assert_equal(winid, win_getid())
+ cnext | cnext
+ call assert_equal(winid, win_getid())
+ enew
+
+ set switchbuf=useopen
+ cfirst | cnext
+ call assert_equal(file1_winid, win_getid())
+ cnext | cnext
+ call assert_equal(file2_winid, win_getid())
+ cnext | cnext
+ call assert_equal(file2_winid, win_getid())
+
+ enew | only
+ set switchbuf=usetab
+ tabedit Xqftestfile1
+ tabedit Xqftestfile2
+ tabfirst
+ cfirst | cnext
+ call assert_equal(2, tabpagenr())
+ cnext | cnext
+ call assert_equal(3, tabpagenr())
+ cnext | cnext
+ call assert_equal(3, tabpagenr())
+ tabfirst | tabonly | enew
+
+ set switchbuf=split
+ cfirst | cnext
+ call assert_equal(1, winnr('$'))
+ cnext | cnext
+ call assert_equal(2, winnr('$'))
+ cnext | cnext
+ call assert_equal(3, winnr('$'))
+ enew | only
+
+ set switchbuf=newtab
+ cfirst | cnext
+ call assert_equal(1, tabpagenr('$'))
+ cnext | cnext
+ call assert_equal(2, tabpagenr('$'))
+ cnext | cnext
+ call assert_equal(3, tabpagenr('$'))
+ tabfirst | enew | tabonly | only
+
+ set switchbuf=
+ edit Xqftestfile1
+ let file1_winid = win_getid()
+ new Xqftestfile2
+ let file2_winid = win_getid()
+ copen
+ exe "normal 1G\<CR>"
+ call assert_equal(file1_winid, win_getid())
+ copen
+ exe "normal 3G\<CR>"
+ call assert_equal(file2_winid, win_getid())
+ copen | only
+ exe "normal 5G\<CR>"
+ call assert_equal(2, winnr('$'))
+ call assert_equal(1, bufwinnr('Xqftestfile3'))
+
+ enew | only
+
+ call delete('Xqftestfile1')
+ call delete('Xqftestfile2')
+ call delete('Xqftestfile3')
+endfunction
+
+function! Xadjust_qflnum(cchar)
+ call s:setup_commands(a:cchar)
+
+ enew | only
+
+ let fname = 'Xqftestfile' . a:cchar
+ call s:create_test_file(fname)
+ exe 'edit ' . fname
+
+ Xgetexpr [fname . ':5:Line5',
+ \ fname . ':10:Line10',
+ \ fname . ':15:Line15',
+ \ fname . ':20:Line20']
+
+ 6,14delete
+ call append(6, ['Buffer', 'Window'])
+
+ let l = g:Xgetlist()
+
+ call assert_equal(5, l[0].lnum)
+ call assert_equal(6, l[2].lnum)
+ call assert_equal(13, l[3].lnum)
+
+ enew!
+ call delete(fname)
+endfunction
+
+function! Test_adjust_lnum()
+ call setloclist(0, [])
+ call Xadjust_qflnum('c')
+ call setqflist([])
+ call Xadjust_qflnum('l')
+endfunction
+
+" Tests for the :grep/:lgrep and :grepadd/:lgrepadd commands
+function! s:test_xgrep(cchar)
+ call s:setup_commands(a:cchar)
+
+ " The following lines are used for the grep test. Don't remove.
+ " Grep_Test_Text: Match 1
+ " Grep_Test_Text: Match 2
+ " GrepAdd_Test_Text: Match 1
+ " GrepAdd_Test_Text: Match 2
+ enew! | only
+ set makeef&vim
+ silent Xgrep Grep_Test_Text: test_quickfix.vim
+ call assert_true(len(g:Xgetlist()) == 3)
+ Xopen
+ call assert_true(w:quickfix_title =~ '^:grep')
+ Xclose
+ enew
+ set makeef=Temp_File_##
+ silent Xgrepadd GrepAdd_Test_Text: test_quickfix.vim
+ call assert_true(len(g:Xgetlist()) == 6)
+endfunction
+
+function! Test_grep()
+ if !has('unix')
+ " The grepprg may not be set on non-Unix systems
+ return
+ endif
+
+ call s:test_xgrep('c')
+ call s:test_xgrep('l')
+endfunction
+
+function! Test_two_windows()
+ " Use one 'errorformat' for two windows. Add an expression to each of them,
+ " make sure they each keep their own state.
+ set efm=%DEntering\ dir\ '%f',%f:%l:%m,%XLeaving\ dir\ '%f'
+ call mkdir('Xone/a', 'p')
+ call mkdir('Xtwo/a', 'p')
+ let lines = ['1', '2', 'one one one', '4', 'two two two', '6', '7']
+ call writefile(lines, 'Xone/a/one.txt')
+ call writefile(lines, 'Xtwo/a/two.txt')
+
+ new one
+ let one_id = win_getid()
+ lexpr ""
+ new two
+ let two_id = win_getid()
+ lexpr ""
+
+ laddexpr "Entering dir 'Xtwo/a'"
+ call win_gotoid(one_id)
+ laddexpr "Entering dir 'Xone/a'"
+ call win_gotoid(two_id)
+ laddexpr 'two.txt:5:two two two'
+ call win_gotoid(one_id)
+ laddexpr 'one.txt:3:one one one'
+
+ let loc_one = getloclist(one_id)
+echo string(loc_one)
+ call assert_equal('Xone/a/one.txt', bufname(loc_one[1].bufnr))
+ call assert_equal(3, loc_one[1].lnum)
+
+ let loc_two = getloclist(two_id)
+echo string(loc_two)
+ call assert_equal('Xtwo/a/two.txt', bufname(loc_two[1].bufnr))
+ call assert_equal(5, loc_two[1].lnum)
+
+ call win_gotoid(one_id)
+ bwipe!
+ call win_gotoid(two_id)
+ bwipe!
+ call delete('Xone', 'rf')
+ call delete('Xtwo', 'rf')
+endfunc
+
+function XbottomTests(cchar)
+ call s:setup_commands(a:cchar)
+
+ call g:Xsetlist([{'filename': 'foo', 'lnum': 42}])
+ Xopen
+ let wid = win_getid()
+ call assert_equal(1, line('.'))
+ wincmd w
+ call g:Xsetlist([{'filename': 'var', 'lnum': 24}], 'a')
+ Xbottom
+ call win_gotoid(wid)
+ call assert_equal(2, line('.'))
+ Xclose
+endfunc
+
+" Tests for the :cbottom and :lbottom commands
+function Test_cbottom()
+ call XbottomTests('c')
+ call XbottomTests('l')
+endfunction
+
+function HistoryTest(cchar)
+ call s:setup_commands(a:cchar)
+
+ call assert_fails(a:cchar . 'older 99', 'E380:')
+ " clear all lists after the first one, then replace the first one.
+ call g:Xsetlist([])
+ Xolder
+ let entry = {'filename': 'foo', 'lnum': 42}
+ call g:Xsetlist([entry], 'r')
+ call g:Xsetlist([entry, entry])
+ call g:Xsetlist([entry, entry, entry])
+ let res = split(execute(a:cchar . 'hist'), "\n")
+ call assert_equal(3, len(res))
+ let common = 'errors :set' . (a:cchar == 'c' ? 'qf' : 'loc') . 'list()'
+ call assert_equal(' error list 1 of 3; 1 ' . common, res[0])
+ call assert_equal(' error list 2 of 3; 2 ' . common, res[1])
+ call assert_equal('> error list 3 of 3; 3 ' . common, res[2])
+endfunc
+
+func Test_history()
+ call HistoryTest('c')
+ call HistoryTest('l')
+endfunc
+
+func Test_duplicate_buf()
+ " make sure we can get the highest buffer number
+ edit DoesNotExist
+ edit DoesNotExist2
+ let last_buffer = bufnr("$")
+
+ " make sure only one buffer is created
+ call writefile(['this one', 'that one'], 'Xgrepthis')
+ vimgrep one Xgrepthis
+ vimgrep one Xgrepthis
+ call assert_equal(last_buffer + 1, bufnr("$"))
+
+ call delete('Xgrepthis')
+endfunc
diff --git a/src/nvim/testdir/test_regexp_utf8.vim b/src/nvim/testdir/test_regexp_utf8.vim
new file mode 100644
index 0000000000..ecb03a0f8c
--- /dev/null
+++ b/src/nvim/testdir/test_regexp_utf8.vim
@@ -0,0 +1,40 @@
+" Tests for regexp in utf8 encoding
+
+func s:equivalence_test()
+ let str = "AÀÃÂÃÄÅĀĂĄÇǞǠẢ BḂḆ CÇĆĈĊČ DÄŽÄḊḎḠEÈÉÊËĒĔĖĘĚẺẼ FḞ GĜĞĠĢǤǦǴḠ HĤĦḢḦḨ IÃŒÃÃŽÃĨĪĬĮİÇỈ JÄ´ KĶǨḰḴ LĹĻĽĿÅḺ MḾṀ NÑŃŅŇṄṈ OÃ’Ã“Ã”Ã•Ã–Ã˜ÅŒÅŽÅÆ Ç‘ǪǬỎ PṔṖ Q RŔŖŘṘṞ SŚŜŞŠṠ TŢŤŦṪṮ UÙÚÛÜŨŪŬŮŰŲƯǓỦ Vá¹¼ WŴẀẂẄẆ XẊẌ YÃŶŸẎỲỶỸ ZŹŻŽƵáºáº” aàáâãäåÄăąǎǟǡả bḃḇ cÃ§Ä‡Ä‰Ä‹Ä dÄđḋá¸á¸‘ eèéêëēĕėęěẻẽ fḟ gÄğġģǥǧǵḡ hĥħḣḧḩẖ iìíîïĩīĭįÇỉ jĵǰ kķǩḱḵ lĺļľŀłḻ mḿṠnñńņňʼnṅṉ oòóôõöøÅÅőơǒǫǭỠpṕṗ q rŕŗřṙṟ sÅ›Åşšṡ tţťŧṫṯẗ uùúûüũūŭůűųưǔủ vá¹½ wŵáºáºƒáº…ẇẘ xẋẠyýÿŷáºáº™á»³á»·á»¹ zźżžƶẑẕ"
+ let groups = split(str)
+ for group1 in groups
+ for c in split(group1, '\zs')
+ " next statement confirms that equivalence class matches every
+ " character in group
+ call assert_match('^[[=' . c . '=]]*$', group1)
+ for group2 in groups
+ if group2 != group1
+ " next statement converts that equivalence class doesn't match
+ " character in any other group
+ call assert_equal(-1, match(group2, '[[=' . c . '=]]'))
+ endif
+ endfor
+ endfor
+ endfor
+endfunc
+
+func Test_equivalence_re1()
+ set re=1
+ call s:equivalence_test()
+ set re=0
+endfunc
+
+func Test_equivalence_re2()
+ set re=2
+ call s:equivalence_test()
+ set re=0
+endfunc
+
+func Test_recursive_substitute()
+ new
+ s/^/\=execute("s#^##gn")
+ " check we are now not in the sandbox
+ call setwinvar(1, 'myvar', 1)
+ bwipe!
+endfunc
diff --git a/src/nvim/testdir/test_signs.vim b/src/nvim/testdir/test_signs.vim
new file mode 100644
index 0000000000..75dbd74b34
--- /dev/null
+++ b/src/nvim/testdir/test_signs.vim
@@ -0,0 +1,199 @@
+" Test for signs
+
+if !has('signs')
+ finish
+endif
+
+func Test_sign()
+ new
+ call setline(1, ['a', 'b', 'c', 'd'])
+
+ " Define some signs.
+ " We can specify icons even if not all versions of vim support icons as
+ " icon is ignored when not supported. "(not supported)" is shown after
+ " the icon name when listing signs.
+ sign define Sign1 text=x
+ try
+ sign define Sign2 text=xy texthl=Title linehl=Error icon=../../pixmaps/stock_vim_find_help.png
+ catch /E255:/
+ " ignore error: E255: Couldn't read in sign data!
+ " This error can happen when running in gui.
+ " Some gui like Motif do not support the png icon format.
+ endtry
+
+ " Test listing signs.
+ let a=execute('sign list')
+ call assert_match("^\nsign Sign1 text=x \nsign Sign2 icon=../../pixmaps/stock_vim_find_help.png .*text=xy linehl=Error texthl=Title$", a)
+
+ let a=execute('sign list Sign1')
+ call assert_equal("\nsign Sign1 text=x ", a)
+
+ " Split the window to the bottom to verify sign jump will stay in the current window
+ " if the buffer is displayed there.
+ let bn = bufnr('%')
+ let wn = winnr()
+ exe 'sign place 41 line=3 name=Sign1 buffer=' . bn
+ 1
+ bot split
+ exe 'sign jump 41 buffer=' . bufnr('%')
+ call assert_equal('c', getline('.'))
+ call assert_equal(3, winnr())
+ call assert_equal(bn, bufnr('%'))
+ call assert_notequal(wn, winnr())
+
+ " Create a new buffer and check that ":sign jump" switches to the old buffer.
+ 1
+ new foo
+ call assert_notequal(bn, bufnr('%'))
+ exe 'sign jump 41 buffer=' . bn
+ call assert_equal(bn, bufnr('%'))
+ call assert_equal('c', getline('.'))
+
+ " Redraw to make sure that screen redraw with sign gets exercised,
+ " with and without 'rightleft'.
+ if has('rightleft')
+ set rightleft
+ redraw
+ set norightleft
+ endif
+ redraw
+
+ " Check that we can't change sign.
+ call assert_fails("exe 'sign place 40 name=Sign1 buffer=' . bufnr('%')", 'E885:')
+
+ " Check placed signs
+ let a=execute('sign place')
+ call assert_equal("\n--- Signs ---\nSigns for [NULL]:\n line=3 id=41 name=Sign1\n", a)
+
+ " Unplace the sign and try jumping to it again should fail.
+ sign unplace 41
+ 1
+ call assert_fails("exe 'sign jump 41 buffer=' . bufnr('%')", 'E157:')
+ call assert_equal('a', getline('.'))
+
+ " Unplace sign on current line.
+ exe 'sign place 42 line=4 name=Sign2 buffer=' . bufnr('%')
+ 4
+ sign unplace
+ let a=execute('sign place')
+ call assert_equal("\n--- Signs ---\n", a)
+
+ " Try again to unplace sign on current line, it should fail this time.
+ call assert_fails('sign unplace', 'E159:')
+
+ " Unplace all signs.
+ exe 'sign place 41 line=3 name=Sign1 buffer=' . bufnr('%')
+ sign unplace *
+ let a=execute('sign place')
+ call assert_equal("\n--- Signs ---\n", a)
+
+ " Check :jump with file=...
+ edit foo
+ call setline(1, ['A', 'B', 'C', 'D'])
+
+ try
+ sign define Sign3 text=y texthl=DoesNotExist linehl=DoesNotExist icon=doesnotexist.xpm
+ catch /E255:/
+ " ignore error: E255: it can happens for guis.
+ endtry
+
+ let fn = expand('%:p')
+ exe 'sign place 43 line=2 name=Sign3 file=' . fn
+ edit bar
+ call assert_notequal(fn, expand('%:p'))
+ exe 'sign jump 43 file=' . fn
+ call assert_equal('B', getline('.'))
+
+ " After undefining the sign, we should no longer be able to place it.
+ sign undefine Sign1
+ sign undefine Sign2
+ sign undefine Sign3
+ call assert_fails("exe 'sign place 41 line=3 name=Sign1 buffer=' . bufnr('%')", 'E155:')
+endfunc
+
+" Undefining placed sign is not recommended.
+" Quoting :help sign
+"
+" :sign undefine {name}
+" Deletes a previously defined sign. If signs with this {name}
+" are still placed this will cause trouble.
+func Test_sign_undefine_still_placed()
+ new foobar
+ sign define Sign text=x
+ exe 'sign place 41 line=1 name=Sign buffer=' . bufnr('%')
+ sign undefine Sign
+
+ " Listing placed sign should show that sign is deleted.
+ let a=execute('sign place')
+ call assert_equal("\n--- Signs ---\nSigns for foobar:\n line=1 id=41 name=[Deleted]\n", a)
+
+ sign unplace 41
+ let a=execute('sign place')
+ call assert_equal("\n--- Signs ---\n", a)
+endfunc
+
+func Test_sign_completion()
+ sign define Sign1 text=x
+ sign define Sign2 text=y
+
+ call feedkeys(":sign \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign define jump list place undefine unplace', @:)
+
+ call feedkeys(":sign define Sign \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign define Sign icon= linehl= text= texthl=', @:)
+
+ call feedkeys(":sign define Sign linehl=Spell\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign define Sign linehl=SpellBad SpellCap SpellLocal SpellRare', @:)
+
+ call writefile(['foo'], 'XsignOne')
+ call writefile(['bar'], 'XsignTwo')
+ call feedkeys(":sign define Sign icon=Xsig\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign define Sign icon=XsignOne XsignTwo', @:)
+ call delete('XsignOne')
+ call delete('XsignTwo')
+
+ call feedkeys(":sign undefine \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign undefine Sign1 Sign2', @:)
+
+ call feedkeys(":sign place 1 \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign place 1 buffer= file= line= name=', @:)
+
+ call feedkeys(":sign place 1 name=\<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign place 1 name=Sign1 Sign2', @:)
+
+ call feedkeys(":sign unplace 1 \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign unplace 1 buffer= file=', @:)
+
+ call feedkeys(":sign list \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign list Sign1 Sign2', @:)
+
+ call feedkeys(":sign jump 1 \<C-A>\<C-B>\"\<CR>", 'tx')
+ call assert_equal('"sign jump 1 buffer= file=', @:)
+
+ sign undefine Sign1
+ sign undefine Sign2
+endfunc
+
+func Test_sign_invalid_commands()
+ call assert_fails('sign', 'E471:')
+ call assert_fails('sign jump', 'E471:')
+ call assert_fails('sign xxx', 'E160:')
+ call assert_fails('sign define', 'E156:')
+ call assert_fails('sign define Sign1 xxx', 'E475:')
+ call assert_fails('sign undefine', 'E156:')
+ call assert_fails('sign list xxx', 'E155:')
+ call assert_fails('sign place 1 buffer=', 'E158:')
+ call assert_fails('sign define Sign2 text=', 'E239:')
+endfunc
+
+func Test_sign_delete_buffer()
+ new
+ sign define Sign text=x
+ let bufnr = bufnr('%')
+ new
+ exe 'bd ' . bufnr
+ exe 'sign place 61 line=3 name=Sign buffer=' . bufnr
+ call assert_fails('sign jump 61 buffer=' . bufnr, 'E934:')
+ sign unplace 61
+ sign undefine Sign
+endfunc
diff --git a/src/nvim/testdir/test_statusline.vim b/src/nvim/testdir/test_statusline.vim
new file mode 100644
index 0000000000..82898df92d
--- /dev/null
+++ b/src/nvim/testdir/test_statusline.vim
@@ -0,0 +1,39 @@
+function! StatuslineWithCaughtError()
+ let s:func_in_statusline_called = 1
+ try
+ call eval('unknown expression')
+ catch
+ endtry
+ return ''
+endfunction
+
+function! StatuslineWithError()
+ let s:func_in_statusline_called = 1
+ call eval('unknown expression')
+ return ''
+endfunction
+
+function! Test_caught_error_in_statusline()
+ let s:func_in_statusline_called = 0
+ set laststatus=2
+ let statusline = '%{StatuslineWithCaughtError()}'
+ let &statusline = statusline
+ redrawstatus
+ call assert_true(s:func_in_statusline_called)
+ call assert_equal(statusline, &statusline)
+ set statusline=
+endfunction
+
+function! Test_statusline_will_be_disabled_with_error()
+ let s:func_in_statusline_called = 0
+ set laststatus=2
+ let statusline = '%{StatuslineWithError()}'
+ try
+ let &statusline = statusline
+ redrawstatus
+ catch
+ endtry
+ call assert_true(s:func_in_statusline_called)
+ call assert_equal('', &statusline)
+ set statusline=
+endfunction
diff --git a/src/nvim/testdir/test_syn_attr.vim b/src/nvim/testdir/test_syn_attr.vim
new file mode 100644
index 0000000000..64aab3411d
--- /dev/null
+++ b/src/nvim/testdir/test_syn_attr.vim
@@ -0,0 +1,28 @@
+" Test syntax highlighting functions.
+
+func Test_missing_attr()
+ hi Mine cterm=italic
+ call assert_equal('Mine', synIDattr(hlID("Mine"), "name"))
+ call assert_equal('1', synIDattr(hlID("Mine"), "italic", 'cterm'))
+ hi Mine cterm=inverse
+ call assert_equal('1', synIDattr(hlID("Mine"), "inverse", 'cterm'))
+ hi Mine cterm=standout gui=undercurl
+ call assert_equal('1', synIDattr(hlID("Mine"), "standout", 'cterm'))
+ call assert_equal('1', synIDattr(hlID("Mine"), "undercurl", 'gui'))
+ hi Mine cterm=NONE gui=NONE
+ call assert_equal('', synIDattr(hlID("Mine"), "italic", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "inverse", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "standout", 'cterm'))
+ call assert_equal('', synIDattr(hlID("Mine"), "undercurl", 'gui'))
+
+ if has('gui')
+ let fontname = getfontname()
+ if fontname == ''
+ let fontname = 'something'
+ endif
+ exe "hi Mine guifg=blue guibg=red font='" . fontname . "'"
+ call assert_equal('blue', synIDattr(hlID("Mine"), "fg", 'gui'))
+ call assert_equal('red', synIDattr(hlID("Mine"), "bg", 'gui'))
+ call assert_equal(fontname, synIDattr(hlID("Mine"), "font", 'gui'))
+ endif
+endfunc
diff --git a/src/nvim/testdir/test_syntax.vim b/src/nvim/testdir/test_syntax.vim
new file mode 100644
index 0000000000..af2cbbfe8e
--- /dev/null
+++ b/src/nvim/testdir/test_syntax.vim
@@ -0,0 +1,78 @@
+" Test for syntax and syntax iskeyword option
+
+func GetSyntaxItem(pat)
+ let c = ''
+ let a = ['a', getreg('a'), getregtype('a')]
+ 0
+ redraw!
+ call search(a:pat, 'W')
+ let synid = synID(line('.'), col('.'), 1)
+ while synid == synID(line('.'), col('.'), 1)
+ norm! v"ay
+ " stop at whitespace
+ if @a =~# '\s'
+ break
+ endif
+ let c .= @a
+ norm! l
+ endw
+ call call('setreg', a)
+ 0
+ return c
+endfunc
+
+func Test_syn_iskeyword()
+ new
+ call setline(1, [
+ \ 'CREATE TABLE FOOBAR(',
+ \ ' DLTD_BY VARCHAR2(100)',
+ \ ');',
+ \ ''])
+
+ syntax on
+ set ft=sql
+ syn match SYN /C\k\+\>/
+ hi link SYN ErrorMsg
+ call assert_equal('DLTD_BY', GetSyntaxItem('DLTD'))
+ /\<D\k\+\>/:norm! ygn
+ call assert_equal('DLTD_BY', @0)
+ redir @c
+ syn iskeyword
+ redir END
+ call assert_equal("\nsyntax iskeyword not set", @c)
+
+ syn iskeyword @,48-57,_,192-255
+ redir @c
+ syn iskeyword
+ redir END
+ call assert_equal("\nsyntax iskeyword @,48-57,_,192-255", @c)
+
+ setlocal isk-=_
+ call assert_equal('DLTD_BY', GetSyntaxItem('DLTD'))
+ /\<D\k\+\>/:norm! ygn
+ let b2=@0
+ call assert_equal('DLTD', @0)
+
+ syn iskeyword clear
+ redir @c
+ syn iskeyword
+ redir END
+ call assert_equal("\nsyntax iskeyword not set", @c)
+
+ quit!
+endfunc
+
+func Test_syntax_after_reload()
+ split Xsomefile
+ call setline(1, ['hello', 'there'])
+ w!
+ only!
+ setl filetype=hello
+ au FileType hello let g:gotit = 1
+ call assert_false(exists('g:gotit'))
+ edit other
+ buf Xsomefile
+ call assert_equal('hello', &filetype)
+ call assert_true(exists('g:gotit'))
+ call delete('Xsomefile')
+endfunc
diff --git a/src/nvim/testdir/test_tabline.vim b/src/nvim/testdir/test_tabline.vim
new file mode 100644
index 0000000000..6c7a02d650
--- /dev/null
+++ b/src/nvim/testdir/test_tabline.vim
@@ -0,0 +1,43 @@
+function! TablineWithCaughtError()
+ let s:func_in_tabline_called = 1
+ try
+ call eval('unknown expression')
+ catch
+ endtry
+ return ''
+endfunction
+
+function! TablineWithError()
+ let s:func_in_tabline_called = 1
+ call eval('unknown expression')
+ return ''
+endfunction
+
+function! Test_caught_error_in_tabline()
+ let showtabline_save = &showtabline
+ set showtabline=2
+ let s:func_in_tabline_called = 0
+ let tabline = '%{TablineWithCaughtError()}'
+ let &tabline = tabline
+ redraw!
+ call assert_true(s:func_in_tabline_called)
+ call assert_equal(tabline, &tabline)
+ set tabline=
+ let &showtabline = showtabline_save
+endfunction
+
+function! Test_tabline_will_be_disabled_with_error()
+ let showtabline_save = &showtabline
+ set showtabline=2
+ let s:func_in_tabline_called = 0
+ let tabline = '%{TablineWithError()}'
+ try
+ let &tabline = tabline
+ redraw!
+ catch
+ endtry
+ call assert_true(s:func_in_tabline_called)
+ call assert_equal('', &tabline)
+ set tabline=
+ let &showtabline = showtabline_save
+endfunction
diff --git a/src/nvim/testdir/test_tabpage.vim b/src/nvim/testdir/test_tabpage.vim
new file mode 100644
index 0000000000..7c3039ba24
--- /dev/null
+++ b/src/nvim/testdir/test_tabpage.vim
@@ -0,0 +1,256 @@
+" Tests for tabpage
+
+function Test_tabpage()
+ bw!
+ " Simple test for opening and closing a tab page
+ tabnew
+ call assert_equal(2, tabpagenr())
+ quit
+
+ " Open three tab pages and use ":tabdo"
+ 0tabnew
+ 1tabnew
+ $tabnew
+ tabdo call append(line('$'), tabpagenr())
+ tabclose! 2
+ tabrewind
+ let line1 = getline('$')
+ undo
+ q
+ tablast
+ let line2 = getline('$')
+ q!
+ call append(line('$'), line1)
+ call append(line('$'), line2)
+ unlet line1 line2
+ call assert_equal(['', '3', '1', '4'], getline(1, '$'))
+ "
+ " Test for settabvar() and gettabvar() functions. Open a new tab page and
+ " set 3 variables to a number, string and a list. Verify that the variables
+ " are correctly set.
+ tabnew
+ tabfirst
+ call settabvar(2, 'val_num', 100)
+ call settabvar(2, 'val_str', 'SetTabVar test')
+ call settabvar(2, 'val_list', ['red', 'blue', 'green'])
+ "
+ call assert_true(gettabvar(2, 'val_num') == 100 && gettabvar(2, 'val_str') == 'SetTabVar test' && gettabvar(2, 'val_list') == ['red', 'blue', 'green'])
+
+ tabnext 2
+ call assert_true(t:val_num == 100 && t:val_str == 'SetTabVar test' && t:val_list == ['red', 'blue', 'green'])
+ tabclose
+
+ if has('nvim') || has('gui') || has('clientserver')
+ " Test for ":tab drop exist-file" to keep current window.
+ sp test1
+ tab drop test1
+ call assert_true(tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1)
+ close
+ "
+ "
+ " Test for ":tab drop new-file" to keep current window of tabpage 1.
+ split
+ tab drop newfile
+ call assert_true(tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1)
+ tabclose
+ q
+ "
+ "
+ " Test for ":tab drop multi-opend-file" to keep current tabpage and window.
+ new test1
+ tabnew
+ new test1
+ tab drop test1
+ call assert_true(tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1)
+ tabclose
+ q
+ "
+ "
+ " Test for ":tab drop vertical-split-window" to jump test1 buffer
+ tabedit test1
+ vnew
+ tabfirst
+ tab drop test1
+ call assert_equal([2, 2, 2, 2], [tabpagenr('$'), tabpagenr(), tabpagewinnr(2, '$'), tabpagewinnr(2)])
+ 1tabonly
+ endif
+ "
+ "
+ for i in range(9) | tabnew | endfor
+ normal! 1gt
+ call assert_equal(1, tabpagenr())
+ tabmove 5
+ call assert_equal(5, tabpagenr())
+ .tabmove
+ call assert_equal(5, tabpagenr())
+ tabmove -
+ call assert_equal(4, tabpagenr())
+ tabmove +
+ call assert_equal(5, tabpagenr())
+ tabmove -2
+ call assert_equal(3, tabpagenr())
+ tabmove +4
+ call assert_equal(7, tabpagenr())
+ tabmove
+ call assert_equal(10, tabpagenr())
+ tabmove -20
+ call assert_equal(1, tabpagenr())
+ tabmove +20
+ call assert_equal(10, tabpagenr())
+ 0tabmove
+ call assert_equal(1, tabpagenr())
+ $tabmove
+ call assert_equal(10, tabpagenr())
+ tabmove 0
+ call assert_equal(1, tabpagenr())
+ tabmove $
+ call assert_equal(10, tabpagenr())
+ 3tabmove
+ call assert_equal(4, tabpagenr())
+ 7tabmove 5
+ call assert_equal(5, tabpagenr())
+ call assert_fails("tabmove foo", 'E474:')
+endfunc
+
+" Test autocommands
+function Test_tabpage_with_autocmd()
+ if !has('autocmd')
+ return
+ endif
+ tabonly!
+ command -nargs=1 -bar C :call add(s:li, '=== ' . <q-args> . ' ===')|<args>
+ augroup TestTabpageGroup
+ au!
+ autocmd TabEnter * call add(s:li, 'TabEnter')
+ autocmd WinEnter * call add(s:li, 'WinEnter')
+ autocmd BufEnter * call add(s:li, 'BufEnter')
+ autocmd TabLeave * call add(s:li, 'TabLeave')
+ autocmd WinLeave * call add(s:li, 'WinLeave')
+ autocmd BufLeave * call add(s:li, 'BufLeave')
+ augroup END
+
+ let s:li = []
+ let t:a='a'
+ C tab split
+ call assert_equal(['=== tab split ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter'], s:li)
+ let s:li = []
+ let t:a='b'
+ C tabnew
+ call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
+ let t:a='c'
+ let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
+ call assert_equal(['a', 'b', 'c'], s:li)
+
+ let s:li = []
+ C call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)')
+ call assert_equal(["=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ''a'', v:val*2)') ==="], s:li)
+ let s:li = split(join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')) , '\s\+')
+ call assert_equal(['2', '4', '6'], s:li)
+
+ let s:li = []
+ let w:a='a'
+ C vsplit
+ call assert_equal(['=== vsplit ===', 'WinLeave', 'WinEnter'], s:li)
+ let s:li = []
+ let w:a='a'
+ let tabn=tabpagenr()
+ let winr=range(1, winnr('$'))
+ C tabnext 1
+ call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
+ let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
+ call assert_equal(['a', 'a'], s:li)
+ let s:li = []
+ C call map(copy(winr), 'settabwinvar('.tabn.', v:val, ''a'', v:val*2)')
+ let s:li = split(join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')), '\s\+')
+ call assert_equal(['2', '4'], s:li)
+
+ augroup TabDestructive
+ autocmd TabEnter * :C tabnext 2 | C tabclose 3
+ augroup END
+ let s:li = []
+ C tabnext 3
+ call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ==='], s:li)
+ call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
+
+ autocmd! TabDestructive TabEnter
+ let s:li = []
+ C tabnew
+ call assert_equal(['=== tabnew ===', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter'], s:li)
+ let s:li = []
+ C tabnext 1
+ call assert_equal(['=== tabnext 1 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter'], s:li)
+
+ autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
+ let s:li = []
+ C tabnext 3
+ call assert_equal(['=== tabnext 3 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', 'BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', '=== tabnext 2 ===', '=== tabclose 3 ===', 'BufEnter', '=== tabclose 3 ==='], s:li)
+ call assert_equal(['2/2'], [tabpagenr().'/'.tabpagenr('$')])
+
+ delcommand C
+ autocmd! TabDestructive
+ augroup! TabDestructive
+ autocmd! TestTabpageGroup
+ augroup! TestTabpageGroup
+ tabonly!
+ bw!
+endfunction
+
+function Test_tabpage_with_tab_modifier()
+ for n in range(4)
+ tabedit
+ endfor
+
+ function s:check_tab(pre_nr, cmd, post_nr)
+ exec 'tabnext ' . a:pre_nr
+ exec a:cmd
+ call assert_equal(a:post_nr, tabpagenr())
+ call assert_equal('help', &filetype)
+ helpclose
+ endfunc
+
+ call s:check_tab(1, 'tab help', 2)
+ call s:check_tab(1, '3tab help', 4)
+ call s:check_tab(1, '.tab help', 2)
+ call s:check_tab(1, '.+1tab help', 3)
+ call s:check_tab(1, '0tab help', 1)
+ call s:check_tab(2, '+tab help', 4)
+ call s:check_tab(2, '+2tab help', 5)
+ call s:check_tab(4, '-tab help', 4)
+ call s:check_tab(4, '-2tab help', 3)
+ call s:check_tab(3, '$tab help', 6)
+ call assert_fails('99tab help', 'E16:')
+ call assert_fails('+99tab help', 'E16:')
+ call assert_fails('-99tab help', 'E16:')
+
+ delfunction s:check_tab
+ tabonly!
+ bw!
+endfunction
+
+func Test_tabnext_on_buf_unload1()
+ " This once caused a crash
+ new
+ tabedit
+ tabfirst
+ au BufUnload <buffer> tabnext
+ q
+
+ while tabpagenr('$') > 1
+ bwipe!
+ endwhile
+endfunc
+
+func Test_tabnext_on_buf_unload2()
+ " This once caused a crash
+ tabedit
+ autocmd BufUnload <buffer> tabnext
+ file x
+ edit y
+
+ while tabpagenr('$') > 1
+ bwipe!
+ endwhile
+endfunc
+
+
+" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/nvim/testdir/test_tagjump.vim b/src/nvim/testdir/test_tagjump.vim
new file mode 100644
index 0000000000..d8a333f44c
--- /dev/null
+++ b/src/nvim/testdir/test_tagjump.vim
@@ -0,0 +1,9 @@
+" Tests for tagjump (tags and special searches)
+
+" SEGV occurs in older versions. (At least 7.4.1748 or older)
+func Test_ptag_with_notagstack()
+ set notagstack
+ call assert_fails('ptag does_not_exist_tag_name', 'E426')
+ set tagstack&vim
+endfunc
+" vim: sw=2 et
diff --git a/src/nvim/testdir/test_timers.vim b/src/nvim/testdir/test_timers.vim
new file mode 100644
index 0000000000..d92cbe6897
--- /dev/null
+++ b/src/nvim/testdir/test_timers.vim
@@ -0,0 +1,55 @@
+" Test for timers
+
+if !has('timers')
+ finish
+endif
+
+func MyHandler(timer)
+ let s:val += 1
+endfunc
+
+func MyHandlerWithLists(lists, timer)
+ let x = string(a:lists)
+endfunc
+
+func Test_oneshot()
+ let s:val = 0
+ let timer = timer_start(50, 'MyHandler')
+ sleep 200m
+ call assert_equal(1, s:val)
+endfunc
+
+func Test_repeat_three()
+ let s:val = 0
+ let timer = timer_start(50, 'MyHandler', {'repeat': 3})
+ sleep 500m
+ call assert_equal(3, s:val)
+endfunc
+
+func Test_repeat_many()
+ let s:val = 0
+ let timer = timer_start(50, 'MyHandler', {'repeat': -1})
+ sleep 200m
+ call timer_stop(timer)
+ call assert_true(s:val > 1)
+ call assert_true(s:val < 5)
+endfunc
+
+func Test_with_partial_callback()
+ let s:val = 0
+ let s:meow = {}
+ function s:meow.bite(...)
+ let s:val += 1
+ endfunction
+
+ call timer_start(50, s:meow.bite)
+ sleep 200m
+ call assert_equal(1, s:val)
+endfunc
+
+func Test_retain_partial()
+ call timer_start(100, function('MyHandlerWithLists', [['a']]))
+ call garbagecollect()
+ sleep 200m
+endfunc
+" vim: ts=2 sw=0 et
diff --git a/src/nvim/testdir/test_unlet.vim b/src/nvim/testdir/test_unlet.vim
new file mode 100644
index 0000000000..f6705997a9
--- /dev/null
+++ b/src/nvim/testdir/test_unlet.vim
@@ -0,0 +1,26 @@
+" Tests for :unlet
+
+func Test_read_only()
+ try
+ " this caused a crash
+ unlet count
+ catch
+ call assert_true(v:exception =~ ':E795:')
+ endtry
+endfunc
+
+func Test_existing()
+ let does_exist = 1
+ call assert_true(exists('does_exist'))
+ unlet does_exist
+ call assert_false(exists('does_exist'))
+endfunc
+
+func Test_not_existing()
+ unlet! does_not_exist
+ try
+ unlet does_not_exist
+ catch
+ call assert_true(v:exception =~ ':E108:')
+ endtry
+endfunc
diff --git a/src/nvim/testdir/test_usercommands.vim b/src/nvim/testdir/test_usercommands.vim
new file mode 100644
index 0000000000..d0864ec64c
--- /dev/null
+++ b/src/nvim/testdir/test_usercommands.vim
@@ -0,0 +1,104 @@
+" Tests for user defined commands
+
+" Test for <mods> in user defined commands
+function Test_cmdmods()
+ let g:mods = ''
+
+ command! -nargs=* MyCmd let g:mods .= '<mods> '
+
+ MyCmd
+ aboveleft MyCmd
+ abo MyCmd
+ belowright MyCmd
+ bel MyCmd
+ botright MyCmd
+ bo MyCmd
+ browse MyCmd
+ bro MyCmd
+ confirm MyCmd
+ conf MyCmd
+ hide MyCmd
+ hid MyCmd
+ keepalt MyCmd
+ keepa MyCmd
+ keepjumps MyCmd
+ keepj MyCmd
+ keepmarks MyCmd
+ kee MyCmd
+ keeppatterns MyCmd
+ keepp MyCmd
+ leftabove MyCmd " results in :aboveleft
+ lefta MyCmd
+ lockmarks MyCmd
+ loc MyCmd
+ " noautocmd MyCmd
+ noswapfile MyCmd
+ nos MyCmd
+ rightbelow MyCmd " results in :belowright
+ rightb MyCmd
+ " sandbox MyCmd
+ silent MyCmd
+ sil MyCmd
+ tab MyCmd
+ topleft MyCmd
+ to MyCmd
+ " unsilent MyCmd
+ verbose MyCmd
+ verb MyCmd
+ vertical MyCmd
+ vert MyCmd
+
+ aboveleft belowright botright browse confirm hide keepalt keepjumps
+ \ keepmarks keeppatterns lockmarks noswapfile silent tab
+ \ topleft verbose vertical MyCmd
+
+ call assert_equal(' aboveleft aboveleft belowright belowright botright ' .
+ \ 'botright browse browse confirm confirm hide hide ' .
+ \ 'keepalt keepalt keepjumps keepjumps keepmarks keepmarks ' .
+ \ 'keeppatterns keeppatterns aboveleft aboveleft lockmarks lockmarks noswapfile ' .
+ \ 'noswapfile belowright belowright silent silent tab topleft topleft verbose verbose ' .
+ \ 'vertical vertical ' .
+ \ 'aboveleft belowright botright browse confirm hide keepalt keepjumps ' .
+ \ 'keepmarks keeppatterns lockmarks noswapfile silent tab topleft ' .
+ \ 'verbose vertical ', g:mods)
+
+ let g:mods = ''
+ command! -nargs=* MyQCmd let g:mods .= '<q-mods> '
+
+ vertical MyQCmd
+ call assert_equal('"vertical" ', g:mods)
+
+ delcommand MyCmd
+ delcommand MyQCmd
+ unlet g:mods
+endfunction
+
+func Test_Ambiguous()
+ command Doit let g:didit = 'yes'
+ command Dothat let g:didthat = 'also'
+ call assert_fails('Do', 'E464:')
+ Doit
+ call assert_equal('yes', g:didit)
+ Dothat
+ call assert_equal('also', g:didthat)
+ unlet g:didit
+ unlet g:didthat
+
+ delcommand Doit
+ Do
+ call assert_equal('also', g:didthat)
+ delcommand Dothat
+endfunc
+
+func Test_CmdUndefined()
+ call assert_fails('Doit', 'E492:')
+ au CmdUndefined Doit :command Doit let g:didit = 'yes'
+ Doit
+ call assert_equal('yes', g:didit)
+ delcommand Doit
+
+ call assert_fails('Dothat', 'E492:')
+ au CmdUndefined * let g:didnot = 'yes'
+ call assert_fails('Dothat', 'E492:')
+ call assert_equal('yes', g:didnot)
+endfunc
diff --git a/src/nvim/testdir/test_viml.vim b/src/nvim/testdir/test_viml.vim
index 9f0618bd45..a2997b6d4d 100644
--- a/src/nvim/testdir/test_viml.vim
+++ b/src/nvim/testdir/test_viml.vim
@@ -55,16 +55,26 @@ endfunction
" ExecAsScript - Source a temporary script made from a function. {{{2
"
" Make a temporary script file from the function a:funcname, ":source" it, and
-" delete it afterwards.
+" delete it afterwards. However, if an exception is thrown the file may remain,
+" the caller should call DeleteTheScript() afterwards.
+let s:script_name = ''
function! ExecAsScript(funcname)
" Make a script from the function passed as argument.
- let script = MakeScript(a:funcname)
+ let s:script_name = MakeScript(a:funcname)
" Source and delete the script.
- exec "source" script
- call delete(script)
+ exec "source" s:script_name
+ call delete(s:script_name)
+ let s:script_name = ''
endfunction
+function! DeleteTheScript()
+ if s:script_name
+ call delete(s:script_name)
+ let s:script_name = ''
+ endif
+endfunc
+
com! -nargs=1 -bar ExecAsScript call ExecAsScript(<f-args>)
@@ -143,6 +153,7 @@ func Test_endwhile_script()
XpathINIT
ExecAsScript T1_F
Xpath 'F'
+ call DeleteTheScript()
try
ExecAsScript T1_G
@@ -152,6 +163,7 @@ func Test_endwhile_script()
Xpath 'x'
endtry
Xpath 'G'
+ call DeleteTheScript()
call assert_equal('abcFhijxG', g:Xpath)
endfunc
@@ -260,6 +272,7 @@ function Test_finish()
XpathINIT
ExecAsScript T4_F
Xpath '5'
+ call DeleteTheScript()
call assert_equal('ab3e3b2c25', g:Xpath)
endfunction
@@ -922,6 +935,134 @@ func Test_curlies()
call assert_equal(77, g:a['t'])
endfunc
+"-------------------------------------------------------------------------------
+" Test 91: using type(). {{{1
+"-------------------------------------------------------------------------------
+
+func Test_type()
+ call assert_equal(0, type(0))
+ call assert_equal(1, type(""))
+ call assert_equal(2, type(function("tr")))
+ call assert_equal(2, type(function("tr", [8])))
+ call assert_equal(3, type([]))
+ call assert_equal(4, type({}))
+ call assert_equal(5, type(0.0))
+ call assert_equal(6, type(v:false))
+ call assert_equal(6, type(v:true))
+ call assert_equal(7, type(v:null))
+ call assert_equal(v:t_number, type(0))
+ call assert_equal(v:t_string, type(""))
+ call assert_equal(v:t_func, type(function("tr")))
+ call assert_equal(v:t_list, type([]))
+ call assert_equal(v:t_dict, type({}))
+ call assert_equal(v:t_float, type(0.0))
+ call assert_equal(v:t_bool, type(v:false))
+ call assert_equal(v:t_bool, type(v:true))
+endfunc
+
+"-------------------------------------------------------------------------------
+" Test 92: skipping code {{{1
+"-------------------------------------------------------------------------------
+
+func Test_skip()
+ let Fn = function('Test_type')
+ call assert_false(0 && Fn[1])
+ call assert_false(0 && string(Fn))
+ call assert_false(0 && len(Fn))
+ let l = []
+ call assert_false(0 && l[1])
+ call assert_false(0 && string(l))
+ call assert_false(0 && len(l))
+ let f = 1.0
+ call assert_false(0 && f[1])
+ call assert_false(0 && string(f))
+ call assert_false(0 && len(f))
+ let sp = v:null
+ call assert_false(0 && sp[1])
+ call assert_false(0 && string(sp))
+ call assert_false(0 && len(sp))
+
+endfunc
+
+"-------------------------------------------------------------------------------
+" Test 93: :echo and string() {{{1
+"-------------------------------------------------------------------------------
+
+func Test_echo_and_string()
+ " String
+ let a = 'foo bar'
+ redir => result
+ echo a
+ echo string(a)
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["foo bar",
+ \ "'foo bar'"], l)
+
+ " Float
+ if has('float')
+ let a = -1.2e0
+ redir => result
+ echo a
+ echo string(a)
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["-1.2",
+ \ "-1.2"], l)
+ endif
+
+ " Funcref
+ redir => result
+ echo function('string')
+ echo string(function('string'))
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["string",
+ \ "function('string')"], l)
+
+ " Empty dictionaries in a list
+ let a = {}
+ redir => result
+ echo [a, a, a]
+ echo string([a, a, a])
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["[{}, {}, {}]",
+ \ "[{}, {}, {}]"], l)
+
+ " Empty dictionaries in a dictionary
+ let a = {}
+ let b = {"a": a, "b": a}
+ redir => result
+ echo b
+ echo string(b)
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["{'a': {}, 'b': {}}",
+ \ "{'a': {}, 'b': {}}"], l)
+
+ " Empty lists in a list
+ let a = []
+ redir => result
+ echo [a, a, a]
+ echo string([a, a, a])
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["[[], [], []]",
+ \ "[[], [], []]"], l)
+
+ " Empty lists in a dictionary
+ let a = []
+ let b = {"a": a, "b": a}
+ redir => result
+ echo b
+ echo string(b)
+ redir END
+ let l = split(result, "\n")
+ call assert_equal(["{'a': [], 'b': []}",
+ \ "{'a': [], 'b': []}"], l)
+
+endfunc
"-------------------------------------------------------------------------------
" Modelines {{{1
diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim
new file mode 100644
index 0000000000..cf0e535937
--- /dev/null
+++ b/src/nvim/testdir/test_visual.vim
@@ -0,0 +1,17 @@
+" Tests for Visual mode
+if !has('multi_byte')
+ finish
+endif
+
+if !has('visual')
+ finish
+endif
+
+func Test_block_shift_multibyte()
+ split
+ call setline(1, ['xヹxxx', 'ヹxxx'])
+ exe "normal 1G0l\<C-V>jl>"
+ call assert_equal('x ヹxxx', getline(1))
+ call assert_equal(' ヹxxx', getline(2))
+ q!
+endfunc
diff --git a/src/nvim/testdir/test_window_cmd.vim b/src/nvim/testdir/test_window_cmd.vim
new file mode 100644
index 0000000000..b7f41a711b
--- /dev/null
+++ b/src/nvim/testdir/test_window_cmd.vim
@@ -0,0 +1,70 @@
+" Tests for window cmd (:wincmd, :split, :vsplit, :resize and etc...)
+
+func Test_window_cmd_ls0_with_split()
+ set ls=0
+ set splitbelow
+ split
+ quit
+ call assert_equal(0, &lines - &cmdheight - winheight(0))
+ new | only!
+ "
+ set splitbelow&vim
+ botright split
+ quit
+ call assert_equal(0, &lines - &cmdheight - winheight(0))
+ new | only!
+ set ls&vim
+endfunc
+
+func Test_window_cmd_cmdwin_with_vsp()
+ let efmt='Expected 0 but got %d (in ls=%d, %s window)'
+ for v in range(0, 2)
+ exec "set ls=" . v
+ vsplit
+ call feedkeys("q:\<CR>")
+ let ac = &lines - (&cmdheight + winheight(0) + !!v)
+ let emsg = printf(efmt, ac, v, 'left')
+ call assert_equal(0, ac, emsg)
+ wincmd w
+ let ac = &lines - (&cmdheight + winheight(0) + !!v)
+ let emsg = printf(efmt, ac, v, 'right')
+ call assert_equal(0, ac, emsg)
+ new | only!
+ endfor
+ set ls&vim
+endfunc
+
+function Test_window_cmd_wincmd_gf()
+ let fname = 'test_gf.txt'
+ let swp_fname = '.' . fname . '.swp'
+ call writefile([], fname)
+ call writefile([], swp_fname)
+ function s:swap_exists()
+ let v:swapchoice = s:swap_choice
+ endfunc
+ augroup test_window_cmd_wincmd_gf
+ autocmd!
+ exec "autocmd SwapExists " . fname . " call s:swap_exists()"
+ augroup END
+
+ call setline(1, fname)
+ " (E)dit anyway
+ let s:swap_choice = 'e'
+ wincmd gf
+ call assert_equal(2, tabpagenr())
+ call assert_equal(fname, bufname("%"))
+ quit!
+
+ " (Q)uit
+ let s:swap_choice = 'q'
+ wincmd gf
+ call assert_equal(1, tabpagenr())
+ call assert_notequal(fname, bufname("%"))
+ new | only!
+
+ call delete(fname)
+ call delete(swp_fname)
+ augroup! test_window_cmd_wincmd_gf
+endfunc
+
+" vim: sw=2 et
diff --git a/src/nvim/testdir/test_window_id.vim b/src/nvim/testdir/test_window_id.vim
new file mode 100644
index 0000000000..66656e1d0a
--- /dev/null
+++ b/src/nvim/testdir/test_window_id.vim
@@ -0,0 +1,94 @@
+" Test using the window ID.
+
+func Test_win_getid()
+ edit one
+ let id1 = win_getid()
+ let w:one = 'one'
+ split two
+ let id2 = win_getid()
+ let bufnr2 = bufnr('%')
+ let w:two = 'two'
+ split three
+ let id3 = win_getid()
+ let w:three = 'three'
+ tabnew
+ edit four
+ let id4 = win_getid()
+ let w:four = 'four'
+ split five
+ let id5 = win_getid()
+ let bufnr5 = bufnr('%')
+ let w:five = 'five'
+ tabnext
+
+ wincmd w
+ call assert_equal("two", expand("%"))
+ call assert_equal(id2, win_getid())
+ let nr2 = winnr()
+ wincmd w
+ call assert_equal("one", expand("%"))
+ call assert_equal(id1, win_getid())
+ let nr1 = winnr()
+ wincmd w
+ call assert_equal("three", expand("%"))
+ call assert_equal(id3, win_getid())
+ let nr3 = winnr()
+ call assert_equal('one', getwinvar(id1, 'one'))
+ call assert_equal('two', getwinvar(id2, 'two'))
+ call assert_equal('three', getwinvar(id3, 'three'))
+ tabnext
+ call assert_equal("five", expand("%"))
+ call assert_equal(id5, win_getid())
+ let nr5 = winnr()
+ wincmd w
+ call assert_equal("four", expand("%"))
+ call assert_equal(id4, win_getid())
+ let nr4 = winnr()
+ call assert_equal('four', getwinvar(id4, 'four'))
+ call assert_equal('five', getwinvar(id5, 'five'))
+ call settabwinvar(1, id2, 'two', '2')
+ call setwinvar(id4, 'four', '4')
+ tabnext
+ call assert_equal('4', gettabwinvar(2, id4, 'four'))
+ call assert_equal('five', gettabwinvar(2, id5, 'five'))
+ call assert_equal('2', getwinvar(id2, 'two'))
+
+ exe nr1 . "wincmd w"
+ call assert_equal(id1, win_getid())
+ exe nr2 . "wincmd w"
+ call assert_equal(id2, win_getid())
+ exe nr3 . "wincmd w"
+ call assert_equal(id3, win_getid())
+ tabnext
+ exe nr4 . "wincmd w"
+ call assert_equal(id4, win_getid())
+ exe nr5 . "wincmd w"
+ call assert_equal(id5, win_getid())
+
+ call win_gotoid(id2)
+ call assert_equal("two", expand("%"))
+ call win_gotoid(id4)
+ call assert_equal("four", expand("%"))
+ call win_gotoid(id1)
+ call assert_equal("one", expand("%"))
+ call win_gotoid(id5)
+ call assert_equal("five", expand("%"))
+
+ call assert_equal(0, win_id2win(9999))
+ call assert_equal(nr5, win_id2win(id5))
+ call assert_equal(0, win_id2win(id1))
+ tabnext
+ call assert_equal(nr1, win_id2win(id1))
+
+ call assert_equal([0, 0], win_id2tabwin(9999))
+ call assert_equal([1, nr2], win_id2tabwin(id2))
+ call assert_equal([2, nr4], win_id2tabwin(id4))
+
+ call assert_equal([], win_findbuf(9999))
+ call assert_equal([id2], win_findbuf(bufnr2))
+ call win_gotoid(id5)
+ split
+ call assert_equal(sort([id5, win_getid()]), sort(win_findbuf(bufnr5)))
+
+ only!
+endfunc
diff --git a/src/nvim/tui/input.c b/src/nvim/tui/input.c
index 99eb230a88..8e5adb14f9 100644
--- a/src/nvim/tui/input.c
+++ b/src/nvim/tui/input.c
@@ -4,7 +4,7 @@
#include "nvim/api/vim.h"
#include "nvim/api/private/helpers.h"
#include "nvim/ascii.h"
-#include "nvim/misc2.h"
+#include "nvim/main.h"
#include "nvim/os/os.h"
#include "nvim/os/input.h"
#include "nvim/event/rstream.h"
@@ -31,13 +31,20 @@ void term_input_init(TermInput *input, Loop *loop)
if (!term) {
term = ""; // termkey_new_abstract assumes non-null (#2745)
}
- int enc_flag = enc_utf8 ? TERMKEY_FLAG_UTF8 : TERMKEY_FLAG_RAW;
- input->tk = termkey_new_abstract(term, enc_flag);
+
+#if TERMKEY_VERSION_MAJOR > 0 || TERMKEY_VERSION_MINOR > 18
+ input->tk = termkey_new_abstract(term,
+ TERMKEY_FLAG_UTF8 | TERMKEY_FLAG_NOSTART);
+ termkey_hook_terminfo_getstr(input->tk, input->tk_ti_hook_fn, NULL);
+ termkey_start(input->tk);
+#else
+ input->tk = termkey_new_abstract(term, TERMKEY_FLAG_UTF8);
+#endif
int curflags = termkey_get_canonflags(input->tk);
termkey_set_canonflags(input->tk, curflags | TERMKEY_CANON_DELBS);
// setup input handle
- rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff, input);
+ rstream_init_fd(loop, &input->read_stream, input->in_fd, 0xfff);
// initialize a timer handle for handling ESC with libtermkey
time_watcher_init(loop, &input->timer_handle, input);
}
@@ -48,13 +55,13 @@ void term_input_destroy(TermInput *input)
uv_mutex_destroy(&input->key_buffer_mutex);
uv_cond_destroy(&input->key_buffer_cond);
time_watcher_close(&input->timer_handle, NULL);
- stream_close(&input->read_stream, NULL);
+ stream_close(&input->read_stream, NULL, NULL);
termkey_destroy(input->tk);
}
void term_input_start(TermInput *input)
{
- rstream_start(&input->read_stream, read_cb);
+ rstream_start(&input->read_stream, read_cb, input);
}
void term_input_stop(TermInput *input)
@@ -92,7 +99,7 @@ static void flush_input(TermInput *input, bool wait_until_empty)
size_t drain_boundary = wait_until_empty ? 0 : 0xff;
do {
uv_mutex_lock(&input->key_buffer_mutex);
- loop_schedule(&loop, event_create(1, wait_input_enqueue, 1, input));
+ loop_schedule(&main_loop, event_create(1, wait_input_enqueue, 1, input));
input->waiting = true;
while (input->waiting) {
uv_cond_wait(&input->key_buffer_cond, &input->key_buffer_mutex);
@@ -138,6 +145,9 @@ static void forward_modified_utf8(TermInput *input, TermKeyKey *key)
if (key->type == TERMKEY_TYPE_KEYSYM
&& key->code.sym == TERMKEY_SYM_ESCAPE) {
len = (size_t)snprintf(buf, sizeof(buf), "<Esc>");
+ } else if (key->type == TERMKEY_TYPE_KEYSYM
+ && key->code.sym == TERMKEY_SYM_SUSPEND) {
+ len = (size_t)snprintf(buf, sizeof(buf), "<C-Z>");
} else {
len = termkey_strfkey(input->tk, buf, sizeof(buf), key, TERMKEY_FORMAT_VIM);
}
@@ -153,7 +163,8 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key)
TermKeyMouseEvent ev;
termkey_interpret_mouse(input->tk, key, &ev, &button, &row, &col);
- if (ev != TERMKEY_MOUSE_PRESS && ev != TERMKEY_MOUSE_DRAG) {
+ if (ev != TERMKEY_MOUSE_PRESS && ev != TERMKEY_MOUSE_DRAG
+ && ev != TERMKEY_MOUSE_RELEASE) {
return;
}
@@ -190,6 +201,8 @@ static void forward_mouse_event(TermInput *input, TermKeyKey *key)
}
} else if (ev == TERMKEY_MOUSE_DRAG) {
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Drag");
+ } else if (ev == TERMKEY_MOUSE_RELEASE) {
+ len += (size_t)snprintf(buf + len, sizeof(buf) - len, "Release");
}
len += (size_t)snprintf(buf + len, sizeof(buf) - len, "><%d,%d>", col, row);
@@ -209,8 +222,8 @@ static int get_key_code_timeout(void)
// Check 'ttimeout' to determine if we should send ESC after 'ttimeoutlen'.
// See :help 'ttimeout' for more information
Error err = ERROR_INIT;
- if (vim_get_option(cstr_as_string("ttimeout"), &err).data.boolean) {
- ms = vim_get_option(cstr_as_string("ttimeoutlen"), &err).data.integer;
+ if (nvim_get_option(cstr_as_string("ttimeout"), &err).data.boolean) {
+ ms = nvim_get_option(cstr_as_string("ttimeoutlen"), &err).data.integer;
}
return (int)ms;
@@ -313,8 +326,6 @@ static bool handle_forced_escape(TermInput *input)
return false;
}
-static void restart_reading(void **argv);
-
static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
bool eof)
{
@@ -333,10 +344,10 @@ static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
//
// ls *.md | xargs nvim
input->in_fd = 2;
- stream_close(&input->read_stream, NULL);
- queue_put(input->loop->fast_events, restart_reading, 1, input);
+ stream_close(&input->read_stream, NULL, NULL);
+ multiqueue_put(input->loop->fast_events, restart_reading, 1, input);
} else {
- loop_schedule(&loop, event_create(1, input_done_event, 0));
+ loop_schedule(&main_loop, event_create(1, input_done_event, 0));
}
return;
}
@@ -384,6 +395,6 @@ static void read_cb(Stream *stream, RBuffer *buf, size_t c, void *data,
static void restart_reading(void **argv)
{
TermInput *input = argv[0];
- rstream_init_fd(input->loop, &input->read_stream, input->in_fd, 0xfff, input);
- rstream_start(&input->read_stream, read_cb);
+ rstream_init_fd(input->loop, &input->read_stream, input->in_fd, 0xfff);
+ rstream_start(&input->read_stream, read_cb, input);
}
diff --git a/src/nvim/tui/input.h b/src/nvim/tui/input.h
index d7ee2b9e52..7d59cf5c6a 100644
--- a/src/nvim/tui/input.h
+++ b/src/nvim/tui/input.h
@@ -12,6 +12,9 @@ typedef struct term_input {
bool paste_enabled;
bool waiting;
TermKey *tk;
+#if TERMKEY_VERSION_MAJOR > 0 || TERMKEY_VERSION_MINOR > 18
+ TermKey_Terminfo_Getstr_Hook *tk_ti_hook_fn; ///< libtermkey terminfo hook
+#endif
TimeWatcher timer_handle;
Loop *loop;
Stream read_stream;
diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c
index 62bc81ba64..8cb8719cfe 100644
--- a/src/nvim/tui/tui.c
+++ b/src/nvim/tui/tui.c
@@ -1,3 +1,5 @@
+// Terminal UI functions. Invoked (by ui_bridge.c) on the TUI thread.
+
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
@@ -5,30 +7,38 @@
#include <uv.h>
#include <unibilium.h>
+#if defined(HAVE_TERMIOS_H)
+# include <termios.h>
+#endif
#include "nvim/lib/kvec.h"
+#include "nvim/ascii.h"
#include "nvim/vim.h"
+#include "nvim/log.h"
#include "nvim/ui.h"
#include "nvim/map.h"
+#include "nvim/main.h"
#include "nvim/memory.h"
#include "nvim/api/vim.h"
#include "nvim/api/private/helpers.h"
#include "nvim/event/loop.h"
#include "nvim/event/signal.h"
-#include "nvim/tui/tui.h"
-#include "nvim/tui/input.h"
#include "nvim/os/input.h"
#include "nvim/os/os.h"
#include "nvim/strings.h"
-#include "nvim/ugrid.h"
#include "nvim/ui_bridge.h"
+#include "nvim/ugrid.h"
+#include "nvim/tui/input.h"
+#include "nvim/tui/tui.h"
// Space reserved in the output buffer to restore the cursor to normal when
// flushing. No existing terminal will require 32 bytes to do that.
#define CNORM_COMMAND_MAX_SIZE 32
#define OUTBUF_SIZE 0xffff
+#define TOO_MANY_EVENTS 1000000
+
typedef struct {
int top, bot, left, right;
} Rect;
@@ -64,7 +74,7 @@ typedef struct {
struct {
int enable_mouse, disable_mouse;
int enable_bracketed_paste, disable_bracketed_paste;
- int enter_insert_mode, enter_replace_mode, exit_insert_mode;
+ int set_cursor_shape_bar, set_cursor_shape_ul, set_cursor_shape_block;
int set_rgb_foreground, set_rgb_background;
int enable_focus_reporting, disable_focus_reporting;
} unibi_ext;
@@ -82,6 +92,7 @@ UI *tui_start(void)
UI *ui = xcalloc(1, sizeof(UI));
ui->stop = tui_stop;
ui->rgb = p_tgc;
+ ui->pum_external = false;
ui->resize = tui_resize;
ui->clear = tui_clear;
ui->eol_clear = tui_eol_clear;
@@ -105,6 +116,7 @@ UI *tui_start(void)
ui->suspend = tui_suspend;
ui->set_title = tui_set_title;
ui->set_icon = tui_set_icon;
+ ui->event = tui_event;
return ui_bridge_attach(ui, tui_main, tui_scheduler);
}
@@ -119,9 +131,9 @@ static void terminfo_start(UI *ui)
data->unibi_ext.disable_mouse = -1;
data->unibi_ext.enable_bracketed_paste = -1;
data->unibi_ext.disable_bracketed_paste = -1;
- data->unibi_ext.enter_insert_mode = -1;
- data->unibi_ext.enter_replace_mode = -1;
- data->unibi_ext.exit_insert_mode = -1;
+ data->unibi_ext.set_cursor_shape_bar = -1;
+ data->unibi_ext.set_cursor_shape_ul = -1;
+ data->unibi_ext.set_cursor_shape_block = -1;
data->unibi_ext.enable_focus_reporting = -1;
data->unibi_ext.disable_focus_reporting = -1;
data->out_fd = 1;
@@ -134,6 +146,10 @@ static void terminfo_start(UI *ui)
data->ut = unibi_dummy();
}
fix_terminfo(data);
+ // Initialize the cursor shape.
+ unibi_out(ui, data->unibi_ext.set_cursor_shape_block);
+ // Set 't_Co' from the result of unibilium & fix_terminfo.
+ t_colors = unibi_get_num(data->ut, unibi_max_colors);
// Enter alternate screen and clear
unibi_out(ui, unibi_enter_ca_mode);
unibi_out(ui, unibi_clear_screen);
@@ -165,7 +181,7 @@ static void terminfo_stop(UI *ui)
unibi_out(ui, data->unibi_ext.disable_bracketed_paste);
// Disable focus reporting
unibi_out(ui, data->unibi_ext.disable_focus_reporting);
- flush_buf(ui);
+ flush_buf(ui, true);
uv_tty_reset_mode();
uv_close((uv_handle_t *)&data->output_handle, NULL);
uv_run(&data->write_loop, UV_RUN_DEFAULT);
@@ -183,6 +199,11 @@ static void tui_terminal_start(UI *ui)
terminfo_start(ui);
update_size(ui);
signal_watcher_start(&data->winch_handle, sigwinch_cb, SIGWINCH);
+
+#if TERMKEY_VERSION_MAJOR > 0 || TERMKEY_VERSION_MINOR > 18
+ data->input.tk_ti_hook_fn = tui_tk_ti_getstr;
+#endif
+ term_input_init(&data->input, data->loop);
term_input_start(&data->input);
}
@@ -215,8 +236,6 @@ static void tui_main(UIBridgeData *bridge, UI *ui)
signal_watcher_init(data->loop, &data->winch_handle, ui);
signal_watcher_init(data->loop, &data->cont_handle, data);
signal_watcher_start(&data->cont_handle, sigcont_cb, SIGCONT);
- // initialize input reading structures
- term_input_init(&data->input, &tui_loop);
tui_terminal_start(ui);
data->stop = false;
// allow the main thread to continue, we are ready to start handling UI
@@ -232,7 +251,7 @@ static void tui_main(UIBridgeData *bridge, UI *ui)
signal_watcher_stop(&data->cont_handle);
signal_watcher_close(&data->cont_handle, NULL);
signal_watcher_close(&data->winch_handle, NULL);
- loop_close(&tui_loop);
+ loop_close(&tui_loop, false);
kv_destroy(data->invalid_regions);
xfree(data);
xfree(ui);
@@ -245,11 +264,6 @@ static void tui_scheduler(Event event, void *d)
loop_schedule(data->loop, event);
}
-static void refresh_event(void **argv)
-{
- ui_refresh();
-}
-
static void sigcont_cb(SignalWatcher *watcher, int signum, void *data)
{
((TUIData *)data)->cont_received = true;
@@ -260,8 +274,7 @@ static void sigwinch_cb(SignalWatcher *watcher, int signum, void *data)
got_winch = true;
UI *ui = data;
update_size(ui);
- // run refresh_event in nvim main loop
- loop_schedule(&loop, event_create(1, refresh_event, 0));
+ ui_schedule_refresh();
}
static bool attrs_differ(HlAttrs a1, HlAttrs a2)
@@ -456,16 +469,20 @@ static void tui_mode_change(UI *ui, int mode)
if (mode == INSERT) {
if (data->showing_mode != INSERT) {
- unibi_out(ui, data->unibi_ext.enter_insert_mode);
+ unibi_out(ui, data->unibi_ext.set_cursor_shape_bar);
+ }
+ } else if (mode == CMDLINE) {
+ if (data->showing_mode != CMDLINE) {
+ unibi_out(ui, data->unibi_ext.set_cursor_shape_bar);
}
} else if (mode == REPLACE) {
if (data->showing_mode != REPLACE) {
- unibi_out(ui, data->unibi_ext.enter_replace_mode);
+ unibi_out(ui, data->unibi_ext.set_cursor_shape_ul);
}
} else {
assert(mode == NORMAL);
if (data->showing_mode != NORMAL) {
- unibi_out(ui, data->unibi_ext.exit_insert_mode);
+ unibi_out(ui, data->unibi_ext.set_cursor_shape_block);
}
}
data->showing_mode = mode;
@@ -584,6 +601,18 @@ static void tui_flush(UI *ui)
TUIData *data = ui->data;
UGrid *grid = &data->grid;
+ size_t nrevents = loop_size(data->loop);
+ if (nrevents > TOO_MANY_EVENTS) {
+ ILOG("TUI event-queue flooded (thread_events=%zu); purging", nrevents);
+ // Back-pressure: UI events may accumulate much faster than the terminal
+ // device can serve them. Even if SIGINT/CTRL-C is received, user must still
+ // wait for the TUI event-queue to drain, and if there are ~millions of
+ // events in the queue, it could take hours. Clearing the queue allows the
+ // UI to recover. #1234 #5396
+ loop_purge(data->loop);
+ tui_busy_stop(ui); // avoid hidden cursor
+ }
+
while (kv_size(data->invalid_regions)) {
Rect r = kv_pop(data->invalid_regions);
int currow = -1;
@@ -598,7 +627,7 @@ static void tui_flush(UI *ui)
unibi_goto(ui, grid->row, grid->col);
- flush_buf(ui);
+ flush_buf(ui, true);
}
static void suspend_event(void **argv)
@@ -608,6 +637,7 @@ static void suspend_event(void **argv)
bool enable_mouse = data->mouse_enabled;
tui_terminal_stop(ui);
data->cont_received = false;
+ stream_set_blocking(input_global_fd(), true); // normalize stream (#2598)
kill(0, SIGTSTP);
while (!data->cont_received) {
// poll the event loop until SIGCONT is received
@@ -617,6 +647,7 @@ static void suspend_event(void **argv)
if (enable_mouse) {
tui_mouse_on(ui);
}
+ stream_set_blocking(input_global_fd(), false); // libuv expects this
// resume the main thread
CONTINUE(data->bridge);
}
@@ -627,8 +658,8 @@ static void tui_suspend(UI *ui)
// kill(0, SIGTSTP) won't stop the UI thread, so we must poll for SIGCONT
// before continuing. This is done in another callback to avoid
// loop_poll_events recursion
- queue_put_event(data->loop->fast_events,
- event_create(1, suspend_event, 1, ui));
+ multiqueue_put_event(data->loop->fast_events,
+ event_create(1, suspend_event, 1, ui));
}
static void tui_set_title(UI *ui, char *title)
@@ -647,6 +678,12 @@ static void tui_set_icon(UI *ui, char *icon)
{
}
+// NB: if we start to use this, the ui_bridge must be updated
+// to make a copy for the tui thread
+static void tui_event(UI *ui, char *name, Array args, bool *args_consumed)
+{
+}
+
static void invalidate(UI *ui, int top, int bot, int left, int right)
{
TUIData *data = ui->data;
@@ -681,7 +718,7 @@ static void invalidate(UI *ui, int top, int bot, int left, int right)
intersects->right = MAX(right, intersects->right);
} else {
// Else just add a new entry;
- kv_push(Rect, data->invalid_regions, ((Rect){top, bot, left, right}));
+ kv_push(data->invalid_regions, ((Rect) { top, bot, left, right }));
}
}
@@ -726,8 +763,8 @@ end:
height = DFLT_ROWS;
}
- data->bridge->bridge.width = ui->width = width;
- data->bridge->bridge.height = ui->height = height;
+ data->bridge->bridge.width = width;
+ data->bridge->bridge.height = height;
}
static void unibi_goto(UI *ui, int row, int col)
@@ -765,7 +802,7 @@ static void out(void *ctx, const char *str, size_t len)
size_t available = data->bufsize - data->bufpos;
if (len > available) {
- flush_buf(ui);
+ flush_buf(ui, false);
}
memcpy(data->buf + data->bufpos, str, len);
@@ -785,6 +822,7 @@ static void fix_terminfo(TUIData *data)
unibi_term *ut = data->ut;
const char *term = os_getenv("TERM");
+ const char *colorterm = os_getenv("COLORTERM");
if (!term) {
goto end;
}
@@ -806,7 +844,16 @@ static void fix_terminfo(TUIData *data)
}
if (STARTS_WITH(term, "xterm") || STARTS_WITH(term, "rxvt")) {
- unibi_set_if_empty(ut, unibi_cursor_normal, "\x1b[?12l\x1b[?25h");
+ const char *normal = unibi_get_str(ut, unibi_cursor_normal);
+ if (!normal) {
+ unibi_set_str(ut, unibi_cursor_normal, "\x1b[?25h");
+ } else if (STARTS_WITH(normal, "\x1b[?12l")) {
+ // terminfo typically includes DECRST 12 as part of setting up the normal
+ // cursor, which interferes with the user's control via
+ // NVIM_TUI_ENABLE_CURSOR_SHAPE. When DECRST 12 is present, skip over
+ // it, but honor the rest of the TI setting.
+ unibi_set_str(ut, unibi_cursor_normal, normal + strlen("\x1b[?12l"));
+ }
unibi_set_if_empty(ut, unibi_cursor_invisible, "\x1b[?25l");
unibi_set_if_empty(ut, unibi_flash_screen, "\x1b[?5h$<100/>\x1b[?5l");
unibi_set_if_empty(ut, unibi_exit_attribute_mode, "\x1b(B\x1b[m");
@@ -830,18 +877,20 @@ static void fix_terminfo(TUIData *data)
#define XTERM_SETAB \
"\x1b[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m"
- if (os_getenv("COLORTERM") != NULL
- && (!strcmp(term, "xterm") || !strcmp(term, "screen"))) {
- // probably every modern terminal that sets TERM=xterm supports 256
- // colors(eg: gnome-terminal). Also do it when TERM=screen.
+ if ((colorterm && strstr(colorterm, "256"))
+ || strstr(term, "256")
+ || strstr(term, "xterm")) {
+ // Assume TERM~=xterm or COLORTERM~=256 supports 256 colors.
unibi_set_num(ut, unibi_max_colors, 256);
unibi_set_str(ut, unibi_set_a_foreground, XTERM_SETAF);
unibi_set_str(ut, unibi_set_a_background, XTERM_SETAB);
}
- if (os_getenv("NVIM_TUI_ENABLE_CURSOR_SHAPE") == NULL) {
+ const char * env_cusr_shape = os_getenv("NVIM_TUI_ENABLE_CURSOR_SHAPE");
+ if (env_cusr_shape && strncmp(env_cusr_shape, "0", 1) == 0) {
goto end;
}
+ bool cusr_blink = env_cusr_shape && strncmp(env_cusr_shape, "2", 1) == 0;
#define TMUX_WRAP(seq) (inside_tmux ? "\x1bPtmux;\x1b" seq "\x1b\\" : seq)
// Support changing cursor shape on some popular terminals.
@@ -852,23 +901,23 @@ static void fix_terminfo(TUIData *data)
|| os_getenv("KONSOLE_DBUS_SESSION") != NULL) {
// Konsole uses a proprietary escape code to set the cursor shape
// and does not support DECSCUSR.
- data->unibi_ext.enter_insert_mode = (int)unibi_add_ext_str(ut, NULL,
- TMUX_WRAP("\x1b]50;CursorShape=1;BlinkingCursorEnabled=1\x07"));
- data->unibi_ext.enter_replace_mode = (int)unibi_add_ext_str(ut, NULL,
- TMUX_WRAP("\x1b]50;CursorShape=2;BlinkingCursorEnabled=1\x07"));
- data->unibi_ext.exit_insert_mode = (int)unibi_add_ext_str(ut, NULL,
- TMUX_WRAP("\x1b]50;CursorShape=0;BlinkingCursorEnabled=0\x07"));
+ data->unibi_ext.set_cursor_shape_bar = (int)unibi_add_ext_str(ut, NULL,
+ TMUX_WRAP("\x1b]50;CursorShape=1\x07"));
+ data->unibi_ext.set_cursor_shape_ul = (int)unibi_add_ext_str(ut, NULL,
+ TMUX_WRAP("\x1b]50;CursorShape=2\x07"));
+ data->unibi_ext.set_cursor_shape_block = (int)unibi_add_ext_str(ut, NULL,
+ TMUX_WRAP("\x1b]50;CursorShape=0\x07"));
} else if (!vte_version || atoi(vte_version) >= 3900) {
// Assume that the terminal supports DECSCUSR unless it is an
// old VTE based terminal. This should not get wrapped for tmux,
// which will handle it via its Ss/Se terminfo extension - usually
// according to its terminal-overrides.
- data->unibi_ext.enter_insert_mode = (int)unibi_add_ext_str(ut, NULL,
- "\x1b[5 q");
- data->unibi_ext.enter_replace_mode = (int)unibi_add_ext_str(ut, NULL,
- "\x1b[3 q");
- data->unibi_ext.exit_insert_mode = (int)unibi_add_ext_str(ut, NULL,
- "\x1b[2 q");
+ data->unibi_ext.set_cursor_shape_bar =
+ (int)unibi_add_ext_str(ut, NULL, cusr_blink ? "\x1b[5 q" : "\x1b[6 q");
+ data->unibi_ext.set_cursor_shape_ul =
+ (int)unibi_add_ext_str(ut, NULL, cusr_blink ? "\x1b[3 q" : "\x1b[4 q");
+ data->unibi_ext.set_cursor_shape_block =
+ (int)unibi_add_ext_str(ut, NULL, cusr_blink ? "\x1b[1 q" : "\x1b[2 q");
}
end:
@@ -900,13 +949,13 @@ end:
unibi_set_if_empty(ut, unibi_clr_eos, "\x1b[J");
}
-static void flush_buf(UI *ui)
+static void flush_buf(UI *ui, bool toggle_cursor)
{
uv_write_t req;
uv_buf_t buf;
TUIData *data = ui->data;
- if (!data->busy) {
+ if (toggle_cursor && !data->busy) {
// not busy and the cursor is invisible(see below). Append a "cursor
// normal" command to the end of the buffer.
data->bufsize += CNORM_COMMAND_MAX_SIZE;
@@ -920,9 +969,56 @@ static void flush_buf(UI *ui)
uv_run(&data->write_loop, UV_RUN_DEFAULT);
data->bufpos = 0;
- if (!data->busy) {
+ if (toggle_cursor && !data->busy) {
// not busy and cursor is visible(see above), append a "cursor invisible"
// command to the beginning of the buffer for the next flush
unibi_out(ui, unibi_cursor_invisible);
}
}
+
+#if TERMKEY_VERSION_MAJOR > 0 || TERMKEY_VERSION_MINOR > 18
+/// Try to get "kbs" code from stty because "the terminfo kbs entry is extremely
+/// unreliable." (Vim, Bash, and tmux also do this.)
+///
+/// @see tmux/tty-keys.c fe4e9470bb504357d073320f5d305b22663ee3fd
+/// @see https://bugzilla.redhat.com/show_bug.cgi?id=142659
+static const char *tui_get_stty_erase(void)
+{
+ static char stty_erase[2] = { 0 };
+#if defined(ECHOE) && defined(ICANON) && defined(HAVE_TERMIOS_H)
+ struct termios t;
+ if (tcgetattr(input_global_fd(), &t) != -1) {
+ stty_erase[0] = (char)t.c_cc[VERASE];
+ stty_erase[1] = '\0';
+ ILOG("stty/termios:erase=%s", stty_erase);
+ }
+#endif
+ return stty_erase;
+}
+
+/// libtermkey hook to override terminfo entries.
+/// @see TermInput.tk_ti_hook_fn
+static const char *tui_tk_ti_getstr(const char *name, const char *value,
+ void *data)
+{
+ static const char *stty_erase = NULL;
+ if (stty_erase == NULL) {
+ stty_erase = tui_get_stty_erase();
+ }
+
+ if (strcmp(name, "key_backspace") == 0) {
+ ILOG("libtermkey:kbs=%s", value);
+ if (stty_erase != NULL && stty_erase[0] != 0) {
+ return stty_erase;
+ }
+ } else if (strcmp(name, "key_dc") == 0) {
+ ILOG("libtermkey:kdch1=%s", value);
+ // Vim: "If <BS> and <DEL> are now the same, redefine <DEL>."
+ if (stty_erase != NULL && strcmp(stty_erase, value) == 0) {
+ return stty_erase[0] == DEL ? (char *)CTRL_H_STR : (char *)DEL_STR;
+ }
+ }
+
+ return value;
+}
+#endif
diff --git a/src/nvim/types.h b/src/nvim/types.h
index bfe8be2091..317bead3bb 100644
--- a/src/nvim/types.h
+++ b/src/nvim/types.h
@@ -13,4 +13,6 @@ typedef unsigned char char_u;
// Can hold one decoded UTF-8 character.
typedef uint32_t u8char_T;
+typedef struct expand expand_T;
+
#endif // NVIM_TYPES_H
diff --git a/src/nvim/ugrid.h b/src/nvim/ugrid.h
index ad6d96a168..268362bf1b 100644
--- a/src/nvim/ugrid.h
+++ b/src/nvim/ugrid.h
@@ -23,16 +23,16 @@ struct ugrid {
#define EMPTY_ATTRS ((HlAttrs){ false, false, false, false, false, -1, -1, -1 })
-#define UGRID_FOREACH_CELL(grid, top, bot, left, right, code) \
- do { \
- for (int row = top; row <= bot; ++row) { \
- UCell *row_cells = (grid)->cells[row]; \
- for (int col = left; col <= right; ++col) { \
- UCell *cell = row_cells + col; \
- (void)(cell); \
- code; \
- } \
- } \
+#define UGRID_FOREACH_CELL(grid, top, bot, left, right, code) \
+ do { \
+ for (int row = top; row <= bot; row++) { \
+ UCell *row_cells = (grid)->cells[row]; \
+ for (int col = left; col <= right; col++) { \
+ UCell *cell = row_cells + col; \
+ (void)(cell); \
+ code; \
+ } \
+ } \
} while (0)
#ifdef INCLUDE_GENERATED_DECLARATIONS
diff --git a/src/nvim/ui.c b/src/nvim/ui.c
index 05322a6f64..d3784b6cd3 100644
--- a/src/nvim/ui.c
+++ b/src/nvim/ui.c
@@ -12,10 +12,8 @@
#include "nvim/ex_cmds2.h"
#include "nvim/fold.h"
#include "nvim/main.h"
-#include "nvim/mbyte.h"
#include "nvim/ascii.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/mbyte.h"
#include "nvim/garray.h"
#include "nvim/memory.h"
@@ -27,10 +25,16 @@
#include "nvim/os/time.h"
#include "nvim/os/input.h"
#include "nvim/os/signal.h"
+#include "nvim/popupmnu.h"
#include "nvim/screen.h"
#include "nvim/syntax.h"
#include "nvim/window.h"
-#include "nvim/tui/tui.h"
+#ifdef FEAT_TUI
+# include "nvim/tui/tui.h"
+#else
+# include "nvim/msgpack_rpc/server.h"
+#endif
+#include "nvim/api/private/helpers.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS
# include "ui.c.generated.h"
@@ -49,29 +53,27 @@ static bool pending_cursor_update = false;
static int busy = 0;
static int height, width;
-// This set of macros allow us to use UI_CALL to invoke any function on
-// registered UI instances. The functions can have 0-5 arguments(configurable
-// by SELECT_NTH)
+// UI_CALL invokes a function on all registered UI instances. The functions can
+// have 0-5 arguments (configurable by SELECT_NTH).
//
-// See http://stackoverflow.com/a/11172679 for a better explanation of how it
-// works.
+// See http://stackoverflow.com/a/11172679 for how it works.
#ifdef _MSC_VER
- #define UI_CALL(funname, ...) \
- do { \
- flush_cursor_update(); \
- for (size_t i = 0; i < ui_count; i++) { \
- UI *ui = uis[i]; \
- UI_CALL_MORE(funname, __VA_ARGS__); \
- } \
+# define UI_CALL(funname, ...) \
+ do { \
+ flush_cursor_update(); \
+ for (size_t i = 0; i < ui_count; i++) { \
+ UI *ui = uis[i]; \
+ UI_CALL_MORE(funname, __VA_ARGS__); \
+ } \
} while (0)
#else
- #define UI_CALL(...) \
- do { \
- flush_cursor_update(); \
- for (size_t i = 0; i < ui_count; i++) { \
- UI *ui = uis[i]; \
- UI_CALL_HELPER(CNT(__VA_ARGS__), __VA_ARGS__); \
- } \
+# define UI_CALL(...) \
+ do { \
+ flush_cursor_update(); \
+ for (size_t i = 0; i < ui_count; i++) { \
+ UI *ui = uis[i]; \
+ UI_CALL_HELPER(CNT(__VA_ARGS__), __VA_ARGS__); \
+ } \
} while (0)
#endif
#define CNT(...) SELECT_NTH(__VA_ARGS__, MORE, MORE, MORE, MORE, ZERO, ignore)
@@ -83,7 +85,21 @@ static int height, width;
void ui_builtin_start(void)
{
+#ifdef FEAT_TUI
tui_start();
+#else
+ fprintf(stderr, "Nvim headless-mode started.\n");
+ size_t len;
+ char **addrs = server_address_list(&len);
+ if (addrs != NULL) {
+ fprintf(stderr, "Listening on:\n");
+ for (size_t i = 0; i < len; i++) {
+ fprintf(stderr, "\t%s\n", addrs[i]);
+ }
+ xfree(addrs);
+ }
+ fprintf(stderr, "Press CTRL+C to exit.\n");
+#endif
}
void ui_builtin_stop(void)
@@ -124,6 +140,15 @@ void ui_set_icon(char *icon)
UI_CALL(flush);
}
+void ui_event(char *name, Array args)
+{
+ bool args_consumed = false;
+ UI_CALL(event, name, args, &args_consumed);
+ if (!args_consumed) {
+ api_free_array(args);
+ }
+}
+
// May update the shape of the cursor.
void ui_cursor_shape(void)
{
@@ -137,15 +162,28 @@ void ui_refresh(void)
}
int width = INT_MAX, height = INT_MAX;
+ bool pum_external = true;
for (size_t i = 0; i < ui_count; i++) {
UI *ui = uis[i];
- width = ui->width < width ? ui->width : width;
- height = ui->height < height ? ui->height : height;
+ width = MIN(ui->width, width);
+ height = MIN(ui->height, height);
+ pum_external &= ui->pum_external;
}
row = col = 0;
screen_resize(width, height);
+ pum_set_external(pum_external);
+}
+
+static void ui_refresh_event(void **argv)
+{
+ ui_refresh();
+}
+
+void ui_schedule_refresh(void)
+{
+ loop_schedule(&main_loop, event_create(1, ui_refresh_event, 0));
}
void ui_resize(int new_width, int new_height)
@@ -188,7 +226,7 @@ void ui_mouse_off(void)
UI_CALL(mouse_off);
}
-void ui_attach(UI *ui)
+void ui_attach_impl(UI *ui)
{
if (ui_count == MAX_UI_COUNT) {
abort();
@@ -198,7 +236,7 @@ void ui_attach(UI *ui)
ui_refresh();
}
-void ui_detach(UI *ui)
+void ui_detach_impl(UI *ui)
{
size_t shift_index = MAX_UI_COUNT;
@@ -221,7 +259,7 @@ void ui_detach(UI *ui)
}
if (--ui_count) {
- ui_refresh();
+ ui_schedule_refresh();
}
}
@@ -363,6 +401,9 @@ static void send_output(uint8_t **ptr)
UI_CALL(put, NULL, 0);
col++;
}
+ if (utf_ambiguous_width(utf_ptr2char(p))) {
+ pending_cursor_update = true;
+ }
if (col >= width) {
ui_linefeed();
}
@@ -490,13 +531,17 @@ static void ui_mode_change(void)
if (!full_screen) {
return;
}
- /* Get a simple UI mode out of State. */
- if ((State & REPLACE) == REPLACE)
+ // Get a simple UI mode out of State.
+ if ((State & REPLACE) == REPLACE) {
mode = REPLACE;
- else if (State & INSERT)
+ } else if (State & INSERT) {
mode = INSERT;
- else
+ } else if (State & CMDLINE) {
+ mode = CMDLINE;
+ } else {
mode = NORMAL;
+ }
UI_CALL(mode_change, mode);
conceal_check_cursur_line();
}
+
diff --git a/src/nvim/ui.h b/src/nvim/ui.h
index 5934d2fee9..d14bc5812c 100644
--- a/src/nvim/ui.h
+++ b/src/nvim/ui.h
@@ -5,6 +5,8 @@
#include <stdbool.h>
#include <stdint.h>
+#include "api/private/defs.h"
+
typedef struct {
bool bold, underline, undercurl, italic, reverse;
int foreground, background, special;
@@ -13,7 +15,7 @@ typedef struct {
typedef struct ui_t UI;
struct ui_t {
- bool rgb;
+ bool rgb, pum_external;
int width, height;
void *data;
void (*resize)(UI *ui, int rows, int columns);
@@ -39,6 +41,7 @@ struct ui_t {
void (*suspend)(UI *ui);
void (*set_title)(UI *ui, char *title);
void (*set_icon)(UI *ui, char *icon);
+ void (*event)(UI *ui, char *name, Array args, bool *args_consumed);
void (*stop)(UI *ui);
};
diff --git a/src/nvim/ui_bridge.c b/src/nvim/ui_bridge.c
index fd9d4671e3..25861abc1b 100644
--- a/src/nvim/ui_bridge.c
+++ b/src/nvim/ui_bridge.c
@@ -1,10 +1,13 @@
-// FIXME(tarruda): This module is very repetitive. It might be a good idea to
-// automatically generate it with a lua script during build
+// UI wrapper that sends requests to the UI thread.
+// Used by the built-in TUI and libnvim-based UIs.
+
#include <assert.h>
#include <stdbool.h>
#include <stdio.h>
#include <limits.h>
+#include "nvim/log.h"
+#include "nvim/main.h"
#include "nvim/vim.h"
#include "nvim/ui.h"
#include "nvim/memory.h"
@@ -17,10 +20,30 @@
#define UI(b) (((UIBridgeData *)b)->ui)
-// Call a function in the UI thread
-#define UI_CALL(ui, name, argc, ...) \
- ((UIBridgeData *)ui)->scheduler( \
- event_create(1, ui_bridge_##name##_event, argc, __VA_ARGS__), UI(ui))
+#if MIN_LOG_LEVEL <= DEBUG_LOG_LEVEL
+static size_t uilog_seen = 0;
+static argv_callback uilog_event = NULL;
+#define UI_CALL(ui, name, argc, ...) \
+ do { \
+ if (uilog_event == ui_bridge_##name##_event) { \
+ uilog_seen++; \
+ } else { \
+ if (uilog_seen > 0) { \
+ DLOG("UI bridge: ...%zu times", uilog_seen); \
+ } \
+ DLOG("UI bridge: " STR(name)); \
+ uilog_seen = 0; \
+ uilog_event = ui_bridge_##name##_event; \
+ } \
+ ((UIBridgeData *)ui)->scheduler( \
+ event_create(1, ui_bridge_##name##_event, argc, __VA_ARGS__), UI(ui)); \
+ } while (0)
+#else
+// Schedule a function call on the UI bridge thread.
+#define UI_CALL(ui, name, argc, ...) \
+ ((UIBridgeData *)ui)->scheduler( \
+ event_create(1, ui_bridge_##name##_event, argc, __VA_ARGS__), UI(ui))
+#endif
#define INT2PTR(i) ((void *)(uintptr_t)i)
#define PTR2INT(p) ((int)(uintptr_t)p)
@@ -30,6 +53,7 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)
UIBridgeData *rv = xcalloc(1, sizeof(UIBridgeData));
rv->ui = ui;
rv->bridge.rgb = ui->rgb;
+ rv->bridge.pum_external = ui->pum_external;
rv->bridge.stop = ui_bridge_stop;
rv->bridge.resize = ui_bridge_resize;
rv->bridge.clear = ui_bridge_clear;
@@ -71,7 +95,7 @@ UI *ui_bridge_attach(UI *ui, ui_main_fn ui_main, event_scheduler scheduler)
}
uv_mutex_unlock(&rv->mutex);
- ui_attach(&rv->bridge);
+ ui_attach_impl(&rv->bridge);
return &rv->bridge;
}
@@ -100,12 +124,12 @@ static void ui_bridge_stop(UI *b)
if (stopped) {
break;
}
- loop_poll_events(&loop, 10);
+ loop_poll_events(&main_loop, 10);
}
uv_thread_join(&bridge->ui_thread);
uv_mutex_destroy(&bridge->mutex);
uv_cond_destroy(&bridge->cond);
- ui_detach(b);
+ ui_detach_impl(b);
xfree(b);
}
static void ui_bridge_stop_event(void **argv)
@@ -215,16 +239,16 @@ static void ui_bridge_mode_change_event(void **argv)
}
static void ui_bridge_set_scroll_region(UI *b, int top, int bot, int left,
- int right)
+ int right)
{
UI_CALL(b, set_scroll_region, 5, b, INT2PTR(top), INT2PTR(bot),
- INT2PTR(left), INT2PTR(right));
+ INT2PTR(left), INT2PTR(right));
}
static void ui_bridge_set_scroll_region_event(void **argv)
{
UI *ui = UI(argv[0]);
ui->set_scroll_region(ui, PTR2INT(argv[1]), PTR2INT(argv[2]),
- PTR2INT(argv[3]), PTR2INT(argv[4]));
+ PTR2INT(argv[3]), PTR2INT(argv[4]));
}
static void ui_bridge_scroll(UI *b, int count)
diff --git a/src/nvim/ui_bridge.h b/src/nvim/ui_bridge.h
index 31b9a69216..dba461550f 100644
--- a/src/nvim/ui_bridge.h
+++ b/src/nvim/ui_bridge.h
@@ -1,4 +1,5 @@
-// Bridge used for communication between a builtin UI thread and nvim core
+// Bridge for communication between a UI thread and nvim core.
+// Used by the built-in TUI and libnvim-based UIs.
#ifndef NVIM_UI_BRIDGE_H
#define NVIM_UI_BRIDGE_H
@@ -11,7 +12,7 @@ typedef struct ui_bridge_data UIBridgeData;
typedef void(*ui_main_fn)(UIBridgeData *bridge, UI *ui);
struct ui_bridge_data {
UI bridge; // actual UI passed to ui_attach
- UI *ui; // UI pointer that will have it's callback called in
+ UI *ui; // UI pointer that will have its callback called in
// another thread
event_scheduler scheduler;
uv_thread_t ui_thread;
@@ -28,13 +29,13 @@ struct ui_bridge_data {
bool stopped;
};
-#define CONTINUE(b) \
- do { \
- UIBridgeData *d = (UIBridgeData *)b; \
- uv_mutex_lock(&d->mutex); \
- d->ready = true; \
- uv_cond_signal(&d->cond); \
- uv_mutex_unlock(&d->mutex); \
+#define CONTINUE(b) \
+ do { \
+ UIBridgeData *d = (UIBridgeData *)b; \
+ uv_mutex_lock(&d->mutex); \
+ d->ready = true; \
+ uv_cond_signal(&d->cond); \
+ uv_mutex_unlock(&d->mutex); \
} while (0)
diff --git a/src/nvim/undo.c b/src/nvim/undo.c
index f16b4264d7..4b267a1627 100644
--- a/src/nvim/undo.c
+++ b/src/nvim/undo.c
@@ -99,6 +99,7 @@
#include "nvim/quickfix.h"
#include "nvim/screen.h"
#include "nvim/sha256.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/types.h"
#include "nvim/os/os.h"
@@ -690,7 +691,7 @@ char *u_get_undo_file_name(const char *const buf_ffname, const bool reading)
int ret;
char *failed_dir;
if ((ret = os_mkdir_recurse(dir_name, 0755, &failed_dir)) != 0) {
- EMSG3(_("E926: Unable to create directory \"%s\" for undo file: %s"),
+ EMSG3(_("E5003: Unable to create directory \"%s\" for undo file: %s"),
failed_dir, os_strerror(ret));
xfree(failed_dir);
} else {
@@ -712,7 +713,7 @@ char *u_get_undo_file_name(const char *const buf_ffname, const bool reading)
// When reading check if the file exists.
if (undo_file_name != NULL
- && (!reading || os_file_exists((char_u *)undo_file_name))) {
+ && (!reading || os_path_exists((char_u *)undo_file_name))) {
break;
}
xfree(undo_file_name);
@@ -1094,7 +1095,7 @@ void u_write_undo(const char *const name, const bool forceit, buf_T *const buf,
/* If the undo file already exists, verify that it actually is an undo
* file, and delete it. */
- if (os_file_exists((char_u *)file_name)) {
+ if (os_path_exists((char_u *)file_name)) {
if (name == NULL || !forceit) {
/* Check we can read it and it's an undo file. */
fd = os_open(file_name, O_RDONLY, 0);
@@ -1668,7 +1669,7 @@ void u_undo(int count)
undo_undoes = TRUE;
else
undo_undoes = !undo_undoes;
- u_doit(count);
+ u_doit(count, false);
}
/*
@@ -1677,15 +1678,58 @@ void u_undo(int count)
*/
void u_redo(int count)
{
- if (vim_strchr(p_cpo, CPO_UNDO) == NULL)
- undo_undoes = FALSE;
- u_doit(count);
+ if (vim_strchr(p_cpo, CPO_UNDO) == NULL) {
+ undo_undoes = false;
+ }
+
+ u_doit(count, false);
}
-/*
- * Undo or redo, depending on 'undo_undoes', 'count' times.
- */
-static void u_doit(int startcount)
+/// Undo and remove the branch from the undo tree.
+/// Also moves the cursor (as a "normal" undo would).
+bool u_undo_and_forget(int count)
+{
+ if (curbuf->b_u_synced == false) {
+ u_sync(true);
+ count = 1;
+ }
+ undo_undoes = true;
+ u_doit(count, true);
+
+ if (curbuf->b_u_curhead == NULL) {
+ // nothing was undone.
+ return false;
+ }
+
+ // Delete the current redo header
+ // set the redo header to the next alternative branch (if any)
+ // otherwise we will be in the leaf state
+ u_header_T *to_forget = curbuf->b_u_curhead;
+ curbuf->b_u_newhead = to_forget->uh_next.ptr;
+ curbuf->b_u_curhead = to_forget->uh_alt_next.ptr;
+ if (curbuf->b_u_curhead) {
+ to_forget->uh_alt_next.ptr = NULL;
+ curbuf->b_u_curhead->uh_alt_prev.ptr = to_forget->uh_alt_prev.ptr;
+ curbuf->b_u_seq_cur = curbuf->b_u_curhead->uh_next.ptr ?
+ curbuf->b_u_curhead->uh_next.ptr->uh_seq : 0;
+ } else if (curbuf->b_u_newhead) {
+ curbuf->b_u_seq_cur = curbuf->b_u_newhead->uh_seq;
+ }
+ if (to_forget->uh_alt_prev.ptr) {
+ to_forget->uh_alt_prev.ptr->uh_alt_next.ptr = curbuf->b_u_curhead;
+ }
+ if (curbuf->b_u_newhead) {
+ curbuf->b_u_newhead->uh_prev.ptr = curbuf->b_u_curhead;
+ }
+ if (curbuf->b_u_seq_last == to_forget->uh_seq) {
+ curbuf->b_u_seq_last--;
+ }
+ u_freebranch(curbuf, to_forget, NULL);
+ return true;
+}
+
+/// Undo or redo, depending on `undo_undoes`, `count` times.
+static void u_doit(int startcount, bool quiet)
{
int count = startcount;
@@ -1721,7 +1765,7 @@ static void u_doit(int startcount)
break;
}
- u_undoredo(TRUE);
+ u_undoredo(true);
} else {
if (curbuf->b_u_curhead == NULL || get_undolevel() <= 0) {
beep_flush(); /* nothing to redo */
@@ -1741,7 +1785,7 @@ static void u_doit(int startcount)
curbuf->b_u_curhead = curbuf->b_u_curhead->uh_prev.ptr;
}
}
- u_undo_end(undo_undoes, FALSE);
+ u_undo_end(undo_undoes, false, quiet);
}
/*
@@ -2054,7 +2098,7 @@ void undo_time(long step, int sec, int file, int absolute)
}
}
}
- u_undo_end(did_undo, absolute);
+ u_undo_end(did_undo, absolute, false);
}
/*
@@ -2278,7 +2322,8 @@ static void u_undoredo(int undo)
if (undo)
/* We are below the previous undo. However, to make ":earlier 1s"
* work we compute this as being just above the just undone change. */
- --curbuf->b_u_seq_cur;
+ curbuf->b_u_seq_cur = curhead->uh_next.ptr ?
+ curhead->uh_next.ptr->uh_seq : 0;
/* Remember where we are for ":earlier 1f" and ":later 1f". */
if (curhead->uh_save_nr != 0) {
@@ -2298,16 +2343,13 @@ static void u_undoredo(int undo)
#endif
}
-/*
- * If we deleted or added lines, report the number of less/more lines.
- * Otherwise, report the number of changes (this may be incorrect
- * in some cases, but it's better than nothing).
- */
-static void
-u_undo_end (
- int did_undo, /* just did an undo */
- int absolute /* used ":undo N" */
-)
+/// If we deleted or added lines, report the number of less/more lines.
+/// Otherwise, report the number of changes (this may be incorrect
+/// in some cases, but it's better than nothing).
+static void u_undo_end(
+ int did_undo, ///< just did an undo
+ int absolute, ///< used ":undo N"
+ bool quiet)
{
char *msgstr;
u_header_T *uhp;
@@ -2316,9 +2358,11 @@ u_undo_end (
if ((fdo_flags & FDO_UNDO) && KeyTyped)
foldOpenCursor();
- if (global_busy /* no messages now, wait until global is finished */
- || !messaging()) /* 'lazyredraw' set, don't do messages now */
+ if (quiet
+ || global_busy // no messages until global is finished
+ || !messaging()) { // 'lazyredraw' set, don't do messages now
return;
+ }
if (curbuf->b_ml.ml_flags & ML_EMPTY)
--u_newcount;
@@ -2507,20 +2551,20 @@ static void u_add_time(char_u *buf, size_t buflen, time_t tt)
*/
void ex_undojoin(exarg_T *eap)
{
- if (curbuf->b_u_newhead == NULL)
- return; /* nothing changed before */
+ if (curbuf->b_u_newhead == NULL) {
+ return; // nothing changed before
+ }
if (curbuf->b_u_curhead != NULL) {
EMSG(_("E790: undojoin is not allowed after undo"));
return;
}
- if (!curbuf->b_u_synced)
- return; /* already unsynced */
- if (get_undolevel() < 0)
- return; /* no entries, nothing to do */
- else {
- /* Go back to the last entry */
- curbuf->b_u_curhead = curbuf->b_u_newhead;
- curbuf->b_u_synced = false; /* no entries, nothing to do */
+ if (!curbuf->b_u_synced) {
+ return; // already unsynced
+ }
+ if (get_undolevel() < 0) {
+ return; // no entries, nothing to do
+ } else {
+ curbuf->b_u_synced = false; // Append next change to last entry
}
}
diff --git a/src/nvim/version.c b/src/nvim/version.c
index 23bfca6221..a12621d06f 100644
--- a/src/nvim/version.c
+++ b/src/nvim/version.c
@@ -7,24 +7,22 @@
#include <assert.h>
#include <limits.h>
+#include "nvim/api/private/helpers.h"
#include "nvim/vim.h"
#include "nvim/ascii.h"
#include "nvim/iconv.h"
#include "nvim/version.h"
#include "nvim/charset.h"
+#include "nvim/macros.h"
#include "nvim/memline.h"
#include "nvim/memory.h"
#include "nvim/message.h"
-#include "nvim/misc2.h"
#include "nvim/screen.h"
#include "nvim/strings.h"
// version info generated by the build system
#include "auto/versiondef.h"
-#define STR_(x) #x
-#define STR(x) STR_(x)
-
// for ":version", ":intro", and "nvim --version"
#ifndef NVIM_VERSION_MEDIUM
#define NVIM_VERSION_MEDIUM STR(NVIM_VERSION_MAJOR) "." STR(NVIM_VERSION_MINOR)\
@@ -64,81 +62,840 @@ static char *features[] = {
#else
"-jemalloc",
#endif
+
+#ifdef FEAT_TUI
+ "+tui",
+#else
+ "-tui",
+#endif
NULL
};
// clang-format off
static int included_patches[] = {
+ // 2367,
+ // 2366 NA
+ // 2365 NA
+ // 2364,
+ // 2363 NA
+ // 2362,
+ // 2361 NA
+ // 2360,
+ // 2359 NA
+ // 2358 NA
+ // 2357,
+ // 2356,
+ // 2355,
+ // 2354,
+ // 2353,
+ // 2352 NA
+ // 2351 NA
+ // 2350,
+ // 2349,
+ // 2348,
+ // 2347,
+ // 2346,
+ // 2345 NA
+ // 2344 NA
+ // 2343,
+ // 2342 NA
+ // 2341,
+ // 2340 NA
+ // 2339,
+ // 2338 NA
+ 2337,
+ // 2336,
+ 2335,
+ // 2334,
+ // 2333,
+ // 2332 NA
+ 2331,
+ // 2330,
+ // 2329,
+ // 2328,
+ // 2327 NA
+ // 2326,
+ // 2325 NA
+ // 2324,
+ // 2323,
+ // 2322,
+ 2321,
+ // 2320,
+ // 2319 NA
+ // 2318,
+ // 2317,
+ // 2316 NA
+ // 2315,
+ 2314,
+ 2313,
+ 2312,
+ // 2311 NA
+ // 2310 NA
+ 2309,
+ // 2308 NA
+ // 2307,
+ // 2306,
+ // 2305,
+ // 2304 NA
+ // 2303,
+ // 2302 NA
+ // 2301 NA
+ 2300,
+ // 2299,
+ // 2298 NA
+ // 2297 NA
+ // 2296,
+ // 2295,
+ 2294,
+ // 2293,
+ // 2292,
+ // 2291,
+ // 2290 NA
+ // 2289 NA
+ // 2288 NA
+ // 2287 NA
+ // 2286 NA
+ // 2285 NA
+ 2284,
+ // 2283,
+ // 2282 NA
+ // 2281 NA
+ // 2280,
+ // 2279,
+ // 2278 NA
+ 2277,
+ // 2276,
+ // 2275,
+ 2274,
+ 2273,
+ 2272,
+ // 2271 NA
+ // 2270 NA
+ // 2269,
+ // 2268,
+ // 2267 NA
+ // 2266,
+ // 2265,
+ // 2264,
+ // 2263,
+ // 2262 NA
+ // 2261 NA
+ // 2260 NA
+ // 2259,
+ // 2258 NA
+ // 2257 NA
+ // 2256,
+ // 2255,
+ // 2254 NA
+ // 2253 NA
+ // 2252 NA
+ 2251,
+ // 2250,
+ // 2249,
+ // 2248,
+ // 2247 NA
+ // 2246,
+ // 2245,
+ // 2244,
+ // 2243 NA
+ // 2242,
+ // 2241,
+ // 2240,
+ // 2239,
+ // 2238 NA
+ 2237,
+ // 2236,
+ // 2235,
+ // 2234 NA
+ // 2233,
+ // 2232 NA
+ // 2231,
+ // 2230,
+ // 2229,
+ // 2228,
+ 2227,
+ 2226,
+ 2225,
+ // 2224,
+ // 2223,
+ // 2222,
+ // 2221,
+ // 2220,
+ 2219,
+ // 2218 NA
+ 2217,
+ // 2216 NA
+ 2215,
+ // 2214 NA
+ 2213,
+ 2212,
+ // 2211 NA
+ // 2210 NA
+ // 2209,
+ // 2208,
+ // 2207 NA
+ // 2206 NA
+ 2205,
+ 2204,
+ // 2203 NA
+ // 2202 NA
+ 2201,
+ // 2200,
+ // 2199 NA
+ // 2198 NA
+ // 2197,
+ // 2196,
+ // 2195 NA
+ 2194,
+ // 2193 NA
+ // 2192 NA
+ // 2191 NA
+ // 2190,
+ // 2189,
+ 2188,
+ // 2187,
+ // 2186 NA
+ // 2185,
+ // 2184,
+ 2183,
+ // 2182 NA
+ // 2181,
+ // 2180,
+ // 2179,
+ // 2178,
+ // 2177,
+ // 2176 NA
+ // 2175,
+ 2174,
+ // 2173,
+ // 2172,
+ // 2171,
+ // 2170,
+ // 2169,
+ // 2168 NA
+ // 2167 NA
+ // 2166 NA
+ // 2165,
+ // 2164,
+ 2163,
+ 2162,
+ // 2161,
+ 2160,
+ // 2159,
+ 2158,
+ // 2157 NA
+ // 2156 NA
+ // 2155 NA
+ // 2154 NA
+ // 2153 NA
+ // 2152,
+ // 2151,
+ // 2150 NA
+ 2149,
+ // 2148,
+ 2147,
+ 2146,
+ // 2145 NA
+ // 2144,
+ // 2143,
+ // 2142,
+ // 2141,
+ // 2140 NA
+ // 2139,
+ // 2138 NA
+ // 2137,
+ // 2136,
+ // 2135,
+ // 2134,
+ // 2133 NA
+ // 2132 NA
+ // 2131 NA
+ // 2130 NA
+ // 2129 NA
+ 2128,
+ 2127,
+ 2126,
+ // 2125 NA
+ 2124,
+ 2123,
+ // 2122 NA
+ // 2121,
+ // 2120,
+ // 2119,
+ // 2118 NA
+ 2117,
+ // 2116 NA
+ // 2115 NA
+ // 2114 NA
+ // 2113,
+ 2112,
+ // 2111,
+ 2110,
+ 2109,
+ // 2108 NA
+ // 2107,
+ // 2106,
+ // 2105 NA
+ // 2104,
+ 2103,
+ // 2102 NA
+ // 2101,
+ 2100,
+ 2099,
+ // 2098,
+ // 2097,
+ // 2096,
+ // 2095,
+ // 2094 NA
+ // 2093 NA
+ // 2092 NA
+ // 2091 NA
+ // 2090,
+ // 2089 NA
+ // 2088,
+ // 2087,
+ 2086,
+ // 2085,
+ // 2084,
+ // 2083,
+ // 2082,
+ 2081,
+ // 2080,
+ // 2079 NA
+ // 2078 NA
+ 2077,
+ // 2076,
+ 2075,
+ 2074,
+ // 2073 NA
+ // 2072,
+ 2071,
+ // 2070 NA
+ // 2069,
+ // 2068,
+ 2067,
+ 2066,
+ 2065,
+ 2064,
+ // 2063 NA
+ 2062,
+ // 2061,
+ // 2060 NA
+ // 2059 NA
+ // 2058,
+ // 2057 NA
+ // 2056 NA
+ // 2055 NA
+ // 2054 NA
+ // 2053 NA
+ // 2052 NA
+ // 2051,
+ 2050,
+ 2049,
+ // 2048 NA
+ // 2047,
+ // 2046,
+ // 2045 NA
+ // 2044,
+ 2043,
+ // 2042 NA
+ // 2041 NA
+ // 2040 NA
+ // 2039 NA
+ // 2038 NA
+ // 2037 NA
+ 2036,
+ // 2035 NA
+ // 2034 NA
+ 2033,
+ // 2032 NA
+ 2031,
+ // 2030 NA
+ // 2029,
+ 2028,
+ // 2027 NA
+ // 2026 NA
+ // 2025 NA
+ // 2024,
+ // 2023,
+ // 2022,
+ // 2021,
+ // 2020 NA
+ 2019,
+ // 2018,
+ // 2017,
+ // 2016 NA
+ 2015,
+ 2014,
+ 2013,
+ 2012,
+ 2011,
+ 2010,
+ 2009,
+ 2008,
+ 2007,
+ 2006,
+ 2005,
+ // 2004 NA
+ // 2003 NA
+ // 2002,
+ // 2001 NA
+ 2000,
+ 1999,
+ // 1998 NA
+ 1997,
+ 1996,
+ // 1995 NA
+ // 1994,
+ // 1993,
+ // 1992,
+ // 1991,
+ 1990,
+ // 1989,
+ // 1988 NA
+ // 1987 NA
+ // 1986,
+ // 1985 NA
+ 1984,
+ // 1983 NA
+ // 1982 NA
+ // 1981,
+ 1980,
+ // 1979,
+ // 1978,
+ // 1977,
+ // 1976,
+ // 1975,
+ // 1974 NA
+ 1973,
+ // 1972 NA
+ 1971,
+ 1970,
+ // 1969 NA
+ 1968,
+ 1967,
+ 1966,
+ // 1965 NA
+ 1964,
+ // 1963 NA
+ // 1962,
+ 1961,
+ 1960,
+ // 1959 NA
+ // 1958 NA
+ // 1957 NA
+ 1956,
+ // 1955 NA
+ // 1954,
+ 1953,
+ 1952,
+ // 1951 NA
+ 1950,
+ 1949,
+ // 1948,
+ // 1947 NA
+ // 1946 NA
+ // 1945 NA
+ // 1944 NA
+ // 1943 NA
+ // 1942 NA
+ 1941,
+ 1940,
+ // 1939 NA
+ // 1938 NA
+ 1937,
+ // 1936 NA
+ // 1935 NA
+ // 1934 NA
+ // 1933 NA
+ // 1932 NA
+ // 1931 NA
+ // 1930 NA
+ // 1929 NA
+ 1928,
+ // 1927 NA
+ // 1926 NA
+ 1925,
+ // 1924 NA
+ 1923,
+ // 1922 NA
+ // 1921 NA
+ // 1920 NA
+ // 1919 NA
+ // 1918 NA
+ // 1917 NA
+ // 1916 NA
+ // 1915 NA
+ // 1914 NA
+ 1913,
+ 1912,
+ // 1911 NA
+ 1910,
+ 1909,
+ // 1908 NA
+ // 1907 NA
+ // 1906 NA
+ // 1905 NA
+ // 1904 NA
+ // 1903 NA
+ // 1902 NA
+ // 1901 NA
+ 1900,
+ // 1899 NA
+ 1898,
+ 1897,
+ 1896,
+ 1895,
+ 1894,
+ 1893,
+ 1892,
+ // 1891 NA
+ // 1890 NA
+ 1889,
+ // 1888 NA
+ // 1887 NA
+ // 1886 NA
+ // 1885 NA
+ 1884,
+ // 1883 NA
+ 1882,
+ 1881,
+ // 1880 NA
+ // 1879 NA
+ // 1878 NA
+ // 1877 NA
+ 1876,
+ 1875,
+ // 1874 NA
+ // 1873 NA
+ // 1872 NA
+ 1871,
+ // 1870 NA
+ // 1869 NA
+ 1868,
+ 1867,
+ 1866,
+ // 1865 NA
+ // 1864 NA
+ // 1863 NA
+ // 1862 NA
+ 1861,
+ 1860,
+ // 1859 NA
+ // 1858 NA
+ // 1857 NA
+ // 1856 NA
+ // 1855 NA
+ // 1854 NA
+ // 1853 NA
+ // 1852 NA
+ 1851,
+ // 1850 NA
+ // 1849 NA
+ // 1848 NA
+ 1847,
+ // 1846 NA
+ // 1845 NA
+ // 1844 NA
+ // 1843 NA
+ 1842,
+ 1841,
+ 1840,
+ 1839,
+ 1838,
+ 1837,
+ 1836,
+ 1835,
+ 1834,
+ 1833,
1832,
+ 1831,
+ // 1830 NA
+ // 1829 NA
+ // 1828 NA
+ // 1827 NA
+ // 1826 NA
+ // 1825 NA
+ // 1824 NA
+ 1823,
+ // 1822 NA
+ 1821,
+ 1820,
+ // 1819 NA
+ 1818,
+ // 1817 NA
+ 1816,
+ 1815,
+ // 1814 NA
+ 1813,
+ // 1812 NA
+ // 1811 NA
+ // 1810 NA
1809,
1808,
+ // 1807 NA
1806,
+ // 1805 NA
+ // 1804 NA
+ // 1803 NA
+ 1802,
+ // 1801 NA
+ // 1800 NA
1799,
+ // 1798 NA
+ // 1797 NA
+ // 1796 NA
+ // 1795 NA
+ // 1794 NA
+ 1793,
+ // 1792 NA
+ // 1791 NA
+ // 1790 NA
+ // 1789 NA
+ // 1789 NA
+ // 1788 NA
+ // 1787 NA
+ // 1786 NA
+ 1785,
+ // 1784 NA
+ 1783,
+ 1782,
+ 1781,
+ 1780,
+ 1779,
+ // 1778 NA
+ // 1777 NA
+ // 1776 NA
+ // 1775 NA
+ // 1774 NA
+ // 1773 NA
+ // 1772 NA
+ // 1771 NA
+ // 1770 NA
+ // 1769 NA
+ 1768,
+ // 1767 NA
+ // 1766 NA
+ 1765,
+ // 1764 NA
+ 1763,
+ // 1762 NA
+ // 1761 NA
+ // 1760 NA
+ 1759,
+ 1758,
1757,
+ // 1756 NA
1755,
+ 1754,
1753,
+ 1752,
+ 1751,
+ // 1750 NA
+ // 1749 NA
+ 1748,
+ // 1747 NA
+ // 1746 NA
+ // 1745 NA
+ // 1744 NA
+ // 1743 NA
+ 1742,
+ 1741,
+ 1740,
+ 1739,
+ 1738,
+ // 1737 NA
+ // 1736 NA
+ 1735,
+ 1734,
+ // 1733 NA
+ 1732,
+ // 1731 NA
+ 1730,
+ // 1729 NA
1728,
+ // 1727 NA
+ // 1726 NA
+ // 1725 NA
+ // 1724 NA
+ 1723,
+ // 1722 NA
+ // 1721 NA
+ // 1720 NA
+ 1719,
+ 1718,
+ // 1717 NA
+ 1716,
+ 1715,
+ 1714,
+ // 1713 NA
+ 1712,
+ 1711,
+ // 1710 NA
+ // 1709 NA
+ 1708,
+ 1707,
+ // 1706 NA
+ // 1705 NA
+ 1704,
+ 1703,
+ 1702,
+ 1701,
+ 1700,
+ 1699,
+ // 1698 NA
+ 1697,
+ 1696,
+ 1695,
+ // 1694 NA
+ // 1693 NA
+ 1692,
+ 1691,
+ // 1690 NA
+ // 1689 NA
+ // 1688 NA
+ // 1687 NA
+ 1686,
+ 1685,
+ // 1684 NA
+ // 1683 NA
+ 1682,
+ 1681,
+ // 1680 NA
+ 1679,
+ // 1678 NA
+ // 1677 NA
+ 1676,
+ 1675,
+ // 1674 NA
+ 1673,
+ // 1672 NA
+ 1671,
+ 1670,
+ // 1669 NA
+ // 1668 NA
+ // 1667 NA
+ // 1666 NA
+ // 1665 NA
+ 1664,
+ 1663,
+ // 1662 NA
+ // 1661 NA
+ 1660,
+ // 1659 NA
+ 1658,
+ // 1657 NA
+ 1656,
+ // 1655 NA
1654,
+ // 1653 NA
1652,
+ // 1651 NA
+ 1650,
+ 1649,
+ 1648,
+ 1647,
+ // 1646 NA
+ 1645,
+ // 1644 NA
1643,
+ 1642,
1641,
-
+ 1640,
+ 1639,
+ 1638,
+ // 1637 NA
+ // 1636 NA
+ // 1635 NA
+ 1634,
+ // 1633 NA
+ // 1632 NA
+ // 1631 NA
+ 1630,
+ 1629,
+ // 1628 NA
+ // 1627 NA
+ // 1626 NA
+ // 1625 NA
+ // 1624 NA
+ // 1623 NA
+ // 1622 NA
+ // 1621 NA
+ 1620,
+ 1619,
+ // 1618 NA
+ // 1617 NA
+ // 1616 NA
+ // 1615 NA
+ 1614,
+ // 1613 NA
+ // 1612 NA
+ // 1611 NA
+ // 1610 NA
+ // 1609 NA
+ 1608,
+ 1607,
+ 1606,
+ 1605,
+ 1604,
+ 1603,
+ // 1602 NA
+ // 1601 NA
// 1600 NA
// 1599 NA
// 1598 NA
// 1597 NA
- // 1596,
+ 1596,
// 1595 NA
// 1594 NA
// 1593 NA
- // 1592,
- // 1591,
- // 1590,
- // 1589,
- // 1588,
+ 1592,
+ 1591,
+ 1590,
+ 1589,
+ 1588,
// 1587 NA
- // 1586,
- // 1585,
+ 1586,
+ 1585,
// 1584 NA
// 1583 NA
- // 1582,
-
- // 1581,
- // 1580,
- // 1579,
- // 1578,
- // 1577,
+ 1582,
+ 1581,
+ 1580,
+ // 1579 NA
+ 1578,
+ 1577,
1576,
// 1575 NA
1574,
- // 1573,
+ // 1573 NA
// 1572 NA
1571,
1570,
1569,
1568,
- // 1567,
+ 1567,
// 1566 NA
- // 1565,
- // 1564,
- // 1563,
+ 1565,
+ 1564,
+ 1563,
// 1562 NA
// 1561 NA
- // 1560,
- // 1559,
- // 1558,
- // 1557,
- // 1556,
- // 1555,
- // 1554,
- // 1553,
- // 1552,
- // 1551,
- // 1550,
- // 1549,
- // 1548,
- // 1547,
- // 1546,
+ // 1560 NA
+ 1559,
+ 1558,
+ 1557,
+ // 1556 NA
+ // 1555 NA
+ 1554,
+ 1553,
+ 1552,
+ 1551,
+ 1550,
+ 1549,
+ 1548,
+ 1547,
+ 1546,
// 1545 NA
// 1544 NA
// 1543 NA
@@ -149,14 +906,14 @@ static int included_patches[] = {
// 1538 NA
// 1537 NA
// 1536 NA
- // 1535,
+ 1535,
// 1534 NA
- // 1533,
+ 1533,
// 1532 NA
// 1531 NA
// 1530 NA
// 1529 NA
- // 1528,
+ 1528,
// 1527 NA
// 1526 NA
// 1525 NA
@@ -185,29 +942,29 @@ static int included_patches[] = {
// 1502 NA
// 1501 NA
1500,
- // 1499,
+ 1499,
// 1498 NA
// 1497 NA
// 1496 NA
// 1495 NA
- // 1494,
+ 1494,
// 1493 NA
- // 1492,
- // 1491,
+ 1492,
+ 1491,
// 1490 NA
// 1489 NA
// 1488 NA
// 1487 NA
- // 1486,
+ 1486,
// 1485 NA
// 1484 NA
// 1483 NA
// 1482 NA
// 1481 NA
- // 1480,
- // 1479,
- // 1478,
- // 1477,
+ 1480,
+ 1479,
+ 1478,
+ 1477,
// 1476 NA
// 1475 NA
// 1474 NA
@@ -216,11 +973,11 @@ static int included_patches[] = {
// 1471 NA
// 1470 NA
// 1469 NA
- // 1468,
+ 1468,
// 1467 NA
// 1466 NA
// 1465 NA
- // 1464,
+ 1464,
// 1463 NA
// 1462 NA
// 1461 NA
@@ -228,7 +985,7 @@ static int included_patches[] = {
// 1459 NA
// 1458 NA
// 1457 NA
- // 1456,
+ // 1456 NA
// 1455 NA
// 1454 NA
// 1453 NA
@@ -287,20 +1044,20 @@ static int included_patches[] = {
// 1400 NA
// 1399 NA
// 1398 NA
- // 1397,
- // 1396,
+ 1397,
+ 1396,
// 1395 NA
- // 1394,
+ 1394,
// 1393 NA
// 1392 NA
// 1391 NA
// 1390 NA
// 1389 NA
- // 1388,
+ 1388,
// 1387 NA
// 1386 NA
// 1385 NA
- // 1384,
+ 1384,
// 1383 NA
// 1382 NA
// 1381 NA
@@ -319,7 +1076,7 @@ static int included_patches[] = {
// 1368 NA
// 1367 NA
1366,
- // 1365,
+ 1365,
// 1364 NA
// 1363 NA
// 1362 NA
@@ -332,7 +1089,7 @@ static int included_patches[] = {
// 1355 NA
// 1354 NA
// 1353 NA
- // 1352,
+ 1352,
// 1351 NA
// 1350 NA
// 1349 NA
@@ -379,7 +1136,7 @@ static int included_patches[] = {
// 1308 NA
// 1307 NA
// 1306 NA
- // 1305,
+ 1305,
1304,
// 1303 NA
// 1302 NA
@@ -403,22 +1160,22 @@ static int included_patches[] = {
1284,
// 1283 NA
1282,
- // 1281,
+ 1281,
// 1280 NA
// 1279 NA
// 1278 NA
// 1277 NA
- // 1276,
+ 1276,
// 1275 NA
// 1274 NA
- // 1273,
+ // 1273 NA
// 1272 NA
1271,
// 1270 NA
1269,
// 1268 NA
1267,
- // 1266
+ 1266,
// 1265 NA
// 1264 NA
// 1263 NA
@@ -447,7 +1204,7 @@ static int included_patches[] = {
// 1240 NA
// 1239 NA
// 1238 NA
- // 1237,
+ 1237,
1236,
// 1235 NA
// 1234 NA
@@ -461,7 +1218,7 @@ static int included_patches[] = {
// 1226 NA
// 1225 NA
// 1224 NA
- // 1223,
+ 1223,
// 1222 NA
// 1221 NA
// 1220 NA
@@ -498,14 +1255,14 @@ static int included_patches[] = {
// 1189 NA
// 1188 NA
// 1187 NA
- // 1186,
+ // 1186 NA
// 1185 NA
// 1184 NA
// 1183 NA
// 1182 NA
1181,
1180,
- // 1179,
+ 1179,
1178,
// 1177 NA
// 1176 NA
@@ -523,7 +1280,7 @@ static int included_patches[] = {
1164,
1163,
// 1162 NA
- // 1161,
+ 1161,
1160,
// 1159 NA
// 1158 NA
@@ -531,41 +1288,41 @@ static int included_patches[] = {
// 1156 NA
// 1155 NA
// 1154 NA
- // 1153,
+ 1153,
// 1152 NA
- // 1151,
- // 1150,
+ 1151,
+ 1150,
1149,
// 1148 NA
- // 1147,
+ 1147,
// 1146 NA
// 1145 NA
1144,
1143,
- // 1142,
+ 1142,
1141,
- // 1140,
+ 1140,
// 1139 NA
// 1138 NA
1137,
- // 1136,
+ 1136,
// 1135 NA
// 1134 NA
// 1133 NA
- // 1132,
+ 1132,
// 1131 NA
- // 1130,
+ // 1130 NA
// 1129 NA
// 1128 NA
// 1127 NA
- // 1126,
+ 1126,
// 1125 NA
// 1124 NA
- // 1123,
+ 1123,
// 1122 NA
- // 1121,
+ 1121,
1120,
- // 1119,
+ 1119,
1118,
1117,
1116,
@@ -573,10 +1330,10 @@ static int included_patches[] = {
1114,
1113,
1112,
- // 1111,
+ 1111,
1110,
// 1109 NA
- // 1108,
+ 1108,
1107,
// 1106 NA
1105,
@@ -587,14 +1344,14 @@ static int included_patches[] = {
// 1100 NA
// 1099 NA
// 1098 NA
- // 1097,
- // 1096,
+ // 1097 NA
+ 1096,
// 1095 NA
- // 1094,
+ 1094,
1093,
1092,
1091,
- // 1090,
+ 1090,
1089,
1088,
1087,
@@ -605,35 +1362,35 @@ static int included_patches[] = {
// 1082 NA
1081,
// 1080 NA
- // 1079,
+ // 1079 NA
// 1078 NA
// 1077 NA
1076,
1075,
- // 1074 NA,
- // 1073,
+ // 1074 NA
+ // 1073 NA
1072,
- // 1071,
+ 1071,
// 1070 NA
// 1069 NA
- // 1068,
+ 1068,
// 1067 NA
// 1066 NA
1065,
- // 1064,
+ 1064,
// 1063 NA
// 1062 NA
1061,
// 1060 NA
1059,
- // 1058,
+ // 1058 NA
1057,
- // 1056,
+ 1056,
1055,
1054,
- // 1053,
+ 1053,
1052,
- // 1051,
+ 1051,
1050,
1049,
1048,
@@ -645,7 +1402,7 @@ static int included_patches[] = {
1042,
1041,
// 1040 NA
- // 1039,
+ // 1039 NA
// 1038 NA
1037,
1036,
@@ -653,7 +1410,7 @@ static int included_patches[] = {
1034,
// 1033 NA
1032,
- // 1031 NA,
+ // 1031 NA
1030,
1029,
// 1028 NA
@@ -674,15 +1431,15 @@ static int included_patches[] = {
1013,
// 1012 NA
// 1011 NA
- // 1010 NA,
+ // 1010 NA
// 1009 NA
// 1008 NA
1007,
1006,
- // 1005 NA,
- // 1004 NA,
- // 1003 NA,
- // 1002 NA,
+ // 1005 NA
+ // 1004 NA
+ // 1003 NA
+ // 1002 NA
1001,
1000,
// 999 NA
@@ -780,7 +1537,7 @@ static int included_patches[] = {
// 907 NA
// 906 NA
// 905 NA
- // 904 NA
+ 904,
903,
// 902 NA
901,
@@ -1698,20 +2455,72 @@ static char *(extra_patches[]) = {
NULL
};
-/// Checks whether patch `n` has been included.
+/// Compares a version string to the current Nvim version.
///
-/// @param n The patch number.
+/// @param version Version string like "1.3.42"
///
-/// @return TRUE if patch "n" has been included.
-int has_patch(int n)
+/// @return true if Nvim is at or above the version.
+bool has_nvim_version(char *version_str)
+ FUNC_ATTR_NONNULL_ALL
{
- int i;
- for (i = 0; included_patches[i] != 0; ++i) {
+ char *p = version_str;
+ int major = 0;
+ int minor = 0;
+ int patch = 0;
+
+ if (!ascii_isdigit(*p)) {
+ return false;
+ }
+ major = atoi(p);
+ p = strchr(p, '.'); // Find the next dot.
+
+ if (p) {
+ p++; // Advance past the dot.
+ if (!ascii_isdigit(*p)) {
+ return false;
+ }
+ minor = atoi(p);
+ p = strchr(p, '.');
+ if (p) {
+ p++;
+ if (!ascii_isdigit(*p)) {
+ return false;
+ }
+ patch = atoi(p);
+ }
+ }
+
+ return (major < NVIM_VERSION_MAJOR
+ || (major == NVIM_VERSION_MAJOR
+ && (minor < NVIM_VERSION_MINOR
+ || (minor == NVIM_VERSION_MINOR
+ && patch <= NVIM_VERSION_PATCH))));
+}
+
+/// Checks whether a Vim patch has been included.
+///
+/// @param n Patch number.
+///
+/// @return true if patch `n` has been included.
+bool has_vim_patch(int n)
+{
+ for (int i = 0; included_patches[i] != 0; i++) {
if (included_patches[i] == n) {
- return TRUE;
+ return true;
}
}
- return FALSE;
+ return false;
+}
+
+Dictionary version_dict(void) {
+ Dictionary d = ARRAY_DICT_INIT;
+ PUT(d, "major", INTEGER_OBJ(NVIM_VERSION_MAJOR));
+ PUT(d, "minor", INTEGER_OBJ(NVIM_VERSION_MINOR));
+ PUT(d, "patch", INTEGER_OBJ(NVIM_VERSION_PATCH));
+ PUT(d, "api_level", INTEGER_OBJ(NVIM_API_LEVEL));
+ PUT(d, "api_compatible", INTEGER_OBJ(NVIM_API_LEVEL_COMPAT));
+ PUT(d, "api_prerelease", BOOLEAN_OBJ(NVIM_API_PRERELEASE));
+ return d;
}
void ex_version(exarg_T *eap)
@@ -1770,7 +2579,11 @@ static void list_features(void)
}
} else {
while (msg_col % width) {
+ int old_msg_col = msg_col;
msg_putchar(' ');
+ if (old_msg_col == msg_col) {
+ break; // XXX: Avoid infinite loop.
+ }
}
}
} else {
@@ -1893,23 +2706,16 @@ void intro_message(int colon)
N_(NVIM_VERSION_LONG),
"",
N_("by Bram Moolenaar et al."),
- N_("Vim is open source and freely distributable"),
- "",
- N_("First time using a vi-like editor?"),
- N_("Type :Tutor<Enter> to get started!"),
+ N_("Nvim is open source and freely distributable"),
+ N_("https://neovim.io/community"),
"",
- N_("Already know your way around Vim?"),
- N_("See :help nvim-intro for an introduction to Neovim."),
- "",
- N_("Still have questions?"),
- N_("Reach out to the Neovim community at neovim.io/community."),
+ N_("type :help nvim<Enter> if you are new! "),
+ N_("type :CheckHealth<Enter> to optimize Nvim"),
+ N_("type :q<Enter> to exit "),
+ N_("type :help<Enter> for help "),
"",
N_("Help poor children in Uganda!"),
N_("type :help iccf<Enter> for information "),
- "",
- N_("type :q<Enter> to exit "),
- N_("type :help<Enter> or <F1> for on-line help"),
- N_("type :help nvim<Enter> for Neovim help "),
};
// blanklines = screen height - # message lines
@@ -2011,3 +2817,4 @@ void ex_intro(exarg_T *eap)
intro_message(TRUE);
wait_return(TRUE);
}
+
diff --git a/src/nvim/vim.h b/src/nvim/vim.h
index 165a44a148..458d23fcad 100644
--- a/src/nvim/vim.h
+++ b/src/nvim/vim.h
@@ -104,6 +104,7 @@ Error: configure did not run properly.Check auto/config.log.
#define CONFIRM 0x800 /* ":confirm" prompt */
#define SELECTMODE 0x1000 /* Select mode, only for mappings */
#define TERM_FOCUS 0x2000 // Terminal focus mode
+#define CMDPREVIEW 0x4000 // Showing 'inccommand' command "live" preview.
// all mode bits used for mapping
#define MAP_ALL_MODES (0x3f | SELECTMODE | TERM_FOCUS)
@@ -122,6 +123,14 @@ Error: configure did not run properly.Check auto/config.log.
#define FAIL 0
#define NOTDONE 2 /* not OK or FAIL but skipped */
+// Type values for type().
+#define VAR_TYPE_NUMBER 0
+#define VAR_TYPE_STRING 1
+#define VAR_TYPE_FUNC 2
+#define VAR_TYPE_LIST 3
+#define VAR_TYPE_DICT 4
+#define VAR_TYPE_FLOAT 5
+#define VAR_TYPE_BOOL 6
/*
* values for xp_context when doing command line completion
@@ -174,6 +183,7 @@ enum {
EXPAND_USER,
EXPAND_SYNTIME,
EXPAND_USER_ADDR_TYPE,
+ EXPAND_PACKADD,
};
@@ -259,6 +269,7 @@ enum {
#define STRCAT(d, s) strcat((char *)(d), (char *)(s))
#define STRNCAT(d, s, n) strncat((char *)(d), (char *)(s), (size_t)(n))
+#define STRLCAT(d, s, n) xstrlcat((char *)(d), (char *)(s), (size_t)(n))
# define vim_strpbrk(s, cs) (char_u *)strpbrk((char *)(s), (char *)(cs))
@@ -307,4 +318,15 @@ enum {
# define SET_NO_HLSEARCH(flag) no_hlsearch = (flag); set_vim_var_nr( \
VV_HLSEARCH, !no_hlsearch && p_hls)
+// Used for flags in do_in_path()
+#define DIP_ALL 0x01 // all matches, not just the first one
+#define DIP_DIR 0x02 // find directories instead of files
+#define DIP_ERR 0x04 // give an error message when none found
+#define DIP_START 0x08 // also use "start" directory in 'packpath'
+#define DIP_OPT 0x10 // also use "opt" directory in 'packpath'
+#define DIP_NORTP 0x20 // do not use 'runtimepath'
+
+// Lowest number used for window ID. Cannot have this many windows per tab.
+#define LOWEST_WIN_ID 1000
+
#endif /* NVIM_VIM_H */
diff --git a/src/nvim/window.c b/src/nvim/window.c
index bea55c465f..801969a594 100644
--- a/src/nvim/window.c
+++ b/src/nvim/window.c
@@ -28,7 +28,6 @@
#include "nvim/memory.h"
#include "nvim/message.h"
#include "nvim/misc1.h"
-#include "nvim/misc2.h"
#include "nvim/file_search.h"
#include "nvim/garray.h"
#include "nvim/move.h"
@@ -41,6 +40,7 @@
#include "nvim/regexp.h"
#include "nvim/screen.h"
#include "nvim/search.h"
+#include "nvim/state.h"
#include "nvim/strings.h"
#include "nvim/syntax.h"
#include "nvim/terminal.h"
@@ -129,9 +129,10 @@ newwindow:
vim_snprintf(cbuf, sizeof(cbuf) - 5, "%" PRId64, (int64_t)Prenum);
else
cbuf[0] = NUL;
- if (nchar == 'v' || nchar == Ctrl_V)
- strcat(cbuf, "v");
- strcat(cbuf, "new");
+ if (nchar == 'v' || nchar == Ctrl_V) {
+ xstrlcat(cbuf, "v", sizeof(cbuf));
+ }
+ xstrlcat(cbuf, "new", sizeof(cbuf));
do_cmdline_cmd(cbuf);
break;
@@ -251,11 +252,14 @@ newwindow:
if (win_new_tabpage((int)Prenum, NULL) == OK
&& valid_tabpage(oldtab)) {
newtab = curtab;
- goto_tabpage_tp(oldtab, TRUE, TRUE);
- if (curwin == wp)
- win_close(curwin, FALSE);
- if (valid_tabpage(newtab))
- goto_tabpage_tp(newtab, TRUE, TRUE);
+ goto_tabpage_tp(oldtab, true, true);
+ if (curwin == wp) {
+ win_close(curwin, false);
+ }
+ if (valid_tabpage(newtab)) {
+ goto_tabpage_tp(newtab, true, true);
+ apply_autocmds(EVENT_TABNEWENTERED, NULL, NULL, false, curbuf);
+ }
}
}
break;
@@ -275,10 +279,11 @@ newwindow:
/* cursor to last accessed (previous) window */
case 'p':
case Ctrl_P:
- if (prevwin == NULL)
+ if (!win_valid(prevwin)) {
beep_flush();
- else
+ } else {
win_goto(prevwin);
+ }
break;
/* exchange current and next window */
@@ -381,12 +386,16 @@ wingotofile:
ptr = grab_file_name(Prenum1, &lnum);
if (ptr != NULL) {
+ tabpage_T *oldtab = curtab;
+ win_T *oldwin = curwin;
setpcmark();
if (win_split(0, 0) == OK) {
RESET_BINDING(curwin);
- (void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
- ECMD_HIDE, NULL);
- if (nchar == 'F' && lnum >= 0) {
+ if (do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL, ECMD_HIDE, NULL) == FAIL) {
+ // Failed to open the file, close the window opened for it.
+ win_close(curwin, false);
+ goto_tabpage_win(oldtab, oldwin);
+ } else if (nchar == 'F' && lnum >= 0) {
curwin->w_cursor.lnum = lnum;
check_cursor_lnum();
beginline(BL_SOL | BL_FIX);
@@ -479,7 +488,7 @@ wingotofile:
}
static void cmd_with_count(char *cmd, char_u *bufp, size_t bufsize,
- long Prenum)
+ int64_t Prenum)
{
size_t len = xstrlcpy((char *)bufp, cmd, bufsize);
@@ -890,31 +899,31 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir)
/* "new_size" of the current window goes to the new window, use
* one row for the status line */
win_new_height(wp, new_size);
- if (flags & (WSP_TOP | WSP_BOT))
- frame_new_height(curfrp, curfrp->fr_height
- - (new_size + STATUS_HEIGHT), flags & WSP_TOP, FALSE);
- else
+ if (flags & (WSP_TOP | WSP_BOT)) {
+ int new_fr_height = curfrp->fr_height - new_size;
+
+ if (!((flags & WSP_BOT) && p_ls == 0)) {
+ new_fr_height -= STATUS_HEIGHT;
+ }
+ frame_new_height(curfrp, new_fr_height, flags & WSP_TOP, false);
+ } else {
win_new_height(oldwin, oldwin_height - (new_size + STATUS_HEIGHT));
- if (before) { /* new window above current one */
+ }
+ if (before) { // new window above current one
wp->w_winrow = oldwin->w_winrow;
wp->w_status_height = STATUS_HEIGHT;
oldwin->w_winrow += wp->w_height + STATUS_HEIGHT;
} else { /* new window below current one */
wp->w_winrow = oldwin->w_winrow + oldwin->w_height + STATUS_HEIGHT;
wp->w_status_height = oldwin->w_status_height;
- // Don't set the status_height for oldwin yet, this might break
- // frame_fix_height(oldwin), therefore will be set below.
+ if (!(flags & WSP_BOT)) {
+ oldwin->w_status_height = STATUS_HEIGHT;
+ }
}
if (flags & WSP_BOT)
frame_add_statusline(curfrp);
frame_fix_height(wp);
frame_fix_height(oldwin);
-
- if (!before) {
- // New window above current one, set the status_height after
- // frame_fix_height(oldwin)
- oldwin->w_status_height = STATUS_HEIGHT;
- }
}
if (flags & (WSP_TOP | WSP_BOT))
@@ -965,11 +974,12 @@ int win_split_ins(int size, int flags, win_T *new_wp, int dir)
/*
* make the new window the current window
*/
- win_enter(wp, false);
- if (flags & WSP_VERT)
+ win_enter_ext(wp, false, false, true, true, true);
+ if (flags & WSP_VERT) {
p_wiw = i;
- else
+ } else {
p_wh = i;
+ }
return OK;
}
@@ -1061,6 +1071,23 @@ bool win_valid(win_T *win) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
return false;
}
+/// Check if "win" is a pointer to an existing window in any tabpage.
+///
+/// @param win window to check
+bool win_valid_any_tab(win_T *win) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT
+{
+ if (win == NULL) {
+ return false;
+ }
+
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp == win) {
+ return true;
+ }
+ }
+ return false;
+}
+
/*
* Return the number of windows.
*/
@@ -1693,6 +1720,7 @@ close_windows (
{
tabpage_T *tp, *nexttp;
int h = tabline_height();
+ int count = tabpage_index(NULL);
++RedrawingDisabled;
@@ -1729,9 +1757,14 @@ close_windows (
--RedrawingDisabled;
- redraw_tabline = TRUE;
- if (h != tabline_height())
+ if (count != tabpage_index(NULL)) {
+ apply_autocmds(EVENT_TABCLOSED, NULL, NULL, false, curbuf);
+ }
+
+ redraw_tabline = true;
+ if (h != tabline_height()) {
shell_new_rows();
+ }
}
/// Check that current window is the last one.
@@ -1914,7 +1947,7 @@ int win_close(win_T *win, int free_buf)
if (win->w_buffer != NULL) {
win->w_closing = true;
close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, true);
- if (win_valid(win)) {
+ if (win_valid_any_tab(win)) {
win->w_closing = false;
}
@@ -1934,11 +1967,19 @@ int win_close(win_T *win, int free_buf)
curwin->w_buffer = curbuf;
getout(0);
}
- /* Autocommands may have closed the window already, or closed the only
- * other window or moved to another tab page. */
- else if (!win_valid(win) || last_window() || curtab != prev_curtab
- || close_last_window_tabpage(win, free_buf, prev_curtab))
+ // Autocommands may have moved to another tab page.
+ if (curtab != prev_curtab && win_valid_any_tab(win)
+ && win->w_buffer == NULL) {
+ // Need to close the window anyway, since the buffer is NULL.
+ win_close_othertab(win, false, prev_curtab);
return FAIL;
+ }
+ // Autocommands may have closed the window already, or closed the only
+ // other window or moved to another tab page.
+ if (!win_valid(win) || last_window()
+ || close_last_window_tabpage(win, free_buf, prev_curtab)) {
+ return FAIL;
+ }
// let terminal buffers know that this window dimensions may be ignored
win->w_closing = true;
@@ -1981,10 +2022,11 @@ int win_close(win_T *win, int free_buf)
}
if (close_curwin) {
- win_enter_ext(wp, false, TRUE, TRUE, TRUE);
- if (other_buffer)
- /* careful: after this wp and win may be invalid! */
- apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+ win_enter_ext(wp, false, true, false, true, true);
+ if (other_buffer) {
+ // careful: after this wp and win may be invalid!
+ apply_autocmds(EVENT_BUFENTER, NULL, NULL, false, curbuf);
+ }
}
/*
@@ -2015,12 +2057,16 @@ void win_close_othertab(win_T *win, int free_buf, tabpage_T *tp)
tabpage_T *ptp = NULL;
int free_tp = FALSE;
- assert(win->w_buffer); // to avoid np dereference warning in next line
- if (win->w_closing || win->w_buffer->b_closing)
- return; /* window is already being closed */
+ // Get here with win->w_buffer == NULL when win_close() detects the tab page
+ // changed.
+ if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing)) {
+ return; // window is already being closed
+ }
- /* Close the link to the buffer. */
- close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+ if (win->w_buffer != NULL) {
+ // Close the link to the buffer.
+ close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, false);
+ }
/* Careful: Autocommands may have closed the tab page or made it the
* current tab page. */
@@ -2871,8 +2917,9 @@ static int win_alloc_firstwin(win_T *oldwin)
/* Very first window, need to create an empty buffer for it and
* initialize from scratch. */
curbuf = buflist_new(NULL, NULL, 1L, BLN_LISTED);
- if (curbuf == NULL)
+ if (curbuf == NULL) {
return FAIL;
+ }
curwin->w_buffer = curbuf;
curwin->w_s = &(curbuf->b_s);
curbuf->b_nwindows = 1; /* there is one window */
@@ -2923,7 +2970,9 @@ void win_init_size(void)
*/
static tabpage_T *alloc_tabpage(void)
{
+ static int last_tp_handle = 0;
tabpage_T *tp = xcalloc(1, sizeof(tabpage_T));
+ tp->handle = ++last_tp_handle;
handle_register_tabpage(tp);
/* init t: variables */
@@ -2973,6 +3022,9 @@ int win_new_tabpage(int after, char_u *filename)
xfree(newtp);
return FAIL;
}
+
+ newtp->localdir = tp->localdir ? vim_strsave(tp->localdir) : NULL;
+
curtab = newtp;
/* Create a new empty window. */
@@ -3002,8 +3054,9 @@ int win_new_tabpage(int after, char_u *filename)
redraw_all_later(CLEAR);
- apply_autocmds(EVENT_TABNEW, filename, filename, false, curbuf);
+ apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf);
apply_autocmds(EVENT_WINENTER, NULL, NULL, false, curbuf);
+ apply_autocmds(EVENT_TABNEW, filename, filename, false, curbuf);
apply_autocmds(EVENT_TABENTER, NULL, NULL, false, curbuf);
return OK;
@@ -3161,8 +3214,8 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_au
/* We would like doing the TabEnter event first, but we don't have a
* valid current window yet, which may break some commands.
* This triggers autocommands, thus may make "tp" invalid. */
- win_enter_ext(tp->tp_curwin, false, TRUE,
- trigger_enter_autocmds, trigger_leave_autocmds);
+ win_enter_ext(tp->tp_curwin, false, true, false,
+ trigger_enter_autocmds, trigger_leave_autocmds);
prevwin = next_prevwin;
last_status(FALSE); /* status line may appear or disappear */
@@ -3204,11 +3257,8 @@ void goto_tabpage(int n)
int i;
if (text_locked()) {
- /* Not allowed when editing the command line. */
- if (cmdwin_type != 0)
- EMSG(_(e_cmdwin));
- else
- EMSG(_(e_secure));
+ // Not allowed when editing the command line.
+ text_locked_msg();
return;
}
@@ -3293,8 +3343,11 @@ void tabpage_move(int nr)
tabpage_T *tp;
tabpage_T *tp_dst;
- if (first_tabpage->tp_next == NULL)
+ assert(curtab != NULL);
+
+ if (first_tabpage->tp_next == NULL) {
return;
+ }
for (tp = first_tabpage; tp->tp_next != NULL && n < nr; tp = tp->tp_next) {
++n;
@@ -3503,7 +3556,7 @@ end:
*/
void win_enter(win_T *wp, bool undo_sync)
{
- win_enter_ext(wp, undo_sync, FALSE, TRUE, TRUE);
+ win_enter_ext(wp, undo_sync, false, false, true, true);
}
/*
@@ -3511,7 +3564,9 @@ void win_enter(win_T *wp, bool undo_sync)
* Can be called with "curwin_invalid" TRUE, which means that curwin has just
* been closed and isn't valid.
*/
-static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid, int trigger_enter_autocmds, int trigger_leave_autocmds)
+static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid,
+ int trigger_new_autocmds, int trigger_enter_autocmds,
+ int trigger_leave_autocmds)
{
int other_buffer = FALSE;
@@ -3587,6 +3642,9 @@ static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid, int tri
shorten_fnames(TRUE);
}
+ if (trigger_new_autocmds) {
+ apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf);
+ }
if (trigger_enter_autocmds) {
apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
if (other_buffer)
@@ -3613,6 +3671,10 @@ static void win_enter_ext(win_T *wp, bool undo_sync, int curwin_invalid, int tri
/* Change directories when the 'acd' option is set. */
do_autochdir();
+
+ if (curbuf->terminal) {
+ terminal_resize(curbuf->terminal, curwin->w_width, curwin->w_height);
+ }
}
@@ -3679,13 +3741,15 @@ win_T *buf_jump_open_tab(buf_T *buf)
*/
static win_T *win_alloc(win_T *after, int hidden)
{
- /*
- * allocate window structure and linesizes arrays
- */
+ static int last_win_id = LOWEST_WIN_ID - 1;
+
+ // allocate window structure and linesizes arrays
win_T *new_wp = xcalloc(1, sizeof(win_T));
- handle_register_window(new_wp);
win_alloc_lines(new_wp);
+ new_wp->handle = ++last_win_id;
+ handle_register_window(new_wp);
+
/* init w: variables */
new_wp->w_vars = dict_alloc();
init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
@@ -3751,8 +3815,15 @@ win_free (
hash_init(&wp->w_vars->dv_hashtab);
unref_var_dict(wp->w_vars);
- if (prevwin == wp)
+ if (prevwin == wp) {
prevwin = NULL;
+ }
+ FOR_ALL_TABS(ttp) {
+ if (ttp->tp_prevwin == wp) {
+ ttp->tp_prevwin = NULL;
+ }
+ }
+
win_free_lsize(wp);
for (i = 0; i < wp->w_tagstacklen; ++i)
@@ -5664,3 +5735,121 @@ static bool frame_check_width(frame_T *topfrp, int width)
}
return true;
}
+
+int win_getid(typval_T *argvars)
+{
+ if (argvars[0].v_type == VAR_UNKNOWN) {
+ return curwin->handle;
+ }
+ int winnr = get_tv_number(&argvars[0]);
+ win_T *wp;
+ if (winnr > 0) {
+ if (argvars[1].v_type == VAR_UNKNOWN) {
+ wp = firstwin;
+ } else {
+ tabpage_T *tp;
+ int tabnr = get_tv_number(&argvars[1]);
+ for (tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ if (--tabnr == 0) {
+ break;
+ }
+ }
+ if (tp == NULL) {
+ return -1;
+ }
+ wp = tp->tp_firstwin;
+ }
+ for ( ; wp != NULL; wp = wp->w_next) {
+ if (--winnr == 0) {
+ return wp->handle;
+ }
+ }
+ }
+ return 0;
+}
+
+int win_gotoid(typval_T *argvars)
+{
+ int id = get_tv_number(&argvars[0]);
+
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp->handle == id) {
+ goto_tabpage_win(tp, wp);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void win_get_tabwin(handle_T id, int *tabnr, int *winnr)
+{
+ *tabnr = 0;
+ *winnr = 0;
+
+ int tnum = 1, wnum = 1;
+ FOR_ALL_TABS(tp) {
+ FOR_ALL_WINDOWS_IN_TAB(wp, tp) {
+ if (wp->handle == id) {
+ *winnr = wnum;
+ *tabnr = tnum;
+ return;
+ }
+ wnum++;
+ }
+ tnum++;
+ wnum = 1;
+ }
+}
+
+void win_id2tabwin(typval_T *argvars, list_T *list)
+{
+ int winnr = 1;
+ int tabnr = 1;
+ int id = get_tv_number(&argvars[0]);
+
+ win_get_tabwin(id, &tabnr, &winnr);
+ list_append_number(list, tabnr);
+ list_append_number(list, winnr);
+}
+
+win_T * win_id2wp(typval_T *argvars)
+{
+ int id = get_tv_number(&argvars[0]);
+
+ FOR_ALL_TAB_WINDOWS(tp, wp) {
+ if (wp->handle == id) {
+ return wp;
+ }
+ }
+
+ return NULL;
+}
+
+int win_id2win(typval_T *argvars)
+{
+ win_T *wp;
+ int nr = 1;
+ int id = get_tv_number(&argvars[0]);
+
+ for (wp = firstwin; wp != NULL; wp = wp->w_next) {
+ if (wp->handle == id) {
+ return nr;
+ }
+ nr++;
+ }
+ return 0;
+}
+
+void win_findbuf(typval_T *argvars, list_T *list)
+{
+ int bufnr = get_tv_number(&argvars[0]);
+
+ for (tabpage_T *tp = first_tabpage; tp != NULL; tp = tp->tp_next) {
+ for (win_T *wp = tp == curtab ? firstwin : tp->tp_firstwin;
+ wp != NULL; wp = wp->w_next) {
+ if (wp->w_buffer->b_fnum == bufnr) {
+ list_append_number(list, wp->handle);
+ }
+ }
+ }
+}