diff options
Diffstat (limited to 'src')
136 files changed, 18047 insertions, 4896 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 8b422b3abe..e4d7115654 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -505,7 +505,7 @@ if(WIN32) set(EXTERNAL_BLOBS_SCRIPT "file(MAKE_DIRECTORY \"${PROJECT_BINARY_DIR}/windows_runtime_deps/platforms\")") foreach(DEP_FILE IN ITEMS - ca-bundle.crt + curl-ca-bundle.crt curl.exe diff.exe tee.exe diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index e79a7a2de2..f84e8c99a4 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -27,6 +27,7 @@ #include "nvim/map_defs.h" #include "nvim/map.h" #include "nvim/mark.h" +#include "nvim/ops.h" #include "nvim/extmark.h" #include "nvim/decoration.h" #include "nvim/fileio.h" @@ -441,6 +442,8 @@ void nvim_buf_set_lines(uint64_t channel_id, goto end; } + bcount_t deleted_bytes = get_region_bytecount(curbuf, start, end, 0, 0); + // If the size of the range is reducing (ie, new_len < old_len) we // need to delete some old_len. We do this at the start, by // repeatedly deleting line "start". @@ -460,6 +463,7 @@ void nvim_buf_set_lines(uint64_t channel_id, // new old_len. This is a more efficient operation, as it requires // less memory allocation and freeing. size_t to_replace = old_len < new_len ? old_len : new_len; + bcount_t inserted_bytes = 0; for (size_t i = 0; i < to_replace; i++) { int64_t lnum = start + (int64_t)i; @@ -472,6 +476,8 @@ void nvim_buf_set_lines(uint64_t channel_id, api_set_error(err, kErrorTypeException, "Failed to replace line"); goto end; } + + inserted_bytes += (bcount_t)strlen(lines[i]) + 1; // Mark lines that haven't been passed to the buffer as they need // to be freed later lines[i] = NULL; @@ -491,6 +497,8 @@ void nvim_buf_set_lines(uint64_t channel_id, goto end; } + inserted_bytes += (bcount_t)strlen(lines[i]) + 1; + // Same as with replacing, but we also need to free lines xfree(lines[i]); lines[i] = NULL; @@ -505,7 +513,11 @@ void nvim_buf_set_lines(uint64_t channel_id, (linenr_T)(end - 1), MAXLNUM, (long)extra, - kExtmarkUndo); + kExtmarkNOOP); + + extmark_splice(curbuf, (int)start-1, 0, (int)(end-start), 0, + deleted_bytes, (int)new_len, 0, inserted_bytes, + kExtmarkUndo); changed_lines((linenr_T)start, 0, (linenr_T)end, (long)extra, true); fix_cursor((linenr_T)start, (linenr_T)end, (linenr_T)extra); @@ -1412,12 +1424,12 @@ Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, /// /// @param buffer Buffer handle, or 0 for current buffer /// @param ns_id Namespace id from |nvim_create_namespace()| -/// @param line Line number where to place the mark -/// @param col Column where to place the mark +/// @param line Line where to place the mark, 0-based +/// @param col Column where to place the mark, 0-based /// @param opts Optional parameters. /// - id : id of the extmark to edit. /// - end_line : ending line of the mark, 0-based inclusive. -/// - end_col : ending col of the mark, 0-based inclusive. +/// - end_col : ending col of the mark, 0-based exclusive. /// - hl_group : name of the highlight group used to highlight /// this mark. /// - virt_text : virtual text to link to this mark. @@ -1426,6 +1438,10 @@ Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, /// - "eol": right after eol character (default) /// - "overlay": display over the specified column, without /// shifting the underlying text. +/// - "right_align": display right aligned in the window. +/// - virt_text_win_col : position the virtual text at a fixed +/// window column (starting from the first +/// text column) /// - virt_text_hide : hide the virtual text when the background /// text is selected or hidden due to /// horizontal scroll 'nowrap' @@ -1574,11 +1590,22 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, decor.virt_text_pos = kVTEndOfLine; } else if (strequal("overlay", str.data)) { decor.virt_text_pos = kVTOverlay; + } else if (strequal("right_align", str.data)) { + decor.virt_text_pos = kVTRightAlign; } else { api_set_error(err, kErrorTypeValidation, "virt_text_pos: invalid value"); goto error; } + } else if (strequal("virt_text_win_col", k.data)) { + if (v->type != kObjectTypeInteger) { + api_set_error(err, kErrorTypeValidation, + "virt_text_win_col is not a Number of the correct size"); + goto error; + } + + decor.col = (int)v->data.integer; + decor.virt_text_pos = kVTWinCol; } else if (strequal("virt_text_hide", k.data)) { decor.virt_text_hide = api_object_to_bool(*v, "virt_text_hide", false, err); @@ -1673,6 +1700,15 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, col2 = 0; } + if (decor.virt_text_pos == kVTRightAlign) { + decor.col = 0; + for (size_t i = 0; i < kv_size(decor.virt_text); i++) { + decor.col + += (int)mb_string2cells((char_u *)kv_A(decor.virt_text, i).text); + } + } + + Decoration *d = NULL; if (ephemeral) { diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 24ba6110c4..c7d261ba18 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -177,42 +177,47 @@ Object dict_get_value(dict_T *dict, String key, Error *err) return vim_to_object(&di->di_tv); } -/// Set a value in a scope dict. Objects are recursively expanded into their -/// vimscript equivalents. -/// -/// @param dict The vimscript dict -/// @param key The key -/// @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 `retval` is true and the key was present, else NIL -Object dict_set_var(dict_T *dict, String key, Object value, bool del, - bool retval, Error *err) +dictitem_T *dict_check_writable(dict_T *dict, String key, bool del, Error *err) { - Object rv = OBJECT_INIT; dictitem_T *di = tv_dict_find(dict, key.data, (ptrdiff_t)key.size); if (di != NULL) { if (di->di_flags & DI_FLAGS_RO) { api_set_error(err, kErrorTypeException, "Key is read-only: %s", key.data); - return rv; } else if (di->di_flags & DI_FLAGS_LOCK) { api_set_error(err, kErrorTypeException, "Key is locked: %s", key.data); - return rv; } else if (del && (di->di_flags & DI_FLAGS_FIX)) { api_set_error(err, kErrorTypeException, "Key is fixed: %s", key.data); - return rv; } } else if (dict->dv_lock) { api_set_error(err, kErrorTypeException, "Dictionary is locked"); - return rv; } else if (key.size == 0) { api_set_error(err, kErrorTypeValidation, "Key name is empty"); - return rv; } else if (key.size > INT_MAX) { api_set_error(err, kErrorTypeValidation, "Key name is too long"); + } + + return di; +} + +/// Set a value in a scope dict. Objects are recursively expanded into their +/// vimscript equivalents. +/// +/// @param dict The vimscript dict +/// @param key The key +/// @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 `retval` is true and the key was present, else NIL +Object dict_set_var(dict_T *dict, String key, Object value, bool del, + bool retval, Error *err) +{ + Object rv = OBJECT_INIT; + dictitem_T *di = dict_check_writable(dict, key, del, err); + + if (ERROR_SET(err)) { return rv; } @@ -1640,7 +1645,7 @@ bool api_object_to_bool(Object obj, const char *what, } else if (obj.type == kObjectTypeNil) { return nil_value; // caller decides what NIL (missing retval in lua) means } else { - api_set_error(err, kErrorTypeValidation, "%s is not an boolean", what); + api_set_error(err, kErrorTypeValidation, "%s is not a boolean", what); return false; } } @@ -1765,6 +1770,7 @@ static void parse_border_style(Object style, FloatConfig *fconfig, Error *err) { "double", { "╔", "═", "╗", "║", "╝", "═", "╚", "║" }, false }, { "single", { "┌", "─", "┐", "│", "┘", "─", "└", "│" }, false }, { "shadow", { "", "", " ", " ", " ", " ", " ", "" }, true }, + { "rounded", { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, false }, { "solid", { " ", " ", " ", " ", " ", " ", " ", " " }, false }, { NULL, { { NUL } } , false }, }; @@ -1863,7 +1869,7 @@ static void parse_border_style(Object style, FloatConfig *fconfig, Error *err) } bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, - Error *err) + bool new_win, Error *err) { // TODO(bfredl): use a get/has_key interface instead and get rid of extra // flags @@ -1909,7 +1915,7 @@ bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, } else if (strequal(key, "height")) { has_height = true; if (val.type == kObjectTypeInteger && val.data.integer > 0) { - fconfig->height= (int)val.data.integer; + fconfig->height = (int)val.data.integer; } else { api_set_error(err, kErrorTypeValidation, "'height' key must be a positive Integer"); @@ -1963,24 +1969,23 @@ bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, } has_bufpos = true; } else if (!strcmp(key, "external")) { - if (val.type == kObjectTypeInteger) { - fconfig->external = val.data.integer; - } else if (val.type == kObjectTypeBoolean) { - fconfig->external = val.data.boolean; - } else { - api_set_error(err, kErrorTypeValidation, - "'external' key must be Boolean"); + has_external = fconfig->external + = api_object_to_bool(val, "'external' key", false, err); + if (ERROR_SET(err)) { return false; } - has_external = fconfig->external; } else if (!strcmp(key, "focusable")) { - if (val.type == kObjectTypeInteger) { - fconfig->focusable = val.data.integer; - } else if (val.type == kObjectTypeBoolean) { - fconfig->focusable = val.data.boolean; + fconfig->focusable + = api_object_to_bool(val, "'focusable' key", true, err); + if (ERROR_SET(err)) { + return false; + } + } else if (strequal(key, "zindex")) { + if (val.type == kObjectTypeInteger && val.data.integer > 0) { + fconfig->zindex = (int)val.data.integer; } else { api_set_error(err, kErrorTypeValidation, - "'focusable' key must be Boolean"); + "'zindex' key must be a positive Integer"); return false; } } else if (!strcmp(key, "border")) { @@ -2002,6 +2007,12 @@ bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, api_set_error(err, kErrorTypeValidation, "Invalid value of 'style' key"); } + } else if (strequal(key, "noautocmd") && new_win) { + fconfig->noautocmd + = api_object_to_bool(val, "'noautocmd' key", false, err); + if (ERROR_SET(err)) { + return false; + } } else { api_set_error(err, kErrorTypeValidation, "Invalid key '%s'", key); diff --git a/src/nvim/api/ui_events.in.h b/src/nvim/api/ui_events.in.h index e934d5dc92..11e21a88ea 100644 --- a/src/nvim/api/ui_events.in.h +++ b/src/nvim/api/ui_events.in.h @@ -106,7 +106,8 @@ void win_pos(Integer grid, Window win, Integer startrow, Integer startcol, Integer width, Integer height) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_float_pos(Integer grid, Window win, String anchor, Integer anchor_grid, - Float anchor_row, Float anchor_col, Boolean focusable) + Float anchor_row, Float anchor_col, Boolean focusable, + Integer zindex) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; void win_external_pos(Integer grid, Window win) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY; diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index c363c77afb..349cc0e7da 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -221,6 +221,12 @@ Dictionary nvim__get_hl_defs(Integer ns_id, Error *err) /// in addition the following keys are also recognized: /// `default`: don't override existing definition, /// like `hi default` +/// `ctermfg`: sets foreground of cterm color +/// `ctermbg`: sets background of cterm color +/// `cterm` : cterm attribute map. sets attributed for +/// cterm colors. similer to `hi cterm` +/// Note: by default cterm attributes are +/// same as attributes of gui color /// @param[out] err Error details, if any /// /// TODO: ns_id = 0, should modify :highlight namespace @@ -978,7 +984,7 @@ Dictionary nvim_get_all_options_info(Error *err) /// Resulting dictionary has keys: /// - name: Name of the option (like 'filetype') /// - shortname: Shortened name of the option (like 'ft') -/// - type: type of option ("string", "integer" or "boolean") +/// - type: type of option ("string", "number" or "boolean") /// - default: The default value for the option /// - was_set: Whether the option was set. /// @@ -1411,6 +1417,15 @@ void nvim_chan_send(Integer chan, String data, Error *err) /// - `external`: GUI should display the window as an external /// top-level window. Currently accepts no other positioning /// configuration together with this. +/// - `zindex`: Stacking order. floats with higher `zindex` go on top on +/// floats with lower indices. Must be larger than zero. The +/// following screen elements have hard-coded z-indices: +/// - 100: insert completion popupmenu +/// - 200: message scrollback +/// - 250: cmdline completion popupmenu (when wildoptions+=pum) +/// The default value for floats are 50. In general, values below 100 are +/// recommended, unless there is a good reason to overshadow builtin +/// elements. /// - `style`: Configure the appearance of the window. Currently only takes /// one non-empty value: /// - "minimal" Nvim will display the window with many UI options @@ -1422,28 +1437,33 @@ void nvim_chan_send(Integer chan, String data, Error *err) /// end-of-buffer region is hidden by setting `eob` flag of /// 'fillchars' to a space char, and clearing the /// |EndOfBuffer| region in 'winhighlight'. -/// - `border`: style of (optional) window border. This can either be a string -/// or an array. the string values are: -/// - "none" No border. This is the default -/// - "single" a single line box -/// - "double" a double line box -/// - "shadow" a drop shadow effect by blending with the background. -/// If it is an array it should be an array of eight items or any divisor of +/// - `border`: Style of (optional) window border. This can either be a string +/// or an array. The string values are +/// - "none": No border (default). +/// - "single": A single line box. +/// - "double": A double line box. +/// - "rounded": Like "single", but with rounded corners ("╭" etc.). +/// - "solid": Adds padding by a single whitespace cell. +/// - "shadow": A drop shadow effect by blending with the background. +/// - If it is an array, it should have a length of eight or any divisor of /// eight. The array will specifify the eight chars building up the border -/// in a clockwise fashion starting with the top-left corner. As, an -/// example, the double box style could be specified as: -/// [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ] -/// if the number of chars are less than eight, they will be repeated. Thus -/// an ASCII border could be specified as: -/// [ "/", "-", "\\", "|" ] -/// or all chars the same as: -/// [ "x" ] -/// An empty string can be used to turn off a specific border, for instance: +/// in a clockwise fashion starting with the top-left corner. As an +/// example, the double box style could be specified as +/// [ "╔", "═" ,"╗", "║", "╝", "═", "╚", "║" ]. +/// If the number of chars are less than eight, they will be repeated. Thus +/// an ASCII border could be specified as +/// [ "/", "-", "\\", "|" ], +/// or all chars the same as +/// [ "x" ]. +/// An empty string can be used to turn off a specific border, for instance, /// [ "", "", "", ">", "", "", "", "<" ] /// will only make vertical borders but not horizontal ones. -/// By default `FloatBorder` highlight is used which links to `VertSplit` +/// By default, `FloatBorder` highlight is used, which links to `VertSplit` /// when not defined. It could also be specified by character: -/// [ {"+", "MyCorner"}, {"x", "MyBorder"} ] +/// [ {"+", "MyCorner"}, {"x", "MyBorder"} ]. +/// - `noautocmd`: If true then no buffer-related autocommand events such as +/// |BufEnter|, |BufLeave| or |BufWinEnter| may fire from +/// calling this function. /// /// @param[out] err Error details, if any /// @@ -1454,7 +1474,7 @@ Window nvim_open_win(Buffer buffer, Boolean enter, Dictionary config, FUNC_API_CHECK_TEXTLOCK { FloatConfig fconfig = FLOAT_CONFIG_INIT; - if (!parse_float_config(config, &fconfig, false, err)) { + if (!parse_float_config(config, &fconfig, false, true, err)) { return 0; } win_T *wp = win_new_float(NULL, fconfig, err); @@ -1469,7 +1489,7 @@ Window nvim_open_win(Buffer buffer, Boolean enter, Dictionary config, return 0; } if (buffer > 0) { - nvim_win_set_buf(wp->handle, buffer, err); + win_set_buf(wp->handle, buffer, fconfig.noautocmd, err); } if (fconfig.style == kWinStyleMinimal) { @@ -2936,6 +2956,7 @@ void nvim_set_decoration_provider(Integer ns_id, DictionaryOf(LuaRef) opts, FUNC_API_SINCE(7) FUNC_API_LUA_ONLY { DecorProvider *p = get_decor_provider((NS)ns_id, true); + assert(p != NULL); decor_provider_clear(p); // regardless of what happens, it seems good idea to redraw diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c index 89fa2f86fb..0729024b45 100644 --- a/src/nvim/api/window.c +++ b/src/nvim/api/window.c @@ -6,19 +6,21 @@ #include <stdlib.h> #include <limits.h> -#include "nvim/ascii.h" -#include "nvim/globals.h" -#include "nvim/api/window.h" #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" +#include "nvim/lua/executor.h" #include "nvim/ex_docmd.h" #include "nvim/vim.h" +#include "nvim/api/window.h" +#include "nvim/ascii.h" #include "nvim/buffer.h" #include "nvim/cursor.h" +#include "nvim/globals.h" +#include "nvim/move.h" #include "nvim/option.h" -#include "nvim/window.h" #include "nvim/screen.h" -#include "nvim/move.h" +#include "nvim/syntax.h" +#include "nvim/window.h" /// Gets the current buffer in a window /// @@ -46,35 +48,7 @@ void nvim_win_set_buf(Window window, Buffer buffer, Error *err) FUNC_API_SINCE(5) FUNC_API_CHECK_TEXTLOCK { - win_T *win = find_window_by_handle(window, err), *save_curwin = curwin; - buf_T *buf = find_buffer_by_handle(buffer, err); - tabpage_T *tab = win_find_tabpage(win), *save_curtab = curtab; - - if (!win || !buf) { - return; - } - - if (switch_win(&save_curwin, &save_curtab, win, tab, false) == FAIL) { - api_set_error(err, - kErrorTypeException, - "Failed to switch to window %d", - window); - } - - try_start(); - int result = do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, buf->b_fnum, 0); - if (!try_end(err) && result == FAIL) { - api_set_error(err, - kErrorTypeException, - "Failed to set buffer %d", - buffer); - } - - // If window is not current, state logic will not validate its cursor. - // So do it now. - validate_cursor(); - - restore_win(save_curwin, save_curtab, false); + win_set_buf(window, buffer, false, err); } /// Gets the (1,0)-indexed cursor position in the window. |api-indexing| @@ -381,7 +355,7 @@ Integer nvim_win_get_number(Window window, Error *err) } int tabnr; - win_get_tabwin(window, &tabnr, &rv); + win_get_tabwin(win->handle, &tabnr, &rv); return rv; } @@ -423,7 +397,7 @@ void nvim_win_set_config(Window window, Dictionary config, Error *err) // reuse old values, if not overriden FloatConfig fconfig = new_float ? FLOAT_CONFIG_INIT : win->w_float_config; - if (!parse_float_config(config, &fconfig, !new_float, err)) { + if (!parse_float_config(config, &fconfig, !new_float, false, err)) { return; } if (new_float) { @@ -483,6 +457,26 @@ Dictionary nvim_win_get_config(Window window, Error *err) PUT(rv, "row", FLOAT_OBJ(config->row)); PUT(rv, "col", FLOAT_OBJ(config->col)); } + if (config->border) { + Array border = ARRAY_DICT_INIT; + for (size_t i = 0; i < 8; i++) { + Array tuple = ARRAY_DICT_INIT; + + String s = cstrn_to_string( + (const char *)config->border_chars[i], sizeof(schar_T)); + + int hi_id = config->border_hl_ids[i]; + char_u *hi_name = syn_id2name(hi_id); + if (hi_name[0]) { + ADD(tuple, STRING_OBJ(s)); + ADD(tuple, STRING_OBJ(cstr_to_string((const char *)hi_name))); + ADD(border, ARRAY_OBJ(tuple)); + } else { + ADD(border, STRING_OBJ(s)); + } + } + PUT(rv, "border", ARRAY_OBJ(border)); + } } const char *rel = (wp->w_floating && !config->external @@ -552,3 +546,39 @@ void nvim_win_close(Window window, Boolean force, Error *err) ex_win_close(force, win, tabpage == curtab ? NULL : tabpage); vim_ignored = try_leave(&tstate, err); } + +/// Calls a function with window as temporary current window. +/// +/// @see |win_execute()| +/// @see |nvim_buf_call()| +/// +/// @param window Window handle, or 0 for current window +/// @param fun Function to call inside the window (currently lua callable +/// only) +/// @param[out] err Error details, if any +/// @return Return value of function. NB: will deepcopy lua values +/// currently, use upvalues to send lua references in and out. +Object nvim_win_call(Window window, LuaRef fun, Error *err) + FUNC_API_SINCE(7) + FUNC_API_LUA_ONLY +{ + win_T *win = find_window_by_handle(window, err); + if (!win) { + return NIL; + } + tabpage_T *tabpage = win_find_tabpage(win); + + win_T *save_curwin; + tabpage_T *save_curtab; + + try_start(); + Object res = OBJECT_INIT; + if (switch_win_noblock(&save_curwin, &save_curtab, win, tabpage, true) == + OK) { + Array args = ARRAY_DICT_INIT; + res = nlua_call_ref(fun, NULL, args, true, err); + } + restore_win_noblock(save_curwin, save_curtab, true); + try_end(err); + return res; +} diff --git a/src/nvim/buffer.c b/src/nvim/buffer.c index ce4163fccf..6a50264e0f 100644 --- a/src/nvim/buffer.c +++ b/src/nvim/buffer.c @@ -85,6 +85,9 @@ # include "buffer.c.generated.h" #endif +// Determines how deeply nested %{} blocks will be evaluated in statusline. +#define MAX_STL_EVAL_DEPTH 100 + static char *msg_loclist = N_("[Location List]"); static char *msg_qflist = N_("[Quickfix List]"); static char *e_auabort = N_("E855: Autocommands caused command to abort"); @@ -407,7 +410,8 @@ bool buf_valid(buf_T *buf) /// 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, bool abort_if_last) +/// @returns true when we got to the end and b_nwindows was decremented. +bool close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) { bool unload_buf = (action != 0); bool del_buf = (action == DOBUF_DEL || action == DOBUF_WIPE); @@ -444,7 +448,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) // halfway a command that relies on it). Unloading is allowed. if (buf->b_locked > 0 && (del_buf || wipe_buf)) { EMSG(_("E937: Attempt to delete a buffer that is in use")); - return; + return false; } if (win != NULL // Avoid bogus clang warning. @@ -471,13 +475,13 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) buf) && !bufref_valid(&bufref)) { // Autocommands deleted the buffer. EMSG(_(e_auabort)); - return; + return false; } buf->b_locked--; if (abort_if_last && last_nonfloat(win)) { // Autocommands made this the only window. EMSG(_(e_auabort)); - return; + return false; } // When the buffer becomes hidden, but is not unloaded, trigger @@ -488,17 +492,17 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) buf) && !bufref_valid(&bufref)) { // Autocommands deleted the buffer. EMSG(_(e_auabort)); - return; + return false; } buf->b_locked--; if (abort_if_last && last_nonfloat(win)) { // Autocommands made this the only window. EMSG(_(e_auabort)); - return; + return false; } } if (aborting()) { // autocmds may abort script processing - return; + return false; } } @@ -525,7 +529,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) /* Return when a window is displaying the buffer or when it's not * unloaded. */ if (buf->b_nwindows > 0 || !unload_buf) { - return; + return false; } if (buf->terminal) { @@ -561,11 +565,11 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) if (!bufref_valid(&bufref)) { // Autocommands may have deleted the buffer. - return; + return false; } if (aborting()) { // Autocmds may abort script processing. - return; + return false; } /* @@ -576,7 +580,7 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) * deleted buffer. */ if (buf == curbuf && !is_curbuf) { - return; + return false; } if (win != NULL // Avoid bogus clang warning. @@ -636,6 +640,8 @@ void close_buffer(win_T *win, buf_T *buf, int action, bool abort_if_last) buf->b_p_bl = false; } } + // NOTE: at this point "curbuf" may be invalid! + return true; } /// Make buffer not contain a file. @@ -3569,6 +3575,7 @@ int build_stl_str_hl( } int groupdepth = 0; + int evaldepth = 0; int curitem = 0; bool prevchar_isflag = true; @@ -3906,6 +3913,13 @@ int build_stl_str_hl( continue; } + // Denotes end of expanded %{} block + if (*fmt_p == '}' && evaldepth > 0) { + fmt_p++; + evaldepth--; + continue; + } + // An invalid item was specified. // Continue processing on the next character of the format string. if (vim_strchr(STL_ALL, *fmt_p) == NULL) { @@ -3947,18 +3961,30 @@ int build_stl_str_hl( } case STL_VIM_EXPR: // '{' { + char_u *block_start = fmt_p - 1; + int reevaluate = (*fmt_p == '%'); itemisflag = true; + if (reevaluate) { + fmt_p++; + } + // Attempt to copy the expression to evaluate into // the output buffer as a null-terminated string. char_u *t = out_p; - while (*fmt_p != '}' && *fmt_p != NUL && out_p < out_end_p) + while ((*fmt_p != '}' || (reevaluate && fmt_p[-1] != '%')) + && *fmt_p != NUL && out_p < out_end_p) { *out_p++ = *fmt_p++; + } if (*fmt_p != '}') { // missing '}' or out of space break; } fmt_p++; - *out_p = 0; + if (reevaluate) { + out_p[-1] = 0; // remove the % at the end of %{% expr %} + } else { + *out_p = 0; + } // Move our position in the output buffer // to the beginning of the expression @@ -4004,6 +4030,40 @@ int build_stl_str_hl( itemisflag = false; } } + + + // If the output of the expression needs to be evaluated + // replace the %{} block with the result of evaluation + if (reevaluate && str != NULL && *str != 0 + && strchr((const char *)str, '%') != NULL + && evaldepth < MAX_STL_EVAL_DEPTH) { + size_t parsed_usefmt = (size_t)(block_start - usefmt); + size_t str_length = strlen((const char *)str); + size_t fmt_length = strlen((const char *)fmt_p); + size_t new_fmt_len = parsed_usefmt + + str_length + fmt_length + 3; + char_u *new_fmt = (char_u *)xmalloc(new_fmt_len * sizeof(char_u)); + char_u *new_fmt_p = new_fmt; + + new_fmt_p = (char_u *)memcpy(new_fmt_p, usefmt, parsed_usefmt) + + parsed_usefmt; + new_fmt_p = (char_u *)memcpy(new_fmt_p , str, str_length) + + str_length; + new_fmt_p = (char_u *)memcpy(new_fmt_p, "%}", 2) + 2; + new_fmt_p = (char_u *)memcpy(new_fmt_p , fmt_p, fmt_length) + + fmt_length; + *new_fmt_p = 0; + new_fmt_p = NULL; + + if (usefmt != fmt) { + xfree(usefmt); + } + XFREE_CLEAR(str); + usefmt = new_fmt; + fmt_p = usefmt + parsed_usefmt; + evaldepth++; + continue; + } break; } diff --git a/src/nvim/buffer_defs.h b/src/nvim/buffer_defs.h index dd24db910e..e3e538bd12 100644 --- a/src/nvim/buffer_defs.h +++ b/src/nvim/buffer_defs.h @@ -1083,12 +1083,14 @@ typedef struct { FloatRelative relative; bool external; bool focusable; + int zindex; WinStyle style; bool border; bool shadow; schar_T border_chars[8]; int border_hl_ids[8]; int border_attr[8]; + bool noautocmd; } FloatConfig; #define FLOAT_CONFIG_INIT ((FloatConfig){ .height = 0, .width = 0, \ @@ -1096,7 +1098,9 @@ typedef struct { .row = 0, .col = 0, .anchor = 0, \ .relative = 0, .external = false, \ .focusable = true, \ - .style = kWinStyleUnused }) + .zindex = kZIndexFloatDefault, \ + .style = kWinStyleUnused, \ + .noautocmd = false }) // Structure to store last cursor position and topline. Used by check_lnums() // and reset_lnums(). diff --git a/src/nvim/change.c b/src/nvim/change.c index 74e27ca880..c0183d4317 100644 --- a/src/nvim/change.c +++ b/src/nvim/change.c @@ -1695,10 +1695,12 @@ int open_line( int new_len = (int)STRLEN(saved_line); // TODO(vigoux): maybe there is issues there with expandtabs ? + int cols_spliced = 0; if (new_len < curwin->w_cursor.col) { extmark_splice_cols( - curbuf, (int)curwin->w_cursor.lnum, + curbuf, (int)curwin->w_cursor.lnum - 1, new_len, curwin->w_cursor.col - new_len, 0, kExtmarkUndo); + cols_spliced = curwin->w_cursor.col - new_len; } saved_line = NULL; @@ -1716,7 +1718,7 @@ int open_line( // Always move extmarks - Here we move only the line where the // cursor is, the previous mark_adjust takes care of the lines after int cols_added = mincol-1+less_cols_off-less_cols; - extmark_splice(curbuf, (int)lnum-1, mincol-1, + extmark_splice(curbuf, (int)lnum-1, mincol-1 - cols_spliced, 0, less_cols_off, less_cols_off, 1, cols_added, 1 + cols_added, kExtmarkUndo); } else { diff --git a/src/nvim/channel.c b/src/nvim/channel.c index 22eb31513d..60af11e94b 100644 --- a/src/nvim/channel.c +++ b/src/nvim/channel.c @@ -162,6 +162,7 @@ void channel_init(void) /// Channel is allocated with refcount 1, which should be decreased /// when the underlying stream closes. Channel *channel_alloc(ChannelStreamType type) + FUNC_ATTR_NONNULL_RET { Channel *chan = xcalloc(1, sizeof(*chan)); if (type == kChannelStreamStdio) { diff --git a/src/nvim/cursor.c b/src/nvim/cursor.c index 74a6f77a6d..5d2210dc7d 100644 --- a/src/nvim/cursor.c +++ b/src/nvim/cursor.c @@ -14,6 +14,7 @@ #include "nvim/misc1.h" #include "nvim/move.h" #include "nvim/screen.h" +#include "nvim/extmark.h" #include "nvim/state.h" #include "nvim/vim.h" #include "nvim/ascii.h" @@ -181,7 +182,7 @@ static int coladvance2( memset(newline + idx, ' ', (size_t)correct); ml_replace(pos->lnum, newline, false); - changed_bytes(pos->lnum, (colnr_T)idx); + inserted_bytes(pos->lnum, (colnr_T)idx, 0, correct); idx += correct; col = wcol; } else { @@ -206,7 +207,7 @@ static int coladvance2( memcpy(newline + idx + csize, line + idx + 1, n); ml_replace(pos->lnum, newline, false); - changed_bytes(pos->lnum, idx); + inserted_bytes(pos->lnum, idx, 1, csize); idx += (csize - 1 + correct); col += correct; } diff --git a/src/nvim/decoration.c b/src/nvim/decoration.c index e39d2328f5..f3000f4430 100644 --- a/src/nvim/decoration.c +++ b/src/nvim/decoration.c @@ -230,6 +230,10 @@ static void decor_add(DecorState *state, int start_row, int start_col, *decor, attr_id, kv_size(decor->virt_text) && owned, -1 }; + if (decor->virt_text_pos == kVTEndOfLine) { + range.win_col = -2; // handled separately + } + kv_pushp(state->active); size_t index; for (index = kv_size(state->active)-1; index > 0; index--) { @@ -242,7 +246,7 @@ static void decor_add(DecorState *state, int start_row, int start_col, kv_A(state->active, index) = range; } -int decor_redraw_col(buf_T *buf, int col, int virt_col, bool hidden, +int decor_redraw_col(buf_T *buf, int col, int win_col, bool hidden, DecorState *state) { if (col <= state->col_until) { @@ -321,8 +325,9 @@ next_mark: attr = hl_combine_attr(attr, item.attr_id); } if ((item.start_row == state->row && item.start_col <= col) - && kv_size(item.decor.virt_text) && item.virt_col == -1) { - item.virt_col = (item.decor.virt_text_hide && hidden) ? -2 : virt_col; + && kv_size(item.decor.virt_text) + && item.decor.virt_text_pos == kVTOverlay && item.win_col == -1) { + item.win_col = (item.decor.virt_text_hide && hidden) ? -2 : win_col; } if (keep) { kv_A(state->active, j++) = item; @@ -340,18 +345,23 @@ void decor_redraw_end(DecorState *state) state->buf = NULL; } -VirtText decor_redraw_eol(buf_T *buf, DecorState *state, int *eol_attr) +VirtText decor_redraw_eol(buf_T *buf, DecorState *state, int *eol_attr, + bool *aligned) { decor_redraw_col(buf, MAXCOL, MAXCOL, false, state); VirtText text = VIRTTEXT_EMPTY; for (size_t i = 0; i < kv_size(state->active); i++) { DecorRange item = kv_A(state->active, i); - if (!kv_size(text) - && item.start_row == state->row && kv_size(item.decor.virt_text) - && item.decor.virt_text_pos == kVTEndOfLine) { - text = item.decor.virt_text; + if (item.start_row == state->row && kv_size(item.decor.virt_text)) { + if (!kv_size(text) && item.decor.virt_text_pos == kVTEndOfLine) { + text = item.decor.virt_text; + } else if (item.decor.virt_text_pos == kVTRightAlign + || item.decor.virt_text_pos == kVTWinCol) { + *aligned = true; + } } + if (item.decor.hl_eol && item.start_row <= state->row) { *eol_attr = hl_combine_attr(*eol_attr, item.attr_id); } @@ -373,8 +383,9 @@ void decor_add_ephemeral(int start_row, int start_col, int end_row, int end_col, DecorProvider *get_decor_provider(NS ns_id, bool force) { - ssize_t i; - for (i = 0; i < (ssize_t)kv_size(decor_providers); i++) { + size_t i; + size_t len = kv_size(decor_providers); + for (i = 0; i < len; i++) { DecorProvider *item = &kv_A(decor_providers, i); if (item->ns_id == ns_id) { return item; @@ -387,12 +398,16 @@ DecorProvider *get_decor_provider(NS ns_id, bool force) return NULL; } - for (ssize_t j = (ssize_t)kv_size(decor_providers)-1; j >= i; j++) { - // allocates if needed: - (void)kv_a(decor_providers, (size_t)j+1); - kv_A(decor_providers, (size_t)j+1) = kv_A(decor_providers, j); + // Adding a new provider, so allocate room in the vector + (void)kv_a(decor_providers, len); + if (i < len) { + // New ns_id needs to be inserted between existing providers to maintain + // ordering, so shift other providers with larger ns_id + memmove(&kv_A(decor_providers, i + 1), + &kv_A(decor_providers, i), + (len - i) * sizeof(kv_a(decor_providers, i))); } - DecorProvider *item = &kv_a(decor_providers, (size_t)i); + DecorProvider *item = &kv_a(decor_providers, i); *item = DECORATION_PROVIDER_INIT(ns_id); return item; diff --git a/src/nvim/decoration.h b/src/nvim/decoration.h index 08d69060f0..4cebc0b731 100644 --- a/src/nvim/decoration.h +++ b/src/nvim/decoration.h @@ -21,6 +21,8 @@ typedef uint16_t DecorPriority; typedef enum { kVTEndOfLine, kVTOverlay, + kVTWinCol, + kVTRightAlign, } VirtTextPos; typedef enum { @@ -41,9 +43,10 @@ struct Decoration // TODO(bfredl): style, signs, etc DecorPriority priority; bool shared; // shared decoration, don't free + int col; // fixed col value, like win_col }; #define DECORATION_INIT { 0, KV_INITIAL_VALUE, kVTEndOfLine, false, \ - kHlModeUnknown, false, DECOR_PRIORITY_BASE, false } + kHlModeUnknown, false, DECOR_PRIORITY_BASE, false, 0 } typedef struct { int start_row; @@ -53,7 +56,7 @@ typedef struct { Decoration decor; int attr_id; // cached lookup of decor.hl_id bool virt_text_owned; - int virt_col; + int win_col; } DecorRange; typedef struct { diff --git a/src/nvim/diff.c b/src/nvim/diff.c index 31b7b1bd8f..5f8b81822b 100644 --- a/src/nvim/diff.c +++ b/src/nvim/diff.c @@ -982,12 +982,14 @@ static int check_external_diff(diffio_T *diffio) char_u linebuf[LBUFLEN]; for (;;) { - // There must be a line that contains "1c1". + // For normal diff there must be a line that contains + // "1c1". For unified diff "@@ -1 +1 @@". if (vim_fgets(linebuf, LBUFLEN, fd)) { break; } - if (STRNCMP(linebuf, "1c1", 3) == 0) { + if (STRNCMP(linebuf, "1c1", 3) == 0 + || STRNCMP(linebuf, "@@ -1 +1 @@", 11) == 0) { ok = kTrue; } } diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 999cc74185..1579f3ff98 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -992,6 +992,7 @@ static int insert_handle_key(InsertState *s) case K_LEFTDRAG: case K_LEFTRELEASE: case K_LEFTRELEASE_NM: + case K_MOUSEMOVE: case K_MIDDLEMOUSE: case K_MIDDLEDRAG: case K_MIDDLERELEASE: @@ -3149,9 +3150,7 @@ static void ins_compl_clear(void) XFREE_CLEAR(compl_orig_text); compl_enter_selects = false; // clear v:completed_item - dict_T *const d = tv_dict_alloc(); - d->dv_lock = VAR_FIXED; - set_vim_var_dict(VV_COMPLETED_ITEM, d); + set_vim_var_dict(VV_COMPLETED_ITEM, tv_dict_alloc_lock(VAR_FIXED)); } /// Check that Insert completion is active. @@ -4496,9 +4495,7 @@ static void ins_compl_delete(void) // causes flicker, thus we can't do that. changed_cline_bef_curs(); // clear v:completed_item - dict_T *const d = tv_dict_alloc(); - d->dv_lock = VAR_FIXED; - set_vim_var_dict(VV_COMPLETED_ITEM, d); + set_vim_var_dict(VV_COMPLETED_ITEM, tv_dict_alloc_lock(VAR_FIXED)); } // Insert the new text being completed. @@ -4519,8 +4516,7 @@ static void ins_compl_insert(int in_compl_func) static dict_T *ins_compl_dict_alloc(compl_T *match) { // { word, abbr, menu, kind, info } - dict_T *dict = tv_dict_alloc(); - dict->dv_lock = VAR_FIXED; + dict_T *dict = tv_dict_alloc_lock(VAR_FIXED); tv_dict_add_str( dict, S_LEN("word"), (const char *)EMPTY_IF_NULL(match->cp_str)); diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 05d429c7d5..a3fa9c986f 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -213,6 +213,9 @@ static struct vimvar { VV(VV_FALSE, "false", VAR_BOOL, VV_RO), VV(VV_TRUE, "true", VAR_BOOL, VV_RO), VV(VV_NULL, "null", VAR_SPECIAL, VV_RO), + VV(VV_NUMBERMAX, "numbermax", VAR_NUMBER, VV_RO), + VV(VV_NUMBERMIN, "numbermin", VAR_NUMBER, VV_RO), + VV(VV_NUMBERSIZE, "numbersize", VAR_NUMBER, VV_RO), VV(VV_VIM_DID_ENTER, "vim_did_enter", VAR_NUMBER, VV_RO), VV(VV_TESTING, "testing", VAR_NUMBER, 0), VV(VV_TYPE_NUMBER, "t_number", VAR_NUMBER, VV_RO), @@ -225,6 +228,7 @@ static struct vimvar { VV(VV_EVENT, "event", VAR_DICT, VV_RO), VV(VV_ECHOSPACE, "echospace", VAR_NUMBER, VV_RO), VV(VV_ARGV, "argv", VAR_LIST, VV_RO), + VV(VV_COLLATE, "collate", VAR_STRING, VV_RO), VV(VV_EXITING, "exiting", VAR_NUMBER, VV_RO), // Neovim VV(VV_STDERR, "stderr", VAR_NUMBER, VV_RO), @@ -373,11 +377,9 @@ void eval_init(void) msgpack_types_dict->dv_lock = VAR_FIXED; set_vim_var_dict(VV_MSGPACK_TYPES, msgpack_types_dict); - set_vim_var_dict(VV_COMPLETED_ITEM, tv_dict_alloc()); + set_vim_var_dict(VV_COMPLETED_ITEM, tv_dict_alloc_lock(VAR_FIXED)); - dict_T *v_event = tv_dict_alloc(); - v_event->dv_lock = VAR_FIXED; - set_vim_var_dict(VV_EVENT, v_event); + set_vim_var_dict(VV_EVENT, tv_dict_alloc_lock(VAR_FIXED)); set_vim_var_list(VV_ERRORS, tv_list_alloc(kListLenUnknown)); set_vim_var_nr(VV_STDERR, CHAN_STDERR); set_vim_var_nr(VV_SEARCHFORWARD, 1L); @@ -394,6 +396,9 @@ void eval_init(void) set_vim_var_bool(VV_FALSE, kBoolVarFalse); set_vim_var_bool(VV_TRUE, kBoolVarTrue); set_vim_var_special(VV_NULL, kSpecialVarNull); + set_vim_var_nr(VV_NUMBERMAX, VARNUMBER_MAX); + set_vim_var_nr(VV_NUMBERMIN, VARNUMBER_MIN); + set_vim_var_nr(VV_NUMBERSIZE, sizeof(varnumber_T) * 8); set_vim_var_special(VV_EXITING, kSpecialVarNull); set_vim_var_nr(VV_ECHOSPACE, sc_col - 1); @@ -1569,7 +1574,7 @@ static const char_u *skip_var_list(const char_u *arg, int *var_count, break; else if (*p == ';') { if (*semicolon == 1) { - EMSG(_("Double ; in list of variables")); + EMSG(_("E452: Double ; in list of variables")); return NULL; } *semicolon = 1; @@ -1614,7 +1619,7 @@ void list_hashtable_vars(hashtab_T *ht, const char *prefix, int empty, char buf[IOSIZE]; // apply :filter /pat/ to variable name - xstrlcpy(buf, prefix, IOSIZE - 1); + xstrlcpy(buf, prefix, IOSIZE); xstrlcat(buf, (char *)di->di_key, IOSIZE); if (message_filtered((char_u *)buf)) { continue; @@ -6321,7 +6326,7 @@ void get_qf_loc_list(int is_qf, win_T *wp, typval_T *what_arg, if (what_arg->v_type == VAR_UNKNOWN) { tv_list_alloc_ret(rettv, kListLenMayKnow); if (is_qf || wp != NULL) { - (void)get_errorlist(NULL, wp, -1, rettv->vval.v_list); + (void)get_errorlist(NULL, wp, -1, 0, rettv->vval.v_list); } } else { tv_dict_alloc_ret(rettv); @@ -7195,9 +7200,13 @@ bool callback_from_typval(Callback *const callback, typval_T *const arg) r = FAIL; } 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; + if (name != NULL) { + func_ref(name); + callback->data.funcref = vim_strsave(name); + callback->type = kCallbackFuncref; + } else { + r = FAIL; + } } else if (nlua_is_table_from_lua(arg)) { char_u *name = nlua_register_table_as_callable(arg); @@ -7610,7 +7619,7 @@ char *save_tv_as_string(typval_T *tv, ptrdiff_t *const len, bool endnl) /// @param[out] ret_fnum Set to fnum for marks. /// /// @return Pointer to position or NULL in case of error (e.g. invalid type). -pos_T *var2fpos(const typval_T *const tv, const int dollar_lnum, +pos_T *var2fpos(const typval_T *const tv, const bool dollar_lnum, int *const ret_fnum) FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL { diff --git a/src/nvim/eval.h b/src/nvim/eval.h index 3da4bb8655..41120b3c78 100644 --- a/src/nvim/eval.h +++ b/src/nvim/eval.h @@ -142,6 +142,9 @@ typedef enum { VV_FALSE, VV_TRUE, VV_NULL, + VV_NUMBERMAX, + VV_NUMBERMIN, + VV_NUMBERSIZE, VV_VIM_DID_ENTER, VV_TESTING, VV_TYPE_NUMBER, @@ -154,6 +157,7 @@ typedef enum { VV_EVENT, VV_ECHOSPACE, VV_ARGV, + VV_COLLATE, VV_EXITING, // Neovim VV_STDERR, diff --git a/src/nvim/eval.lua b/src/nvim/eval.lua index 77e7c7b3a9..33c6fae5cf 100644 --- a/src/nvim/eval.lua +++ b/src/nvim/eval.lua @@ -217,7 +217,7 @@ return { len={args=1}, libcall={args=3}, libcallnr={args=3}, - line={args=1}, + line={args={1, 2}}, line2byte={args=1}, lispindent={args=1}, list2str={args={1, 2}}, @@ -286,6 +286,7 @@ return { screenpos={args=3}, screenrow={}, search={args={1, 4}}, + searchcount={args={0,1}}, searchdecl={args={1, 3}}, searchpair={args={3, 7}}, searchpairpos={args={3, 7}}, @@ -390,6 +391,7 @@ return { visualmode={args={0, 1}}, wait={args={2,3}}, wildmenumode={}, + win_execute={args={2, 3}}, win_findbuf={args=1}, win_getid={args={0,2}}, win_gettype={args={0,1}}, diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 6d328953f6..4f9a9fcd68 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -1850,15 +1850,30 @@ static void f_environ(typval_T *argvars, typval_T *rettv, FunPtr fptr) ptrdiff_t len = end - str; assert(len > 0); const char * value = str + len + 1; - if (tv_dict_find(rettv->vval.v_dict, str, len) != NULL) { + + char c = env[i][len]; + env[i][len] = NUL; + +#ifdef WIN32 + // Upper-case all the keys for Windows so we can detect duplicates + char *const key = strcase_save(str, true); +#else + char *const key = xstrdup(str); +#endif + + env[i][len] = c; + + if (tv_dict_find(rettv->vval.v_dict, key, len) != NULL) { // Since we're traversing from the end of the env block to the front, any // duplicate names encountered should be ignored. This preserves the // semantics of env vars defined later in the env block taking precedence. + xfree(key); continue; } tv_dict_add_str(rettv->vval.v_dict, - str, len, + key, len, value); + xfree(key); } os_free_fullenv(env); } @@ -1953,8 +1968,8 @@ static char_u *get_list_line(int c, void *cookie, int indent, bool do_concat) return (char_u *)(s == NULL ? NULL : xstrdup(s)); } -// "execute(command)" function -static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) +static void execute_common(typval_T *argvars, typval_T *rettv, FunPtr fptr, + int arg_off) { const int save_msg_silent = msg_silent; const int save_emsg_silent = emsg_silent; @@ -1968,9 +1983,9 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) return; } - if (argvars[1].v_type != VAR_UNKNOWN) { + if (argvars[arg_off + 1].v_type != VAR_UNKNOWN) { char buf[NUMBUFLEN]; - const char *const s = tv_get_string_buf_chk(&argvars[1], buf); + const char *const s = tv_get_string_buf_chk(&argvars[arg_off + 1], buf); if (s == NULL) { return; @@ -1997,10 +2012,10 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) msg_col = 0; // prevent leading spaces } - if (argvars[0].v_type != VAR_LIST) { - do_cmdline_cmd(tv_get_string(&argvars[0])); - } else if (argvars[0].vval.v_list != NULL) { - list_T *const list = argvars[0].vval.v_list; + if (argvars[arg_off].v_type != VAR_LIST) { + do_cmdline_cmd(tv_get_string(&argvars[arg_off])); + } else if (argvars[arg_off].vval.v_list != NULL) { + list_T *const list = argvars[arg_off].vval.v_list; tv_list_ref(list); GetListLineCookie cookie = { .l = list, @@ -2032,6 +2047,39 @@ static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) capture_ga = save_capture_ga; } +// "execute(command)" function +static void f_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + execute_common(argvars, rettv, fptr, 0); +} + +// "win_execute(win_id, command)" function +static void f_win_execute(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + tabpage_T *tp; + win_T *wp = win_id2wp_tp(argvars, &tp); + win_T *save_curwin; + tabpage_T *save_curtab; + // Return an empty string if something fails. + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + + if (wp != NULL && tp != NULL) { + pos_T curpos = wp->w_cursor; + if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) == + OK) { + check_cursor(); + execute_common(argvars, rettv, fptr, 1); + } + restore_win_noblock(save_curwin, save_curtab, true); + + // Update the status line if the cursor moved. + if (win_valid(wp) && !equalpos(curpos, wp->w_cursor)) { + wp->w_redr_status = true; + } + } +} + /// "exepath()" function static void f_exepath(typval_T *argvars, typval_T *rettv, FunPtr fptr) { @@ -2499,7 +2547,7 @@ static void f_fnamemodify(typval_T *argvars, typval_T *rettv, FunPtr fptr) } else { len = strlen(fname); size_t usedlen = 0; - if (mods != NULL && *mods != NUL) { + if (*mods != NUL) { (void)modify_fname((char_u *)mods, false, &usedlen, (char_u **)&fname, &fbuf, &len); } @@ -2737,10 +2785,9 @@ static void f_get(typval_T *argvars, typval_T *rettv, FunPtr fptr) } } else if (strcmp(what, "args") == 0) { rettv->v_type = VAR_LIST; - if (tv_list_alloc_ret(rettv, pt->pt_argc) != NULL) { - for (int i = 0; i < pt->pt_argc; i++) { - tv_list_append_tv(rettv->vval.v_list, &pt->pt_argv[i]); - } + tv_list_alloc_ret(rettv, pt->pt_argc); + for (int i = 0; i < pt->pt_argc; i++) { + tv_list_append_tv(rettv->vval.v_list, &pt->pt_argv[i]); } } else { EMSG2(_(e_invarg2), what); @@ -3016,7 +3063,10 @@ static void f_getchar(typval_T *argvars, typval_T *rettv, FunPtr fptr) n = safe_vgetc(); } - if (n == K_IGNORE || n == K_VER_SCROLLBAR || n == K_HOR_SCROLLBAR) { + if (n == K_IGNORE + || n == K_MOUSEMOVE + || n == K_VER_SCROLLBAR + || n == K_HOR_SCROLLBAR) { continue; } break; @@ -5061,7 +5111,21 @@ static dict_T *create_environment(const dictitem_T *job_env, } if (job_env) { +#ifdef WIN32 + TV_DICT_ITER(job_env->di_tv.vval.v_dict, var, { + // Always use upper-case keys for Windows so we detect duplicate keys + char *const key = strcase_save((const char *)var->di_key, true); + size_t len = strlen(key); + dictitem_T *dv = tv_dict_find(env, key, len); + if (dv) { + tv_dict_item_remove(env, dv); + } + tv_dict_add_str(env, key, len, tv_get_string(&var->di_tv)); + xfree(key); + }); +#else tv_dict_extend(env, job_env->di_tv.vval.v_dict, "force"); +#endif } if (pty) { @@ -5504,18 +5568,36 @@ static void f_libcallnr(typval_T *argvars, typval_T *rettv, FunPtr fptr) libcall_common(argvars, rettv, VAR_NUMBER); } -/* - * "line(string)" function - */ +// "line(string, [winid])" function static void f_line(typval_T *argvars, typval_T *rettv, FunPtr fptr) { linenr_T lnum = 0; - pos_T *fp; + pos_T *fp = NULL; int fnum; - fp = var2fpos(&argvars[0], TRUE, &fnum); - if (fp != NULL) + if (argvars[1].v_type != VAR_UNKNOWN) { + tabpage_T *tp; + win_T *save_curwin; + tabpage_T *save_curtab; + + // use window specified in the second argument + win_T *wp = win_id2wp_tp(&argvars[1], &tp); + if (wp != NULL && tp != NULL) { + if (switch_win_noblock(&save_curwin, &save_curtab, wp, tp, true) + == OK) { + check_cursor(); + fp = var2fpos(&argvars[0], true, &fnum); + } + restore_win_noblock(save_curwin, save_curtab, true); + } + } else { + // use current window + fp = var2fpos(&argvars[0], true, &fnum); + } + + if (fp != NULL) { lnum = fp->lnum; + } rettv->vval.v_number = lnum; } @@ -9178,6 +9260,7 @@ static void f_sockconnect(typval_T *argvars, typval_T *rettv, FunPtr fptr) /// struct storing information about current sort typedef struct { int item_compare_ic; + bool item_compare_lc; bool item_compare_numeric; bool item_compare_numbers; bool item_compare_float; @@ -9252,10 +9335,10 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero) p2 = ""; } if (!sortinfo->item_compare_numeric) { - if (sortinfo->item_compare_ic) { - res = STRICMP(p1, p2); + if (sortinfo->item_compare_lc) { + res = strcoll(p1, p2); } else { - res = STRCMP(p1, p2); + res = sortinfo->item_compare_ic ? STRICMP(p1, p2): STRCMP(p1, p2); } } else { double n1, n2; @@ -9390,6 +9473,7 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort) } info.item_compare_ic = false; + info.item_compare_lc = false; info.item_compare_numeric = false; info.item_compare_numbers = false; info.item_compare_float = false; @@ -9434,6 +9518,9 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort) } else if (strcmp(info.item_compare_func, "i") == 0) { info.item_compare_func = NULL; info.item_compare_ic = true; + } else if (strcmp(info.item_compare_func, "l") == 0) { + info.item_compare_func = NULL; + info.item_compare_lc = true; } } } @@ -9574,6 +9661,18 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr) const char *word = ""; hlf_T attr = HLF_COUNT; size_t len = 0; + const int wo_spell_save = curwin->w_p_spell; + + if (!curwin->w_p_spell) { + did_set_spelllang(curwin); + curwin->w_p_spell = true; + } + + if (*curwin->w_s->b_p_spl == NUL) { + EMSG(_(e_no_spell)); + curwin->w_p_spell = wo_spell_save; + return; + } if (argvars[0].v_type == VAR_UNKNOWN) { // Find the start and length of the badly spelled word. @@ -9582,7 +9681,7 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr) word = (char *)get_cursor_pos_ptr(); curwin->w_set_curswant = true; } - } else if (curwin->w_p_spell && *curbuf->b_s.b_p_spl != NUL) { + } else if (*curbuf->b_s.b_p_spl != NUL) { const char *str = tv_get_string_chk(&argvars[0]); int capcol = -1; @@ -9600,6 +9699,7 @@ static void f_spellbadword(typval_T *argvars, typval_T *rettv, FunPtr fptr) } } } + curwin->w_p_spell = wo_spell_save; assert(len <= INT_MAX); tv_list_alloc_ret(rettv, 2); @@ -9621,8 +9721,20 @@ static void f_spellsuggest(typval_T *argvars, typval_T *rettv, FunPtr fptr) int maxcount; garray_T ga = GA_EMPTY_INIT_VALUE; bool need_capital = false; + const int wo_spell_save = curwin->w_p_spell; + + if (!curwin->w_p_spell) { + did_set_spelllang(curwin); + curwin->w_p_spell = true; + } + + if (*curwin->w_s->b_p_spl == NUL) { + EMSG(_(e_no_spell)); + curwin->w_p_spell = wo_spell_save; + return; + } - if (curwin->w_p_spell && *curwin->w_s->b_p_spl != NUL) { + if (*curwin->w_s->b_p_spl != NUL) { const char *const str = tv_get_string(&argvars[0]); if (argvars[1].v_type != VAR_UNKNOWN) { maxcount = tv_get_number_chk(&argvars[1], &typeerr); @@ -9649,6 +9761,7 @@ f_spellsuggest_return: tv_list_append_allocated_string(rettv->vval.v_list, p); } ga_clear(&ga); + curwin->w_p_spell = wo_spell_save; } static void f_split(typval_T *argvars, typval_T *rettv, FunPtr fptr) diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c index 71e4edc667..61de83fc21 100644 --- a/src/nvim/eval/typval.c +++ b/src/nvim/eval/typval.c @@ -2098,7 +2098,7 @@ void tv_dict_set_keys_readonly(dict_T *const dict) /// /// @return [allocated] pointer to the created list. list_T *tv_list_alloc_ret(typval_T *const ret_tv, const ptrdiff_t len) - FUNC_ATTR_NONNULL_ALL + FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET { list_T *const l = tv_list_alloc(len); tv_list_set_ret(ret_tv, l); @@ -2106,6 +2106,14 @@ list_T *tv_list_alloc_ret(typval_T *const ret_tv, const ptrdiff_t len) return l; } +dict_T *tv_dict_alloc_lock(VarLockStatus lock) + FUNC_ATTR_NONNULL_RET +{ + dict_T *const d = tv_dict_alloc(); + d->dv_lock = lock; + return d; +} + /// Allocate an empty dictionary for a return value /// /// Also sets reference count. @@ -2114,9 +2122,8 @@ list_T *tv_list_alloc_ret(typval_T *const ret_tv, const ptrdiff_t len) void tv_dict_alloc_ret(typval_T *const ret_tv) FUNC_ATTR_NONNULL_ALL { - dict_T *const d = tv_dict_alloc(); + dict_T *const d = tv_dict_alloc_lock(VAR_UNLOCKED); tv_dict_set_ret(ret_tv, d); - ret_tv->v_lock = VAR_UNLOCKED; } //{{{3 Clear diff --git a/src/nvim/eval/userfunc.c b/src/nvim/eval/userfunc.c index 00260bc3f7..f5d1b1e870 100644 --- a/src/nvim/eval/userfunc.c +++ b/src/nvim/eval/userfunc.c @@ -144,10 +144,6 @@ static int get_function_args(char_u **argp, char_u endchar, garray_T *newargs, c = *p; *p = NUL; expr = vim_strsave(expr); - if (expr == NULL) { - *p = c; - goto err_ret; - } ((char_u **)(default_args->ga_data)) [default_args->ga_len] = expr; default_args->ga_len++; @@ -537,7 +533,7 @@ static char_u *fname_trans_sid(const char_u *const name, if (current_sctx.sc_sid <= 0) { *error = ERROR_SCRIPT; } else { - snprintf((char *)fname_buf + 3, FLEN_FIXED + 1, "%" PRId64 "_", + snprintf((char *)fname_buf + i, FLEN_FIXED + 1 - i, "%" PRId64 "_", (int64_t)current_sctx.sc_sid); i = (int)STRLEN(fname_buf); } diff --git a/src/nvim/ex_cmds.c b/src/nvim/ex_cmds.c index 3e330b88a2..6a0a08eee8 100644 --- a/src/nvim/ex_cmds.c +++ b/src/nvim/ex_cmds.c @@ -358,6 +358,7 @@ static int linelen(int *has_tab) static char_u *sortbuf1; static char_u *sortbuf2; +static int sort_lc; ///< sort using locale static int sort_ic; ///< ignore case static int sort_nr; ///< sort on number static int sort_rx; ///< sort on regex instead of skipping it @@ -381,6 +382,13 @@ typedef struct { } st_u; } sorti_T; +static int string_compare(const void *s1, const void *s2) FUNC_ATTR_NONNULL_ALL +{ + if (sort_lc) { + return strcoll((char *)s1, (char *)s2); + } + return sort_ic ? STRICMP(s1, s2) : STRCMP(s1, s2); +} static int sort_compare(const void *s1, const void *s2) { @@ -424,8 +432,7 @@ static int sort_compare(const void *s1, const void *s2) 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); + result = string_compare(sortbuf1, sortbuf2); } /* If two lines have the same value, preserve the original line order. */ @@ -466,7 +473,7 @@ void ex_sort(exarg_T *eap) regmatch.regprog = NULL; sorti_T *nrs = xmalloc(count * sizeof(sorti_T)); - sort_abort = sort_ic = sort_rx = sort_nr = sort_flt = 0; + sort_abort = sort_ic = sort_lc = sort_rx = sort_nr = sort_flt = 0; size_t format_found = 0; bool change_occurred = false; // Buffer contents changed. @@ -474,6 +481,8 @@ void ex_sort(exarg_T *eap) if (ascii_iswhite(*p)) { } else if (*p == 'i') { sort_ic = true; + } else if (*p == 'l') { + sort_lc = true; } else if (*p == 'r') { sort_rx = true; } else if (*p == 'n') { @@ -645,8 +654,7 @@ void ex_sort(exarg_T *eap) s = ml_get(get_lnum); size_t bytelen = STRLEN(s) + 1; // include EOL in bytelen old_count += bytelen; - if (!unique || i == 0 - || (sort_ic ? STRICMP(s, sortbuf1) : STRCMP(s, sortbuf1)) != 0) { + if (!unique || i == 0 || string_compare(s, sortbuf1) != 0) { // Copy the line into a buffer, it may become invalid in // ml_append(). And it's needed for "unique". STRCPY(sortbuf1, s); @@ -2426,21 +2434,25 @@ int do_ecmd( * is returned by buflist_new(), nothing to do here. */ if (buf != curbuf) { - /* - * Be careful: The autocommands may delete any buffer and change - * the current buffer. - * - If the buffer we are going to edit is deleted, give up. - * - If the current buffer is deleted, prefer to load the new - * buffer when loading a buffer is required. This avoids - * loading another buffer which then must be closed again. - * - If we ended up in the new buffer already, need to skip a few - * things, set auto_buf. - */ + const int save_cmdwin_type = cmdwin_type; + + // BufLeave applies to the old buffer. + cmdwin_type = 0; + + // Be careful: The autocommands may delete any buffer and change + // the current buffer. + // - If the buffer we are going to edit is deleted, give up. + // - If the current buffer is deleted, prefer to load the new + // buffer when loading a buffer is required. This avoids + // loading another buffer which then must be closed again. + // - If we ended up in the new buffer already, need to skip a few + // things, set auto_buf. if (buf->b_fname != NULL) { new_name = vim_strsave(buf->b_fname); } set_bufref(&au_new_curbuf, buf); apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, false, curbuf); + cmdwin_type = save_cmdwin_type; if (!bufref_valid(&au_new_curbuf)) { // New buffer has been deleted. delbuf_msg(new_name); // Frees new_name. @@ -2454,6 +2466,7 @@ int do_ecmd( auto_buf = true; } else { win_T *the_curwin = curwin; + buf_T *was_curbuf = curbuf; // Set w_closing to avoid that autocommands close the window. // Set b_locked for the same reason. @@ -2467,9 +2480,10 @@ int do_ecmd( // Close the link to the current buffer. This will set // oldwin->w_buffer to NULL. u_sync(false); - close_buffer(oldwin, curbuf, - (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD, - false); + const bool did_decrement = close_buffer( + oldwin, curbuf, + (flags & ECMD_HIDE) || curbuf->terminal ? 0 : DOBUF_UNLOAD, + false); // Autocommands may have closed the window. if (win_valid(the_curwin)) { @@ -2489,6 +2503,14 @@ int do_ecmd( goto theend; } if (buf == curbuf) { // already in new buffer + // close_buffer() has decremented the window count, + // increment it again here and restore w_buffer. + if (did_decrement && buf_valid(was_curbuf)) { + was_curbuf->b_nwindows++; + } + if (win_valid_any_tab(oldwin) && oldwin->w_buffer == NULL) { + oldwin->w_buffer = was_curbuf; + } auto_buf = true; } else { // <VN> We could instead free the synblock diff --git a/src/nvim/ex_cmds.lua b/src/nvim/ex_cmds.lua index d99383303b..7b971f464f 100644 --- a/src/nvim/ex_cmds.lua +++ b/src/nvim/ex_cmds.lua @@ -2568,6 +2568,12 @@ module.cmds = { func='ex_spellrepall', }, { + command='spellrare', + flags=bit.bor(BANG, RANGE, NEEDARG, EXTRA, TRLBAR), + addr_type='ADDR_OTHER', + func='ex_spell', + }, + { command='spellundo', flags=bit.bor(BANG, RANGE, NEEDARG, EXTRA, TRLBAR), addr_type='ADDR_OTHER', diff --git a/src/nvim/ex_cmds2.c b/src/nvim/ex_cmds2.c index 950a1a436f..9abeee47f4 100644 --- a/src/nvim/ex_cmds2.c +++ b/src/nvim/ex_cmds2.c @@ -27,6 +27,7 @@ #include "nvim/ex_getln.h" #include "nvim/fileio.h" #include "nvim/getchar.h" +#include "nvim/globals.h" #include "nvim/mark.h" #include "nvim/mbyte.h" #include "nvim/memline.h" @@ -53,6 +54,7 @@ #include "nvim/os/fs_defs.h" #include "nvim/api/private/helpers.h" #include "nvim/api/private/defs.h" +#include "nvim/lua/executor.h" /// Growarray to store info about already sourced scripts. @@ -2421,6 +2423,7 @@ void ex_compiler(exarg_T *eap) if (*eap->arg == NUL) { // List all compiler scripts. do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.vim')"); // NOLINT + do_cmdline_cmd("echo globpath(&rtp, 'compiler/*.lua')"); // NOLINT } else { size_t bufsize = STRLEN(eap->arg) + 14; buf = xmalloc(bufsize); @@ -2445,7 +2448,11 @@ void ex_compiler(exarg_T *eap) snprintf((char *)buf, bufsize, "compiler/%s.vim", eap->arg); if (source_in_path(p_rtp, buf, DIP_ALL) == FAIL) { - EMSG2(_("E666: compiler not supported: %s"), eap->arg); + // Try lua compiler + snprintf((char *)buf, bufsize, "compiler/%s.lua", eap->arg); + if (source_in_path(p_rtp, buf, DIP_ALL) == FAIL) { + EMSG2(_("E666: compiler not supported: %s"), eap->arg); + } } xfree(buf); @@ -2656,8 +2663,13 @@ static void cmd_source_buffer(const exarg_T *eap) .curr_lnum = eap->line1, .final_lnum = eap->line2, }; - source_using_linegetter((void *)&cookie, get_buffer_line, - ":source (no file)"); + if (curbuf != NULL && curbuf->b_fname + && path_with_extension((const char *)curbuf->b_fname, "lua")) { + nlua_source_using_linegetter(get_buffer_line, (void *)&cookie, ":source"); + } else { + source_using_linegetter((void *)&cookie, get_buffer_line, + ":source (no file)"); + } } /// ":source" and associated commands. @@ -2719,16 +2731,10 @@ static char_u *get_str_line(int c, void *cookie, int indent, bool do_concat) while (!(p->buf[i] == '\n' || p->buf[i] == '\0')) { i++; } - char buf[2046]; - char *dst; - dst = xstpncpy(buf, (char *)p->buf + p->offset, i - p->offset); - if ((uint32_t)(dst - buf) != i - p->offset) { - smsg(_(":source error parsing command %s"), p->buf); - return NULL; - } - buf[i - p->offset] = '\0'; + size_t line_length = i - p->offset; + char_u *buf = xmemdupz(p->buf + p->offset, line_length); p->offset = i + 1; - return (char_u *)xstrdup(buf); + return buf; } static int source_using_linegetter(void *cookie, @@ -2775,7 +2781,8 @@ int do_source_str(const char *cmd, const char *traceback_name) return source_using_linegetter((void *)&cookie, get_str_line, traceback_name); } -/// Reads the file `fname` and executes its lines as Ex commands. +/// When fname is a 'lua' file nlua_exec_file() is invoked to source it. +/// Otherwise reads the file `fname` and executes its lines as Ex commands. /// /// This function may be called recursively! /// @@ -2964,7 +2971,7 @@ int do_source(char_u *fname, int check_other, int is_vimrc) } if (l_do_profiling == PROF_YES) { - bool forceit; + bool forceit = false; // Check if we do profiling for this script. if (!si->sn_prof_on && has_profiling(true, si->sn_name, &forceit)) { @@ -2994,10 +3001,15 @@ int do_source(char_u *fname, int check_other, int is_vimrc) firstline = p; } - // Call do_cmdline, which will call getsourceline() to get the lines. - do_cmdline(firstline, getsourceline, (void *)&cookie, - DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); - retval = OK; + if (path_with_extension((const char *)fname, "lua")) { + // Source the file as lua + retval = (int)nlua_exec_file((const char *)fname); + } else { + // Call do_cmdline, which will call getsourceline() to get the lines. + do_cmdline(firstline, getsourceline, (void *)&cookie, + DOCMD_VERBOSE|DOCMD_NOWAIT|DOCMD_REPEAT); + retval = OK; + } if (l_do_profiling == PROF_YES) { // Get "si" again, "script_items" may have been reallocated. @@ -3627,6 +3639,14 @@ void set_lang_var(void) loc = get_locale_val(LC_TIME); # endif set_vim_var_string(VV_LC_TIME, loc, -1); + +# ifdef HAVE_GET_LOCALE_VAL + loc = get_locale_val(LC_COLLATE); +# else + // setlocale() not supported: use the default value + loc = "C"; +# endif + set_vim_var_string(VV_COLLATE, loc, -1); } #ifdef HAVE_WORKING_LIBINTL @@ -3667,6 +3687,10 @@ void ex_language(exarg_T *eap) what = LC_TIME; name = skipwhite(p); whatstr = "time "; + } else if (STRNICMP(eap->arg, "collate", p - eap->arg) == 0) { + what = LC_COLLATE; + name = skipwhite(p); + whatstr = "collate "; } } @@ -3711,7 +3735,7 @@ void ex_language(exarg_T *eap) // Reset $LC_ALL, otherwise it would overrule everything. os_setenv("LC_ALL", "", 1); - if (what != LC_TIME) { + if (what != LC_TIME && what != LC_COLLATE) { // Tell gettext() what to translate to. It apparently doesn't // use the currently effective locale. if (what == LC_ALL) { @@ -3726,7 +3750,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, v:collate and v:ctype to the final result. set_lang_var(); maketitle(); } @@ -3811,12 +3835,15 @@ char_u *get_lang_arg(expand_T *xp, int idx) if (idx == 2) { return (char_u *)"time"; } + if (idx == 3) { + return (char_u *)"collate"; + } init_locales(); if (locales == NULL) { return NULL; } - return locales[idx - 3]; + return locales[idx - 4]; } /// Function given to ExpandGeneric() to obtain the available locales. diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index ae5c334592..29347def4c 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -212,7 +212,7 @@ void do_exmode(int improved) while (exmode_active) { /* Check for a ":normal" command and no more characters left. */ if (ex_normal_busy > 0 && typebuf.tb_len == 0) { - exmode_active = FALSE; + exmode_active = 0; break; } msg_scroll = true; @@ -1772,7 +1772,7 @@ static char_u * do_one_cmd(char_u **cmdlinep, // count, it's a buffer name. /// if ((ea.argt & EX_COUNT) && ascii_isdigit(*ea.arg) - && (!(ea.argt & EX_BUFNAME) || *(p = skipdigits(ea.arg)) == NUL + && (!(ea.argt & EX_BUFNAME) || *(p = skipdigits(ea.arg + 1)) == NUL || ascii_iswhite(*p))) { n = getdigits_long(&ea.arg, false, -1); ea.arg = skipwhite(ea.arg); @@ -2790,15 +2790,18 @@ static struct cmdmod { */ int modifier_len(char_u *cmd) { - int i, j; char_u *p = cmd; - if (ascii_isdigit(*cmd)) - p = skipwhite(skipdigits(cmd)); - for (i = 0; i < (int)ARRAY_SIZE(cmdmods); ++i) { - for (j = 0; p[j] != NUL; ++j) - if (p[j] != cmdmods[i].name[j]) + if (ascii_isdigit(*cmd)) { + p = skipwhite(skipdigits(cmd + 1)); + } + for (int i = 0; i < (int)ARRAY_SIZE(cmdmods); i++) { + int j; + for (j = 0; p[j] != NUL; j++) { + if (p[j] != cmdmods[i].name[j]) { break; + } + } if (j >= cmdmods[i].minlen && !ASCII_ISALPHA(p[j]) && (p == cmd || cmdmods[i].has_count)) { @@ -3642,7 +3645,8 @@ const char * set_one_cmd_context( } else { if (strncmp(arg, "messages", p - arg) == 0 || strncmp(arg, "ctype", p - arg) == 0 - || strncmp(arg, "time", p - arg) == 0) { + || strncmp(arg, "time", p - arg) == 0 + || strncmp(arg, "collate", p - arg) == 0) { xp->xp_context = EXPAND_LOCALES; xp->xp_pattern = skipwhite((const char_u *)p); } else { @@ -5013,7 +5017,7 @@ char_u *check_nextcmd(char_u *p) static int check_more( int message, // when FALSE check only, no messages - int forceit + bool forceit ) { int n = ARGCOUNT - curwin->w_arg_idx - 1; @@ -6336,7 +6340,7 @@ void not_exiting(void) exiting = false; } -static bool before_quit_autocmds(win_T *wp, bool quit_all, int forceit) +bool before_quit_autocmds(win_T *wp, bool quit_all, bool forceit) { apply_autocmds(EVENT_QUITPRE, NULL, NULL, false, wp->w_buffer); @@ -6402,7 +6406,7 @@ static void ex_quit(exarg_T *eap) return; } - // If there are more files or windows we won't exit. + // If there is only one relevant window we will exit. if (check_more(false, eap->forceit) == OK && only_one_window()) { exiting = true; } @@ -6519,6 +6523,12 @@ ex_win_close( int need_hide; buf_T *buf = win->w_buffer; + // Never close the autocommand window. + if (win == aucmd_win) { + EMSG(_(e_autocmd_close)); + return; + } + need_hide = (bufIsChanged(buf) && buf->b_nwindows <= 1); if (need_hide && !buf_hide(buf) && !forceit) { if ((p_confirm || cmdmod.confirm) && p_write) { @@ -6588,9 +6598,6 @@ static void ex_tabonly(exarg_T *eap) // Repeat this up to a 1000 times, because autocommands may // mess up the lists. for (int done = 0; done < 1000; done++) { - FOR_ALL_TAB_WINDOWS(tp, wp) { - assert(wp != aucmd_win); - } FOR_ALL_TABS(tp) { if (tp->tp_topframe != topframe) { tabpage_close_other(tp, eap->forceit); @@ -6742,7 +6749,7 @@ static void ex_stop(exarg_T *eap) apply_autocmds(EVENT_VIMRESUME, NULL, NULL, false, NULL); } -// ":exit", ":xit" and ":wq": Write file and quite the current window. +// ":exit", ":xit" and ":wq": Write file and quit the current window. static void ex_exit(exarg_T *eap) { if (cmdwin_type != 0) { @@ -6755,17 +6762,15 @@ static void ex_exit(exarg_T *eap) return; } - if (before_quit_autocmds(curwin, false, eap->forceit)) { - return; - } - - // if more files or windows we won't exit + // we plan to exit if there is only one relevant window if (check_more(false, eap->forceit) == OK && only_one_window()) { exiting = true; } - if (((eap->cmdidx == CMD_wq - || curbufIsChanged()) - && do_write(eap) == FAIL) + // Write the buffer for ":wq" or when it was changed. + // Trigger QuitPre and ExitPre. + // Check if we can exit now, after autocommands have changed things. + if (((eap->cmdidx == CMD_wq || curbufIsChanged()) && do_write(eap) == FAIL) + || before_quit_autocmds(curwin, false, eap->forceit) || check_more(true, eap->forceit) == FAIL || (only_one_window() && check_changed_any(eap->forceit, false))) { not_exiting(); @@ -7303,7 +7308,8 @@ do_exedit( */ if (exmode_active && (eap->cmdidx == CMD_visual || eap->cmdidx == CMD_view)) { - exmode_active = FALSE; + exmode_active = 0; + ex_pressedreturn = false; if (*eap->arg == NUL) { /* Special case: ":global/pat/visual\NLvi-commands" */ if (global_busy) { diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 7159b27665..f63987136f 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1953,6 +1953,7 @@ static int command_line_handle_key(CommandLineState *s) case K_X2MOUSE: case K_X2DRAG: case K_X2RELEASE: + case K_MOUSEMOVE: return command_line_not_changed(s); @@ -3570,6 +3571,7 @@ static void save_cmdline(struct cmdline_info *ccp) * Restore ccline after it has been saved with save_cmdline(). */ static void restore_cmdline(struct cmdline_info *ccp) + FUNC_ATTR_NONNULL_ALL { ccline = *ccp; } @@ -3579,6 +3581,7 @@ static void restore_cmdline(struct cmdline_info *ccp) * passed to restore_cmdline_alloc() later. */ char_u *save_cmdline_alloc(void) + FUNC_ATTR_NONNULL_RET { struct cmdline_info *p = xmalloc(sizeof(struct cmdline_info)); save_cmdline(p); @@ -3589,6 +3592,7 @@ char_u *save_cmdline_alloc(void) * Restore the command line from the return value of save_cmdline_alloc(). */ void restore_cmdline_alloc(char_u *p) + FUNC_ATTR_NONNULL_ALL { restore_cmdline((struct cmdline_info *)p); xfree(p); @@ -5111,11 +5115,12 @@ ExpandFromContext ( } if (xp->xp_context == EXPAND_COLORS) { char *directories[] = { "colors", NULL }; - return ExpandRTDir(pat, DIP_START + DIP_OPT, num_file, file, directories); + return ExpandRTDir(pat, DIP_START + DIP_OPT + DIP_LUA, num_file, file, + directories); } if (xp->xp_context == EXPAND_COMPILER) { char *directories[] = { "compiler", NULL }; - return ExpandRTDir(pat, 0, num_file, file, directories); + return ExpandRTDir(pat, DIP_LUA, num_file, file, directories); } if (xp->xp_context == EXPAND_OWNSYNTAX) { char *directories[] = { "syntax", NULL }; @@ -5123,7 +5128,7 @@ ExpandFromContext ( } if (xp->xp_context == EXPAND_FILETYPE) { char *directories[] = { "syntax", "indent", "ftplugin", NULL }; - return ExpandRTDir(pat, 0, num_file, file, directories); + return ExpandRTDir(pat, DIP_LUA, num_file, file, directories); } if (xp->xp_context == EXPAND_CHECKHEALTH) { char *directories[] = { "autoload/health", NULL }; @@ -5563,6 +5568,7 @@ static int ExpandUserList(expand_T *xp, int *num_file, char_u ***file) /// 'packpath'/pack/ * /start/ * /{dirnames}/{pat}.vim /// When "flags" has DIP_OPT: search also from 'opt' of 'packpath': /// 'packpath'/pack/ * /opt/ * /{dirnames}/{pat}.vim +/// When "flags" has DIP_LUA: search also performed for .lua files /// "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[]) @@ -5580,6 +5586,10 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *s = xmalloc(size); snprintf((char *)s, size, "%s/%s*.vim", dirnames[i], pat); globpath(p_rtp, s, &ga, 0); + if (flags & DIP_LUA) { + snprintf((char *)s, size, "%s/%s*.lua", dirnames[i], pat); + globpath(p_rtp, s, &ga, 0); + } xfree(s); } @@ -5589,6 +5599,10 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *s = xmalloc(size); snprintf((char *)s, size, "pack/*/start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT globpath(p_pp, s, &ga, 0); + if (flags & DIP_LUA) { + snprintf((char *)s, size, "pack/*/start/*/%s/%s*.lua", dirnames[i], pat); // NOLINT + globpath(p_pp, s, &ga, 0); + } xfree(s); } @@ -5597,6 +5611,10 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *s = xmalloc(size); snprintf((char *)s, size, "start/*/%s/%s*.vim", dirnames[i], pat); // NOLINT globpath(p_pp, s, &ga, 0); + if (flags & DIP_LUA) { + snprintf((char *)s, size, "start/*/%s/%s*.lua", dirnames[i], pat); // NOLINT + globpath(p_pp, s, &ga, 0); + } xfree(s); } } @@ -5607,6 +5625,10 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *s = xmalloc(size); snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT globpath(p_pp, s, &ga, 0); + if (flags & DIP_LUA) { + snprintf((char *)s, size, "pack/*/opt/*/%s/%s*.lua", dirnames[i], pat); // NOLINT + globpath(p_pp, s, &ga, 0); + } xfree(s); } @@ -5615,6 +5637,10 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *s = xmalloc(size); snprintf((char *)s, size, "opt/*/%s/%s*.vim", dirnames[i], pat); // NOLINT globpath(p_pp, s, &ga, 0); + if (flags & DIP_LUA) { + snprintf((char *)s, size, "opt/*/%s/%s*.lua", dirnames[i], pat); // NOLINT + globpath(p_pp, s, &ga, 0); + } xfree(s); } } @@ -5623,7 +5649,9 @@ static int ExpandRTDir(char_u *pat, int flags, int *num_file, char_u ***file, char_u *match = ((char_u **)ga.ga_data)[i]; char_u *s = match; char_u *e = s + STRLEN(s); - if (e - s > 4 && STRNICMP(e - 4, ".vim", 4) == 0) { + if (e - s > 4 && (STRNICMP(e - 4, ".vim", 4) == 0 + || ((flags & DIP_LUA) + && STRNICMP(e - 4, ".lua", 4) == 0))) { e -= 4; for (s = e; s > match; MB_PTR_BACK(match, s)) { if (vim_ispathsep(*s)) { @@ -6634,11 +6662,13 @@ static int open_cmdwin(void) wp = curwin; set_bufref(&bufref, curbuf); win_goto(old_curwin); - win_close(wp, true); + if (win_valid(wp) && wp != curwin) { + win_close(wp, true); + } // win_close() may have already wiped the buffer when 'bh' is - // set to 'wipe'. - if (bufref_valid(&bufref)) { + // set to 'wipe', autocommands may have closed other windows + if (bufref_valid(&bufref) && bufref.br_buf != curbuf) { close_buffer(NULL, bufref.br_buf, DOBUF_WIPE, false); } diff --git a/src/nvim/ex_session.c b/src/nvim/ex_session.c index b11ec4ad05..67b8e7e92f 100644 --- a/src/nvim/ex_session.c +++ b/src/nvim/ex_session.c @@ -447,18 +447,25 @@ static int put_view( if (do_cursor) { // Restore the cursor line in the file and relatively in the // window. Don't use "G", it changes the jumplist. + if (wp->w_height_inner <= 0) { + if (fprintf(fd, "let s:l = %" PRIdLINENR "\n", wp->w_cursor.lnum) < 0) { + return FAIL; + } + } else if (fprintf(fd, + "let s:l = %" PRIdLINENR " - ((%" PRIdLINENR + " * winheight(0) + %" PRId64 ") / %" PRId64 ")\n", + wp->w_cursor.lnum, + wp->w_cursor.lnum - wp->w_topline, + (int64_t)(wp->w_height_inner / 2), + (int64_t)wp->w_height_inner) < 0) { + return FAIL; + } if (fprintf(fd, - "let s:l = %" PRId64 " - ((%" PRId64 - " * winheight(0) + %" PRId64 ") / %" PRId64 ")\n" "if s:l < 1 | let s:l = 1 | endif\n" "keepjumps exe s:l\n" "normal! zt\n" - "keepjumps %" PRId64 "\n", - (int64_t)wp->w_cursor.lnum, - (int64_t)(wp->w_cursor.lnum - wp->w_topline), - (int64_t)(wp->w_height_inner / 2), - (int64_t)wp->w_height_inner, - (int64_t)wp->w_cursor.lnum) < 0) { + "keepjumps %" PRIdLINENR "\n", + wp->w_cursor.lnum) < 0) { return FAIL; } // Restore the cursor column and left offset when not wrapping. @@ -718,7 +725,7 @@ static int makeopens(FILE *fd, char_u *dirnow) } } - if (tab_firstwin->w_next != NULL) { + if (tab_firstwin != NULL && tab_firstwin->w_next != NULL) { // Go to the first window. PUTLINE_FAIL("wincmd t"); @@ -828,7 +835,7 @@ static int makeopens(FILE *fd, char_u *dirnow) p_shm) < 0) { return FAIL; } - if (tab_firstwin->w_next != NULL) { + if (tab_firstwin != NULL && tab_firstwin->w_next != NULL) { // Restore 'winminheight' and 'winminwidth'. PUTLINE_FAIL("let &winminheight = s:save_winminheight"); PUTLINE_FAIL("let &winminwidth = s:save_winminwidth"); @@ -930,11 +937,13 @@ void ex_mkrc(exarg_T *eap) if (!view_session || (eap->cmdidx == CMD_mksession && (*flagp & SSOP_OPTIONS))) { - failed |= (makemap(fd, NULL) == FAIL - || makeset(fd, OPT_GLOBAL, false) == FAIL); - if (p_hls && fprintf(fd, "%s", "set hlsearch\n") < 0) { - failed = true; + int flags = OPT_GLOBAL; + + if (eap->cmdidx == CMD_mksession && (*flagp & SSOP_SKIP_RTP)) { + flags |= OPT_SKIPRTP; } + failed |= (makemap(fd, NULL) == FAIL + || makeset(fd, flags, false) == FAIL); } if (!failed && view_session) { @@ -995,6 +1004,9 @@ void ex_mkrc(exarg_T *eap) < 0) { failed = true; } + if (p_hls && fprintf(fd, "%s", "set hlsearch\n") < 0) { + failed = true; + } if (no_hlsearch && fprintf(fd, "%s", "nohlsearch\n") < 0) { failed = true; } diff --git a/src/nvim/fileio.c b/src/nvim/fileio.c index 792ef81665..29c29a2884 100644 --- a/src/nvim/fileio.c +++ b/src/nvim/fileio.c @@ -4560,11 +4560,12 @@ int vim_rename(const char_u *from, const char_u *to) if (!os_path_exists(tempname)) { if (os_rename(from, tempname) == OK) { - if (os_rename(tempname, to) == OK) + if (os_rename(tempname, to) == OK) { return 0; - /* Strange, the second step failed. Try moving the - * file back and return failure. */ - os_rename(tempname, from); + } + // Strange, the second step failed. Try moving the + // file back and return failure. + (void)os_rename(tempname, from); return -1; } /* If it fails for one temp name it will most likely fail diff --git a/src/nvim/fold.c b/src/nvim/fold.c index 5032646d7e..ad8418034a 100644 --- a/src/nvim/fold.c +++ b/src/nvim/fold.c @@ -2227,8 +2227,9 @@ static linenr_T foldUpdateIEMSRecurse( if (getlevel == foldlevelMarker && flp->start <= flp->lvl - level && flp->lvl > 0) { (void)foldFind(gap, startlnum - 1, &fp); - if (fp >= ((fold_T *)gap->ga_data) + gap->ga_len - || fp->fd_top >= startlnum) { + if (fp != NULL + && (fp >= ((fold_T *)gap->ga_data) + gap->ga_len + || fp->fd_top >= startlnum)) { fp = NULL; } } diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 9afce6e9d5..5c2eed363e 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1322,7 +1322,7 @@ void openscript( do { update_topline_cursor(); // update cursor position and topline normal_cmd(&oa, false); // execute one command - vpeekc(); // check for end of file + (void)vpeekc(); // check for end of file } while (scriptin[oldcurscript] != NULL); State = save_State; @@ -1586,7 +1586,9 @@ int plain_vgetc(void) do { c = safe_vgetc(); - } while (c == K_IGNORE || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR); + } while (c == K_IGNORE + || c == K_VER_SCROLLBAR || c == K_HOR_SCROLLBAR + || c == K_MOUSEMOVE); return c; } @@ -3831,7 +3833,16 @@ bool check_abbr(int c, char_u *ptr, int col, int mincol) if (c >= ABBR_OFF) { c -= ABBR_OFF; } - j += utf_char2bytes(c, tb + j); + int newlen = utf_char2bytes(c, tb + j); + tb[j + newlen] = NUL; + // Need to escape K_SPECIAL. + char_u *escaped = vim_strsave_escape_csi(tb + j); + if (escaped != NULL) { + newlen = (int)STRLEN(escaped); + memmove(tb + j, escaped, (size_t)newlen); + j += newlen; + xfree(escaped); + } } tb[j] = NUL; // insert the last typed char diff --git a/src/nvim/globals.h b/src/nvim/globals.h index 624b7c93f3..7c7ce5e65f 100644 --- a/src/nvim/globals.h +++ b/src/nvim/globals.h @@ -878,6 +878,7 @@ EXTERN char_u e_invexpr2[] INIT(= N_("E15: Invalid expression: %s")); EXTERN char_u e_invrange[] INIT(= N_("E16: Invalid range")); 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_no_spell[] INIT(= N_("E756: Spell checking is not possible")); EXTERN char_u e_invchan[] INIT(= N_("E900: Invalid channel id")); EXTERN char_u e_invchanjob[] INIT(= N_("E900: Invalid channel id: not a job")); EXTERN char_u e_jobtblfull[] INIT(= N_("E901: Job table is full")); @@ -987,6 +988,8 @@ EXTERN char_u e_dirnotf[] INIT(= N_( "E919: Directory not found in '%s': \"%s\"")); EXTERN char_u e_au_recursive[] INIT(= N_( "E952: Autocommand caused recursive behavior")); +EXTERN char_u e_autocmd_close[] INIT(= N_( + "E813: Cannot close autocmd window")); EXTERN char_u e_unsupportedoption[] INIT(= N_("E519: Option not supported")); EXTERN char_u e_fnametoolong[] INIT(= N_("E856: Filename too long")); EXTERN char_u e_float_as_string[] INIT(= N_("E806: using Float as a String")); diff --git a/src/nvim/grid_defs.h b/src/nvim/grid_defs.h index 3b34af46e4..724363674c 100644 --- a/src/nvim/grid_defs.h +++ b/src/nvim/grid_defs.h @@ -13,6 +13,15 @@ typedef char_u schar_T[(MAX_MCO+1) * 4 + 1]; typedef int sattr_T; +enum { + kZIndexDefaultGrid = 0, + kZIndexFloatDefault = 50, + kZIndexPopupMenu = 100, + kZIndexMessages = 200, + kZIndexCmdlinePopupMenu = 250, +}; + + /// ScreenGrid represents a resizable rectuangular grid displayed by UI clients. /// /// chars[] contains the UTF-8 text that is currently displayed on the grid. @@ -73,6 +82,9 @@ struct ScreenGrid { // whether the grid can be focused with mouse clicks. bool focusable; + // z-index: the order in the stack of grids. + int zindex; + // Below is state owned by the compositor. Should generally not be set/read // outside this module, except for specific compatibilty hacks @@ -96,7 +108,7 @@ struct ScreenGrid { }; #define SCREEN_GRID_INIT { 0, NULL, NULL, NULL, NULL, NULL, 0, 0, false, \ - false, 0, 0, NULL, false, true, \ + false, 0, 0, NULL, false, true, 0, \ 0, 0, 0, 0, 0, false } #endif // NVIM_GRID_DEFS_H diff --git a/src/nvim/highlight.c b/src/nvim/highlight.c index 79801262cb..79e474fa2e 100644 --- a/src/nvim/highlight.c +++ b/src/nvim/highlight.c @@ -806,8 +806,11 @@ HlAttrs dict2hlattrs(Dictionary dict, bool use_rgb, int *link_id, Error *err) { HlAttrs hlattrs = HLATTRS_INIT; - int32_t fg = -1, bg = -1, sp = -1; + int32_t fg = -1, bg = -1, ctermfg = -1, ctermbg = -1, sp = -1; int16_t mask = 0; + int16_t cterm_mask = 0; + bool cterm_mask_provided = false; + for (size_t i = 0; i < dict.size; i++) { char *key = dict.items[i].key.data; Object val = dict.items[i].value; @@ -837,6 +840,25 @@ HlAttrs dict2hlattrs(Dictionary dict, bool use_rgb, int *link_id, Error *err) } } + // Handle cterm attrs + if (strequal(key, "cterm") && val.type == kObjectTypeDictionary) { + cterm_mask_provided = true; + Dictionary cterm_dict = val.data.dictionary; + for (size_t l = 0; l < cterm_dict.size; l++) { + char *cterm_dict_key = cterm_dict.items[l].key.data; + Object cterm_dict_val = cterm_dict.items[l].value; + for (int m = 0; flags[m].name; m++) { + if (strequal(flags[m].name, cterm_dict_key)) { + if (api_object_to_bool(cterm_dict_val, cterm_dict_key, false, + err)) { + cterm_mask |= flags[m].flag; + } + break; + } + } + } + } + struct { const char *name; const char *shortname; @@ -844,6 +866,8 @@ HlAttrs dict2hlattrs(Dictionary dict, bool use_rgb, int *link_id, Error *err) } colors[] = { { "foreground", "fg", &fg }, { "background", "bg", &bg }, + { "ctermfg", NULL, &ctermfg }, + { "ctermbg", NULL, &ctermbg }, { "special", "sp", &sp }, { NULL, NULL, NULL }, }; @@ -867,7 +891,6 @@ HlAttrs dict2hlattrs(Dictionary dict, bool use_rgb, int *link_id, Error *err) } } - if (flags[j].name || colors[k].name) { // handled above } else if (link_id && strequal(key, "link")) { @@ -888,13 +911,22 @@ HlAttrs dict2hlattrs(Dictionary dict, bool use_rgb, int *link_id, Error *err) } } + // apply gui mask as default for cterm mask + if (!cterm_mask_provided) { + cterm_mask = mask; + } if (use_rgb) { hlattrs.rgb_ae_attr = mask; hlattrs.rgb_bg_color = bg; hlattrs.rgb_fg_color = fg; hlattrs.rgb_sp_color = sp; + hlattrs.cterm_bg_color = + ctermbg == -1 ? cterm_normal_bg_color : ctermbg + 1; + hlattrs.cterm_fg_color = + ctermfg == -1 ? cterm_normal_fg_color : ctermfg + 1; + hlattrs.cterm_ae_attr = cterm_mask; } else { - hlattrs.cterm_ae_attr = mask; + hlattrs.cterm_ae_attr = cterm_mask; hlattrs.cterm_bg_color = bg == -1 ? cterm_normal_bg_color : bg + 1; hlattrs.cterm_fg_color = fg == -1 ? cterm_normal_fg_color : fg + 1; } diff --git a/src/nvim/indent_c.c b/src/nvim/indent_c.c index 771bf923b2..25c27743f3 100644 --- a/src/nvim/indent_c.c +++ b/src/nvim/indent_c.c @@ -3552,7 +3552,7 @@ term_again: * Position the cursor over the rightmost paren, so that * matching it will take us back to the start of the line. */ - find_last_paren(l, '(', ')'); + (void)find_last_paren(l, '(', ')'); if ((trypos = find_match_paren(curbuf->b_ind_maxparen)) != NULL) curwin->w_cursor = *trypos; diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c index 517274a1d3..6dacace0a4 100644 --- a/src/nvim/keymap.c +++ b/src/nvim/keymap.c @@ -288,6 +288,7 @@ static const struct key_name_entry { { K_LEFTDRAG, "LeftDrag" }, { K_LEFTRELEASE, "LeftRelease" }, { K_LEFTRELEASE_NM, "LeftReleaseNM" }, + { K_MOUSEMOVE, "MouseMove" }, { K_MIDDLEMOUSE, "MiddleMouse" }, { K_MIDDLEDRAG, "MiddleDrag" }, { K_MIDDLERELEASE, "MiddleRelease" }, @@ -317,32 +318,32 @@ static const struct key_name_entry { }; static struct mousetable { - int pseudo_code; /* Code for pseudo mouse event */ - int button; /* Which mouse button is it? */ - int is_click; /* Is it a mouse button click event? */ - int is_drag; /* Is it a mouse drag event? */ + int pseudo_code; // Code for pseudo mouse event + int button; // Which mouse button is it? + bool is_click; // Is it a mouse button click event? + bool is_drag; // Is it a mouse drag event? } mouse_table[] = { - {(int)KE_LEFTMOUSE, MOUSE_LEFT, TRUE, FALSE}, - {(int)KE_LEFTDRAG, MOUSE_LEFT, FALSE, TRUE}, - {(int)KE_LEFTRELEASE, MOUSE_LEFT, FALSE, FALSE}, - {(int)KE_MIDDLEMOUSE, MOUSE_MIDDLE, TRUE, FALSE}, - {(int)KE_MIDDLEDRAG, MOUSE_MIDDLE, FALSE, TRUE}, - {(int)KE_MIDDLERELEASE, MOUSE_MIDDLE, FALSE, FALSE}, - {(int)KE_RIGHTMOUSE, MOUSE_RIGHT, TRUE, FALSE}, - {(int)KE_RIGHTDRAG, MOUSE_RIGHT, FALSE, TRUE}, - {(int)KE_RIGHTRELEASE, MOUSE_RIGHT, FALSE, FALSE}, - {(int)KE_X1MOUSE, MOUSE_X1, TRUE, FALSE}, - {(int)KE_X1DRAG, MOUSE_X1, FALSE, TRUE}, - {(int)KE_X1RELEASE, MOUSE_X1, FALSE, FALSE}, - {(int)KE_X2MOUSE, MOUSE_X2, TRUE, FALSE}, - {(int)KE_X2DRAG, MOUSE_X2, FALSE, TRUE}, - {(int)KE_X2RELEASE, MOUSE_X2, FALSE, FALSE}, - /* DRAG without CLICK */ - {(int)KE_IGNORE, MOUSE_RELEASE, FALSE, TRUE}, - /* RELEASE without CLICK */ - {(int)KE_IGNORE, MOUSE_RELEASE, FALSE, FALSE}, - {0, 0, 0, 0}, + { (int)KE_LEFTMOUSE, MOUSE_LEFT, true, false }, + { (int)KE_LEFTDRAG, MOUSE_LEFT, false, true }, + { (int)KE_LEFTRELEASE, MOUSE_LEFT, false, false }, + { (int)KE_MIDDLEMOUSE, MOUSE_MIDDLE, true, false }, + { (int)KE_MIDDLEDRAG, MOUSE_MIDDLE, false, true }, + { (int)KE_MIDDLERELEASE, MOUSE_MIDDLE, false, false }, + { (int)KE_RIGHTMOUSE, MOUSE_RIGHT, true, false }, + { (int)KE_RIGHTDRAG, MOUSE_RIGHT, false, true }, + { (int)KE_RIGHTRELEASE, MOUSE_RIGHT, false, false }, + { (int)KE_X1MOUSE, MOUSE_X1, true, false }, + { (int)KE_X1DRAG, MOUSE_X1, false, true }, + { (int)KE_X1RELEASE, MOUSE_X1, false, false }, + { (int)KE_X2MOUSE, MOUSE_X2, true, false }, + { (int)KE_X2DRAG, MOUSE_X2, false, true }, + { (int)KE_X2RELEASE, MOUSE_X2, false, false }, + // DRAG without CLICK + { (int)K_MOUSEMOVE, MOUSE_RELEASE, false, true }, + // RELEASE without CLICK + { (int)KE_IGNORE, MOUSE_RELEASE, false, false }, + { 0, 0, 0, 0 }, }; /// Return the modifier mask bit (#MOD_MASK_*) corresponding to mod name diff --git a/src/nvim/keymap.h b/src/nvim/keymap.h index ada9bc5780..d31196d412 100644 --- a/src/nvim/keymap.h +++ b/src/nvim/keymap.h @@ -242,7 +242,7 @@ enum key_extra { , KE_NOP = 97 // no-op: does nothing // , KE_FOCUSGAINED = 98 // focus gained // , KE_FOCUSLOST = 99 // focus lost - // , KE_MOUSEMOVE = 100 // mouse moved with no button down + , KE_MOUSEMOVE = 100 // mouse moved with no button down // , KE_CANCEL = 101 // return from vgetc , KE_EVENT = 102 // event , KE_COMMAND = 104 // <Cmd> special key @@ -411,6 +411,7 @@ enum key_extra { #define K_LEFTDRAG TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG) #define K_LEFTRELEASE TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE) #define K_LEFTRELEASE_NM TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE_NM) +#define K_MOUSEMOVE TERMCAP2KEY(KS_EXTRA, KE_MOUSEMOVE) #define K_MIDDLEMOUSE TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE) #define K_MIDDLEDRAG TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG) #define K_MIDDLERELEASE TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE) diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index f99a2dd0fe..afc387ef38 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -471,6 +471,15 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL lua_pushcfunction(lstate, &nlua_wait); lua_setfield(lstate, -2, "wait"); + // _getvar + lua_pushcfunction(lstate, &nlua_getvar); + lua_setfield(lstate, -2, "_getvar"); + + // _setvar + lua_pushcfunction(lstate, &nlua_setvar); + lua_setfield(lstate, -2, "_setvar"); + + // vim.loop luv_set_loop(lstate, &main_loop.uv); luv_set_callback(lstate, nlua_luv_cfpcall); @@ -870,6 +879,109 @@ check_err: return request ? 1 : 0; } +static dict_T *nlua_get_var_scope(lua_State *lstate) { + const char *scope = luaL_checkstring(lstate, 1); + handle_T handle = (handle_T)luaL_checkinteger(lstate, 2); + dict_T *dict = NULL; + Error err = ERROR_INIT; + if (strequal(scope, "g")) { + dict = &globvardict; + } else if (strequal(scope, "v")) { + dict = &vimvardict; + } else if (strequal(scope, "b")) { + buf_T *buf = find_buffer_by_handle(handle, &err); + if (buf) { + dict = buf->b_vars; + } + } else if (strequal(scope, "w")) { + win_T *win = find_window_by_handle(handle, &err); + if (win) { + dict = win->w_vars; + } + } else if (strequal(scope, "t")) { + tabpage_T *tabpage = find_tab_by_handle(handle, &err); + if (tabpage) { + dict = tabpage->tp_vars; + } + } else { + luaL_error(lstate, "invalid scope", err.msg); + return NULL; + } + + if (ERROR_SET(&err)) { + luaL_error(lstate, "FAIL: %s", err.msg); + return NULL; + } + return dict; +} + + +static int nlua_getvar(lua_State *lstate) +{ + // non-local return if not found + dict_T *dict = nlua_get_var_scope(lstate); + size_t len; + const char *name = luaL_checklstring(lstate, 3, &len); + + dictitem_T *di = tv_dict_find(dict, name, (ptrdiff_t)len); + if (di == NULL) { + return 0; // nil + } + nlua_push_typval(lstate, &di->di_tv, false); + return 1; +} + +static int nlua_setvar(lua_State *lstate) +{ + // non-local return if not found + dict_T *dict = nlua_get_var_scope(lstate); + String key; + key.data = (char *)luaL_checklstring(lstate, 3, &key.size); + + bool del = (lua_gettop(lstate) < 4) || lua_isnil(lstate, 4); + + Error err = ERROR_INIT; + dictitem_T *di = dict_check_writable(dict, key, del, &err); + if (ERROR_SET(&err)) { + return 0; + } + + if (del) { + // Delete the key + if (di == NULL) { + // Doesn't exist, nothing to do + return 0; + } else { + // Delete the entry + tv_dict_item_remove(dict, di); + } + } else { + // Update the key + typval_T tv; + + // Convert the lua value to a vimscript type in the temporary variable + lua_pushvalue(lstate, 4); + if (!nlua_pop_typval(lstate, &tv)) { + return luaL_error(lstate, "Couldn't convert lua value"); + } + + if (di == NULL) { + // Need to create an entry + di = tv_dict_item_alloc_len(key.data, key.size); + tv_dict_add(dict, di); + } else { + // Clear the old value + tv_clear(&di->di_tv); + } + + // Update the value + tv_copy(&tv, &di->di_tv); + // Clear the temporary variable + tv_clear(&tv); + } + return 0; +} + static int nlua_nil_tostring(lua_State *lstate) { lua_pushstring(lstate, "vim.NIL"); @@ -1049,6 +1161,24 @@ static void nlua_typval_exec(const char *lcmd, size_t lcmd_len, } } +int nlua_source_using_linegetter(LineGetter fgetline, + void *cookie, char *name) +{ + garray_T ga; + char_u *line = NULL; + + ga_init(&ga, (int)sizeof(char_u *), 10); + while ((line = fgetline(0, cookie, 0, false)) != NULL) { + GA_APPEND(char_u *, &ga, line); + } + char *code = (char *)ga_concat_strings_sep(&ga, "\n"); + size_t len = strlen(code); + nlua_typval_exec(code, len, name, NULL, 0, false, NULL); + ga_clear_strings(&ga); + xfree(code); + return OK; +} + /// Call a LuaCallable given some typvals /// /// Used to call any lua callable passed from Lua into VimL diff --git a/src/nvim/lua/vim.lua b/src/nvim/lua/vim.lua index 75e759094f..8cecaa51dd 100644 --- a/src/nvim/lua/vim.lua +++ b/src/nvim/lua/vim.lua @@ -39,6 +39,75 @@ assert(vim) vim.inspect = package.loaded['vim.inspect'] assert(vim.inspect) +local pathtrails = {} +vim._so_trails = {} +for s in (package.cpath..';'):gmatch('[^;]*;') do + s = s:sub(1, -2) -- Strip trailing semicolon + -- Find out path patterns. pathtrail should contain something like + -- /?.so, \?.dll. This allows not to bother determining what correct + -- suffixes are. + local pathtrail = s:match('[/\\][^/\\]*%?.*$') + if pathtrail and not pathtrails[pathtrail] then + pathtrails[pathtrail] = true + table.insert(vim._so_trails, pathtrail) + end +end + +function vim._load_package(name) + local basename = name:gsub('%.', '/') + local paths = {"lua/"..basename..".lua", "lua/"..basename.."/init.lua"} + for _,path in ipairs(paths) do + local found = vim.api.nvim_get_runtime_file(path, false) + if #found > 0 then + local f, err = loadfile(found[1]) + return f or error(err) + end + end + + for _,trail in ipairs(vim._so_trails) do + local path = "lua"..trail:gsub('?', basename) -- so_trails contains a leading slash + local found = vim.api.nvim_get_runtime_file(path, false) + if #found > 0 then + -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is + -- a) strip prefix up to and including the first dash, if any + -- b) replace all dots by underscores + -- c) prepend "luaopen_" + -- So "foo-bar.baz" should result in "luaopen_bar_baz" + local dash = name:find("-", 1, true) + local modname = dash and name:sub(dash + 1) or name + local f, err = package.loadlib(found[1], "luaopen_"..modname:gsub("%.", "_")) + return f or error(err) + end + end + return nil +end + +table.insert(package.loaders, 1, vim._load_package) + +-- These are for loading runtime modules lazily since they aren't available in +-- the nvim binary as specified in executor.c +setmetatable(vim, { + __index = function(t, key) + if key == 'treesitter' then + t.treesitter = require('vim.treesitter') + return t.treesitter + elseif key == 'F' then + t.F = require('vim.F') + return t.F + elseif require('vim.uri')[key] ~= nil then + -- Expose all `vim.uri` functions on the `vim` module. + t[key] = require('vim.uri')[key] + return t[key] + elseif key == 'lsp' then + t.lsp = require('vim.lsp') + return t.lsp + elseif key == 'highlight' then + t.highlight = require('vim.highlight') + return t.highlight + end + end +}) + vim.log = { levels = { TRACE = 0; @@ -105,51 +174,6 @@ function vim._os_proc_children(ppid) return children end -local pathtrails = {} -vim._so_trails = {} -for s in (package.cpath..';'):gmatch('[^;]*;') do - s = s:sub(1, -2) -- Strip trailing semicolon - -- Find out path patterns. pathtrail should contain something like - -- /?.so, \?.dll. This allows not to bother determining what correct - -- suffixes are. - local pathtrail = s:match('[/\\][^/\\]*%?.*$') - if pathtrail and not pathtrails[pathtrail] then - pathtrails[pathtrail] = true - table.insert(vim._so_trails, pathtrail) - end -end - -function vim._load_package(name) - local basename = name:gsub('%.', '/') - local paths = {"lua/"..basename..".lua", "lua/"..basename.."/init.lua"} - for _,path in ipairs(paths) do - local found = vim.api.nvim_get_runtime_file(path, false) - if #found > 0 then - local f, err = loadfile(found[1]) - return f or error(err) - end - end - - for _,trail in ipairs(vim._so_trails) do - local path = "lua"..trail:gsub('?', basename) -- so_trails contains a leading slash - local found = vim.api.nvim_get_runtime_file(path, false) - if #found > 0 then - -- Making function name in Lua 5.1 (see src/loadlib.c:mkfuncname) is - -- a) strip prefix up to and including the first dash, if any - -- b) replace all dots by underscores - -- c) prepend "luaopen_" - -- So "foo-bar.baz" should result in "luaopen_bar_baz" - local dash = name:find("-", 1, true) - local modname = dash and name:sub(dash + 1) or name - local f, err = package.loadlib(found[1], "luaopen_"..modname:gsub("%.", "_")) - return f or error(err) - end - end - return nil -end - -table.insert(package.loaders, 1, vim._load_package) - -- TODO(ZyX-I): Create compatibility layer. --- Return a human-readable representation of the given object. @@ -282,32 +306,6 @@ vim.funcref = function(viml_func_name) return vim.fn[viml_func_name] end --- These are for loading runtime modules lazily since they aren't available in --- the nvim binary as specified in executor.c -local function __index(t, key) - if key == 'treesitter' then - t.treesitter = require('vim.treesitter') - return t.treesitter - elseif require('vim.uri')[key] ~= nil then - -- Expose all `vim.uri` functions on the `vim` module. - t[key] = require('vim.uri')[key] - return t[key] - elseif key == 'lsp' then - t.lsp = require('vim.lsp') - return t.lsp - elseif key == 'highlight' then - t.highlight = require('vim.highlight') - return t.highlight - elseif key == 'F' then - t.F = require('vim.F') - return t.F - end -end - -setmetatable(vim, { - __index = __index -}) - -- An easier alias for commands. vim.cmd = function(command) return vim.api.nvim_exec(command, false) @@ -315,121 +313,27 @@ end -- These are the vim.env/v/g/o/bo/wo variable magic accessors. do - local a = vim.api local validate = vim.validate - local function make_meta_accessor(get, set, del) + + local function make_dict_accessor(scope) validate { - get = {get, 'f'}; - set = {set, 'f'}; - del = {del, 'f', true}; + scope = {scope, 's'}; } local mt = {} - if del then - function mt:__newindex(k, v) - if v == nil then - return del(k) - end - return set(k, v) - end - else - function mt:__newindex(k, v) - return set(k, v) - end + function mt:__newindex(k, v) + return vim._setvar(scope, 0, k, v) end function mt:__index(k) - return get(k) + return vim._getvar(scope, 0, k) end return setmetatable({}, mt) end - local function pcall_ret(status, ...) - if status then return ... end - end - local function nil_wrap(fn) - return function(...) - return pcall_ret(pcall(fn, ...)) - end - end - vim.b = make_meta_accessor( - nil_wrap(function(v) return a.nvim_buf_get_var(0, v) end), - function(v, k) return a.nvim_buf_set_var(0, v, k) end, - function(v) return a.nvim_buf_del_var(0, v) end - ) - vim.w = make_meta_accessor( - nil_wrap(function(v) return a.nvim_win_get_var(0, v) end), - function(v, k) return a.nvim_win_set_var(0, v, k) end, - function(v) return a.nvim_win_del_var(0, v) end - ) - vim.t = make_meta_accessor( - nil_wrap(function(v) return a.nvim_tabpage_get_var(0, v) end), - function(v, k) return a.nvim_tabpage_set_var(0, v, k) end, - function(v) return a.nvim_tabpage_del_var(0, v) end - ) - vim.g = make_meta_accessor(nil_wrap(a.nvim_get_var), a.nvim_set_var, a.nvim_del_var) - vim.v = make_meta_accessor(nil_wrap(a.nvim_get_vvar), a.nvim_set_vvar) - vim.o = make_meta_accessor(a.nvim_get_option, a.nvim_set_option) - - local function getenv(k) - local v = vim.fn.getenv(k) - if v == vim.NIL then - return nil - end - return v - end - vim.env = make_meta_accessor(getenv, vim.fn.setenv) - -- TODO(ashkan) if/when these are available from an API, generate them - -- instead of hardcoding. - local window_options = { - arab = true; arabic = true; breakindent = true; breakindentopt = true; - bri = true; briopt = true; cc = true; cocu = true; - cole = true; colorcolumn = true; concealcursor = true; conceallevel = true; - crb = true; cuc = true; cul = true; cursorbind = true; - cursorcolumn = true; cursorline = true; diff = true; fcs = true; - fdc = true; fde = true; fdi = true; fdl = true; - fdm = true; fdn = true; fdt = true; fen = true; - fillchars = true; fml = true; fmr = true; foldcolumn = true; - foldenable = true; foldexpr = true; foldignore = true; foldlevel = true; - foldmarker = true; foldmethod = true; foldminlines = true; foldnestmax = true; - foldtext = true; lbr = true; lcs = true; linebreak = true; - list = true; listchars = true; nu = true; number = true; - numberwidth = true; nuw = true; previewwindow = true; pvw = true; - relativenumber = true; rightleft = true; rightleftcmd = true; rl = true; - rlc = true; rnu = true; scb = true; scl = true; - scr = true; scroll = true; scrollbind = true; signcolumn = true; - spell = true; statusline = true; stl = true; wfh = true; - wfw = true; winbl = true; winblend = true; winfixheight = true; - winfixwidth = true; winhighlight = true; winhl = true; wrap = true; - } - local function new_buf_opt_accessor(bufnr) - local function get(k) - if window_options[k] then - return a.nvim_err_writeln(k.." is a window option, not a buffer option") - end - if bufnr == nil and type(k) == "number" then - return new_buf_opt_accessor(k) - end - return a.nvim_buf_get_option(bufnr or 0, k) - end - local function set(k, v) - if window_options[k] then - return a.nvim_err_writeln(k.." is a window option, not a buffer option") - end - return a.nvim_buf_set_option(bufnr or 0, k, v) - end - return make_meta_accessor(get, set) - end - vim.bo = new_buf_opt_accessor(nil) - local function new_win_opt_accessor(winnr) - local function get(k) - if winnr == nil and type(k) == "number" then - return new_win_opt_accessor(k) - end - return a.nvim_win_get_option(winnr or 0, k) - end - local function set(k, v) return a.nvim_win_set_option(winnr or 0, k, v) end - return make_meta_accessor(get, set) - end - vim.wo = new_win_opt_accessor(nil) + vim.g = make_dict_accessor('g') + vim.v = make_dict_accessor('v') + vim.b = make_dict_accessor('b') + vim.w = make_dict_accessor('w') + vim.t = make_dict_accessor('t') end --- Get a table of lines with start, end columns for a region marked by two points @@ -445,6 +349,11 @@ function vim.region(bufnr, pos1, pos2, regtype, inclusive) vim.fn.bufload(bufnr) end + -- check that region falls within current buffer + local buf_line_count = vim.api.nvim_buf_line_count(bufnr) + pos1[1] = math.min(pos1[1], buf_line_count - 1) + pos2[1] = math.min(pos2[1], buf_line_count - 1) + -- in case of block selection, columns need to be adjusted for non-ASCII characters -- TODO: handle double-width characters local bufline @@ -508,6 +417,8 @@ function vim.notify(msg, log_level, _opts) if log_level == vim.log.levels.ERROR then vim.api.nvim_err_writeln(msg) + elseif log_level == vim.log.levels.WARN then + vim.api.nvim_echo({{msg, 'WarningMsg'}}, true, {}) else vim.api.nvim_echo({{msg}}, true, {}) end @@ -730,4 +641,6 @@ vim._expand_pat_get_parts = function(lua_string) return parts, search_index end +pcall(require, 'vim._meta') + return module diff --git a/src/nvim/macros.h b/src/nvim/macros.h index 303722b4a8..e718254fb9 100644 --- a/src/nvim/macros.h +++ b/src/nvim/macros.h @@ -169,7 +169,7 @@ #if NVIM_HAS_ATTRIBUTE(fallthrough) \ && (!defined(__apple_build_version__) || __apple_build_version__ >= 7000000) -# define FALLTHROUGH __attribute__((fallthrough)) +# define FALLTHROUGH {} __attribute__((fallthrough)) #else # define FALLTHROUGH #endif @@ -238,5 +238,6 @@ # define PRAGMA_DIAG_POP #endif +#define EMPTY_POS(a) ((a).lnum == 0 && (a).col == 0 && (a).coladd == 0) #endif // NVIM_MACROS_H diff --git a/src/nvim/main.c b/src/nvim/main.c index 7064f2a068..7d7eba2105 100644 --- a/src/nvim/main.c +++ b/src/nvim/main.c @@ -375,7 +375,7 @@ int main(int argc, char **argv) // Does ":filetype plugin indent on". filetype_maybe_enable(); // Sources syntax/syntax.vim, which calls `:filetype on`. - syn_maybe_on(); + syn_maybe_enable(); } // Read all the plugin files. @@ -1101,11 +1101,7 @@ static void command_line_scan(mparm_T *parmp) size_t s_size = STRLEN(a) + 9; char *s = xmalloc(s_size); - if (path_with_extension(a, "lua")) { - snprintf(s, s_size, "luafile %s", a); - } else { - snprintf(s, s_size, "so %s", a); - } + snprintf(s, s_size, "so %s", a); parmp->cmds_tofree[parmp->n_commands] = true; parmp->commands[parmp->n_commands++] = s; } else { @@ -1367,7 +1363,8 @@ static void load_plugins(void) { if (p_lpl) { char_u *rtp_copy = NULL; - char_u *const plugin_pattern = (char_u *)"plugin/**/*.vim"; // NOLINT + char_u *const plugin_pattern_vim = (char_u *)"plugin/**/*.vim"; // NOLINT + char_u *const plugin_pattern_lua = (char_u *)"plugin/**/*.lua"; // NOLINT // First add all package directories to 'runtimepath', so that their // autoload directories can be found. Only if not done already with a @@ -1380,7 +1377,10 @@ static void load_plugins(void) } source_in_path(rtp_copy == NULL ? p_rtp : rtp_copy, - plugin_pattern, + plugin_pattern_vim, + DIP_ALL | DIP_NOAFTER); + source_in_path(rtp_copy == NULL ? p_rtp : rtp_copy, + plugin_pattern_lua, DIP_ALL | DIP_NOAFTER); TIME_MSG("loading plugins"); xfree(rtp_copy); @@ -1392,7 +1392,8 @@ static void load_plugins(void) } TIME_MSG("loading packages"); - source_runtime(plugin_pattern, DIP_ALL | DIP_AFTER); + source_runtime(plugin_pattern_vim, DIP_ALL | DIP_AFTER); + source_runtime(plugin_pattern_lua, DIP_ALL | DIP_AFTER); TIME_MSG("loading after plugins"); } } @@ -1810,7 +1811,7 @@ static bool do_user_initialization(void) char_u *init_lua_path = (char_u *)stdpaths_user_conf_subpath("init.lua"); if (os_path_exists(init_lua_path) - && nlua_exec_file((const char *)init_lua_path)) { + && do_source(init_lua_path, true, DOSO_VIMRC)) { os_setenv("MYVIMRC", (const char *)init_lua_path, 1); char_u *vimrc_path = (char_u *)stdpaths_user_conf_subpath("init.vim"); @@ -1883,12 +1884,8 @@ static void source_startup_scripts(const mparm_T *const parmp) || strequal(parmp->use_vimrc, "NORC")) { // Do nothing. } else { - if (path_with_extension(parmp->use_vimrc, "lua")) { - nlua_exec_file(parmp->use_vimrc); - } else { - if (do_source((char_u *)parmp->use_vimrc, false, DOSO_NONE) != OK) { - EMSG2(_("E282: Cannot read from \"%s\""), parmp->use_vimrc); - } + if (do_source((char_u *)parmp->use_vimrc, false, DOSO_NONE) != OK) { + EMSG2(_("E282: Cannot read from \"%s\""), parmp->use_vimrc); } } } else if (!silent_mode) { diff --git a/src/nvim/marktree.c b/src/nvim/marktree.c index b3afdefac1..34acf64d83 100644 --- a/src/nvim/marktree.c +++ b/src/nvim/marktree.c @@ -849,7 +849,7 @@ bool marktree_splice(MarkTree *b, MarkTreeIter itr[1] = { 0 }; MarkTreeIter enditr[1] = { 0 }; - mtpos_t oldbase[MT_MAX_DEPTH]; + mtpos_t oldbase[MT_MAX_DEPTH] = { 0 }; marktree_itr_get_ext(b, start, itr, false, true, oldbase); if (!itr->node) { diff --git a/src/nvim/memline.c b/src/nvim/memline.c index 34d8eb0ffe..cb2437b2b3 100644 --- a/src/nvim/memline.c +++ b/src/nvim/memline.c @@ -1207,6 +1207,7 @@ void ml_recover(bool checkext) && !(curbuf->b_ml.ml_flags & ML_EMPTY)) ml_delete(curbuf->b_ml.ml_line_count, false); curbuf->b_flags |= BF_RECOVERED; + check_cursor(); recoverymode = FALSE; if (got_int) @@ -2238,7 +2239,7 @@ static int ml_append_int( */ lineadd = buf->b_ml.ml_locked_lineadd; buf->b_ml.ml_locked_lineadd = 0; - ml_find_line(buf, (linenr_T)0, ML_FLUSH); /* flush data block */ + (void)ml_find_line(buf, (linenr_T)0, ML_FLUSH); // flush data block /* * update pointer blocks for the new data block diff --git a/src/nvim/menu.c b/src/nvim/menu.c index ac3b7768e6..112f51fc64 100644 --- a/src/nvim/menu.c +++ b/src/nvim/menu.c @@ -1069,7 +1069,7 @@ char_u *get_menu_names(expand_T *xp, int idx) #define TBUFFER_LEN 256 static char_u tbuffer[TBUFFER_LEN]; /*hack*/ char_u *str; - static int should_advance = FALSE; + static bool should_advance = false; if (idx == 0) { /* first call: start at first item */ menu = expand_menu; @@ -1089,12 +1089,13 @@ char_u *get_menu_names(expand_T *xp, int idx) if (menu->modes & expand_modes) { if (menu->children != NULL) { - if (should_advance) - STRLCPY(tbuffer, menu->en_dname, TBUFFER_LEN - 1); - else { - STRLCPY(tbuffer, menu->dname, TBUFFER_LEN - 1); - if (menu->en_dname == NULL) - should_advance = TRUE; + if (should_advance) { + STRLCPY(tbuffer, menu->en_dname, TBUFFER_LEN); + } else { + STRLCPY(tbuffer, menu->dname, TBUFFER_LEN); + if (menu->en_dname == NULL) { + should_advance = true; + } } /* hack on menu separators: use a 'magic' char for the separator * so that '.' in names gets escaped properly */ @@ -1105,8 +1106,9 @@ char_u *get_menu_names(expand_T *xp, int idx) str = menu->en_dname; else { str = menu->dname; - if (menu->en_dname == NULL) - should_advance = TRUE; + if (menu->en_dname == NULL) { + should_advance = true; + } } } } else diff --git a/src/nvim/message.c b/src/nvim/message.c index 7c98d3c6b5..ec5dabbbc0 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -131,7 +131,7 @@ static int msg_grid_scroll_discount = 0; static void ui_ext_msg_set_pos(int row, bool scrolled) { - char buf[MAX_MCO]; + char buf[MAX_MCO + 1]; size_t size = utf_char2bytes(curwin->w_p_fcs_chars.msgsep, (char_u *)buf); buf[size] = '\0'; ui_call_msg_set_pos(msg_grid.handle, row, scrolled, @@ -165,6 +165,7 @@ void msg_grid_validate(void) // TODO(bfredl): eventually should be set to "invalid". I e all callers // will use the grid including clear to EOS if necessary. grid_alloc(&msg_grid, Rows, Columns, false, true); + msg_grid.zindex = kZIndexMessages; xfree(msg_grid.dirty_col); msg_grid.dirty_col = xcalloc(Rows, sizeof(*msg_grid.dirty_col)); @@ -1193,7 +1194,8 @@ void wait_return(int redraw) || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE || c == K_RIGHTDRAG || c == K_RIGHTRELEASE || c == K_MOUSELEFT || c == K_MOUSERIGHT - || c == K_MOUSEDOWN || c == K_MOUSEUP); + || c == K_MOUSEDOWN || c == K_MOUSEUP + || c == K_MOUSEMOVE); os_breakcheck(); /* * Avoid that the mouse-up event causes visual mode to start. @@ -2265,12 +2267,14 @@ void msg_scroll_up(bool may_throttle) /// per screen update. /// /// NB: The bookkeeping is quite messy, and rests on a bunch of poorly -/// documented assumtions. For instance that the message area always grows while -/// being throttled, messages are only being output on the last line etc. +/// documented assumptions. For instance that the message area always grows +/// while being throttled, messages are only being output on the last line +/// etc. /// -/// Probably message scrollback storage should reimplented as a file_buffer, and -/// message scrolling in TUI be reimplemented as a modal floating window. Then -/// we get throttling "for free" using standard redraw_later code paths. +/// Probably message scrollback storage should be reimplemented as a +/// file_buffer, and message scrolling in TUI be reimplemented as a modal +/// floating window. Then we get throttling "for free" using standard +/// redraw_later code paths. void msg_scroll_flush(void) { if (msg_grid.throttled) { diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index 34c43da0f7..38d0a7dadf 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -602,6 +602,7 @@ int is_mouse_key(int c) || c == K_LEFTDRAG || c == K_LEFTRELEASE || c == K_LEFTRELEASE_NM + || c == K_MOUSEMOVE || c == K_MIDDLEMOUSE || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE @@ -752,8 +753,12 @@ get_number ( skip_redraw = TRUE; /* skip redraw once */ do_redraw = FALSE; break; - } else if (c == CAR || c == NL || c == Ctrl_C || c == ESC) + } else if (c == Ctrl_C || c == ESC || c == 'q') { + n = 0; break; + } else if (c == CAR || c == NL) { + break; + } } no_mapping--; return n; @@ -770,11 +775,13 @@ int prompt_for_number(int *mouse_used) int save_cmdline_row; int save_State; - /* When using ":silent" assume that <CR> was entered. */ - if (mouse_used != NULL) - MSG_PUTS(_("Type number and <Enter> or click with mouse (empty cancels): ")); - else - MSG_PUTS(_("Type number and <Enter> (empty cancels): ")); + // When using ":silent" assume that <CR> was entered. + if (mouse_used != NULL) { + MSG_PUTS(_("Type number and <Enter> or click with the mouse " + "(q or empty cancels): ")); + } else { + MSG_PUTS(_("Type number and <Enter> (q or empty cancels): ")); + } /* Set the state such that text can be selected/copied/pasted and we still * get mouse events. */ diff --git a/src/nvim/normal.c b/src/nvim/normal.c index c948881eca..44cdc09c0b 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -294,6 +294,7 @@ static const struct nv_cmd { { K_LEFTDRAG, nv_mouse, 0, 0 }, { K_LEFTRELEASE, nv_mouse, 0, 0 }, { K_LEFTRELEASE_NM, nv_mouse, 0, 0 }, + { K_MOUSEMOVE, nv_mouse, 0, 0 }, { K_MIDDLEMOUSE, nv_mouse, 0, 0 }, { K_MIDDLEDRAG, nv_mouse, 0, 0 }, { K_MIDDLERELEASE, nv_mouse, 0, 0 }, @@ -817,7 +818,7 @@ static bool normal_get_command_count(NormalState *s) } if (s->ca.count0 < 0) { - // got too large! + // overflow s->ca.count0 = 999999999L; } @@ -879,8 +880,9 @@ static void normal_finish_command(NormalState *s) s->old_mapped_len = typebuf_maplen(); } - // If an operation is pending, handle it. But not for K_IGNORE. - if (s->ca.cmdchar != K_IGNORE) { + // If an operation is pending, handle it. But not for K_IGNORE or + // K_MOUSEMOVE. + if (s->ca.cmdchar != K_IGNORE && s->ca.cmdchar != K_MOUSEMOVE) { do_pending_operator(&s->ca, s->old_col, false); } @@ -1023,10 +1025,14 @@ static int normal_execute(VimState *state, int key) // If you give a count before AND after the operator, they are // multiplied. if (s->ca.count0) { - s->ca.count0 *= s->ca.opcount; + s->ca.count0 = (long)((uint64_t)s->ca.count0 * (uint64_t)s->ca.opcount); } else { s->ca.count0 = s->ca.opcount; } + if (s->ca.count0 < 0) { + // overflow + s->ca.count0 = 999999999L; + } } // Always remember the count. It will be set to zero (on the next call, @@ -1864,6 +1870,7 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank) } } else { curwin->w_p_lbr = lbr_saved; + oap->excl_tr_ws = cap->cmdchar == 'z'; (void)op_yank(oap, !gui_yank, false); } check_cursor_col(); @@ -1940,10 +1947,12 @@ void do_pending_operator(cmdarg_T *cap, int old_col, bool gui_yank) case OP_FORMAT: if (*curbuf->b_p_fex != NUL) { op_formatexpr(oap); // use expression - } else if (*p_fp != NUL || *curbuf->b_p_fp != NUL) { - op_colon(oap); // use external command } else { - op_format(oap, false); // use internal function + if (*p_fp != NUL || *curbuf->b_p_fp != NUL) { + op_colon(oap); // use external command + } else { + op_format(oap, false); // use internal function + } } break; @@ -2263,6 +2272,10 @@ do_mouse ( break; } + if (c == K_MOUSEMOVE) { + // Mouse moved without a button pressed. + return false; + } /* * Ignore drag and release events if we didn't get a click. @@ -3390,7 +3403,7 @@ bool add_to_showcmd(int c) static int ignore[] = { K_IGNORE, - K_LEFTMOUSE, K_LEFTDRAG, K_LEFTRELEASE, + K_LEFTMOUSE, K_LEFTDRAG, K_LEFTRELEASE, K_MOUSEMOVE, K_MIDDLEMOUSE, K_MIDDLEDRAG, K_MIDDLERELEASE, K_RIGHTMOUSE, K_RIGHTDRAG, K_RIGHTRELEASE, K_MOUSEDOWN, K_MOUSEUP, K_MOUSELEFT, K_MOUSERIGHT, @@ -4376,6 +4389,15 @@ dozet: } break; + // "zp", "zP" in block mode put without addind trailing spaces + case 'P': + case 'p': + nv_put(cap); + break; + // "zy" Yank without trailing spaces + case 'y': nv_operator(cap); + break; + /* "zF": create fold command */ /* "zf": create fold operator */ case 'F': @@ -4582,7 +4604,9 @@ dozet: if (ptr == NULL && (len = find_ident_under_cursor(&ptr, FIND_IDENT)) == 0) return; assert(len <= INT_MAX); - spell_add_word(ptr, (int)len, nchar == 'w' || nchar == 'W', + spell_add_word(ptr, (int)len, + nchar == 'w' || nchar == 'W' + ? SPELL_ADD_BAD : SPELL_ADD_GOOD, (nchar == 'G' || nchar == 'W') ? 0 : (int)cap->count1, undo); } @@ -5106,8 +5130,8 @@ static void nv_scroll(cmdarg_T *cap) /* Count a fold for one screen line. */ lnum = curwin->w_topline; while (n-- > 0 && lnum < curwin->w_botline - 1) { - hasFolding(lnum, NULL, &lnum); - ++lnum; + (void)hasFolding(lnum, NULL, &lnum); + lnum++; } n = lnum - curwin->w_topline; } @@ -5803,6 +5827,9 @@ static void nv_percent(cmdarg_T *cap) curwin->w_cursor.lnum = (curbuf->b_ml.ml_line_count * cap->count0 + 99L) / 100L; } + if (curwin->w_cursor.lnum < 1) { + curwin->w_cursor.lnum = 1; + } if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count) { curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count; } @@ -7036,6 +7063,7 @@ static void nv_g_cmd(cmdarg_T *cap) case K_LEFTMOUSE: case K_LEFTDRAG: case K_LEFTRELEASE: + case K_MOUSEMOVE: case K_RIGHTMOUSE: case K_RIGHTDRAG: case K_RIGHTRELEASE: @@ -7904,12 +7932,14 @@ static void nv_put_opt(cmdarg_T *cap, bool fix_indent) flags |= PUT_FIXINDENT; } else { dir = (cap->cmdchar == 'P' - || (cap->cmdchar == 'g' && cap->nchar == 'P')) - ? BACKWARD : FORWARD; + || ((cap->cmdchar == 'g' || cap->cmdchar == 'z') + && cap->nchar == 'P')) ? BACKWARD : FORWARD; } prep_redo_cmd(cap); if (cap->cmdchar == 'g') { flags |= PUT_CURSEND; + } else if (cap->cmdchar == 'z') { + flags |= PUT_BLOCK_INNER; } if (VIsual_active) { diff --git a/src/nvim/normal.h b/src/nvim/normal.h index 51170105ed..8e15e909d4 100644 --- a/src/nvim/normal.h +++ b/src/nvim/normal.h @@ -48,6 +48,8 @@ typedef struct oparg_S { colnr_T end_vcol; // end col for block mode operator long prev_opcount; // ca.opcount saved for K_EVENT long prev_count0; // ca.count0 saved for K_EVENT + bool excl_tr_ws; // exclude trailing whitespace for yank of a + // block } oparg_T; /* diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 190ca2e93b..f2f6803665 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -156,6 +156,9 @@ int get_op_type(int char1, int char2) // subtract return OP_NR_SUB; } + if (char1 == 'z' && char2 == 'y') { // OP_YANK + return OP_YANK; + } for (i = 0;; i++) { if (opchars[i][0] == char1 && opchars[i][1] == char2) { break; @@ -1676,17 +1679,14 @@ int op_delete(oparg_T *oap) curbuf_splice_pending++; pos_T startpos = curwin->w_cursor; // start position for delete - bcount_t deleted_bytes = (bcount_t)STRLEN( - ml_get(startpos.lnum)) + 1 - startpos.col; + bcount_t deleted_bytes = get_region_bytecount( + curbuf, startpos.lnum, oap->end.lnum, startpos.col, + oap->end.col) + oap->inclusive; truncate_line(true); // delete from cursor to end of line curpos = curwin->w_cursor; // remember curwin->w_cursor curwin->w_cursor.lnum++; - for (linenr_T i = 1; i <= oap->line_count - 2; i++) { - deleted_bytes += (bcount_t)STRLEN( - ml_get(startpos.lnum + i)) + 1; - } del_lines(oap->line_count - 2, false); // delete from start of line until op_end @@ -1694,7 +1694,6 @@ int op_delete(oparg_T *oap) curwin->w_cursor.col = 0; (void)del_bytes((colnr_T)n, !virtual_op, oap->op_type == OP_DELETE && !oap->is_VIsual); - deleted_bytes += n; curwin->w_cursor = curpos; // restore curwin->w_cursor (void)do_join(2, false, false, false, false); curbuf_splice_pending--; @@ -2567,7 +2566,7 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append) switch (reg->y_type) { case kMTBlockWise: block_prep(oap, &bd, lnum, false); - yank_copy_line(reg, &bd, y_idx); + yank_copy_line(reg, &bd, y_idx, oap->excl_tr_ws); break; case kMTLineWise: @@ -2631,7 +2630,7 @@ static void op_yank_reg(oparg_T *oap, bool message, yankreg_T *reg, bool append) bd.textlen = endcol - startcol + oap->inclusive; } bd.textstart = p + startcol; - yank_copy_line(reg, &bd, y_idx); + yank_copy_line(reg, &bd, y_idx, false); break; } // NOTREACHED @@ -2718,7 +2717,11 @@ 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, size_t y_idx) +// Copy a block range into a register. +// If "exclude_trailing_space" is set, do not copy trailing whitespaces. +static void yank_copy_line(yankreg_T *reg, const struct block_def *bd, + size_t y_idx, bool exclude_trailing_space) + FUNC_ATTR_NONNULL_ALL { int size = bd->startspaces + bd->endspaces + bd->textlen; assert(size >= 0); @@ -2730,6 +2733,14 @@ static void yank_copy_line(yankreg_T *reg, struct block_def *bd, size_t y_idx) pnew += bd->textlen; memset(pnew, ' ', (size_t)bd->endspaces); pnew += bd->endspaces; + if (exclude_trailing_space) { + int s = bd->textlen + bd->endspaces; + + while (ascii_iswhite(*(bd->textstart + s - 1)) && s > 0) { + s = s - utf_head_off(bd->textstart, bd->textstart + s - 1) - 1; + pnew--; + } + } *pnew = NUL; } @@ -2792,13 +2803,13 @@ static void do_autocmd_textyankpost(oparg_T *oap, yankreg_T *reg) recursive = false; } -/* - * 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") - dir: BACKWARD for 'P', FORWARD for 'p' */ +// 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") +// PUT_BLOCK_INNER in block mode, do not add trailing spaces +// dir: BACKWARD for 'P', FORWARD for 'p' void do_put(int regname, yankreg_T *reg, int dir, long count, int flags) { char_u *ptr; @@ -3130,7 +3141,7 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags) curwin->w_cursor.coladd = 0; bd.textcol = 0; for (i = 0; i < y_size; i++) { - int spaces; + int spaces = 0; char shortline; // can just be 0 or 1, needed for blockwise paste beyond the current // buffer end @@ -3181,13 +3192,16 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags) yanklen = (int)STRLEN(y_array[i]); - // calculate number of spaces required to fill right side of block - spaces = y_width + 1; - for (long j = 0; j < yanklen; j++) { - spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0); - } - if (spaces < 0) { - spaces = 0; + if ((flags & PUT_BLOCK_INNER) == 0) { + // calculate number of spaces required to fill right side of + // block + spaces = y_width + 1; + for (int j = 0; j < yanklen; j++) { + spaces -= lbr_chartabsize(NULL, &y_array[i][j], 0); + } + if (spaces < 0) { + spaces = 0; + } } // insert the new text @@ -3334,6 +3348,9 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags) changed_cline_bef_curs(); curwin->w_cursor.col += (colnr_T)(totlen - 1); } + changed_bytes(lnum, col); + extmark_splice_cols(curbuf, (int)lnum-1, col, + 0, (int)totlen, kExtmarkUndo); } if (VIsual_active) { lnum++; @@ -3345,12 +3362,10 @@ void do_put(int regname, yankreg_T *reg, int dir, long count, int flags) } curbuf->b_op_end = curwin->w_cursor; - /* For "CTRL-O p" in Insert mode, put cursor after last char */ - if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND))) - ++curwin->w_cursor.col; - changed_bytes(lnum, col); - extmark_splice_cols(curbuf, (int)lnum-1, col, - 0, (int)totlen, kExtmarkUndo); + // For "CTRL-O p" in Insert mode, put cursor after last char + if (totlen && (restart_edit != 0 || (flags & PUT_CURSEND))) { + curwin->w_cursor.col++; + } } else { // Insert at least one line. When y_type is kMTCharWise, break the first // line in two. @@ -4731,12 +4746,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) char_u *ptr; int c; int todel; - bool dohex; - bool dooct; - bool dobin; - bool doalp; int firstdigit; - bool subtract; bool negative = false; bool was_positive = true; bool visual = VIsual_active; @@ -4747,10 +4757,12 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) pos_T endpos; colnr_T save_coladd = 0; - dohex = (vim_strchr(curbuf->b_p_nf, 'x') != NULL); // "heX" - dooct = (vim_strchr(curbuf->b_p_nf, 'o') != NULL); // "Octal" - dobin = (vim_strchr(curbuf->b_p_nf, 'b') != NULL); // "Bin" - doalp = (vim_strchr(curbuf->b_p_nf, 'p') != NULL); // "alPha" + const bool do_hex = vim_strchr(curbuf->b_p_nf, 'x') != NULL; // "heX" + const bool do_oct = vim_strchr(curbuf->b_p_nf, 'o') != NULL; // "Octal" + const bool do_bin = vim_strchr(curbuf->b_p_nf, 'b') != NULL; // "Bin" + const bool do_alpha = vim_strchr(curbuf->b_p_nf, 'p') != NULL; // "alPha" + // "Unsigned" + const bool do_unsigned = vim_strchr(curbuf->b_p_nf, 'u') != NULL; if (virtual_active()) { save_coladd = pos->coladd; @@ -4767,21 +4779,21 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) // First check if we are on a hexadecimal number, after the "0x". if (!VIsual_active) { - if (dobin) { + if (do_bin) { while (col > 0 && ascii_isbdigit(ptr[col])) { col--; col -= utf_head_off(ptr, ptr + col); } } - if (dohex) { + if (do_hex) { while (col > 0 && ascii_isxdigit(ptr[col])) { col--; col -= utf_head_off(ptr, ptr + col); } } - if (dobin - && dohex + if (do_bin + && do_hex && !((col > 0 && (ptr[col] == 'X' || ptr[col] == 'x') && ptr[col - 1] == '0' @@ -4797,13 +4809,13 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) } } - if ((dohex + if ((do_hex && col > 0 && (ptr[col] == 'X' || ptr[col] == 'x') && ptr[col - 1] == '0' && !utf_head_off(ptr, ptr + col - 1) && ascii_isxdigit(ptr[col + 1])) - || (dobin + || (do_bin && col > 0 && (ptr[col] == 'B' || ptr[col] == 'b') && ptr[col - 1] == '0' @@ -4818,13 +4830,13 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) while (ptr[col] != NUL && !ascii_isdigit(ptr[col]) - && !(doalp && ASCII_ISALPHA(ptr[col]))) { + && !(do_alpha && ASCII_ISALPHA(ptr[col]))) { col++; } while (col > 0 && ascii_isdigit(ptr[col - 1]) - && !(doalp && ASCII_ISALPHA(ptr[col]))) { + && !(do_alpha && ASCII_ISALPHA(ptr[col]))) { col--; } } @@ -4832,7 +4844,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) if (visual) { while (ptr[col] != NUL && length > 0 && !ascii_isdigit(ptr[col]) - && !(doalp && ASCII_ISALPHA(ptr[col]))) { + && !(do_alpha && ASCII_ISALPHA(ptr[col]))) { int mb_len = utfc_ptr2len(ptr + col); col += mb_len; @@ -4844,7 +4856,8 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) } if (col > pos->col && ptr[col - 1] == '-' - && !utf_head_off(ptr, ptr + col - 1)) { + && !utf_head_off(ptr, ptr + col - 1) + && !do_unsigned) { negative = true; was_positive = false; } @@ -4852,12 +4865,12 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) // If a number was found, and saving for undo works, replace the number. firstdigit = ptr[col]; - if (!ascii_isdigit(firstdigit) && !(doalp && ASCII_ISALPHA(firstdigit))) { + if (!ascii_isdigit(firstdigit) && !(do_alpha && ASCII_ISALPHA(firstdigit))) { beep_flush(); goto theend; } - if (doalp && ASCII_ISALPHA(firstdigit)) { + if (do_alpha && ASCII_ISALPHA(firstdigit)) { // decrement or increment alphabetic character if (op_type == OP_NR_SUB) { if (CharOrd(firstdigit) < Prenum1) { @@ -4889,7 +4902,9 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) curwin->w_cursor.col = col; } else { if (col > 0 && ptr[col - 1] == '-' - && !utf_head_off(ptr, ptr + col - 1) && !visual) { + && !utf_head_off(ptr, ptr + col - 1) + && !visual + && !do_unsigned) { // negative number col--; negative = true; @@ -4903,9 +4918,9 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) } vim_str2nr(ptr + col, &pre, &length, - 0 + (dobin ? STR2NR_BIN : 0) - + (dooct ? STR2NR_OCT : 0) - + (dohex ? STR2NR_HEX : 0), + 0 + (do_bin ? STR2NR_BIN : 0) + + (do_oct ? STR2NR_OCT : 0) + + (do_hex ? STR2NR_HEX : 0), NULL, &n, maxlen); // ignore leading '-' for hex, octal and bin numbers @@ -4916,7 +4931,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) } // add or subtract - subtract = false; + bool subtract = false; if (op_type == OP_NR_SUB) { subtract ^= true; } @@ -4948,6 +4963,17 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) } } + if (do_unsigned && negative) { + if (subtract) { + // sticking at zero. + n = (uvarnumber_T)0; + } else { + // sticking at 2^64 - 1. + n = (uvarnumber_T)(-1); + } + negative = false; + } + if (visual && !was_positive && !negative && col > 0) { // need to remove the '-' col--; @@ -5029,7 +5055,7 @@ int do_addsub(int op_type, pos_T *pos, int length, linenr_T Prenum1) // total length of the number remains the same. // Don't do this when // the result may look like an octal number. - if (firstdigit == '0' && !(dooct && pre == 0)) { + if (firstdigit == '0' && !(do_oct && pre == 0)) { while (length-- > 0) { *ptr++ = '0'; } @@ -6291,3 +6317,33 @@ bool op_reg_set_previous(const char name) y_previous = &y_regs[i]; return true; } + +/// Get the byte count of buffer region. End-exclusive. +/// +/// @return number of bytes +bcount_t get_region_bytecount(buf_T *buf, linenr_T start_lnum, + linenr_T end_lnum, colnr_T start_col, + colnr_T end_col) +{ + linenr_T max_lnum = buf->b_ml.ml_line_count; + if (start_lnum > max_lnum) { + return 0; + } + if (start_lnum == end_lnum) { + return end_col - start_col; + } + const char *first = (const char *)ml_get_buf(buf, start_lnum, false); + bcount_t deleted_bytes = (bcount_t)STRLEN(first) - start_col + 1; + + for (linenr_T i = 1; i <= end_lnum-start_lnum-1; i++) { + if (start_lnum + i > max_lnum) { + return deleted_bytes; + } + deleted_bytes += (bcount_t)STRLEN( + ml_get_buf(buf, start_lnum + i, false)) + 1; + } + if (end_lnum > max_lnum) { + return deleted_bytes; + } + return deleted_bytes + end_col; +} diff --git a/src/nvim/ops.h b/src/nvim/ops.h index a8867e02ea..112ffbeaba 100644 --- a/src/nvim/ops.h +++ b/src/nvim/ops.h @@ -6,6 +6,7 @@ #include "nvim/macros.h" #include "nvim/ascii.h" #include "nvim/types.h" +#include "nvim/extmark.h" #include "nvim/eval/typval.h" #include "nvim/os/time.h" #include "nvim/normal.h" // for MotionType and oparg_T @@ -13,13 +14,14 @@ typedef int (*Indenter)(void); -/* flags for do_put() */ -#define PUT_FIXINDENT 1 /* make indent look nice */ -#define PUT_CURSEND 2 /* leave cursor after end of new text */ -#define PUT_CURSLINE 4 /* leave cursor on last line of new text */ -#define PUT_LINE 8 /* put register as lines */ -#define PUT_LINE_SPLIT 16 /* split line for linewise register */ -#define PUT_LINE_FORWARD 32 /* put linewise register below Visual sel. */ +// flags for do_put() +#define PUT_FIXINDENT 1 // make indent look nice +#define PUT_CURSEND 2 // leave cursor after end of new text +#define PUT_CURSLINE 4 // leave cursor on last line of new text +#define PUT_LINE 8 // put register as lines +#define PUT_LINE_SPLIT 16 // split line for linewise register +#define PUT_LINE_FORWARD 32 // put linewise register below Visual sel. +#define PUT_BLOCK_INNER 64 // in block mode, do not add trailing spaces /* * Registers: diff --git a/src/nvim/option.c b/src/nvim/option.c index 666c526a18..57b8fe1a2e 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -292,7 +292,8 @@ typedef struct vimoption { static char *(p_ambw_values[]) = { "single", "double", NULL }; static char *(p_bg_values[]) = { "light", "dark", NULL }; -static char *(p_nf_values[]) = { "bin", "octal", "hex", "alpha", NULL }; +static char *(p_nf_values[]) = { "bin", "octal", "hex", "alpha", + "unsigned", NULL }; static char *(p_ff_values[]) = { FF_UNIX, FF_DOS, FF_MAC, NULL }; static char *(p_wak_values[]) = { "yes", "menu", "no", NULL }; static char *(p_mousem_values[]) = { "extend", "popup", "popup_setpos", @@ -854,15 +855,18 @@ void set_init_3(void) p_srr = (char_u *)">&"; options[idx_srr].def_val[VI_DEFAULT] = p_srr; } - } else if ( fnamecmp(p, "sh") == 0 - || fnamecmp(p, "ksh") == 0 - || fnamecmp(p, "mksh") == 0 - || fnamecmp(p, "pdksh") == 0 - || fnamecmp(p, "zsh") == 0 - || fnamecmp(p, "zsh-beta") == 0 - || fnamecmp(p, "bash") == 0 - || fnamecmp(p, "fish") == 0 - ) { + } else if (fnamecmp(p, "sh") == 0 + || fnamecmp(p, "ksh") == 0 + || fnamecmp(p, "mksh") == 0 + || fnamecmp(p, "pdksh") == 0 + || fnamecmp(p, "zsh") == 0 + || fnamecmp(p, "zsh-beta") == 0 + || fnamecmp(p, "bash") == 0 + || fnamecmp(p, "fish") == 0 + || fnamecmp(p, "ash") == 0 + || fnamecmp(p, "dash") == 0 + ) { + // Always use POSIX shell style redirection if we reach this if (do_sp) { p_sp = (char_u *)"2>&1| tee"; options[idx_sp].def_val[VI_DEFAULT] = p_sp; @@ -3637,9 +3641,11 @@ char_u *check_stl_option(char_u *s) return illegal_char(errbuf, sizeof(errbuf), *s); } if (*s == '{') { + int reevaluate = (*s == '%'); s++; - while (*s != '}' && *s) + while ((*s != '}' || (reevaluate && s[-1] != '%')) && *s) { s++; + } if (*s != '}') { return (char_u *)N_("E540: Unclosed expression sequence"); } @@ -4877,7 +4883,7 @@ int get_option_value_strict(char *name, if (p->flags & P_STRING) { *stringval = xstrdup(*(char **)(varp)); } else if (p->flags & P_NUM) { - *numval = *(long *) varp; + *numval = *(long *)varp; } else { *numval = *(int *)varp; } @@ -5226,6 +5232,11 @@ int makeset(FILE *fd, int opt_flags, int local_only) continue; } + if ((opt_flags & OPT_SKIPRTP) + && (p->var == (char_u *)&p_rtp || p->var == (char_u *)&p_pp)) { + continue; + } + round = 2; if (p->indir != PV_NONE) { if (p->var == VAR_WIN) { @@ -5359,7 +5370,7 @@ static int put_setstring(FILE *fd, char *cmd, char *name, } p = buf; while (*p != NUL) { - // for each comma seperated option part, append value to + // for each comma separated option part, append value to // the option, :set rtp+=value if (fprintf(fd, "%s %s+=", cmd, name) < 0) { goto fail; @@ -7694,7 +7705,7 @@ Dictionary get_vimoption(String name, Error *err) Dictionary get_all_vimoptions(void) { Dictionary retval = ARRAY_DICT_INIT; - for (size_t i = 0; i < PARAM_COUNT; i++) { + for (size_t i = 0; options[i].fullname != NULL; i++) { Dictionary opt_dict = vimoption2dict(&options[i]); PUT(retval, options[i].fullname, DICTIONARY_OBJ(opt_dict)); } diff --git a/src/nvim/option.h b/src/nvim/option.h index 60f14dea44..c6ee03e052 100644 --- a/src/nvim/option.h +++ b/src/nvim/option.h @@ -19,6 +19,9 @@ typedef enum { OPT_MODELINE = 8, ///< Option in modeline. OPT_WINONLY = 16, ///< Only set window-local options. OPT_NOWIN = 32, ///< Don’t set window-local options. + OPT_ONECOLUMN = 64, ///< list options one per line + OPT_NO_REDRAW = 128, ///< ignore redraw flags on option + OPT_SKIPRTP = 256, ///< "skiprtp" in 'sessionoptions' } OptionFlags; #ifdef INCLUDE_GENERATED_DECLARATIONS diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h index 16749ba86b..beb62a6a0b 100644 --- a/src/nvim/option_defs.h +++ b/src/nvim/option_defs.h @@ -559,6 +559,7 @@ 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_qftf; // 'quickfixtextfunc' EXTERN char_u *p_rtp; // 'runtimepath' EXTERN long p_scbk; // 'scrollback' EXTERN long p_sj; // 'scrolljump' @@ -571,11 +572,12 @@ EXTERN char_u *p_slm; // 'selectmode' EXTERN char_u *p_ssop; // 'sessionoptions' EXTERN unsigned ssop_flags; # ifdef IN_OPTION_C -// Also used for 'viewoptions'! +// Also used for 'viewoptions'! Keep in sync with SSOP_ flags. static char *(p_ssop_values[]) = { "buffers", "winpos", "resize", "winsize", "localoptions", "options", "help", "blank", "globals", "slash", "unix", - "sesdir", "curdir", "folds", "cursor", "tabpages", NULL + "sesdir", "curdir", "folds", "cursor", "tabpages", "terminal", "skiprtp", + NULL }; # endif # define SSOP_BUFFERS 0x001 @@ -594,6 +596,8 @@ static char *(p_ssop_values[]) = { # define SSOP_FOLDS 0x2000 # define SSOP_CURSOR 0x4000 # define SSOP_TABPAGES 0x8000 +# define SSOP_TERMINAL 0x10000 +# define SSOP_SKIP_RTP 0x20000 EXTERN char_u *p_sh; // 'shell' EXTERN char_u *p_shcf; // 'shellcmdflag' diff --git a/src/nvim/options.lua b/src/nvim/options.lua index d12b31bcaf..86dec74f56 100644 --- a/src/nvim/options.lua +++ b/src/nvim/options.lua @@ -2074,6 +2074,14 @@ return { defaults={if_true={vi=0}} }, { + full_name='quickfixtextfunc', abbreviation='qftf', + short_desc=N_("customize the quickfix window"), + type='string', scope={'global'}, + vi_def=true, + varname='p_qftf', + defaults={if_true={vi=""}} + }, + { full_name='quoteescape', abbreviation='qe', short_desc=N_("escape characters used in a string"), type='string', scope={'buffer'}, diff --git a/src/nvim/os/fs.c b/src/nvim/os/fs.c index a3bef3389c..d0fa74a77f 100644 --- a/src/nvim/os/fs.c +++ b/src/nvim/os/fs.c @@ -471,8 +471,6 @@ FILE *os_fopen(const char *path, const char *flags) abort(); } } - // Per open(2) manpage. - assert((iflags|O_RDONLY) || (iflags|O_WRONLY) || (iflags|O_RDWR)); // Per fopen(3) manpage: default to 0666, it will be umask-adjusted. int fd = os_open(path, iflags, 0666); if (fd < 0) { diff --git a/src/nvim/os/pty_process_unix.h b/src/nvim/os/pty_process_unix.h index 8c822eafad..765490b92b 100644 --- a/src/nvim/os/pty_process_unix.h +++ b/src/nvim/os/pty_process_unix.h @@ -7,7 +7,6 @@ typedef struct pty_process { Process process; - char *term_name; uint16_t width, height; struct winsize winsize; int tty_fd; diff --git a/src/nvim/os/pty_process_win.h b/src/nvim/os/pty_process_win.h index f8ec79a3d6..3f6cc58e3e 100644 --- a/src/nvim/os/pty_process_win.h +++ b/src/nvim/os/pty_process_win.h @@ -15,7 +15,6 @@ typedef enum { typedef struct pty_process { Process process; - char *term_name; uint16_t width, height; union { winpty_t *winpty; diff --git a/src/nvim/path.c b/src/nvim/path.c index 3e1713fbdd..fe50be5ea1 100644 --- a/src/nvim/path.c +++ b/src/nvim/path.c @@ -65,7 +65,7 @@ FileComparison path_full_compare(char_u *const s1, char_u *const s2, if (expandenv) { expand_env(s1, exp1, MAXPATHL); } else { - xstrlcpy((char *)exp1, (const char *)s1, MAXPATHL - 1); + xstrlcpy((char *)exp1, (const char *)s1, MAXPATHL); } bool id_ok_1 = os_fileid((char *)exp1, &file_id_1); bool id_ok_2 = os_fileid((char *)s2, &file_id_2); diff --git a/src/nvim/po/CMakeLists.txt b/src/nvim/po/CMakeLists.txt index 3a70264dd1..28f5723046 100644 --- a/src/nvim/po/CMakeLists.txt +++ b/src/nvim/po/CMakeLists.txt @@ -26,6 +26,7 @@ if(NOT LANGUAGES) ru sk sv + tr uk vi zh_CN.UTF-8 diff --git a/src/nvim/po/af.po b/src/nvim/po/af.po index db44f50a46..a76dd8eeea 100644 --- a/src/nvim/po/af.po +++ b/src/nvim/po/af.po @@ -4129,8 +4129,6 @@ msgstr "E537: 'commentstring' moet leeg wees of %s bevat" msgid "E540: Unclosed expression sequence" msgstr "E540: Onvoltooide uitdrukkingreeks" -msgid "E541: too many items" -msgstr "E541: te veel items" msgid "E542: unbalanced groups" msgstr "E542: ongebalanseerde groepe" diff --git a/src/nvim/po/da.po b/src/nvim/po/da.po index 7a75425019..23d60087f2 100644 --- a/src/nvim/po/da.po +++ b/src/nvim/po/da.po @@ -2799,9 +2799,6 @@ msgstr "ukendt vimOption" msgid "keyboard interrupt" msgstr "tastaturafbryd" -msgid "vim error" -msgstr "fejl ved vim" - msgid "cannot create buffer/window command: object is being deleted" msgstr "kan ikke oprette buffer-/vindue-kommando: objekt slettes" @@ -3123,8 +3120,8 @@ msgstr "-W <scriptud>\tSkriv alle indtastede kommandoer til filen <scriptud>" msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\tRediger krypterede filer" -msgid "-display <display>\tConnect vim to this particular X-server" -msgstr "-display <display>\tForbind vim til denne X-server" +msgid "-display <display>\tConnect Vim to this particular X-server" +msgstr "-display <display>\tForbind Vim til denne X-server" msgid "-X\t\t\tDo not connect to X server" msgstr "-X\t\t\tOpret ikke forbindelse til X-server" @@ -3203,11 +3200,11 @@ msgstr "" "\n" "Argumenter som genkendes af gvim (Athena-version):\n" -msgid "-display <display>\tRun vim on <display>" -msgstr "-display <display>\tKør vim på <display>" +msgid "-display <display>\tRun Vim on <display>" +msgstr "-display <display>\tKør Vim på <display>" -msgid "-iconic\t\tStart vim iconified" -msgstr "-iconic\t\tStart vim som ikon" +msgid "-iconic\t\tStart Vim iconified" +msgstr "-iconic\t\tStart Vim som ikon" msgid "-background <color>\tUse <color> for the background (also: -bg)" msgstr "-background <farve>\tBrug <farve> til baggrunden (også: -bg)" @@ -3253,8 +3250,8 @@ msgstr "" "\n" "Argumenter genkendt af gvim (GTK+-version):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" -msgstr "-display <display>\tKør vim på <display> (også: --display)" +msgid "-display <display>\tRun Vim on <display> (also: --display)" +msgstr "-display <display>\tKør Vim på <display> (også: --display)" msgid "--role <role>\tSet a unique role to identify the main window" msgstr "--role <rolle>\tSæt en unik rolle til at identificere hovedvinduet" @@ -4332,8 +4329,6 @@ msgstr "E538: Ingen understøttelse af mus" msgid "E540: Unclosed expression sequence" msgstr "E540: Ulukket udtryk-sekvens" -msgid "E541: too many items" -msgstr "E541: for mange punkter" msgid "E542: unbalanced groups" msgstr "E542: ubalancerede grupper" @@ -6338,8 +6333,8 @@ msgstr "E799: Ugyldigt ID: %ld (skal være større end eller lig med 1)" msgid "E801: ID already taken: %ld" msgstr "E801: ID allerede taget: %ld" -msgid "List or number required" -msgstr "Liste eller nummer kræves" +msgid "E290: List or number required" +msgstr "E290: Liste eller nummer kræves" #, c-format msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" @@ -6876,7 +6871,7 @@ msgid "list index out of range" msgstr "listeindeks udenfor område" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "intern fejl: kunne ikke hente vim-listepunkt %d" msgid "slice step cannot be zero" @@ -6887,7 +6882,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "forsøg på at tildele sekvens som er større end %d til udvidet slice" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "intern fejl: intet vim-listepunkt %d" msgid "internal error: not enough list items" @@ -6998,19 +6993,19 @@ msgstr "kunne ikke køre koden" msgid "E858: Eval did not return a valid python object" msgstr "E858: Eval returnerede ikke et gyldigt python-objekt" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: Kunne ikke konvertere returnerede python-objekt til vim-værdi" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "kan ikke konvertere %s til vim-ordbog" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "kan ikke konvertere %s til vim-liste" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "kan ikke konvertere %s til vim-struktur" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/eo.po b/src/nvim/po/eo.po index 5480e6a4d8..9b374e91ae 100644 --- a/src/nvim/po/eo.po +++ b/src/nvim/po/eo.po @@ -151,9 +151,6 @@ msgstr "[Modifita]" msgid "[Not edited]" msgstr "[Ne redaktita]" -msgid "[New file]" -msgstr "[Nova dosiero]" - msgid "[Read errors]" msgstr "[Eraroj de legado]" @@ -229,12 +226,16 @@ msgstr " linio=%ld id=%d nomo=%s" msgid "E902: Cannot connect to port" msgstr "E902: Ne eblas konekti al pordo" +msgid "E898: socket() in channel_connect()" +msgstr "E898: socket() en channel_connect()" + +#, c-format +msgid "E901: getaddrinfo() in channel_open(): %s" +msgstr "E901: getaddrinfo() en channel_open(): %s" + msgid "E901: gethostbyname() in channel_open()" msgstr "E901: gethostbyname() en channel_open()" -msgid "E898: socket() in channel_open()" -msgstr "E898: gethostbyname() en channel_open()" - msgid "E903: received command with non-string argument" msgstr "E903: ricevis komandon kun argumento, kiu ne estas ĉeno" @@ -475,24 +476,12 @@ msgstr "kongruo %d" msgid "E18: Unexpected characters in :let" msgstr "E18: Neatenditaj signoj en \":let\"" -#, c-format -msgid "E121: Undefined variable: %s" -msgstr "E121: Nedifinita variablo: %s" - msgid "E111: Missing ']'" msgstr "E111: Mankas ']'" msgid "E719: Cannot use [:] with a Dictionary" msgstr "E719: Uzo de [:] ne eblas kun Vortaro" -#, c-format -msgid "E734: Wrong variable type for %s=" -msgstr "E734: Nevalida datumtipo de variablo de %s=" - -#, c-format -msgid "E461: Illegal variable name: %s" -msgstr "E461: Nevalida nomo de variablo: %s" - msgid "E806: using Float as a String" msgstr "E806: uzo de Glitpunktnombro kiel Ĉeno" @@ -502,8 +491,8 @@ msgstr "E687: Malpli da celoj ol Listeroj" msgid "E688: More targets than List items" msgstr "E688: Pli da celoj ol Listeroj" -msgid "Double ; in list of variables" -msgstr "Duobla ; en listo de variabloj" +msgid "E452: Double ; in list of variables" +msgstr "E452: Du ; en listo de variabloj" #, c-format msgid "E738: Can't list variables for %s" @@ -691,9 +680,6 @@ msgstr "argumento de filter()" msgid "E686: Argument of %s must be a List" msgstr "E686: Argumento de %s devas esti Listo" -msgid "E928: String required" -msgstr "E928: Ĉeno bezonata" - msgid "E808: Number or Float required" msgstr "E808: Nombro aŭ Glitpunktnombro bezonata" @@ -751,9 +737,6 @@ msgstr "E726: Paŝo estas nul" msgid "E727: Start past end" msgstr "E727: Komenco preter fino" -msgid "<empty>" -msgstr "<malplena>" - msgid "E240: No connection to the X server" msgstr "E240: Neniu konekto al X-servilo" @@ -782,10 +765,6 @@ msgstr "argumento de reverse()" msgid "E258: Unable to send to client" msgstr "E258: Ne eblas sendi al kliento" -#, c-format -msgid "E927: Invalid action: '%s'" -msgstr "E927: Nevalida ago: '%s'" - msgid "sort() argument" msgstr "argumento de sort()" @@ -805,9 +784,6 @@ msgstr "(Nevalida)" msgid "E935: invalid submatch number: %d" msgstr "E935: nevalida indekso de \"submatch\": %d" -msgid "E677: Error writing temp file" -msgstr "E677: Eraro dum skribo de provizora dosiero" - msgid "E921: Invalid callback argument" msgstr "E921: Nevalida argumento de reagfunctio" @@ -1180,18 +1156,6 @@ msgid "E666: compiler not supported: %s" msgstr "E666: kompililo nesubtenata: %s" #, c-format -msgid "Searching for \"%s\" in \"%s\"" -msgstr "Serĉado de \"%s\" en \"%s\"" - -#, c-format -msgid "Searching for \"%s\"" -msgstr "Serĉado de \"%s\"" - -#, c-format -msgid "not found in '%s': \"%s\"" -msgstr "ne trovita en '%s: \"%s\"" - -#, c-format msgid "W20: Required python version 2.x not supported, ignoring file: %s" msgstr "W20: Pitono versio 2.x bezonata sed nesubtenata, ignoro de dosiero: %s" @@ -1199,61 +1163,6 @@ msgstr "W20: Pitono versio 2.x bezonata sed nesubtenata, ignoro de dosiero: %s" msgid "W21: Required python version 3.x not supported, ignoring file: %s" msgstr "W21: pitono versio 3.x bezonata sed nesubtenata, ignoro de dosiero: %s" -msgid "Source Vim script" -msgstr "Ruli Vim-skripton" - -#, c-format -msgid "Cannot source a directory: \"%s\"" -msgstr "Ne eblas ruli dosierujon: \"%s\"" - -#, c-format -msgid "could not source \"%s\"" -msgstr "ne eblis ruli \"%s\"" - -#, c-format -msgid "line %ld: could not source \"%s\"" -msgstr "linio %ld: ne eblis ruli \"%s\"" - -#, c-format -msgid "sourcing \"%s\"" -msgstr "rulas \"%s\"" - -#, c-format -msgid "line %ld: sourcing \"%s\"" -msgstr "linio %ld: rulas \"%s\"" - -#, c-format -msgid "finished sourcing %s" -msgstr "finis ruli %s" - -#, c-format -msgid "continuing in %s" -msgstr "daŭrigas en %s" - -msgid "modeline" -msgstr "reĝimlinio" - -msgid "--cmd argument" -msgstr "--cmd argumento" - -msgid "-c argument" -msgstr "-c argumento" - -msgid "environment variable" -msgstr "medivariablo" - -msgid "error handler" -msgstr "erartraktilo" - -msgid "W15: Warning: Wrong line separator, ^M may be missing" -msgstr "W15: Averto: Neĝusta disigilo de linio, ^M eble mankas" - -msgid "E167: :scriptencoding used outside of a sourced file" -msgstr "E167: \":scriptencoding\" uzita ekster rulita dosiero" - -msgid "E168: :finish used outside of a sourced file" -msgstr "E168: \":finish\" uzita ekster rulita dosiero" - #, c-format msgid "Current %slanguage: \"%s\"" msgstr "Aktuala %slingvo: \"%s\"" @@ -1268,6 +1177,10 @@ msgstr "Eniras reĝimon Ex. Tajpu \"visual\" por iri al reĝimo Normala." msgid "E501: At end-of-file" msgstr "E501: Ĉe fino-de-dosiero" +#, c-format +msgid "Executing: %s" +msgstr "Plenumado de %s" + msgid "E169: Command too recursive" msgstr "E169: Komando tro rekursia" @@ -1595,21 +1508,9 @@ msgstr "E733: Uzo de \":endwhile\" kun \":for\"" msgid "E601: :try nesting too deep" msgstr "E601: \":try\" ingita tro profunde" -msgid "E603: :catch without :try" -msgstr "E603: \":catch\" sen \":try\"" - msgid "E604: :catch after :finally" msgstr "E604: \":catch\" malantaŭ \":finally\"" -msgid "E606: :finally without :try" -msgstr "E606: \":finally\" sen \":try\"" - -msgid "E607: multiple :finally" -msgstr "E607: pluraj \":finally\"" - -msgid "E602: :endtry without :try" -msgstr "E602: \":endtry\" sen \":try\"" - msgid "E193: :endfunction not inside a function" msgstr "E193: \":endfunction\" ekster funkcio" @@ -1714,12 +1615,6 @@ msgstr "[CR mankas]" msgid "[long lines split]" msgstr "[divido de longaj linioj]" -msgid "[NOT converted]" -msgstr "[NE konvertita]" - -msgid "[converted]" -msgstr "[konvertita]" - #, c-format msgid "[CONVERSION ERROR in line %ld]" msgstr "[ERARO DE KONVERTO en linio %ld]" @@ -1885,10 +1780,10 @@ msgstr[0] "%ld linio, " msgstr[1] "%ld linioj, " #, c-format -msgid "%lld character" -msgid_plural "%lld characters" -msgstr[0] "%lld signo" -msgstr[1] "%lld signoj" +msgid "%lld byte" +msgid_plural "%lld bytes" +msgstr[0] "%lld bajto" +msgstr[1] "%lld bajtoj" msgid "[noeol]" msgstr "[sen EOL]" @@ -1896,12 +1791,6 @@ msgstr "[sen EOL]" msgid "[Incomplete last line]" msgstr "[Nekompleta lasta linio]" -msgid "WARNING: The file has been changed since reading it!!!" -msgstr "AVERTO: La dosiero estas ŝanĝita de post kiam ĝi estis legita!!!" - -msgid "Do you really want to write to it" -msgstr "Ĉu vi vere volas skribi al ĝi" - #, c-format msgid "E208: Error writing to \"%s\"" msgstr "E208: Eraro dum skribo de \"%s\"" @@ -1986,7 +1875,7 @@ msgstr "W19: Forviŝo de augroup kiu estas ankoraŭ uzata" #, c-format msgid "E215: Illegal character after *: %s" -msgstr "E215: Nevalida signo malantaŭ *: %s" +msgstr "E215: Nevalida signo post *: %s" #, c-format msgid "E216: No such event: %s" @@ -2097,10 +1986,6 @@ msgstr "E231: 'guifontwide' nevalida" msgid "E599: Value of 'imactivatekey' is invalid" msgstr "E599: Valoro de 'imactivatekey' estas nevalida" -#, c-format -msgid "E254: Cannot allocate color %s" -msgstr "E254: Ne eblas disponigi koloron %s" - msgid "No match at cursor, finding next" msgstr "Neniu kongruo ĉe kursorpozicio, trovas sekvan" @@ -2354,9 +2239,6 @@ msgstr "Stilo:" msgid "Size:" msgstr "Grando:" -msgid "E256: Hangul automata ERROR" -msgstr "E256: ERARO en aŭtomato de korea alfabeto" - msgid "E550: Missing colon" msgstr "E550: Mankas dupunkto" @@ -2774,9 +2656,6 @@ msgstr "nekonata vimOption" msgid "keyboard interrupt" msgstr "klavara interrompo" -msgid "vim error" -msgstr "eraro de Vim" - msgid "cannot create buffer/window command: object is being deleted" msgstr "ne eblas krei komandon de bufro/fenestro: objekto estas forviŝiĝanta" @@ -2843,10 +2722,10 @@ msgid "Too many edit arguments" msgstr "Tro da argumentoj de redakto" msgid "Argument missing after" -msgstr "Argumento mankas malantaŭ" +msgstr "Argumento mankas post" msgid "Garbage after option argument" -msgstr "Forĵetindaĵo malantaŭ argumento de opcio" +msgstr "Forĵetindaĵo post argumento de opcio" msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments" msgstr "Tro da argumentoj \"+komando\", \"-c komando\" aŭ \"--cmd komando\"" @@ -2951,7 +2830,7 @@ msgstr "" "Argumentoj:\n" msgid "--\t\t\tOnly file names after this" -msgstr "--\t\t\tNur dosiernomoj malantaŭ tio" +msgstr "--\t\t\tNur dosiernomoj post tio" msgid "--literal\t\tDon't expand wildcards" msgstr "--literal\t\tNe malvolvi ĵokerojn" @@ -3101,7 +2980,7 @@ msgstr "" msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\tRedakti ĉifradan dosieron" -msgid "-display <display>\tConnect vim to this particular X-server" +msgid "-display <display>\tConnect Vim to this particular X-server" msgstr "-display <ekrano>\tKonekti Vim al tiu X-servilo" msgid "-X\t\t\tDo not connect to X server" @@ -3180,11 +3059,11 @@ msgstr "" "\n" "Argumentoj agnoskitaj de gvim (versio Athena):\n" -msgid "-display <display>\tRun vim on <display>" -msgstr "-display <ekrano>\tLanĉi vim sur <ekrano>" +msgid "-display <display>\tRun Vim on <display>" +msgstr "-display <ekrano>\tLanĉi Vim sur <ekrano>" -msgid "-iconic\t\tStart vim iconified" -msgstr "-iconic\t\tLanĉi vim piktograme" +msgid "-iconic\t\tStart Vim iconified" +msgstr "-iconic\t\tLanĉi Vim piktograme" msgid "-background <color>\tUse <color> for the background (also: -bg)" msgstr "-background <koloro>\tUzi <koloro>-n por la fona koloro (ankaŭ: -bg)" @@ -3232,7 +3111,7 @@ msgstr "" "\n" "Argumentoj agnoskitaj de gvim (versio GTK+):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" +msgid "-display <display>\tRun Vim on <display> (also: --display)" msgstr "-display <ekrano>\tLanĉi Vim sur tiu <ekrano> (ankaŭ: --display)" msgid "--role <role>\tSet a unique role to identify the main window" @@ -3663,8 +3542,8 @@ msgid "E315: ml_get: invalid lnum: %ld" msgstr "E315: ml_get: nevalida lnum: %ld" #, c-format -msgid "E316: ml_get: cannot find line %ld" -msgstr "E316: ml_get: ne eblas trovi linion %ld" +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get: ne eblas trovi linion %ld en bufro %d %s" msgid "E317: pointer block id wrong 3" msgstr "E317: nevalida referenco de bloko id 3" @@ -3909,18 +3788,6 @@ msgstr "" "&Forlasi Ĉion\n" "&Rezigni" -msgid "Select Directory dialog" -msgstr "Dialogujo de dosiera elekto" - -msgid "Save File dialog" -msgstr "Dialogujo de dosiera konservo" - -msgid "Open File dialog" -msgstr "Dialogujo de dosiera malfermo" - -msgid "E338: Sorry, no file browser in console mode" -msgstr "E338: Bedaŭrinde ne estas dosierfoliumilo en konzola reĝimo" - msgid "E766: Insufficient arguments for printf()" msgstr "E766: Ne sufiĉaj argumentoj por printf()" @@ -3958,6 +3825,12 @@ msgstr " (Interrompita)" msgid "Beep!" msgstr "Bip!" +#, c-format +msgid "%ld second ago" +msgid_plural "%ld seconds ago" +msgstr[0] "antaŭ %ld sekundo" +msgstr[1] "antaŭ %ld sekundoj" + msgid "ERROR: " msgstr "ERARO: " @@ -4057,13 +3930,6 @@ msgstr "E505: %s estas nurlegebla (aldonu ! por transpasi)" msgid "E349: No identifier under cursor" msgstr "E349: Neniu identigilo sub la kursoro" -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc' estas malplena" - -# DP: ĉu Eval devas esti tradukita? -msgid "E775: Eval feature not available" -msgstr "E775: Eval eblo ne disponeblas" - msgid "Warning: terminal cannot highlight" msgstr "Averto: terminalo ne povas emfazi" @@ -4109,9 +3975,6 @@ msgid_plural "%ld lines indented " msgstr[0] "%ld linio krommarĝenita " msgstr[1] "%ld linioj krommarĝenitaj " -msgid "E748: No previously used register" -msgstr "E748: Neniu reĝistro antaŭe uzata" - msgid "cannot yank; delete anyway" msgstr "ne eblas kopii; tamen forviŝi" @@ -4121,30 +3984,6 @@ msgid_plural "%ld lines changed" msgstr[0] "%ld linio ŝanĝita" msgstr[1] "%ld linioj ŝanĝitaj" -#, c-format -msgid "freeing %ld lines" -msgstr "malokupas %ld liniojn" - -#, c-format -msgid " into \"%c" -msgstr " en \"%c" - -#, c-format -msgid "block of %ld line yanked%s" -msgid_plural "block of %ld lines yanked%s" -msgstr[0] "bloko de %ld linio kopiita%s" -msgstr[1] "bloko de %ld linioj kopiitaj%s" - -#, c-format -msgid "%ld line yanked%s" -msgid_plural "%ld lines yanked%s" -msgstr[0] "%ld linio kopiita%s" -msgstr[1] "%ld linioj kopiitaj%s" - -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: Nenio en reĝistro %s" - msgid "" "\n" "--- Registers ---" @@ -4166,12 +4005,6 @@ msgstr "" msgid "E574: Unknown register type %d" msgstr "E574: Nekonata tipo de reĝistro %d" -msgid "" -"E883: search pattern and expression register may not contain two or more " -"lines" -msgstr "" -"E883: serĉa ŝablono kaj esprima reĝistro ne povas enhavi du aŭ pliajn liniojn" - #, c-format msgid "%ld Cols; " msgstr "%ld Kolumnoj; " @@ -4221,11 +4054,14 @@ msgid "E846: Key code not set" msgstr "E846: Klavkodo ne agordita" msgid "E521: Number required after =" -msgstr "E521: Nombro bezonata malantaŭ =" +msgstr "E521: Nombro bezonata post =" msgid "E522: Not found in termcap" msgstr "E522: Netrovita en termcap" +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: 24-bitaj koloroj ne estas subtenataj en tiu sistemo" + #, c-format msgid "E539: Illegal character <%s>" msgstr "E539: Nevalida signo <%s>" @@ -4263,7 +4099,7 @@ msgstr "E525: Ĉeno de nula longo" #, c-format msgid "E526: Missing number after <%s>" -msgstr "E526: Mankas nombro malantaŭ <%s>" +msgstr "E526: Mankas nombro post <%s>" msgid "E527: Missing comma" msgstr "E527: Mankas komo" @@ -4271,8 +4107,8 @@ msgstr "E527: Mankas komo" msgid "E528: Must specify a ' value" msgstr "E528: Devas specifi ' valoron" -msgid "E595: contains unprintable or wide character" -msgstr "E595: enhavas nepreseblan aŭ plurĉellarĝan signon" +msgid "E595: 'showbreak' contains unprintable or wide character" +msgstr "E595: 'showbreak' enhavas nepreseblan aŭ plurĉellarĝan signon" msgid "E596: Invalid font(s)" msgstr "E596: Nevalida(j) tiparo(j)" @@ -4291,7 +4127,7 @@ msgstr "E534: Nevalida larĝa tiparo" #, c-format msgid "E535: Illegal character after <%c>" -msgstr "E535: Nevalida signo malantaŭ <%c>" +msgstr "E535: Nevalida signo post <%c>" msgid "E536: comma required" msgstr "E536: komo bezonata" @@ -4303,71 +4139,6 @@ msgstr "E537: 'commentstring' devas esti malplena aŭ enhavi %s" msgid "E538: No mouse support" msgstr "E538: Neniu muso subtenata" -msgid "E540: Unclosed expression sequence" -msgstr "E540: '}' mankas" - -msgid "E541: too many items" -msgstr "E541: tro da elementoj" - -msgid "E542: unbalanced groups" -msgstr "E542: misekvilibraj grupoj" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "E946: Ne eblas igi modifebla terminalon kun aktiva tasko" - -msgid "E590: A preview window already exists" -msgstr "E590: Antaŭvida fenestro jam ekzistas" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "W17: La araba bezonas UTF-8, tajpu \":set encoding=utf-8\"" - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: Bezonas almenaŭ %d liniojn" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: Bezonas almenaŭ %d kolumnojn" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: Nekonata opcio: %s" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: Nombro bezonata: &%s = '%s'" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- Kodoj de terminalo ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- Mallokaj opcioj ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- Valoroj de lokaj opcioj ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- Opcioj ---" - -msgid "E356: get_varp ERROR" -msgstr "E356: ERARO get_varp" - #, c-format msgid "E357: 'langmap': Matching character missing for %s" msgstr "E357: 'langmap': Kongrua signo mankas por %s" @@ -4387,7 +4158,7 @@ msgstr "Bezonas version 2.04 de Amigados aŭ pli novan\n" #, c-format msgid "Need %s version %ld\n" -msgstr "Bezonas %s-on versio %ld\n" +msgstr "Bezonas %s-on de versio %ld\n" msgid "Cannot open NIL:\n" msgstr "Ne eblas malfermi NIL:\n" @@ -4690,7 +4461,7 @@ msgstr "E369: nevalida ano en %s%%[]" #, c-format msgid "E769: Missing ] after %s[" -msgstr "E769: Mankas ] malantaŭ %s[" +msgstr "E769: Mankas ] post %s[" msgid "E944: Reverse range in character class" msgstr "E944: Inversa amplekso en klaso de signoj" @@ -4719,7 +4490,7 @@ msgstr "E67: \\z1 kaj aliaj estas nepermeseblaj tie" #, c-format msgid "E69: Missing ] after %s%%[" -msgstr "E69: Mankas ] malantaŭ %s%%[" +msgstr "E69: Mankas ] post %s%%[" #, c-format msgid "E70: Empty %s%%[]" @@ -4728,25 +4499,48 @@ msgstr "E70: Malplena %s%%[]" msgid "E956: Cannot use pattern recursively" msgstr "E956: Ne eblas uzi ŝablonon rekursie" +#, c-format +msgid "E554: Syntax error in %s{...}" +msgstr "E554: Sintaksa eraro en %s{...}" + +#, c-format +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA-regulesprimo) ne eblas ripeti %s" + +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: \\%#= povas nur esti sekvita de 0, 1, aŭ 2. La aŭtomata motoro de " +"regulesprimo estos uzata " + +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Ŝanĝas al malavanca motoro de regulesprimo por ŝablono: " + msgid "E65: Illegal back reference" msgstr "E65: Nevalida retro-referenco" -msgid "E339: Pattern too long" -msgstr "E339: Ŝablono tro longa" +msgid "E63: invalid use of \\_" +msgstr "E63: nevalida uzo de \\_" -msgid "E50: Too many \\z(" -msgstr "E50: Tro da \\z(" +#, c-format +msgid "E64: %s%c follows nothing" +msgstr "E64: %s%c sekvas nenion" + +msgid "E68: Invalid character after \\z" +msgstr "E68: Nevalida signo post \\z" #, c-format -msgid "E51: Too many %s(" -msgstr "E51: Tro da %s(" +msgid "E678: Invalid character after %s%%[dxouU]" +msgstr "E678: Nevalida signo post %s%%[dxouU]" -msgid "E52: Unmatched \\z(" -msgstr "E52: Neekvilibra \\z(" +#, c-format +msgid "E71: Invalid character after %s%%" +msgstr "E71: Nevalida signo post %s%%" #, c-format msgid "E59: invalid character after %s@" -msgstr "E59: nevalida signo malantaŭ %s@" +msgstr "E59: nevalida signo post %s@" #, c-format msgid "E60: Too many complex %s{...}s" @@ -4760,45 +4554,22 @@ msgstr "E61: Ingita %s*" msgid "E62: Nested %s%c" msgstr "E62: Ingita %s%c" -msgid "E63: invalid use of \\_" -msgstr "E63: nevalida uzo de \\_" - -#, c-format -msgid "E64: %s%c follows nothing" -msgstr "E64: %s%c sekvas nenion" - -msgid "E68: Invalid character after \\z" -msgstr "E68: Nevalida signo malantaŭ \\z" +msgid "E50: Too many \\z(" +msgstr "E50: Tro da \\z(" #, c-format -msgid "E678: Invalid character after %s%%[dxouU]" -msgstr "E678: Nevalida signo malantaŭ %s%%[dxouU]" +msgid "E51: Too many %s(" +msgstr "E51: Tro da %s(" -#, c-format -msgid "E71: Invalid character after %s%%" -msgstr "E71: Nevalida signo malantaŭ %s%%" +msgid "E52: Unmatched \\z(" +msgstr "E52: Neekvilibra \\z(" -#, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: Sintaksa eraro en %s{...}" +msgid "E339: Pattern too long" +msgstr "E339: Ŝablono tro longa" msgid "External submatches:\n" msgstr "Eksteraj subkongruoj:\n" -#, c-format -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (NFA-regulesprimo) ne eblas ripeti %s" - -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " -"used " -msgstr "" -"E864: \\%#= povas nur esti sekvita de 0, 1, aŭ 2. La aŭtomata motoro de " -"regulesprimo estos uzata " - -msgid "Switching to backtracking RE engine for pattern: " -msgstr "Ŝanĝas al malavanca motoro de regulesprimo por ŝablono: " - msgid "E865: (NFA) Regexp end encountered prematurely" msgstr "E865: (NFA) Trovis finon de regulesprimo tro frue" @@ -4863,6 +4634,13 @@ msgstr "E876: (NFA-regulesprimo) ne sufiĉa spaco por enmemorigi la tutan NFA " msgid "E878: (NFA) Could not allocate memory for branch traversal!" msgstr "E878: (NFA) Ne povis asigni memoron por traigi branĉojn!" +msgid "" +"\n" +"Type Name Content" +msgstr "" +"\n" +"Tipo Nomo Enhavo" + msgid " VREPLACE" msgstr " V-ANSTATAŬIGO" @@ -4914,6 +4692,16 @@ msgstr " APARTIGITA BLOKO" msgid "recording" msgstr "registrado" +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion uzita ekster rulita dosiero" + +msgid "E1040: Cannot use :scriptversion after :vim9script" +msgstr "E1040: Ne eblas uzi :scriptversion post :vim9script" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: scriptversion ne subtenata: %d" + #, c-format msgid "E383: Invalid search string: %s" msgstr "E383: Nevalida serĉenda ĉeno: %s" @@ -4927,7 +4715,7 @@ msgid "E385: search hit BOTTOM without match for: %s" msgstr "E385: serĉo atingis SUBON sen trovi: %s" msgid "E386: Expected '?' or '/' after ';'" -msgstr "E386: Atendis '?' aŭ '/' malantaŭ ';'" +msgstr "E386: Atendis '?' aŭ '/' post ';'" msgid " (includes previously listed match)" msgstr " (enhavas antaŭe listigitajn kongruojn)" @@ -5001,21 +4789,6 @@ msgstr "E797: Aŭtokomando SpellFileMissing forviŝis bufron" msgid "Warning: region %s not supported" msgstr "Averto: regiono %s ne subtenata" -msgid "Sorry, no suggestions" -msgstr "Bedaŭrinde ne estas sugestoj" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "Bedaŭrinde estas nur %ld sugestoj" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "Anstataŭigi \"%.*s\" per:" - -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - msgid "E752: No previous spell replacement" msgstr "E752: Neniu antaŭa literuma anstataŭigo" @@ -5346,6 +5119,21 @@ msgstr "E763: Signoj de vorto malsamas tra literumaj dosieroj" msgid "E783: duplicate char in MAP entry" msgstr "E783: ripetita signo en rikordo MAP" +msgid "Sorry, no suggestions" +msgstr "Bedaŭrinde ne estas sugestoj" + +#, c-format +msgid "Sorry, only %ld suggestions" +msgstr "Bedaŭrinde estas nur %ld sugestoj" + +#, c-format +msgid "Change \"%.*s\" to:" +msgstr "Anstataŭigi \"%.*s\" per:" + +#, c-format +msgid " < \"%.*s\"" +msgstr " < \"%.*s\"" + msgid "No Syntax items defined for this buffer" msgstr "Neniu sintaksa elemento difinita por tiu bufro" @@ -5462,7 +5250,7 @@ msgstr "E789: Mankas ']': %s" #, c-format msgid "E890: trailing char after ']': %s]%s" -msgstr "E890: vosta signo malantaŭ ']': %s]%s" +msgstr "E890: vosta signo post ']': %s]%s" #, c-format msgid "E398: Missing '=': %s" @@ -5484,7 +5272,7 @@ msgstr "E401: Disigilo de ŝablono netrovita: %s" #, c-format msgid "E402: Garbage after pattern: %s" -msgstr "E402: Forĵetindaĵo malantaŭ ŝablono: %s" +msgstr "E402: Forĵetindaĵo post ŝablono: %s" msgid "E403: syntax sync: line continuations pattern specified twice" msgstr "E403: sintaksa sinkronigo: ŝablono de linia daŭrigo specifita dufoje" @@ -5562,6 +5350,9 @@ msgstr "E419: Nekonata malfona koloro" msgid "E420: BG color unknown" msgstr "E420: Nekonata fona koloro" +msgid "E453: UL color unknown" +msgstr "E453: Nekonata koloro de UL" + #, c-format msgid "E421: Color name or number not recognized: %s" msgstr "E421: Kolora nomo aŭ nombro nerekonita: %s" @@ -5645,9 +5436,6 @@ msgstr "Serĉado de dosiero de etikedoj %s" msgid "E430: Tag file path truncated for %s\n" msgstr "E430: Vojo de etikeda dosiero trunkita por %s\n" -msgid "Ignoring long line in tags file" -msgstr "Ignoro de longa linio en etikeda dosiero" - #, c-format msgid "E431: Format error in tags file \"%s\"" msgstr "E431: Eraro de formato en etikeda dosiero \"%s\"" @@ -5663,6 +5451,9 @@ msgstr "E432: Etikeda dosiero ne estas ordigita: %s" msgid "E433: No tags file" msgstr "E433: Neniu etikeda dosiero" +msgid "Ignoring long line in tags file" +msgstr "Ignoro de longa linio en etikeda dosiero" + msgid "E434: Can't find tag pattern" msgstr "E434: Ne eblas trovi ŝablonon de etikedo" @@ -5851,12 +5642,6 @@ msgstr "Nenio por malfari" msgid "number changes when saved" msgstr "numero ŝanĝoj tempo konservita" -#, c-format -msgid "%ld second ago" -msgid_plural "%ld seconds ago" -msgstr[0] "antaŭ %ld sekundo" -msgstr[1] "antaŭ %ld sekundoj" - msgid "E790: undojoin is not allowed after undo" msgstr "E790: undojoin estas nepermesebla post malfaro" @@ -5919,16 +5704,8 @@ msgid "E699: Too many arguments" msgstr "E699: Tro da argumentoj" #, c-format -msgid "E117: Unknown function: %s" -msgstr "E117: Nekonata funkcio: %s" - -#, c-format -msgid "E933: Function was deleted: %s" -msgstr "E933: funkcio estis forviŝita: %s" - -#, c-format -msgid "E119: Not enough arguments for function: %s" -msgstr "E119: Ne sufiĉe da argumentoj por funkcio: %s" +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: Ne eblas uzi funkcion kiel metodo: %s" #, c-format msgid "E120: Using <SID> not in a script context: %s" @@ -5949,6 +5726,9 @@ msgstr "E128: Nomo de funkcio devas eki per majusklo aŭ per \"s:\": %s" msgid "E884: Function name cannot contain a colon: %s" msgstr "E884: Nomo de funkcio ne povas enhavi dupunkton: %s" +msgid "E454: function list was modified" +msgstr "E454: listo de funkcioj ŝanĝiĝis" + #, c-format msgid "E123: Undefined function: %s" msgstr "E123: Nedifinita funkcio: %s" @@ -5961,15 +5741,29 @@ msgid "E862: Cannot use g: here" msgstr "E862: Ne eblas uzi g: ĉi tie" #, c-format +msgid "E1056: expected a type: %s" +msgstr "E1056: atendis tipon: %s" + +#, c-format msgid "E932: Closure function should not be at top level: %s" msgstr "E932: Fermo-funkcio devus esti je la plej alta nivelo: %s" +msgid "E1057: Missing :enddef" +msgstr "E1057: Mankas :enddef" + msgid "E126: Missing :endfunction" msgstr "E126: Mankas \":endfunction\"" #, c-format +msgid "W1001: Text found after :enddef: %s" +msgstr "W1001: Teksto trovita post :enddef: %s" + +#, c-format msgid "W22: Text found after :endfunction: %s" -msgstr "W22: Teksto trovita malantaŭ :endfunction: %s" +msgstr "W22: Teksto trovita post :endfunction: %s" + +msgid "E1058: function nesting too deep" +msgstr "E1058: ingado de funkcio tro profunda" #, c-format msgid "E707: Function name conflicts with variable: %s" @@ -5987,6 +5781,10 @@ msgstr "E746: Nomo de funkcio ne kongruas kun dosiernomo de skripto: %s" msgid "E131: Cannot delete function %s: It is in use" msgstr "E131: Ne eblas forviŝi funkcion %s: Estas nuntempe uzata" +#, c-format +msgid "E1084: Cannot delete Vim9 script function %s" +msgstr "E1084: Ne eblas forviŝi funkcion de Vim9-skripto: %s" + msgid "E133: :return not inside a function" msgstr "E133: \":return\" ekster funkcio" @@ -6140,6 +5938,9 @@ msgstr "kun grafika interfaco X11-neXtaw." msgid "with X11-Athena GUI." msgstr "kun grafika interfaco X11-Athena." +msgid "with Haiku GUI." +msgstr "kun grafika interfaco Haiku." + msgid "with Photon GUI." msgstr "kun grafika interfaco Photon." @@ -6452,9 +6253,6 @@ msgstr "E685: Interna eraro: %s" msgid "Interrupted" msgstr "Interrompita" -msgid "E14: Invalid address" -msgstr "E14: Nevalida adreso" - msgid "E474: Invalid argument" msgstr "E474: Nevalida argumento" @@ -6476,6 +6274,9 @@ msgstr "E476: Nevalida komando" msgid "E17: \"%s\" is a directory" msgstr "E17: \"%s\" estas dosierujo" +msgid "E756: Spell checking is not possible" +msgstr "E756: malpermesata literumilo" + #, c-format msgid "E364: Library call failed for \"%s()\"" msgstr "E364: Alvoko al biblioteko malsukcesis por \"%s()\"" @@ -6618,6 +6419,9 @@ msgstr "E44: Difekta programo de regulesprimo" msgid "E45: 'readonly' option is set (add ! to override)" msgstr "E45: La opcio 'readonly' estas ŝaltita '(aldonu ! por transpasi)" +msgid "E995: Cannot modify existing variable" +msgstr "E995: Ne eblas ŝanĝi ekzistantan variablon" + #, c-format msgid "E46: Cannot change read-only variable \"%s\"" msgstr "E46: Ne eblas ŝanĝi nurlegeblan variablon \"%s\"" @@ -6641,6 +6445,14 @@ msgid "E118: Too many arguments for function: %s" msgstr "E118: Tro da argumentoj por funkcio: %s" #, c-format +msgid "E119: Not enough arguments for function: %s" +msgstr "E119: Ne sufiĉe da argumentoj por funkcio: %s" + +#, c-format +msgid "E933: Function was deleted: %s" +msgstr "E933: funkcio estis forviŝita: %s" + +#, c-format msgid "E716: Key not present in Dictionary: %s" msgstr "E716: Ŝlosilo malekzistas en Vortaro: %s" @@ -6854,7 +6666,7 @@ msgid "list index out of range" msgstr "indekso de listo ekster limoj" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "interna eraro: obteno de vim-a listero %d malsukcesis" msgid "slice step cannot be zero" @@ -6865,7 +6677,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "provis valorizi sekvencon kun pli ol %d eroj en etendita sekco" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "interna eraro: neniu vim-a listero %d" msgid "internal error: not enough list items" @@ -6974,19 +6786,19 @@ msgstr "malsukcesis ruli la kodon" msgid "E858: Eval did not return a valid python object" msgstr "E858: Eval ne revenis kun valida python-objekto" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: Konverto de revena python-objekto al vim-valoro malsukcesis" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "ne povis konverti %s al vim-vortaro" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "ne povis konverti %s al vim-listo" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "ne povis konverti %s al vim-strukturo" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/fi.po b/src/nvim/po/fi.po index 5986a57488..77d5f7f826 100644 --- a/src/nvim/po/fi.po +++ b/src/nvim/po/fi.po @@ -4198,8 +4198,6 @@ msgstr "E537: commentstringin pitää olla tyhjä tai sisältää %s" msgid "E540: Unclosed expression sequence" msgstr "E540: Sulkematon lausekesarja" -msgid "E541: too many items" -msgstr "E541: liikaa kohteita" msgid "E542: unbalanced groups" msgstr "E542: epätasapainoisia ryhmiä" diff --git a/src/nvim/po/fr.po b/src/nvim/po/fr.po index 5f1ca2fec5..6df7741f1a 100644 --- a/src/nvim/po/fr.po +++ b/src/nvim/po/fr.po @@ -1,4 +1,3 @@ - # French Translation for Vim # # Do ":help uganda" in Vim to read copying and usage conditions. @@ -62,8 +61,9 @@ msgstr "" msgid "E931: Buffer cannot be registered" msgstr "E931: Le tampon ne peut pas tre enregistr" -msgid "E937: Attempt to delete a buffer that is in use" -msgstr "E937: Tentative de suppression d'un tampon en cours d'utilisation" +#, c-format +msgid "E937: Attempt to delete a buffer that is in use: %s" +msgstr "E937: Tentative de suppression d'un tampon en cours d'utilisation : %s" msgid "E515: No buffers were unloaded" msgstr "E515: Aucun tampon n'a t dcharg" @@ -159,9 +159,6 @@ msgstr "[Modifi]" msgid "[Not edited]" msgstr "[Non dit]" -msgid "[New file]" -msgstr "[Nouveau fichier]" - msgid "[Read errors]" msgstr "[Erreurs de lecture]" @@ -214,13 +211,6 @@ msgstr "Bas" msgid "Top" msgstr "Haut" -msgid "" -"\n" -"# Buffer list:\n" -msgstr "" -"\n" -"# Liste des tampons :\n" - msgid "E382: Cannot write, 'buftype' option is set" msgstr "E382: criture impossible, l'option 'buftype' est active" @@ -248,12 +238,16 @@ msgstr " ligne=%ld id=%d nom=%s" msgid "E902: Cannot connect to port" msgstr "E902: Impossible de se connecter au port" +msgid "E898: socket() in channel_connect()" +msgstr "E898: socket() dans channel_connect()" + +#, c-format +msgid "E901: getaddrinfo() in channel_open(): %s" +msgstr "E901: getaddrinfo() dans channel_open(): %s" + msgid "E901: gethostbyname() in channel_open()" msgstr "E901: gethostbyname() dans channel_open()" -msgid "E898: socket() in channel_open()" -msgstr "E898: socket() dans channel_open()" - msgid "E903: received command with non-string argument" msgstr "E903: commande reue avec un argument qui n'est pas une chane" @@ -267,6 +261,9 @@ msgstr "E904: le troisime argument de \"call\" doit tre une liste" msgid "E905: received unknown command: %s" msgstr "E905: commande inconnue reue : %s" +msgid "E906: not an open channel" +msgstr "E906: pas un canal ouvert" + #, c-format msgid "E630: %s(): write while not connected" msgstr "E630: %s() : criture sans tre connect" @@ -284,9 +281,6 @@ msgstr "" "E912: Impossible d'utiliser ch_evalexpr()/ch_sendexpr() avec un canal brut " "ou nl" -msgid "E906: not an open channel" -msgstr "E906: pas un canal ouvert" - msgid "E920: _io file requires _name to be set" msgstr "E920: fichier _io ncessite _name" @@ -297,6 +291,18 @@ msgstr "E915: tampon in_io ncessite in_buf ou in_name " msgid "E918: buffer must be loaded: %s" msgstr "E918: le tampon doit tre charg : %s" +# DB - TODO : Pas compris le message ni comment le dclencher malgr une visite +# dans le code. +msgid "tagname" +msgstr "nom du marqueur" + +# DB - TODO : Idem prcdent. +msgid " kind file\n" +msgstr " type de fichier\n" + +msgid "'history' option is zero" +msgstr "l'option 'history' vaut zro" + msgid "E821: File is encrypted with unknown method" msgstr "E821: Le fichier est chiffr avec une mthode inconnue" @@ -316,21 +322,54 @@ msgstr "Les cls ne correspondent pas !" msgid "[crypted]" msgstr "[chiffr]" +# AB - La version franaise de la premire phrase ne me satisfait pas. +# DB - Suggestion. +msgid "Entering Debug mode. Type \"cont\" to continue." +msgstr "Mode dbogage activ. Tapez \"cont\" pour continuer." + #, c-format -msgid "E720: Missing colon in Dictionary: %s" -msgstr "E720: Il manque ':' dans le Dictionnaire %s" +msgid "Oldval = \"%s\"" +msgstr "Ancienneval = \"%s\"" #, c-format -msgid "E721: Duplicate key in Dictionary: \"%s\"" -msgstr "E721: Cl duplique dans le Dictionnaire : %s" +msgid "Newval = \"%s\"" +msgstr "Nouvelleval = \"%s\"" #, c-format -msgid "E722: Missing comma in Dictionary: %s" -msgstr "E722: Il manque une virgule dans le Dictionnaire : %s" +msgid "line %ld: %s" +msgstr "ligne %ld : %s" #, c-format -msgid "E723: Missing end of Dictionary '}': %s" -msgstr "E723: Il manque '}' la fin du Dictionnaire : %s" +msgid "cmd: %s" +msgstr "cmde : %s" + +msgid "frame is zero" +msgstr "le cadre de pile est zro" + +#, c-format +msgid "frame at highest level: %d" +msgstr "cadre de pile au niveau le plus haut : %d" + +#, c-format +msgid "Breakpoint in \"%s%s\" line %ld" +msgstr "Point d'arrt dans %s%s ligne %ld" + +#, c-format +msgid "E161: Breakpoint not found: %s" +msgstr "E161: Le point d'arrt %s est introuvable" + +msgid "No breakpoints defined" +msgstr "Aucun point d'arrt n'est dfini" + +# AB - Le deuxime %s est remplac par "func" ou "file" sans que l'on puisse +# traduire ces mots. +#, c-format +msgid "%3d %s %s line %ld" +msgstr "%3d %s %s ligne %ld" + +#, c-format +msgid "%3d expr %s" +msgstr "%3d expr %s" msgid "extend() argument" msgstr "argument de extend()" @@ -399,157 +438,15 @@ msgstr "E105: :loadkeymap ne peut tre utilis que dans un script Vim" msgid "E791: Empty keymap entry" msgstr "E791: Entre du descripteur de clavier (keymap) vide" -# AB - Remplacer "compltion" par "compltement" ? Voir l'thymologie -# d'"accrtion". -msgid " Keyword completion (^N^P)" -msgstr " Compltement de mot-cl (^N^P)" - -# DB - todo : Faut-il une majuscule "mode" ? -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)" - -msgid " Whole line completion (^L^N^P)" -msgstr " Compltement de ligne entire (^L^N^P)" - -msgid " File name completion (^F^N^P)" -msgstr " Compltement de nom de fichier (^F^N^P)" - -msgid " Tag completion (^]^N^P)" -msgstr " Compltement de marqueur (^]^N^P)" - -# AB - J'ai d avoir une bonne raison de faire une version franaise aussi -# diffrente de la version anglaise. Il me faut la retrouver. -# DB - TODO -msgid " Path pattern completion (^N^P)" -msgstr " Compltement global de mot-cl (^N^P)" - -msgid " Definition completion (^D^N^P)" -msgstr " Compltement de dfinition (^D^N^P)" - -# AB - Trouver une meilleure formulation que "selon le". -# DB : proposition : "avec" -msgid " Dictionary completion (^K^N^P)" -msgstr " Compltement avec le dictionnaire (^K^N^P)" - -# AB - Trouver une meilleure formulation que "selon le". -msgid " Thesaurus completion (^T^N^P)" -msgstr " Compltement avec le thsaurus (^T^N^P)" - -# AB - La version franaise est meilleure que la version anglaise. -# DB : Suggestion. -msgid " Command-line completion (^V^N^P)" -msgstr " Compltement de ligne de commande (^V^N^P)" - -msgid " User defined completion (^U^N^P)" -msgstr " Compltement dfini par l'utilisateur (^U^N^P)" - -# DB : On doit pouvoir trouver nettement mieux que a. -msgid " Omni completion (^O^N^P)" -msgstr " Compltement selon le type de fichier (Omni) (^O^N^P)" - -msgid " Spelling suggestion (s^N^P)" -msgstr " Suggestion d'orthographe (s^N^P)" - -msgid " Keyword Local completion (^N^P)" -msgstr " Compltement local de mot-cl (^N/^P)" - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -# Il faut viter de le faire trop long. Je pense que la version franaise -# est suffisamment comprhensible dans le contexte dans lequel elle est -# affiche. -msgid "Hit end of paragraph" -msgstr "Fin du paragraphe" - -msgid "E839: Completion function changed window" -msgstr "E839: La fonction de compltement a chang la fentre" - -msgid "E840: Completion function deleted text" -msgstr "E840: La fonction de compltement a effac du texte" - -msgid "'dictionary' option is empty" -msgstr "L'option 'dictionary' est vide" - -msgid "'thesaurus' option is empty" -msgstr "L'option 'thesaurus' est vide" - -#, c-format -msgid "Scanning dictionary: %s" -msgstr "Examen du dictionnaire : %s" - -msgid " (insert) Scroll (^E/^Y)" -msgstr " (insertion) Dfilement (^E/^Y)" - -msgid " (replace) Scroll (^E/^Y)" -msgstr " (remplacement) Dfilement (^E/^Y)" - -#, c-format -msgid "Scanning: %s" -msgstr "Examen : %s" - -msgid "Scanning tags." -msgstr "Examen des marqueurs." - -msgid "match in file" -msgstr "correspondance dans le fichier" - -# AB - Cette chane de caractres est ajoute en dbut de ligne lorsqu'une -# opration de compltion est rpte (typiquement avec CTRL-X CTRL-N). -# Que ce soit en anglais ou en franais, il y a un problme de majuscules. -# Bien qu'insatisfaisante, cette traduction semble optimale. -msgid " Adding" -msgstr " Ajout" - -msgid "-- Searching..." -msgstr "-- Recherche en cours..." - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -# AB - Faut-il utiliser "origine" ou "originel" au lieu d'"original" ? -# DB : Suggestion. -msgid "Back at original" -msgstr "Retour au point de dpart" - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -msgid "Word from other line" -msgstr "Mot d'une autre ligne" - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -msgid "The only match" -msgstr "La seule correspondance" - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -# AB - Faut-il remplacer "sur" par "de" ? -# DB : Pour moi, non. -#, c-format -msgid "match %d of %d" -msgstr "Correspondance %d sur %d" - -# AB - Ce texte s'ajoute la fin d'un des messages de compltion ci-dessus. -# DB - todo : la VO n'a pas de majuscule. -#, c-format -msgid "match %d" -msgstr "Correspondance %d" - msgid "E18: Unexpected characters in :let" msgstr "E18: Caractres inattendus avant '='" -#, c-format -msgid "E121: Undefined variable: %s" -msgstr "E121: Variable non dfinie : %s" - msgid "E111: Missing ']'" msgstr "E111: ']' manquant" msgid "E719: Cannot use [:] with a Dictionary" msgstr "E719: Utilisation de [:] impossible avec un Dictionnaire" -#, c-format -msgid "E734: Wrong variable type for %s=" -msgstr "E734: Type de variable erron avec %s=" - -#, c-format -msgid "E461: Illegal variable name: %s" -msgstr "E461: Nom de variable invalide : %s" - msgid "E806: using Float as a String" msgstr "E806: Utilisation d'un Flottant comme une Chane" @@ -605,15 +502,9 @@ msgstr "E109: Il manque ':' aprs '?'" msgid "E804: Cannot use '%' with Float" msgstr "E804: Impossible d'utiliser '%' avec un Flottant" -msgid "E110: Missing ')'" -msgstr "E110: ')' manquant" - msgid "E695: Cannot index a Funcref" msgstr "E695: Impossible d'indexer une Funcref" -msgid "E909: Cannot index a special variable" -msgstr "E909: Impossible d'indexer une variable spciale" - # AB - La version franaise est meilleure que la version anglaise. #, c-format msgid "E112: Option name missing: %s" @@ -719,15 +610,6 @@ msgstr "E742: Impossible de modifier la valeur de %s" msgid "E698: variable nested too deep for making a copy" msgstr "E698: variable trop imbrique pour en faire une copie" -# AB - La version franaise est capitalise pour tre en accord avec les autres -# commentaires enregistrs dans le fichier viminfo. -msgid "" -"\n" -"# global variables:\n" -msgstr "" -"\n" -"# Variables globales:\n" - # DB - Plus prcis ("la dernire fois") ? msgid "" "\n" @@ -751,40 +633,19 @@ msgstr "E736: Opration invalide avec les Dictionnaires" msgid "E694: Invalid operation for Funcrefs" msgstr "E694: Opration invalide avec les Funcrefs" -msgid "map() argument" -msgstr "argument de map()" - -msgid "filter() argument" -msgstr "argument de filter()" - #, c-format msgid "E686: Argument of %s must be a List" msgstr "E686: L'argument de %s doit tre une Liste" -msgid "E928: String required" -msgstr "E928: Chane requis" - msgid "E808: Number or Float required" msgstr "E808: Nombre ou Flottant requis" -msgid "add() argument" -msgstr "argument de add()" - -msgid "E785: complete() can only be used in Insert mode" -msgstr "E785: complete() n'est utilisable que dans le mode Insertion" - # AB - Texte par dfaut du bouton de la bote de dialogue affiche par la # fonction confirm(). msgid "&Ok" msgstr "&Ok" #, c-format -msgid "+-%s%3ld line: " -msgid_plural "+-%s%3ld lines: " -msgstr[0] "+-%s%3ld ligne : " -msgstr[1] "+-%s%3ld lignes : " - -#, c-format msgid "E700: Unknown function: %s" msgstr "E700: Fonction inconnue : %s" @@ -807,15 +668,9 @@ msgstr "" msgid "called inputrestore() more often than inputsave()" msgstr "inputrestore() a t appel plus de fois qu'inputsave()" -msgid "insert() argument" -msgstr "argument de insert()" - msgid "E786: Range not allowed" msgstr "E786: Les plages ne sont pas autorises" -msgid "E916: not a valid job" -msgstr "E916: tche invalide" - msgid "E701: Invalid type for len()" msgstr "E701: Type invalide avec len()" @@ -832,9 +687,6 @@ msgstr "E726: Le pas est nul" msgid "E727: Start past end" msgstr "E727: Dbut au-del de la fin" -msgid "<empty>" -msgstr "<vide>" - msgid "E240: No connection to the X server" msgstr "E240: Pas de connexion au serveur X" @@ -852,35 +704,10 @@ msgstr "E941: serveur dj dmarr" msgid "E942: +clientserver feature not available" msgstr "E942: La fonctionnalit +clientserver n'est pas disponible" -msgid "remove() argument" -msgstr "argument de remove()" - -msgid "E655: Too many symbolic links (cycle?)" -msgstr "E655: Trop de liens symboliques (cycle ?)" - -msgid "reverse() argument" -msgstr "argument de reverse()" - # AB - La version franaise est meilleure que la version anglaise. msgid "E258: Unable to send to client" msgstr "E258: La rponse n'a pas pu tre envoye au client" -#, c-format -msgid "E927: Invalid action: '%s'" -msgstr "E927: Action invalide : %s " - -msgid "sort() argument" -msgstr "argument de sort()" - -msgid "uniq() argument" -msgstr "argument de uniq()" - -msgid "E702: Sort compare function failed" -msgstr "E702: La fonction de comparaison de sort() a chou" - -msgid "E882: Uniq compare function failed" -msgstr "E882: La fonction de comparaison de uniq() a chou" - msgid "(Invalid)" msgstr "(Invalide)" @@ -888,9 +715,6 @@ msgstr "(Invalide)" msgid "E935: invalid submatch number: %d" msgstr "E935: numro de submatch invalide : %d" -msgid "E677: Error writing temp file" -msgstr "E677: Erreur lors de l'criture du fichier temporaire" - msgid "E921: Invalid callback argument" msgstr "E921: Argument de callback invalide" @@ -947,98 +771,6 @@ msgstr "" msgid "[No write since last change]\n" msgstr "[Attention : tout n'est pas enregistr]\n" -# AB - Le numro et le message d'erreur (%s ci-dessous) et le "numro" de ligne -# sont des chanes de caractres dont le contenu est la discrtion de -# l'appelant de la fonction viminfo_error(). -#, c-format -msgid "%sviminfo: %s in line: " -msgstr "%sviminfo : %s la ligne " - -# AB - La version franaise est meilleure que la version anglaise. -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" - -# AB - Ce texte fait partie d'un message de dbogage. -# DB - ... dont les valeurs possibles sont les messages -# qui suivent. -#, 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 dbogage. -# DB - Voir ci-dessus. -msgid " info" -msgstr " info" - -# AB - Ce texte fait partie d'un message de dbogage. -# DB - Voir ci-dessus. -msgid " marks" -msgstr " marques" - -msgid " oldfiles" -msgstr " vieux fichiers" - -# AB - Ce texte fait partie d'un message de dbogage. -# DB - Voir ci-dessus. -msgid " FAILED" -msgstr " CHEC" - -# AB - J'espre que la plupart des utilisateurs aura l'ide d'aller vrifier -# ses droits d'accs. -# AB - Le mot "viminfo" a t retir pour que le message ne dpasse pas 80 -# caractres dans le cas courant o %s = /home/12345678/.viminfo -#, c-format -msgid "E137: Viminfo file is not writable: %s" -msgstr "E137: L'criture dans le fichier %s est interdite" - -#, c-format -msgid "E929: Too many viminfo temp files, like %s!" -msgstr "E929: Trop de fichiers temporaires viminfo, comme %s!" - -# AB - Le point d'exclamation est superflu. -# AB - Le mot "viminfo" a t retir pour que le message ne dpasse pas 80 -# caractres dans le cas courant o %s = /home/12345678/.viminfo -#, 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 dbogage. -#, c-format -msgid "Writing viminfo file \"%s\"" -msgstr "criture du fichier viminfo \"%s\"" - -#, c-format -msgid "E886: Can't rename viminfo file to %s!" -msgstr "E886: Impossible de renommer viminfo en %s" - -#, c-format -msgid "# This viminfo file was generated by Vim %s.\n" -msgstr "# Ce fichier viminfo a t gnr par Vim %s.\n" - -# AB - Les deux versions, bien que diffrentes, se valent. -msgid "" -"# You may edit it if you're careful!\n" -"\n" -msgstr "" -"# Vous pouvez l'diter, mais soyez prudent.\n" -"\n" - -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 - "illgal" est un terme trop fort mon got. -msgid "Illegal starting char" -msgstr "Caractre initial non valide" - -msgid "" -"\n" -"# Bar lines, copied verbatim:\n" -msgstr "" -"\n" -"# Lignes commenant par |, copies littralement :\n" - # AB - Ceci est un titre de bote de dialogue. Vrifier que la version # franaise est correcte pour les trois rfrences ; j'ai un doute quant # la troisime. @@ -1171,67 +903,7 @@ msgstr "Motif trouv dans toutes les lignes : %s" #, c-format msgid "Pattern not found: %s" -msgstr "Motif introuvable: %s" - -# AB - Ne pas traduire le dollar. -# AB - Ce message n'est volontairement pas traduit. En effet, il fait partie -# d'un groupe de trois messages dans viminfo, dont deux ne sont pas soumis -# internationalisation. J'attends que les deux autres messages soient -# traduisibles pour traduire celui-ci. -# DB - TODO : Qu'en est-il prsent ? -msgid "" -"\n" -"# Last Substitute String:\n" -"$" -msgstr "" -"\n" -"# Dernires chanes de substitution :\n" -"$" - -# This message should *so* be E42! -msgid "E478: Don't panic!" -msgstr "E478: Pas de panique !" - -#, c-format -msgid "E661: Sorry, no '%s' help for %s" -msgstr "E661: Dsol, aucune aide en langue '%s' pour %s" - -#, c-format -msgid "E149: Sorry, no help for %s" -msgstr "E149: Dsol, aucune aide pour %s" - -#, c-format -msgid "Sorry, help file \"%s\" not found" -msgstr "Dsol, le fichier d'aide \"%s\" est introuvable" - -#, c-format -msgid "E151: No match: %s" -msgstr "E151: Aucune correspondance : %s" - -#, c-format -msgid "E152: Cannot open %s for writing" -msgstr "E152: Impossible d'ouvrir %s en criture" - -#, c-format -msgid "E153: Unable to open %s for reading" -msgstr "E153: Impossible d'ouvrir %s en lecture" - -#, c-format -msgid "E670: Mix of help file encodings within a language: %s" -msgstr "E670: Encodages diffrents dans les fichiers d'aide en langue %s" - -# AB - L'tiquette la plus longue fait 27 caractres. Le nom de fichier le plus -# long fait 12 caractres. Il faudrait donc idalement faire une -# traduction de 40 caractres ou moins. Ce qui est loin d'tre le cas -# prsent. -# DB - Suggestion. -#, c-format -msgid "E154: Duplicate tag \"%s\" in file %s/%s" -msgstr "E154: Marqueur \"%s\" dupliqu dans le fichier %s/%s" - -#, c-format -msgid "E150: Not a directory: %s" -msgstr "E150: %s n'est pas un rpertoire" +msgstr "Motif introuvable : %s" # AB - Il faut respecter l'esprit plus que la lettre. #, c-format @@ -1290,58 +962,6 @@ msgstr "[Effac]" msgid "No old files" msgstr "Aucun vieux fichier" -# AB - La version franaise de la premire phrase ne me satisfait pas. -# DB - Suggestion. -msgid "Entering Debug mode. Type \"cont\" to continue." -msgstr "Mode dbogage activ. Tapez \"cont\" pour continuer." - -#, c-format -msgid "Oldval = \"%s\"" -msgstr "Ancienneval = \"%s\"" - -#, c-format -msgid "Newval = \"%s\"" -msgstr "Nouvelleval = \"%s\"" - -#, c-format -msgid "line %ld: %s" -msgstr "ligne %ld : %s" - -#, c-format -msgid "cmd: %s" -msgstr "cmde : %s" - -msgid "frame is zero" -msgstr "le cadre de pile est zro" - -#, c-format -msgid "frame at highest level: %d" -msgstr "cadre de pile au niveau le plus haut : %d" - -#, c-format -msgid "Breakpoint in \"%s%s\" line %ld" -msgstr "Point d'arrt dans %s%s ligne %ld" - -#, c-format -msgid "E161: Breakpoint not found: %s" -msgstr "E161: Le point d'arrt %s est introuvable" - -msgid "No breakpoints defined" -msgstr "Aucun point d'arrt n'est dfini" - -# AB - Le deuxime %s est remplac par "func" ou "file" sans que l'on puisse -# traduire ces mots. -#, c-format -msgid "%3d %s %s line %ld" -msgstr "%3d %s %s ligne %ld" - -#, c-format -msgid "%3d expr %s" -msgstr "%3d expr %s" - -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 franaise. #, c-format msgid "Save changes to \"%s\"?" @@ -1361,32 +981,11 @@ msgid "Warning: Entered other buffer unexpectedly (check autocommands)" msgstr "" "Alerte : Entre inattendue dans un autre tampon (vrifier autocommandes)" -msgid "E163: There is only one file to edit" -msgstr "E163: Il n'y a qu'un seul fichier diter" - -msgid "E164: Cannot go before first file" -msgstr "E164: Impossible d'aller avant le premier fichier" - -msgid "E165: Cannot go beyond last file" -msgstr "E165: Impossible d'aller au-del du dernier fichier" - #, c-format msgid "E666: compiler not supported: %s" msgstr "E666: Compilateur %s non support" #, c-format -msgid "Searching for \"%s\" in \"%s\"" -msgstr "Recherche de \"%s\" dans \"%s\"" - -#, c-format -msgid "Searching for \"%s\"" -msgstr "Recherche de \"%s\"" - -#, c-format -msgid "not found in '%s': \"%s\"" -msgstr "introuvable dans '%s' : \"%s\"" - -#, c-format msgid "W20: Required python version 2.x not supported, ignoring file: %s" msgstr "W20: Python version 2.x non support, fichier %s ignor" @@ -1394,78 +993,16 @@ msgstr "W20: Python version 2.x non support, fichier %s ignor" msgid "W21: Required python version 3.x not supported, ignoring file: %s" msgstr "W21: Python 3.x non support, fichier %s ignor" -msgid "Source Vim script" -msgstr "Sourcer un script - Vim" - -#, c-format -msgid "Cannot source a directory: \"%s\"" -msgstr "Impossible de sourcer un rpertoire : \"%s\"" - -#, c-format -msgid "could not source \"%s\"" -msgstr "impossible de sourcer \"%s\"" - -#, c-format -msgid "line %ld: could not source \"%s\"" -msgstr "ligne %ld : impossible de sourcer \"%s\"" - -#, c-format -msgid "sourcing \"%s\"" -msgstr "sourcement \"%s\"" - -#, c-format -msgid "line %ld: sourcing \"%s\"" -msgstr "ligne %ld : sourcement de \"%s\"" - -#, c-format -msgid "finished sourcing %s" -msgstr "fin du sourcement de %s" - -# AB - Ce texte fait partie d'un message de dbogage. -#, c-format -msgid "continuing in %s" -msgstr "de retour dans %s" - -msgid "modeline" -msgstr "ligne de mode" - -msgid "--cmd argument" -msgstr "argument --cmd" - -msgid "-c argument" -msgstr "argument -c" - -msgid "environment variable" -msgstr "variable d'environnement" - -msgid "error handler" -msgstr "gestionnaire d'erreur" - -msgid "W15: Warning: Wrong line separator, ^M may be missing" -msgstr "W15: Alerte : Sparateur de ligne erron, ^M possiblement manquant" - -msgid "E167: :scriptencoding used outside of a sourced file" -msgstr "E167: :scriptencoding utilis en dehors d'un fichier sourc" - -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. -#, c-format -msgid "Current %slanguage: \"%s\"" -msgstr "Langue courante pour %s : \"%s\"" - -#, c-format -msgid "E197: Cannot set language to \"%s\"" -msgstr "E197: Impossible de choisir la langue \"%s\"" - msgid "Entering Ex mode. Type \"visual\" to go to Normal mode." msgstr "Mode Ex activ. Tapez \"visual\" pour passer en mode Normal." msgid "E501: At end-of-file" msgstr "E501: la fin du fichier" +#, c-format +msgid "Executing: %s" +msgstr "Excution de : %s" + msgid "E169: Command too recursive" msgstr "E169: Commande trop rcursive" @@ -1523,59 +1060,6 @@ msgstr "" "\n" " Nom Args Adresse Complet. Dfinition" -msgid "No user-defined commands found" -msgstr "Aucune commande dfinie par l'utilisateur trouve" - -msgid "E175: No attribute specified" -msgstr "E175: Pas d'attribut spcifi" - -msgid "E176: Invalid number of arguments" -msgstr "E176: Nombre d'arguments invalide" - -msgid "E177: Count cannot be specified twice" -msgstr "E177: Le quantificateur ne peut tre spcifi deux fois" - -msgid "E178: Invalid default value for count" -msgstr "E178: La valeur par dfaut du quantificateur est invalide" - -msgid "E179: argument required for -complete" -msgstr "E179: argument requis avec -complete" - -msgid "E179: argument required for -addr" -msgstr "E179: argument requis avec -addr" - -#, c-format -msgid "E181: Invalid attribute: %s" -msgstr "E181: Attribut invalide : %s" - -msgid "E182: Invalid command name" -msgstr "E182: Nom de commande invalide" - -msgid "E183: User defined commands must start with an uppercase letter" -msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule" - -msgid "E841: Reserved name, cannot be used for user defined command" -msgstr "" -"E841: Nom rserv, ne peux pas tre utilis pour une commande utilisateur" - -#, c-format -msgid "E184: No such user-defined command: %s" -msgstr "E184: Aucune commande %s dfinie par l'utilisateur" - -#, c-format -msgid "E180: Invalid address type value: %s" -msgstr "E180: Valeur de type d'adresse invalide : %s" - -#, c-format -msgid "E180: Invalid complete value: %s" -msgstr "E180: Valeur invalide pour \"-complete=\" : %s" - -msgid "E468: Completion argument only allowed for custom completion" -msgstr "E468: Seul le compltement personnalis accepte un argument" - -msgid "E467: Custom completion requires a function argument" -msgstr "E467: Le compltement personnalis ncessite une fonction en argument" - msgid "unknown" msgstr "inconnu" @@ -1640,15 +1124,6 @@ msgstr "E930: Impossible d'utiliser :redir dans execute()" msgid "Save Redirection" msgstr "Enregistrer la redirection" -msgid "Save View" -msgstr "Enregistrer la vue - Vim" - -msgid "Save Session" -msgstr "Enregistrer la session - Vim" - -msgid "Save Setup" -msgstr "Enregistrer les rglages - Vim" - #, c-format msgid "E739: Cannot create directory: %s" msgstr "E739: Impossible de crer le rpertoire \"%s\"" @@ -1695,9 +1170,6 @@ msgstr "E499: Nom de fichier vide pour '%' ou '#', ne marche qu'avec \":p:h\"" msgid "E500: Evaluates to an empty string" msgstr "E500: valu en une chane vide" -msgid "E195: Cannot open viminfo file for reading" -msgstr "E195: Impossible d'ouvrir le viminfo en lecture" - # AB - Si les parenthses posent problme, il faudra remettre les guillemets # ci-dessus. msgid "Untitled" @@ -1757,15 +1229,6 @@ msgstr "Interruption" msgid "E579: :if nesting too deep" msgstr "E579: Imbrication de :if trop importante" -msgid "E580: :endif without :if" -msgstr "E580: :endif sans :if" - -msgid "E581: :else without :if" -msgstr "E581: :else sans :if" - -msgid "E582: :elseif without :if" -msgstr "E582: :elseif sans :if" - msgid "E583: multiple :else" msgstr "E583: Il ne peut y avoir qu'un seul :else" @@ -1775,35 +1238,23 @@ msgstr "E584: :elseif aprs :else" msgid "E585: :while/:for nesting too deep" msgstr "E585: Imbrication de :while ou :for trop importante" -msgid "E586: :continue without :while or :for" -msgstr "E586: :continue sans :while ou :for" - -msgid "E587: :break without :while or :for" -msgstr "E587: :break sans :while ou :for" - msgid "E732: Using :endfor with :while" msgstr "E732: Utilisation de :endfor avec :while" msgid "E733: Using :endwhile with :for" msgstr "E733: Utilisation de :endwhile avec :for" +msgid "E579: block nesting too deep" +msgstr "E579: Imbrication de bloc trop importante" + msgid "E601: :try nesting too deep" msgstr "E601: Imbrication de :try trop importante" -msgid "E603: :catch without :try" -msgstr "E603: :catch sans :try" - msgid "E604: :catch after :finally" msgstr "E604: :catch aprs :finally" -msgid "E606: :finally without :try" -msgstr "E606: :finally sans :try" - -msgid "E607: multiple :finally" -msgstr "E607: Il ne peut y avoir qu'un seul :finally" - -msgid "E602: :endtry without :try" -msgstr "E602: :endtry sans :try" +msgid "E193: :enddef not inside a function" +msgstr "E193: :enddef en dehors d'une fonction" msgid "E193: :endfunction not inside a function" msgstr "E193: :endfunction en dehors d'une fonction" @@ -1815,46 +1266,6 @@ 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 dclencher malgr une visite -# dans le code. -msgid "tagname" -msgstr "nom du marqueur" - -# DB - TODO : Idem prcdent. -msgid " kind file\n" -msgstr " type de fichier\n" - -msgid "'history' option is zero" -msgstr "l'option 'history' vaut zro" - -# DB - Messages et les suivants : fichier .viminfo. -# Pas de majuscule ncessaire pour les messages d'aprs. -#, c-format -msgid "" -"\n" -"# %s History (newest to oldest):\n" -msgstr "" -"\n" -"# Historique %s (chronologie dcroissante) :\n" - -msgid "Command Line" -msgstr "ligne de commande" - -msgid "Search String" -msgstr "chane de recherche" - -msgid "Expression" -msgstr "expression" - -msgid "Input Line" -msgstr "ligne de saisie" - -msgid "Debug Line" -msgstr "Ligne de dbogage" - -msgid "E198: cmd_pchar beyond the command length" -msgstr "E198: cmd_pchar au-del de la longueur de la commande" - msgid "E199: Active window or buffer deleted" msgstr "E199: Fentre ou tampon actif effac" @@ -1864,18 +1275,12 @@ msgstr "E812: Des autocommandes ont chang le tampon ou le nom du tampon" msgid "Illegal file name" msgstr "Nom de fichier invalide" -msgid "is a directory" -msgstr "est un rpertoire" - msgid "is not a file" msgstr "n'est pas un fichier" msgid "is a device (disabled with 'opendevice' option)" msgstr "est un priphrique (dsactiv par l'option 'opendevice')" -msgid "[New File]" -msgstr "[Nouveau fichier]" - msgid "[New DIRECTORY]" msgstr "[Nouveau RPERTOIRE]" @@ -1917,12 +1322,6 @@ msgstr "[CR manquant]" msgid "[long lines split]" msgstr "[lignes longues coupes]" -msgid "[NOT converted]" -msgstr "[NON converti]" - -msgid "[converted]" -msgstr "[converti]" - #, c-format msgid "[CONVERSION ERROR in line %ld]" msgstr "[ERREUR DE CONVERSION la ligne %ld]" @@ -1944,130 +1343,6 @@ msgstr "La conversion avec 'charconvert' a chou" msgid "can't read output of 'charconvert'" msgstr "Impossible de lire la sortie de 'charconvert'" -msgid "E676: No matching autocommands for acwrite buffer" -msgstr "E676: Pas d'autocommande correspondante pour le tampon acwrite" - -msgid "E203: Autocommands deleted or unloaded buffer to be written" -msgstr "E203: Des autocommandes ont effac ou dcharg le tampon crire" - -msgid "E204: Autocommand changed number of lines in unexpected way" -msgstr "" -"E204: L'autocommande a modifi le nombre de lignes de manire inattendue" - -msgid "NetBeans disallows writes of unmodified buffers" -msgstr "NetBeans interdit l'criture des tampons non modifis" - -msgid "Partial writes disallowed for NetBeans buffers" -msgstr "Netbeans interdit l'criture partielle de ses tampons" - -msgid "is not a file or writable device" -msgstr "n'est pas un fichier ou un priphrique inscriptible" - -msgid "writing to device disabled with 'opendevice' option" -msgstr "criture vers un priphrique dsactiv par l'option 'opendevice'" - -msgid "is read-only (add ! to override)" -msgstr "est en lecture seule (ajoutez ! pour passer outre)" - -msgid "E506: Can't write to backup file (add ! to override)" -msgstr "E506: Impossible d'crire la copie de secours (! pour passer outre)" - -msgid "E507: Close error for backup file (add ! to override)" -msgstr "E507: Erreur de fermeture de la copie de secours (! pour passer outre)" - -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)" - -msgid "E509: Cannot create backup file (add ! to override)" -msgstr "" -"E509: Impossible de crer la copie de secours (ajoutez ! pour passer outre)" - -msgid "E510: Can't make backup file (add ! to override)" -msgstr "" -"E510: Impossible de gnrer la copie de secours (ajoutez ! pour passer outre)" - -msgid "E214: Can't find temp file for writing" -msgstr "E214: Impossible de gnrer un fichier temporaire pour y crire" - -msgid "E213: Cannot convert (add ! to write without conversion)" -msgstr "E213: Impossible de convertir (ajoutez ! pour crire sans convertir)" - -msgid "E166: Can't open linked file for writing" -msgstr "E166: Impossible d'ouvrir le lien pour y crire" - -msgid "E212: Can't open file for writing" -msgstr "E212: Impossible d'ouvrir le fichier pour y crire" - -msgid "E949: File changed while writing" -msgstr "E949: Fichier modifi aprs criture" - -msgid "E512: Close failed" -msgstr "E512: Erreur de fermeture de fichier" - -msgid "E513: write error, conversion failed (make 'fenc' empty to override)" -msgstr "" -"E513: Erreur d'criture, chec de conversion (videz 'fenc' pour passer outre)" - -#, c-format -msgid "" -"E513: write error, conversion failed in line %ld (make 'fenc' empty to " -"override)" -msgstr "" -"E513: Erreur d'criture, chec de conversion la ligne %ld (videz 'fenc' " -"pour passer outre)" - -msgid "E514: write error (file system full?)" -msgstr "E514: erreur d'criture (systme de fichiers plein ?)" - -msgid " CONVERSION ERROR" -msgstr " ERREUR DE CONVERSION" - -#, c-format -msgid " in line %ld;" -msgstr " la ligne %ld" - -msgid "[Device]" -msgstr "[Priph.]" - -msgid "[New]" -msgstr "[Nouveau]" - -msgid " [a]" -msgstr " [a]" - -msgid " appended" -msgstr " ajout(s)" - -msgid " [w]" -msgstr " [e]" - -msgid " written" -msgstr " crit(s)" - -msgid "E205: Patchmode: can't save original file" -msgstr "E205: Patchmode : impossible d'enregistrer le fichier original" - -msgid "E206: patchmode: can't touch empty original file" -msgstr "E206: patchmode : impossible de crer le fichier original vide" - -msgid "E207: Can't delete backup file" -msgstr "E207: Impossible d'effacer la copie de secours" - -msgid "" -"\n" -"WARNING: Original file may be lost or damaged\n" -msgstr "" -"\n" -"ALERTE: Le fichier original est peut-tre perdu ou endommag\n" - -# DB - todo : un peu long... -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 !" - msgid "[dos]" msgstr "[dos]" @@ -2093,10 +1368,10 @@ msgstr[0] "%ld ligne, " msgstr[1] "%ld lignes, " #, c-format -msgid "%lld character" -msgid_plural "%lld characters" -msgstr[0] "%lld caractre" -msgstr[1] "%lld caractres" +msgid "%lld byte" +msgid_plural "%lld bytes" +msgstr[0] "%lld octet" +msgstr[1] "%lld octets" msgid "[noeol]" msgstr "[noeol]" @@ -2104,12 +1379,6 @@ msgstr "[noeol]" msgid "[Incomplete last line]" msgstr "[Dernire ligne incomplte]" -msgid "WARNING: The file has been changed since reading it!!!" -msgstr "ALERTE : Le fichier a t modifi depuis que Vim l'a lu !" - -msgid "Do you really want to write to it" -msgstr "Voulez-vous vraiment crire dedans" - #, c-format msgid "E208: Error writing to \"%s\"" msgstr "E208: Erreur lors de l'criture dans \"%s\"" @@ -2246,6 +1515,50 @@ msgstr "E219: { manquant." msgid "E220: Missing }." msgstr "E220: } manquant." +# DB : Les trois messages qui suivent sont des titres de botes +# de dialogue par dfaut. +msgid "Select Directory dialog" +msgstr "Slecteur de rpertoire" + +msgid "Save File dialog" +msgstr "Enregistrer un fichier" + +msgid "Open File dialog" +msgstr "Ouvrir un fichier" + +msgid "E338: Sorry, no file browser in console mode" +msgstr "E338: Dsol, pas de slecteur de fichiers en mode console" + +msgid "no matches" +msgstr "aucune correspondance" + +msgid "E854: path too long for completion" +msgstr "E854: chemin trop long pour compltement" + +#, c-format +msgid "" +"E343: Invalid path: '**[number]' must be at the end of the path or be " +"followed by '%s'." +msgstr "" +"E343: Chemin invalide : '**[nombre]' doit tre la fin du chemin ou tre " +"suivi de '%s'." + +#, c-format +msgid "E344: Can't find directory \"%s\" in cdpath" +msgstr "E344: Rpertoire \"%s\" introuvable dans 'cdpath'" + +#, c-format +msgid "E345: Can't find file \"%s\" in path" +msgstr "E345: Fichier \"%s\" introuvable dans 'path'" + +#, c-format +msgid "E346: No more directory \"%s\" found in cdpath" +msgstr "E346: Plus de rpertoire \"%s\" dans 'cdpath'" + +#, c-format +msgid "E347: No more file \"%s\" found in path" +msgstr "E347: Plus de fichier \"%s\" dans 'path'" + msgid "E490: No fold found" msgstr "E490: Aucun repli trouv" @@ -2267,31 +1580,6 @@ msgstr "E222: Ajout au tampon de lecture" msgid "E223: recursive mapping" msgstr "E223: mappage rcursif" -#, c-format -msgid "E224: global abbreviation already exists for %s" -msgstr "E224: une abrviation globale existe dj pour %s" - -#, c-format -msgid "E225: global mapping already exists for %s" -msgstr "E225: un mappage global existe dj pour %s" - -#, c-format -msgid "E226: abbreviation already exists for %s" -msgstr "E226: une abrviation existe dj pour %s" - -#, c-format -msgid "E227: mapping already exists for %s" -msgstr "E227: un mappage existe dj pour %s" - -msgid "No abbreviation found" -msgstr "Aucune abrviation trouve" - -msgid "No mapping found" -msgstr "Aucun mappage trouv" - -msgid "E228: makemap: Illegal mode" -msgstr "E228: makemap : mode invalide" - msgid "E851: Failed to create a new process for the GUI" msgstr "" "E851: chec lors de la cration d'un nouveau processus pour l'interface " @@ -2318,10 +1606,6 @@ msgstr "E231: 'guifontwide' est invalide" msgid "E599: Value of 'imactivatekey' is invalid" msgstr "E599: Valeur de 'imactivatekey' invalide" -#, c-format -msgid "E254: Cannot allocate color %s" -msgstr "E254: Impossible d'allouer la couleur %s" - msgid "No match at cursor, finding next" msgstr "Aucune correspondance sous le curseur, recherche de la suivante" @@ -2356,15 +1640,15 @@ msgstr "Vim" msgid "E232: Cannot create BalloonEval with both message and callback" msgstr "E232: Impossible de crer un BalloonEval avec message ET callback" -msgid "_Cancel" -msgstr "_Annuler" - msgid "_Save" msgstr "_Enregistrer" msgid "_Open" msgstr "_Ouvrir" +msgid "_Cancel" +msgstr "_Annuler" + msgid "_OK" msgstr "_Ok" @@ -2508,6 +1792,11 @@ msgstr "E671: Titre de fentre \"%s\" introuvable" msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." msgstr "E243: Argument non support : \"-%s\" ; Utilisez la version OLE." +msgid "E988: GUI cannot be used. Cannot execute gvim.exe." +msgstr "" +"E988: L'interface graphique ne peut pas tre utilise. Impossible d'excuter " +"gvim.exe." + msgid "E672: Unable to open window inside MDI application" msgstr "E672: Impossible d'ouvrir une fentre dans une application MDI" @@ -2586,9 +1875,6 @@ msgstr "Style :" msgid "Size:" msgstr "Taille :" -msgid "E256: Hangul automata ERROR" -msgstr "E256: ERREUR dans l'automate Hangul" - msgid "E550: Missing colon" msgstr "E550: ':' manquant" @@ -2686,6 +1972,74 @@ msgstr "E365: L'impression du fichier PostScript a chou" msgid "Print job sent." msgstr "Tche d'impression envoye." +msgid "E679: recursive loop loading syncolor.vim" +msgstr "E679: boucle rcursive lors du chargement de syncolor.vim" + +#, c-format +msgid "E411: highlight group not found: %s" +msgstr "E411: groupe de surbrillance introuvable : %s" + +#, c-format +msgid "E412: Not enough arguments: \":highlight link %s\"" +msgstr "E412: Trop peu d'arguments : \":highlight link %s\"" + +#, c-format +msgid "E413: Too many arguments: \":highlight link %s\"" +msgstr "E413: Trop d'arguments : \":highlight link %s\"" + +msgid "E414: group has settings, highlight link ignored" +msgstr "E414: le groupe a dj des attributs, lien de surbrillance ignor" + +#, c-format +msgid "E415: unexpected equal sign: %s" +msgstr "E415: signe gal inattendu : %s" + +#, c-format +msgid "E416: missing equal sign: %s" +msgstr "E416: '=' manquant : %s" + +#, c-format +msgid "E417: missing argument: %s" +msgstr "E417: argument manquant : %s" + +#, c-format +msgid "E418: Illegal value: %s" +msgstr "E418: Valeur invalide : %s" + +msgid "E419: FG color unknown" +msgstr "E419: Couleur de premier plan inconnue" + +msgid "E420: BG color unknown" +msgstr "E420: Couleur d'arrire-plan inconnue" + +msgid "E453: UL color unknown" +msgstr "E453: Couleur d'UL inconnue" + +#, c-format +msgid "E421: Color name or number not recognized: %s" +msgstr "E421: Nom ou numro de couleur non reconnu : %s" + +#, c-format +msgid "E422: terminal code too long: %s" +msgstr "E422: le code de terminal est trop long : %s" + +#, c-format +msgid "E423: Illegal argument: %s" +msgstr "E423: Argument invalide : %s" + +msgid "E424: Too many different highlighting attributes in use" +msgstr "" +"E424: Trop d'attributs de surbrillance diffrents en cours d'utilisation" + +msgid "E669: Unprintable character in group name" +msgstr "E669: Caractre non imprimable dans un nom de groupe" + +msgid "W18: Invalid character in group name" +msgstr "W18: Caractre invalide dans un nom de groupe" + +msgid "E849: Too many highlight and syntax groups" +msgstr "E849: Trop de groupes de surbrillance et de syntaxe" + msgid "Add a new database" msgstr "Ajouter une base de donnes" @@ -3013,9 +2367,6 @@ msgstr "vimOption inconnue" msgid "keyboard interrupt" msgstr "interruption clavier" -msgid "vim error" -msgstr "erreur Vim" - msgid "cannot create buffer/window command: object is being deleted" msgstr "" "Impossible de crer commande de tampon/fentre : objet en cours d'effacement" @@ -3062,10 +2413,24 @@ msgid "E251: VIM instance registry property is badly formed. Deleted!" msgstr "E251: Entre registre de l'instance de Vim mal formate. Suppression !" #, c-format +msgid "%ld lines to indent... " +msgstr "%ld lignes indenter... " + +#, c-format +msgid "%ld line indented " +msgid_plural "%ld lines indented " +msgstr[0] "%ld ligne indente " +msgstr[1] "%ld lignes indentes " + +#, c-format msgid "E938: Duplicate key in JSON: \"%s\"" msgstr "E938: Cl duplique dans le document JSON : \"%s\"" #, c-format +msgid "E899: Argument of %s must be a List or Blob" +msgstr "E899: L'argument de %s doit tre une Liste ou un Blob" + +#, c-format msgid "E696: Missing comma in List: %s" msgstr "E696: Il manque une virgule dans la Liste %s" @@ -3279,15 +2644,12 @@ msgstr "-A\t\tDmarrer en mode arabe" msgid "-H\t\t\tStart in Hebrew mode" msgstr "-H\t\tDmarrer en mode hbreu" -msgid "-F\t\t\tStart in Farsi mode" -msgstr "-F\t\tDmarrer en mode farsi" - msgid "-T <terminal>\tSet terminal type to <terminal>" msgstr "-T <term>\tRgler le type du terminal sur <terminal>" msgid "--not-a-term\t\tSkip warning for input/output not being a terminal" msgstr "" -"--no-a-term\t\tAucun avertissement si l'entre/sortie n'est pas un terminal" +"--not-a-term\t\tAucun avertissement si l'entre/sortie n'est pas un terminal" msgid "--ttyfail\t\tExit if input or output is not a terminal" msgstr "--ttyfail\t\tQuitte si l'entre ou la sortie ne sont pas un terminal" @@ -3338,7 +2700,7 @@ msgstr "-W <dest>\tcrire toutes les commandes tapes dans le fichier <dest>" msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\tditer des fichiers chiffrs" -msgid "-display <display>\tConnect vim to this particular X-server" +msgid "-display <display>\tConnect Vim to this particular X-server" msgstr "-display <display>\tConnecter Vim au serveur X spcifi" msgid "-X\t\t\tDo not connect to X server" @@ -3421,10 +2783,10 @@ msgstr "" "\n" "Arguments reconnus par gvim (version Athena) :\n" -msgid "-display <display>\tRun vim on <display>" +msgid "-display <display>\tRun Vim on <display>" msgstr "-display <cran>\tLancer Vim sur ce <display>" -msgid "-iconic\t\tStart vim iconified" +msgid "-iconic\t\tStart Vim iconified" msgstr "-iconic\t\tIconifier Vim au dmarrage" msgid "-background <color>\tUse <color> for the background (also: -bg)" @@ -3474,7 +2836,7 @@ msgstr "" "\n" "Arguments reconnus par gvim (version GTK+) :\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" +msgid "-display <display>\tRun Vim on <display> (also: --display)" msgstr "" "-display <display>\tLancer Vim sur ce <display>\t(galement : --display)" @@ -3493,24 +2855,41 @@ msgstr "-P <titre parent>\tOuvrir Vim dans une application parente" msgid "--windowid <HWND>\tOpen Vim inside another win32 widget" msgstr "--windowid <HWND>\tOuvrir Vim dans un autre widget win32" -msgid "No display" -msgstr "Aucun display" +#, c-format +msgid "E224: global abbreviation already exists for %s" +msgstr "E224: une abrviation globale existe dj pour %s" -msgid ": Send failed.\n" -msgstr " : L'envoi a chou.\n" +#, c-format +msgid "E225: global mapping already exists for %s" +msgstr "E225: un mappage global existe dj pour %s" -msgid ": Send failed. Trying to execute locally\n" -msgstr " : L'envoi a chou. Tentative d'excution locale\n" +#, c-format +msgid "E226: abbreviation already exists for %s" +msgstr "E226: une abrviation existe dj pour %s" #, c-format -msgid "%d of %d edited" -msgstr "%d dits sur %d" +msgid "E227: mapping already exists for %s" +msgstr "E227: un mappage existe dj pour %s" + +msgid "No abbreviation found" +msgstr "Aucune abrviation trouve" + +msgid "No mapping found" +msgstr "Aucun mappage trouv" + +msgid "E228: makemap: Illegal mode" +msgstr "E228: makemap : mode invalide" -msgid "No display: Send expression failed.\n" -msgstr "Aucun display : L'envoi de l'expression a chou.\n" +msgid "E460: entries missing in mapset() dict argument" +msgstr "E460: entres manquantes dans l'argument dict de mapset()" -msgid ": Send expression failed.\n" -msgstr " : L'envoi de l'expression a chou.\n" +#, c-format +msgid "E357: 'langmap': Matching character missing for %s" +msgstr "E357: 'langmap' : Aucun caractre correspondant pour %s" + +#, c-format +msgid "E358: 'langmap': Extra characters after semicolon: %s" +msgstr "E358: 'langmap' : Caractres surnumraires aprs point-virgule : %s" msgid "No marks set" msgstr "Aucune marque positionne" @@ -3540,54 +2919,12 @@ msgstr "" "\n" "modif ligne col fichier/texte" -msgid "" -"\n" -"# File marks:\n" -msgstr "" -"\n" -"# Marques dans le fichier :\n" - -msgid "" -"\n" -"# Jumplist (newest first):\n" -msgstr "" -"\n" -"# Liste de sauts (le plus rcent en premier) :\n" - -msgid "" -"\n" -"# History of marks within files (newest to oldest):\n" -msgstr "" -"\n" -"# Historique des marques dans les fichiers (les plus rcentes en premier) :\n" - -msgid "Missing '>'" -msgstr "'>' manquant" +msgid "E290: List or number required" +msgstr "E290: Liste ou nombre requis" msgid "E543: Not a valid codepage" msgstr "E543: Page de codes non valide" -msgid "E284: Cannot set IC values" -msgstr "E284: Impossible de rgler les valeurs IC" - -msgid "E285: Failed to create input context" -msgstr "E285: chec de la cration du contexte de saisie" - -msgid "E286: Failed to open input method" -msgstr "E286: chec de l'ouverture de la mthode de saisie" - -msgid "E287: Warning: Could not set destroy callback to IM" -msgstr "" -"E287: Alerte : Impossible d'inscrire le callback de destruction dans la MS" - -msgid "E288: input method doesn't support any style" -msgstr "E288: la mthode de saisie ne supporte aucun style" - -msgid "E289: input method doesn't support my preedit type" -msgstr "" -"E289: le type de prdition de Vim n'est pas support par la mthode de " -"saisie" - msgid "E293: block was not locked" msgstr "E293: le bloc n'tait pas verrouill" @@ -3794,12 +3131,17 @@ msgstr "" msgid "" "\n" -"You may want to delete the .swp file now.\n" -"\n" +"You may want to delete the .swp file now." msgstr "" "\n" -"Il est conseill d'effacer maintenant le fichier .swp.\n" +"Il est conseill d'effacer maintenant le fichier .swp." + +msgid "" "\n" +"Note: process STILL RUNNING: " +msgstr "" +"\n" +"Note : processus EN COURS D'EXECUTION : " msgid "Using crypt key from swap file for the text file.\n" msgstr "" @@ -3913,8 +3255,8 @@ msgid "E315: ml_get: invalid lnum: %ld" msgstr "E315: ml_get : numro de ligne invalide : %ld" #, c-format -msgid "E316: ml_get: cannot find line %ld" -msgstr "E316: ml_get : ligne %ld introuvable" +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get : impossible de trouver la ligne %ld dans le tampon %d %s" msgid "E317: pointer block id wrong 3" msgstr "E317: mauvais id de pointeur de bloc 3" @@ -4010,6 +3352,9 @@ msgstr "" "\"\n" " pour viter ce message.\n" +msgid "Found a swap file that is not useful, deleting it" +msgstr "Effacement de fichier d'change inutile" + msgid "Swap file \"" msgstr "Le fichier d'change \"" @@ -4105,6 +3450,10 @@ msgid "E337: Menu not found - check menu names" msgstr "E337: Menu introuvable - vrifiez les noms des menus" #, c-format +msgid "Error detected while compiling %s:" +msgstr "Erreur dtecte lors de la compilation %s" + +#, c-format msgid "Error detected while processing %s:" msgstr "Erreur dtecte en traitant %s :" @@ -4160,20 +3509,6 @@ msgstr "" "Tout aban&donner\n" "&Annuler" -# DB : Les trois messages qui suivent sont des titres de botes -# de dialogue par dfaut. -msgid "Select Directory dialog" -msgstr "Slecteur de rpertoire" - -msgid "Save File dialog" -msgstr "Enregistrer un fichier" - -msgid "Open File dialog" -msgstr "Ouvrir un fichier" - -msgid "E338: Sorry, no file browser in console mode" -msgstr "E338: Dsol, pas de slecteur de fichiers en mode console" - msgid "E766: Insufficient arguments for printf()" msgstr "E766: Pas assez d'arguments pour printf()" @@ -4183,14 +3518,12 @@ msgstr "E807: printf() attend un argument de type Flottant" msgid "E767: Too many arguments to printf()" msgstr "E767: Trop d'arguments pour printf()" -msgid "W10: Warning: Changing a readonly file" -msgstr "W10: Alerte : Modification d'un fichier en lecture seule" - -msgid "Type number and <Enter> or click with mouse (empty cancels): " -msgstr "Tapez un nombre et <Entre> ou cliquez avec la souris (rien annule) :" +msgid "Type number and <Enter> or click with the mouse (q or empty cancels): " +msgstr "" +"Tapez un nombre et <Entre> ou cliquez avec la souris (q ou rien annule) :" -msgid "Type number and <Enter> (empty cancels): " -msgstr "Tapez un nombre et <Entre> (rien annule) :" +msgid "Type number and <Enter> (q or empty cancels): " +msgstr "Tapez un nombre et <Entre> (q ou rien annule) :" #, c-format msgid "%ld more line" @@ -4210,6 +3543,12 @@ msgstr " (Interrompu)" msgid "Beep!" msgstr "Bip !" +#, c-format +msgid "%ld second ago" +msgid_plural "%ld seconds ago" +msgstr[0] "il y a %ld seconde" +msgstr[1] "il y a %ld secondes" + msgid "ERROR: " msgstr "ERREUR : " @@ -4229,12 +3568,8 @@ msgstr "" "[appels] total re/malloc() %lu, total free() %lu\n" "\n" -msgid "E340: Line is becoming too long" -msgstr "E340: La ligne devient trop longue" - -#, c-format -msgid "E341: Internal error: lalloc(%ld, )" -msgstr "E341: Erreur interne : lalloc(%ld, )" +msgid "E341: Internal error: lalloc(0, )" +msgstr "E341: Erreur interne : lalloc(0, )" #, c-format msgid "E342: Out of memory! (allocating %lu bytes)" @@ -4259,33 +3594,6 @@ msgstr "E548: chiffre attendu" msgid "E549: Illegal percentage" msgstr "E549: Pourcentage non autoris" -msgid "E854: path too long for completion" -msgstr "E854: chemin trop long pour compltement" - -#, c-format -msgid "" -"E343: Invalid path: '**[number]' must be at the end of the path or be " -"followed by '%s'." -msgstr "" -"E343: Chemin invalide : '**[nombre]' doit tre la fin du chemin ou tre " -"suivi de '%s'." - -#, c-format -msgid "E344: Can't find directory \"%s\" in cdpath" -msgstr "E344: Rpertoire \"%s\" introuvable dans 'cdpath'" - -#, c-format -msgid "E345: Can't find file \"%s\" in path" -msgstr "E345: Fichier \"%s\" introuvable dans 'path'" - -#, c-format -msgid "E346: No more directory \"%s\" found in cdpath" -msgstr "E346: Plus de rpertoire \"%s\" dans 'cdpath'" - -#, c-format -msgid "E347: No more file \"%s\" found in path" -msgstr "E347: Plus de fichier \"%s\" dans 'path'" - #, c-format msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\"" msgstr "" @@ -4309,12 +3617,6 @@ msgstr "E505: %s est en lecture seule (ajoutez ! pour passer outre)" msgid "E349: No identifier under cursor" msgstr "E349: Aucun identifiant sous le curseur" -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc' est vide" - -msgid "E775: Eval feature not available" -msgstr "E775: La fonctionnalit d'valuation n'est pas disponible" - # DB : Il est ici question du mode Visuel. msgid "Warning: terminal cannot highlight" msgstr "Alerte : le terminal ne peut pas surligner" @@ -4323,7 +3625,7 @@ msgid "E348: No string under cursor" msgstr "E348: Aucune chane sous le curseur" msgid "E352: Cannot erase folds with current 'foldmethod'" -msgstr "E352: Impossible d'effacer des replis avec la 'foldmethod'e actuelle" +msgstr "E352: Impossible d'effacer des replis avec la 'foldmethod' actuelle" msgid "E664: changelist is empty" msgstr "E664: La liste des modifications (changelist) est vide" @@ -4339,6 +3641,9 @@ msgstr "" "Tapez :qa! puis <Entre> pour abandonner tous les changements et quitter " "Vim" +msgid "Type :qa and press <Enter> to exit Vim" +msgstr "Tapez :qa puis <Entre> pour quitter Vim" + #, c-format msgid "%ld line %sed %d time" msgid_plural "%ld line %sed %d times" @@ -4351,19 +3656,6 @@ msgid_plural "%ld lines %sed %d times" msgstr[0] "%ld lignes %ses %d fois" msgstr[1] "%ld lignes %ses %d fois" -#, c-format -msgid "%ld lines to indent... " -msgstr "%ld lignes indenter... " - -#, c-format -msgid "%ld line indented " -msgid_plural "%ld lines indented " -msgstr[0] "%ld ligne indente " -msgstr[1] "%ld lignes indentes " - -msgid "E748: No previously used register" -msgstr "E748: Aucun registre n'a t prcdemment utilis" - # DB - Question O/N. msgid "cannot yank; delete anyway" msgstr "impossible de raliser une copie ; effacer tout de mme" @@ -4375,56 +3667,10 @@ msgstr[0] "%ld ligne modifie" msgstr[1] "%ld lignes modifies" #, c-format -msgid "freeing %ld lines" -msgstr "libration de %ld lignes" - -#, c-format -msgid " into \"%c" -msgstr " dans \"%c" - -#, c-format -msgid "block of %ld line yanked%s" -msgid_plural "block of %ld lines yanked%s" -msgstr[0] "bloc de %ld ligne copi%s" -msgstr[1] "bloc de %ld lignes copi%s" - -#, c-format -msgid "%ld line yanked%s" -msgid_plural "%ld lines yanked%s" -msgstr[0] "%ld ligne copie%s" -msgstr[1] "%ld lignes copies%s" - -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: Le registre %s est vide" - -msgid "" -"\n" -"--- Registers ---" -msgstr "" -"\n" -"--- Registres ---" - -msgid "Illegal register name" -msgstr "Nom de registre invalide" - -msgid "" -"\n" -"# Registers:\n" -msgstr "" -"\n" -"# Registres :\n" - -#, c-format -msgid "E574: Unknown register type %d" -msgstr "E574: Type de registre %d inconnu" - -msgid "" -"E883: search pattern and expression register may not contain two or more " -"lines" -msgstr "" -"E883: le motif de recherche et le registre d'expression ne peuvent pas " -"contenir deux lignes ou plus" +msgid "%d line changed" +msgid_plural "%d lines changed" +msgstr[0] "%d ligne modifie" +msgstr[1] "%d lignes modifies" #, c-format msgid "%ld Cols; " @@ -4461,8 +3707,11 @@ msgstr "" msgid "(+%lld for BOM)" msgstr "(+%lld pour le BOM)" -msgid "Thanks for flying Vim" -msgstr "Merci d'avoir choisi Vim" +msgid "E774: 'operatorfunc' is empty" +msgstr "E774: 'operatorfunc' est vide" + +msgid "E775: Eval feature not available" +msgstr "E775: La fonctionnalit d'valuation n'est pas disponible" msgid "E518: Unknown option" msgstr "E518: Option inconnue" @@ -4473,6 +3722,10 @@ msgstr "E519: Option non supporte" msgid "E520: Not allowed in a modeline" msgstr "E520: Non autoris dans une ligne de mode" +msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" +msgstr "" +"E992: Non autoris dans une ligne de mode avec 'modelineexpr' dslectionne" + msgid "E846: Key code not set" msgstr "E846: Le code de touche n'est pas configur" @@ -4482,6 +3735,66 @@ msgstr "E521: Nombre requis aprs =" msgid "E522: Not found in termcap" msgstr "E522: Introuvable dans termcap" +msgid "E946: Cannot make a terminal with running job modifiable" +msgstr "" +"E946: terminal avec tche en cours d'excution ne peut pas tre modifiable" + +msgid "E590: A preview window already exists" +msgstr "E590: Il existe dj une fentre de prvisualisation" + +msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" +msgstr "W17: L'arabe ncessite l'UTF-8, tapez ':set encoding=utf-8'" + +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: Couleurs en 24-bits non supportes sur cet environnement." + +#, c-format +msgid "E593: Need at least %d lines" +msgstr "E593: Au moins %d lignes sont ncessaires" + +#, c-format +msgid "E594: Need at least %d columns" +msgstr "E594: Au moins %d colonnes sont ncessaires" + +#, c-format +msgid "E355: Unknown option: %s" +msgstr "E355: Option inconnue : %s" + +#, c-format +msgid "E521: Number required: &%s = '%s'" +msgstr "E521: Nombre requis : &%s = '%s'" + +msgid "" +"\n" +"--- Terminal codes ---" +msgstr "" +"\n" +"--- Codes de terminal ---" + +msgid "" +"\n" +"--- Global option values ---" +msgstr "" +"\n" +"--- Valeur des options globales ---" + +msgid "" +"\n" +"--- Local option values ---" +msgstr "" +"\n" +"--- Valeur des options locales ---" + +msgid "" +"\n" +"--- Options ---" +msgstr "" +"\n" +"--- Options ---" + +msgid "E356: get_varp ERROR" +msgstr "E356: ERREUR get_varp" + #, c-format msgid "E539: Illegal character <%s>" msgstr "E539: Caractre <%s> invalide" @@ -4490,6 +3803,15 @@ msgstr "E539: Caractre <%s> invalide" msgid "For option %s" msgstr "Pour l'option %s" +# DB - Le code est sans ambigut sur le caractre manquant. +# dfaut d'une traduction valable, au moins comprend-on +# ce qui se passe. +msgid "E540: Unclosed expression sequence" +msgstr "E540: '}' manquant" + +msgid "E542: unbalanced groups" +msgstr "E542: parenthses non quilibres" + msgid "E529: Cannot set 'term' to empty string" msgstr "E529: 'term' ne doit pas tre une chane vide" @@ -4531,8 +3853,9 @@ msgstr "E527: Virgule manquante" msgid "E528: Must specify a ' value" msgstr "E528: Une valeur ' doit tre spcifie" -msgid "E595: contains unprintable or wide character" -msgstr "E595: contient des caractres largeur double non-imprimables" +msgid "E595: 'showbreak' contains unprintable or wide character" +msgstr "" +"E595: 'showbreak' contient des caractres largeur double ou non imprimables" msgid "E596: Invalid font(s)" msgstr "E596: Police(s) invalide(s)" @@ -4560,89 +3883,6 @@ msgstr "E536: virgule requise" msgid "E537: 'commentstring' must be empty or contain %s" msgstr "E537: 'commentstring' doit tre vide ou contenir %s" -msgid "E538: No mouse support" -msgstr "E538: La souris n'est pas supporte" - -# DB - Le code est sans ambigut sur le caractre manquant. -# dfaut d'une traduction valable, au moins comprend-on -# ce qui se passe. -msgid "E540: Unclosed expression sequence" -msgstr "E540: '}' manquant" - -msgid "E541: too many items" -msgstr "E541: trop d'lments" - -msgid "E542: unbalanced groups" -msgstr "E542: parenthses non quilibres" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "" -"E946: terminal avec tche en cours d'excution ne peut pas tre modifiable" - -msgid "E590: A preview window already exists" -msgstr "E590: Il existe dj une fentre de prvisualisation" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "W17: L'arabe ncessite l'UTF-8, tapez ':set encoding=utf-8'" - -msgid "E954: 24-bit colors are not supported on this environment" -msgstr "E954: Couleurs en 24-bits non-supportes sur cet environnement." - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: Au moins %d lignes sont ncessaires" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: Au moins %d colonnes sont ncessaires" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: Option inconnue : %s" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: Nombre requis : &%s = '%s'" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- Codes de terminal ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- Valeur des options globales ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- Valeur des options locales ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- Options ---" - -msgid "E356: get_varp ERROR" -msgstr "E356: ERREUR get_varp" - -#, c-format -msgid "E357: 'langmap': Matching character missing for %s" -msgstr "E357: 'langmap' : Aucun caractre correspondant pour %s" - -#, c-format -msgid "E358: 'langmap': Extra characters after semicolon: %s" -msgstr "E358: 'langmap' : Caractres surnumraires aprs point-virgule : %s" - msgid "cannot open " msgstr "impossible d'ouvrir " @@ -4736,6 +3976,10 @@ msgstr "" "\n" "Vim : Rception d'une erreur X\n" +#, c-format +msgid "restoring display %s" +msgstr "restauration du display %s" + msgid "Testing the X display failed" msgstr "Le test du display X a chou" @@ -4833,15 +4077,6 @@ msgstr "XSMP : SmcOpenConnection a chou : %s" msgid "At line" msgstr " la ligne" -msgid "Could not load vim32.dll!" -msgstr "Impossible de charger vim32.dll !" - -msgid "VIM Error" -msgstr "Erreur VIM" - -msgid "Could not fix up function pointers to the DLL!" -msgstr "Impossible d'initialiser les pointeurs de fonction vers la DLL !" - # DB - Les vnements en question sont ceux des messages qui suivent. #, c-format msgid "Vim: Caught %s event\n" @@ -4875,10 +4110,38 @@ msgstr "Alerte Vim" msgid "shell returned %d" msgstr "le shell a retourn %d" +msgid "E278: Cannot put a terminal buffer in a popup window" +msgstr "" +"E278: Impossible de mettre un tampon de terminal dans une fentre " +"contextuelle" + +#, c-format +msgid "E997: Tabpage not found: %d" +msgstr "E997: Onglet introuvable : %d" + +#, c-format +msgid "E993: window %d is not a popup window" +msgstr "E993: la fentre %d n'est pas une fentre contextuelle" + +msgid "E994: Not allowed in a popup window" +msgstr "E994: Opration interdite dans une fentre contextuelle" + +msgid "E863: Not allowed for a terminal in a popup window" +msgstr "" +"E863: Opration interdite pour un terminal dans une fentre contextuelle" + +msgid "E750: First use \":profile start {fname}\"" +msgstr "E750: Utilisez d'abord \":profile start {nomfichier}\"" + +msgid "E553: No more items" +msgstr "E553: Plus d'lments" + +msgid "E925: Current quickfix list was changed" +msgstr "E925: La liste quickfix courante a chang" + msgid "E926: Current location list was changed" msgstr "E926: La liste d'emplacements courante a chang" -#, c-format msgid "E372: Too many %%%c in format string" msgstr "E372: Trop de %%%c dans la chane de format" @@ -4907,15 +4170,9 @@ msgstr "E378: 'errorformat' ne contient aucun motif" msgid "E379: Missing or empty directory name" msgstr "E379: Nom de rpertoire vide ou absent" -msgid "E553: No more items" -msgstr "E553: Plus d'lments" - msgid "E924: Current window was closed" msgstr "E924: La fentre courante doit tre ferme" -msgid "E925: Current quickfix was changed" -msgstr "E925: Le quickfix courant a chang" - #, c-format msgid "(%d of %d)%s%s: " msgstr "(%d sur %d)%s%s : " @@ -4946,6 +4203,9 @@ msgstr "E683: Nom de fichier manquant ou motif invalide" msgid "Cannot open file \"%s\"" msgstr "Impossible d'ouvrir le fichier \"%s\"" +msgid "cannot have both a list and a \"what\" argument" +msgstr "impossible d'avoir une liste et un argument \"what\" en mme temps" + msgid "E681: Buffer is not loaded" msgstr "E681: le tampon n'est pas charg" @@ -4995,37 +4255,30 @@ msgstr "E70: %s%%[] vide" msgid "E956: Cannot use pattern recursively" msgstr "E956: Impossible d'utiliser le motif rcursivement" -msgid "E65: Illegal back reference" -msgstr "E65: post-rfrence invalide" - -msgid "E339: Pattern too long" -msgstr "E339: Motif trop long" - -msgid "E50: Too many \\z(" -msgstr "E50: Trop de \\z(" - #, c-format -msgid "E51: Too many %s(" -msgstr "E51: Trop de %s(" - -msgid "E52: Unmatched \\z(" -msgstr "E52: Pas de correspondance pour \\z(" +msgid "E654: missing delimiter after search pattern: %s" +msgstr "E654: il manque un dlimiteur aprs le motif de recherche : %s" #, c-format -msgid "E59: invalid character after %s@" -msgstr "E59: caractre invalide aprs %s@" +msgid "E554: Syntax error in %s{...}" +msgstr "E554: Erreur de syntaxe dans %s{...}" #, c-format -msgid "E60: Too many complex %s{...}s" -msgstr "E60: Trop de %s{...}s complexes" +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (regexp NFA) %s ne peut pas tre rpt" -#, c-format -msgid "E61: Nested %s*" -msgstr "E61: %s* imbriqus" +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: \\%#= peut tre suivi uniquement de 0, 1 ou 2. Le moteur automatique " +"sera utilis " -#, c-format -msgid "E62: Nested %s%c" -msgstr "E62: %s%c imbriqus" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Moteur RE avec backtracking utilis pour le motif : " + +msgid "E65: Illegal back reference" +msgstr "E65: post-rfrence invalide" msgid "E63: invalid use of \\_" msgstr "E63: utilisation invalide de \\_" @@ -5046,25 +4299,36 @@ msgid "E71: Invalid character after %s%%" msgstr "E71: Caractre invalide aprs %s%%" #, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: Erreur de syntaxe dans %s{...}" +msgid "E59: invalid character after %s@" +msgstr "E59: caractre invalide aprs %s@" -msgid "External submatches:\n" -msgstr "Sous-correspondances externes :\n" +#, c-format +msgid "E60: Too many complex %s{...}s" +msgstr "E60: Trop de %s{...}s complexes" #, c-format -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (regexp NFA) %s ne peut pas tre rpt" +msgid "E61: Nested %s*" +msgstr "E61: %s* imbriqus" -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " -"used " -msgstr "" -"E864: \\%#= peut tre suivi uniquement de 0, 1 ou 2. Le moteur automatique " -"sera utilis " +#, c-format +msgid "E62: Nested %s%c" +msgstr "E62: %s%c imbriqus" -msgid "Switching to backtracking RE engine for pattern: " -msgstr "Moteur RE avec backtracking utilis pour le motif : " +msgid "E50: Too many \\z(" +msgstr "E50: Trop de \\z(" + +#, c-format +msgid "E51: Too many %s(" +msgstr "E51: Trop de %s(" + +msgid "E52: Unmatched \\z(" +msgstr "E52: Pas de correspondance pour \\z(" + +msgid "E339: Pattern too long" +msgstr "E339: Motif trop long" + +msgid "External submatches:\n" +msgstr "Sous-correspondances externes :\n" msgid "E865: (NFA) Regexp end encountered prematurely" msgstr "E865: (NFA) Fin de regexp rencontre prmaturment" @@ -5074,16 +4338,16 @@ msgid "E866: (NFA regexp) Misplaced %c" msgstr "E866: (regexp NFA) %c au mauvais endroit" #, c-format -msgid "E877: (NFA regexp) Invalid character class: %ld" -msgstr "E877: (regexp NFA) Classe de caractre invalide : %ld" +msgid "E877: (NFA regexp) Invalid character class: %d" +msgstr "E877: (regexp NFA) Classe de caractre invalide : %d" + +msgid "E951: \\% value too large" +msgstr "E951: valeur \\% trop grande" #, c-format msgid "E867: (NFA) Unknown operator '\\z%c'" msgstr "E867: (NFA) Oprateur inconnu '\\z%c'" -msgid "E951: \\% value too large" -msgstr "E951: valeur \\% trop grande" - #, c-format msgid "E867: (NFA) Unknown operator '\\%%%c'" msgstr "E867: (NFA) Oprateur inconnu '\\%%%c'" @@ -5132,6 +4396,47 @@ msgid "E878: (NFA) Could not allocate memory for branch traversal!" msgstr "" "E878: (NFA) Impossible d'allouer la mmoire pour parcourir les branches !" +msgid "E748: No previously used register" +msgstr "E748: Aucun registre n'a t prcdemment utilis" + +#, c-format +msgid "freeing %ld lines" +msgstr "libration de %ld lignes" + +#, c-format +msgid " into \"%c" +msgstr " dans \"%c" + +#, c-format +msgid "block of %ld line yanked%s" +msgid_plural "block of %ld lines yanked%s" +msgstr[0] "bloc de %ld ligne copi%s" +msgstr[1] "bloc de %ld lignes copi%s" + +#, c-format +msgid "%ld line yanked%s" +msgid_plural "%ld lines yanked%s" +msgstr[0] "%ld ligne copie%s" +msgstr[1] "%ld lignes copies%s" + +#, c-format +msgid "E353: Nothing in register %s" +msgstr "E353: Le registre %s est vide" + +msgid "" +"\n" +"Type Name Content" +msgstr "" +"\n" +"Type nom Contenu" + +msgid "" +"E883: search pattern and expression register may not contain two or more " +"lines" +msgstr "" +"E883: le motif de recherche et le registre d'expression ne peuvent pas " +"contenir deux lignes ou plus" + msgid " VREPLACE" msgstr " VREMPLACEMENT" @@ -5185,6 +4490,81 @@ msgid "recording" msgstr "Enregistrement" #, c-format +msgid "Searching for \"%s\" in \"%s\"" +msgstr "Recherche de \"%s\" dans \"%s\"" + +#, c-format +msgid "Searching for \"%s\"" +msgstr "Recherche de \"%s\"" + +#, c-format +msgid "not found in '%s': \"%s\"" +msgstr "introuvable dans '%s' : \"%s\"" + +msgid "Source Vim script" +msgstr "Sourcer un script - Vim" + +#, c-format +msgid "Cannot source a directory: \"%s\"" +msgstr "Impossible de sourcer un rpertoire : \"%s\"" + +#, c-format +msgid "could not source \"%s\"" +msgstr "impossible de sourcer \"%s\"" + +#, c-format +msgid "line %ld: could not source \"%s\"" +msgstr "ligne %ld : impossible de sourcer \"%s\"" + +#, c-format +msgid "sourcing \"%s\"" +msgstr "sourcement \"%s\"" + +#, c-format +msgid "line %ld: sourcing \"%s\"" +msgstr "ligne %ld : sourcement de \"%s\"" + +#, c-format +msgid "finished sourcing %s" +msgstr "fin du sourcement de %s" + +# AB - Ce texte fait partie d'un message de dbogage. +#, c-format +msgid "continuing in %s" +msgstr "de retour dans %s" + +msgid "modeline" +msgstr "ligne de mode" + +msgid "--cmd argument" +msgstr "argument --cmd" + +msgid "-c argument" +msgstr "argument -c" + +msgid "environment variable" +msgstr "variable d'environnement" + +msgid "error handler" +msgstr "gestionnaire d'erreur" + +msgid "W15: Warning: Wrong line separator, ^M may be missing" +msgstr "W15: Alerte : Sparateur de ligne erron, ^M possiblement manquant" + +msgid "E167: :scriptencoding used outside of a sourced file" +msgstr "E167: :scriptencoding utilis en dehors d'un fichier sourc" + +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion utilis en dehors d'un fichier sourc" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: scriptversion non support : %d" + +msgid "E168: :finish used outside of a sourced file" +msgstr "E168: :finish utilis en dehors d'un fichier sourc" + +#, c-format msgid "E383: Invalid search string: %s" msgstr "E383: Chane de recherche invalide : %s" @@ -5240,19 +4620,6 @@ msgstr "E388: Impossible de trouver la dfinition" msgid "E389: Couldn't find pattern" msgstr "E389: Impossible de trouver le motif" -msgid "Substitute " -msgstr "Substitue " - -#, c-format -msgid "" -"\n" -"# Last %sSearch Pattern:\n" -"~" -msgstr "" -"\n" -"# Dernier motif de recherche %s :\n" -"~" - msgid "E756: Spell checking is not enabled" msgstr "E756: La vrification orthographique n'est pas active" @@ -5271,22 +4638,6 @@ msgstr "E797: L'autocommande SpellFileMissing a effac le tampon" msgid "Warning: region %s not supported" msgstr "Alerte : rgion %s non supporte" -msgid "Sorry, no suggestions" -msgstr "Dsol, aucune suggestion" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "Dsol, seulement %ld suggestions" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "Remplacer \"%.*s\" par :" - -# DB - todo : l'intrt de traduire ce message m'chappe. -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - msgid "E752: No previous spell replacement" msgstr "E752: Pas de suggestion orthographique prcdente" @@ -5523,32 +4874,36 @@ msgid "Reading word file %s..." msgstr "Lecture de la liste de mots %s..." #, c-format -msgid "Duplicate /encoding= line ignored in %s line %d: %s" -msgstr "Ligne /encoding= en double ignore dans %s ligne %d : %s" +msgid "Conversion failure for word in %s line %ld: %s" +msgstr "chec de conversion du mot dans %s ligne %ld : %s" #, c-format -msgid "/encoding= line after word ignored in %s line %d: %s" -msgstr "Ligne /encoding= aprs des mots ignore dans %s ligne %d : %s" +msgid "Duplicate /encoding= line ignored in %s line %ld: %s" +msgstr "Ligne /encoding= en double ignore dans %s ligne %ld : %s" #, c-format -msgid "Duplicate /regions= line ignored in %s line %d: %s" -msgstr "Ligne /regions= en double ignore dans %s ligne %d : %s" +msgid "/encoding= line after word ignored in %s line %ld: %s" +msgstr "Ligne /encoding= aprs des mots ignore dans %s ligne %ld : %s" #, c-format -msgid "Too many regions in %s line %d: %s" -msgstr "Trop de rgions dans %s ligne %d : %s" +msgid "Duplicate /regions= line ignored in %s line %ld: %s" +msgstr "Ligne /regions= en double ignore dans %s ligne %ld : %s" #, c-format -msgid "/ line ignored in %s line %d: %s" -msgstr "Ligne / ignore dans %s ligne %d : %s" +msgid "Too many regions in %s line %ld: %s" +msgstr "Trop de rgions dans %s ligne %ld : %s" #, c-format -msgid "Invalid region nr in %s line %d: %s" -msgstr "Numro de rgion invalide dans %s ligne %d : %s" +msgid "/ line ignored in %s line %ld: %s" +msgstr "Ligne / ignore dans %s ligne %ld : %s" #, c-format -msgid "Unrecognized flags in %s line %d: %s" -msgstr "Drapeaux non reconnus dans %s ligne %d : %s" +msgid "Invalid region nr in %s line %ld: %s" +msgstr "Numro de rgion invalide dans %s ligne %ld : %s" + +#, c-format +msgid "Unrecognized flags in %s line %ld: %s" +msgstr "Drapeaux non reconnus dans %s ligne %ld : %s" #, c-format msgid "Ignored %d words with non-ASCII characters" @@ -5558,8 +4913,8 @@ msgid "E845: Insufficient memory, word list will be incomplete" msgstr "E845: mmoire insuffisante, liste de mots peut-tre incomplte" #, c-format -msgid "Compressed %d of %d nodes; %d (%d%%) remaining" -msgstr "%d noeuds compresss sur %d ; %d (%d%%) restants " +msgid "Compressed %s: %ld of %ld nodes; %ld (%ld%%) remaining" +msgstr "Compress %s : %ld/%ld noeuds ; %ld (%ld%%) restants" msgid "Reading back spell file..." msgstr "Relecture du fichier orthographique" @@ -5624,6 +4979,26 @@ msgstr "" msgid "E783: duplicate char in MAP entry" msgstr "E783: caractre dupliqu dans l'entre MAP" +msgid "Sorry, no suggestions" +msgstr "Dsol, aucune suggestion" + +#, c-format +msgid "Sorry, only %ld suggestions" +msgstr "Dsol, seulement %ld suggestions" + +#, c-format +msgid "Change \"%.*s\" to:" +msgstr "Remplacer \"%.*s\" par :" + +# DB - todo : l'intrt de traduire ce message m'chappe. +#, c-format +msgid " < \"%.*s\"" +msgstr " < \"%.*s\"" + +#, c-format +msgid "E390: Illegal argument: %s" +msgstr "E390: Argument invalide : %s" + msgid "No Syntax items defined for this buffer" msgstr "Aucun lment de syntaxe dfini pour ce tampon" @@ -5636,22 +5011,12 @@ msgstr "\"syntax conceal\" active" msgid "syntax conceal off" msgstr "\"syntax conceal\" dsactive" -#, c-format -msgid "E390: Illegal argument: %s" -msgstr "E390: Argument invalide : %s" - msgid "syntax case ignore" msgstr "syntaxe ignore la casse" msgid "syntax case match" msgstr "syntaxe respecte la casse" -msgid "syntax spell toplevel" -msgstr "contrle orthographique dans le texte sans groupe syntaxique" - -msgid "syntax spell notoplevel" -msgstr "pas de contrle orthographique dans le texte sans groupe syntaxique" - msgid "syntax spell default" msgstr "" "contrle orthographique dans le texte sans groupe syntaxique, sauf si @Spell/" @@ -5673,9 +5038,11 @@ msgstr "synchronisation sur les commentaires de type C" msgid "no syncing" msgstr "Aucune synchronisation" -# DB - Les deux messages qui suivent vont ensemble. +msgid "syncing starts at the first line" +msgstr "la synchronisation dbute la premire ligne" + msgid "syncing starts " -msgstr "La synchronisation dbute " +msgstr "la synchronisation dbute " msgid " lines before top line" msgstr " lignes avant la ligne du haut" @@ -5705,6 +5072,9 @@ msgstr "" msgid "E392: No such syntax cluster: %s" msgstr "E392: Aucune grappe de syntaxe %s" +msgid "from the first line" +msgstr " partir de la premire ligne" + msgid "minimal " msgstr "minimum " @@ -5744,7 +5114,7 @@ msgstr "E789: ']' manquant : %s" #, c-format msgid "E890: trailing char after ']': %s]%s" -msgstr "E890: Caractre surnumraire aprs ']': %s]%s" +msgstr "E890: Caractre surnumraire aprs ']' : %s]%s" #, c-format msgid "E398: Missing '=': %s" @@ -5805,76 +5175,17 @@ msgid "" msgstr "" " TOTAL NOMBRE MATCH PLUS LENT MOYEN NOM MOTIF" -msgid "E679: recursive loop loading syncolor.vim" -msgstr "E679: boucle rcursive lors du chargement de syncolor.vim" - -#, c-format -msgid "E411: highlight group not found: %s" -msgstr "E411: groupe de surbrillance introuvable : %s" - -#, c-format -msgid "E412: Not enough arguments: \":highlight link %s\"" -msgstr "E412: Trop peu d'arguments : \":highlight link %s\"" - -#, c-format -msgid "E413: Too many arguments: \":highlight link %s\"" -msgstr "E413: Trop d'arguments : \":highlight link %s\"" - -msgid "E414: group has settings, highlight link ignored" -msgstr "E414: le groupe a dj des attributs, lien de surbrillance ignor" - -#, c-format -msgid "E415: unexpected equal sign: %s" -msgstr "E415: signe gal inattendu : %s" - -#, c-format -msgid "E416: missing equal sign: %s" -msgstr "E416: '=' manquant : %s" - -#, c-format -msgid "E417: missing argument: %s" -msgstr "E417: argument manquant : %s" - -#, c-format -msgid "E418: Illegal value: %s" -msgstr "E418: Valeur invalide : %s" - -msgid "E419: FG color unknown" -msgstr "E419: Couleur de premier plan inconnue" - -msgid "E420: BG color unknown" -msgstr "E420: Couleur d'arrire-plan inconnue" - -#, c-format -msgid "E421: Color name or number not recognized: %s" -msgstr "E421: Nom ou numro de couleur non reconnu : %s" - -#, c-format -msgid "E422: terminal code too long: %s" -msgstr "E422: le code de terminal est trop long : %s" - -#, c-format -msgid "E423: Illegal argument: %s" -msgstr "E423: Argument invalide : %s" - -msgid "E424: Too many different highlighting attributes in use" -msgstr "" -"E424: Trop d'attributs de surbrillance diffrents en cours d'utilisation" - -msgid "E669: Unprintable character in group name" -msgstr "E669: Caractre non-imprimable dans un nom de groupe" - -msgid "W18: Invalid character in group name" -msgstr "W18: Caractre invalide dans un nom de groupe" - -msgid "E849: Too many highlight and syntax groups" -msgstr "E849: Trop de groupes de surbrillance et de syntaxe" - msgid "E555: at bottom of tag stack" -msgstr "E555: En bas de la pile de marqueurs" +msgstr "E555: En bas de la pile des marqueurs" msgid "E556: at top of tag stack" -msgstr "E556: Au sommet de la pile de marqueurs" +msgstr "E556: Au sommet de la pile des marqueurs" + +msgid "E986: cannot modify the tag stack within tagfunc" +msgstr "E986: impossible de modifier la pile des marqueurs dans tagfunc" + +msgid "E987: invalid return value from tagfunc" +msgstr "E987: tagfunc a retourn une valeur de retour invalide" msgid "E425: Cannot go before first matching tag" msgstr "E425: Impossible d'aller avant le premier marqueur correspondant" @@ -5883,12 +5194,6 @@ msgstr "E425: Impossible d'aller avant le premier marqueur correspondant" msgid "E426: tag not found: %s" msgstr "E426: Marqueur introuvable : %s" -msgid " # pri kind tag" -msgstr " # pri type marqueur" - -msgid "file\n" -msgstr "fichier\n" - msgid "E427: There is only one matching tag" msgstr "E427: Il n'y a qu'un marqueur correspondant" @@ -5913,6 +5218,12 @@ msgstr " Utilisation d'un marqueur avec une casse diffrente !" msgid "E429: File \"%s\" does not exist" msgstr "E429: Le fichier \"%s\" n'existe pas" +msgid " # pri kind tag" +msgstr " # pri type marqueur" + +msgid "file\n" +msgstr "fichier\n" + msgid "" "\n" " # TO tag FROM line in file/text" @@ -5928,9 +5239,6 @@ msgstr "Examen du fichier de marqueurs %s" msgid "E430: Tag file path truncated for %s\n" msgstr "E430: Chemin de fichiers de marqueurs tronqu pour %s\n" -msgid "Ignoring long line in tags file" -msgstr "Ignore longue ligne dans le fichier de marqueurs" - #, c-format msgid "E431: Format error in tags file \"%s\"" msgstr "E431: Erreur de format dans le fichier de marqueurs \"%s\"" @@ -5946,6 +5254,9 @@ msgstr "E432: Le fichier de marqueurs %s n'est pas ordonn" msgid "E433: No tags file" msgstr "E433: Aucun fichier de marqueurs" +msgid "Ignoring long line in tags file" +msgstr "Ignore longue ligne dans le fichier de marqueurs" + msgid "E434: Can't find tag pattern" msgstr "E434: Le motif de marqueur est introuvable" @@ -5989,6 +5300,9 @@ msgstr "" msgid "Cannot open $VIMRUNTIME/rgb.txt" msgstr "Impossible d'ouvrir $VIMRUNTIME/rgb.txt" +msgid "E279: Sorry, ++shell is not supported on this system" +msgstr "E279: ++shell non support sur cet environnement" + #, c-format msgid "Kill job in \"%s\"?" msgstr "Terminer la tche d'excution dans \"%s\"?" @@ -6082,7 +5396,7 @@ msgstr "E823: Ce n'est pas un fichier d'annulations : %s" #, c-format msgid "E832: Non-encrypted file has encrypted undo file: %s" -msgstr "E832: Fichier non-chiffr a un fichier d'annulations chiffr : %s" +msgstr "E832: Fichier non chiffr a un fichier d'annulations chiffr : %s" #, c-format msgid "E826: Undo file decryption failed: %s" @@ -6153,12 +5467,6 @@ msgstr "Rien annuler" msgid "number changes when saved" msgstr "numro modif. instant enregistr" -#, c-format -msgid "%ld second ago" -msgid_plural "%ld seconds ago" -msgstr[0] "il y a %ld seconde" -msgstr[1] "il y a %ld secondes" - msgid "E790: undojoin is not allowed after undo" msgstr "E790: undojoin n'est pas autoris aprs une annulation" @@ -6168,6 +5476,17 @@ msgstr "E439: la liste d'annulation est corrompue" msgid "E440: undo line missing" msgstr "E440: ligne d'annulation manquante" +msgid "" +"\n" +" Name Args Address Complete Definition" +msgstr "" +"\n" +" Nom Args Adresse Complet Dfinition" + +#, c-format +msgid "E174: Command already exists: add ! to replace it: %s" +msgstr "E174: La commande existe dj : ajoutez ! pour la redfinir : %s" + #, c-format msgid "E122: Function %s already exists, add ! to replace it" msgstr "E122: La fonction %s existe dj (ajoutez ! pour la remplacer)" @@ -6190,6 +5509,11 @@ msgstr "E125: Argument invalide : %s" msgid "E853: Duplicate argument name: %s" msgstr "E853: Nom d'argument dupliqu : %s" +msgid "E989: Non-default argument follows default argument" +msgstr "" +"E989: Argument sans valeur par dfaut ne peut pas suivre un argument avec " +"valeur par dfaut" + #, c-format msgid "E740: Too many arguments for function %s" msgstr "E740: Trop d'arguments pour la fonction %s" @@ -6228,16 +5552,8 @@ msgid "E699: Too many arguments" msgstr "E699: Trop d'arguments" #, c-format -msgid "E117: Unknown function: %s" -msgstr "E117: Fonction inconnue : %s" - -#, c-format -msgid "E933: Function was deleted: %s" -msgstr "E933: La fonction a t efface: %s" - -#, c-format -msgid "E119: Not enough arguments for function: %s" -msgstr "E119: La fonction %s n'a pas reu assez d'arguments" +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: Impossible d'utiliser une fonction comme mthode : %s" #, c-format msgid "E120: Using <SID> not in a script context: %s" @@ -6261,6 +5577,9 @@ msgstr "" "E884: Le nom de la fonction ne peut pas contenir le caractre deux-points : " "%s" +msgid "E454: function list was modified" +msgstr "E454: la liste de fonctions a t modifie" + #, c-format msgid "E123: Undefined function: %s" msgstr "E123: Fonction non dfinie : %s" @@ -6284,8 +5603,12 @@ msgid "E126: Missing :endfunction" msgstr "E126: Il manque :endfunction" #, c-format +msgid "W1001: Text found after :enddef: %s" +msgstr "W1001: Texte trouv aprs :enddef : %s" + +#, c-format msgid "W22: Text found after :endfunction: %s" -msgstr "W22: Texte trouv aprs :endfunction: %s" +msgstr "W22: Texte trouv aprs :endfunction : %s" #, c-format msgid "E707: Function name conflicts with variable: %s" @@ -6312,15 +5635,25 @@ msgid "E133: :return not inside a function" msgstr "E133: :return en dehors d'une fonction" #, c-format -msgid "E107: Missing parentheses: %s" -msgstr "E107: Parenthses manquantes : %s" - -#, c-format msgid "%s (%s, compiled %s)" msgstr "%s (%s, compil %s)" msgid "" "\n" +"MS-Windows 64-bit GUI/console version" +msgstr "" +"\n" +"Version interface graphique/console MS-Windows 64 bits" + +msgid "" +"\n" +"MS-Windows 32-bit GUI/console version" +msgstr "" +"\n" +"Version interface graphique/console MS-Windows 32 bits" + +msgid "" +"\n" "MS-Windows 64-bit GUI version" msgstr "" "\n" @@ -6454,18 +5787,15 @@ msgstr "avec interface graphique X11-neXtaw." msgid "with X11-Athena GUI." msgstr "avec interface graphique X11-Athena." +msgid "with Haiku GUI." +msgstr "avec interface graphique Haiku." + msgid "with Photon GUI." msgstr "avec interface graphique Photon." msgid "with GUI." msgstr "avec une interface graphique." -msgid "with Carbon GUI." -msgstr "avec interface graphique Carbon." - -msgid "with Cocoa GUI." -msgstr "avec interface graphique Cocoa." - msgid " Features included (+) or not (-):\n" msgstr " Fonctionnalits incluses (+) ou non (-) :\n" @@ -6476,16 +5806,16 @@ msgid " user vimrc file: \"" msgstr " fichier vimrc utilisateur : \"" msgid " 2nd user vimrc file: \"" -msgstr " 2me fichier vimrc utilisateur : \"" +msgstr " 2e fichier vimrc utilisateur : \"" msgid " 3rd user vimrc file: \"" -msgstr " 3me fichier vimrc utilisateur : \"" +msgstr " 3e fichier vimrc utilisateur : \"" msgid " user exrc file: \"" msgstr " fichier exrc utilisateur : \"" msgid " 2nd user exrc file: \"" -msgstr " 2me fichier exrc utilisateur : \"" +msgstr " 2e fichier exrc utilisateur : \"" msgid " system gvimrc file: \"" msgstr " fichier gvimrc systme : \"" @@ -6494,10 +5824,10 @@ msgid " user gvimrc file: \"" msgstr " fichier gvimrc utilisateur : \"" msgid "2nd user gvimrc file: \"" -msgstr "2me fichier gvimrc utilisateur : \"" +msgstr " 2e fichier gvimrc utilisateur : \"" msgid "3rd user gvimrc file: \"" -msgstr "3me fichier gvimrc utilisateur : \"" +msgstr " 3e fichier gvimrc utilisateur : \"" msgid " defaults file: \"" msgstr " fichier de valeurs par dfaut : \"" @@ -6598,6 +5928,87 @@ msgstr "tapez :help register<Entre> pour plus d'informations " msgid "menu Help->Sponsor/Register for information " msgstr "menu Aide->Sponsor/Enregistrement pour plus d'info" +# DB - Messages et les suivants : fichier .viminfo. +# Pas de majuscule ncessaire pour les messages d'aprs. +#, c-format +msgid "" +"\n" +"# %s History (newest to oldest):\n" +msgstr "" +"\n" +"# Historique %s (chronologie dcroissante) :\n" + +msgid "Command Line" +msgstr "ligne de commande" + +msgid "Search String" +msgstr "chane de recherche" + +msgid "Expression" +msgstr "expression" + +msgid "Input Line" +msgstr "ligne de saisie" + +msgid "Debug Line" +msgstr "Ligne de dbogage" + +# AB - Ne pas traduire le dollar. +# AB - Ce message n'est volontairement pas traduit. En effet, il fait partie +# d'un groupe de trois messages dans viminfo, dont deux ne sont pas soumis +# internationalisation. J'attends que les deux autres messages soient +# traduisibles pour traduire celui-ci. +# DB - TODO : Qu'en est-il prsent ? +msgid "" +"\n" +"# Last Substitute String:\n" +"$" +msgstr "" +"\n" +"# Dernires chanes de substitution :\n" +"$" + +msgid "Illegal register name" +msgstr "Nom de registre invalide" + +msgid "" +"\n" +"# Registers:\n" +msgstr "" +"\n" +"# Registres :\n" + +#, c-format +msgid "E574: Unknown register type %d" +msgstr "E574: Type de registre %d inconnu" + +msgid "" +"\n" +"# History of marks within files (newest to oldest):\n" +msgstr "" +"\n" +"# Historique des marques dans les fichiers (les plus rcentes en premier) :\n" + +msgid "" +"\n" +"# File marks:\n" +msgstr "" +"\n" +"# Marques dans le fichier :\n" + +msgid "" +"\n" +"# Jumplist (newest first):\n" +msgstr "" +"\n" +"# Liste de sauts (le plus rcent en premier) :\n" + +msgid "Missing '>'" +msgstr "'>' manquant" + +msgid "E195: Cannot open viminfo file for reading" +msgstr "E195: Impossible d'ouvrir le viminfo en lecture" + msgid "Already only one window" msgstr "Il n'y a dj plus qu'une fentre" @@ -6624,13 +6035,6 @@ msgstr "" msgid "E445: Other window contains changes" msgstr "E445: Les modifications de l'autre fentre n'ont pas t enregistres" -msgid "E446: No file name under cursor" -msgstr "E446: Aucun nom de fichier sous le curseur" - -#, c-format -msgid "E447: Can't find file \"%s\" in path" -msgstr "E447: Le fichier \"%s\" est introuvable dans 'path'" - #, c-format msgid "E799: Invalid ID: %ld (must be greater than or equal to 1)" msgstr "E799: ID invalide : %ld (doit tre plus grand ou gal 1)" @@ -6639,9 +6043,6 @@ msgstr "E799: ID invalide : %ld (doit tre plus grand ou gal 1)" msgid "E801: ID already taken: %ld" msgstr "E801: ID dj pris: %ld" -msgid "List or number required" -msgstr "Liste ou nombre requis" - #, c-format msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" msgstr "E802: ID invalide : %ld (doit tre plus grand ou gal 1)" @@ -6691,7 +6092,356 @@ msgstr "Erreur de gvimext.dll" msgid "Path length too long!" msgstr "Le chemin est trop long !" -# msgstr "--Pas de lignes dans le tampon--" +#, c-format +msgid "E121: Undefined variable: %s" +msgstr "E121: Variable non dfinie : %s" + +#, c-format +msgid "E121: Undefined variable: %c:%s" +msgstr "E121: Variable non dfinie : %c:%s" + +msgid "E476: Invalid command" +msgstr "E476: Commande invalide" + +#, c-format +msgid "E476: Invalid command: %s" +msgstr "E476: Commande invalide : %s" + +msgid "E710: List value has more items than targets" +msgstr "E710: La Liste a plus d'lments que la destination" + +msgid "E711: List value does not have enough items" +msgstr "E711: La Liste n'a pas assez d'lments" + +msgid "E719: Cannot slice a Dictionary" +msgstr "E719: Utilisation de [:] impossible avec un Dictionnaire" + +msgid "" +"E856: \"assert_fails()\" second argument must be a string or a list with one " +"or two strings" +msgstr "" +"E856: le second argument d'\"assert_fails()\" doit tre une chane ou une " +"liste avec une ou deux chanes" + +#, c-format +msgid "E1100: Missing :var: %s" +msgstr "E1100: Il manque :var: %s" + +#, c-format +msgid "E1001: Variable not found: %s" +msgstr "E1001: Variable introuvable: %s" + +#, c-format +msgid "E1002: Syntax error at %s" +msgstr "E1002: Erreur de syntaxe dans %s" + +msgid "E1003: Missing return value" +msgstr "E1003: Valeur de retour manquante" + +#, c-format +msgid "E1004: White space required before and after '%s'" +msgstr "E1004: Espace requise avant et aprs '%s'" + +msgid "E1005: Too many argument types" +msgstr "E1005: Trop de types d'arguments" + +#, c-format +msgid "E1006: %s is used as an argument" +msgstr "E1006: %s est utilis comme argument" + +msgid "E1007: Mandatory argument after optional argument" +msgstr "E1007: Argument obligatoire aprs un argument optionnel" + +msgid "E1008: Missing <type>" +msgstr "E1008: <type> manquant" + +msgid "E1009: Missing > after type" +msgstr "E1009: Il manque > aprs type" + +#, c-format +msgid "E1010: Type not recognized: %s" +msgstr "E1010: Type non reconnu : %s" + +#, c-format +msgid "E1011: Name too long: %s" +msgstr "E1011: Nom trop long : %s" + +#, c-format +msgid "E1012: Type mismatch; expected %s but got %s" +msgstr "E1012: Type inconsistant ; attendu %s mais reu %s" + +#, c-format +msgid "E1013: Argument %d: type mismatch, expected %s but got %s" +msgstr "E1013: Argument %d : type inconsistant, attendu %s mais reu %s" + +#, c-format +msgid "E1014: Invalid key: %s" +msgstr "E1014: cl invalide : %s" + +#, c-format +msgid "E1015: Name expected: %s" +msgstr "E1015: Nom attendu : %s" + +#, c-format +msgid "E1016: Cannot declare a %s variable: %s" +msgstr "E1016: Impossible de dclarer variable %s : %s" + +#, c-format +msgid "E1016: Cannot declare an environment variable: %s" +msgstr "E1016: Impossible de dclarer une variable d'environnement : %s" + +#, c-format +msgid "E1017: Variable already declared: %s" +msgstr "E1017: Variable dj dclare : %s" + +#, c-format +msgid "E1018: Cannot assign to a constant: %s" +msgstr "E1018: Impossible d'assigner une constante : %s" + +msgid "E1019: Can only concatenate to string" +msgstr "E1019: Seules les chanes peuvent tre concatnes" + +#, c-format +msgid "E1020: Cannot use an operator on a new variable: %s" +msgstr "" +"E1020: Impossible d'utiliser un oprateur sur une nouvelle variable : %s" + +msgid "E1021: Const requires a value" +msgstr "E1021: Const ncessite une valeur" + +msgid "E1022: Type or initialization required" +msgstr "E1022: Type ou initialisation requis" + +#, c-format +msgid "E1023: Using a Number as a Bool: %d" +msgstr "E1023: Utilisation d'un Nombre comme un Boolen : %d" + +msgid "E1024: Using a Number as a String" +msgstr "E1024: Utilisation d'un Nombre comme une Chane" + +msgid "E1025: Using } outside of a block scope" +msgstr "E1025: Utilisation de } hors d'un bloc de porte" + +msgid "E1026: Missing }" +msgstr "E1026: } manquant" + +msgid "E1027: Missing return statement" +msgstr "E1027: commande 'return' manquante" + +msgid "E1028: Compiling :def function failed" +msgstr "E1028: Compilation de function :def a chou" + +#, c-format +msgid "E1029: Expected %s but got %s" +msgstr "E1029: %s attendu mais %s reu" + +#, c-format +msgid "E1030: Using a String as a Number: \"%s\"" +msgstr "E1030: Utilisation d'une Chane comme Nombre : \"%s\"" + +msgid "E1031: Cannot use void value" +msgstr "E1031: Impossible d'utiliser une valeur 'void'" + +msgid "E1032: Missing :catch or :finally" +msgstr "E1032: :catch ou :finally manquant" + +#, c-format +msgid "E1034: Cannot use reserved name %s" +msgstr "E1034: Impossible d'utiliser le nom rserv %s" + +msgid "E1035: % requires number arguments" +msgstr "E1035: % ncessite des arguments numriques" + +#, c-format +msgid "E1036: %c requires number or float arguments" +msgstr "E1036: %c ncessite des arguments numriques ou flottants" + +#, c-format +msgid "E1037: Cannot use \"%s\" with %s" +msgstr "E1037: Impossible d'utiliser \"%s\" avec %s" + +msgid "E1038: \"vim9script\" can only be used in a script" +msgstr "E1038: \"vim9script\" ne peut tre utilis que dans un script" + +msgid "E1039: \"vim9script\" must be the first command in a script" +msgstr "E1039: \"vim9script\" doit tre la premire commande dans un script" + +msgid "E1040: Cannot use :scriptversion after :vim9script" +msgstr "E1040: Impossible d'utiliser :scriptversion aprs :vim9script" + +#, c-format +msgid "E1041: Redefining script item %s" +msgstr "E1041: Redfinition de l'lment de script %s" + +msgid "E1042: Export can only be used in vim9script" +msgstr "E1042: Export ne peut tre utilis que dans vim9script" + +msgid "E1043: Invalid command after :export" +msgstr "E1043: Commande invalide aprs :export" + +msgid "E1044: Export with invalid argument" +msgstr "E1044: Export avec argument invalide" + +msgid "E1045: Missing \"as\" after *" +msgstr "E1045: \"as\" manquant aprs *" + +msgid "E1046: Missing comma in import" +msgstr "E1046: virgule manquante dans import" + +msgid "E1047: Syntax error in import" +msgstr "E1047: Erreur de syntaxe dans import" + +#, c-format +msgid "E1048: Item not found in script: %s" +msgstr "E1048: lment non trouv dans le script : %s" + +#, c-format +msgid "E1049: Item not exported in script: %s" +msgstr "E1049: lment non export dans le script : %s" + +#, c-format +msgid "E1052: Cannot declare an option: %s" +msgstr "E1052: Impossible de dclarer un option : %s" + +#, c-format +msgid "E1053: Could not import \"%s\"" +msgstr "E1053: Impossible d'importer \"%s\"" + +#, c-format +msgid "E1054: Variable already declared in the script: %s" +msgstr "E1054: Variable dj dclare dans le script : %s" + +msgid "E1055: Missing name after ..." +msgstr "E1055: Nom manquant aprs ..." + +#, c-format +msgid "E1056: Expected a type: %s" +msgstr "E1056: Type attendu : %s" + +msgid "E1057: Missing :enddef" +msgstr "E1057: :enddef manquant" + +msgid "E1058: Function nesting too deep" +msgstr "E1058: Fonctions trop imbriques" + +#, c-format +msgid "E1059: No white space allowed before colon: %s" +msgstr "E1059: Espace interdite avant les deux-points : %s" + +#, c-format +msgid "E1060: Expected dot after name: %s" +msgstr "E1060: point attendu aprs le nom : %s" + +#, c-format +msgid "E1061: Cannot find function %s" +msgstr "E1061: Impossible de trouver la fonction : %s" + +msgid "E1062: Cannot index a Number" +msgstr "E1062: Impossible d'indexer un Nombre" + +msgid "E1063: Type mismatch for v: variable" +msgstr "E1063: Type inconsistant pour la variable v:" + +#, c-format +msgid "E1066: Cannot declare a register: %s" +msgstr "E1066: Impossible dclarer un registre : %s" + +#, c-format +msgid "E1067: Separator mismatch: %s" +msgstr "E1067: Sparateur inconsistant : %s" + +#, c-format +msgid "E1068: No white space allowed before '%s'" +msgstr "E1068: Espace interdite avant '%s'" + +#, c-format +msgid "E1069: White space required after '%s'" +msgstr "E1069: Espace interdite aprs '%s'" + +msgid "E1070: Missing \"from\"" +msgstr "E1070: \"from\" manquant" + +msgid "E1071: Invalid string after \"from\"" +msgstr "E1071: Chane invalide aprs \"from\"" + +#, c-format +msgid "E1072: Cannot compare %s with %s" +msgstr "E1072: Impossible de comparer %s avec %s" + +#, c-format +msgid "E1073: Name already defined: %s" +msgstr "E1073: Nom dj dfini : %s" + +msgid "E1074: No white space allowed after dot" +msgstr "E1074: Espace interdite aprs un point" + +#, c-format +msgid "E1084: Cannot delete Vim9 script function %s" +msgstr "E1084: Impossible de supprimer la fonction %s du script vim9" + +msgid "E1086: Cannot use :function inside :def" +msgstr "E1086: Impossible d'utiliser :function dans :def" + +msgid "E1119: Cannot change list item" +msgstr "E1119: Impossible de changer un lment de liste" + +msgid "E1120: Cannot change dict" +msgstr "E1120: Impossible de changer un dictionnaire" + +msgid "E1121: Cannot change dict item" +msgstr "E1121: Impossible de changer un lment de dictionnaire" + +#, c-format +msgid "E1122: Variable is locked: %s" +msgstr "E1122: Variable verrouille : %s" + +#, c-format +msgid "E1123: Missing comma before argument: %s" +msgstr "E1123: Virgule manquante avant un argument : %s" + +msgid "E1127: Missing name after dot" +msgstr "E1127: Nom manquant aprs un point" + +msgid "E1128: } without {" +msgstr "E1128: } sans {" + +msgid "E1130: Cannot add to null list" +msgstr "E1130: Impossible d'ajouter une liste nulle" + +msgid "E1131: Cannot add to null blob" +msgstr "E1131: Impossible d'ajouter un Blob nul" + +msgid "E1132: Missing function argument" +msgstr "E1132: Argument de fonction manquant" + +msgid "E1133: Cannot extend a null dict" +msgstr "E1133: Impossible d'tendre un dictionnaire nul" + +#, c-format +msgid "E1135: Using a String as a Bool: \"%s\"" +msgstr "E1135: Utilisation d'une Chane comme un Boolen : \"%s\"" + +msgid "E1138: Using a Bool as a Number" +msgstr "E1138: Utilisation d'un Boolen comme un Nombre" + +msgid "E1141: Indexable type required" +msgstr "E1141: Type indexable requis" + +msgid "E1142: Non-empty string required" +msgstr "E1142: Chane non vide requise" + +#, c-format +msgid "E1143: Empty expression: \"%s\"" +msgstr "E1143: Expression vide : \"%s\"" + +#, c-format +msgid "E1146: Command not recognized: %s" +msgstr "E1146: Commande non reconnue : %s" + +#, c-format +msgid "E1148: Cannot index a %s" +msgstr "E1148: Impossible d'indexer %s" + # DB - todo : ou encore : msgstr "--Aucune ligne dans le tampon--" msgid "--No lines in buffer--" msgstr "--Le tampon est vide--" @@ -6717,9 +6467,21 @@ msgstr "" msgid "E171: Missing :endif" msgstr "E171: :endif manquant" +msgid "E603: :catch without :try" +msgstr "E603: :catch sans :try" + +msgid "E606: :finally without :try" +msgstr "E606: :finally sans :try" + +msgid "E607: multiple :finally" +msgstr "E607: Il ne peut y avoir qu'un seul :finally" + msgid "E600: Missing :endtry" msgstr "E600: :endtry manquant" +msgid "E602: :endtry without :try" +msgstr "E602: :endtry sans :try" + msgid "E170: Missing :endwhile" msgstr "E170: :endwhile manquant" @@ -6760,9 +6522,6 @@ msgstr "E685: Erreur interne : %s" msgid "Interrupted" msgstr "Interrompu" -msgid "E14: Invalid address" -msgstr "E14: Adresse invalide" - msgid "E474: Invalid argument" msgstr "E474: Argument invalide" @@ -6771,6 +6530,10 @@ msgid "E475: Invalid argument: %s" msgstr "E475: Argument invalide : %s" #, c-format +msgid "E983: Duplicate argument: %s" +msgstr "E983: Argument dupliqu : %s" + +#, c-format msgid "E475: Invalid value for argument %s" msgstr "E475: Valeur d'argument invalide : %s" @@ -6785,13 +6548,13 @@ msgstr "E15: Expression invalide : %s" msgid "E16: Invalid range" msgstr "E16: Plage invalide" -msgid "E476: Invalid command" -msgstr "E476: Commande invalide" - #, c-format msgid "E17: \"%s\" is a directory" msgstr "E17: \"%s\" est un rpertoire" +msgid "E756: Spell checking is not possible" +msgstr "E756: La vrification orthographique n'est pas possible" + #, c-format msgid "E364: Library call failed for \"%s()\"" msgstr "E364: L'appel la bibliothque a chou pour \"%s()\"" @@ -6830,8 +6593,8 @@ msgstr "E25: L'interface graphique n'a pas t compile dans cette version" msgid "E26: Hebrew cannot be used: Not enabled at compile time\n" msgstr "E26: Le support de l'hbreu n'a pas t compil dans cette version\n" -msgid "E27: Farsi cannot be used: Not enabled at compile time\n" -msgstr "E27: Le support du farsi n'a pas t compil dans cette version\n" +msgid "E27: Farsi support has been removed\n" +msgstr "E27: support du farsi a t supprim\n" msgid "E800: Arabic cannot be used: Not enabled at compile time\n" msgstr "E800: Le support de l'arabe n'a pas t compil dans cette version\n" @@ -6938,6 +6701,9 @@ msgstr "E44: L'automate de regexp est corrompu" msgid "E45: 'readonly' option is set (add ! to override)" msgstr "E45: L'option 'readonly' est active (ajoutez ! pour passer outre)" +msgid "E995: Cannot modify existing variable" +msgstr "E995: Impossible de modifier une variable existante" + #, c-format msgid "E46: Cannot change read-only variable \"%s\"" msgstr "E46: La variable \"%s\" est en lecture seule" @@ -7015,6 +6781,10 @@ msgstr "E77: Trop de noms de fichiers" msgid "E488: Trailing characters" msgstr "E488: Caractres surnumraires" +#, c-format +msgid "E488: Trailing characters: %s" +msgstr "E488: Caractres surnumraires : %s" + msgid "E78: Unknown mark" msgstr "E78: Marque inconnue" @@ -7036,6 +6806,26 @@ msgstr "E939: Quantificateur positif requis" msgid "E81: Using <SID> not in a script context" msgstr "E81: <SID> utilis en dehors d'un script" +#, c-format +msgid "E107: Missing parentheses: %s" +msgstr "E107: Parenthses manquantes : %s" + +#, c-format +msgid "E720: Missing colon in Dictionary: %s" +msgstr "E720: Il manque ':' dans le Dictionnaire %s" + +#, c-format +msgid "E721: Duplicate key in Dictionary: \"%s\"" +msgstr "E721: Cl duplique dans le Dictionnaire : %s" + +#, c-format +msgid "E722: Missing comma in Dictionary: %s" +msgstr "E722: Il manque une virgule dans le Dictionnaire : %s" + +#, c-format +msgid "E723: Missing end of Dictionary '}': %s" +msgstr "E723: Il manque '}' la fin du Dictionnaire : %s" + msgid "E449: Invalid expression received" msgstr "E449: Expression invalide reue" @@ -7188,7 +6978,7 @@ msgid "list index out of range" msgstr "index de liste hors limites" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "erreur interne : accs un lment %d de liste a chou" msgid "slice step cannot be zero" @@ -7201,7 +6991,7 @@ msgstr "" "dcoupage en tranche tendu " #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "erreur interne : pas d'lment %d de liste vim" msgid "internal error: not enough list items" @@ -7312,19 +7102,19 @@ msgstr "excution du code a chou" msgid "E858: Eval did not return a valid python object" msgstr "E858: Eval n'a pas retourn un objet python valide" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: Conversion d'objet python une valeur de vim a chou" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "impossible de convertir %s un dictionnaire vim" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "impossible de convertir %s une liste de vim" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "impossible de convertir %s une structure de vim" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/ga.po b/src/nvim/po/ga.po index bad01d592a..abbb9c6583 100644 --- a/src/nvim/po/ga.po +++ b/src/nvim/po/ga.po @@ -2806,9 +2806,6 @@ msgstr "vimOption anaithnid" msgid "keyboard interrupt" msgstr "idirbhriseadh marchlir" -msgid "vim error" -msgstr "earrid vim" - msgid "cannot create buffer/window command: object is being deleted" msgstr "n fidir ord maolin/fuinneoige a chruth: rad scriosadh" @@ -3132,8 +3129,8 @@ msgstr "-W <aschur>\tScrobh gach ord clscrofa sa chomhad <aschur>" msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\tCuir comhaid chriptithe in eagar" -msgid "-display <display>\tConnect vim to this particular X-server" -msgstr "-display <freastala>\tNasc vim leis an bhfreastala-X seo" +msgid "-display <display>\tConnect Vim to this particular X-server" +msgstr "-display <freastala>\tNasc Vim leis an bhfreastala-X seo" msgid "-X\t\t\tDo not connect to X server" msgstr "-X\t\t\tN naisc leis an bhfreastala X" @@ -3215,11 +3212,11 @@ msgstr "" "\n" "Argint ar eolas do gvim (leagan Athena):\n" -msgid "-display <display>\tRun vim on <display>" -msgstr "-display <scilen>\tRith vim ar <scilen>" +msgid "-display <display>\tRun Vim on <display>" +msgstr "-display <scilen>\tRith Vim ar <scilen>" -msgid "-iconic\t\tStart vim iconified" -msgstr "-iconic\t\tTosaigh vim sa mhd oslaghdaithe" +msgid "-iconic\t\tStart Vim iconified" +msgstr "-iconic\t\tTosaigh Vim sa mhd oslaghdaithe" msgid "-background <color>\tUse <color> for the background (also: -bg)" msgstr "-background <dath>\tBain sid as <dath> don chlra (-bg fosta)" @@ -3270,8 +3267,8 @@ msgstr "" "\n" "Argint ar eolas do gvim (leagan GTK+):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" -msgstr "-display <scilen>\tRith vim ar <scilen> (fosta: --display)" +msgid "-display <display>\tRun Vim on <display> (also: --display)" +msgstr "-display <scilen>\tRith Vim ar <scilen> (fosta: --display)" msgid "--role <role>\tSet a unique role to identify the main window" msgstr "--role <rl>\tSocraigh rl sainiil chun an phromhfhuinneog a aithint" @@ -4375,8 +4372,6 @@ msgstr "E538: Gan tacaocht luiche" msgid "E540: Unclosed expression sequence" msgstr "E540: Seicheamh gan dnadh" -msgid "E541: too many items" -msgstr "E541: an iomarca mreanna" msgid "E542: unbalanced groups" msgstr "E542: grpa neamhchothromaithe" @@ -6408,8 +6403,8 @@ msgstr "E799: Aitheantas neamhbhail: %ld (n mr d a bheith >= 1)" msgid "E801: ID already taken: %ld" msgstr "E801: Aitheantas in sid cheana: %ld" -msgid "List or number required" -msgstr "T g le liosta n uimhir" +msgid "E290: List or number required" +msgstr "E290: T g le liosta n uimhir" #, c-format msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" @@ -6952,7 +6947,7 @@ msgstr "innacs liosta as raon" #. No more suitable format specifications in python-2.3 #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "earrid inmhenach: nl aon fhil ar mhr %d sa liosta vim" msgid "slice step cannot be zero" @@ -6963,7 +6958,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "iarracht ar sheicheamh nos m n %d a shannadh do shlisne fadaithe" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "earrid inmhenach: nl aon mhr %d sa liosta vim" msgid "internal error: not enough list items" @@ -7072,19 +7067,19 @@ msgstr "norbh fhidir an cd a chur ar sil" msgid "E858: Eval did not return a valid python object" msgstr "E858: N bhfuarthas rad bail python ar ais Eval" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: Norbh fhidir luach vim a dhanamh as an rad python" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "n fidir foclir vim a dhanamh as %s" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "n fidir liosta vim a dhanamh as %s" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "n fidir struchtr vim a dhanamh as %s" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/ja.euc-jp.po b/src/nvim/po/ja.euc-jp.po index e2cf68f016..5dda7c59f5 100644 --- a/src/nvim/po/ja.euc-jp.po +++ b/src/nvim/po/ja.euc-jp.po @@ -1,4 +1,3 @@ - # Japanese translation for Vim # # Do ":help uganda" in Vim to read copying and usage conditions. @@ -58,8 +57,9 @@ msgstr "E83: ХåեǤʤΤǡ¾ΤѤޤ..." msgid "E931: Buffer cannot be registered" msgstr "E931: ХåեϿǤޤ" -msgid "E937: Attempt to delete a buffer that is in use" -msgstr "E937: ΥХåե褦Ȼߤޤ" +#, c-format +msgid "E937: Attempt to delete a buffer that is in use: %s" +msgstr "E937: ΥХåե褦Ȼߤޤ: %s" msgid "E515: No buffers were unloaded" msgstr "E515: 줿ХåեϤޤ" @@ -248,6 +248,9 @@ msgstr "E904: call 3ܤΰϥꥹȷǤʤФʤޤ" msgid "E905: received unknown command: %s" msgstr "E905: ̤ΤΥޥɤޤ: %s" +msgid "E906: not an open channel" +msgstr "E906: ƤʤͥǤ" + #, c-format msgid "E630: %s(): write while not connected" msgstr "E630: %s(): ³֤ǽߤޤ" @@ -264,9 +267,6 @@ msgid "E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" msgstr "" "E912: raw nl ⡼ɤΥͥ ch_evalexpr()/ch_sendexpr() ϻȤޤ" -msgid "E906: not an open channel" -msgstr "E906: ƤʤͥǤ" - msgid "E920: _io file requires _name to be set" msgstr "E920: _io ե _name ꤬ɬפǤ" @@ -476,24 +476,12 @@ msgstr "%d ܤγ" msgid "E18: Unexpected characters in :let" msgstr "E18: ͽʸ :let ˤޤ" -#, c-format -msgid "E121: Undefined variable: %s" -msgstr "E121: ̤ѿǤ: %s" - msgid "E111: Missing ']'" msgstr "E111: ']' Ĥޤ" msgid "E719: Cannot use [:] with a Dictionary" msgstr "E719: [:] Ȥ߹碌ƤϻȤޤ" -#, c-format -msgid "E734: Wrong variable type for %s=" -msgstr "E734: ۤʤäѿǤ %s=" - -#, c-format -msgid "E461: Illegal variable name: %s" -msgstr "E461: ѿ̾Ǥ: %s" - msgid "E806: using Float as a String" msgstr "E806: ưʸȤưäƤޤ" @@ -548,6 +536,9 @@ msgstr "E804: '%' ưȤ߹碌ƤϻȤޤ" msgid "E110: Missing ')'" msgstr "E110: ')' Ĥޤ" +msgid "E260: Missing name after ->" +msgstr "E260: -> θ̾ޤ" + msgid "E695: Cannot index a Funcref" msgstr "E695: ؿȷϥǥåǤޤ" @@ -683,25 +674,13 @@ msgstr "E736: ˤ̵Ǥ" msgid "E694: Invalid operation for Funcrefs" msgstr "E694: ؿȷˤ̵Ǥ" -msgid "map() argument" -msgstr "map() ΰ" - -msgid "filter() argument" -msgstr "filter() ΰ" - #, c-format msgid "E686: Argument of %s must be a List" msgstr "E686: %s ΰϥꥹȷǤʤФʤޤ" -msgid "E928: String required" -msgstr "E928: ʸɬפǤ" - msgid "E808: Number or Float required" msgstr "E808: ͤưɬפǤ" -msgid "add() argument" -msgstr "add() ΰ" - msgid "E785: complete() can only be used in Insert mode" msgstr "E785: complete() ⡼ɤǤѤǤޤ" @@ -709,11 +688,6 @@ msgid "&Ok" msgstr "&Ok" #, c-format -msgid "+-%s%3ld line: " -msgid_plural "+-%s%3ld lines: " -msgstr[0] "+-%s%3ld : " - -#, c-format msgid "E700: Unknown function: %s" msgstr "E700: ̤ΤδؿǤ: %s" @@ -733,15 +707,9 @@ msgstr "" msgid "called inputrestore() more often than inputsave()" msgstr "inputrestore() inputsave() ¿ƤФޤ" -msgid "insert() argument" -msgstr "insert() ΰ" - msgid "E786: Range not allowed" msgstr "E786: ϰϻϵĤƤޤ" -msgid "E916: not a valid job" -msgstr "E916: ͭʥ֤ǤϤޤ" - msgid "E701: Invalid type for len()" msgstr "E701: len() ˤ̵ʷǤ" @@ -774,35 +742,13 @@ msgstr "E941: СϤǤ˳ϤƤޤ" msgid "E942: +clientserver feature not available" msgstr "E942: +clientserver ǽ̵ˤʤäƤޤ" -msgid "remove() argument" -msgstr "remove() ΰ" - # Added at 10-Mar-2004. msgid "E655: Too many symbolic links (cycle?)" msgstr "E655: ܥå¿ޤ (۴ĤƤǽޤ)" -msgid "reverse() argument" -msgstr "reverse() ΰ" - msgid "E258: Unable to send to client" msgstr "E258: 饤Ȥ뤳ȤǤޤ" -#, c-format -msgid "E927: Invalid action: '%s'" -msgstr "E927: ̵Ǥ: %s" - -msgid "sort() argument" -msgstr "sort() ΰ" - -msgid "uniq() argument" -msgstr "uniq() ΰ" - -msgid "E702: Sort compare function failed" -msgstr "E702: ȤӴؿԤޤ" - -msgid "E882: Uniq compare function failed" -msgstr "E882: Uniq ӴؿԤޤ" - msgid "(Invalid)" msgstr "(̵)" @@ -810,9 +756,6 @@ msgstr "(̵)" msgid "E935: invalid submatch number: %d" msgstr "E935: ̵ʥ֥ޥåֹ: %d" -msgid "E677: Error writing temp file" -msgstr "E677: ե˥顼ȯޤ" - msgid "E921: Invalid callback argument" msgstr "E921: ̵ʥХåǤ" @@ -860,73 +803,6 @@ msgstr "E135: *ե륿* autocommandϸߤΥХåեѹƤϤޤ" msgid "[No write since last change]\n" msgstr "[Ǹѹ¸Ƥޤ]\n" -#, c-format -msgid "%sviminfo: %s in line: " -msgstr "%sviminfo: %s : " - -msgid "E136: viminfo: Too many errors, skipping rest of file" -msgstr "E136: viminfo: 顼¿Τǡʹߤϥåפޤ" - -#, c-format -msgid "Reading viminfo file \"%s\"%s%s%s" -msgstr "viminfoե \"%s\"%s%s%s ɹ" - -msgid " info" -msgstr " " - -msgid " marks" -msgstr " ޡ" - -msgid " oldfiles" -msgstr " ե뷲" - -msgid " FAILED" -msgstr " " - -#, c-format -msgid "E137: Viminfo file is not writable: %s" -msgstr "E137: viminfoե뤬ߤǤޤ: %s" - -#, c-format -msgid "E929: Too many viminfo temp files, like %s!" -msgstr "E929: viminfoե뤬¿ޤ! : %s" - -#, c-format -msgid "E138: Can't write viminfo file %s!" -msgstr "E138: viminfoե %s ¸Ǥޤ!" - -#, 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 ̾ѹǤޤ!" - -#, c-format -msgid "# This viminfo file was generated by Vim %s.\n" -msgstr "# viminfo ե Vim %s ˤäޤ.\n" - -msgid "" -"# You may edit it if you're careful!\n" -"\n" -msgstr "" -"# ѹݤˤϽʬդƤ!\n" -"\n" - -msgid "# Value of 'encoding' when this file was written\n" -msgstr "# Υե뤬줿 'encoding' \n" - -msgid "Illegal starting char" -msgstr "ƬʸǤ" - -msgid "" -"\n" -"# Bar lines, copied verbatim:\n" -msgstr "" -"\n" -"# '|' ǻϤޤԤΡʸ̤Υԡ:\n" - msgid "Save As" msgstr "̾¸" @@ -942,7 +818,7 @@ msgstr "¸Υե \"%s\" ޤ?" #, c-format msgid "Swap file \"%s\" exists, overwrite anyway?" -msgstr "åץե \"%s\" ¸ߤޤ. ޤ?" +msgstr "åץե \"%s\" ¸ߤޤޤ?" #, c-format msgid "E768: Swap file exists: %s (:silent! overrides)" @@ -1032,15 +908,6 @@ msgstr "ѥƤιԤǸĤޤ: %s" msgid "Pattern not found: %s" msgstr "ѥϸĤޤǤ: %s" -msgid "" -"\n" -"# Last Substitute String:\n" -"$" -msgstr "" -"\n" -"# Ǹִ줿ʸ:\n" -"$" - msgid "E478: Don't panic!" msgstr "E478: ƤʤǤ" @@ -1207,18 +1074,6 @@ msgid "E666: compiler not supported: %s" msgstr "E666: ΥѥˤбƤޤ: %s" #, c-format -msgid "Searching for \"%s\" in \"%s\"" -msgstr "\"%s\" \"%s\" 鸡" - -#, c-format -msgid "Searching for \"%s\"" -msgstr "\"%s\" " - -#, c-format -msgid "not found in '%s': \"%s\"" -msgstr "'%s' ˤϤޤ: \"%s\"" - -#, c-format msgid "W20: Required python version 2.x not supported, ignoring file: %s" msgstr "W20: ᤵ줿python 2.xбƤޤե̵뤷ޤ: %s" @@ -1226,61 +1081,6 @@ msgstr "W20: ᤵ줿python 2.xбƤޤե̵뤷ޤ: %s" msgid "W21: Required python version 3.x not supported, ignoring file: %s" msgstr "W21: ᤵ줿python 3.xбƤޤե̵뤷ޤ: %s" -msgid "Source Vim script" -msgstr "VimץȤμ" - -#, c-format -msgid "Cannot source a directory: \"%s\"" -msgstr "ǥ쥯ȥϼޤ: \"%s\"" - -#, c-format -msgid "could not source \"%s\"" -msgstr "\"%s\" ޤ" - -#, c-format -msgid "line %ld: could not source \"%s\"" -msgstr " %ld: \"%s\" ޤ" - -#, c-format -msgid "sourcing \"%s\"" -msgstr "\"%s\" " - -#, c-format -msgid "line %ld: sourcing \"%s\"" -msgstr " %ld: %s " - -#, c-format -msgid "finished sourcing %s" -msgstr "%s μλ" - -#, c-format -msgid "continuing in %s" -msgstr "%s μ¹Ԥ³Ǥ" - -msgid "modeline" -msgstr "⡼ɹ" - -msgid "--cmd argument" -msgstr "--cmd " - -msgid "-c argument" -msgstr "-c " - -msgid "environment variable" -msgstr "Ķѿ" - -msgid "error handler" -msgstr "顼ϥɥ" - -msgid "W15: Warning: Wrong line separator, ^M may be missing" -msgstr "W15: ٹ: ԶڤǤ. ^M ʤΤǤ礦" - -msgid "E167: :scriptencoding used outside of a sourced file" -msgstr "E167: :scriptencoding ץȰʳǻѤޤ" - -msgid "E168: :finish used outside of a sourced file" -msgstr "E168: :finish ץȰʳǻѤޤ" - #, c-format msgid "Current %slanguage: \"%s\"" msgstr "ߤ %s: \"%s\"" @@ -1471,15 +1271,6 @@ msgstr "E930: execute() Ǥ :redir ϻȤޤ" msgid "Save Redirection" msgstr "쥯Ȥ¸ޤ" -msgid "Save View" -msgstr "ӥ塼¸ޤ" - -msgid "Save Session" -msgstr "å¸ޤ" - -msgid "Save Setup" -msgstr "¸ޤ" - #, c-format msgid "E739: Cannot create directory: %s" msgstr "E739: ǥ쥯ȥǤޤ: %s" @@ -1527,9 +1318,6 @@ msgstr "" msgid "E500: Evaluates to an empty string" msgstr "E500: ʸȤɾޤ" -msgid "E195: Cannot open viminfo file for reading" -msgstr "E195: viminfoեɹѤȤƳޤ" - msgid "Untitled" msgstr "̵" @@ -1643,15 +1431,6 @@ msgstr "E788: ߤ¾ΥХåեԽ뤳Ȥϵޤ" msgid "E811: Not allowed to change buffer information now" msgstr "E811: ߤϥХåեѹ뤳Ȥϵޤ" -msgid "tagname" -msgstr "̾" - -msgid " kind file\n" -msgstr " ե\n" - -msgid "'history' option is zero" -msgstr "ץ 'history' Ǥ" - #, c-format msgid "" "\n" @@ -1922,12 +1701,6 @@ msgstr "[noeol]" msgid "[Incomplete last line]" msgstr "[ǽԤԴ]" -msgid "WARNING: The file has been changed since reading it!!!" -msgstr "ٹ: ɹ˥եѹޤ!!!" - -msgid "Do you really want to write to it" -msgstr "˾ޤ" - #, c-format msgid "E208: Error writing to \"%s\"" msgstr "E208: \"%s\" Υ顼Ǥ" @@ -2079,31 +1852,6 @@ msgstr "E222: ɹХåեɲ" msgid "E223: recursive mapping" msgstr "E223: ƵŪޥåԥ" -#, c-format -msgid "E224: global abbreviation already exists for %s" -msgstr "E224: %s ȤХûϤϴ¸ߤޤ" - -#, c-format -msgid "E225: global mapping already exists for %s" -msgstr "E225: %s ȤХޥåԥϴ¸ߤޤ" - -#, c-format -msgid "E226: abbreviation already exists for %s" -msgstr "E226: %s ȤûϤϴ¸ߤޤ" - -#, c-format -msgid "E227: mapping already exists for %s" -msgstr "E227: %s Ȥޥåԥϴ¸ߤޤ" - -msgid "No abbreviation found" -msgstr "ûϤϸĤޤǤ" - -msgid "No mapping found" -msgstr "ޥåԥϸĤޤǤ" - -msgid "E228: makemap: Illegal mode" -msgstr "E228: makemap: ʥ⡼" - msgid "E851: Failed to create a new process for the GUI" msgstr "E851: GUIѤΥץεư˼Ԥޤ" @@ -2156,7 +1904,7 @@ msgid "Cancel" msgstr "" msgid "Scrollbar Widget: Could not get geometry of thumb pixmap." -msgstr "С: ǤޤǤ." +msgstr "С: ǤޤǤ" msgid "Vim dialog" msgstr "Vim " @@ -2437,14 +2185,16 @@ msgid "E621: \"%s\" resource file has wrong version" msgstr "E621: ե \"%s\" ϥСۤʤޤ" msgid "E673: Incompatible multi-byte encoding and character set." -msgstr "E673: ߴ̵ޥХȥǥʸåȤǤ" +msgstr "E673: ߴ̵ޥХȥǥʸåȤǤ" msgid "E674: printmbcharset cannot be empty with multi-byte encoding." -msgstr "E674: ޥХȥǥǤ printmbcharset ˤǤޤ" +msgstr "" +"E674: ޥХȥǥǤ printmbcharset ˤǤޤ" msgid "E675: No default font specified for multi-byte printing." msgstr "" -"E675: ޥХʸ뤿ΥǥեȥեȤꤵƤޤ" +"E675: ޥХʸ뤿ΥǥեȥեȤꤵƤޤ" +"" msgid "E324: Can't open PostScript output file" msgstr "E324: PostScriptѤΥեޤ" @@ -2474,7 +2224,27 @@ msgid "E365: Failed to print PostScript file" msgstr "E365: PostScriptեΰ˼Ԥޤ" msgid "Print job sent." -msgstr "֤ޤ." +msgstr "֤ޤ" + +#, c-format +msgid "E799: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E799: ̵ ID: %d (1 ʾǤʤФʤޤ)" + +#, c-format +msgid "E801: ID already taken: %d" +msgstr "E801: ID ϤǤǤ: %d" + +#, c-format +msgid "E802: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E802: ̵ ID: %d (1 ʾǤʤФʤޤ)" + +#, c-format +msgid "E803: ID not found: %d" +msgstr "E803: ID Ϥޤ: %d" + +#, c-format +msgid "E798: ID is reserved for \":match\": %d" +msgstr "E798: ID \":match\" ΤͽƤޤ: %d" msgid "Add a new database" msgstr "ǡ١ɲ" @@ -2640,7 +2410,7 @@ msgid " # pid database name prepend path\n" msgstr " # pid ǡ١̾ prepend ѥ\n" msgid "Lua library cannot be loaded." -msgstr "Lua饤֥ɤǤޤ." +msgstr "Lua饤֥ɤǤޤ" msgid "cannot save undo information" msgstr "ɥ¸Ǥޤ" @@ -2648,14 +2418,14 @@ msgstr "ɥ¸Ǥޤ" msgid "" "E815: Sorry, this command is disabled, the MzScheme libraries could not be " "loaded." -msgstr "E815: Υޥɤ̵Ǥ. MzScheme 饤֥ɤǤޤ." +msgstr "E815: Υޥɤ̵ǤMzScheme 饤֥ɤǤޤ" msgid "" "E895: Sorry, this command is disabled, the MzScheme's racket/base module " "could not be loaded." msgstr "" -"E895: Υޥɤ̵Ǥʤ. MzScheme racket/base ⥸塼" -"뤬ɤǤޤǤ." +"E895: Υޥɤ̵ǤʤMzScheme racket/base ⥸塼" +"뤬ɤǤޤǤ" msgid "invalid expression" msgstr "̵ʼǤ" @@ -2729,14 +2499,14 @@ msgid "" "loaded." msgstr "" "E263: Υޥɤ̵Ǥʤ: Python饤֥ɤǤޤ" -"Ǥ." +"Ǥ" msgid "" "E887: Sorry, this command is disabled, the Python's site module could not be " "loaded." msgstr "" -"E887: Υޥɤ̵Ǥʤ. Python site ⥸塼" -"ǤޤǤ." +"E887: Υޥɤ̵ǤʤPython site ⥸塼" +"ǤޤǤ" # Added at 07-Feb-2004. msgid "E659: Cannot invoke Python recursively" @@ -2752,7 +2522,7 @@ msgid "" "E266: Sorry, this command is disabled, the Ruby library could not be loaded." msgstr "" "E266: Υޥɤ̵Ǥʤ: Ruby饤֥ɤǤޤ" -"Ǥ." +"Ǥ" msgid "E267: unexpected return" msgstr "E267: ͽ return Ǥ" @@ -2810,9 +2580,6 @@ msgstr "̤Τ vimOption Ǥ" msgid "keyboard interrupt" msgstr "ܡɳ" -msgid "vim error" -msgstr "vim 顼" - msgid "cannot create buffer/window command: object is being deleted" msgstr "" "Хåե/ɥޥɤǤޤ: ֥ȤõƤ" @@ -2838,7 +2605,7 @@ msgid "" "E571: Sorry, this command is disabled: the Tcl library could not be loaded." msgstr "" "E571: Υޥɤ̵Ǥʤ: Tcl饤֥ɤǤޤ" -"." +"" #, c-format msgid "E572: exit code %d" @@ -2865,6 +2632,10 @@ msgid "E938: Duplicate key in JSON: \"%s\"" msgstr "E938: JSON˽ʣޤ: \"%s\"" #, c-format +msgid "E899: Argument of %s must be a List or Blob" +msgstr "E899: %s ΰϥꥹȷޤBlobǤʤФʤޤ" + +#, c-format msgid "E696: Missing comma in List: %s" msgstr "E696: ꥹȷ˥ޤޤ: %s" @@ -2901,7 +2672,7 @@ msgid "'-nb' cannot be used: not enabled at compile time\n" msgstr "'-nb' ԲǽǤ: ѥ̵ˤƤޤ\n" msgid "This Vim was not compiled with the diff feature." -msgstr "Vimˤdiffǽޤ(ѥ)." +msgstr "Vimˤdiffǽޤ(ѥ)" msgid "Attempt to open script file again: \"" msgstr "ץȥեƤӳȤޤ: \"" @@ -3129,7 +2900,7 @@ msgstr "-W <scriptout>\tϤޥɤե <scriptout> ¸" msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\tŹ沽줿եԽ" -msgid "-display <display>\tConnect vim to this particular X-server" +msgid "-display <display>\tConnect Vim to this particular X-server" msgstr "-display <display>\tvimꤷ X С³" msgid "-X\t\t\tDo not connect to X server" @@ -3204,10 +2975,10 @@ msgstr "" "\n" "gvimˤäƲᤵ(AthenaС):\n" -msgid "-display <display>\tRun vim on <display>" +msgid "-display <display>\tRun Vim on <display>" msgstr "-display <display>\t<display> vim¹Ԥ" -msgid "-iconic\t\tStart vim iconified" +msgid "-iconic\t\tStart Vim iconified" msgstr "-iconic\t\tǾ֤vimư" msgid "-background <color>\tUse <color> for the background (also: -bg)" @@ -3254,8 +3025,8 @@ msgstr "" "\n" "gvimˤäƲᤵ(GTK+С):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" -msgstr "-display <display>\t<display> vim¹Ԥ(Ʊ: --display)" +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ᥤɥ̤դ(role)ꤹ" @@ -3279,7 +3050,7 @@ msgid ": Send failed.\n" msgstr ": ˼Ԥޤ.\n" msgid ": Send failed. Trying to execute locally\n" -msgstr ": ˼Ԥޤ. Ǥμ¹ԤߤƤޤ\n" +msgstr ": ˼ԤޤǤμ¹ԤߤƤޤ\n" #, c-format msgid "%d of %d edited" @@ -3291,6 +3062,39 @@ msgstr "ǥץ쥤ޤ: ˼Ԥޤ.\n" msgid ": Send expression failed.\n" msgstr ": ˼Ԥޤ.\n" +#, c-format +msgid "E224: global abbreviation already exists for %s" +msgstr "E224: %s ȤХûϤϴ¸ߤޤ" + +#, c-format +msgid "E225: global mapping already exists for %s" +msgstr "E225: %s ȤХޥåԥϴ¸ߤޤ" + +#, c-format +msgid "E226: abbreviation already exists for %s" +msgstr "E226: %s ȤûϤϴ¸ߤޤ" + +#, c-format +msgid "E227: mapping already exists for %s" +msgstr "E227: %s Ȥޥåԥϴ¸ߤޤ" + +msgid "No abbreviation found" +msgstr "ûϤϸĤޤǤ" + +msgid "No mapping found" +msgstr "ޥåԥϸĤޤǤ" + +msgid "E228: makemap: Illegal mode" +msgstr "E228: makemap: ʥ⡼" + +#, c-format +msgid "E357: 'langmap': Matching character missing for %s" +msgstr "E357: 'langmap': %s бʸޤ" + +#, c-format +msgid "E358: 'langmap': Extra characters after semicolon: %s" +msgstr "E358: 'langmap': ߥθ;ʬʸޤ: %s" + msgid "No marks set" msgstr "ޡꤵƤޤ" @@ -3426,7 +3230,7 @@ msgid "" "Maybe no changes were made or Vim did not update the swap file." msgstr "" "\n" -"餯ѹƤʤVimåץեƤޤ." +"餯ѹƤʤVimåץեƤޤ" msgid " cannot be used with this version of Vim.\n" msgstr " VimΤΥСǤϻѤǤޤ.\n" @@ -3449,7 +3253,7 @@ msgid "" "or the file has been damaged." msgstr "" ",\n" -"⤷ϥե뤬»Ƥޤ." +"⤷ϥե뤬»Ƥޤ" #, c-format msgid "" @@ -3487,7 +3291,7 @@ msgid "" "enter the new crypt key." msgstr "" "\n" -"Ź業ϤƤ." +"Ź業ϤƤ" msgid "" "\n" @@ -3501,7 +3305,7 @@ msgid "" "to use the same key for text file and swap file" msgstr "" "\n" -"åץեƱŹ業ȤenterƤ." +"åץեƱŹ業ȤenterƤ" #, c-format msgid "E309: Unable to read block 1 from %s" @@ -3547,7 +3351,7 @@ msgid "See \":help E312\" for more information." msgstr "ܺ٤ \":help E312\" ȤƤ" msgid "Recovery completed. You should check if everything is OK." -msgstr "ꥫХ꤬λޤ. ƤåƤ." +msgstr "ꥫХ꤬λޤƤåƤ" msgid "" "\n" @@ -3560,7 +3364,7 @@ msgid "and run diff with the original file to check for changes)" msgstr "ܥեȤ diff ¹ԤɤǤ礦)" msgid "Recovery completed. Buffer contents equals file contents." -msgstr "λ. ХåեƤϥեƱˤʤޤ." +msgstr "λХåեƤϥեƱˤʤޤ" msgid "" "\n" @@ -3589,6 +3393,9 @@ msgstr " ǥ쥯ȥ " msgid " -- none --\n" msgstr " -- ʤ --\n" +msgid "%a %b %d %H:%M:%S %Y" +msgstr "%Y/%m/%d (%a) %H:%M:%S" + msgid " owned by: " msgstr " ͭ: " @@ -3681,8 +3488,8 @@ msgid "E315: ml_get: invalid lnum: %ld" msgstr "E315: ml_get: ̵lnumǤ: %ld" #, c-format -msgid "E316: ml_get: cannot find line %ld" -msgstr "E316: ml_get: %ld Ĥޤ" +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get: %ld Хåե %d %s ˸Ĥޤ" msgid "E317: pointer block id wrong 3" msgstr "E317: ݥ֥åIDְäƤޤ 3" @@ -3750,10 +3557,10 @@ msgid "" " file when making changes. Quit, or continue with caution.\n" msgstr "" "\n" -"(1) ̤ΥץबƱեԽƤ뤫⤷ޤ.\n" +"(1) ̤ΥץबƱեԽƤ뤫⤷ޤ\n" " ξˤϡѹƤޤ1ĤΥեФưۤʤ2Ĥ\n" -" ǤƤޤΤǡʤ褦˵ĤƤ.\n" -" λ뤫դʤ³Ƥ.\n" +" ǤƤޤΤǡʤ褦˵ĤƤ\n" +" λ뤫դʤ³Ƥ\n" msgid "(2) An edit session for this file crashed.\n" msgstr "(2) ΥեԽåå夷.\n" @@ -3924,18 +3731,6 @@ msgstr "" "(&D)\n" "(&C)" -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 "E766: Insufficient arguments for printf()" msgstr "E766: printf() ΰԽʬǤ" @@ -3945,9 +3740,6 @@ msgstr "E807: printf() ΰˤưԤƤޤ" msgid "E767: Too many arguments to printf()" msgstr "E767: printf() ΰ¿ޤ" -msgid "W10: Warning: Changing a readonly file" -msgstr "W10: ٹ: ɹѥեѹޤ" - msgid "Type number and <Enter> or click with mouse (empty cancels): " msgstr "" "ֹ<Enter>Ϥ뤫ޥǥåƤ (ǥ): " @@ -3975,6 +3767,11 @@ msgstr " (ޤޤ)" msgid "Beep!" msgstr "ӡ!" +#, c-format +msgid "%ld second ago" +msgid_plural "%ld seconds ago" +msgstr[0] "%ld ÷вᤷƤޤ" + msgid "ERROR: " msgstr "顼: " @@ -3994,12 +3791,8 @@ msgstr "" "[ƽ] re/malloc() %lu, free() %lu\n" "\n" -msgid "E340: Line is becoming too long" -msgstr "E340: ԤĹʤޤ" - -#, c-format -msgid "E341: Internal error: lalloc(%ld, )" -msgstr "E341: 顼: lalloc(%ld,)" +msgid "E341: Internal error: lalloc(0, )" +msgstr "E341: 顼: lalloc(0, )" #, c-format msgid "E342: Out of memory! (allocating %lu bytes)" @@ -4073,12 +3866,6 @@ msgstr "E505: %s ɹѤǤ (ˤ ! ɲ)" msgid "E349: No identifier under cursor" msgstr "E349: ΰ֤ˤϼ̻Ҥޤ" -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc' ץǤ" - -msgid "E775: Eval feature not available" -msgstr "E775: ɾǽ̵ˤʤäƤޤ" - msgid "Warning: terminal cannot highlight" msgstr "ٹ: ѤƤüϥϥ饤ȤǤޤ" @@ -4129,9 +3916,6 @@ msgstr "1 ԤǥȤޤ " msgid "%ld lines indented " msgstr "%ld ԤǥȤޤ " -msgid "E748: No previously used register" -msgstr "E748: ޤ쥸ѤƤޤ" - msgid "cannot yank; delete anyway" msgstr "Ǥޤ; Ȥˤõ" @@ -4143,14 +3927,6 @@ msgid "%ld lines changed" msgstr "%ld Ԥѹޤ" #, c-format -msgid "freeing %ld lines" -msgstr "%ld Ԥ" - -#, c-format -msgid " into \"%c" -msgstr " \"%c " - -#, c-format msgid "block of 1 line yanked%s" msgstr "1 ԤΥ֥å%sޤ" @@ -4166,10 +3942,6 @@ msgstr "%ld ԤΥ֥å%sޤ" msgid "%ld lines yanked%s" msgstr "%ld Ԥ%sޤ" -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: 쥸 %s ˤϲ⤢ޤ" - msgid "" "\n" "--- Registers ---" @@ -4191,11 +3963,6 @@ 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ʾޤޤ" - #, c-format msgid "%ld Cols; " msgstr "%ld ; " @@ -4227,8 +3994,11 @@ msgstr "" msgid "(+%lld for BOM)" msgstr "(+%lld for BOM)" -msgid "Thanks for flying Vim" -msgstr "Vim ȤäƤƤ꤬Ȥ" +msgid "E774: 'operatorfunc' is empty" +msgstr "E774: 'operatorfunc' ץǤ" + +msgid "E775: Eval feature not available" +msgstr "E775: ɾǽ̵ˤʤäƤޤ" msgid "E518: Unknown option" msgstr "E518: ̤ΤΥץǤ" @@ -4239,6 +4009,9 @@ msgstr "E519: ץϥݡȤƤޤ" msgid "E520: Not allowed in a modeline" msgstr "E520: modeline ǤϵĤޤ" +msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" +msgstr "E992: 'modelineexpr' դλ modeline ǤϵĤޤ" + msgid "E846: Key code not set" msgstr "E846: ɤꤵƤޤ" @@ -4248,6 +4021,66 @@ msgstr "E521: = θˤϿɬפǤ" msgid "E522: Not found in termcap" msgstr "E522: termcap ˸Ĥޤ" +msgid "E946: Cannot make a terminal with running job modifiable" +msgstr "E946: ¹Υ֤üѹǽˤǤޤ" + +msgid "E590: A preview window already exists" +msgstr "E590: ץӥ塼ɥ¸ߤޤ" + +msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" +msgstr "" +"W17: ӥʸˤUTF-8ɬפʤΤǡ':set encoding=utf-8' Ƥ" + +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: 24bitϤδĶǤϥݡȤƤޤ" + +#, c-format +msgid "E593: Need at least %d lines" +msgstr "E593: %d ιԿɬפǤ" + +#, c-format +msgid "E594: Need at least %d columns" +msgstr "E594: %d ΥɬפǤ" + +#, c-format +msgid "E355: Unknown option: %s" +msgstr "E355: ̤ΤΥץǤ: %s" + +#, c-format +msgid "E521: Number required: &%s = '%s'" +msgstr "E521: ɬפǤ: &%s = '%s'" + +msgid "" +"\n" +"--- Terminal codes ---" +msgstr "" +"\n" +"--- ü ---" + +msgid "" +"\n" +"--- Global option values ---" +msgstr "" +"\n" +"--- Х륪ץ ---" + +msgid "" +"\n" +"--- Local option values ---" +msgstr "" +"\n" +"--- 륪ץ ---" + +msgid "" +"\n" +"--- Options ---" +msgstr "" +"\n" +"--- ץ ---" + +msgid "E356: get_varp ERROR" +msgstr "E356: get_varp 顼" + #, c-format msgid "E539: Illegal character <%s>" msgstr "E539: ʸǤ <%s>" @@ -4256,6 +4089,13 @@ msgstr "E539: ʸǤ <%s>" msgid "For option %s" msgstr "ץ: %s" +msgid "E540: Unclosed expression sequence" +msgstr "E540: λƤޤ" + + +msgid "E542: unbalanced groups" +msgstr "E542: 롼פ礤ޤ" + msgid "E529: Cannot set 'term' to empty string" msgstr "E529: 'term' ˤ϶ʸǤޤ" @@ -4326,86 +4166,6 @@ msgstr "E536: ޤɬפǤ" msgid "E537: 'commentstring' must be empty or contain %s" msgstr "E537: 'commentstring' ϶Ǥ뤫 %s ޤɬפޤ" -msgid "E538: No mouse support" -msgstr "E538: ޥϥݡȤޤ" - -msgid "E540: Unclosed expression sequence" -msgstr "E540: λƤޤ" - -msgid "E541: too many items" -msgstr "E541: Ǥ¿ޤ" - -msgid "E542: unbalanced groups" -msgstr "E542: 롼פ礤ޤ" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "E946: ¹Υ֤üѹǽˤǤޤ" - -msgid "E590: A preview window already exists" -msgstr "E590: ץӥ塼ɥ¸ߤޤ" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "" -"W17: ӥʸˤUTF-8ɬפʤΤǡ':set encoding=utf-8' Ƥ" - -msgid "E954: 24-bit colors are not supported on this environment" -msgstr "E954: 24bitϤδĶǤϥݡȤƤޤ" - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: %d ιԿɬפǤ" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: %d ΥɬפǤ" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: ̤ΤΥץǤ: %s" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: ɬפǤ: &%s = '%s'" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- ü ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- Х륪ץ ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- 륪ץ ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- ץ ---" - -msgid "E356: get_varp ERROR" -msgstr "E356: get_varp 顼" - -#, c-format -msgid "E357: 'langmap': Matching character missing for %s" -msgstr "E357: 'langmap': %s бʸޤ" - -#, c-format -msgid "E358: 'langmap': Extra characters after semicolon: %s" -msgstr "E358: 'langmap': ߥθ;ʬʸޤ: %s" - msgid "cannot open " msgstr "ޤ " @@ -4448,7 +4208,7 @@ msgid " returned\n" msgstr " ޤ\n" msgid "ANCHOR_BUF_SIZE too small." -msgstr "ANCHOR_BUF_SIZE ޤ." +msgstr "ANCHOR_BUF_SIZE ޤ" msgid "I/O ERROR" msgstr "ϥ顼" @@ -4498,6 +4258,10 @@ msgstr "" "\n" "Vim: X Υ顼Фޤr\n" +#, c-format +msgid "restoring display %s" +msgstr "ǥץ쥤 %s Ƥޤ" + msgid "Testing the X display failed" msgstr "X display Υå˼Ԥޤ" @@ -4524,7 +4288,7 @@ msgstr "ƥƥ %s %s Ǥޤ" #, c-format msgid "Could not get security context %s for %s. Removing it!" -msgstr "ƥƥ %s %s Ǥޤ. ޤ!" +msgstr "ƥƥ %s %s Ǥޤޤ!" msgid "" "\n" @@ -4755,37 +4519,26 @@ msgstr "E70: %s%%[] Ǥ" msgid "E956: Cannot use pattern recursively" msgstr "E956: ѥƵŪ˻ȤȤϤǤޤ" -msgid "E65: Illegal back reference" -msgstr "E65: ʸȤǤ" - -msgid "E339: Pattern too long" -msgstr "E339: ѥĹޤ" - -msgid "E50: Too many \\z(" -msgstr "E50: \\z( ¿ޤ" - #, c-format -msgid "E51: Too many %s(" -msgstr "E51: %s( ¿ޤ" - -msgid "E52: Unmatched \\z(" -msgstr "E52: \\z( äƤޤ" +msgid "E554: Syntax error in %s{...}" +msgstr "E554: %s{...} ʸˡ顼ޤ" #, c-format -msgid "E59: invalid character after %s@" -msgstr "E59: %s@ θʸޤ" +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA ɽ) ֤ޤ %s" -#, c-format -msgid "E60: Too many complex %s{...}s" -msgstr "E60: ʣ %s{...} ¿ޤ" +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: \\%#= ˤ 0, 1 ⤷ 2 Τߤ³ޤɽϼư" +"ޤ" -#, c-format -msgid "E61: Nested %s*" -msgstr "E61:%s* ҤˤʤäƤޤ" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Υѥ˥Хåȥå RE ŬѤޤ: " -#, c-format -msgid "E62: Nested %s%c" -msgstr "E62:%s%c ҤˤʤäƤޤ" +msgid "E65: Illegal back reference" +msgstr "E65: ʸȤǤ" msgid "E63: invalid use of \\_" msgstr "E63: \\_ ̵ʻˡǤ" @@ -4806,25 +4559,36 @@ msgid "E71: Invalid character after %s%%" msgstr "E71: %s%% θʸޤ" #, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: %s{...} ʸˡ顼ޤ" +msgid "E59: invalid character after %s@" +msgstr "E59: %s@ θʸޤ" -msgid "External submatches:\n" -msgstr "ʬ:\n" +#, c-format +msgid "E60: Too many complex %s{...}s" +msgstr "E60: ʣ %s{...} ¿ޤ" #, c-format -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (NFA ɽ) ֤ޤ %s" +msgid "E61: Nested %s*" +msgstr "E61:%s* ҤˤʤäƤޤ" -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " -"used " -msgstr "" -"E864: \\%#= ˤ 0, 1 ⤷ 2 Τߤ³ޤɽϼư" -"ޤ" +#, c-format +msgid "E62: Nested %s%c" +msgstr "E62:%s%c ҤˤʤäƤޤ" -msgid "Switching to backtracking RE engine for pattern: " -msgstr "Υѥ˥Хåȥå RE ŬѤޤ: " +msgid "E50: Too many \\z(" +msgstr "E50: \\z( ¿ޤ" + +#, c-format +msgid "E51: Too many %s(" +msgstr "E51: %s( ¿ޤ" + +msgid "E52: Unmatched \\z(" +msgstr "E52: \\z( äƤޤ" + +msgid "E339: Pattern too long" +msgstr "E339: ѥĹޤ" + +msgid "External submatches:\n" +msgstr "ʬ:\n" msgid "E865: (NFA) Regexp end encountered prematurely" msgstr "E865: (NFA) Ԥɽνüãޤ" @@ -4891,6 +4655,23 @@ msgstr "E876: (NFA ɽ) NFAΤ¸ˤ϶ڡޤ" msgid "E878: (NFA) Could not allocate memory for branch traversal!" msgstr "E878: (NFA) ߲Υ֥˽ʬʥƤޤ!" +#, c-format +msgid "block of %ld line yanked%s" +msgid_plural "block of %ld lines yanked%s" +msgstr[0] "%ld ԤΥ֥å%sޤ" + +#, c-format +msgid "%ld line yanked%s" +msgid_plural "%ld lines yanked%s" +msgstr[0] "%ld Ԥ%sޤ" + +msgid "" +"\n" +"Type Name Content" +msgstr "" +"\n" +" ̾ " + msgid " VREPLACE" msgstr " ִ" @@ -4942,6 +4723,13 @@ msgstr " " msgid "recording" msgstr "Ͽ" +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion ץȰʳǻѤޤ" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: scriptversion ϥݡȤƤޤ: %d" + #, c-format msgid "E383: Invalid search string: %s" msgstr "E383: ̵ʸʸǤ: %s" @@ -5031,21 +4819,6 @@ msgstr "E797: autocommand SpellFileMissing Хåեޤ" msgid "Warning: region %s not supported" msgstr "ٹ9: %s ȤϰϤϥݡȤƤޤ" -msgid "Sorry, no suggestions" -msgstr "ǰǤϤޤ" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "ǰǤ %ld Ĥޤ" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "\"%.*s\" Ѵ:" - -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - msgid "E752: No previous spell replacement" msgstr "E752: ڥִޤ¹ԤƤޤ" @@ -5152,7 +4925,7 @@ msgstr "" #, c-format msgid "Wrong COMPOUNDRULES value in %s line %d: %s" -msgstr "COMPOUNDRULES ͤ˸꤬ޤ. ե %s %d : %s" +msgstr "COMPOUNDRULES ͤ˸꤬ޤե %s %d : %s" #, c-format msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s" @@ -5548,70 +5321,6 @@ msgid "" msgstr "" " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN" -msgid "E679: recursive loop loading syncolor.vim" -msgstr "E679: syncolor.vim κƵƤӽФФޤ" - -#, c-format -msgid "E411: highlight group not found: %s" -msgstr "E411: ϥ饤ȥ롼פĤޤ: %s" - -#, c-format -msgid "E412: Not enough arguments: \":highlight link %s\"" -msgstr "E412: ʬǤϤʤ: \":highlight link %s\"" - -#, c-format -msgid "E413: Too many arguments: \":highlight link %s\"" -msgstr "E413: ¿ޤ: \":highlight link %s\"" - -msgid "E414: group has settings, highlight link ignored" -msgstr "E414: 롼פꤵƤΤǥϥ饤ȥ̵뤵ޤ" - -#, c-format -msgid "E415: unexpected equal sign: %s" -msgstr "E415: ͽǤ: %s" - -#, c-format -msgid "E416: missing equal sign: %s" -msgstr "E416: 椬ޤ: %s" - -#, c-format -msgid "E417: missing argument: %s" -msgstr "E417: ޤ: %s" - -#, c-format -msgid "E418: Illegal value: %s" -msgstr "E418: ͤǤ: %s" - -msgid "E419: FG color unknown" -msgstr "E419: ̤ΤʿǤ" - -msgid "E420: BG color unknown" -msgstr "E420: ̤ΤطʿǤ" - -#, c-format -msgid "E421: Color name or number not recognized: %s" -msgstr "E421: 顼ֹ̾ǧǤޤ: %s" - -#, c-format -msgid "E422: terminal code too long: %s" -msgstr "E422: üɤĹޤ: %s" - -#, c-format -msgid "E423: Illegal argument: %s" -msgstr "E423: ʰǤ: %s" - -msgid "E424: Too many different highlighting attributes in use" -msgstr "E424: ¿ΰۤʤϥ饤°ȤƤޤ" - -msgid "E669: Unprintable character in group name" -msgstr "E669: 롼̾˰Բǽʸޤ" - -msgid "W18: Invalid character in group name" -msgstr "W18: 롼̾ʸޤ" - -msgid "E849: Too many highlight and syntax groups" -msgstr "E849: ϥ饤Ȥȹʸ롼פ¿ޤ" - msgid "E555: at bottom of tag stack" msgstr "E555: åǤ" @@ -5699,7 +5408,7 @@ msgid "Duplicate field name: %s" msgstr "ʣե̾: %s" msgid "' not known. Available builtin terminals are:" -msgstr "' ̤ΤǤ. ԤȤ߹üϼΤȤǤ:" +msgstr "' ̤ΤǤԤȤ߹üϼΤȤǤ:" msgid "defaulting to '" msgstr "άͤΤ褦ꤷޤ '" @@ -5922,6 +5631,9 @@ msgstr "E125: ʰǤ: %s" msgid "E853: Duplicate argument name: %s" msgstr "E853: ̾ʣƤޤ: %s" +msgid "E989: Non-default argument follows default argument" +msgstr "E989: ǥեȰǥեȰθˤޤ" + #, c-format msgid "E740: Too many arguments for function %s" msgstr "E740: ؿΰ¿ޤ: %s" @@ -5957,6 +5669,10 @@ msgid "E117: Unknown function: %s" msgstr "E117: ̤ΤδؿǤ: %s" #, c-format +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: ؿåɤȤƻѤǤޤ: %s" + +#, c-format msgid "E933: Function was deleted: %s" msgstr "E933: ؿϺޤ: %s" @@ -6025,10 +5741,6 @@ msgid "E133: :return not inside a function" msgstr "E133: ؿ :return ޤ" #, c-format -msgid "E107: Missing parentheses: %s" -msgstr "E107: å '(' ޤ: %s" - -#, c-format msgid "%s (%s, compiled %s)" msgstr "%s (%s, compiled %s)" @@ -6344,9 +6056,6 @@ msgstr "E799: ̵ ID: %ld (1 ʾǤʤФʤޤ)" msgid "E801: ID already taken: %ld" msgstr "E801: ID ϤǤǤ: %ld" -msgid "List or number required" -msgstr "ꥹȤͤɬפǤ" - #, c-format msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" msgstr "E802: ̵ ID: %ld (1 ʾǤʤФʤޤ)" @@ -6447,9 +6156,6 @@ msgstr "E685: 顼Ǥ: %s" msgid "Interrupted" msgstr "ޤޤ" -msgid "E14: Invalid address" -msgstr "E14: ̵ʥɥ쥹Ǥ" - msgid "E474: Invalid argument" msgstr "E474: ̵ʰǤ" @@ -6624,6 +6330,9 @@ msgstr "E44: ɽץǤ" msgid "E45: 'readonly' option is set (add ! to override)" msgstr "E45: 'readonly' ץꤵƤޤ (! ɲäǾ)" +msgid "E995: Cannot modify existing variable" +msgstr "E995: ¸ѿѹǤޤ" + #, c-format msgid "E46: Cannot change read-only variable \"%s\"" msgstr "E46: ɼѿ \"%s\" ˤͤǤޤ" @@ -6720,6 +6429,10 @@ msgstr "E939: ΥȤɬפǤ" msgid "E81: Using <SID> not in a script context" msgstr "E81: ץȰʳ<SID>Ȥޤ" +#, c-format +msgid "E107: Missing parentheses: %s" +msgstr "E107: å '(' ޤ: %s" + msgid "E449: Invalid expression received" msgstr "E449: ̵ʼޤ" @@ -6863,7 +6576,7 @@ msgid "list index out of range" msgstr "ꥹϰϳΥǥåǤ" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "顼: vimΥꥹ %d μ˼Ԥޤ" msgid "slice step cannot be zero" @@ -6874,7 +6587,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "Ĺ %d γĥ饤ˡĹ饤Ƥ褦Ȥޤ" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "顼: vimΥꥹ %d Ϥޤ" msgid "internal error: not enough list items" @@ -6983,19 +6696,19 @@ msgstr "ɤμ¹Ԥ˼Ԥޤ" msgid "E858: Eval did not return a valid python object" msgstr "E858: ɾͭpython֥Ȥ֤ޤǤ" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: ֤줿python֥ȤvimͤѴǤޤǤ" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "%s vimμѴǤޤ" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "%s vimΥꥹȤѴǤޤ" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "%s vimι¤ΤѴǤޤ" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/ja.po b/src/nvim/po/ja.po index 85a45cd171..a169bd3589 100644 --- a/src/nvim/po/ja.po +++ b/src/nvim/po/ja.po @@ -1,4 +1,3 @@ - # Japanese translation for Vim # # Do ":help uganda" in Vim to read copying and usage conditions. @@ -58,8 +57,9 @@ msgstr "E83: バッファを作成できないので、他のを使用します. msgid "E931: Buffer cannot be registered" msgstr "E931: バッファを登録できません" -msgid "E937: Attempt to delete a buffer that is in use" -msgstr "E937: 使用中のバッファを削除しようと試みました" +#, c-format +msgid "E937: Attempt to delete a buffer that is in use: %s" +msgstr "E937: 使用中のバッファを削除しようと試みました: %s" msgid "E515: No buffers were unloaded" msgstr "E515: 解放されたバッファはありません" @@ -248,6 +248,9 @@ msgstr "E904: call の3番目の引数はリスト型でなければなりませ msgid "E905: received unknown command: %s" msgstr "E905: 未知のコマンドを受信しました: %s" +msgid "E906: not an open channel" +msgstr "E906: 開いていないチャネルです" + #, c-format msgid "E630: %s(): write while not connected" msgstr "E630: %s(): 非接続状態で書き込みました" @@ -264,9 +267,6 @@ msgid "E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" msgstr "" "E912: raw や nl モードのチャネルに ch_evalexpr()/ch_sendexpr() は使えません" -msgid "E906: not an open channel" -msgstr "E906: 開いていないチャネルです" - msgid "E920: _io file requires _name to be set" msgstr "E920: _io ファイルは _name の設定が必要です" @@ -476,24 +476,12 @@ msgstr "%d 番目の該当" msgid "E18: Unexpected characters in :let" msgstr "E18: 予期せぬ文字が :let にありました" -#, c-format -msgid "E121: Undefined variable: %s" -msgstr "E121: 未定義の変数です: %s" - msgid "E111: Missing ']'" msgstr "E111: ']' が見つかりません" msgid "E719: Cannot use [:] with a Dictionary" msgstr "E719: [:] を辞書型と組み合わせては使えません" -#, c-format -msgid "E734: Wrong variable type for %s=" -msgstr "E734: 異なった型の変数です %s=" - -#, c-format -msgid "E461: Illegal variable name: %s" -msgstr "E461: 不正な変数名です: %s" - msgid "E806: using Float as a String" msgstr "E806: 浮動小数点数を文字列として扱っています" @@ -548,6 +536,9 @@ msgstr "E804: '%' を浮動小数点数と組み合わせては使えません" msgid "E110: Missing ')'" msgstr "E110: ')' が見つかりません" +msgid "E260: Missing name after ->" +msgstr "E260: -> の後に名前がありません" + msgid "E695: Cannot index a Funcref" msgstr "E695: 関数参照型はインデックスできません" @@ -683,25 +674,13 @@ msgstr "E736: 辞書型には無効な操作です" msgid "E694: Invalid operation for Funcrefs" msgstr "E694: 関数参照型には無効な操作です" -msgid "map() argument" -msgstr "map() の引数" - -msgid "filter() argument" -msgstr "filter() の引数" - #, c-format msgid "E686: Argument of %s must be a List" msgstr "E686: %s の引数はリスト型でなければなりません" -msgid "E928: String required" -msgstr "E928: 文字列が必要です" - msgid "E808: Number or Float required" msgstr "E808: 数値か浮動小数点数が必要です" -msgid "add() argument" -msgstr "add() の引数" - msgid "E785: complete() can only be used in Insert mode" msgstr "E785: complete() は挿入モードでしか利用できません" @@ -709,11 +688,6 @@ msgid "&Ok" msgstr "&Ok" #, c-format -msgid "+-%s%3ld line: " -msgid_plural "+-%s%3ld lines: " -msgstr[0] "+-%s%3ld 行: " - -#, c-format msgid "E700: Unknown function: %s" msgstr "E700: 未知の関数です: %s" @@ -733,15 +707,9 @@ msgstr "" msgid "called inputrestore() more often than inputsave()" msgstr "inputrestore() が inputsave() よりも多く呼ばれました" -msgid "insert() argument" -msgstr "insert() の引数" - msgid "E786: Range not allowed" msgstr "E786: 範囲指定は許可されていません" -msgid "E916: not a valid job" -msgstr "E916: 有効なジョブではありません" - msgid "E701: Invalid type for len()" msgstr "E701: len() には無効な型です" @@ -774,35 +742,13 @@ msgstr "E941: サーバーはすでに開始しています" msgid "E942: +clientserver feature not available" msgstr "E942: +clientserver 機能が無効になっています" -msgid "remove() argument" -msgstr "remove() の引数" - # Added at 10-Mar-2004. msgid "E655: Too many symbolic links (cycle?)" msgstr "E655: シンボリックリンクが多過ぎます (循環している可能性があります)" -msgid "reverse() argument" -msgstr "reverse() の引数" - msgid "E258: Unable to send to client" msgstr "E258: クライアントへ送ることができません" -#, c-format -msgid "E927: Invalid action: '%s'" -msgstr "E927: 無効な操作です: %s" - -msgid "sort() argument" -msgstr "sort() の引数" - -msgid "uniq() argument" -msgstr "uniq() の引数" - -msgid "E702: Sort compare function failed" -msgstr "E702: ソートの比較関数が失敗しました" - -msgid "E882: Uniq compare function failed" -msgstr "E882: Uniq の比較関数が失敗しました" - msgid "(Invalid)" msgstr "(無効)" @@ -810,9 +756,6 @@ msgstr "(無効)" msgid "E935: invalid submatch number: %d" msgstr "E935: 無効なサブマッチ番号: %d" -msgid "E677: Error writing temp file" -msgstr "E677: 一時ファイル書込中にエラーが発生しました" - msgid "E921: Invalid callback argument" msgstr "E921: 無効なコールバック引数です" @@ -860,73 +803,6 @@ msgstr "E135: *フィルタ* autocommandは現在のバッファを変更して msgid "[No write since last change]\n" msgstr "[最後の変更が保存されていません]\n" -#, c-format -msgid "%sviminfo: %s in line: " -msgstr "%sviminfo: %s 行目: " - -msgid "E136: viminfo: Too many errors, skipping rest of file" -msgstr "E136: viminfo: エラーが多過ぎるので、以降はスキップします" - -#, c-format -msgid "Reading viminfo file \"%s\"%s%s%s" -msgstr "viminfoファイル \"%s\"%s%s%s を読込み中" - -msgid " info" -msgstr " 情報" - -msgid " marks" -msgstr " マーク" - -msgid " oldfiles" -msgstr " 旧ファイル群" - -msgid " FAILED" -msgstr " 失敗" - -#, c-format -msgid "E137: Viminfo file is not writable: %s" -msgstr "E137: viminfoファイルが書込みできません: %s" - -#, c-format -msgid "E929: Too many viminfo temp files, like %s!" -msgstr "E929: 一時viminfoファイルが多過ぎます! 例: %s" - -#, c-format -msgid "E138: Can't write viminfo file %s!" -msgstr "E138: viminfoファイル %s を保存できません!" - -#, 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 へ名前変更できません!" - -#, c-format -msgid "# This viminfo file was generated by Vim %s.\n" -msgstr "# この viminfo ファイルは Vim %s によって生成されました.\n" - -msgid "" -"# You may edit it if you're careful!\n" -"\n" -msgstr "" -"# 変更する際には十分注意してください!\n" -"\n" - -msgid "# Value of 'encoding' when this file was written\n" -msgstr "# このファイルが書かれた時の 'encoding' の値\n" - -msgid "Illegal starting char" -msgstr "不正な先頭文字です" - -msgid "" -"\n" -"# Bar lines, copied verbatim:\n" -msgstr "" -"\n" -"# '|' で始まる行の、文字通りのコピー:\n" - msgid "Save As" msgstr "別名で保存" @@ -942,7 +818,7 @@ msgstr "既存のファイル \"%s\" を上書きしますか?" #, c-format msgid "Swap file \"%s\" exists, overwrite anyway?" -msgstr "スワップファイル \"%s\" が存在します. 上書きを強制しますか?" +msgstr "スワップファイル \"%s\" が存在します。上書きを強制しますか?" #, c-format msgid "E768: Swap file exists: %s (:silent! overrides)" @@ -1032,15 +908,6 @@ msgstr "パターンが全ての行で見つかりました: %s" msgid "Pattern not found: %s" msgstr "パターンは見つかりませんでした: %s" -msgid "" -"\n" -"# Last Substitute String:\n" -"$" -msgstr "" -"\n" -"# 最後に置換された文字列:\n" -"$" - msgid "E478: Don't panic!" msgstr "E478: 慌てないでください" @@ -1207,18 +1074,6 @@ msgid "E666: compiler not supported: %s" msgstr "E666: そのコンパイラには対応していません: %s" #, c-format -msgid "Searching for \"%s\" in \"%s\"" -msgstr "\"%s\" を \"%s\" から検索中" - -#, c-format -msgid "Searching for \"%s\"" -msgstr "\"%s\" を検索中" - -#, c-format -msgid "not found in '%s': \"%s\"" -msgstr "'%s' の中にはありません: \"%s\"" - -#, c-format msgid "W20: Required python version 2.x not supported, ignoring file: %s" msgstr "W20: 要求されたpython 2.xは対応していません、ファイルを無視します: %s" @@ -1226,61 +1081,6 @@ msgstr "W20: 要求されたpython 2.xは対応していません、ファイル msgid "W21: Required python version 3.x not supported, ignoring file: %s" msgstr "W21: 要求されたpython 3.xは対応していません、ファイルを無視します: %s" -msgid "Source Vim script" -msgstr "Vimスクリプトの取込み" - -#, c-format -msgid "Cannot source a directory: \"%s\"" -msgstr "ディレクトリは取込めません: \"%s\"" - -#, c-format -msgid "could not source \"%s\"" -msgstr "\"%s\" を取込めません" - -#, c-format -msgid "line %ld: could not source \"%s\"" -msgstr "行 %ld: \"%s\" を取込めません" - -#, c-format -msgid "sourcing \"%s\"" -msgstr "\"%s\" を取込中" - -#, c-format -msgid "line %ld: sourcing \"%s\"" -msgstr "行 %ld: %s を取込中" - -#, c-format -msgid "finished sourcing %s" -msgstr "%s の取込を完了" - -#, c-format -msgid "continuing in %s" -msgstr "%s の実行を継続中です" - -msgid "modeline" -msgstr "モード行" - -msgid "--cmd argument" -msgstr "--cmd 引数" - -msgid "-c argument" -msgstr "-c 引数" - -msgid "environment variable" -msgstr "環境変数" - -msgid "error handler" -msgstr "エラーハンドラ" - -msgid "W15: Warning: Wrong line separator, ^M may be missing" -msgstr "W15: 警告: 行区切が不正です. ^M がないのでしょう" - -msgid "E167: :scriptencoding used outside of a sourced file" -msgstr "E167: :scriptencoding が取込スクリプト以外で使用されました" - -msgid "E168: :finish used outside of a sourced file" -msgstr "E168: :finish が取込スクリプト以外で使用されました" - #, c-format msgid "Current %slanguage: \"%s\"" msgstr "現在の %s言語: \"%s\"" @@ -1471,15 +1271,6 @@ msgstr "E930: execute() の中では :redir は使えません" msgid "Save Redirection" msgstr "リダイレクトを保存します" -msgid "Save View" -msgstr "ビューを保存します" - -msgid "Save Session" -msgstr "セッション情報を保存します" - -msgid "Save Setup" -msgstr "設定を保存します" - #, c-format msgid "E739: Cannot create directory: %s" msgstr "E739: ディレクトリを作成できません: %s" @@ -1527,9 +1318,6 @@ msgstr "" msgid "E500: Evaluates to an empty string" msgstr "E500: 空文字列として評価されました" -msgid "E195: Cannot open viminfo file for reading" -msgstr "E195: viminfoファイルを読込用として開けません" - msgid "Untitled" msgstr "無題" @@ -1643,15 +1431,6 @@ msgstr "E788: 現在は他のバッファを編集することは許されませ msgid "E811: Not allowed to change buffer information now" msgstr "E811: 現在はバッファ情報を変更することは許されません" -msgid "tagname" -msgstr "タグ名" - -msgid " kind file\n" -msgstr " ファイル種類\n" - -msgid "'history' option is zero" -msgstr "オプション 'history' がゼロです" - #, c-format msgid "" "\n" @@ -1922,12 +1701,6 @@ msgstr "[noeol]" msgid "[Incomplete last line]" msgstr "[最終行が不完全]" -msgid "WARNING: The file has been changed since reading it!!!" -msgstr "警告: 読込んだ後にファイルに変更がありました!!!" - -msgid "Do you really want to write to it" -msgstr "本当に上書きしますか" - #, c-format msgid "E208: Error writing to \"%s\"" msgstr "E208: \"%s\" を書込み中のエラーです" @@ -2079,31 +1852,6 @@ msgstr "E222: 読込バッファへ追加" msgid "E223: recursive mapping" msgstr "E223: 再帰的マッピング" -#, c-format -msgid "E224: global abbreviation already exists for %s" -msgstr "E224: %s というグローバル短縮入力は既に存在します" - -#, c-format -msgid "E225: global mapping already exists for %s" -msgstr "E225: %s というグローバルマッピングは既に存在します" - -#, c-format -msgid "E226: abbreviation already exists for %s" -msgstr "E226: %s という短縮入力は既に存在します" - -#, c-format -msgid "E227: mapping already exists for %s" -msgstr "E227: %s というマッピングは既に存在します" - -msgid "No abbreviation found" -msgstr "短縮入力は見つかりませんでした" - -msgid "No mapping found" -msgstr "マッピングは見つかりませんでした" - -msgid "E228: makemap: Illegal mode" -msgstr "E228: makemap: 不正なモード" - msgid "E851: Failed to create a new process for the GUI" msgstr "E851: GUI用のプロセスの起動に失敗しました" @@ -2156,7 +1904,7 @@ msgid "Cancel" msgstr "キャンセル" msgid "Scrollbar Widget: Could not get geometry of thumb pixmap." -msgstr "スクロールバー: 画像を取得できませんでした." +msgstr "スクロールバー: 画像を取得できませんでした。" msgid "Vim dialog" msgstr "Vim ダイアログ" @@ -2437,14 +2185,16 @@ msgid "E621: \"%s\" resource file has wrong version" msgstr "E621: リソースファイル \"%s\" はバージョンが異なります" msgid "E673: Incompatible multi-byte encoding and character set." -msgstr "E673: 互換性の無いマルチバイトエンコーディングと文字セットです" +msgstr "E673: 互換性の無いマルチバイトエンコーディングと文字セットです。" msgid "E674: printmbcharset cannot be empty with multi-byte encoding." -msgstr "E674: マルチバイトエンコーディングでは printmbcharset を空にできません" +msgstr "" +"E674: マルチバイトエンコーディングでは printmbcharset を空にできません。" msgid "E675: No default font specified for multi-byte printing." msgstr "" -"E675: マルチバイト文字を印刷するためのデフォルトフォントが指定されていません" +"E675: マルチバイト文字を印刷するためのデフォルトフォントが指定されていませ" +"ん。" msgid "E324: Can't open PostScript output file" msgstr "E324: PostScript出力用のファイルを開けません" @@ -2474,7 +2224,27 @@ msgid "E365: Failed to print PostScript file" msgstr "E365: PostScriptファイルの印刷に失敗しました" msgid "Print job sent." -msgstr "印刷ジョブを送信しました." +msgstr "印刷ジョブを送信しました。" + +#, c-format +msgid "E799: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E799: 無効な ID: %d (1 以上でなければなりません)" + +#, c-format +msgid "E801: ID already taken: %d" +msgstr "E801: ID はすでに利用中です: %d" + +#, c-format +msgid "E802: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E802: 無効な ID: %d (1 以上でなければなりません)" + +#, c-format +msgid "E803: ID not found: %d" +msgstr "E803: ID はありません: %d" + +#, c-format +msgid "E798: ID is reserved for \":match\": %d" +msgstr "E798: ID は \":match\" のために予約されています: %d" msgid "Add a new database" msgstr "新データベースを追加" @@ -2640,7 +2410,7 @@ msgid " # pid database name prepend path\n" msgstr " # pid データベース名 prepend パス\n" msgid "Lua library cannot be loaded." -msgstr "Luaライブラリをロードできません." +msgstr "Luaライブラリをロードできません。" msgid "cannot save undo information" msgstr "アンドゥ情報が保存できません" @@ -2648,14 +2418,14 @@ msgstr "アンドゥ情報が保存できません" msgid "" "E815: Sorry, this command is disabled, the MzScheme libraries could not be " "loaded." -msgstr "E815: このコマンドは無効です. MzScheme ライブラリをロードできません." +msgstr "E815: このコマンドは無効です。MzScheme ライブラリをロードできません。" msgid "" "E895: Sorry, this command is disabled, the MzScheme's racket/base module " "could not be loaded." msgstr "" -"E895: このコマンドは無効です、ごめんなさい. MzScheme の racket/base モジュー" -"ルがロードできませんでした." +"E895: このコマンドは無効です、ごめんなさい。MzScheme の racket/base モジュー" +"ルがロードできませんでした。" msgid "invalid expression" msgstr "無効な式です" @@ -2729,14 +2499,14 @@ msgid "" "loaded." msgstr "" "E263: このコマンドは無効です、ごめんなさい: Pythonライブラリをロードできませ" -"んでした." +"んでした。" msgid "" "E887: Sorry, this command is disabled, the Python's site module could not be " "loaded." msgstr "" -"E887: このコマンドは無効です、ごめんなさい. Python の site モジュールをロード" -"できませんでした." +"E887: このコマンドは無効です、ごめんなさい。Python の site モジュールをロード" +"できませんでした。" # Added at 07-Feb-2004. msgid "E659: Cannot invoke Python recursively" @@ -2752,7 +2522,7 @@ msgid "" "E266: Sorry, this command is disabled, the Ruby library could not be loaded." msgstr "" "E266: このコマンドは無効です、ごめんなさい: Rubyライブラリをロードできません" -"でした." +"でした。" msgid "E267: unexpected return" msgstr "E267: 予期せぬ return です" @@ -2810,9 +2580,6 @@ msgstr "未知の vimOption です" msgid "keyboard interrupt" msgstr "キーボード割込み" -msgid "vim error" -msgstr "vim エラー" - msgid "cannot create buffer/window command: object is being deleted" msgstr "" "バッファ/ウィンドウ作成コマンドを作成できません: オブジェクトが消去されていま" @@ -2838,7 +2605,7 @@ msgid "" "E571: Sorry, this command is disabled: the Tcl library could not be loaded." msgstr "" "E571: このコマンドは無効です、ごめんなさい: Tclライブラリをロードできませんで" -"した." +"した。" #, c-format msgid "E572: exit code %d" @@ -2865,6 +2632,10 @@ msgid "E938: Duplicate key in JSON: \"%s\"" msgstr "E938: JSONに重複キーがあります: \"%s\"" #, c-format +msgid "E899: Argument of %s must be a List or Blob" +msgstr "E899: %s の引数はリスト型またはBlob型でなければなりません" + +#, c-format msgid "E696: Missing comma in List: %s" msgstr "E696: リスト型にカンマがありません: %s" @@ -2901,7 +2672,7 @@ msgid "'-nb' cannot be used: not enabled at compile time\n" msgstr "'-nb' 使用不可能です: コンパイル時に無効にされています\n" msgid "This Vim was not compiled with the diff feature." -msgstr "このVimにはdiff機能がありません(コンパイル時設定)." +msgstr "このVimにはdiff機能がありません(コンパイル時設定)。" msgid "Attempt to open script file again: \"" msgstr "スクリプトファイルを再び開こうとしました: \"" @@ -3129,7 +2900,7 @@ msgstr "-W <scriptout>\t入力した全コマンドをファイル <scriptout> msgid "-x\t\t\tEdit encrypted files" msgstr "-x\t\t\t暗号化されたファイルを編集する" -msgid "-display <display>\tConnect vim to this particular X-server" +msgid "-display <display>\tConnect Vim to this particular X-server" msgstr "-display <display>\tvimを指定した X サーバーに接続する" msgid "-X\t\t\tDo not connect to X server" @@ -3204,10 +2975,10 @@ msgstr "" "\n" "gvimによって解釈される引数(Athenaバージョン):\n" -msgid "-display <display>\tRun vim on <display>" +msgid "-display <display>\tRun Vim on <display>" msgstr "-display <display>\t<display> でvimを実行する" -msgid "-iconic\t\tStart vim iconified" +msgid "-iconic\t\tStart Vim iconified" msgstr "-iconic\t\t最小化した状態でvimを起動する" msgid "-background <color>\tUse <color> for the background (also: -bg)" @@ -3254,8 +3025,8 @@ msgstr "" "\n" "gvimによって解釈される引数(GTK+バージョン):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" -msgstr "-display <display>\t<display> でvimを実行する(同義: --display)" +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メインウィンドウを識別する一意な役割(role)を設定する" @@ -3279,7 +3050,7 @@ msgid ": Send failed.\n" msgstr ": 送信に失敗しました.\n" msgid ": Send failed. Trying to execute locally\n" -msgstr ": 送信に失敗しました. ローカルでの実行を試みています\n" +msgstr ": 送信に失敗しました。ローカルでの実行を試みています\n" #, c-format msgid "%d of %d edited" @@ -3291,6 +3062,39 @@ msgstr "ディスプレイがありません: 式の送信に失敗しました. msgid ": Send expression failed.\n" msgstr ": 式の送信に失敗しました.\n" +#, c-format +msgid "E224: global abbreviation already exists for %s" +msgstr "E224: %s というグローバル短縮入力は既に存在します" + +#, c-format +msgid "E225: global mapping already exists for %s" +msgstr "E225: %s というグローバルマッピングは既に存在します" + +#, c-format +msgid "E226: abbreviation already exists for %s" +msgstr "E226: %s という短縮入力は既に存在します" + +#, c-format +msgid "E227: mapping already exists for %s" +msgstr "E227: %s というマッピングは既に存在します" + +msgid "No abbreviation found" +msgstr "短縮入力は見つかりませんでした" + +msgid "No mapping found" +msgstr "マッピングは見つかりませんでした" + +msgid "E228: makemap: Illegal mode" +msgstr "E228: makemap: 不正なモード" + +#, c-format +msgid "E357: 'langmap': Matching character missing for %s" +msgstr "E357: 'langmap': %s に対応する文字がありません" + +#, c-format +msgid "E358: 'langmap': Extra characters after semicolon: %s" +msgstr "E358: 'langmap': セミコロンの後に余分な文字があります: %s" + msgid "No marks set" msgstr "マークが設定されていません" @@ -3426,7 +3230,7 @@ msgid "" "Maybe no changes were made or Vim did not update the swap file." msgstr "" "\n" -"恐らく変更がされていないかVimがスワップファイルを更新していません." +"恐らく変更がされていないかVimがスワップファイルを更新していません。" msgid " cannot be used with this version of Vim.\n" msgstr " Vimのこのバージョンでは使用できません.\n" @@ -3449,7 +3253,7 @@ msgid "" "or the file has been damaged." msgstr "" ",\n" -"もしくはファイルが損傷しています." +"もしくはファイルが損傷しています。" #, c-format msgid "" @@ -3487,7 +3291,7 @@ msgid "" "enter the new crypt key." msgstr "" "\n" -"新しい暗号キーを入力してください." +"新しい暗号キーを入力してください。" msgid "" "\n" @@ -3501,7 +3305,7 @@ msgid "" "to use the same key for text file and swap file" msgstr "" "\n" -"スワップファイルに同じ暗号キーを使うためにenterだけを押してください." +"スワップファイルに同じ暗号キーを使うためにenterだけを押してください。" #, c-format msgid "E309: Unable to read block 1 from %s" @@ -3547,7 +3351,7 @@ msgid "See \":help E312\" for more information." msgstr "詳細は \":help E312\" を参照してください" msgid "Recovery completed. You should check if everything is OK." -msgstr "リカバリが終了しました. 全てが正しいかチェックしてください." +msgstr "リカバリが終了しました。全てが正しいかチェックしてください。" msgid "" "\n" @@ -3560,7 +3364,7 @@ msgid "and run diff with the original file to check for changes)" msgstr "原本ファイルとの diff を実行すると良いでしょう)" msgid "Recovery completed. Buffer contents equals file contents." -msgstr "復元完了. バッファの内容はファイルと同じになりました." +msgstr "復元完了。バッファの内容はファイルと同じになりました。" msgid "" "\n" @@ -3589,6 +3393,9 @@ msgstr " ディレクトリ " msgid " -- none --\n" msgstr " -- なし --\n" +msgid "%a %b %d %H:%M:%S %Y" +msgstr "%Y/%m/%d (%a) %H:%M:%S" + msgid " owned by: " msgstr " 所有者: " @@ -3681,8 +3488,8 @@ msgid "E315: ml_get: invalid lnum: %ld" msgstr "E315: ml_get: 無効なlnumです: %ld" #, c-format -msgid "E316: ml_get: cannot find line %ld" -msgstr "E316: ml_get: 行 %ld を見つけられません" +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get: 行 %ld をバッファ %d %s 内に見つけられません" msgid "E317: pointer block id wrong 3" msgstr "E317: ポインタブロックのIDが間違っています 3" @@ -3750,10 +3557,10 @@ msgid "" " file when making changes. Quit, or continue with caution.\n" msgstr "" "\n" -"(1) 別のプログラムが同じファイルを編集しているかもしれません.\n" +"(1) 別のプログラムが同じファイルを編集しているかもしれません。\n" " この場合には、変更をしてしまうと1つのファイルに対して異なる2つの\n" -" インスタンスができてしまうので、そうしないように気をつけてください.\n" -" 終了するか、注意しながら続けてください.\n" +" インスタンスができてしまうので、そうしないように気をつけてください。\n" +" 終了するか、注意しながら続けてください。\n" msgid "(2) An edit session for this file crashed.\n" msgstr "(2) このファイルの編集セッションがクラッシュした.\n" @@ -3924,18 +3731,6 @@ msgstr "" "全て放棄(&D)\n" "キャンセル(&C)" -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 "E766: Insufficient arguments for printf()" msgstr "E766: printf() の引数が不十分です" @@ -3945,9 +3740,6 @@ msgstr "E807: printf() の引数には浮動小数点数が期待されていま msgid "E767: Too many arguments to printf()" msgstr "E767: printf() の引数が多過ぎます" -msgid "W10: Warning: Changing a readonly file" -msgstr "W10: 警告: 読込専用ファイルを変更します" - msgid "Type number and <Enter> or click with mouse (empty cancels): " msgstr "" "番号と<Enter>を入力するかマウスでクリックしてください (空でキャンセル): " @@ -3975,6 +3767,11 @@ msgstr " (割込まれました)" msgid "Beep!" msgstr "ビーッ!" +#, c-format +msgid "%ld second ago" +msgid_plural "%ld seconds ago" +msgstr[0] "%ld 秒経過しています" + msgid "ERROR: " msgstr "エラー: " @@ -3994,12 +3791,8 @@ msgstr "" "[呼出] 総 re/malloc() 回数 %lu, 総 free() 回数 %lu\n" "\n" -msgid "E340: Line is becoming too long" -msgstr "E340: 行が長くなり過ぎました" - -#, c-format -msgid "E341: Internal error: lalloc(%ld, )" -msgstr "E341: 内部エラー: lalloc(%ld,)" +msgid "E341: Internal error: lalloc(0, )" +msgstr "E341: 内部エラー: lalloc(0, )" #, c-format msgid "E342: Out of memory! (allocating %lu bytes)" @@ -4073,12 +3866,6 @@ msgstr "E505: %s は読込専用です (強制書込には ! を追加)" msgid "E349: No identifier under cursor" msgstr "E349: カーソルの位置には識別子がありません" -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc' オプションが空です" - -msgid "E775: Eval feature not available" -msgstr "E775: 式評価機能が無効になっています" - msgid "Warning: terminal cannot highlight" msgstr "警告: 使用している端末はハイライトできません" @@ -4129,9 +3916,6 @@ msgstr "1 行をインデントしました " msgid "%ld lines indented " msgstr "%ld 行をインデントしました " -msgid "E748: No previously used register" -msgstr "E748: まだレジスタを使用していません" - msgid "cannot yank; delete anyway" msgstr "ヤンクできません; とにかく消去" @@ -4143,14 +3927,6 @@ msgid "%ld lines changed" msgstr "%ld 行が変更されました" #, c-format -msgid "freeing %ld lines" -msgstr "%ld 行を解放中" - -#, c-format -msgid " into \"%c" -msgstr " \"%c に" - -#, c-format msgid "block of 1 line yanked%s" msgstr "1 行のブロックが%sヤンクされました" @@ -4166,10 +3942,6 @@ msgstr "%ld 行のブロックが%sヤンクされました" msgid "%ld lines yanked%s" msgstr "%ld 行が%sヤンクされました" -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: レジスタ %s には何もありません" - msgid "" "\n" "--- Registers ---" @@ -4191,11 +3963,6 @@ 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行以上を含められません" - #, c-format msgid "%ld Cols; " msgstr "%ld 列; " @@ -4227,8 +3994,11 @@ msgstr "" msgid "(+%lld for BOM)" msgstr "(+%lld for BOM)" -msgid "Thanks for flying Vim" -msgstr "Vim を使ってくれてありがとう" +msgid "E774: 'operatorfunc' is empty" +msgstr "E774: 'operatorfunc' オプションが空です" + +msgid "E775: Eval feature not available" +msgstr "E775: 式評価機能が無効になっています" msgid "E518: Unknown option" msgstr "E518: 未知のオプションです" @@ -4239,6 +4009,9 @@ msgstr "E519: オプションはサポートされていません" msgid "E520: Not allowed in a modeline" msgstr "E520: modeline では許可されません" +msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" +msgstr "E992: 'modelineexpr' がオフの時 modeline では許可されません" + msgid "E846: Key code not set" msgstr "E846: キーコードが設定されていません" @@ -4248,6 +4021,66 @@ msgstr "E521: = の後には数字が必要です" msgid "E522: Not found in termcap" msgstr "E522: termcap 内に見つかりません" +msgid "E946: Cannot make a terminal with running job modifiable" +msgstr "E946: 実行中のジョブがある端末は変更可能にできません" + +msgid "E590: A preview window already exists" +msgstr "E590: プレビューウィンドウが既に存在します" + +msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" +msgstr "" +"W17: アラビア文字にはUTF-8が必要なので、':set encoding=utf-8' してください" + +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: 24bit色はこの環境ではサポートされていません" + +#, c-format +msgid "E593: Need at least %d lines" +msgstr "E593: 最低 %d の行数が必要です" + +#, c-format +msgid "E594: Need at least %d columns" +msgstr "E594: 最低 %d のカラム幅が必要です" + +#, c-format +msgid "E355: Unknown option: %s" +msgstr "E355: 未知のオプションです: %s" + +#, c-format +msgid "E521: Number required: &%s = '%s'" +msgstr "E521: 数字が必要です: &%s = '%s'" + +msgid "" +"\n" +"--- Terminal codes ---" +msgstr "" +"\n" +"--- 端末コード ---" + +msgid "" +"\n" +"--- Global option values ---" +msgstr "" +"\n" +"--- グローバルオプション値 ---" + +msgid "" +"\n" +"--- Local option values ---" +msgstr "" +"\n" +"--- ローカルオプション値 ---" + +msgid "" +"\n" +"--- Options ---" +msgstr "" +"\n" +"--- オプション ---" + +msgid "E356: get_varp ERROR" +msgstr "E356: get_varp エラー" + #, c-format msgid "E539: Illegal character <%s>" msgstr "E539: 不正な文字です <%s>" @@ -4256,6 +4089,13 @@ msgstr "E539: 不正な文字です <%s>" msgid "For option %s" msgstr "オプション: %s" +msgid "E540: Unclosed expression sequence" +msgstr "E540: 式が終了していません" + + +msgid "E542: unbalanced groups" +msgstr "E542: グループが釣合いません" + msgid "E529: Cannot set 'term' to empty string" msgstr "E529: 'term' には空文字列を設定できません" @@ -4326,86 +4166,6 @@ msgstr "E536: カンマが必要です" msgid "E537: 'commentstring' must be empty or contain %s" msgstr "E537: 'commentstring' は空であるか %s を含む必要があります" -msgid "E538: No mouse support" -msgstr "E538: マウスはサポートされません" - -msgid "E540: Unclosed expression sequence" -msgstr "E540: 式が終了していません" - -msgid "E541: too many items" -msgstr "E541: 要素が多過ぎます" - -msgid "E542: unbalanced groups" -msgstr "E542: グループが釣合いません" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "E946: 実行中のジョブがある端末は変更可能にできません" - -msgid "E590: A preview window already exists" -msgstr "E590: プレビューウィンドウが既に存在します" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "" -"W17: アラビア文字にはUTF-8が必要なので、':set encoding=utf-8' してください" - -msgid "E954: 24-bit colors are not supported on this environment" -msgstr "E954: 24bit色はこの環境ではサポートされていません" - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: 最低 %d の行数が必要です" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: 最低 %d のカラム幅が必要です" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: 未知のオプションです: %s" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: 数字が必要です: &%s = '%s'" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- 端末コード ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- グローバルオプション値 ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- ローカルオプション値 ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- オプション ---" - -msgid "E356: get_varp ERROR" -msgstr "E356: get_varp エラー" - -#, c-format -msgid "E357: 'langmap': Matching character missing for %s" -msgstr "E357: 'langmap': %s に対応する文字がありません" - -#, c-format -msgid "E358: 'langmap': Extra characters after semicolon: %s" -msgstr "E358: 'langmap': セミコロンの後に余分な文字があります: %s" - msgid "cannot open " msgstr "開けません " @@ -4448,7 +4208,7 @@ msgid " returned\n" msgstr " 戻りました\n" msgid "ANCHOR_BUF_SIZE too small." -msgstr "ANCHOR_BUF_SIZE が小さ過ぎます." +msgstr "ANCHOR_BUF_SIZE が小さ過ぎます。" msgid "I/O ERROR" msgstr "入出力エラー" @@ -4498,6 +4258,10 @@ msgstr "" "\n" "Vim: X のエラーを検出しましたr\n" +#, c-format +msgid "restoring display %s" +msgstr "ディスプレイ %s を復元しています" + msgid "Testing the X display failed" msgstr "X display のチェックに失敗しました" @@ -4524,7 +4288,7 @@ msgstr "セキュリティコンテキスト %s を %s に設定できません" #, c-format msgid "Could not get security context %s for %s. Removing it!" -msgstr "セキュリティコンテキスト %s を %s から取得できません. 削除します!" +msgstr "セキュリティコンテキスト %s を %s から取得できません。削除します!" msgid "" "\n" @@ -4755,37 +4519,26 @@ msgstr "E70: %s%%[] が空です" msgid "E956: Cannot use pattern recursively" msgstr "E956: パターンを再帰的に使うことはできません" -msgid "E65: Illegal back reference" -msgstr "E65: 不正な後方参照です" - -msgid "E339: Pattern too long" -msgstr "E339: パターンが長過ぎます" - -msgid "E50: Too many \\z(" -msgstr "E50: \\z( が多過ぎます" - #, c-format -msgid "E51: Too many %s(" -msgstr "E51: %s( が多過ぎます" - -msgid "E52: Unmatched \\z(" -msgstr "E52: \\z( が釣り合っていません" +msgid "E554: Syntax error in %s{...}" +msgstr "E554: %s{...} 内に文法エラーがあります" #, c-format -msgid "E59: invalid character after %s@" -msgstr "E59: %s@ の後に不正な文字がありました" +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA 正規表現) 繰り返せません %s" -#, c-format -msgid "E60: Too many complex %s{...}s" -msgstr "E60: 複雑な %s{...} が多過ぎます" +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: \\%#= には 0, 1 もしくは 2 のみが続けられます。正規表現エンジンは自動選" +"択されます。" -#, c-format -msgid "E61: Nested %s*" -msgstr "E61:%s* が入れ子になっています" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "次のパターンにバックトラッキング RE エンジンを適用します: " -#, c-format -msgid "E62: Nested %s%c" -msgstr "E62:%s%c が入れ子になっています" +msgid "E65: Illegal back reference" +msgstr "E65: 不正な後方参照です" msgid "E63: invalid use of \\_" msgstr "E63: \\_ の無効な使用方法です" @@ -4806,25 +4559,36 @@ msgid "E71: Invalid character after %s%%" msgstr "E71: %s%% の後に不正な文字がありました" #, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: %s{...} 内に文法エラーがあります" +msgid "E59: invalid character after %s@" +msgstr "E59: %s@ の後に不正な文字がありました" -msgid "External submatches:\n" -msgstr "外部の部分該当:\n" +#, c-format +msgid "E60: Too many complex %s{...}s" +msgstr "E60: 複雑な %s{...} が多過ぎます" #, c-format -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (NFA 正規表現) 繰り返せません %s" +msgid "E61: Nested %s*" +msgstr "E61:%s* が入れ子になっています" -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " -"used " -msgstr "" -"E864: \\%#= には 0, 1 もしくは 2 のみが続けられます。正規表現エンジンは自動選" -"択されます。" +#, c-format +msgid "E62: Nested %s%c" +msgstr "E62:%s%c が入れ子になっています" -msgid "Switching to backtracking RE engine for pattern: " -msgstr "次のパターンにバックトラッキング RE エンジンを適用します: " +msgid "E50: Too many \\z(" +msgstr "E50: \\z( が多過ぎます" + +#, c-format +msgid "E51: Too many %s(" +msgstr "E51: %s( が多過ぎます" + +msgid "E52: Unmatched \\z(" +msgstr "E52: \\z( が釣り合っていません" + +msgid "E339: Pattern too long" +msgstr "E339: パターンが長過ぎます" + +msgid "External submatches:\n" +msgstr "外部の部分該当:\n" msgid "E865: (NFA) Regexp end encountered prematurely" msgstr "E865: (NFA) 期待より早く正規表現の終端に到達しました" @@ -4891,6 +4655,23 @@ msgstr "E876: (NFA 正規表現) NFA全体を保存するには空きスペー msgid "E878: (NFA) Could not allocate memory for branch traversal!" msgstr "E878: (NFA) 現在横断中のブランチに十分なメモリを割り当てられません!" +#, c-format +msgid "block of %ld line yanked%s" +msgid_plural "block of %ld lines yanked%s" +msgstr[0] "%ld 行のブロックが%sヤンクされました" + +#, c-format +msgid "%ld line yanked%s" +msgid_plural "%ld lines yanked%s" +msgstr[0] "%ld 行が%sヤンクされました" + +msgid "" +"\n" +"Type Name Content" +msgstr "" +"\n" +"型式 名前 内容" + msgid " VREPLACE" msgstr " 仮想置換" @@ -4942,6 +4723,13 @@ msgstr " 矩形選択" msgid "recording" msgstr "記録中" +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion が取込スクリプト以外で使用されました" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: scriptversion はサポートされていません: %d" + #, c-format msgid "E383: Invalid search string: %s" msgstr "E383: 無効な検索文字列です: %s" @@ -5031,21 +4819,6 @@ msgstr "E797: autocommand の SpellFileMissing がバッファを削除しまし msgid "Warning: region %s not supported" msgstr "警告9: %s という範囲はサポートされていません" -msgid "Sorry, no suggestions" -msgstr "残念ですが、修正候補はありません" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "残念ですが、修正候補は %ld 個しかありません" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "\"%.*s\" を次へ変換:" - -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - msgid "E752: No previous spell replacement" msgstr "E752: スペル置換がまだ実行されていません" @@ -5152,7 +4925,7 @@ msgstr "" #, c-format msgid "Wrong COMPOUNDRULES value in %s line %d: %s" -msgstr "COMPOUNDRULES の値に誤りがあります. ファイル %s の %d 行目: %s" +msgstr "COMPOUNDRULES の値に誤りがあります。ファイル %s の %d 行目: %s" #, c-format msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s" @@ -5548,70 +5321,6 @@ msgid "" msgstr "" " TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN" -msgid "E679: recursive loop loading syncolor.vim" -msgstr "E679: syncolor.vim の再帰呼び出しを検出しました" - -#, c-format -msgid "E411: highlight group not found: %s" -msgstr "E411: ハイライトグループが見つかりません: %s" - -#, c-format -msgid "E412: Not enough arguments: \":highlight link %s\"" -msgstr "E412: 引数が充分ではない: \":highlight link %s\"" - -#, c-format -msgid "E413: Too many arguments: \":highlight link %s\"" -msgstr "E413: 引数が多過ぎます: \":highlight link %s\"" - -msgid "E414: group has settings, highlight link ignored" -msgstr "E414: グループが設定されているのでハイライトリンクは無視されます" - -#, c-format -msgid "E415: unexpected equal sign: %s" -msgstr "E415: 予期せぬ等号です: %s" - -#, c-format -msgid "E416: missing equal sign: %s" -msgstr "E416: 等号がありません: %s" - -#, c-format -msgid "E417: missing argument: %s" -msgstr "E417: 引数がありません: %s" - -#, c-format -msgid "E418: Illegal value: %s" -msgstr "E418: 不正な値です: %s" - -msgid "E419: FG color unknown" -msgstr "E419: 未知の前景色です" - -msgid "E420: BG color unknown" -msgstr "E420: 未知の背景色です" - -#, c-format -msgid "E421: Color name or number not recognized: %s" -msgstr "E421: カラー名や番号を認識できません: %s" - -#, c-format -msgid "E422: terminal code too long: %s" -msgstr "E422: 終端コードが長過ぎます: %s" - -#, c-format -msgid "E423: Illegal argument: %s" -msgstr "E423: 不正な引数です: %s" - -msgid "E424: Too many different highlighting attributes in use" -msgstr "E424: 多くの異なるハイライト属性が使われ過ぎています" - -msgid "E669: Unprintable character in group name" -msgstr "E669: グループ名に印刷不可能な文字があります" - -msgid "W18: Invalid character in group name" -msgstr "W18: グループ名に不正な文字があります" - -msgid "E849: Too many highlight and syntax groups" -msgstr "E849: ハイライトと構文グループが多過ぎます" - msgid "E555: at bottom of tag stack" msgstr "E555: タグスタックの末尾です" @@ -5699,7 +5408,7 @@ msgid "Duplicate field name: %s" msgstr "重複したフィールド名: %s" msgid "' not known. Available builtin terminals are:" -msgstr "' は未知です. 現行の組み込み端末は次のとおりです:" +msgstr "' は未知です。現行の組み込み端末は次のとおりです:" msgid "defaulting to '" msgstr "省略値を次のように設定します '" @@ -5922,6 +5631,9 @@ msgstr "E125: 不正な引数です: %s" msgid "E853: Duplicate argument name: %s" msgstr "E853: 引数名が重複しています: %s" +msgid "E989: Non-default argument follows default argument" +msgstr "E989: 非デフォルト引数がデフォルト引数の後にあります" + #, c-format msgid "E740: Too many arguments for function %s" msgstr "E740: 関数の引数が多過ぎます: %s" @@ -5957,6 +5669,10 @@ msgid "E117: Unknown function: %s" msgstr "E117: 未知の関数です: %s" #, c-format +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: 関数をメソッドとして使用できません: %s" + +#, c-format msgid "E933: Function was deleted: %s" msgstr "E933: 関数は削除されました: %s" @@ -6025,10 +5741,6 @@ msgid "E133: :return not inside a function" msgstr "E133: 関数外に :return がありました" #, c-format -msgid "E107: Missing parentheses: %s" -msgstr "E107: カッコ '(' がありません: %s" - -#, c-format msgid "%s (%s, compiled %s)" msgstr "%s (%s, compiled %s)" @@ -6344,9 +6056,6 @@ msgstr "E799: 無効な ID: %ld (1 以上でなければなりません)" msgid "E801: ID already taken: %ld" msgstr "E801: ID はすでに利用中です: %ld" -msgid "List or number required" -msgstr "リストか数値が必要です" - #, c-format msgid "E802: Invalid ID: %ld (must be greater than or equal to 1)" msgstr "E802: 無効な ID: %ld (1 以上でなければなりません)" @@ -6447,9 +6156,6 @@ msgstr "E685: 内部エラーです: %s" msgid "Interrupted" msgstr "割込まれました" -msgid "E14: Invalid address" -msgstr "E14: 無効なアドレスです" - msgid "E474: Invalid argument" msgstr "E474: 無効な引数です" @@ -6624,6 +6330,9 @@ msgstr "E44: 不正な正規表現プログラムです" msgid "E45: 'readonly' option is set (add ! to override)" msgstr "E45: 'readonly' オプションが設定されています (! を追加で上書き)" +msgid "E995: Cannot modify existing variable" +msgstr "E995: 既存の変数を変更できません" + #, c-format msgid "E46: Cannot change read-only variable \"%s\"" msgstr "E46: 読取専用変数 \"%s\" には値を設定できません" @@ -6720,6 +6429,10 @@ msgstr "E939: 正のカウントが必要です" msgid "E81: Using <SID> not in a script context" msgstr "E81: スクリプト以外で<SID>が使われました" +#, c-format +msgid "E107: Missing parentheses: %s" +msgstr "E107: カッコ '(' がありません: %s" + msgid "E449: Invalid expression received" msgstr "E449: 無効な式を受け取りました" @@ -6863,7 +6576,7 @@ msgid "list index out of range" msgstr "リスト範囲外のインデックスです" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "内部エラー: vimのリスト要素 %d の取得に失敗しました" msgid "slice step cannot be zero" @@ -6874,7 +6587,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "長さ %d の拡張スライスに、より長いスライスを割り当てようとしました" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "内部エラー: vimのリスト要素 %d はありません" msgid "internal error: not enough list items" @@ -6983,19 +6696,19 @@ msgstr "コードの実行に失敗しました" msgid "E858: Eval did not return a valid python object" msgstr "E858: 式評価は有効なpythonオブジェクトを返しませんでした" -msgid "E859: Failed to convert returned python object to vim value" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: 返されたpythonオブジェクトをvimの値に変換できませんでした" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "%s vimの辞書型に変換できません" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "%s をvimのリストに変換できません" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "%s をvimの構造体に変換できません" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/sr.po b/src/nvim/po/sr.po index a93a2ec584..1450ab5164 100644 --- a/src/nvim/po/sr.po +++ b/src/nvim/po/sr.po @@ -10,15 +10,92 @@ msgid "" msgstr "" "Project-Id-Version: Vim(Serbian)\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-05-15 11:55+0400\n" -"PO-Revision-Date: 2018-05-15 10:50+0400\n" +"POT-Creation-Date: 2021-02-14 01:49+0400\n" +"PO-Revision-Date: 2021-02-14 01:54+0400\n" "Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n" "Language-Team: Serbian\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" +"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "E163: There is only one file to edit" +msgstr "E163: Постоји само један фајл за уређивање" + +msgid "E164: Cannot go before first file" +msgstr "E164: Не може да се иде испред првог фајла" + +msgid "E165: Cannot go beyond last file" +msgstr "E165: Не може да се иде иза последњег фајла" + +msgid "E610: No argument to delete" +msgstr "E610: Нема аргумента за брисање" + +msgid "E249: window layout changed unexpectedly" +msgstr "E249: распоред прозора се неочекивано променио" + +msgid "--Deleted--" +msgstr "--Обрисано--" + +#, c-format +msgid "auto-removing autocommand: %s <buffer=%d>" +msgstr "ауто-уклањајућа аутокоманда: %s <бафер=%d>" + +#, c-format +msgid "E367: No such group: \"%s\"" +msgstr "E367: Нема такве групе: \"%s\"" + +msgid "E936: Cannot delete the current group" +msgstr "E936: Текућа група не може да се обрише" + +msgid "W19: Deleting augroup that is still in use" +msgstr "W19: Брисање augroup која је још у употреби" + +#, c-format +msgid "E215: Illegal character after *: %s" +msgstr "E215: Недозвољени карактер након *: %s" + +#, c-format +msgid "E216: No such event: %s" +msgstr "E216: Нема таквог догађаја: %s" + +#, c-format +msgid "E216: No such group or event: %s" +msgstr "E216: Нема такве групе или догађаја: %s" + +msgid "" +"\n" +"--- Autocommands ---" +msgstr "" +"\n" +"--- Аутокоманде ---" + +#, c-format +msgid "E680: <buffer=%d>: invalid buffer number " +msgstr "E680: <бафер=%d>: неисправан број бафера " + +msgid "E217: Can't execute autocommands for ALL events" +msgstr "E217: Аутокоманде за СВЕ догађаје не могу да се изврше" + +msgid "No matching autocommands" +msgstr "Нема подударајућих аутокоманди" + +msgid "E218: autocommand nesting too deep" +msgstr "E218: Угњеждавање аутокоманде је сувише дубоко" + +#, c-format +msgid "%s Autocommands for \"%s\"" +msgstr "%s Аутокоманде за \"%s\"" + +#, c-format +msgid "Executing %s" +msgstr "Извршавање %s" + +#, c-format +msgid "autocommand %s" +msgstr "аутокоманда %s" msgid "E831: bf_key_init() called with empty password" msgstr "E831: bf_key_init() је позвана са празном лозинком" @@ -53,8 +130,9 @@ msgstr "E83: Не може да се резервише меморија за б msgid "E931: Buffer cannot be registered" msgstr "E931: Бафер не може да се региструје" -msgid "E937: Attempt to delete a buffer that is in use" -msgstr "E937: Покушај брисања бафера који је у употреби" +#, c-format +msgid "E937: Attempt to delete a buffer that is in use: %s" +msgstr "E937: Покушај брисања бафера који је у употреби: %s" msgid "E515: No buffers were unloaded" msgstr "E515: Ниједан бафер није уклоњен из меморије" @@ -65,26 +143,26 @@ msgstr "E516: Ниједан бафер није обрисан" msgid "E517: No buffers were wiped out" msgstr "E517: Ниједан бафер није очишћен" -msgid "1 buffer unloaded" -msgstr "1 бафер је уклоњен из меморије" - #, c-format -msgid "%d buffers unloaded" -msgstr "%d бафера је уклоњено из меморије" - -msgid "1 buffer deleted" -msgstr "1 бафер је обрисан" +msgid "%d buffer unloaded" +msgid_plural "%d buffers unloaded" +msgstr[0] "%d бафер је уклоњен из меморије" +msgstr[1] "%d бафера је уклоњено из меморије" +msgstr[2] "%d бафера је уклоњено из меморије" #, c-format -msgid "%d buffers deleted" -msgstr "%d бафера је обрисано" - -msgid "1 buffer wiped out" -msgstr "1 бафер је очишћен" +msgid "%d buffer deleted" +msgid_plural "%d buffers deleted" +msgstr[0] "%d бафер је обрисан" +msgstr[1] "%d бафера је обрисано" +msgstr[2] "%d бафера је обрисано" #, c-format -msgid "%d buffers wiped out" -msgstr "%d бафера је очишћено" +msgid "%d buffer wiped out" +msgid_plural "%d buffers wiped out" +msgstr[0] "%d бафер је очишћен" +msgstr[1] "%d бафера је очишћено" +msgstr[2] "%d бафера је очишћено" msgid "E90: Cannot unload last buffer" msgstr "E90: Последњи бафер не може да се уклони из меморије" @@ -102,10 +180,9 @@ msgid "E88: Cannot go before first buffer" msgstr "E88: Не може да се иде испред првог бафера" #, c-format -msgid "E89: No write since last change for buffer %ld (add ! to override)" +msgid "E89: No write since last change for buffer %d (add ! to override)" msgstr "" -"E89: Од последње измене није било уписа за бафер %ld (додајте ! да " -"премостите)" +"E89: Од последње измене није било уписа за бафер %d (додајте ! да премостите)" msgid "E948: Job still running (add ! to end the job)" msgstr "E948: Задатак се још извршава (додајте ! да зауставите задатак)" @@ -161,12 +238,11 @@ msgid "[readonly]" msgstr "[само за читање]" #, c-format -msgid "1 line --%d%%--" -msgstr "1 линија --%d%%--" - -#, c-format -msgid "%ld lines --%d%%--" -msgstr "%ld линија --%d%%--" +msgid "%ld line --%d%%--" +msgid_plural "%ld lines --%d%%--" +msgstr[0] "%ld линија --%d%%--" +msgstr[1] "%ld линијe --%d%%--" +msgstr[2] "%ld линија --%d%%--" #, c-format msgid "line %ld of %ld --%d%%-- col " @@ -193,45 +269,174 @@ msgstr "Дно" msgid "Top" msgstr "Врх" -msgid "" -"\n" -"# Buffer list:\n" -msgstr "" -"\n" -"# Листа бафера:\n" - msgid "E382: Cannot write, 'buftype' option is set" msgstr "E382: Упис није могућ, постављена је 'buftype' опција" +msgid "[Prompt]" +msgstr "[Одзив]" + +msgid "[Popup]" +msgstr "[Балон]" + msgid "[Scratch]" msgstr "[Празно]" +msgid "WARNING: The file has been changed since reading it!!!" +msgstr "УПОЗОРЕЊЕ: Овај фајл је промењен од кад је прочитан!!!" + +msgid "Do you really want to write to it" +msgstr "Да ли заиста желите да пишете у њега" + +msgid "[New]" +msgstr "[Ново]" + +msgid "[New File]" +msgstr "[Нов фајл]" + +msgid "E676: No matching autocommands for acwrite buffer" +msgstr "E676: Нема одговарајућих аутокоманди за acwrite бафер" + +msgid "E203: Autocommands deleted or unloaded buffer to be written" +msgstr "" +"E203: Аутокоманде су обрисале или уклониле из меморије бафер који требало да " +"буде уписан" + +msgid "E204: Autocommand changed number of lines in unexpected way" +msgstr "E204: Аутокоманде су на неочекиван начин промениле број линија" + +msgid "NetBeans disallows writes of unmodified buffers" +msgstr "NetBeans не дозвољава упис неизмењених бафера" + +msgid "Partial writes disallowed for NetBeans buffers" +msgstr "Парцијални уписи нису дозвољени за NetBeans бафере" + +msgid "is a directory" +msgstr "је директоријум" + +msgid "is not a file or writable device" +msgstr "није фајл или уређај на који може да се уписује" + +msgid "writing to device disabled with 'opendevice' option" +msgstr "упис на уређај је онемогућен опцијом 'opendevice'" + +msgid "is read-only (add ! to override)" +msgstr "је само за читање (додајте ! за премошћавање)" + +msgid "E506: Can't write to backup file (add ! to override)" +msgstr "E506: Не може да се упише у резервни фајл (додајте ! за премошћавање)" + +msgid "E507: Close error for backup file (add ! to override)" +msgstr "" +"E507: Грешка код затварања за резервни фајл (додајте ! за премошћавање)" + +msgid "E508: Can't read file for backup (add ! to override)" +msgstr "E508: Резервни фајл не може да се прочита (додајте ! за премошћавање)" + +msgid "E509: Cannot create backup file (add ! to override)" +msgstr "E509: Резервни фајл не може да се креира (додајте ! за премошћавање)" + +msgid "E510: Can't make backup file (add ! to override)" +msgstr "E510: Резервни фајл не може да се направи (додајте ! за премошћавање)" + +msgid "E214: Can't find temp file for writing" +msgstr "E214: Привремени фајл за упис не може да се пронађе" + +msgid "E213: Cannot convert (add ! to write without conversion)" +msgstr "E213: Конверзија није могућа (додајте ! за упис без конверзије)" + +msgid "E166: Can't open linked file for writing" +msgstr "E166: Повезани фајл не може да се отвори за упис" + +msgid "E212: Can't open file for writing" +msgstr "E212: фајл не може да се отвори за упис" + +msgid "E949: File changed while writing" +msgstr "E949: фајл је промењен током уписа" + +msgid "E512: Close failed" +msgstr "E512: Затварање није успело" + +msgid "E513: write error, conversion failed (make 'fenc' empty to override)" +msgstr "" +"E513: грешка при упису, конверзија није успела (оставите 'fenc' празно да " +"премостите)" + +#, c-format +msgid "" +"E513: write error, conversion failed in line %ld (make 'fenc' empty to " +"override)" +msgstr "" +"E513: грешка при упису, конверзија није успела у линији %ld (оставите 'fenc' " +"празно да премостите)" + +msgid "E514: write error (file system full?)" +msgstr "E514: грешка при упису (систем фајлова је пун?)" + +msgid " CONVERSION ERROR" +msgstr " ГРЕШКА КОНВЕРЗИЈЕ" + +#, c-format +msgid " in line %ld;" +msgstr " у линији %ld;" + +msgid "[NOT converted]" +msgstr "[НИЈЕ конвертовано]" + +msgid "[converted]" +msgstr "[конвертовано]" + +msgid "[Device]" +msgstr "[Уређај]" + +msgid " [a]" +msgstr " [н]" + +msgid " appended" +msgstr " настављено" + +msgid " [w]" +msgstr " [у]" + +msgid " written" +msgstr " уписано" + +msgid "E205: Patchmode: can't save original file" +msgstr "E205: Patch режим: оригинални фајл не може да се сачува" + +msgid "E206: patchmode: can't touch empty original file" +msgstr "E206: Patch режим: не може да се креира празан оригинални фајл" + +msgid "E207: Can't delete backup file" +msgstr "E207: Резервни фајл не може да се обрише" + msgid "" "\n" -"--- Signs ---" +"WARNING: Original file may be lost or damaged\n" msgstr "" "\n" -"--- Знаци ---" +"УПОЗОРЕЊЕ: Оригинални фајл је можда изгубљен или оштећен\n" -#, c-format -msgid "Signs for %s:" -msgstr "Знаци за %s:" +msgid "don't quit the editor until the file is successfully written!" +msgstr "не напуштајте едитор док се фајл успешно не упише!" -#, c-format -msgid " line=%ld id=%d name=%s" -msgstr " линија=%ld ид=%d име=%s" +msgid "W10: Warning: Changing a readonly file" +msgstr "W10: Упозорење: Мења се фајл који може само да се чита" msgid "E902: Cannot connect to port" msgstr "E902: Повезивање на порт није могуће" +msgid "E898: socket() in channel_connect()" +msgstr "E898: socket() у channel_connect()" + +#, c-format +msgid "E901: getaddrinfo() in channel_open(): %s" +msgstr "E901: getaddrinfo() у channel_open(): %s" + msgid "E901: gethostbyname() in channel_open()" msgstr "E901: gethostbyname() у channel_open()" -msgid "E898: socket() in channel_open()" -msgstr "E898: socket() у channel_open()" - msgid "E903: received command with non-string argument" -msgstr "E903: примњена команда са аргуменом који није стринг" +msgstr "E903: примљена команда са аргументом који није стринг" msgid "E904: last argument for expr/call must be a number" msgstr "E904: последњи аргумент за expr/call мора бити број" @@ -243,6 +448,9 @@ msgstr "E904: трећи аргумент за call мора бити листа msgid "E905: received unknown command: %s" msgstr "E905: примљена непозната команда: %s" +msgid "E906: not an open channel" +msgstr "E906: није отворен канал" + #, c-format msgid "E630: %s(): write while not connected" msgstr "E630: %s(): упис док није успостављена веза" @@ -290,21 +498,50 @@ msgstr "Кључеви нису исти!" msgid "[crypted]" msgstr "[шифровано]" +msgid "Entering Debug mode. Type \"cont\" to continue." +msgstr "Улазак у Debug режим. Откуцајте \"cont\" за наставак." + #, c-format -msgid "E720: Missing colon in Dictionary: %s" -msgstr "E720: Недостаје тачка-зарез у Речнику: %s" +msgid "Oldval = \"%s\"" +msgstr "Старавред = \"%s\"" #, c-format -msgid "E721: Duplicate key in Dictionary: \"%s\"" -msgstr "E721: Дупликат кључа у Речнику: \"%s\"" +msgid "Newval = \"%s\"" +msgstr "Новавред = \"%s\"" #, c-format -msgid "E722: Missing comma in Dictionary: %s" -msgstr "E722: Недостаје зарез у Речнику: %s" +msgid "line %ld: %s" +msgstr "линија %ld: %s" + +#, c-format +msgid "cmd: %s" +msgstr "ком: %s" + +msgid "frame is zero" +msgstr "оквир је нула" #, c-format -msgid "E723: Missing end of Dictionary '}': %s" -msgstr "E723: Недостаје крај Речника '}': %s" +msgid "frame at highest level: %d" +msgstr "оквир је на највишем нивоу: %d" + +#, c-format +msgid "Breakpoint in \"%s%s\" line %ld" +msgstr "Прекидна тачка у \"%s%s\" линија %ld" + +#, c-format +msgid "E161: Breakpoint not found: %s" +msgstr "E161: Прекидна тачка није пронађена: %s" + +msgid "No breakpoints defined" +msgstr "Није дефинисана ниједна прекидна тачка" + +#, c-format +msgid "%3d %s %s line %ld" +msgstr "%3d %s %s линија %ld" + +#, c-format +msgid "%3d expr %s" +msgstr "%3d израз %s" msgid "extend() argument" msgstr "extend() аргумент" @@ -589,6 +826,9 @@ msgstr "E910: Користи се Job као Number" msgid "E913: Using a Channel as a Number" msgstr "E913: Користи се Channel као Number" +msgid "E974: Using a Blob as a Number" +msgstr "E974: Користи се Blob као Number" + msgid "E891: Using a Funcref as a Float" msgstr "E891: Користи се Funcref као Float" @@ -610,6 +850,9 @@ msgstr "E911: Користи се Job као Float" msgid "E914: Using a Channel as a Float" msgstr "E914: Користи се Channel као Float" +msgid "E975: Using a Blob as a Float" +msgstr "E975: Користи се Blob као Float" + msgid "E729: using Funcref as a String" msgstr "E729: користи се Funcref као String" @@ -619,48 +862,27 @@ msgstr "E730: користи се List као String" msgid "E731: using Dictionary as a String" msgstr "E731: користи се Dictionary као String" +msgid "E976: using Blob as a String" +msgstr "E976: коришћење Blob као String" + msgid "E908: using an invalid value as a String" msgstr "E908: користи се недозвољена вредност као String" -#, c-format -msgid "E795: Cannot delete variable %s" -msgstr "E795: Променљива %s не може да се обрише" - -#, c-format -msgid "E704: Funcref variable name must start with a capital: %s" -msgstr "E704: Име Funcref мора да почне великим словом: %s" - -#, c-format -msgid "E705: Variable name conflicts with existing function: %s" -msgstr "E705: Име променљиве је у конфликту са постојећом функцијом: %s" - -#, c-format -msgid "E741: Value is locked: %s" -msgstr "E741: Вредност је закључана: %s" - -msgid "Unknown" -msgstr "Непознато" - -#, c-format -msgid "E742: Cannot change value of %s" -msgstr "E742: Вредност %s не може да се промени" - msgid "E698: variable nested too deep for making a copy" msgstr "E698: променљива је предубоко угњеждена да би се направила копија" msgid "" "\n" -"# global variables:\n" -msgstr "" -"\n" -"# глобалне променљиве:\n" - -msgid "" -"\n" "\tLast set from " msgstr "" "\n" -"\tПоследњи сет од " +"\tПоследње постављено из " + +msgid " line " +msgstr " линија " + +msgid "E977: Can only compare Blob with Blob" +msgstr "E977: Blob може да се пореди само са Blob" msgid "E691: Can only compare List with List" msgstr "E691: List може да се пореди само са List" @@ -728,31 +950,18 @@ msgstr "" msgid "called inputrestore() more often than inputsave()" msgstr "inputrestore() је позвана више пута него inputsave()" -msgid "insert() argument" -msgstr "insert() аргумент" - msgid "E786: Range not allowed" msgstr "E786: Опсег није дозвољен" -msgid "E916: not a valid job" -msgstr "E916: није валидан job" - msgid "E701: Invalid type for len()" msgstr "E701: Неисправан тип за len()" -#, c-format -msgid "E798: ID is reserved for \":match\": %ld" -msgstr "E798: ИД је резервисан за \":match\": %ld" - msgid "E726: Stride is zero" msgstr "E726: Корак је нула" msgid "E727: Start past end" msgstr "E727: Почетак иза краја" -msgid "<empty>" -msgstr "<празно>" - msgid "E240: No connection to the X server" msgstr "E240: Нема везе са X сервером" @@ -1026,15 +1235,6 @@ msgstr "Шаблон је пронаћен у свакој линији: %s" msgid "Pattern not found: %s" msgstr "Шаблон није пронађен: %s" -msgid "" -"\n" -"# Last Substitute String:\n" -"$" -msgstr "" -"\n" -"# Последњи Стринг за замену:\n" -"$" - msgid "E478: Don't panic!" msgstr "E478: Не паничите!" @@ -1409,7 +1609,7 @@ msgid "E185: Cannot find color scheme '%s'" msgstr "E185: Шема боја '%s' не може да се пронађе" msgid "Greetings, Vim user!" -msgstr "Поздрав, корисниче Vim-a" +msgstr "Поздрав, корисниче програма Vim!" msgid "E784: Cannot close last tab page" msgstr "E784: Последња картица не може да се затвори" @@ -1436,7 +1636,7 @@ msgstr "" "премошћавање)" msgid "E186: No previous directory" -msgstr "E186: Нема претгодног директоријума" +msgstr "E186: Нема претходног директоријума" msgid "E187: Unknown" msgstr "E187: Непознато" @@ -1460,15 +1660,6 @@ msgstr "E930: :redir не може да се користи унутар execute msgid "Save Redirection" msgstr "Сачувај Редирекцију" -msgid "Save View" -msgstr "Сачувај Поглед" - -msgid "Save Session" -msgstr "Сачувај Сесију" - -msgid "Save Setup" -msgstr "Сачувај Подешавање" - #, c-format msgid "E739: Cannot create directory: %s" msgstr "E739: Директоријум не може да се креира: %s" @@ -1574,15 +1765,6 @@ msgstr "Прекид" msgid "E579: :if nesting too deep" msgstr "E579: :if угњеждавање је сувише дубоко" -msgid "E580: :endif without :if" -msgstr "E580: :endif без :if" - -msgid "E581: :else without :if" -msgstr "E581: :else без :if" - -msgid "E582: :elseif without :if" -msgstr "E582: :elseif без :if" - msgid "E583: multiple :else" msgstr "E583: вишеструко :else" @@ -1592,35 +1774,23 @@ msgstr "E584: :elseif након :else" msgid "E585: :while/:for nesting too deep" msgstr "E585: :while/:for угњеждавање је сувише дубоко" -msgid "E586: :continue without :while or :for" -msgstr "E586: :continue без :while или :for" - -msgid "E587: :break without :while or :for" -msgstr "E587: :break без :while или :for" - msgid "E732: Using :endfor with :while" msgstr "E732: Коришћење :endfor са :while" msgid "E733: Using :endwhile with :for" msgstr "E733: Коришћење :endwhile са :for" +msgid "E579: block nesting too deep" +msgstr "E579: угњеждавање блокова је сувише дубоко" + msgid "E601: :try nesting too deep" msgstr "E601: :try угњеждавање је сувише дубоко" -msgid "E603: :catch without :try" -msgstr "E603: :catch без :try" - msgid "E604: :catch after :finally" msgstr "E604: :catch након :finally" -msgid "E606: :finally without :try" -msgstr "E606: :finally без :try" - -msgid "E607: multiple :finally" -msgstr "E607: вишеструко :finally" - -msgid "E602: :endtry without :try" -msgstr "E602: :endtry без :try" +msgid "E193: :enddef not inside a function" +msgstr "E193: :enddef није унутар функције" msgid "E193: :endfunction not inside a function" msgstr "E193: :endfunction није унутар функције" @@ -1991,72 +2161,69 @@ msgstr "E462: Припрема за поновно учитавање \"%s\" н msgid "E321: Could not reload \"%s\"" msgstr "E321: \"%s\" не може поново да се учита" -msgid "--Deleted--" -msgstr "--Обрисано--" +msgid "E219: Missing {." +msgstr "E219: Недостаје {." -#, c-format -msgid "auto-removing autocommand: %s <buffer=%d>" -msgstr "ауто-уклањајућа аутокоманда: %s <бафер=%d>" +msgid "E220: Missing }." +msgstr "E220: Недостаје }." -#, c-format -msgid "E367: No such group: \"%s\"" -msgstr "E367: Нема такве групе: \"%s\"" +msgid "<empty>" +msgstr "<празно>" -msgid "E936: Cannot delete the current group" -msgstr "E936: Текућа група не може да се обрише" +msgid "E655: Too many symbolic links (cycle?)" +msgstr "E655: Превише симболичких веза (циклус?)" -msgid "W19: Deleting augroup that is still in use" -msgstr "W19: Брисање augroup која је још у употреби" +msgid "writefile() first argument must be a List or a Blob" +msgstr "Први аргумент writefile() мора бити Листа или Блоб" -#, c-format -msgid "E215: Illegal character after *: %s" -msgstr "E215: Недозвољени карактер након *: %s" +msgid "Select Directory dialog" +msgstr "Дијалог избора директоријума" -#, c-format -msgid "E216: No such event: %s" -msgstr "E216: Нема таквог догађаја: %s" +msgid "Save File dialog" +msgstr "Дијалог чувања фајла" -#, c-format -msgid "E216: No such group or event: %s" -msgstr "E216: Нема такве групе или догађаја: %s" +msgid "Open File dialog" +msgstr "Дијалог отварања фајла" -msgid "" -"\n" -"--- Autocommands ---" -msgstr "" -"\n" -"--- Аутокоманде ---" +msgid "E338: Sorry, no file browser in console mode" +msgstr "E338: Жао нам је, нема претраживача фајлова у конзолном режиму" -#, c-format -msgid "E680: <buffer=%d>: invalid buffer number " -msgstr "E680: <бафер=%d>: неисправан број бафера " +msgid "no matches" +msgstr "нема подударања" -msgid "E217: Can't execute autocommands for ALL events" -msgstr "E217: Аутокоманде за СВЕ догађаје не могу да се изврше" +msgid "E854: path too long for completion" +msgstr "E854: путања је сувише дугачка да би се довршила" -msgid "No matching autocommands" -msgstr "Нема подударајућих аутокоманди" +#, c-format +msgid "" +"E343: Invalid path: '**[number]' must be at the end of the path or be " +"followed by '%s'." +msgstr "" +"E343: Неисправна путања: '**[број]' мора бити на крају путање или да иза " +"њега следи '%s'." -msgid "E218: autocommand nesting too deep" -msgstr "E218: Угњеждавање аутокоманде је сувише дубоко" +#, c-format +msgid "E344: Can't find directory \"%s\" in cdpath" +msgstr "E344: Директоријум \"%s\" не може да се пронађе у cdpath" #, c-format -msgid "%s Autocommands for \"%s\"" -msgstr "%s Аутокоманде за \"%s\"" +msgid "E345: Can't find file \"%s\" in path" +msgstr "E345: Фајл \"%s\" не може да се пронађе у path" #, c-format -msgid "Executing %s" -msgstr "Извршавање %s" +msgid "E346: No more directory \"%s\" found in cdpath" +msgstr "E346: Директоријум \"%s\" више не може да се пронађе у cdpath" #, c-format -msgid "autocommand %s" -msgstr "аутокоманда %s" +msgid "E347: No more file \"%s\" found in path" +msgstr "E347: Фајл \"%s\" више не може да се пронађе у path" -msgid "E219: Missing {." -msgstr "E219: Недостаје {." +msgid "E446: No file name under cursor" +msgstr "E446: Под курсором се не налази име фајла" -msgid "E220: Missing }." -msgstr "E220: Недостаје }." +#, c-format +msgid "E447: Can't find file \"%s\" in path" +msgstr "E447: Фајл \"%s\" не може да се пронађе у путањи" msgid "E490: No fold found" msgstr "E490: Није пронађено ниједно склапање" @@ -2126,10 +2293,6 @@ msgstr "E231: 'guifontwide' неисправан" msgid "E599: Value of 'imactivatekey' is invalid" msgstr "E599: Вредност 'imactivatekey' није исправна" -#, c-format -msgid "E254: Cannot allocate color %s" -msgstr "E254: Боја %s не може да се алоцира" - msgid "No match at cursor, finding next" msgstr "Нема подударања на месту курсора, тражи се даље" @@ -2165,15 +2328,15 @@ msgid "E232: Cannot create BalloonEval with both message and callback" msgstr "" "E232: Не може да се креира BalloonEval и са поруком и са повратним позивом" -msgid "_Cancel" -msgstr "_Откажи" - msgid "_Save" msgstr "_Сачувај" msgid "_Open" msgstr "_Отвори" +msgid "_Cancel" +msgstr "_Откажи" + msgid "_OK" msgstr "_OK" @@ -2288,11 +2451,11 @@ msgstr "О&позови" msgid "Open tab..." msgstr "Отвори картицу" -msgid "Find string (use '\\\\' to find a '\\')" -msgstr "Пронађи стринг (користите '\\\\' да пронађете '\\')" +msgid "Find string" +msgstr "Пронађи стринг" -msgid "Find & Replace (use '\\\\' to find a '\\')" -msgstr "Пронађи & Замени (користите '\\\\' да пронађете '\\')" +msgid "Find & Replace" +msgstr "Пронађи & Замени" msgid "Not Used" msgstr "Не користи се" @@ -2308,6 +2471,9 @@ msgstr "E671: Наслов прозора \"%s\" не може да се про msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." msgstr "E243: Аргумент није подржан: \"-%s\"; Користите OLE верзију." +msgid "E988: GUI cannot be used. Cannot execute gvim.exe." +msgstr "E988: ГКИ не може да се користи. Није могуће извршавање gvim.exe." + msgid "E672: Unable to open window inside MDI application" msgstr "E672: Није могуће отварање прозора унутар MDI апликације" @@ -2317,7 +2483,7 @@ msgstr "" #, c-format msgid "E250: Fonts for the following charsets are missing in fontset %s:" -msgstr "E250: Фонтови за следеће сетове карактера недостају у фонтсету %s:" +msgstr "E250: У фонтсету %s недостају фонтови за следеће скупове карактера:" #, c-format msgid "E252: Fontset name: %s" @@ -2325,7 +2491,7 @@ msgstr "E252: Име фонтсета: %s" #, c-format msgid "Font '%s' is not fixed-width" -msgstr "Фонт %s' није фиксне ширине" +msgstr "Фонт '%s' није фиксне ширине" #, c-format msgid "E253: Fontset name: %s" @@ -2336,20 +2502,39 @@ msgid "Font0: %s" msgstr "Фонт0: %s" #, c-format -msgid "Font1: %s" -msgstr "Фонт1: %s" +msgid "Font%d: %s" +msgstr "Фонт%d: %s" #, c-format -msgid "Font%ld width is not twice that of font0" -msgstr "Ширина фонт%ld није двострука од ширине фонт0" +msgid "Font%d width is not twice that of font0" +msgstr "Фонт%d није два пута шири од фонт0" #, c-format -msgid "Font0 width: %ld" -msgstr "Фонт0 ширина: %ld" +msgid "Font0 width: %d" +msgstr "Фонт0 ширина: %d" #, c-format -msgid "Font1 width: %ld" -msgstr "Фонт1 ширина: %ld" +msgid "Font%d width: %d" +msgstr "Фонт%d ширина: %d" + +msgid "E284: Cannot set IC values" +msgstr "E284: IC вредности не могу да се поставе" + +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 "Invalid font specification" msgstr "Неисправна спецификација фонта" @@ -2381,9 +2566,6 @@ msgstr "Стил:" msgid "Size:" msgstr "Величина:" -msgid "E256: Hangul automata ERROR" -msgstr "E256: ГРЕШКА Hangul аутомата" - msgid "E550: Missing colon" msgstr "E550: Недостаје двотачка" @@ -2525,8 +2707,8 @@ msgid "Added cscope database %s" msgstr "cscope база података %s је додата" #, c-format -msgid "E262: error reading cscope connection %ld" -msgstr "E262: грешка код читања cscope везе %ld" +msgid "E262: error reading cscope connection %d" +msgstr "E262: грешка код читања cscope везе %d" msgid "E561: unknown cscope search type" msgstr "E561: непознат cscope тип претраге" @@ -2718,11 +2900,12 @@ msgstr "E370: Библиотека %s није могла да се учита" msgid "Sorry, this command is disabled: the Perl library could not be loaded." msgstr "" -"Жао нам је, ова команда је онемогућена: Perl библиотека није могла да " -"се учита." +"Жао нам је, ова команда је онемогућена: Perl библиотека није могла да се " +"учита." msgid "E299: Perl evaluation forbidden in sandbox without the Safe module" -msgstr "E299: Perl одређивање вредности у sandbox-у је забрањено без Safe модула" +msgstr "" +"E299: Perl одређивање вредности у sandbox-у је забрањено без Safe модула" msgid "E836: This Vim cannot execute :python after using :py3" msgstr "E836: Овај Vim не може да изврши :python након коришћења :py3" @@ -2812,9 +2995,6 @@ msgstr "непозната vimОпција" msgid "keyboard interrupt" msgstr "прекид тастатуре" -msgid "vim error" -msgstr "vim грешка" - msgid "cannot create buffer/window command: object is being deleted" msgstr "бафер/прозор команда не може да се креира: објекат се брише" @@ -2828,8 +3008,8 @@ msgid "" "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim." "org" msgstr "" -"E280: TCL ФАТАЛНА ГРЕШКА: reflist је оштећена!? Молимо пријавите ово на " -"vim-dev@vim.org" +"E280: TCL ФАТАЛНА ГРЕШКА: reflist је оштећена!? Молимо пријавите ово на vim-" +"dev@vim.org" msgid "cannot register callback command: buffer/window reference not found" msgstr "" @@ -2863,10 +3043,128 @@ msgid "E251: VIM instance registry property is badly formed. Deleted!" msgstr "E251: registry својство VIM инстанце је лоше формирано. Обрисано!" #, c-format +msgid "%ld lines to indent... " +msgstr "%ld за увлачење... " + +#, c-format +msgid "%ld line indented " +msgid_plural "%ld lines indented " +msgstr[0] "%ld линија увучена " +msgstr[1] "%ld линије увучене " +msgstr[2] "%ld линија увучено " + +msgid " Keyword completion (^N^P)" +msgstr " Довршавање кључне речи (^N^P)" + +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)" + +msgid " Whole line completion (^L^N^P)" +msgstr " Довршавање целе линије (^L^N^P)" + +msgid " File name completion (^F^N^P)" +msgstr " Довршавање имена фајла (^F^N^P)" + +msgid " Tag completion (^]^N^P)" +msgstr " Довршавање ознаке (^]^N^P)" + +msgid " Path pattern completion (^N^P)" +msgstr " Довршавање шаблона путање (^N^P)" + +msgid " Definition completion (^D^N^P)" +msgstr " Довршавање дефиниције (^D^N^P)" + +msgid " Dictionary completion (^K^N^P)" +msgstr " Довршавање речника (^K^N^P)" + +msgid " Thesaurus completion (^T^N^P)" +msgstr " Довршавање речника синонима (^T^N^P)" + +msgid " Command-line completion (^V^N^P)" +msgstr " Довршавање командне линије (^V^N^P)" + +msgid " User defined completion (^U^N^P)" +msgstr " Кориснички дефинисано довршавање (^U^N^P)" + +msgid " Omni completion (^O^N^P)" +msgstr " Omni довршавање (^O^N^P)" + +msgid " Spelling suggestion (s^N^P)" +msgstr " Правописни предлог (s^N^P)" + +msgid " Keyword Local completion (^N^P)" +msgstr " Довршавање локалне кључне речи (^N^P)" + +msgid "Hit end of paragraph" +msgstr "Достигнут је крај пасуса" + +msgid "E839: Completion function changed window" +msgstr "E839: Функција довршавања је променила прозор" + +msgid "E840: Completion function deleted text" +msgstr "E840: Функција довршавања је обрисала текст" + +msgid "'dictionary' option is empty" +msgstr "Опција 'dictionary' је празна" + +msgid "'thesaurus' option is empty" +msgstr "Опција 'thesaurus' је празна" + +#, c-format +msgid "Scanning dictionary: %s" +msgstr "Скенирање речника: %s" + +msgid " (insert) Scroll (^E/^Y)" +msgstr " (уметање) Скроловање (^E/^Y)" + +msgid " (replace) Scroll (^E/^Y)" +msgstr " (замена) Скроловање (^E/^Y)" + +msgid "E785: complete() can only be used in Insert mode" +msgstr "E785: complete() може да се користи само у режиму Уметање" + +#, c-format +msgid "Scanning: %s" +msgstr "Скенирање: %s" + +msgid "Scanning tags." +msgstr "Скенирање ознака." + +msgid "match in file" +msgstr "подударање у фајлу" + +msgid " Adding" +msgstr " Додавање" + +msgid "-- Searching..." +msgstr "-- Претрага..." + +msgid "Back at original" +msgstr "Назад на оригинал" + +msgid "Word from other line" +msgstr "Реч из друге линије" + +msgid "The only match" +msgstr "Једино подударање" + +#, c-format +msgid "match %d of %d" +msgstr "подударање %d од %d" + +#, c-format +msgid "match %d" +msgstr "подударање %d" + +#, c-format msgid "E938: Duplicate key in JSON: \"%s\"" msgstr "E938: Дупли кључ у JSON: \"%s\"" #, c-format +msgid "E899: Argument of %s must be a List or Blob" +msgstr "E899: Аргумент за %s мора бити Листа или Blob" + +#, c-format msgid "E696: Missing comma in List: %s" msgstr "E696: У Листи недостаје зарез: %s" @@ -2874,6 +3172,36 @@ msgstr "E696: У Листи недостаје зарез: %s" msgid "E697: Missing end of List ']': %s" msgstr "E697: Недостаје крај Листе ']': %s" +msgid "sort() argument" +msgstr "sort() аргумент" + +msgid "uniq() argument" +msgstr "uniq() аргумент" + +msgid "E702: Sort compare function failed" +msgstr "E702: Sort функција поређења није успела" + +msgid "E882: Uniq compare function failed" +msgstr "E882: Uniq функција поређења није успела" + +msgid "map() argument" +msgstr "map() аргумент" + +msgid "filter() argument" +msgstr "filter() аргумент" + +msgid "add() argument" +msgstr "add() аргумент" + +msgid "insert() argument" +msgstr "insert() аргумент" + +msgid "remove() argument" +msgstr "remove() аргумент" + +msgid "reverse() argument" +msgstr "reverse() аргумент" + msgid "Unknown option argument" msgstr "Непознат аргумент опције" @@ -3076,9 +3404,6 @@ msgstr "-A\t\t\tПокрени у Арапском режиму" msgid "-H\t\t\tStart in Hebrew mode" msgstr "-H\t\t\tПокрени у Хебрејском режиму" -msgid "-F\t\t\tStart in Farsi mode" -msgstr "-F\t\t\tПокрени у Фарси режиму" - msgid "-T <terminal>\tSet terminal type to <terminal>" msgstr "-T <терминал>\tПостави тип терминала на <терминал>" @@ -3217,11 +3542,11 @@ msgstr "" "\n" "Аргументи које препознаје gvim (Athena верзија):\n" -msgid "-display <display>\tRun vim on <display>" -msgstr "-display <дисплеј>\tПокрени vim на <дисплеј>" +msgid "-display <display>\tRun Vim on <display>" +msgstr "-display <дисплеј>\tПокрени Vim на <дисплеј>" -msgid "-iconic\t\tStart vim iconified" -msgstr "-iconic\t\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)" @@ -3269,8 +3594,8 @@ msgstr "" "\n" "Аргументи које препознаје gvim (GTK+ верзија):\n" -msgid "-display <display>\tRun vim on <display> (also: --display)" -msgstr "-display <дисплеј>\tПокрени vim на <дисплеј> (такође: --display)" +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 "" @@ -3308,6 +3633,39 @@ msgstr "Нема приказа: Израз слања није успео.\n" msgid ": Send expression failed.\n" msgstr ": Израз слања није успео.\n" +#, c-format +msgid "E224: global abbreviation already exists for %s" +msgstr "E224: глобална скраћеница за %s већ постоји" + +#, c-format +msgid "E225: global mapping already exists for %s" +msgstr "E225: глобално мапирање за %s већ постоји" + +#, c-format +msgid "E226: abbreviation already exists for %s" +msgstr "E226: скраћеница за %s већ постоји" + +#, c-format +msgid "E227: mapping already exists for %s" +msgstr "E227: мапирање за %s већ постоји" + +msgid "No abbreviation found" +msgstr "Скраћеница није пронађена" + +msgid "No mapping found" +msgstr "Мапирање није пронађено" + +msgid "E228: makemap: Illegal mode" +msgstr "E228: makemap: Недозвољен режим" + +#, c-format +msgid "E357: 'langmap': Matching character missing for %s" +msgstr "E357: 'langmap': Недостаје одговарајући карактер за %s" + +#, c-format +msgid "E358: 'langmap': Extra characters after semicolon: %s" +msgstr "E358: 'langmap': Има још карактера након тачказареза: %s" + msgid "No marks set" msgstr "Нема постављених маркера" @@ -3320,21 +3678,21 @@ msgid "" "mark line col file/text" msgstr "" "\n" -"линија маркера кол датотека/текст" +"марк лин кол фајл/текст" msgid "" "\n" " jump line col file/text" msgstr "" "\n" -" линија скока кол датотека/текст" +" скок лин кол фајл/текст" msgid "" "\n" "change line col text" msgstr "" "\n" -"линија промене кол текст" +"измена лин кол текст" msgid "" "\n" @@ -3664,8 +4022,8 @@ msgstr "" "\n" " ИД процеса: " -msgid " (still running)" -msgstr " (још се извршава)" +msgid " (STILL RUNNING)" +msgstr " (ЈОШ СЕ ИЗВРШАВА)" msgid "" "\n" @@ -3701,8 +4059,8 @@ msgid "E315: ml_get: invalid lnum: %ld" msgstr "E315: ml_get: неисправан lnum: %ld" #, c-format -msgid "E316: ml_get: cannot find line %ld" -msgstr "E316: ml_get: линија %ld не може да се пронађе" +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get: линија %ld у баферу %d не може да се пронађе %s" msgid "E317: pointer block id wrong 3" msgstr "E317: ид показивача блока је погрешан 3" @@ -3842,9 +4200,6 @@ msgstr "E326: Пронађено је превише swap датотека" msgid "E327: Part of menu-item path is not sub-menu" msgstr "E327: Део путање ставке менија није подмени" -msgid "E328: Menu only exists in another mode" -msgstr "E328: Мени постоји само у другом режиму" - #, c-format msgid "E329: No menu \"%s\"" msgstr "E329: Нема менија \"%s\"" @@ -3964,7 +4319,7 @@ msgid "E767: Too many arguments to printf()" msgstr "E767: Сувише аргумената за printf()" msgid "W10: Warning: Changing a readonly file" -msgstr "W10: Упозорење: Мења се датотека која може само да се чита" +msgstr "W10: Упозорење: Мења се фајл који може само да се чита" msgid "Type number and <Enter> or click with mouse (empty cancels): " msgstr "Унесите број и <Enter> или кликните мишем (ништа за отказ): " @@ -4011,12 +4366,8 @@ msgstr "" "[позива] укупно re/malloc()-а %lu, укупно free()-ова %lu\n" "\n" -msgid "E340: Line is becoming too long" -msgstr "E340: Линија постаје предугачка" - -#, c-format -msgid "E341: Internal error: lalloc(%ld, )" -msgstr "E341: Интерна грешка: lalloc(%ld, )" +msgid "E341: Internal error: lalloc(0, )" +msgstr "E341: Интерна грешка: lalloc(0, )" #, c-format msgid "E342: Out of memory! (allocating %lu bytes)" @@ -4089,12 +4440,6 @@ msgstr "E505: %s је само за читање (додајте ! за прем msgid "E349: No identifier under cursor" msgstr "E349: Под курсором није идентификатор" -msgid "E774: 'operatorfunc' is empty" -msgstr "E774: 'operatorfunc' је празна" - -msgid "E775: Eval feature not available" -msgstr "E775: Eval могућност није доступна" - msgid "Warning: terminal cannot highlight" msgstr "Упозорење: терминал не може да истакне текст" @@ -4117,101 +4462,32 @@ msgid "Type :qa! and press <Enter> to abandon all changes and exit Vim" msgstr "" "Откуцајте :qa! и притисните <Ентер> да одбаците све измене и напустите Vim" -#, c-format -msgid "1 line %sed 1 time" -msgstr "1 линија %sрана 1 пут" +msgid "Type :qa and press <Enter> to exit Vim" +msgstr "Откуцајте :qa и притисните <Ентер> да напустите Vim" #, c-format -msgid "1 line %sed %d times" -msgstr "1 линија %sрана %d пута" +msgid "%ld line %sed %d time" +msgid_plural "%ld line %sed %d times" +msgstr[0] "%ld линија %sрано %d пут" +msgstr[1] "%ld линије %sрано %d пут" +msgstr[2] "%ld линија %sрано %d пут" #, c-format -msgid "%ld lines %sed 1 time" -msgstr "%ld линија %sрано 1 пут" - -#, c-format -msgid "%ld lines %sed %d times" -msgstr "%ld линија %sрано %d пута" - -#, c-format -msgid "%ld lines to indent... " -msgstr "%ld за увлачење... " - -msgid "1 line indented " -msgstr "1 линија увучена " - -#, c-format -msgid "%ld lines indented " -msgstr "%ld инија увучено " - -msgid "E748: No previously used register" -msgstr "E748: Нема претходно коришћеног регистра" +msgid "%ld lines %sed %d time" +msgid_plural "%ld lines %sed %d times" +msgstr[0] "%ld линија %sрано %d пут" +msgstr[1] "%ld линија %sрано %d пута" +msgstr[2] "%ld линија %sрано %d пута" msgid "cannot yank; delete anyway" msgstr "не може да се тргне; ипак обрисати" -msgid "1 line changed" -msgstr "1 линија је промењена" - -#, c-format -msgid "%ld lines changed" -msgstr "%ld линија је промењено" - -#, c-format -msgid "freeing %ld lines" -msgstr "ослобађа се %ld линија" - -#, c-format -msgid " into \"%c" -msgstr " у \"%c" - -#, c-format -msgid "block of 1 line yanked%s" -msgstr "блок од 1 линије је тргнут%s" - -#, c-format -msgid "1 line yanked%s" -msgstr "1 линија је тргнута%s" - #, c-format -msgid "block of %ld lines yanked%s" -msgstr "блок од %ld линија је тргнут%s" - -#, c-format -msgid "%ld lines yanked%s" -msgstr "%ld линија је тргнуто%s" - -#, c-format -msgid "E353: Nothing in register %s" -msgstr "E353: Регистар %s је празан" - -msgid "" -"\n" -"--- Registers ---" -msgstr "" -"\n" -"--- Регистри ---" - -msgid "Illegal register name" -msgstr "Неважеће име регистра" - -msgid "" -"\n" -"# Registers:\n" -msgstr "" -"\n" -"# Регистри:\n" - -#, 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: регистар за шаблон претраге и израз не може да садржи две или више " -"линија" +msgid "%ld line changed" +msgid_plural "%ld lines changed" +msgstr[0] "%ld линија је промењена" +msgstr[1] "%ld линије је промењено" +msgstr[2] "%ld линија је промењено" #, c-format msgid "%ld Cols; " @@ -4235,18 +4511,21 @@ msgstr "Кол %s од %s; Линија %ld од %ld; Реч %lld од %lld; Б #, c-format msgid "" -"Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte %" -"lld of %lld" +"Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte " +"%lld of %lld" msgstr "" -"Кол %s од %s; Линија %ld од %ld; Реч %lld од %lld; Знак %lld од %lld; Бајт %" -"lld од %lld" +"Кол %s од %s; Линија %ld од %ld; Реч %lld од %lld; Знак %lld од %lld; Бајт " +"%lld од %lld" #, c-format msgid "(+%lld for BOM)" msgstr "(+%lld за BOM)" -msgid "Thanks for flying Vim" -msgstr "Хвала што летите са Vim" +msgid "E774: 'operatorfunc' is empty" +msgstr "E774: 'operatorfunc' је празна" + +msgid "E775: Eval feature not available" +msgstr "E775: Eval могућност није доступна" msgid "E518: Unknown option" msgstr "E518: Непозната опција" @@ -4257,8 +4536,11 @@ msgstr "E519: Опција није подржана" msgid "E520: Not allowed in a modeline" msgstr "E520: Није довољено у режимској линији" +msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" +msgstr "E992: Није дозвољено у режимској линији када је 'modelineexpr' искључена" + msgid "E846: Key code not set" -msgstr "E846: Није постављрн код тастера" +msgstr "E846: Није постављeн код тастера" msgid "E521: Number required after =" msgstr "E521: Потребан је број након =" @@ -4266,6 +4548,66 @@ msgstr "E521: Потребан је број након =" msgid "E522: Not found in termcap" msgstr "E522: Није пронађено у termcap" +msgid "E946: Cannot make a terminal with running job modifiable" +msgstr "" +"E946: Терминал са задатком који се извршава не може да се учини измењивим" + +msgid "E590: A preview window already exists" +msgstr "E590: Прозор за преглед већ постоји" + +msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" +msgstr "W17: Арапски захтева UTF-8, извршите ':set encoding=utf-8'" + +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: Ово окружење не подржава 24-битне боје" + +#, c-format +msgid "E593: Need at least %d lines" +msgstr "E593: Потребно је најмање %d линија" + +#, c-format +msgid "E594: Need at least %d columns" +msgstr "E594: Потребно је најмање %d колона" + +#, c-format +msgid "E355: Unknown option: %s" +msgstr "E355: Непозната опција: %s" + +#, c-format +msgid "E521: Number required: &%s = '%s'" +msgstr "E521: Захтева се број: &%s = '%s'" + +msgid "" +"\n" +"--- Terminal codes ---" +msgstr "" +"\n" +"--- Кодови терминала ---" + +msgid "" +"\n" +"--- Global option values ---" +msgstr "" +"\n" +"--- Вредности глобалних опција ---" + +msgid "" +"\n" +"--- Local option values ---" +msgstr "" +"\n" +"--- Вредности локалних опција ---" + +msgid "" +"\n" +"--- Options ---" +msgstr "" +"\n" +"--- Опције ---" + +msgid "E356: get_varp ERROR" +msgstr "E356: get_varp ГРЕШКА" + #, c-format msgid "E539: Illegal character <%s>" msgstr "E539: Недозвољен карактер <%s>" @@ -4274,6 +4616,13 @@ msgstr "E539: Недозвољен карактер <%s>" msgid "For option %s" msgstr "За опцију %s" +msgid "E540: Unclosed expression sequence" +msgstr "E540: Низ израза није затворен" + + +msgid "E542: unbalanced groups" +msgstr "E542: неуравнотежене групе" + msgid "E529: Cannot set 'term' to empty string" msgstr "E529: 'term' не може да се постави на празан стринг" @@ -4344,86 +4693,6 @@ msgstr "E536: потребан зарез" msgid "E537: 'commentstring' must be empty or contain %s" msgstr "E537: 'commentstring' мора бити празно или да садржи %s" -msgid "E538: No mouse support" -msgstr "E538: Нема подршке за миша" - -msgid "E540: Unclosed expression sequence" -msgstr "E540: Низ израза није затворен" - -msgid "E541: too many items" -msgstr "E541: превише ставки" - -msgid "E542: unbalanced groups" -msgstr "E542: неуравнотежене групе" - -msgid "E946: Cannot make a terminal with running job modifiable" -msgstr "" -"E946: Терминал са задатком који се извршава не може да се учини измењивим" - -msgid "E590: A preview window already exists" -msgstr "E590: Прозор за преглед већ постоји" - -msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" -msgstr "W17: Арапски захтева UTF-8, извршите ':set encoding=utf-8'" - -msgid "E954: 24-bit colors are not supported on this environment" -msgstr "E954: Ово окружење не подржава 24-битне боје" - -#, c-format -msgid "E593: Need at least %d lines" -msgstr "E593: Потребно је најмање %d линија" - -#, c-format -msgid "E594: Need at least %d columns" -msgstr "E594: Потребно је најмање %d колона" - -#, c-format -msgid "E355: Unknown option: %s" -msgstr "E355: Непозната опција: %s" - -#, c-format -msgid "E521: Number required: &%s = '%s'" -msgstr "E521: Захтева се број: &%s = '%s'" - -msgid "" -"\n" -"--- Terminal codes ---" -msgstr "" -"\n" -"--- Кодови терминала ---" - -msgid "" -"\n" -"--- Global option values ---" -msgstr "" -"\n" -"--- Вредности глобалних опција ---" - -msgid "" -"\n" -"--- Local option values ---" -msgstr "" -"\n" -"--- Вредности локалних опција ---" - -msgid "" -"\n" -"--- Options ---" -msgstr "" -"\n" -"--- Опције ---" - -msgid "E356: get_varp ERROR" -msgstr "E356: get_varp ГРЕШКА" - -#, c-format -msgid "E357: 'langmap': Matching character missing for %s" -msgstr "E357: 'langmap': Недостаје одговарајући карактер за %s" - -#, c-format -msgid "E358: 'langmap': Extra characters after semicolon: %s" -msgstr "E358: 'langmap': Има још карактера након тачказареза: %s" - msgid "cannot open " msgstr "не може да се отвори " @@ -4516,6 +4785,10 @@ msgstr "" "\n" "Vim: Дошло је до X грешке\n" +#, c-format +msgid "restoring display %s" +msgstr "враћање екрана %s" + msgid "Testing the X display failed" msgstr "Тестирање X приказа није успело" @@ -4612,15 +4885,6 @@ 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-у нису могли да се поправе!" - #, c-format msgid "Vim: Caught %s event\n" msgstr "Vim: Ухваћен је %s догађај\n" @@ -4653,6 +4917,26 @@ msgstr "Vim Упозорење" msgid "shell returned %d" msgstr "командно окружење је вратило %d" +msgid "E278: Cannot put a terminal buffer in a popup window" +msgstr "E278: Терминалски бафер не може да се стави у искачући прозор" + +#, c-format +msgid "E997: Tabpage not found: %d" +msgstr "E997: Картица није пронађена: %d" + +#, c-format +msgid "E993: window %d is not a popup window" +msgstr "E993: прозор %d није искачући прозор" + +msgid "E994: Not allowed in a popup window" +msgstr "E994: Није дозвољено у искачућем прозору" + +msgid "E750: First use \":profile start {fname}\"" +msgstr "E750: Најпре користите \":profile start {fname}\"" + +msgid "E553: No more items" +msgstr "E553: Нема више ставки" + msgid "E926: Current location list was changed" msgstr "E926: Текућа листа локација је промењена" @@ -4685,9 +4969,6 @@ msgstr "E378: 'errorformat' не садржи шаблон" msgid "E379: Missing or empty directory name" msgstr "E379: Име директоријума недостаје или је празно" -msgid "E553: No more items" -msgstr "E553: Нема више ставки" - msgid "E924: Current window was closed" msgstr "E924: Текући прозор је затворен" @@ -4731,6 +5012,10 @@ msgid "E777: String or List expected" msgstr "E777: Очекује се String или List" #, c-format +msgid "E927: Invalid action: '%s'" +msgstr "E927: Неисправна акција: '%s'" + +#, c-format msgid "E369: invalid item in %s%%[]" msgstr "E369: неважећа ставка у %s%%[]" @@ -4770,37 +5055,29 @@ msgstr "E69: Недостаје ] након %s%%[" msgid "E70: Empty %s%%[]" msgstr "E70: Празан %s%%[]" -msgid "E65: Illegal back reference" -msgstr "E65: Неважећа повратна референца" - -msgid "E339: Pattern too long" -msgstr "E339: Шаблон је предугачак" - -msgid "E50: Too many \\z(" -msgstr "E50: Превише \\z(" +msgid "E956: Cannot use pattern recursively" +msgstr "E956: Шаблон не може да се користи рекурзивно" #, c-format -msgid "E51: Too many %s(" -msgstr "E51: Превише %s(" - -msgid "E52: Unmatched \\z(" -msgstr "E52: Неупарено \\z(" +msgid "E554: Syntax error in %s{...}" +msgstr "E554: Синтаксна грешка у %s{...}" #, c-format -msgid "E59: invalid character after %s@" -msgstr "E59: неважећи карактер након %s@" +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA regexp) не може да се понови %s" -#, c-format -msgid "E60: Too many complex %s{...}s" -msgstr "E60: Превише комплексних %s{...}s" +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: Иза \\%#= може да следи једино 0, 1, или 2. Користиће се аутоматски " +"енџин " -#, c-format -msgid "E61: Nested %s*" -msgstr "E61: Угњеждено %s*" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Пребацивање на backtracking RE енџин за шаблон: " -#, c-format -msgid "E62: Nested %s%c" -msgstr "E62: Угњеждено %s%c" +msgid "E65: Illegal back reference" +msgstr "E65: Неважећа повратна референца" msgid "E63: invalid use of \\_" msgstr "E63: неисправна употреба \\_" @@ -4821,25 +5098,36 @@ msgid "E71: Invalid character after %s%%" msgstr "E71: Неважећи карактер након %s%%" #, c-format -msgid "E554: Syntax error in %s{...}" -msgstr "E554: Синтаксна грешка у %s{...}" +msgid "E59: invalid character after %s@" +msgstr "E59: неважећи карактер након %s@" -msgid "External submatches:\n" -msgstr "Спољна подпоклапања:\n" +#, c-format +msgid "E60: Too many complex %s{...}s" +msgstr "E60: Превише комплексних %s{...}s" #, c-format -msgid "E888: (NFA regexp) cannot repeat %s" -msgstr "E888: (NFA regexp) не може да се понови %s" +msgid "E61: Nested %s*" +msgstr "E61: Угњеждено %s*" -msgid "" -"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " -"used " -msgstr "" -"E864: Иза \\%#= може да следи једино 0, 1, или 2. Користиће се аутоматски " -"енџин " +#, c-format +msgid "E62: Nested %s%c" +msgstr "E62: Угњеждено %s%c" -msgid "Switching to backtracking RE engine for pattern: " -msgstr "Пребацивање на backtracking RE енџин за шаблон: " +msgid "E50: Too many \\z(" +msgstr "E50: Превише \\z(" + +#, c-format +msgid "E51: Too many %s(" +msgstr "E51: Превише %s(" + +msgid "E52: Unmatched \\z(" +msgstr "E52: Неупарено \\z(" + +msgid "E339: Pattern too long" +msgstr "E339: Шаблон је предугачак" + +msgid "External submatches:\n" +msgstr "Спољна подпоклапања:\n" msgid "E865: (NFA) Regexp end encountered prematurely" msgstr "E865: Крај (NFA) Regexp израза је достигнут прерано" @@ -4849,8 +5137,8 @@ msgid "E866: (NFA regexp) Misplaced %c" msgstr "E866: (NFA regexp) %c је на погрешном месту" #, c-format -msgid "E877: (NFA regexp) Invalid character class: %ld" -msgstr "E877: (NFA regexp) Неважећа карактер класа: %ld" +msgid "E877: (NFA regexp) Invalid character class: %d" +msgstr "E877: (NFA regexp) Неважећа карактер класа: %d" #, c-format msgid "E867: (NFA) Unknown operator '\\z%c'" @@ -4885,6 +5173,11 @@ msgstr "E879: (NFA regexp) Превише \\z(" msgid "E873: (NFA regexp) proper termination error" msgstr "E873: (NFA regexp) грешка правилне терминације" +msgid "Could not open temporary log file for writing, displaying on stderr... " +msgstr "" +"Привремени лог фајл није могао да се отвори за упис, приказује се на " +"stderr... " + msgid "E874: (NFA) Could not pop the stack!" msgstr "E874: (NFA) Скидање са стека није успело!" @@ -4967,6 +5260,80 @@ msgid "recording" msgstr "снимање" #, c-format +msgid "Searching for \"%s\" in \"%s\"" +msgstr "Тражи се \"%s\" у \"%s\"" + +#, c-format +msgid "Searching for \"%s\"" +msgstr "Тражи се\"%s\"" + +#, c-format +msgid "not found in '%s': \"%s\"" +msgstr "није пронађено у '%s': \"%s\"" + +msgid "Source Vim script" +msgstr "Изворна Vim скрипта" + +#, c-format +msgid "Cannot source a directory: \"%s\"" +msgstr "Директоријум не може да буде извор: \"%s\"" + +#, c-format +msgid "could not source \"%s\"" +msgstr "не може да се прибави \"%s\"" + +#, c-format +msgid "line %ld: could not source \"%s\"" +msgstr "линија %ld: не може да се прибави \"%s\"" + +#, c-format +msgid "sourcing \"%s\"" +msgstr "прибављање \"%s\"" + +#, c-format +msgid "line %ld: sourcing \"%s\"" +msgstr "линија %ld: прибављање \"%s\"" + +#, c-format +msgid "finished sourcing %s" +msgstr "завршено прибављање %s" + +#, c-format +msgid "continuing in %s" +msgstr "наставља се у %s" + +msgid "modeline" +msgstr "режимскe линијe (modeline)" + +msgid "--cmd argument" +msgstr "--cmd аргументa" + +msgid "-c argument" +msgstr "-c аргументa" + +msgid "environment variable" +msgstr "променљивe окружења" + +msgid "error handler" +msgstr "процедурe за обраду грешке" + +msgid "W15: Warning: Wrong line separator, ^M may be missing" +msgstr "W15: Упозорење: Погрешан сепаратор линије, можда недостаје ^M" + +msgid "E167: :scriptencoding used outside of a sourced file" +msgstr "E167: :scriptencoding се користи ван изворишног фајла" + +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion се користи ван изворишног фајла" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: scriptversion није подржана: %d" + +msgid "E168: :finish used outside of a sourced file" +msgstr "E168: :finish се користи ван изворишног фајла" + +#, c-format msgid "E383: Invalid search string: %s" msgstr "E383: Неисправан стринг за претрагу: %s" @@ -5022,18 +5389,74 @@ msgstr "E388: Дефиниција не може да се пронађе" msgid "E389: Couldn't find pattern" msgstr "E389: Шаблон за претрагу није пронађен" -msgid "Substitute " -msgstr "Замена " +msgid "Save View" +msgstr "Сачувај Поглед" + +msgid "Save Session" +msgstr "Сачувај Сесију" + +msgid "Save Setup" +msgstr "Сачувај Подешавање" + +msgid "[Deleted]" +msgstr "[Обрисано]" -#, c-format msgid "" "\n" -"# Last %sSearch Pattern:\n" -"~" +"--- Signs ---" msgstr "" "\n" -"# Последњи %sШаблон Претраге:\n" -"~" +"--- Знаци ---" + +#, c-format +msgid "Signs for %s:" +msgstr "Знаци за %s:" + +#, c-format +msgid " group=%s" +msgstr " група=%s" + +#, c-format +msgid " line=%ld id=%d%s name=%s priority=%d" +msgstr " линија=%ld ид=%d%s име=%s приоритет=%d" + +msgid "E612: Too many signs defined" +msgstr "E612: Дефинисано је превише знакова" + +#, c-format +msgid "E239: Invalid sign text: %s" +msgstr "E239: Неисправан текст знака: %s" + +#, c-format +msgid "E155: Unknown sign: %s" +msgstr "E155: Непознат знак: %s" + +#, c-format +msgid "E885: Not possible to change sign %s" +msgstr "E885: Знак %s не може да се промени" + +msgid "E159: Missing sign number" +msgstr "E159: Недостаје број знака" + +#, c-format +msgid "E157: Invalid sign ID: %d" +msgstr "E157: Неисправан ИД знака: %d" + +msgid "E934: Cannot jump to a buffer that does not have a name" +msgstr "E934: Не може да се скочи на бафер који нема име" + +#, c-format +msgid "E160: Unknown sign command: %s" +msgstr "E160: Непозната знак команда: %s" + +msgid "E156: Missing sign name" +msgstr "E156: Недостаје име знака" + +msgid " (NOT FOUND)" +msgstr " (НИЈЕ ПРОНАЂЕНО)" + +msgid " (not supported)" +msgstr " (није подржано)" msgid "E756: Spell checking is not enabled" msgstr "E756: Провера правописа није омогућена" @@ -5057,21 +5480,6 @@ msgstr "E797: SpellFileMissing аутокоманда је обрисала ба msgid "Warning: region %s not supported" msgstr "Упозорење: регион %s није подржан" -msgid "Sorry, no suggestions" -msgstr "Жао нам је, нема сугестија" - -#, c-format -msgid "Sorry, only %ld suggestions" -msgstr "Жао нам је, само %ld сугестија" - -#, c-format -msgid "Change \"%.*s\" to:" -msgstr "Променити \"%.*s\" у:" - -#, c-format -msgid " < \"%.*s\"" -msgstr " < \"%.*s\"" - msgid "E752: No previous spell replacement" msgstr "E752: Нема претходне правописне замене" @@ -5148,10 +5556,6 @@ msgid "Conversion in %s not supported: from %s to %s" msgstr "Конверзија у %s није подржана: из %s у %s" #, c-format -msgid "Conversion in %s not supported" -msgstr "Конверзија у %s није подржана" - -#, c-format msgid "Invalid value for FLAG in %s line %d: %s" msgstr "Неважећа вредност за FLAG у %s линија %d: %s" @@ -5210,8 +5614,8 @@ 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" +"Наставак се такође користи за BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/" +"NOSUGGEST у %sлинија %d: %s" #, c-format msgid "Expected Y or N in %s line %d: %s" @@ -5389,8 +5793,8 @@ msgid "Done!" msgstr "Завршено!" #, c-format -msgid "E765: 'spellfile' does not have %ld entries" -msgstr "E765: 'spellfile' не садржи %ld ставке" +msgid "E765: 'spellfile' does not have %d entries" +msgstr "E765: 'spellfile' не садржи %d ставке" #, c-format msgid "Word '%.*s' removed from %s" @@ -5437,6 +5841,9 @@ msgstr "синтакса правописа подразумевано" msgid "syntax iskeyword " msgstr "синтакса iskeyword " +msgid "syntax iskeyword not set" +msgstr "синтакса iskeyword није постављена" + #, c-format msgid "E391: No such syntax cluster: %s" msgstr "E391: Не постоји такав синтаксни кластер: %s" @@ -5595,7 +6002,7 @@ msgstr "E414: група има поставке, highlight link се игнор #, c-format msgid "E415: unexpected equal sign: %s" -msgstr "E415: неочкиван знак једнакости: %s" +msgstr "E415: неочекиван знак једнакости: %s" #, c-format msgid "E416: missing equal sign: %s" @@ -5615,6 +6022,9 @@ msgstr "E419: Непозната FG боја" msgid "E420: BG color unknown" msgstr "E420: Непозната BG боја" +msgid "E453: UL color unknown" +msgstr "E453: Непозната UL боја" + #, c-format msgid "E421: Color name or number not recognized: %s" msgstr "E421: Име боје или број нису препознати: %s" @@ -5918,10 +6328,6 @@ msgstr "Ништа за опозив" msgid "number changes when saved" msgstr "број измене када сачувано" -#, c-format -msgid "%ld seconds ago" -msgstr "пре %ld секунди" - msgid "E790: undojoin is not allowed after undo" msgstr "E790: undojoin ије дозвољен након undo" @@ -5931,6 +6337,66 @@ msgstr "E439: листа опозива је искварена" msgid "E440: undo line missing" msgstr "E440: недостаје линија опозива" +msgid "" +"\n" +" Name Args Address Complete Definition" +msgstr "" +"\n" +" Име Аргу Адреса Довршење Дефиниција" + +msgid "No user-defined commands found" +msgstr "Нису пронађене кориснички дефинисане команде" + +#, c-format +msgid "E180: Invalid address type value: %s" +msgstr "E180: Неисправна вредност адресног типа: %s" + +#, c-format +msgid "E180: Invalid complete value: %s" +msgstr "E180: Неисправна вредност довршавања: %s" + +msgid "E468: Completion argument only allowed for custom completion" +msgstr "E468: Аргумент довршавања је дозвољен само за прилагођена довршавања" + +msgid "E467: Custom completion requires a function argument" +msgstr "E467: Прилагођено довршавање захтева аргумент функције" + +msgid "E175: No attribute specified" +msgstr "E175: Није наведен ни један атрибут" + +msgid "E176: Invalid number of arguments" +msgstr "E176: Неисправан број аргумената" + +msgid "E177: Count cannot be specified twice" +msgstr "E177: Бројач не може да се наведе два пута" + +msgid "E178: Invalid default value for count" +msgstr "E178: Неисправна подразумевана вредност за бројач" + +msgid "E179: argument required for -complete" +msgstr "E179: потребан је аргумент за -complete" + +msgid "E179: argument required for -addr" +msgstr "E179: потребан је аргумент за -addr" + +#, c-format +msgid "E174: Command already exists: add ! to replace it: %s" +msgstr "E174: Команда већ постоји: додајте ! да је замените: %s" + +msgid "E182: Invalid command name" +msgstr "E182: Неисправно име команде" + +msgid "E183: User defined commands must start with an uppercase letter" +msgstr "E183: Кориснички дефинисане команде морају да почну великим словом" + +msgid "E841: Reserved name, cannot be used for user defined command" +msgstr "" +"E841: Резервисано име, не може да се користи за кориснички дефинисану команду" + +#, c-format +msgid "E184: No such user-defined command: %s" +msgstr "E184: Не постоји таква кориснички дефинисана команда: %s" + #, c-format msgid "E122: Function %s already exists, add ! to replace it" msgstr "E122: Функција %s већ постоји, додајте ! да је замените" @@ -5953,6 +6419,13 @@ msgstr "E125: Неважећи аргумент: %s" msgid "E853: Duplicate argument name: %s" msgstr "E853: Име аргумента је дуплирано: %s" +msgid "E989: Non-default argument follows default argument" +msgstr "E989: Неподразумевани аргумент следи иза подразумеваног аргумента" + +#, c-format +msgid "E451: Expected }: %s" +msgstr "E451: Очекује се }: %s" + #, c-format msgid "E740: Too many arguments for function %s" msgstr "E740: Превише аргумената за функцију %s" @@ -5984,16 +6457,8 @@ msgid "E699: Too many arguments" msgstr "E699: Сувише аргумената" #, c-format -msgid "E117: Unknown function: %s" -msgstr "E117: Непозната функција: %s" - -#, c-format -msgid "E933: Function was deleted: %s" -msgstr "E933: Функција је обрисана: %s" - -#, c-format -msgid "E119: Not enough arguments for function: %s" -msgstr "E119: Нема довољно аргумената за функцију: %s" +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: Функција не може да се користи као метода: %s" #, c-format msgid "E120: Using <SID> not in a script context: %s" @@ -6014,6 +6479,9 @@ msgstr "E128: Име функције мора да почне великим с msgid "E884: Function name cannot contain a colon: %s" msgstr "E884: Име функције не може да садржи двотачку: %s" +msgid "E454: function list was modified" +msgstr "E454: листа функције је измењена" + #, c-format msgid "E123: Undefined function: %s" msgstr "E123: Недефинисана функција: %s" @@ -6023,7 +6491,7 @@ msgid "E124: Missing '(': %s" msgstr "E124: Недостаје '(': %s" msgid "E862: Cannot use g: here" -msgstr "E862: g: не може овде да се користи" +msgstr "E862: Овде не може да се користи g:" #, c-format msgid "E932: Closure function should not be at top level: %s" @@ -6033,6 +6501,10 @@ msgid "E126: Missing :endfunction" msgstr "E126: Недостаје :endfunction" #, c-format +msgid "W1001: Text found after :enddef: %s" +msgstr "W1001: Пронађен је текст након :enddef: %s" + +#, c-format msgid "W22: Text found after :endfunction: %s" msgstr "W22: Пронађен текст након :endfunction: %s" @@ -6056,8 +6528,22 @@ msgid "E133: :return not inside a function" msgstr "E133: :return није унутар функције" #, c-format -msgid "E107: Missing parentheses: %s" -msgstr "E107: Недостају заграде: %s" +msgid "%s (%s, compiled %s)" +msgstr "%s (%s, компајлирано %s)" + +msgid "" +"\n" +"MS-Windows 64-bit GUI/console version" +msgstr "" +"\n" +"MS-Windows 64-битна ГКИ/конзолна верзија" + +msgid "" +"\n" +"MS-Windows 32-bit GUI/console version" +msgstr "" +"\n" +"MS-Windows 32-битна ГКИ/конзолна верзија" msgid "" "\n" @@ -6116,14 +6602,14 @@ msgid "" "Included patches: " msgstr "" "\n" -"Укључене исправке: " +"Укључене закрпе: " msgid "" "\n" "Extra patches: " msgstr "" "\n" -"Екстра исправке: " +"Додатне закрпе: " msgid "Modified by " msgstr "Модификовао " @@ -6261,7 +6747,7 @@ msgid "Linking: " msgstr "Повезивање: " msgid " DEBUG BUILD" -msgstr " DEBUG ИЗДАЊЕ" +msgstr " ДИБАГ ИЗДАЊЕ" msgid "VIM - Vi IMproved" msgstr "VIM - Vi IMproved" @@ -6270,7 +6756,7 @@ msgid "version " msgstr "верзија " msgid "by Bram Moolenaar et al." -msgstr "написали Bram Moolenaar et al." +msgstr "написали Брам Моленар и др." msgid "Vim is open source and freely distributable" msgstr "Vim је отвореног кода и може слободно да се дистрибуира" @@ -6306,13 +6792,13 @@ msgid "Running modeless, typed text is inserted" msgstr "Безрежимски рад, умеће се откуцани текст" msgid "menu Edit->Global Settings->Toggle Insert Mode " -msgstr "мени Уређивање->Глобална подешавања->Преклапај режим Уметање " +msgstr "мени Уређивање->Општа подешавања->Режим Уметање (да/не) " msgid " for two modes " msgstr " за два режима " msgid "menu Edit->Global Settings->Toggle Vi Compatible" -msgstr "мени Уређивање->Глобална подешавања->Преклапај Vi Компатибилно" +msgstr "мени Уређивање->Општа подешавања->'Vi' сагласно (да/не)" msgid " for Vim defaults " msgstr " за Vim подразумевано " @@ -6477,9 +6963,6 @@ msgstr "E685: Интерна грешка: %s" msgid "Interrupted" msgstr "Прекинуто" -msgid "E14: Invalid address" -msgstr "E14: Неважећа адреса" - msgid "E474: Invalid argument" msgstr "E474: Неважећи аргумент" @@ -6488,12 +6971,16 @@ msgid "E475: Invalid argument: %s" msgstr "E475: Неважећи аргумент: %s" #, c-format +msgid "E983: Duplicate argument: %s" +msgstr "E983: Дуплирани аргумент: %s" + +#, c-format msgid "E475: Invalid value for argument %s" -msgstr "E475: Неважећa вредност за аргумент: %s" +msgstr "E475: Неважећа вредност за аргумент: %s" #, c-format msgid "E475: Invalid value for argument %s: %s" -msgstr "E475: Неважећa вредност за аргумент %s: %s" +msgstr "E475: Неважећа вредност за аргумент %s: %s" #, c-format msgid "E15: Invalid expression: %s" @@ -6548,8 +7035,8 @@ 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 "E27: Farsi support has been removed\n" +msgstr "E27: Подршка за фарси је уклоњена\n" msgid "E800: Arabic cannot be used: Not enabled at compile time\n" msgstr "" @@ -6657,6 +7144,21 @@ msgid "E45: 'readonly' option is set (add ! to override)" msgstr "E45: Постављена је 'readonly' опција (додајте ! за премошћавање)" #, c-format +msgid "E121: Undefined variable: %s" +msgstr "E121: Недефинисана променљива: %s" + +#, c-format +msgid "E734: Wrong variable type for %s=" +msgstr "E734: Погрешан тип променљиве за %s=" + +#, c-format +msgid "E461: Illegal variable name: %s" +msgstr "E461: Недозвољено име променљиве: %s" + +msgid "E995: Cannot modify existing variable" +msgstr "E995: Постојећа променљива не може да се измени" + +#, c-format msgid "E46: Cannot change read-only variable \"%s\"" msgstr "E46: Променљива само за читање \"%s\" не може да се измени" @@ -6664,6 +7166,9 @@ msgstr "E46: Променљива само за читање \"%s\" не мож msgid "E794: Cannot set variable in the sandbox: \"%s\"" msgstr "E794: Не може да се постави променљива у sandbox-у: \"%s\"" +msgid "E928: String required" +msgstr "E928: Захтева се String" + msgid "E713: Cannot use empty key for Dictionary" msgstr "E713: Не може да се користи празан кључ за Речник" @@ -6711,7 +7216,7 @@ msgid "E255: Couldn't read in sign data!" msgstr "E255: Подаци за знак нису могли да се прочитају!" msgid "E72: Close error on swap file" -msgstr "E72: Грешка код затвањара swap датотеке" +msgstr "E72: Грешка код затварања swap фајла" msgid "E73: tag stack empty" msgstr "E73: стек ознака је празан" @@ -6752,6 +7257,10 @@ msgstr "E939: Потребан је позитиван број" msgid "E81: Using <SID> not in a script context" msgstr "E81: <SID> се користи ван скрипт контекста" +#, c-format +msgid "E107: Missing parentheses: %s" +msgstr "E107: Недостају заграде: %s" + msgid "E449: Invalid expression received" msgstr "E449: Примљен је неважећи израз" @@ -6792,11 +7301,22 @@ msgstr "E919: Није пронађен директоријум у '%s': \"%s\" msgid "E952: Autocommand caused recursive behavior" msgstr "E952: Аутокомандa je изазвала рекурзивно понашање" +msgid "E328: Menu only exists in another mode" +msgstr "E328: Мени постоји само у другом режиму" + + +msgid "E957: Invalid window number" +msgstr "E957: Неисправан број прозора" + +#, c-format +msgid "E686: Argument of %s must be a List" +msgstr "E686: Аргумент за %s мора бити Листа" + msgid "search hit TOP, continuing at BOTTOM" -msgstr "претрага је достигла ВРХ, наставља се на ДНУ" +msgstr "претрага је достигла ВРХ, наставља се од ДНА" msgid "search hit BOTTOM, continuing at TOP" -msgstr "претрага је достигла ДНО, наставља се на ВРХУ" +msgstr "претрага је достигла ДНО, наставља се од ВРХА" #, c-format msgid "Need encryption key for \"%s\"" @@ -6837,8 +7357,8 @@ msgstr "" #, c-format msgid "expected int() or something supporting coercing to int(), but got %s" msgstr "" -"очекивало се int() или нешто што подржава спајање са int(), али је добијено %" -"s" +"очекивало се int() или нешто што подржава спајање са int(), али је добијено " +"%s" msgid "value is too large to fit into C int type" msgstr "вредност је сувише велика да се смести у C int тип" @@ -6894,8 +7414,7 @@ msgstr "hashtab је промењен током итерације" #, c-format msgid "expected sequence element of size 2, but got sequence of size %d" msgstr "" -"очекивао се елемент секвенце величине 2, али је добијена секвенца " -"величине %d" +"очекивао се елемент секвенце величине 2, али је добијена секвенца величине %d" msgid "list constructor does not accept keyword arguments" msgstr "конструктор листе не прихвата кључне речи за аргументе" @@ -6904,7 +7423,7 @@ msgid "list index out of range" msgstr "индекс листе је ван опсега" #, c-format -msgid "internal error: failed to get vim list item %d" +msgid "internal error: failed to get Vim list item %d" msgstr "интерна грешка: ставка %d vim листе није могла да се добије" msgid "slice step cannot be zero" @@ -6915,7 +7434,7 @@ msgid "attempt to assign sequence of size greater than %d to extended slice" msgstr "покушај доделе секвенце величине веће од %d како би се продужио slice" #, c-format -msgid "internal error: no vim list item %d" +msgid "internal error: no Vim list item %d" msgstr "интерна грешка: нема ставке %d у vim листи" msgid "internal error: not enough list items" @@ -7025,19 +7544,19 @@ 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" +msgid "E859: Failed to convert returned python object to a Vim value" msgstr "E859: Конверзија враћеног python објекта у vim вредност није успела" #, c-format -msgid "unable to convert %s to vim dictionary" +msgid "unable to convert %s to a Vim dictionary" msgstr "%s не може да се конвертује у vim речник" #, c-format -msgid "unable to convert %s to vim list" +msgid "unable to convert %s to a Vim list" msgstr "%s не може да се конвертује у vim листу" #, c-format -msgid "unable to convert %s to vim structure" +msgid "unable to convert %s to a Vim structure" msgstr "%s не може да се конвертује у vim структуру" msgid "internal error: NULL reference passed" diff --git a/src/nvim/po/tr.po b/src/nvim/po/tr.po new file mode 100644 index 0000000000..3db3cbfef0 --- /dev/null +++ b/src/nvim/po/tr.po @@ -0,0 +1,9370 @@ +# Turkish translations for Vim +# Vim Türkçe çevirileri +# Copyright (C) 2020 Emir SARI <bitigchi@me.com> +# This file is distributed under the same license as the Vim package. +# Emir SARI <bitigchi@me.com>, 2019-2020 +# +msgid "" +msgstr "" +"Project-Id-Version: Vim Turkish Localization Project\n" +"Report-Msgid-Bugs-To: Emir SARI <bitigchi@me.com>\n" +"POT-Creation-Date: 2020-11-29 00:20+0300\n" +"PO-Revision-Date: 2020-11-29 20:00+0300\n" +"Last-Translator: Emir SARI <bitigchi@me.com>\n" +"Language-Team: Turkish <https://github.com/bitigchi/vim>\n" +"Language: tr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "E163: There is only one file to edit" +msgstr "E163: Düzenlenecek yalnızca bir dosya var" + +msgid "E164: Cannot go before first file" +msgstr "E164: İlk dosyadan öncesine gidilemez" + +msgid "E165: Cannot go beyond last file" +msgstr "E165: Son dosyadan öteye gidilemez" + +msgid "E610: No argument to delete" +msgstr "E610: Silinecek bir değişken yok" + +msgid "E249: window layout changed unexpectedly" +msgstr "E249: Pencere yerleşimi beklenmedik bir biçimde değişti" + +msgid "--Deleted--" +msgstr "--Silindi--" + +#, c-format +msgid "auto-removing autocommand: %s <buffer=%d>" +msgstr "otokomut kendiliğinden kaldırılıyor: %s <buffer=%d>" + +#, c-format +msgid "E367: No such group: \"%s\"" +msgstr "E367: Böyle bir grup yok: \"%s\"" + +msgid "E936: Cannot delete the current group" +msgstr "E936: Geçerli grup silinemiyor" + +msgid "W19: Deleting augroup that is still in use" +msgstr "W19: Kullanımda olan otokomut grubu siliniyor" + +#, c-format +msgid "E215: Illegal character after *: %s" +msgstr "E215: * sonrası izin verilmeyen karakter: %s" + +#, c-format +msgid "E216: No such event: %s" +msgstr "E216: Böyle bir olay yok: %s" + +#, c-format +msgid "E216: No such group or event: %s" +msgstr "E216: Böyle bir grup veya olay yok: %s" + +msgid "" +"\n" +"--- Autocommands ---" +msgstr "" +"\n" +"--- Otokomutlar ---" + +#, c-format +msgid "E680: <buffer=%d>: invalid buffer number " +msgstr "E680: <buffer=%d>: Geçersiz arabellek numarası" + +msgid "E217: Can't execute autocommands for ALL events" +msgstr "E217: Otokomutlar TÜM olaylar için çalıştırılamıyor" + +msgid "No matching autocommands" +msgstr "Eşleşen otokomut yok" + +msgid "E218: autocommand nesting too deep" +msgstr "E218: Çok fazla iç içe geçmiş otokomut" + +#, c-format +msgid "%s Autocommands for \"%s\"" +msgstr "\"%s\" için %s otokomutlar" + +#, c-format +msgid "Executing %s" +msgstr "%s çalıştırılıyor" + +#, c-format +msgid "autocommand %s" +msgstr "%s otokomutu" + +msgid "E831: bf_key_init() called with empty password" +msgstr "E831: bf_key_init() boş bir şifre ile çağrıldı" + +msgid "E820: sizeof(uint32_t) != 4" +msgstr "E820: sizeof(uint32_t) != 4" + +msgid "E817: Blowfish big/little endian use wrong" +msgstr "E817: Blowfish yüksek/düşük son haneli kullanımı yanlış" + +msgid "E818: sha256 test failed" +msgstr "E818: sha256 testi başarısız oldu" + +msgid "E819: Blowfish test failed" +msgstr "E819: Blowfish testi başarısız oldu" + +msgid "[Location List]" +msgstr "[Konum Listesi]" + +msgid "[Quickfix List]" +msgstr "[Hızlı Düzelt Listesi]" + +msgid "E855: Autocommands caused command to abort" +msgstr "E855: Otokomutlar komutun durmasına neden oldu" + +msgid "E82: Cannot allocate any buffer, exiting..." +msgstr "E82: Arabellek ayrılamadı, çıkılıyor..." + +msgid "E83: Cannot allocate buffer, using other one..." +msgstr "E83: Arabellek ayrılamadı, başka bir tane kullanılıyor..." + +msgid "E931: Buffer cannot be registered" +msgstr "E931: Arabellek kaydedilemedi" + +#, c-format +msgid "E937: Attempt to delete a buffer that is in use: %s" +msgstr "E937: Kullanımda olan bir arabellek silinmeye çalışılıyor: %s" + +msgid "E515: No buffers were unloaded" +msgstr "E515: Hiçbir arabellek bellekten kaldırılmadı" + +msgid "E516: No buffers were deleted" +msgstr "E516: Hiçbir arabellek silinmedi" + +msgid "E517: No buffers were wiped out" +msgstr "E517: Hiçbir arabellek yok edilmedi" + +#, c-format +msgid "%d buffer unloaded" +msgid_plural "%d buffers unloaded" +msgstr[0] "%d arabellek bellekten kaldırıldı" +msgstr[1] "%d arabellek bellekten kaldırıldı" + +#, c-format +msgid "%d buffer deleted" +msgid_plural "%d buffers deleted" +msgstr[0] "%d arabellek silindi" +msgstr[1] "%d arabellek silindi" + +#, c-format +msgid "%d buffer wiped out" +msgid_plural "%d buffers wiped out" +msgstr[0] "%d arabellek yok edildi" +msgstr[1] "%d arabellek yok edildi" + +msgid "E90: Cannot unload last buffer" +msgstr "E90: Son arabellek bellekten kaldırılamıyor" + +msgid "E84: No modified buffer found" +msgstr "E84: Değiştirilmiş bir arabellek bulunamadı" + +msgid "E85: There is no listed buffer" +msgstr "E85: Listelenmiş bir arabellek yok" + +msgid "E87: Cannot go beyond last buffer" +msgstr "E87: Son arabellekten öteye gidilemez" + +msgid "E88: Cannot go before first buffer" +msgstr "E88: İlk arabellekten öncesine gidilemez" + +#, c-format +msgid "E89: No write since last change for buffer %d (add ! to override)" +msgstr "" +"E89: %d numaralı arabellek son değişiklikten sonra yazılmadı (geçersiz " +"kılmak için ! ekleyin)" + +msgid "E948: Job still running (add ! to end the job)" +msgstr "E948: İş hâlâ sürüyor (bitirmek için ! ekleyin)" + +msgid "E37: No write since last change (add ! to override)" +msgstr "" +"E37: Son değişiklikten sonra yazılmadı (geçersiz kılmak için ! ekleyin)" + +msgid "E948: Job still running" +msgstr "E948: İş hâlâ sürüyor" + +msgid "E37: No write since last change" +msgstr "E37: Son değişiklikten sonra yazılmadı" + +msgid "W14: Warning: List of file names overflow" +msgstr "W14: Uyarı: Dosya adları taşımı" + +#, c-format +msgid "E92: Buffer %d not found" +msgstr "E92: %d numaralı arabellek bulunamadı" + +#, c-format +msgid "E93: More than one match for %s" +msgstr "E93: %s için birden çok eşleşme" + +#, c-format +msgid "E94: No matching buffer for %s" +msgstr "E94: %s için eşleşen arabellek yok" + +#, c-format +msgid "line %ld" +msgstr "%ld. satır" + +msgid "E95: Buffer with this name already exists" +msgstr "E95: Aynı adda bir arabellek hâlihazırda var" + +msgid " [Modified]" +msgstr " [Değiştirildi]" + +msgid "[Not edited]" +msgstr "[Değiştirilmedi]" + +msgid "[Read errors]" +msgstr "[Okuma hataları]" + +msgid "[RO]" +msgstr "[SO]" + +msgid "[readonly]" +msgstr "[saltokunur]" + +#, c-format +msgid "%ld line --%d%%--" +msgid_plural "%ld lines --%d%%--" +msgstr[0] "%ld. satır --%d%%" +msgstr[1] "%ld. satır --%d%%" + +#, c-format +msgid "line %ld of %ld --%d%%-- col " +msgstr "satır %ld/%ld --%d%%-- sütun " + +msgid "[No Name]" +msgstr "[Adsız]" + +msgid "help" +msgstr "yardım" + +msgid "[Help]" +msgstr "[Yardım]" + +msgid "[Preview]" +msgstr "[Önizleme]" + +msgid "All" +msgstr "Tüm Belge" + +msgid "Bot" +msgstr "Son" + +msgid "Top" +msgstr "Baş" + +msgid "E382: Cannot write, 'buftype' option is set" +msgstr "E382: Yazılamıyor, 'buftype' seçeneği ayarlanmamış" + +msgid "[Prompt]" +msgstr "[İstem]" + +msgid "[Popup]" +msgstr "[Açılır pencere]" + +msgid "[Scratch]" +msgstr "[Geçici alan]" + +msgid "WARNING: The file has been changed since reading it!!!" +msgstr "UYARI: Bu dosya açıldıktan sonra başkası tarafından değiştirilmiş!!!" + +msgid "Do you really want to write to it" +msgstr "Yine de yazmak istiyor musunuz?" + +msgid "[New]" +msgstr "[Yeni]" + +msgid "[New File]" +msgstr "[Yeni Dosya]" + +msgid "E676: No matching autocommands for acwrite buffer" +msgstr "E676: acwrite arabelleği için eşleşen bir otokomut yok" + +msgid "E203: Autocommands deleted or unloaded buffer to be written" +msgstr "E203: Otokomutlar arabelleği silmiş veya yazılması için kaldırmışlar" + +msgid "E204: Autocommand changed number of lines in unexpected way" +msgstr "E204: Otokomut satır sayısını beklenmeyen biçimde değiştirdi" + +msgid "NetBeans disallows writes of unmodified buffers" +msgstr "NetBeans değiştirilmemiş arabelleklerin yazılmasına izin vermez" + +msgid "Partial writes disallowed for NetBeans buffers" +msgstr "NetBeans arabellekleri için kısmî yazmalara izin verilmez" + +msgid "is a directory" +msgstr "bir dizin" + +msgid "is not a file or writable device" +msgstr "bir dosya veya yazılabilir aygıt değil" + +msgid "writing to device disabled with 'opendevice' option" +msgstr "aygıta yazma 'opendevice' seçeneği ile kapatılmış" + +msgid "is read-only (add ! to override)" +msgstr "saltokunur (geçersiz kılmak için ! ekleyin)" + +msgid "E506: Can't write to backup file (add ! to override)" +msgstr "E506: Yedek dosyasına yazılamıyor (geçersiz kılmak için ! ekleyin)" + +msgid "E507: Close error for backup file (add ! to override)" +msgstr "E507: Yedek dosya için kapatma hatası (geçersiz kılmak için ! ekleyin)" + +msgid "E508: Can't read file for backup (add ! to override)" +msgstr "E508: Yedek dosyası okunamıyor (geçersiz kılmak için ! ekleyin)" + +msgid "E509: Cannot create backup file (add ! to override)" +msgstr "E509: Yedek dosyası oluşturulamıyor (geçersiz kılmak için ! ekleyin)" + +msgid "E510: Can't make backup file (add ! to override)" +msgstr "E510: Yedek dosyası yapılamıyor (geçersiz kılmak için ! ekleyin) " + +msgid "E214: Can't find temp file for writing" +msgstr "E214: Yazma için geçici dosya bulunamıyor" + +msgid "E213: Cannot convert (add ! to write without conversion)" +msgstr "E213: Dönüştürülemiyor (dönüştürmeden yazmak için ! ekleyin)" + +msgid "E166: Can't open linked file for writing" +msgstr "E166: Bağlı dosya yazma için açılamıyor" + +msgid "E212: Can't open file for writing" +msgstr "E212: Dosya yazma için açılamıyor" + +msgid "E949: File changed while writing" +msgstr "E949: Dosya yazma sırasında değiştirildi" + +msgid "E512: Close failed" +msgstr "E512: Kapatma başarısız oldu" + +msgid "E513: write error, conversion failed (make 'fenc' empty to override)" +msgstr "" +"E513: Yazma hatası, dönüştürme başarısız (geçersiz kılmak için 'fenc'i boş " +"bırakın)" + +#, c-format +msgid "" +"E513: write error, conversion failed in line %ld (make 'fenc' empty to " +"override)" +msgstr "" +"E513: Yazma hatası, %ld. satırda dönüştürme başarısız (geçersiz kılmak için " +"'fenc'i boş bırakın)" + +msgid "E514: write error (file system full?)" +msgstr "E514: Yazma hatası (dosya sistemi dolu mu?)" + +msgid " CONVERSION ERROR" +msgstr " DÖNÜŞTÜRME HATASI" + +#, c-format +msgid " in line %ld;" +msgstr " %ld. satırda;" + +msgid "[NOT converted]" +msgstr "[dönüştürülmedi]" + +msgid "[converted]" +msgstr "[dönüştürüldü]" + +msgid "[Device]" +msgstr "[Aygıt]" + +msgid " [a]" +msgstr " [a]" + +msgid " appended" +msgstr " iliştirildi" + +msgid " [w]" +msgstr " [w]" + +msgid " written" +msgstr " yazıldı" + +msgid "E205: Patchmode: can't save original file" +msgstr "E205: Yama kipi: Orijinal dosya kaydedilemiyor" + +msgid "E206: patchmode: can't touch empty original file" +msgstr "E206: Yama kipi: Orijinal boş dosyaya dokunulamıyor" + +msgid "E207: Can't delete backup file" +msgstr "E207: Yedek dosyası silinemiyor" + +msgid "" +"\n" +"WARNING: Original file may be lost or damaged\n" +msgstr "" +"\n" +"UYARI: Orijinal dosya kaybolmuş veya hasar görmüş olabilir\n" + +msgid "don't quit the editor until the file is successfully written!" +msgstr "dosya başarılı bir biçimde yazılana kadar düzenleyiciden çıkmayın!" + +msgid "W10: Warning: Changing a readonly file" +msgstr "W10: Uyarı: Saltokunur bir dosya değiştiriliyor" + +msgid "E902: Cannot connect to port" +msgstr "E902: Kapıya bağlanılamıyor" + +msgid "E898: socket() in channel_connect()" +msgstr "E898: channel_connect() içinde socket()" + +#, c-format +msgid "E901: getaddrinfo() in channel_open(): %s" +msgstr "E901: channel_open() içinde getaddrinfo(): %s" + +msgid "E901: gethostbyname() in channel_open()" +msgstr "E901: channel_open() içinde gethostbyname()" + +msgid "E903: received command with non-string argument" +msgstr "E903: Dizi olmayan değişken içeren komut alındı" + +msgid "E904: last argument for expr/call must be a number" +msgstr "E904: İfadenin/çağrının son değişkeni bir sayı olmalıdır" + +msgid "E904: third argument for call must be a list" +msgstr "E904: Çağrının üçüncü değişkeni bir liste olmalıdır" + +#, c-format +msgid "E905: received unknown command: %s" +msgstr "E905: Bilinmeyen komut alındı: %s" + +msgid "E906: not an open channel" +msgstr "E906: Açık bir kanal değil" + +#, c-format +msgid "E630: %s(): write while not connected" +msgstr "E630: %s(): Bağlantı yokken yazım" + +#, c-format +msgid "E631: %s(): write failed" +msgstr "E631: %s(): Yazma başarısız" + +#, c-format +msgid "E917: Cannot use a callback with %s()" +msgstr "E917: %s() ile geri çağırma kullanılamaz" + +msgid "E912: cannot use ch_evalexpr()/ch_sendexpr() with a raw or nl channel" +msgstr "E912: ch_evalexpr()/ch_sendexpr() raw/nl kanalları ile kullanılamaz" + +msgid "No display" +msgstr "Görüntü yok" + +msgid ": Send failed.\n" +msgstr ": Gönderme başarısız oldu.\n" + +msgid ": Send failed. Trying to execute locally\n" +msgstr ": Gönderme başarısız oldu. Yerel ortamda çalıştırma deneniyor\n" + +#, c-format +msgid "%d of %d edited" +msgstr "%d/%d düzenlendi" + +msgid "No display: Send expression failed.\n" +msgstr "Görüntü yok: Gönderme başarısız oldu.\n" + +msgid ": Send expression failed.\n" +msgstr ": Gönderme başarısız oldu.\n" + +msgid "E240: No connection to the X server" +msgstr "E240: X sunucusuna bağlanılamadı" + +#, c-format +msgid "E241: Unable to send to %s" +msgstr "E241: Şuraya gönderilemedi: %s" + +msgid "E277: Unable to read a server reply" +msgstr "E277: Bir sunucu yanıtı okunamadı" + +msgid "E941: already started a server" +msgstr "E941: Sunucu hâlihazırda çalışıyor" + +msgid "E942: +clientserver feature not available" +msgstr "E942: +clientserver özelliği mevcut değil" + +msgid "E258: Unable to send to client" +msgstr "E258: İstemciye gönderilemiyor" + +msgid "Used CUT_BUFFER0 instead of empty selection" +msgstr "Boş seçim yerine CUT_BUFFER0 kullanıldı" + +msgid "tagname" +msgstr "etiket adı" + +msgid " kind file\n" +msgstr " dosya türü\n" + +msgid "'history' option is zero" +msgstr "'history' seçeneği sıfır" + +msgid "E821: File is encrypted with unknown method" +msgstr "E821: Dosya bilinmeyen bir yöntemle şifrelenmiş" + +msgid "Warning: Using a weak encryption method; see :help 'cm'" +msgstr "" +"Uyarı: Zayıf bir şifreleme yöntemi kullanılıyor; bilgi için: :help 'cm'" + +msgid "Enter encryption key: " +msgstr "Şifreleme anahtarı girin: " + +msgid "Enter same key again: " +msgstr "Aynı anahtarı yeniden girin: " + +msgid "Keys don't match!" +msgstr "Anahtarlar eşleşmiyor!" + +msgid "[crypted]" +msgstr "[şifreli]" + +msgid "Entering Debug mode. Type \"cont\" to continue." +msgstr "Hata Ayıklama kipine giriliyor. Sürdürmek için \"cont\" yazın." + +#, c-format +msgid "Oldval = \"%s\"" +msgstr "Eski değer = \"%s\"" + +# debugger.c:103 +#, c-format +msgid "Newval = \"%s\"" +msgstr "Yeni değer = \"%s\"" + +#, c-format +msgid "line %ld: %s" +msgstr "%ld. satır: %s" + +#, c-format +msgid "cmd: %s" +msgstr "komut: %s" + +msgid "frame is zero" +msgstr "çerçeve sıfır" + +#, c-format +msgid "frame at highest level: %d" +msgstr "çerçeve en yüksek düzeyde: %d" + +#, c-format +msgid "Breakpoint in \"%s%s\" line %ld" +msgstr "\"%s%s\" içinde kesme noktası, %ld. satır" + +#, c-format +msgid "E161: Breakpoint not found: %s" +msgstr "E161: Kesme noktası bulunamadı: %s" + +msgid "No breakpoints defined" +msgstr "Hiçbir kesme noktası tanımlanmamış" + +#, c-format +msgid "%3d %s %s line %ld" +msgstr "%3d %s %s %ld. satır" + +#, c-format +msgid "%3d expr %s" +msgstr "%3d ifade %s" + +msgid "extend() argument" +msgstr "extend() değişkeni" + +#, c-format +msgid "E737: Key already exists: %s" +msgstr "E737: Anahtar hâlihazırda var: %s" + +#, c-format +msgid "E96: Cannot diff more than %d buffers" +msgstr "E96: %d arabellekten fazlasında karşılaştırma yapılamıyor" + +#, c-format +msgid "Not enough memory to use internal diff for buffer \"%s\"" +msgstr "\"%s\" arabelleği için karşılaştırma yapacak yeterli bellek yok" + +msgid "E810: Cannot read or write temp files" +msgstr "E810: Geçici dosyalar okunamıyor veya yazılamıyor" + +msgid "E97: Cannot create diffs" +msgstr "E97: Karşılaştırma yapılamıyor" + +msgid "E960: Problem creating the internal diff" +msgstr "E960: Karşılaştırma hazırlanırken sorun" + +msgid "Patch file" +msgstr "Yama dosyası" + +msgid "E816: Cannot read patch output" +msgstr "E816: Yama çıktısı okunamıyor" + +msgid "E98: Cannot read diff output" +msgstr "E98: Karşılaştırma çıktısı okunamıyor" + +msgid "E959: Invalid diff format." +msgstr "E959: Geçersiz karşılaştırma biçimi" + +msgid "E99: Current buffer is not in diff mode" +msgstr "E99: Şu anki arabellek karşılaştırma kipinde değil" + +msgid "E793: No other buffer in diff mode is modifiable" +msgstr "" +"E793: Karşılaştırma kipindeki başka hiçbir arabellek değiştirilebilir değil" + +msgid "E100: No other buffer in diff mode" +msgstr "E100: Karşılaştırma kipinde başka hiçbir arabellek yok" + +msgid "E101: More than two buffers in diff mode, don't know which one to use" +msgstr "" +"E101: Karşılaştırma kipinde ikiden fazla arabellek var, hangisinin " +"kullanılacağı belli değil" + +#, c-format +msgid "E102: Can't find buffer \"%s\"" +msgstr "E102: Arabellek \"%s\" bulunamıyor" + +#, c-format +msgid "E103: Buffer \"%s\" is not in diff mode" +msgstr "E103: Arabellek \"%s\" karşılaştırma kipinde değil" + +msgid "E787: Buffer changed unexpectedly" +msgstr "E787: Arabellek beklenmeyen bir biçimde değiştirildi" + +msgid "E104: Escape not allowed in digraph" +msgstr "E104: Kaçan, ikili harflerde kullanılamaz" + +msgid "Custom" +msgstr "Özel" + +msgid "Latin supplement" +msgstr "Latin ek" + +msgid "Greek and Coptic" +msgstr "Yunan ve Antik Mısır" + +msgid "Cyrillic" +msgstr "Kiril" + +msgid "Hebrew" +msgstr "İbranca" + +msgid "Arabic" +msgstr "Arapça" + +msgid "Latin extended" +msgstr "Latin genişletilmiş" + +msgid "Greek extended" +msgstr "Yunan genişletilmiş" + +msgid "Punctuation" +msgstr "Noktalama" + +msgid "Super- and subscripts" +msgstr "Üst ve alt simgeler" + +msgid "Currency" +msgstr "Para birimi" + +msgid "Other" +msgstr "Diğer" + +msgid "Roman numbers" +msgstr "Roma rakamları" + +msgid "Arrows" +msgstr "Oklar" + +msgid "Mathematical operators" +msgstr "Matematiksel işleçler" + +msgid "Technical" +msgstr "Teknik" + +msgid "Box drawing" +msgstr "Kutu çizimi" + +msgid "Block elements" +msgstr "Bloklar" + +msgid "Geometric shapes" +msgstr "Geometrik biçimler" + +msgid "Symbols" +msgstr "Semboller" + +msgid "Dingbats" +msgstr "Harf simgeler" + +msgid "CJK symbols and punctuation" +msgstr "ÇJK simgeler ve noktalama" + +msgid "Hiragana" +msgstr "Hiragana" + +msgid "Katakana" +msgstr "Katakana" + +msgid "Bopomofo" +msgstr "Bopomofo" + +msgid "E544: Keymap file not found" +msgstr "E544: Düğme eşlem dosyası bulunamadı" + +msgid "E105: Using :loadkeymap not in a sourced file" +msgstr "E105: :loadkeymap kaynak alınmayan bir dosyada kullanılıyor" + +msgid "E791: Empty keymap entry" +msgstr "E791: Boş düğme eşlem girdisi" + +msgid "E689: Can only index a List, Dictionary or Blob" +msgstr "" +"E689: Yalnızca bir liste, sözlük, veya ikili geniş nesne dizinlenebilir" + +msgid "E708: [:] must come last" +msgstr "E708: [:] en son gelmelidir" + +msgid "E709: [:] requires a List or Blob value" +msgstr "E709: [:] bir liste veya ikili geniş nesne değeri gerektirir" + +msgid "E972: Blob value does not have the right number of bytes" +msgstr "E972: İkili geniş nesne değeri doğru bayt sayısına sahip değil" + +msgid "E996: Cannot lock a range" +msgstr "E996: Erim kilitlenemiyor" + +msgid "E996: Cannot lock a list or dict" +msgstr "E996: Bir liste veya sözlük kilitlenemiyor" + +msgid "E260: Missing name after ->" +msgstr "E260: -> sonrası ad eksik" + +msgid "E695: Cannot index a Funcref" +msgstr "E695: Bir Funcref dizinlenemez" + +msgid "Not enough memory to set references, garbage collection aborted!" +msgstr "Referansları ayarlamak için yetersiz bellek, atık toplama durduruldu" + +msgid "E724: variable nested too deep for displaying" +msgstr "E724: Değişken çok iç içe geçtiğinden görüntülenemiyor" + +msgid "E698: variable nested too deep for making a copy" +msgstr "E698: Değişken kopyalama için çok iç içe geçmiş" + +msgid "" +"\n" +"\tLast set from " +msgstr "" +"\n" +"\tEn son şuradan ayarlandı: " + +msgid "E808: Number or Float required" +msgstr "E808: Sayı veya kayan noktalı değer gerekiyor" + +#, c-format +msgid "E158: Invalid buffer name: %s" +msgstr "E158: Geçersiz arabellek adı: %s" + +msgid "&Ok" +msgstr "&Tamam" + +msgid "E980: lowlevel input not supported" +msgstr "E980: Alt düzey girdi desteklenmiyor" + +#, c-format +msgid "E700: Unknown function: %s" +msgstr "E700: Bilinmeyen işlev: %s" + +msgid "E922: expected a dict" +msgstr "E922: Bir sözlük bekleniyordu" + +msgid "E923: Second argument of function() must be a list or a dict" +msgstr "E923: function() ikinci değişkeni bir liste veya sözlük olmalıdır" + +msgid "" +"&OK\n" +"&Cancel" +msgstr "" +"&Tamam\n" +"İ&ptal" + +msgid "called inputrestore() more often than inputsave()" +msgstr "inputrestore(), inputsave()'den daha fazla çağrıldı" + +msgid "E786: Range not allowed" +msgstr "E786: Erime izin verilmiyor" + +msgid "E701: Invalid type for len()" +msgstr "E701: len() için geçersiz tür" + +msgid "E726: Stride is zero" +msgstr "E726: Sıfır adım" + +msgid "E727: Start past end" +msgstr "E727: Başlangıç bitişten sonra" + +#, c-format +msgid "E962: Invalid action: '%s'" +msgstr "E962: Geçersiz eylem: '%s'" + +#, c-format +msgid "E935: invalid submatch number: %d" +msgstr "E935: Geçersiz alteşleşme numarası: %d" + +msgid "E991: cannot use =<< here" +msgstr "E991: Burada =<< kullanılamaz" + +msgid "E221: Marker cannot start with lower case letter" +msgstr "E221: İmleyici küçük harfle başlayamaz" + +msgid "E172: Missing marker" +msgstr "E172: İmleyici eksik" + +#, c-format +msgid "E990: Missing end marker '%s'" +msgstr "E990: Son imleyici '%s' eksik" + +msgid "E985: .= is not supported with script version >= 2" +msgstr "E985: .= betiğin ikinci sürümünden itibaren desteklenmiyor" + +msgid "E687: Less targets than List items" +msgstr "E687: Liste ögelerinden daha az hedef var" + +msgid "E688: More targets than List items" +msgstr "E688: Liste ögelerinden daha fazla hedef var" + +msgid "E452: Double ; in list of variables" +msgstr "E452: Değişkenler listesinde çifte ;" + +#, c-format +msgid "E738: Can't list variables for %s" +msgstr "E738: %s için değişkenler listelenemiyor" + +msgid "E996: Cannot lock an environment variable" +msgstr "E996: Ortam değişkeni kilitlenemiyor" + +msgid "E996: Cannot lock a register" +msgstr "E996: Yazmaç kilitlenemiyor" + +#, c-format +msgid "E108: No such variable: \"%s\"" +msgstr "E108: Böyle bir değişken yok: \"%s\"" + +msgid "E743: variable nested too deep for (un)lock" +msgstr "E743: Değişken kilitlenemez/kilidi açılamaz, çok iç içe geçmiş" + +#, c-format +msgid "E963: setting %s to value with wrong type" +msgstr "E963: %s yanlış türe sahip değere ayarlanıyor" + +#, c-format +msgid "E795: Cannot delete variable %s" +msgstr "E795: %s değişkeni silinemiyor" + +#, c-format +msgid "E704: Funcref variable name must start with a capital: %s" +msgstr "E704: Funcref değişkeni BÜYÜK harf ile başlamalıdır: %s" + +#, c-format +msgid "E705: Variable name conflicts with existing function: %s" +msgstr "E705: Değişken adı mevcut işlevle çakışıyor: %s" + +#, c-format +msgid "E741: Value is locked: %s" +msgstr "E741: Değer kilitli: %s" + +msgid "Unknown" +msgstr "Bilinmiyor" + +#, c-format +msgid "E742: Cannot change value of %s" +msgstr "E742: %s değeri değiştirilemiyor" + +msgid "E921: Invalid callback argument" +msgstr "E921: Geçersiz geri çağırma değişkeni" + +#, c-format +msgid "<%s>%s%s %d, Hex %02x, Oct %03o, Digr %s" +msgstr "<%s>%s%s %d, Onalt. %02x, Sek. %03o, Digr %s" + +#, c-format +msgid "<%s>%s%s %d, Hex %02x, Octal %03o" +msgstr "<%s>%s%s %d, Onaltılı %02x, Sekizli %03o" + +#, c-format +msgid "> %d, Hex %04x, Oct %o, Digr %s" +msgstr "> %d, Onalt. %04x, Sek. %o, Digr %s" + +#, c-format +msgid "> %d, Hex %08x, Oct %o, Digr %s" +msgstr "> %d, Onalt. %08x, Sek. %o, Digr %s" + +#, c-format +msgid "> %d, Hex %04x, Octal %o" +msgstr "> %d, Onaltılı %04x, Sekizli %o" + +#, c-format +msgid "> %d, Hex %08x, Octal %o" +msgstr "> %d, Onaltılı %08x, Sekizli %o" + +msgid "E134: Cannot move a range of lines into itself" +msgstr "E134: Satırlardan oluşan erim kendi içine taşınamaz" + +#, c-format +msgid "%ld line moved" +msgid_plural "%ld lines moved" +msgstr[0] "%ld satır taşındı" +msgstr[1] "%ld satır taşındı" + +#, c-format +msgid "%ld lines filtered" +msgstr "%ld satır süzüldü" + +msgid "E135: *Filter* Autocommands must not change current buffer" +msgstr "E135: *Süzgeç* otokomutları şu anki arabelleği değiştirmemelidir" + +msgid "[No write since last change]\n" +msgstr "[Son değişiklikten sonra yazılmadı]\n" + +msgid "Save As" +msgstr "Farklı Kaydet" + +msgid "Write partial file?" +msgstr "Dosyanın bir kısmı yazılsın mı?" + +msgid "E140: Use ! to write partial buffer" +msgstr "E140: Arabelleğin bir kısmını yazmak için ! kullanın" + +#, c-format +msgid "Overwrite existing file \"%s\"?" +msgstr "Mevcut \"%s\" dosyasının üzerine yazılsın mı?" + +#, c-format +msgid "Swap file \"%s\" exists, overwrite anyway?" +msgstr "Takas dosyası \"%s\" mevcut, yine de üzerine yazılsın mı?" + +#, c-format +msgid "E768: Swap file exists: %s (:silent! overrides)" +msgstr "E768: Takas dosyası mevcut: %s (:silent! geçersiz kılar)" + +#, c-format +msgid "E141: No file name for buffer %ld" +msgstr "E141: %ld numaralı arabelleğin bir adı yok" + +msgid "E142: File not written: Writing is disabled by 'write' option" +msgstr "E142: Dosya yazılamadı: Yazma 'write' seçeneği ile kapatılmış" + +#, c-format +msgid "" +"'readonly' option is set for \"%s\".\n" +"Do you wish to write anyway?" +msgstr "" +"\"%s\" için 'readonly' (saltokunur) seçeneği açık.\n" +"Yine de yazmak istiyor musunuz?" + +#, 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\" dosyasının izinleri saltokunur.\n" +"Belki yine de yazılabilir.\n" +"Denemek ister misiniz?" + +#, c-format +msgid "E505: \"%s\" is read-only (add ! to override)" +msgstr "E505: \"%s\" saltokunur (geçersiz kılmak için ! ekleyin)" + +msgid "Edit File" +msgstr "Dosya Düzenle" + +#, c-format +msgid "E143: Autocommands unexpectedly deleted new buffer %s" +msgstr "E143: yeni %s arabelleğini otokomutlar beklenmedik bir biçimde sildi" + +msgid "E144: non-numeric argument to :z" +msgstr "E144: :z için sayısal olmayan değişken" + +msgid "E145: Shell commands and some functionality not allowed in rvim" +msgstr "E145: rvim içinde kabuk komutları ve bazı işlevselliğe izin verilmez" + +msgid "E146: Regular expressions can't be delimited by letters" +msgstr "E146: Düzenli ifadeler harflerle sınırlandırılamaz" + +#, c-format +msgid "replace with %s (y/n/a/q/l/^E/^Y)?" +msgstr "%s ile değiştir (y/n/a/q/l/^E/^Y)?" + +msgid "(Interrupted) " +msgstr "(Yarıda kesildi) " + +#, c-format +msgid "%ld match on %ld line" +msgid_plural "%ld matches on %ld line" +msgstr[0] "%ld eşleşme, %ld satırda" +msgstr[1] "%ld eşleşme, %ld satırda" + +#, c-format +msgid "%ld substitution on %ld line" +msgid_plural "%ld substitutions on %ld line" +msgstr[0] "%ld değiştirme, %ld satırda" +msgstr[1] "%ld değiştirme, %ld satırda" + +#, c-format +msgid "%ld match on %ld lines" +msgid_plural "%ld matches on %ld lines" +msgstr[0] "%ld eşleşme, %ld satırda" +msgstr[1] "%ld eşleşme, %ld satırda" + +#, c-format +msgid "%ld substitution on %ld lines" +msgid_plural "%ld substitutions on %ld lines" +msgstr[0] "%ld değiştirme, %ld satırda" +msgstr[1] "%ld değiştirme, %ld satırda" + +msgid "E147: Cannot do :global recursive with a range" +msgstr "E147: :global özyineli olarak bir erim ile yapılamaz" + +msgid "E148: Regular expression missing from global" +msgstr "E148: Düzenli ifade eksik" + +#, c-format +msgid "Pattern found in every line: %s" +msgstr "Dizginin bulunduğu her satır: %s" + +#, c-format +msgid "Pattern not found: %s" +msgstr "Dizgi bulunamadı: %s" + +msgid "No old files" +msgstr "Eski dosya yok" + +#, c-format +msgid "Save changes to \"%s\"?" +msgstr "Değişiklikler şuraya kaydedilsin mi: \"%s\"?" + +#, c-format +msgid "E947: Job still running in buffer \"%s\"" +msgstr "E947: İş \"%s\" arabelleğinde hâlâ sürüyor" + +#, c-format +msgid "E162: No write since last change for buffer \"%s\"" +msgstr "E162: \"%s\" arabelleği son değişiklikten sonra yazılmadı" + +msgid "Warning: Entered other buffer unexpectedly (check autocommands)" +msgstr "Uyarı: Diğer arabelleğe aniden girildi (otokomutları denetleyin)" + +#, c-format +msgid "E666: compiler not supported: %s" +msgstr "E666: Derleyici desteklenmiyor: %s" + +#, c-format +msgid "W20: Required python version 2.x not supported, ignoring file: %s" +msgstr "W20: Gerekli 2.x Python sürümü desteklenmiyor, dosya yok sayılıyor: %s" + +#, c-format +msgid "W21: Required python version 3.x not supported, ignoring file: %s" +msgstr "W21: Gerekli Python sürümü 3.x desteklenmiyor, dosya yok sayılıyor: %s" + +msgid "Entering Ex mode. Type \"visual\" to go to Normal mode." +msgstr "Ex kipine giriliyor. Normal kipe geri dönmek için \"visual\" yazın." + +msgid "E501: At end-of-file" +msgstr "E501: Dosyanın sonunda" + +#, c-format +msgid "Executing: %s" +msgstr "Çalıştırılıyor: %s" + +msgid "E169: Command too recursive" +msgstr "E169: Komut çok özyineli" + +#, c-format +msgid "E605: Exception not caught: %s" +msgstr "E605: Kural dışı durum yakalanmadı: %s" + +msgid "End of sourced file" +msgstr "Kaynak alınan dosyanın sonu" + +msgid "End of function" +msgstr "İşlevin sonu" + +msgid "E464: Ambiguous use of user-defined command" +msgstr "E464: Kullanıcı tanımlı komutun belirsiz kullanımı" + +msgid "E492: Not an editor command" +msgstr "E492: Bir düzenleyici komutu değil" + +msgid "E981: Command not allowed in rvim" +msgstr "E981: Bu komuta rvim'de izin verilmiyor" + +msgid "E493: Backwards range given" +msgstr "E493: Geriye dönük erim verildi" + +msgid "Backwards range given, OK to swap" +msgstr "Geriye dönük erim verildi, takas edilebilir" + +msgid "E494: Use w or w>>" +msgstr "E494: w veya w>> kullanın" + +msgid "E943: Command table needs to be updated, run 'make cmdidxs'" +msgstr "" +"E943: Komut tablosunun güncellenmesi gerekiyor, 'make cmdidxs' çalıştırın" + +msgid "" +"INTERNAL: Cannot use EX_DFLALL with ADDR_NONE, ADDR_UNSIGNED or ADDR_QUICKFIX" +msgstr "" +"DAHİLİ: EX_DFLALL; ADDR_NONE, ADDR_UNSIGNED veya ADDR_QUICKFIX ile birlikte " +"kullanılamaz" + +msgid "E319: Sorry, the command is not available in this version" +msgstr "E319: Üzgünüm, komut bu sürümde mevcut değil" + +#, c-format +msgid "%d more file to edit. Quit anyway?" +msgid_plural "%d more files to edit. Quit anyway?" +msgstr[0] "Düzenlenecek %d dosya daha var. Yine de çıkılsın mı?" +msgstr[1] "Düzenlenecek %d dosya daha var. Yine de çıkılsın mı?" + +#, c-format +msgid "E173: %d more file to edit" +msgid_plural "E173: %d more files to edit" +msgstr[0] "E173: Düzenlenecek %d dosya daha var" +msgstr[1] "E173: Düzenlenecek %d dosya daha var" + +msgid "unknown" +msgstr "bilinmeyen" + +#, c-format +msgid "E185: Cannot find color scheme '%s'" +msgstr "E185: '%s' renk düzeni bulunamadı" + +msgid "Greetings, Vim user!" +msgstr "Selamlar Vim kullanıcısı!" + +msgid "E784: Cannot close last tab page" +msgstr "E784: Son sekme sayfası kapatılamıyor" + +msgid "Already only one tab page" +msgstr "Zaten bir sekme sayfası var" + +msgid "Edit File in new tab page" +msgstr "Dosyayı yeni sekme sayfasında düzenle" + +msgid "Edit File in new window" +msgstr "Dosyayı yeni pencerede düzenle" + +#, c-format +msgid "Tab page %d" +msgstr "Sekme sayfası %d" + +msgid "No swap file" +msgstr "Takas dosyası yok" + +msgid "Append File" +msgstr "Dosya iliştir" + +msgid "E747: Cannot change directory, buffer is modified (add ! to override)" +msgstr "" +"E747: Dizin değiştirilemiyor, arabellek değiştirilmiş (geçersiz kılmak " +"için ! ekleyin)" + +msgid "E186: No previous directory" +msgstr "E186: Öncesinde dizin yok" + +msgid "E187: Unknown" +msgstr "E187: Bilinmeyen" + +msgid "E465: :winsize requires two number arguments" +msgstr "E465: :winsize iki adet sayı değişken gerektirir" + +#, c-format +msgid "Window position: X %d, Y %d" +msgstr "Pencere konumu: X %d, Y %d" + +msgid "E188: Obtaining window position not implemented for this platform" +msgstr "E188: Pencere konumunu alma özelliği bu platformda mevcut değil" + +msgid "E466: :winpos requires two number arguments" +msgstr "E466: :winpos iki adet sayı değişken gerektirir" + +msgid "E930: Cannot use :redir inside execute()" +msgstr "E930: :redir, execute() içinde kullanılamaz" + +msgid "Save Redirection" +msgstr "Yeniden yönlendirmeyi kaydet" + +#, c-format +msgid "E739: Cannot create directory: %s" +msgstr "E739: Dizin oluşturulamıyor: %s" + +#, c-format +msgid "E189: \"%s\" exists (add ! to override)" +msgstr "E189: \"%s\" zaten var (geçersiz kılmak için ! ekleyin)" + +#, c-format +msgid "E190: Cannot open \"%s\" for writing" +msgstr "E190: \"%s\" yazma için açılamıyor" + +msgid "E191: Argument must be a letter or forward/backward quote" +msgstr "E191: Değişken bir harf veya açma/kapama tırnağı olmalıdır" + +msgid "E192: Recursive use of :normal too deep" +msgstr "E192: :normal'in özyineli kullanımı çok derinde" + +msgid "E809: #< is not available without the +eval feature" +msgstr "E809: #<, +eval özelliği olmadan kullanılamaz" + +msgid "E194: No alternate file name to substitute for '#'" +msgstr "E194: '#' yerine koymak için başka dosya adı yok" + +msgid "E495: no autocommand file name to substitute for \"<afile>\"" +msgstr "E495: \"<afile>\" yerine koymak için otokomut dosya adı yok" + +msgid "E496: no autocommand buffer number to substitute for \"<abuf>\"" +msgstr "E496: \"<abuf>\" yerine koymak için otokomut arabellek numarası yok" + +msgid "E497: no autocommand match name to substitute for \"<amatch>\"" +msgstr "E497: \"<amatch>\" yerine koymak için otokomut eşleşme adı yok" + +msgid "E498: no :source file name to substitute for \"<sfile>\"" +msgstr "E498: \"<sfile>\" yerine koymak için :source dosya adı yok" + +msgid "E489: no call stack to substitute for \"<stack>\"" +msgstr "E489: \"<stack>\" yerine koymak için bir çağrı yığını yok" + +msgid "E842: no line number to use for \"<slnum>\"" +msgstr "E842: \"<slnum>\" kullanımı için satır numarası yok" + +msgid "E961: no line number to use for \"<sflnum>\"" +msgstr "E961: \"<sflnum>\" kullanımı için satır numarası yok" + +#, no-c-format +msgid "E499: Empty file name for '%' or '#', only works with \":p:h\"" +msgstr "E499: '%' veya '#' için boş dosya adı, yalnızca \":p:h\" ile çalışır" + +msgid "E500: Evaluates to an empty string" +msgstr "E500: Boş bir satır olarak değer biçer" + +msgid "Untitled" +msgstr "Adsız" + +msgid "E196: No digraphs in this version" +msgstr "E196: Bu sürümde ikili harfler bulunmamaktadır" + +msgid "E608: Cannot :throw exceptions with 'Vim' prefix" +msgstr "E608: 'Vim' öneki ile kural dışı durumlar :throw edilemez" + +#, c-format +msgid "Exception thrown: %s" +msgstr "Kural dışı durum verdi: %s" + +#, c-format +msgid "Exception finished: %s" +msgstr "Kural dışı durum bitti: %s" + +#, c-format +msgid "Exception discarded: %s" +msgstr "Kural dışı durum kenara atıldı: %s" + +#, c-format +msgid "%s, line %ld" +msgstr "%s, %ld. satır" + +#, c-format +msgid "Exception caught: %s" +msgstr "Kural dışı durum yakalandı: %s" + +#, c-format +msgid "%s made pending" +msgstr "%s askıya alındı" + +#, c-format +msgid "%s resumed" +msgstr "%s sürdürüldü" + +#, c-format +msgid "%s discarded" +msgstr "%s kenara atıldı" + +msgid "Exception" +msgstr "Kural dışı durum" + +msgid "Error and interrupt" +msgstr "Hata ve yarıda kesilme" + +msgid "Error" +msgstr "Hata" + +msgid "Interrupt" +msgstr "Yarıda Kesilme" + +msgid "E579: :if nesting too deep" +msgstr "E579: :if'ler çok iç içe geçmiş" + +msgid "E583: multiple :else" +msgstr "E583: Birden fazla :else" + +msgid "E584: :elseif after :else" +msgstr "E584: :else sonrası :elseif" + +msgid "E585: :while/:for nesting too deep" +msgstr "E585: :while/:for çok iç içe geçmiş" + +msgid "E732: Using :endfor with :while" +msgstr "E732: :endfor, :while ile kullanılıyor" + +msgid "E733: Using :endwhile with :for" +msgstr "E733: :endwhile, :for ile kullanılıyor" + +msgid "E579: block nesting too deep" +msgstr "E579: İç içe geçmeler çok derin" + +msgid "E601: :try nesting too deep" +msgstr "E601: :try çok iç içe geçmiş" + +msgid "E604: :catch after :finally" +msgstr "E604: :finally sonrası :catch" + +msgid "E193: :enddef not inside a function" +msgstr "E193: :enddef bir işlev içinde değil" + +msgid "E193: :endfunction not inside a function" +msgstr "E193: :endfunction bir işlev içinde değil" + +msgid "E788: Not allowed to edit another buffer now" +msgstr "E788: Şu anda başka bir arabellek düzenlenemez" + +msgid "E811: Not allowed to change buffer information now" +msgstr "E811: Şu anda arabellek bilgisi değiştirilemez" + +msgid "E199: Active window or buffer deleted" +msgstr "E199: Etkin pencere veya arabellek silinmiş" + +msgid "E812: Autocommands changed buffer or buffer name" +msgstr "E812: Otokomutlar arabelleği veya arabellek adını değiştirdi" + +msgid "Illegal file name" +msgstr "İzin verilmeyen dosya adı" + +msgid "is not a file" +msgstr "bir dosya değil" + +msgid "is a device (disabled with 'opendevice' option)" +msgstr "bir aygıt ('opendevice' seçeneği ile kapatılır)" + +msgid "[New DIRECTORY]" +msgstr "[Yeni DİZİN]" + +msgid "[File too big]" +msgstr "[Dosya çok büyük]" + +msgid "[Permission Denied]" +msgstr "[İzin verilmedi]" + +msgid "E200: *ReadPre autocommands made the file unreadable" +msgstr "E200: *ReadPre otokomutları dosyayı okunamaz hale getirdi" + +msgid "E201: *ReadPre autocommands must not change current buffer" +msgstr "E201: *ReadPre otokomutları şu anki arabelleği değiştirmemeli" + +msgid "Vim: Reading from stdin...\n" +msgstr "Vim: stdin'den okunuyor...\n" + +msgid "Reading from stdin..." +msgstr "stdin'den okunuyor..." + +msgid "E202: Conversion made file unreadable!" +msgstr "E202: Dönüştürme dosyayı okunamaz hale getirdi!" + +msgid "[fifo]" +msgstr "[fifo]" + +msgid "[socket]" +msgstr "[uç nokta]" + +msgid "[character special]" +msgstr "[özel karakterli]" + +msgid "[CR missing]" +msgstr "[Eksik CR]" + +msgid "[long lines split]" +msgstr "[uzun satırlar bölünmüş]" + +#, c-format +msgid "[CONVERSION ERROR in line %ld]" +msgstr "[%ld. satırda DÖNÜŞTÜRME HATASI]" + +#, c-format +msgid "[ILLEGAL BYTE in line %ld]" +msgstr "[%ld. satırda GEÇERSİZ BAYT]" + +msgid "[READ ERRORS]" +msgstr "[OKUMA HATALARI]" + +msgid "Can't find temp file for conversion" +msgstr "Dönüştürme için geçici dosya bulunamadı" + +msgid "Conversion with 'charconvert' failed" +msgstr "'charconvert' ile dönüştürme başarısız" + +msgid "can't read output of 'charconvert'" +msgstr "'charconvert' çıktısı okunamıyor" + +msgid "[dos]" +msgstr "[dos]" + +msgid "[dos format]" +msgstr "[dos biçimi]" + +msgid "[mac]" +msgstr "[mac]" + +msgid "[mac format]" +msgstr "[mac biçimi]" + +msgid "[unix]" +msgstr "[unix]" + +msgid "[unix format]" +msgstr "[unix biçimi]" + +#, c-format +msgid "%ld line, " +msgid_plural "%ld lines, " +msgstr[0] "%ld satır, " +msgstr[1] "%ld satır, " + +#, c-format +msgid "%lld byte" +msgid_plural "%lld bytes" +msgstr[0] "%lld bayt" +msgstr[1] "%lld bayt" + +msgid "[noeol]" +msgstr "[noeol]" + +msgid "[Incomplete last line]" +msgstr "[Tamamlanmamış son satır]" + +#, c-format +msgid "E208: Error writing to \"%s\"" +msgstr "E208: Şuraya yazılamadı: \"%s\"" + +#, c-format +msgid "E209: Error closing \"%s\"" +msgstr "E209: \"%s\" kapatılırken hata" + +#, c-format +msgid "E210: Error reading \"%s\"" +msgstr "E210: \"%s\" okunurken hata" + +msgid "E246: FileChangedShell autocommand deleted buffer" +msgstr "E246: FileChangedShell otokomutu arabelleği sildi" + +#, c-format +msgid "E211: File \"%s\" no longer available" +msgstr "E211: \"%s\" dosyası artık mevcut değil" + +#, c-format +msgid "" +"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as " +"well" +msgstr "" +"W12: Uyarı: \"%s\" dosyası Vim'deki arabellek de dahil olmak üzere " +"değiştirildi" + +msgid "See \":help W12\" for more info." +msgstr "Ek bilgi için \":help W12\" yazın." + +#, c-format +msgid "W11: Warning: File \"%s\" has changed since editing started" +msgstr "W11: Uyarı: \"%s\" dosyası düzenleme başladığından beri değişti" + +msgid "See \":help W11\" for more info." +msgstr "Ek bilgi için \":help W11\" yazın." + +#, c-format +msgid "W16: Warning: Mode of file \"%s\" has changed since editing started" +msgstr "" +"W16: Uyarı: \"%s\" dosyasının kipi düzenleme başladığından beri değişti" + +msgid "See \":help W16\" for more info." +msgstr "Ek bilgi için \":help W16\" yazın." + +#, c-format +msgid "W13: Warning: File \"%s\" has been created after editing started" +msgstr "W13: Uyarı: \"%s\" dosyası düzenleme başladıktan sonra oluşturuldu" + +msgid "Warning" +msgstr "Uyarı" + +msgid "" +"&OK\n" +"&Load File" +msgstr "" +"&Tamam\n" +"&Dosya Yükle" + +#, c-format +msgid "E462: Could not prepare for reloading \"%s\"" +msgstr "E462: \"%s\" yeniden yükleme için hazırlanamadı" + +#, c-format +msgid "E321: Could not reload \"%s\"" +msgstr "E321: \"%s\" yeniden yüklenemedi" + +msgid "E219: Missing {." +msgstr "E219: { eksik." + +msgid "E220: Missing }." +msgstr "E220: } eksik." + +msgid "<empty>" +msgstr "<boş>" + +msgid "E655: Too many symbolic links (cycle?)" +msgstr "E655: Çok fazla sembolik bağlantı (çevrim?)" + +msgid "writefile() first argument must be a List or a Blob" +msgstr "writefile() ilk değişkeni bir liste veya ikili geniş nesne olmalıdır" + +msgid "Select Directory dialog" +msgstr "Dizin Seç iletişim kutusu" + +msgid "Save File dialog" +msgstr "Dosya Kaydet iletişim kutusu" + +msgid "Open File dialog" +msgstr "Dosya Aç iletişim kutusu" + +msgid "E338: Sorry, no file browser in console mode" +msgstr "E338: Üzgünüm, konsol kipinde dosya tarayıcı yoktur" + +msgid "no matches" +msgstr "eşleşme yok" + +msgid "E854: path too long for completion" +msgstr "E854: Yol tamamlama için çok uzun" + +#, c-format +msgid "" +"E343: Invalid path: '**[number]' must be at the end of the path or be " +"followed by '%s'." +msgstr "" +"E343: Geçersiz yol: '**[sayı]' yolun sonunda olmalı veya sonrasında '%s' " +"gelmelidir" + +#, c-format +msgid "E344: Can't find directory \"%s\" in cdpath" +msgstr "E344: \"%s\" dizini cdpath içinde bulunamadı" + +#, c-format +msgid "E345: Can't find file \"%s\" in path" +msgstr "E345: \"%s\" dosyası yol içinde bulunamadı" + +#, c-format +msgid "E346: No more directory \"%s\" found in cdpath" +msgstr "E346: Başka bir \"%s\" dizini cdpath içinde bulunamadı" + +#, c-format +msgid "E347: No more file \"%s\" found in path" +msgstr "E347: Başka bir \"%s\" dosyası yol içinde bulunamadı" + +msgid "E446: No file name under cursor" +msgstr "E446: İmleç altında bir dosya adı yok" + +#, c-format +msgid "E447: Can't find file \"%s\" in path" +msgstr "E447: \"%s\" dosyası yol içinde bulunamadı" + +msgid "E490: No fold found" +msgstr "E490: Kıvırma bulunamadı" + +msgid "E350: Cannot create fold with current 'foldmethod'" +msgstr "E350: Şu anki 'foldmethod' ile kıvırma oluşturulamıyor" + +msgid "E351: Cannot delete fold with current 'foldmethod'" +msgstr "E351: Şu anki 'foldmethod' ile kıvırma silinemiyor" + +#, c-format +msgid "+--%3ld line folded " +msgid_plural "+--%3ld lines folded " +msgstr[0] "+--%3ld satır kıvrıldı " +msgstr[1] "+--%3ld satır kıvrıldı " + +#, c-format +msgid "+-%s%3ld line: " +msgid_plural "+-%s%3ld lines: " +msgstr[0] "+-%s%3ld satır: " +msgstr[1] "+-%s%3ld satır: " + +msgid "E222: Add to read buffer" +msgstr "E222: Okuma arabelleğine ekle" + +msgid "E223: recursive mapping" +msgstr "E223: Özyineli eşlemleme" + +msgid "E851: Failed to create a new process for the GUI" +msgstr "E851: Grafik arabirim için yeni bir işlem yaratılamadı" + +msgid "E852: The child process failed to start the GUI" +msgstr "E852: Alt işlem grafik arabirimini başlatamadı" + +msgid "E229: Cannot start the GUI" +msgstr "E229: Grafik arabirimi başlatılamıyor" + +#, c-format +msgid "E230: Cannot read from \"%s\"" +msgstr "E230: \"%s\" okunamıyor" + +msgid "E665: Cannot start GUI, no valid font found" +msgstr "E665: Grafik arabirim başlatılamıyor, geçerli bir font bulunamadı" + +msgid "E231: 'guifontwide' invalid" +msgstr "E231: 'guifontwide' geçersiz" + +msgid "E599: Value of 'imactivatekey' is invalid" +msgstr "E599: 'imactivatekey' değeri geçersiz" + +msgid "No match at cursor, finding next" +msgstr "İmleç konumunda eşleşme bulunamadı, sonraki bulunuyor" + +msgid "<cannot open> " +msgstr "<açılamıyor> " + +#, c-format +msgid "E616: vim_SelFile: can't get font %s" +msgstr "E616: vim_SelFile: %s fontu bulunamıyor" + +msgid "E614: vim_SelFile: can't return to current directory" +msgstr "E614: vim_SelFile: Şu anki dizine dönülemiyor" + +msgid "Pathname:" +msgstr "Yol adı:" + +msgid "E615: vim_SelFile: can't get current directory" +msgstr "E615: vim_SelFile: Şu anki dizin bulunamıyor" + +msgid "OK" +msgstr "Tamam" + +msgid "Cancel" +msgstr "İptal" + +msgid "Scrollbar Widget: Could not get geometry of thumb pixmap." +msgstr "Kaydırma Parçacığı: Kenar piksel haritası geometrisi bulunamadı" + +msgid "Vim dialog" +msgstr "Vim" + +msgid "E232: Cannot create BalloonEval with both message and callback" +msgstr "E232: Hem ileti hem de geri çağırma ile BallonEval oluşturulamıyor" + +msgid "_Save" +msgstr "_Kaydet" + +msgid "_Open" +msgstr "_Aç" + +msgid "_Cancel" +msgstr "İ_ptal" + +msgid "_OK" +msgstr "_Tamam" + +msgid "" +"&Yes\n" +"&No\n" +"&Cancel" +msgstr "" +"&Evet\n" +"&Hayır\n" +"İ&ptal" + +msgid "Yes" +msgstr "Evet" + +msgid "No" +msgstr "Hayır" + +msgid "Input _Methods" +msgstr "Giriş _Yöntemleri" + +msgid "VIM - Search and Replace..." +msgstr "VİM - Ara ve Değiştir..." + +msgid "VIM - Search..." +msgstr "VİM - Ara..." + +msgid "Find what:" +msgstr "Bulunacak nesne:" + +msgid "Replace with:" +msgstr "Şununla değiştir:" + +msgid "Match whole word only" +msgstr "Tam sözcükleri ara" + +msgid "Match case" +msgstr "BÜYÜK/küçük harf duyarlı" + +msgid "Direction" +msgstr "Yön" + +msgid "Up" +msgstr "Yukarı" + +msgid "Down" +msgstr "Aşağı" + +msgid "Find Next" +msgstr "Sonrakini Bul" + +msgid "Replace" +msgstr "Değiştir" + +msgid "Replace All" +msgstr "Tümünü Değiştir" + +msgid "_Close" +msgstr "K_apat" + +msgid "Vim: Received \"die\" request from session manager\n" +msgstr "Vim: Oturum yöneticisinden işi sonlandırma isteği geldi\n" + +msgid "Close tab" +msgstr "Sekmeyi kapat" + +msgid "New tab" +msgstr "Yeni sekme" + +msgid "Open Tab..." +msgstr "Sekme Aç..." + +msgid "Vim: Main window unexpectedly destroyed\n" +msgstr "Vim: Ana pencere beklenmedik bir biçimde gitti\n" + +msgid "&Filter" +msgstr "&Süz" + +msgid "&Cancel" +msgstr "İ&ptal" + +msgid "Directories" +msgstr "Dizinler" + +msgid "Filter" +msgstr "Süzgeç" + +msgid "&Help" +msgstr "&Yardım" + +msgid "Files" +msgstr "Dosyalar" + +msgid "&OK" +msgstr "&Tamam" + +msgid "Selection" +msgstr "Seçim" + +msgid "Find &Next" +msgstr "Sonrakini &Bul" + +msgid "&Replace" +msgstr "&Değiştir" + +msgid "Replace &All" +msgstr "Tümünü D&eğiştir" + +msgid "&Undo" +msgstr "&Geri al" + +msgid "Open tab..." +msgstr "Sekme aç..." + +msgid "Find string" +msgstr "Dizi bul" + +msgid "Find & Replace" +msgstr "Bul ve Değiştir" + +msgid "Not Used" +msgstr "Kullanılmıyor" + +msgid "Directory\t*.nothing\n" +msgstr "Directory\t*.hiçbir şey\n" + +#, c-format +msgid "E671: Cannot find window title \"%s\"" +msgstr "E671: Pencere başlığı \"%s\" bulunamıyor" + +#, c-format +msgid "E243: Argument not supported: \"-%s\"; Use the OLE version." +msgstr "E243: \"-%s\" değişkeni desteklenmiyor; OLE sürümünü kullanın." + +msgid "E988: GUI cannot be used. Cannot execute gvim.exe." +msgstr "E988: Grafik arabirim kullanılamaz. gvim.exe çalıştırılamadı." + +msgid "E672: Unable to open window inside MDI application" +msgstr "E672: MDI uygulaması içinde pencere açılamıyor" + +msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect" +msgstr "" +"Vim E458: Renk eşlemi girdisi ayrılamadı, bazı renkler hatalı görünebilir" + +#, c-format +msgid "E250: Fonts for the following charsets are missing in fontset %s:" +msgstr "E250: %s yazıtipi seti içinde şu karakter setleri için fontlar eksik:" + +#, c-format +msgid "E252: Fontset name: %s" +msgstr "E252: Yazıtipi seti adı: %s" + +#, c-format +msgid "Font '%s' is not fixed-width" +msgstr "'%s' yazıtipi sabit aralıklı değil" + +#, c-format +msgid "E253: Fontset name: %s" +msgstr "E253: Yazıtipi seti adı: %s" + +#, c-format +msgid "Font0: %s" +msgstr "Yazıtipi0: %s" + +#, c-format +msgid "Font%d: %s" +msgstr "Yazıtipi%d: %s" + +#, c-format +msgid "Font%d width is not twice that of font0" +msgstr "Yazıtipi%d genişliği yazıtipi0 genişliğinin iki katı olmalıdır" + +#, c-format +msgid "Font0 width: %d" +msgstr "Yazıtipi0 genişliği: %d" + +#, c-format +msgid "Font%d width: %d" +msgstr "Yazıtipi%d genişliği: %d" + +msgid "E284: Cannot set IC values" +msgstr "E284: Girdi bağlamı değerleri ayarlanamıyor" + +msgid "E285: Failed to create input context" +msgstr "E285: Girdi bağlamı oluşturulamadı" + +msgid "E286: Failed to open input method" +msgstr "E286: Giriş yöntemi açılamadı" + +msgid "E287: Warning: Could not set destroy callback to IM" +msgstr "E287: Uyarı: Giriş yöntemine yok etme geri çağırması ayarlanamadı" + +msgid "E288: input method doesn't support any style" +msgstr "E288: Giriş yöntemi herhangi bir biçemi desteklemiyor" + +msgid "E289: input method doesn't support my preedit type" +msgstr "E289: Giriş yöntemi benim ön düzenleme türümü desteklemiyor" + +msgid "Invalid font specification" +msgstr "Geçersiz yazıtipi belirtimi" + +msgid "&Dismiss" +msgstr "So&nlandır" + +msgid "no specific match" +msgstr "belirli bir eşleşme yok" + +msgid "Vim - Font Selector" +msgstr "Vim - Yazıtipi Seçicisi" + +msgid "Name:" +msgstr "Ad:" + +msgid "Show size in Points" +msgstr "Büyüklüğü puntolarla göster" + +msgid "Encoding:" +msgstr "Kodlama:" + +msgid "Font:" +msgstr "Yazıtipi:" + +msgid "Style:" +msgstr "Biçem:" + +msgid "Size:" +msgstr "Büyüklük:" + +msgid "E550: Missing colon" +msgstr "E550: İki nokta eksik" + +msgid "E551: Illegal component" +msgstr "E551: Geçersiz bileşen" + +msgid "E552: digit expected" +msgstr "E552: Basamak bekleniyordu" + +#, c-format +msgid "Page %d" +msgstr "Sayfa %d" + +msgid "No text to be printed" +msgstr "Yazdırılacak metin yok" + +#, c-format +msgid "Printing page %d (%d%%)" +msgstr "Sayfa yazdırılıyor: %d (%d%%)" + +#, c-format +msgid " Copy %d of %d" +msgstr " Kopya %d/%d" + +#, c-format +msgid "Printed: %s" +msgstr "Yazdırıldı: %s" + +msgid "Printing aborted" +msgstr "Yazdırma durduruldu" + +msgid "E455: Error writing to PostScript output file" +msgstr "E455: PostScript çıktı dosyasına yazarken hata" + +#, c-format +msgid "E624: Can't open file \"%s\"" +msgstr "E624: \"%s\" dosyası açılamıyor" + +#, c-format +msgid "E457: Can't read PostScript resource file \"%s\"" +msgstr "E457: PostScript kaynak dosyası \"%s\" okunamıyor" + +#, c-format +msgid "E618: file \"%s\" is not a PostScript resource file" +msgstr "E618: \"%s\" dosyası bir PostScript kaynak dosyası değil" + +#, c-format +msgid "E619: file \"%s\" is not a supported PostScript resource file" +msgstr "E619: \"%s\" dosyası desteklenen bir PostScript kaynak dosyası değil" + +#, c-format +msgid "E621: \"%s\" resource file has wrong version" +msgstr "E621: \"%s\" kaynak dosyası sürümü hatalı" + +msgid "E673: Incompatible multi-byte encoding and character set." +msgstr "E673: Uyumsuz çoklu bit kodlaması ve karakter seti." + +msgid "E674: printmbcharset cannot be empty with multi-byte encoding." +msgstr "E674: printmbcharset çoklu bit kodlamada boş olamaz" + +msgid "E675: No default font specified for multi-byte printing." +msgstr "E675: Çoklu bit yazdırma için öntanımlı yazıtipi ayarlanmamış." + +msgid "E324: Can't open PostScript output file" +msgstr "E324: PostScript çıktı dosyası açılamıyor" + +#, c-format +msgid "E456: Can't open file \"%s\"" +msgstr "E456: \"%s\" dosyası açılamıyor" + +msgid "E456: Can't find PostScript resource file \"prolog.ps\"" +msgstr "E456: PostScript kaynak dosyası \"prolog.ps\" bulunamıyor" + +msgid "E456: Can't find PostScript resource file \"cidfont.ps\"" +msgstr "E456: PostScript kaynak dosyası \"cidfont.ps\" bulunamıyor" + +#, c-format +msgid "E456: Can't find PostScript resource file \"%s.ps\"" +msgstr "E456: PostScript kaynak dosyası \"%s.ps\" bulunamıyor" + +#, c-format +msgid "E620: Unable to convert to print encoding \"%s\"" +msgstr "E620: \"%s\" yazdırma kodlamasına dönüştürülemiyor" + +msgid "Sending to printer..." +msgstr "Yazıcıya gönderiliyor..." + +msgid "E365: Failed to print PostScript file" +msgstr "E365: PostScript dosyası yazdırılamadı" + +msgid "Print job sent." +msgstr "Yazdırma işi gönderildi" + +msgid "E478: Don't panic!" +msgstr "E478: Panik yok!" + +#, c-format +msgid "E661: Sorry, no '%s' help for %s" +msgstr "E661: Üzgünüm, '%s' yardımı %s için mevcut değil" + +#, c-format +msgid "E149: Sorry, no help for %s" +msgstr "E149: Üzgünüm, %s için yardım mevcut değil" + +#, c-format +msgid "Sorry, help file \"%s\" not found" +msgstr "Üzgünüm, \"%s\" yardım dosyası bulunamadı" + +#, c-format +msgid "E151: No match: %s" +msgstr "E151: Eşleşme bulunamadı: %s" + +#, c-format +msgid "E152: Cannot open %s for writing" +msgstr "E152: %s yazma için açılamıyor" + +#, c-format +msgid "E153: Unable to open %s for reading" +msgstr "E153: %s okuma için açılamıyor" + +#, c-format +msgid "E670: Mix of help file encodings within a language: %s" +msgstr "E670: Bir dilde yardım dosyası kodlamaları karıştı: %s" + +#, c-format +msgid "E154: Duplicate tag \"%s\" in file %s/%s" +msgstr "E154: Şu dosyada yinelenen \"%s\" etiketi: %s/%s" + +#, c-format +msgid "E150: Not a directory: %s" +msgstr "E150: %s bir dizin değil" + +msgid "E679: recursive loop loading syncolor.vim" +msgstr "E679: syncolor.vim yüklenirken özyineli döngü" + +#, c-format +msgid "E411: highlight group not found: %s" +msgstr "E411: Vurgulama grubu bulunamadı: %s" + +#, c-format +msgid "E412: Not enough arguments: \":highlight link %s\"" +msgstr "E412: Yetersiz sayıda değişken: \":highlight link %s\"" + +#, c-format +msgid "E413: Too many arguments: \":highlight link %s\"" +msgstr "E413: Çok fazla değişken: \":highlight link %s\"" + +msgid "E414: group has settings, highlight link ignored" +msgstr "E414: Grup ayarları mevcut, vurgulama bağlantısı yok sayıldı" + +#, c-format +msgid "E415: unexpected equal sign: %s" +msgstr "E415: Beklenmedik eşittir imi: %s" + +#, c-format +msgid "E416: missing equal sign: %s" +msgstr "E416: Eksik eşittir imi: %s" + +#, c-format +msgid "E417: missing argument: %s" +msgstr "E417: Eksik değişkenler: %s" + +#, c-format +msgid "E418: Illegal value: %s" +msgstr "E418: İzin verilmeyen değer: %s" + +msgid "E419: FG color unknown" +msgstr "E419: Bilinmeyen metin rengi" + +msgid "E420: BG color unknown" +msgstr "E420: Bilinmeyen ardalan rengi" + +msgid "E453: UL color unknown" +msgstr "E453: Bilinmeyen alt çizme rengi" + +#, c-format +msgid "E421: Color name or number not recognized: %s" +msgstr "E421: Renk adı veya numarası tanımlanamadı: %s" + +#, c-format +msgid "E422: terminal code too long: %s" +msgstr "E422: Uçbirim kodu çok uzun: %s" + +#, c-format +msgid "E423: Illegal argument: %s" +msgstr "E423: İzin verilmeyen değişken: %s" + +msgid "E424: Too many different highlighting attributes in use" +msgstr "E424: Çok fazla değişik vurgulama kuralları kullanılıyor" + +msgid "E669: Unprintable character in group name" +msgstr "E669: Grup adında yazdırılamayan karakter" + +msgid "W18: Invalid character in group name" +msgstr "W18: Grup adında geçersiz karakter" + +msgid "E849: Too many highlight and syntax groups" +msgstr "E849: Çok fazla vurgulama ve sözdizim grupları" + +msgid "Add a new database" +msgstr "Yeni bir veritabanı ekle" + +msgid "Query for a pattern" +msgstr "Bir dizgiyi sorgula" + +msgid "Show this message" +msgstr "Bu iletiyi göster" + +msgid "Kill a connection" +msgstr "Bir bağlantıyı kes" + +msgid "Reinit all connections" +msgstr "Tüm bağlantıları yeniden kur" + +msgid "Show connections" +msgstr "Bağlantıları göster" + +#, c-format +msgid "E560: Usage: cs[cope] %s" +msgstr "E560: Kullanım: cs[cope] %s" + +msgid "This cscope command does not support splitting the window.\n" +msgstr "Bu cscope komutu pencereyi bölmeyi desteklemiyor.\n" + +msgid "E562: Usage: cstag <ident>" +msgstr "E562: Kullanım: cstag <ad>" + +msgid "E257: cstag: tag not found" +msgstr "E257: cstag: Etiket bulunamadı" + +#, c-format +msgid "E563: stat(%s) error: %d" +msgstr "E563: stat(%s) hatası: %d" + +msgid "E563: stat error" +msgstr "E563: stat hatası" + +#, c-format +msgid "E564: %s is not a directory or a valid cscope database" +msgstr "E564: %s bir dizin veya geçerli bir cscope veritabanı değil" + +#, c-format +msgid "Added cscope database %s" +msgstr "cscope veritabanı %s eklendi" + +#, c-format +msgid "E262: error reading cscope connection %d" +msgstr "E262: cscope bağlantısı %d okunurken hata" + +msgid "E561: unknown cscope search type" +msgstr "E561: Bilinmeyen cscope arama türü" + +msgid "E566: Could not create cscope pipes" +msgstr "E566: cscope veri yolları oluşturulamadı" + +msgid "E622: Could not fork for cscope" +msgstr "E622: cscope için çatal oluşturulamadı" + +msgid "cs_create_connection setpgid failed" +msgstr "cs_create_connection: setpgid başarısız oldu" + +msgid "cs_create_connection exec failed" +msgstr "cs_create_connection: exec başarısız oldu" + +msgid "cs_create_connection: fdopen for to_fp failed" +msgstr "cs_create_connection: to_fp için fdopen başarısız oldu" + +msgid "cs_create_connection: fdopen for fr_fp failed" +msgstr "cs_create_connection: fr_fp için fdopen başarısız oldu" + +msgid "E623: Could not spawn cscope process" +msgstr "E623: cscope işlemi ortaya çıkarılamadı" + +msgid "E567: no cscope connections" +msgstr "E567: cscope bağlantıları yok" + +#, c-format +msgid "E469: invalid cscopequickfix flag %c for %c" +msgstr "E469: Geçersiz cscopequickfix bayrağı %c, %c için" + +#, c-format +msgid "E259: no matches found for cscope query %s of %s" +msgstr "E259: cscope sorgusu %s/%s için eşleşme bulunamadı" + +msgid "cscope commands:\n" +msgstr "cscope komutları:\n" + +#, c-format +msgid "%-5s: %s%*s (Usage: %s)" +msgstr "%-5s: %s%*s (Kullanım: %s)" + +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" +" 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" +" a: Bu sembole yapılan atamaları bul\n" +" c: Bu işlevi çağıran işlevleri bul\n" +" d: bu işlev tarafından çağrılan işlevleri bul\n" +" e: Bu egrep dizgisini bul\n" +" f: Bu dosyayı bul\n" +" g: Bu tanımı bul\n" +" i: Bu dosyayı içeren (#including) dosyaları bul\n" +" s: Bu \"C\" sembolünü bul\n" +" t: Bu metin dizisini bul\n" + +#, c-format +msgid "E625: cannot open cscope database: %s" +msgstr "E625: cscope veritabanı açılamıyor: %s" + +msgid "E626: cannot get cscope database information" +msgstr "E626: cscope veritabanı bilgisi alınamıyor" + +msgid "E568: duplicate cscope database not added" +msgstr "E568: Yinelenen cscope veritabanı eklenmemiş" + +#, c-format +msgid "E261: cscope connection %s not found" +msgstr "E261: %s cscope bağlantısı bulunamadı" + +#, c-format +msgid "cscope connection %s closed" +msgstr "%s cscope bağlantısı bitirildi" + +msgid "E570: fatal error in cs_manage_matches" +msgstr "E570: cs_manage_matches içinde onulmaz hata" + +#, c-format +msgid "Cscope tag: %s" +msgstr "cscope etiketi: %s" + +msgid "" +"\n" +" # line" +msgstr "" +"\n" +" # satır" + +msgid "filename / context / line\n" +msgstr "dosya adı / bağlam / satır\n" + +#, c-format +msgid "E609: Cscope error: %s" +msgstr "E609: cscope hatası: %s" + +msgid "All cscope databases reset" +msgstr "Tüm cscope veritabanları sıfırlandı" + +msgid "no cscope connections\n" +msgstr "cscope bağlantısı yok\n" + +msgid " # pid database name prepend path\n" +msgstr " # pid veritabanı adı başlangıç yolu\n" + +msgid "Lua library cannot be loaded." +msgstr "Lua kitaplığı yüklenemedi." + +msgid "cannot save undo information" +msgstr "Geri al bilgisi kaydedilemiyor" + +msgid "" +"E815: Sorry, this command is disabled, the MzScheme libraries could not be " +"loaded." +msgstr "" +"E815: Üzgünüm, bu komut etkin değil, MzScheme kitaplıkları yüklenemedi." + +msgid "" +"E895: Sorry, this command is disabled, the MzScheme's racket/base module " +"could not be loaded." +msgstr "" +"E895: Üzgünüm, bu komut etkin değil, MzScheme'in racket/base birimi " +"yüklenemedi." + +msgid "invalid expression" +msgstr "geçersiz ifade" + +msgid "expressions disabled at compile time" +msgstr "ifadeler derleme aşamasında kapatılmış" + +msgid "hidden option" +msgstr "gizli seçenek" + +msgid "unknown option" +msgstr "bilinmeyen seçenek" + +msgid "window index is out of range" +msgstr "pencere dizini erimin dışında" + +msgid "couldn't open buffer" +msgstr "arabellek açılamadı" + +msgid "cannot delete line" +msgstr "satır silinemiyor" + +msgid "cannot replace line" +msgstr "satır değiştirilemiyor" + +msgid "cannot insert line" +msgstr "satır eklenemiyor" + +msgid "string cannot contain newlines" +msgstr "dizi \"yeni satır\" imi içeremez" + +msgid "error converting Scheme values to Vim" +msgstr "Scheme değerlerini Vim değerlerine dönüştürürken hata" + +msgid "Vim error: ~a" +msgstr "Vim hatası: ~a" + +msgid "Vim error" +msgstr "Vim hatası" + +msgid "buffer is invalid" +msgstr "arabellek geçersiz" + +msgid "window is invalid" +msgstr "pencere geçersiz" + +msgid "linenr out of range" +msgstr "linenr erimin dışında" + +msgid "not allowed in the Vim sandbox" +msgstr "Vim kum havuzunda izin verilmiyor" + +msgid "E836: This Vim cannot execute :python after using :py3" +msgstr "E836: Bu Vim :py3 komutundan sonra :python komutunu çalıştıramaz" + +msgid "" +"E263: Sorry, this command is disabled, the Python library could not be " +"loaded." +msgstr "E263: Üzgünüm, bu komut etkin değil, Python kitaplığı yüklenemedi" + +msgid "" +"E887: Sorry, this command is disabled, the Python's site module could not be " +"loaded." +msgstr "" +"E887: Üzgünüm, bu komut etkin değil, Python'un site birimi yüklenemedi." + +msgid "E659: Cannot invoke Python recursively" +msgstr "E659: Python özyineli olarak çalıştırılamıyor" + +msgid "E837: This Vim cannot execute :py3 after using :python" +msgstr "E837: Bu Vim :python komutundan sonra :py3 komutunu çalıştıramaz" + +msgid "E265: $_ must be an instance of String" +msgstr "E265: $_ bir dizi örneği olmalıdır" + +msgid "" +"E266: Sorry, this command is disabled, the Ruby library could not be loaded." +msgstr "E266: Üzgünüm, bu komut etkin değil, Ruby kitaplığı yüklenemedi." + +msgid "E267: unexpected return" +msgstr "E267: Beklenmeyen dönüş" + +msgid "E268: unexpected next" +msgstr "E268: Beklenmeyen sonraki" + +msgid "E269: unexpected break" +msgstr "E269: Beklenmeyen kesme" + +msgid "E270: unexpected redo" +msgstr "E270: Beklenmeyen yinele komutu" + +msgid "E271: retry outside of rescue clause" +msgstr "E271: retry, rescue işlecinin dışında" + +msgid "E272: unhandled exception" +msgstr "E272: İşletilemeyen kural dışı durum" + +#, c-format +msgid "E273: unknown longjmp status %d" +msgstr "E273: Bilinmeyen longjmp durumu %d" + +msgid "invalid buffer number" +msgstr "Geçersiz arabellek numarası" + +msgid "not implemented yet" +msgstr "henüz uygulanmadı" + +msgid "cannot set line(s)" +msgstr "satır(lar) ayarlanamıyor" + +msgid "invalid mark name" +msgstr "geçersiz im adı" + +msgid "mark not set" +msgstr "im ayarlanmamış" + +#, c-format +msgid "row %d column %d" +msgstr "satır %d sütun %d" + +msgid "cannot insert/append line" +msgstr "satır eklenemiyor/iliştirilemiyor" + +msgid "line number out of range" +msgstr "satır numarası erimin dışında" + +msgid "unknown flag: " +msgstr "geçersiz bayrak: " + +msgid "unknown vimOption" +msgstr "geçersiz vimOption" + +msgid "keyboard interrupt" +msgstr "klavye araya girdi" + +msgid "cannot create buffer/window command: object is being deleted" +msgstr "arabellek/pencere komutu oluşturulamadı: öge şu anda siliniyor" + +msgid "" +"cannot register callback command: buffer/window is already being deleted" +msgstr "geri çağırma komutu kaydedilemiyor: arabellek/pencere zaten siliniyor" + +msgid "" +"E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim." +"org" +msgstr "" +"E280: ONULMAZ TCL HATASI: Başvuru listesi hasar görmüş! Lütfen bunu vim-" +"dev@vim.org adresine bildirin" + +msgid "cannot register callback command: buffer/window reference not found" +msgstr "" +"geri çağırma komutu kaydedilemiyor: arabellek/pencere başvurusu bulunamadı" + +msgid "" +"E571: Sorry, this command is disabled: the Tcl library could not be loaded." +msgstr "E571: Üzgünüm, bu komut etkin değil: Tcl kitaplığı yüklenemedi." + +#, c-format +msgid "E572: exit code %d" +msgstr "E572: %d çıkış kodu" + +msgid "cannot get line" +msgstr "satır alınamıyor" + +msgid "Unable to register a command server name" +msgstr "Bir komut sunucusu adı kaydedilemiyor" + +msgid "E248: Failed to send command to the destination program" +msgstr "E248: Hedef programa komut gönderimi başarısız oldu" + +#, c-format +msgid "E573: Invalid server id used: %s" +msgstr "E573: Geçersiz sunucu kimliği kullanıldı: %s" + +msgid "E251: VIM instance registry property is badly formed. Deleted!" +msgstr "E251: VİM oturumu kayıt değeri düzgün oluşturulmamış. Silindi!" + +#, c-format +msgid "%ld lines to indent... " +msgstr "girintilenecek %ld satır kaldı... " + +#, c-format +msgid "%ld line indented " +msgid_plural "%ld lines indented " +msgstr[0] "%ld satır girintilendi " +msgstr[1] "%ld satır girintilendi" + +msgid " Keyword completion (^N^P)" +msgstr " Anahtar sözcük tamamlaması (^N^P)" + +msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" +msgstr " ^X kipi (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)" + +msgid " Whole line completion (^L^N^P)" +msgstr " Tam satır tamamlaması (^L^N^P)" + +msgid " File name completion (^F^N^P)" +msgstr " Dosya adı tamamlaması (^F^N^P)" + +msgid " Tag completion (^]^N^P)" +msgstr " Etiket tamamlaması (^]^N^P)" + +msgid " Path pattern completion (^N^P)" +msgstr " Yol dizgisi tamamlaması (^N^P)" + +msgid " Definition completion (^D^N^P)" +msgstr " Tanım tamamlaması (^D^N^P)" + +msgid " Dictionary completion (^K^N^P)" +msgstr " Sözlük tamamlaması (^K^N^P)" + +msgid " Thesaurus completion (^T^N^P)" +msgstr " Eşanlamlılar sözlüğü tamamlaması (^T^N^P)" + +msgid " Command-line completion (^V^N^P)" +msgstr " Komut satırı tamamlaması (^V^N^P)" + +msgid " User defined completion (^U^N^P)" +msgstr " Kullanıcı tanımlı tamamlamalar (^U^N^P)" + +msgid " Omni completion (^O^N^P)" +msgstr " Omni tamamlaması (^O^N^P)" + +msgid " Spelling suggestion (s^N^P)" +msgstr " Yazım önerisi (s^N^P)" + +msgid " Keyword Local completion (^N^P)" +msgstr " Dahili anahtar sözcük tamamlaması (^N^P)" + +msgid "Hit end of paragraph" +msgstr "Paragrafın sonuna varıldı" + +msgid "E839: Completion function changed window" +msgstr "E839: Tamamlama işlevi pencereyi değiştirdi" + +msgid "E840: Completion function deleted text" +msgstr "E840: Tamamlama işlevi metni sildi" + +msgid "'dictionary' option is empty" +msgstr "'dictionary' seçeneği boş" + +msgid "'thesaurus' option is empty" +msgstr "'thesaurus' seçeneği boş" + +#, c-format +msgid "Scanning dictionary: %s" +msgstr "Sözlük taranıyor: %s" + +msgid " (insert) Scroll (^E/^Y)" +msgstr " (ekle) Kaydır (^E/^Y)" + +msgid " (replace) Scroll (^E/^Y)" +msgstr " (değiştir) Kaydır (^E/^Y)" + +msgid "E785: complete() can only be used in Insert mode" +msgstr "E785: complete() yalnızca Ekleme kipinde kullanılabilir" + +#, c-format +msgid "Scanning: %s" +msgstr "Taranıyor: %s" + +msgid "Scanning tags." +msgstr "Etiketler taranıyor..." + +msgid "match in file" +msgstr "dosya içinde eşleşme" + +msgid " Adding" +msgstr " Ekleniyor" + +msgid "-- Searching..." +msgstr "-- Aranıyor..." + +msgid "Back at original" +msgstr "Başlangıca geri dönüldü" + +msgid "Word from other line" +msgstr "Sözcük diğer satırdan" + +msgid "The only match" +msgstr "Tek eşleşen" + +#, c-format +msgid "match %d of %d" +msgstr "eşleşme %d/%d" + +#, c-format +msgid "match %d" +msgstr "eşleşme %d" + +msgid "E920: _io file requires _name to be set" +msgstr "E920: _io dosyası _name ayarlı olmasını gerektirir" + +msgid "E915: in_io buffer requires in_buf or in_name to be set" +msgstr "E915: in_io arabelleği in_buf veya in_name ayarlı olmasını gerektirir" + +#, c-format +msgid "E918: buffer must be loaded: %s" +msgstr "E918: Arabellek yüklenmiş olmalıdır: %s" + +msgid "E916: not a valid job" +msgstr "E916: Geçerli bir iş değil" + +#, c-format +msgid "E491: json decode error at '%s'" +msgstr "E491: '%s' konumunda json çözümü hatası" + +#, c-format +msgid "E938: Duplicate key in JSON: \"%s\"" +msgstr "E938: JSON'da yinelenmiş anahtar: \"%s\"" + +#, c-format +msgid "E899: Argument of %s must be a List or Blob" +msgstr "E899: %s değişkeni bir liste veya ikili geniş nesne olmalıdır" + +msgid "E900: maxdepth must be non-negative number" +msgstr "E900: maxdepth negatif olmayan bir sayı olmalı" + +msgid "flatten() argument" +msgstr "flatten() değişkeni" + +#, c-format +msgid "E696: Missing comma in List: %s" +msgstr "E696: Listede virgül eksik: %s" + +msgid "sort() argument" +msgstr "sort() değişkeni" + +msgid "uniq() argument" +msgstr "uniq() değişkeni" + +msgid "E702: Sort compare function failed" +msgstr "E702: Sıralayıp karşılaştırma işlevi başarısız oldu" + +msgid "E882: Uniq compare function failed" +msgstr "E882: Benzersizlik karşılaştırma işlevi başarısız oldu" + +msgid "map() argument" +msgstr "map() değişkeni" + +msgid "mapnew() argument" +msgstr "mapnew() değişkeni" + +msgid "filter() argument" +msgstr "filter() değişkeni" + +msgid "add() argument" +msgstr "add() değişkeni" + +msgid "insert() argument" +msgstr "insert() değişkeni" + +msgid "remove() argument" +msgstr "remove() değişkeni" + +msgid "reverse() argument" +msgstr "reverse() değişkeni" + +#, c-format +msgid "Current %slanguage: \"%s\"" +msgstr "Şu anki %sdil: \"%s\"" + +#, c-format +msgid "E197: Cannot set language to \"%s\"" +msgstr "E197: \"%s\" diline ayarlanamıyor" + +msgid "Unknown option argument" +msgstr "Bilinmeyen seçenek değişkeni" + +msgid "Too many edit arguments" +msgstr "Çok fazla düzenleme değişkeni" + +msgid "Argument missing after" +msgstr "Şundan sonra değişken eksik:" + +msgid "Garbage after option argument" +msgstr "Seçenek değişkeninden sonra anlamsız veri" + +msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments" +msgstr "Çok fazla \"+komut\", \"-c komut\" veya \"--cmd komut\" değişkeni" + +msgid "Invalid argument for" +msgstr "Şunun için geçersiz değişken:" + +#, c-format +msgid "%d files to edit\n" +msgstr "%d dosya düzenleniyor\n" + +msgid "netbeans is not supported with this GUI\n" +msgstr "NetBeans bu grafik arabirimde desteklenmiyor\n" + +msgid "'-nb' cannot be used: not enabled at compile time\n" +msgstr "'-nb' kullanılamaz: Derleme sırasında etkinleştirilmemiş\n" + +msgid "This Vim was not compiled with the diff feature." +msgstr "Bu Vim karşılaştırma özelliği ile derlenmemiş" + +msgid "Attempt to open script file again: \"" +msgstr "Betik dosyası yeniden açılmaya çalışılıyor: \"" + +msgid "Cannot open for reading: \"" +msgstr "Okuma için açılamıyor: \"" + +msgid "Cannot open for script output: \"" +msgstr "Betik çıktısı için açılamıyor: \"" + +msgid "Vim: Error: Failure to start gvim from NetBeans\n" +msgstr "Vim: Hata: gvim'i NetBeans içinden başlatma başarısız oldu\n" + +msgid "Vim: Error: This version of Vim does not run in a Cygwin terminal\n" +msgstr "Vim: Hata: Vim'in bu sürümü bir Cygwin uçbirimi içinde çalışmaz\n" + +msgid "Vim: Warning: Output is not to a terminal\n" +msgstr "Vim: Uyarı: Çıktı bir uçbirime değil\n" + +msgid "Vim: Warning: Input is not from a terminal\n" +msgstr "Vim: Uyarı: Girdi bir uçbirimden değil\n" + +msgid "pre-vimrc command line" +msgstr "vimrc uygulanma öncesi komut satırı" + +#, c-format +msgid "E282: Cannot read from \"%s\"" +msgstr "E282: Şuradan okunamıyor: \"%s\"" + +msgid "" +"\n" +"More info with: \"vim -h\"\n" +msgstr "" +"\n" +"Daha fazla bilgi için: \"vim -h\"\n" + +msgid "[file ..] edit specified file(s)" +msgstr "[dosya ..] belirlenen dosyaları düzenle" + +msgid "- read text from stdin" +msgstr "- stdin'den metni oku" + +msgid "-t tag edit file where tag is defined" +msgstr "-t etiket etiket tanımlanan dosyaları düzenle" + +msgid "-q [errorfile] edit file with first error" +msgstr "-q [hatalıd.] hata içeren ilk dosyayı düzenle" + +msgid "" +"\n" +"\n" +"Usage:" +msgstr "" +"\n" +"\n" +"Kullanım:" + +msgid " vim [arguments] " +msgstr " vim [değişkenler] " + +msgid "" +"\n" +" or:" +msgstr "" +"\n" +" veya:" + +msgid "" +"\n" +"Where case is ignored prepend / to make flag upper case" +msgstr "" +"\n" +"BÜYÜK/küçük harfin yok sayıldığı yerde bayrağı BÜYÜK harfli yapmak için " +"başına / koyun" + +msgid "" +"\n" +"\n" +"Arguments:\n" +msgstr "" +"\n" +"\n" +"Değişkenler:\n" + +msgid "--\t\t\tOnly file names after this" +msgstr "--\t\t\tBundan sonra yalnızca dosya adları" + +msgid "--literal\t\tDon't expand wildcards" +msgstr "--literal\t\tJoker karakterleri genişletme!" + +msgid "-register\t\tRegister this gvim for OLE" +msgstr "-register\t\tBu gvim'i OLE için kaydet" + +msgid "-unregister\t\tUnregister gvim for OLE" +msgstr "-unregister\t\tgvim'in OLE kaydını sil" + +msgid "-g\t\t\tRun using GUI (like \"gvim\")" +msgstr "-g\t\t\tGrafik arabirim kullanarak çalıştır (\"gvim\" gibi)" + +msgid "-f or --nofork\tForeground: Don't fork when starting GUI" +msgstr "-f veya --nofork\tÖnalan: Grafik arabirim başlatılırken çatallama!" + +msgid "-v\t\t\tVi mode (like \"vi\")" +msgstr "-v\t\t\tVi kipi (\"vi\" gibi)" + +msgid "-e\t\t\tEx mode (like \"ex\")" +msgstr "-e\t\t\tEx kipi (\"ex\" gibi)" + +msgid "-E\t\t\tImproved Ex mode" +msgstr "-E\t\t\tGeliştirilmiş Ex kipi" + +msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")" +msgstr "-s\t\t\tSessiz (toplu iş) kipi (yalnızca \"ex\" için)" + +msgid "-d\t\t\tDiff mode (like \"vimdiff\")" +msgstr "-d\t\t\tKarşılaştırma kipi (like \"vimdiff\")" + +msgid "-y\t\t\tEasy mode (like \"evim\", modeless)" +msgstr "-y\t\t\tKolay kip (\"evim\" gibi, kipsiz)" + +msgid "-R\t\t\tReadonly mode (like \"view\")" +msgstr "-R\t\t\tSaltokunur kip (\"view\" gibi)" + +msgid "-Z\t\t\tRestricted mode (like \"rvim\")" +msgstr "-Z\t\t\tKısıtlanmış kip (\"rvim\" gibi)" + +msgid "-m\t\t\tModifications (writing files) not allowed" +msgstr "-m\t\t\tDeğişikliklere (dosya yazma) izin verilmez" + +msgid "-M\t\t\tModifications in text not allowed" +msgstr "-M\t\t\tMetinde değişikliklere izin verilmez" + +msgid "-b\t\t\tBinary mode" +msgstr "-b\t\t\tİkili kip" + +msgid "-l\t\t\tLisp mode" +msgstr "-l\t\t\tLisp kipi" + +msgid "-C\t\t\tCompatible with Vi: 'compatible'" +msgstr "-C\t\t\tVi ile uyumlu: 'compatible'" + +msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'" +msgstr "-N\t\t\tTümüyle Vi uyumlu değil: 'nocompatible'" + +msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]" +msgstr "-V[N][dosya]\t\tAyrıntılı bilgi ver [N düzeyi] [iletileri dosyaya yaz]" + +msgid "-D\t\t\tDebugging mode" +msgstr "-D\t\t\tHata ayıklama kipi" + +msgid "-n\t\t\tNo swap file, use memory only" +msgstr "-n\t\t\tTakas dosyası kullanma, yalnızca belleğe yaz" + +msgid "-r\t\t\tList swap files and exit" +msgstr "-r\t\t\tTakas dosyalarını listele ve çık" + +msgid "-r (with file name)\tRecover crashed session" +msgstr "-r (dosya adı ile)\tÇöken oturumu kurtar" + +msgid "-L\t\t\tSame as -r" +msgstr "-L\t\t\t-r ile aynı" + +msgid "-f\t\t\tDon't use newcli to open window" +msgstr "-f\t\t\tPencere açmak için yeni komut satırı arabirimi kullanma" + +msgid "-dev <device>\t\tUse <device> for I/O" +msgstr "-dev <aygıt>\t\tGirdi/Çıktı için <aygıt>'ı kullan" + +msgid "-A\t\t\tStart in Arabic mode" +msgstr "-A\t\t\tArapça kipinde başla" + +msgid "-H\t\t\tStart in Hebrew mode" +msgstr "-H\t\t\tİbranca kipinde başla" + +msgid "-T <terminal>\tSet terminal type to <terminal>" +msgstr "-T <uçbirim>\t\tUçbirim türünü <uçbirim>'e ayarla" + +msgid "--not-a-term\t\tSkip warning for input/output not being a terminal" +msgstr "--not-a-term\t\tGirdi/Çıktının bir uçbirime olmadığı uyarısını atla" + +msgid "--ttyfail\t\tExit if input or output is not a terminal" +msgstr "--ttyfail\t\tGirdi veya çıktı bir uçbirime değilse çık" + +msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc" +msgstr "-u <vimrc>\t\tHerhangi bir .vimrc yerine <vimrc> kullan" + +msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc" +msgstr "-U <gvimrc>\t\tHerhangi bir .gvimrc yerine <gvimrc> kullan" + +msgid "--noplugin\t\tDon't load plugin scripts" +msgstr "--noplugin\t\tEklenti betiklerini yükleme!" + +msgid "-p[N]\t\tOpen N tab pages (default: one for each file)" +msgstr "-p[N]\t\tN sekme sayfası aç (öntanımlı: her dosya için bir sekme)" + +msgid "-o[N]\t\tOpen N windows (default: one for each file)" +msgstr "-o[N]\t\tN pencere aç (öntanımlı: her dosya için bir pencere)" + +msgid "-O[N]\t\tLike -o but split vertically" +msgstr "-O[N]\t\t-o gibi, yalnızca dikey bölerek" + +msgid "+\t\t\tStart at end of file" +msgstr "+\t\t\tDosyanın sonunda başlat" + +msgid "+<lnum>\t\tStart at line <lnum>" +msgstr "+<satırno>\t\t<satırno> numaralı satırda başlat" + +msgid "--cmd <command>\tExecute <command> before loading any vimrc file" +msgstr "--cmd <komut>\tHerhangi bir vimrc dosyası yüklemeden <komut> çalıştır" + +msgid "-c <command>\t\tExecute <command> after loading the first file" +msgstr "-c <komut>\t\tİlk dosyayı yükleyip <komut> komutunu çalıştır" + +msgid "-S <session>\t\tSource file <session> after loading the first file" +msgstr "-S <oturum>\t\tİlk dosyayı yükleyip <oturum> dosyasını kaynak al" + +msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>" +msgstr "-s <betikgir>\tNormal kip komutlarını <betikgir> dosyasından oku" + +msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>" +msgstr "-w <betikçık>\tGirilen tüm komutları <betikçık> dosyasına iliştir" + +msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>" +msgstr "-W <betikçık>\tGirilen tüm komutları <betikçık> dosyasına yaz" + +msgid "-x\t\t\tEdit encrypted files" +msgstr "-x\t\t\tŞifrelenmiş dosyaları düzenle" + +msgid "-display <display>\tConnect Vim to this particular X-server" +msgstr "-display <ekran>\tVim'i bu belirtilen X sunucusuna bağla" + +msgid "-X\t\t\tDo not connect to X server" +msgstr "-X\t\t\tX sunucusuna bağlama" + +msgid "--remote <files>\tEdit <files> in a Vim server if possible" +msgstr "--remote <dosya>\tOlanaklıysa bir Vim sunucusuda <dosya> düzenler" + +msgid "--remote-silent <files> Same, don't complain if there is no server" +msgstr "--remote-silent <dosya> Aynısı, yalnızca sunucu yoksa şikayet etmez" + +msgid "" +"--remote-wait <files> As --remote but wait for files to have been edited" +msgstr "" +"--remote-wait <dosya> ---remote gibi, yalnızca düzenlenme bitişini bekle" + +msgid "" +"--remote-wait-silent <files> Same, don't complain if there is no server" +msgstr "" +"--remote-wait-silent <dosya> Aynısı, yalnızca sunucu yoksa şikayet etmez" + +msgid "" +"--remote-tab[-wait][-silent] <files> As --remote but use tab page per file" +msgstr "" +"--remote-tab[-wait][-silent] <dosya> --remote, artı sekme sayfası kullanır" + +msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit" +msgstr "" +"--remote-send <anahtar>\tBir Vim sunucusuna <anahtar> gönderir ve çıkar" + +msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result" +msgstr "" +"--remote-expr <ifade>\t<ifade>'leri bir Vim sunucusunda değerlendirir ve " +"sonuçları yazdırır" + +msgid "--serverlist\t\tList available Vim server names and exit" +msgstr "--serverlist\t\tMevcut Vim sunucu adlarını listeler ve çıkar" + +msgid "--servername <name>\tSend to/become the Vim server <name>" +msgstr "--servername <ad>\t<ad> Vim sunucusuna gönder veya sunucu ol" + +msgid "--startuptime <file>\tWrite startup timing messages to <file>" +msgstr "--startuptime <dsy>\tBaşlangıç zamanlama iletilerini <dsy>'ya yaz" + +msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo" +msgstr "-i <viminfo>\t\t.viminfo yerine <viminfo> kullan" + +msgid "--clean\t\t'nocompatible', Vim defaults, no plugins, no viminfo" +msgstr "--clean\t\t'nocompatible', Vim öntanımlıları, eklenti-viminfo yok" + +msgid "-h or --help\tPrint Help (this message) and exit" +msgstr "-h veya --help\tYardımı (bu iletiyi) yazdırır ve çıkar" + +msgid "--version\t\tPrint version information and exit" +msgstr "--version\t\tSürüm bilgisini yazdırır ve çıkar" + +msgid "" +"\n" +"Arguments recognised by gvim (Motif version):\n" +msgstr "" +"\n" +"gvim tarafından tanınan değişkenler (Motif sürümü):\n" + +msgid "" +"\n" +"Arguments recognised by gvim (neXtaw version):\n" +msgstr "" +"\n" +"gvim tarafından tanınan değişkenler (neXtaw sürümü):\n" + +msgid "" +"\n" +"Arguments recognised by gvim (Athena version):\n" +msgstr "" +"\n" +"gvim tarafından tanınan değişkenler (Athena sürümü):\n" + +msgid "-display <display>\tRun Vim on <display>" +msgstr "-display <ekran>\tVim'i <ekran>'da çalıştır" + +msgid "-iconic\t\tStart Vim iconified" +msgstr "-iconic\t\tVim'i simge durumunda başlat" + +msgid "-background <color>\tUse <color> for the background (also: -bg)" +msgstr "-background <renk>\tArdalanı <renk> yap (kısa: -bg)" + +msgid "-foreground <color>\tUse <color> for normal text (also: -fg)" +msgstr "-foreground <renk>\tNormal metin için <renk> kullan (kısa: -fg)" + +msgid "-font <font>\t\tUse <font> for normal text (also: -fn)" +msgstr "-font <font>\t\tNormal metin için <font> yazıtipini kullan (kısa: -fn)" + +msgid "-boldfont <font>\tUse <font> for bold text" +msgstr "-boldfont <font>\tKalın metin için <font> yazıtipini kullan" + +msgid "-italicfont <font>\tUse <font> for italic text" +msgstr "-italicfont <font>\tEğik metin için <font> yazıtipini kullan" + +msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)" +msgstr "-geometry <geom>\tBaşlangıç boyutları için <geom> kullan (kısa -geom)" + +msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)" +msgstr "-borderwidth <gnşlk>\t<gnşlk> kenar genişliği kullan (kısa: -bw)" + +msgid "-scrollbarwidth <width> Use a scrollbar width of <width> (also: -sw)" +msgstr "" +"-scrollbarwidth <gnşlk> Kaydırma çubuğu için <gnşlk> genişlik (kısa: -sw)" + +msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)" +msgstr "" +"-menuheight <yükseklik>\t<yükseklik> menü çubuğu yüksekliği (kısa: -mh)" + +msgid "-reverse\t\tUse reverse video (also: -rv)" +msgstr "-reverse\t\tTersine dönmüş video kullan (kısa: -rv)" + +msgid "+reverse\t\tDon't use reverse video (also: +rv)" +msgstr "+reverse\t\tTersine dönmüş video kullanma (kısa: +rv)" + +msgid "-xrm <resource>\tSet the specified resource" +msgstr "-xrm <kaynak>\tBelirtilen kaynağı ayarla" + +msgid "" +"\n" +"Arguments recognised by gvim (GTK+ version):\n" +msgstr "" +"\n" +"gvim tarafından tanınan değişkenler (GTK+ sürümü):\n" + +msgid "-display <display>\tRun Vim on <display> (also: --display)" +msgstr "-display <ekran>\tVim'i <ekran>'da çalıştır (veya: --display)" + +msgid "--role <role>\tSet a unique role to identify the main window" +msgstr "--role <rol>\tAna pencereyi tanımlamak için eşsiz bir rol ayarla" + +msgid "--socketid <xid>\tOpen Vim inside another GTK widget" +msgstr "--socketid <xid>\tBaşka bir GTK parçacığında Vim'i aç" + +msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout" +msgstr "--echo-wid\t\tgvim'in pencere kimliğini stdout'ta echo yapmasını sağla" + +msgid "-P <parent title>\tOpen Vim inside parent application" +msgstr "-P <üst başlık>\tVim'i üst uygulama içinde aç" + +msgid "--windowid <HWND>\tOpen Vim inside another win32 widget" +msgstr "--windowid <HWND>\tVim'i başka bir win32 parçacığı içinde aç" + +#, c-format +msgid "E224: global abbreviation already exists for %s" +msgstr "E224: %s için global kısaltma hâlihazırda var" + +#, c-format +msgid "E225: global mapping already exists for %s" +msgstr "E225: %s için global eşlemleme hâlihazırda var " + +#, c-format +msgid "E226: abbreviation already exists for %s" +msgstr "E226: %s için kısaltma hâlihazırda var" + +#, c-format +msgid "E227: mapping already exists for %s" +msgstr "E227: %s için eşlemleme hâlihazırda var" + +msgid "No abbreviation found" +msgstr "Kısaltma bulunamadı" + +msgid "No mapping found" +msgstr "Eşlemleme bulunamadı" + +msgid "E228: makemap: Illegal mode" +msgstr "E228: makemap: İzin verilmeyen kip" + +msgid "E460: entries missing in mapset() dict argument" +msgstr "E460: mapset() sözlük değişkeninde eksik girdiler" + +#, c-format +msgid "E357: 'langmap': Matching character missing for %s" +msgstr "E357: 'langmap': %s için eşleşen karakter eksik" + +#, c-format +msgid "E358: 'langmap': Extra characters after semicolon: %s" +msgstr "E358: 'langmap': Noktalı virgülden sonra ek karakterler: %s" + +msgid "No marks set" +msgstr "İm ayarlanmamış" + +#, c-format +msgid "E283: No marks matching \"%s\"" +msgstr "E283: \"%s\" ile eşleşen im yok" + +msgid "" +"\n" +"mark line col file/text" +msgstr "" +"\n" +"im satr stn dosya/metin" + +msgid "" +"\n" +" jump line col file/text" +msgstr "" +"\n" +" atla satr stn dosya/metin" + +msgid "" +"\n" +"change line col text" +msgstr "" +"\n" +"dğşklk satr stn metin" + +#, c-format +msgid "E799: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E799: Geçersiz ID: %d (1'e eşit veya 1'den büyük olmalıdır)" + +#, c-format +msgid "E801: ID already taken: %d" +msgstr "E801: Kullanımda olan ID: %d" + +msgid "E290: List or number required" +msgstr "E290: Liste veya numara gerekiyor" + +#, c-format +msgid "E802: Invalid ID: %d (must be greater than or equal to 1)" +msgstr "E802: Geçersiz ID: %d (1'e eşit veya 1'den büyük olmalıdır)" + +#, c-format +msgid "E803: ID not found: %d" +msgstr "E803: ID bulunamadı: %d" + +#, c-format +msgid "E798: ID is reserved for \":match\": %d" +msgstr "E798: ID, \":match\" için ayrılmış: %d" + +msgid "E543: Not a valid codepage" +msgstr "E543: Geçerli bir kod sayfası değil" + +msgid "E293: block was not locked" +msgstr "E293: Blok kilitlenmemişti" + +msgid "E294: Seek error in swap file read" +msgstr "E294: Takas dosyası okumasında arama hatası" + +msgid "E295: Read error in swap file" +msgstr "E295: Takas dosyasında okuma hatası" + +msgid "E296: Seek error in swap file write" +msgstr "E296: Takas dosyası yazmasında arama hatası" + +msgid "E297: Write error in swap file" +msgstr "E297: Takas dosyasında yazma hatası" + +msgid "E300: Swap file already exists (symlink attack?)" +msgstr "E300: Takas dosyası hâlihazırda var (sembol bağı saldırısı?)" + +msgid "E298: Didn't get block nr 0?" +msgstr "E298: 0 numaralı blok alınmadı mı?" + +msgid "E298: Didn't get block nr 1?" +msgstr "E298: 1 numaralı blok alınmadı mı?" + +msgid "E298: Didn't get block nr 2?" +msgstr "E298: 2 numaralı blok alınmadı mı?" + +msgid "E843: Error while updating swap file crypt" +msgstr "E843: Takas dosyası şifrelemesi güncellenirken hata" + +msgid "E301: Oops, lost the swap file!!!" +msgstr "E301: Hay aksi, takas dosyasını kaybettik!" + +msgid "E302: Could not rename swap file" +msgstr "E302: Takas dosyası adı değiştirilemedi" + +#, c-format +msgid "E303: Unable to open swap file for \"%s\", recovery impossible" +msgstr "E303: \"%s\" için takas dosyası açılamadı, artık kurtarma yapılamaz" + +msgid "E304: ml_upd_block0(): Didn't get block 0??" +msgstr "E304: ml_upd_block(): 0 numaralı blok alınmadı mı?" + +#, c-format +msgid "E305: No swap file found for %s" +msgstr "E305: %s için takas dosyası bulunamadı" + +msgid "Enter number of swap file to use (0 to quit): " +msgstr "Kullanılacak takas dosyasının numarasını girin (çıkmak için 0): " + +#, c-format +msgid "E306: Cannot open %s" +msgstr "E306: %s açılamıyor" + +msgid "Unable to read block 0 from " +msgstr "Blok 0 şuradan okunamıyor: " + +msgid "" +"\n" +"Maybe no changes were made or Vim did not update the swap file." +msgstr "" +"\n" +"Herhangi bir değişiklik yapılmadı veya Vim takas dosyasını güncellemedi" + +msgid " cannot be used with this version of Vim.\n" +msgstr " Vim'in bu sürümüyle kullanılamaz.\n" + +msgid "Use Vim version 3.0.\n" +msgstr "Vim 3.0 sürümünü kullanın.\n" + +#, c-format +msgid "E307: %s does not look like a Vim swap file" +msgstr "E307: %s Vim takas dosyasına pek benzemiyor" + +msgid " cannot be used on this computer.\n" +msgstr " bu bilgisayarda kullanılamaz.\n" + +msgid "The file was created on " +msgstr "Dosya şurada oluşturuldu " + +msgid "" +",\n" +"or the file has been damaged." +msgstr "" +",\n" +"veya dosya zarar görmüş" + +#, c-format +msgid "" +"E833: %s is encrypted and this version of Vim does not support encryption" +msgstr "E833: %s şifrelenmiş ve Vim'in bu sürümü şifrelemeyi desteklemiyor" + +msgid " has been damaged (page size is smaller than minimum value).\n" +msgstr " hasar görmüş (sayfa boyutu olabilecek en az değerden daha küçük).\n" + +#, c-format +msgid "Using swap file \"%s\"" +msgstr "\"%s\" takas dosyası kullanılıyor" + +#, c-format +msgid "Original file \"%s\"" +msgstr "Orijinal dosya \"%s\"" + +msgid "E308: Warning: Original file may have been changed" +msgstr "E308: Uyarı: Orijinal dosya değiştirilmiş olabilir" + +#, c-format +msgid "Swap file is encrypted: \"%s\"" +msgstr "Takas dosyası şifrelenmiş: \"%s\"" + +msgid "" +"\n" +"If you entered a new crypt key but did not write the text file," +msgstr "" +"\n" +"Yeni bir şifreleme anahtarı girmiş, fakat metin dosyasını yazmamışsanız," + +msgid "" +"\n" +"enter the new crypt key." +msgstr "" +"\n" +"yeni şifreleme anahtarını girin" + +msgid "" +"\n" +"If you wrote the text file after changing the crypt key press enter" +msgstr "" +"\n" +"Metin dosyasını şifreleme anahtarını değiştirdikten sonra yazdıysanız " +"Enter'a basın" + +msgid "" +"\n" +"to use the same key for text file and swap file" +msgstr "" +"\n" +"metin dosyası ve takas dosyası için aynı anahtarı kullanmak için" + +#, c-format +msgid "E309: Unable to read block 1 from %s" +msgstr "E309: Blok 1 %s içinden okunamıyor" + +msgid "???MANY LINES MISSING" +msgstr "???ÇOK FAZLA SATIR EKSİK" + +msgid "???LINE COUNT WRONG" +msgstr "???SATIR SAYISI YANLIŞ" + +msgid "???EMPTY BLOCK" +msgstr "???BOŞ BLOK" + +msgid "???LINES MISSING" +msgstr "???SATIRLAR EKSİK" + +#, c-format +msgid "E310: Block 1 ID wrong (%s not a .swp file?)" +msgstr "E310: Blok 1 kimliği yanlış (%s bir .swp dosyası değil mi?)" + +msgid "???BLOCK MISSING" +msgstr "???EKSİK BLOK" + +msgid "??? from here until ???END lines may be messed up" +msgstr "??? konumundan ???SON konumuna kadar satırlar bozulmuş olabilir" + +msgid "??? from here until ???END lines may have been inserted/deleted" +msgstr "" +"??? konumundan ???SON konumuna kadar satırlar eklenmiş/silinmiş olabilir" + +msgid "???END" +msgstr "???SON" + +msgid "E311: Recovery Interrupted" +msgstr "E311: Kurtarma yarıda kesildi" + +msgid "" +"E312: Errors detected while recovering; look for lines starting with ???" +msgstr "" +"E312: Kurtarma sırasında hatalar bulundu, ??? ile başlayan satırlara bakın" + +msgid "See \":help E312\" for more information." +msgstr "Ek bilgi için \":help E312\" yazın." + +msgid "Recovery completed. You should check if everything is OK." +msgstr "Kurtarma tamamlandı. Her şey yolunda mı diye lütfen bir bakın." + +msgid "" +"\n" +"(You might want to write out this file under another name\n" +msgstr "" +"\n" +"(Bu dosyası başka bir adla kaydetmek isteyebilir ve orijinal\n" + +msgid "and run diff with the original file to check for changes)" +msgstr "dosya ile (varsa) karşılaştırmasını yapmak isteyebilirsiniz)" + +msgid "Recovery completed. Buffer contents equals file contents." +msgstr "Kurtarma tamamlandı. Arabellek içeriği dosya içeriğine eşit." + +msgid "" +"\n" +"You may want to delete the .swp file now." +msgstr "" +"\n" +"Bu .swp dosyasını silmeniz iyi olur." + +msgid "" +"\n" +"Note: process STILL RUNNING: " +msgstr "" +"\n" +"Not: İşlem HÂL ÇALIŞIYOR: " + +msgid "Using crypt key from swap file for the text file.\n" +msgstr "" +"Metin dosyası için takas dosyasındaki şifreleme anahtarı kullanılıyor.\n" + +msgid "Swap files found:" +msgstr "Takas dosyası bulundu:" + +msgid " In current directory:\n" +msgstr " Şu anki dizinde:\n" + +msgid " Using specified name:\n" +msgstr " Belirtilen şu adla:\n" + +msgid " In directory " +msgstr " Şu dizinde: " + +msgid " -- none --\n" +msgstr " -- hiçbiri --\n" + +msgid " owned by: " +msgstr " sahibi: " + +msgid " dated: " +msgstr " tarih: " + +msgid " dated: " +msgstr " tarih: " + +msgid " [from Vim version 3.0]" +msgstr " [Vim 3.0 sürümünden itibaren]" + +msgid " [does not look like a Vim swap file]" +msgstr " [bir Vim takas dosyasına benzemiyor]" + +msgid " file name: " +msgstr " dosya adı: " + +msgid "" +"\n" +" modified: " +msgstr "" +"\n" +" değiştirilme: " + +msgid "YES" +msgstr "EVET" + +msgid "no" +msgstr "hayır" + +msgid "" +"\n" +" user name: " +msgstr "" +"\n" +" kullanıcı adı: " + +msgid " host name: " +msgstr " anamakine adı: " + +msgid "" +"\n" +" host name: " +msgstr "" +"\n" +" anamakine adı: " + +msgid "" +"\n" +" process ID: " +msgstr "" +"\n" +" işlem kimliği: " + +msgid " (STILL RUNNING)" +msgstr " (HÅLÅ ÇALIŞIYOR)" + +msgid "" +"\n" +" [not usable with this version of Vim]" +msgstr "" +"\n" +" [Vim'in bu sürümüyle kullanılamaz]" + +msgid "" +"\n" +" [not usable on this computer]" +msgstr "" +"\n" +" [bu bilgisayarda kullanılabilir değil]" + +msgid " [cannot be read]" +msgstr " [okunamıyor]" + +msgid " [cannot be opened]" +msgstr " [açılamadı]" + +msgid "E313: Cannot preserve, there is no swap file" +msgstr "E313: Korunamıyor, bir takas dosyası yok" + +msgid "File preserved" +msgstr "Dosya korundu" + +msgid "E314: Preserve failed" +msgstr "E314: Koruma başarısız oldu" + +#, c-format +msgid "E315: ml_get: invalid lnum: %ld" +msgstr "E315: ml_get: geçersiz satır numarası: %ld" + +#, c-format +msgid "E316: ml_get: cannot find line %ld in buffer %d %s" +msgstr "E316: ml_get: %ld. satır %d %s arabelleğinde bulunamıyor" + +msgid "E317: pointer block id wrong 3" +msgstr "E317: Blok 3 gösterge kimliği yanlış" + +msgid "stack_idx should be 0" +msgstr "stack_idx 0 olmalı" + +msgid "E318: Updated too many blocks?" +msgstr "E318: Çok fazla blok mu güncellendi?" + +msgid "E317: pointer block id wrong 4" +msgstr "E317: Blok 4 gösterge kimliği yanlış" + +msgid "deleted block 1?" +msgstr "Blok 1 mi silindi?" + +#, c-format +msgid "E320: Cannot find line %ld" +msgstr "E320: %ld. satır bulunamıyor" + +msgid "E317: pointer block id wrong" +msgstr "E317: Gösterge blok kimliği yanlış" + +msgid "pe_line_count is zero" +msgstr "pe_line_count sıfır" + +#, c-format +msgid "E322: line number out of range: %ld past the end" +msgstr "E322: satır numarası erimin dışında: %ld en sonuncuyu geçmiş" + +#, c-format +msgid "E323: line count wrong in block %ld" +msgstr "E323: %ld. blokta satır sayısı yanlış" + +msgid "Stack size increases" +msgstr "Yığın boyutu artıyor" + +msgid "E317: pointer block id wrong 2" +msgstr "E317: Blok 2 gösterge kimliği yanlış" + +#, c-format +msgid "E773: Symlink loop for \"%s\"" +msgstr "E773: \"%s\" için sembol bağı döngüsü" + +msgid "E325: ATTENTION" +msgstr "E325: DİKKAT" + +msgid "" +"\n" +"Found a swap file by the name \"" +msgstr "" +"\n" +"Şu adla bir takas dosyası bulundu: \"" + +msgid "While opening file \"" +msgstr "şu dosya açılırken: \"" + +msgid " CANNOT BE FOUND" +msgstr " BULUNAMADI" + +msgid " NEWER than swap file!\n" +msgstr " takas dosyasından DAHA YENİ!\n" + +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. Quit, or continue with caution.\n" +msgstr "" +"\n" +"(1) Bu dosya başka bir programda da açık olabilir. Eğer öyleyse, aynı\n" +" dosyanın iki ayrı örneğiyle karşılaşmamak için değişiklik yaparken\n" +" lütfen dikkatli olun. Ya programdan çıkın ya da dikkatli ilerleyin.\n" + +msgid "(2) An edit session for this file crashed.\n" +msgstr "(2) Bu dosya düzenleme oturumu çöktü.\n" + +msgid " If this is the case, use \":recover\" or \"vim -r " +msgstr " Durum buysa, \":recover\" veya \"vim -r " + +msgid "" +"\"\n" +" to recover the changes (see \":help recovery\").\n" +msgstr "" +"\"\n" +" yapıp değişiklikleri kurtarın (ek bilgi için \":help recovery\").\n" + +msgid " If you did this already, delete the swap file \"" +msgstr " Eğer bunu yaptıysanız, bu iletiyi bir daha görmemek için \"" + +msgid "" +"\"\n" +" to avoid this message.\n" +msgstr "" +"\"\n" +" takas dosyasını silin.\n" + +msgid "Found a swap file that is not useful, deleting it" +msgstr "Bir işe yaramayan bir takas dosyası bulundu, siliniyor" + +msgid "Swap file \"" +msgstr "Swap dosyası \"" + +msgid "\" already exists!" +msgstr "\" zaten var!" + +msgid "VIM - ATTENTION" +msgstr "VİM - DİKKAT" + +msgid "Swap file already exists!" +msgstr "Takas dosyası hâlihazırda var!" + +msgid "" +"&Open Read-Only\n" +"&Edit anyway\n" +"&Recover\n" +"&Quit\n" +"&Abort" +msgstr "" +"&Saltokunur aç\n" +"&Düzenle\n" +"Kur&tar\n" +"Çı&k\n" +"Du&rdur" + +msgid "" +"&Open Read-Only\n" +"&Edit anyway\n" +"&Recover\n" +"&Delete it\n" +"&Quit\n" +"&Abort" +msgstr "" +"&Saltokunur aç\n" +"&Düzenle\n" +"Kur&tar\n" +"S&il\n" +"Çı&k\n" +"Du&rdur" + +msgid "E326: Too many swap files found" +msgstr "E326: Çok fazla takas dosyası bulundu" + +msgid "E327: Part of menu-item path is not sub-menu" +msgstr "E327: Menü öge yolunun bir kısmı alt menü değil" + +#, c-format +msgid "E329: No menu \"%s\"" +msgstr "E329: Menü \"%s\" yok" + +msgid "E792: Empty menu name" +msgstr "E792: Boş menü adı" + +msgid "E330: Menu path must not lead to a sub-menu" +msgstr "E330: Menü yolu bir alt menüye çıkmamalı" + +msgid "E331: Must not add menu items directly to menu bar" +msgstr "E331: Menü ögeleri doğrudan menü çubuğuna eklenmemeli" + +msgid "E332: Separator cannot be part of a menu path" +msgstr "E332: Ayırıcı bir menü yolunun parçası olamaz" + +msgid "" +"\n" +"--- Menus ---" +msgstr "" +"\n" +"--- Menüler ---" + +msgid "Tear off this menu" +msgstr "Bu menüyü dışarıya al" + +#, c-format +msgid "E335: Menu not defined for %s mode" +msgstr "E335: Menü %s kipi için tanımlanmamış" + +msgid "E333: Menu path must lead to a menu item" +msgstr "E333: Menü yolu bir menü ögesine çıkmalı" + +#, c-format +msgid "E334: Menu not found: %s" +msgstr "E334: Menü bulunamadı %s" + +msgid "E336: Menu path must lead to a sub-menu" +msgstr "E336: Menü yolu bir alt menüye çıkmalı" + +msgid "E337: Menu not found - check menu names" +msgstr "E337: Menü bulunamadı - menü adlarını denetle" + +#, c-format +msgid "Error detected while compiling %s:" +msgstr "%s derlenirken hata tespit edildi:" + +#, c-format +msgid "Error detected while processing %s:" +msgstr "%s işlenirken hata tespit edildi:" + +#, c-format +msgid "line %4ld:" +msgstr "satır %4ld:" + +#, c-format +msgid "E354: Invalid register name: '%s'" +msgstr "E354: Geçersiz yazmaç adı: '%s'" + +msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>" +msgstr "Türkçeye çeviren: Emir SARI <bitigchi@me.com>" + +msgid "Interrupt: " +msgstr "Yarıda kes: " + +msgid "Press ENTER or type command to continue" +msgstr "Sürdürmek için ENTER'a basın veya komut girin" + +#, c-format +msgid "%s line %ld" +msgstr "%s %ld. satır" + +msgid "-- More --" +msgstr "-- Daha fazla --" + +msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit " +msgstr " BOŞLUK/d/j: ekran/sayfa/satır aşağı, b/u/k: yukarı, q: çık " + +msgid "Question" +msgstr "Soru" + +msgid "" +"&Yes\n" +"&No" +msgstr "" +"&Evet\n" +"&Hayır" + +msgid "" +"&Yes\n" +"&No\n" +"Save &All\n" +"&Discard All\n" +"&Cancel" +msgstr "" +"&Evet\n" +"&Hayır\n" +"Hepsini &Kaydet\n" +"&Tümünü At\n" +"İ&ptal" + +msgid "E766: Insufficient arguments for printf()" +msgstr "E766: printf() için yetersiz değişkenler" + +msgid "E807: Expected Float argument for printf()" +msgstr "E807: printf() için kayan noktalı değer türünde değişken bekleniyordu" + +msgid "E767: Too many arguments to printf()" +msgstr "E767: printf() için çok fazla değişken" + +msgid "Type number and <Enter> or click with the mouse (q or empty cancels): " +msgstr "" +"Sayı girip <Enter>'a veya fare düğmesine basın (q veya boş iptal eder): " + +msgid "Type number and <Enter> (q or empty cancels): " +msgstr "Sayı girip <Enter>'a basın (q veya boş iptal eder): " + +#, c-format +msgid "%ld more line" +msgid_plural "%ld more lines" +msgstr[0] "%ld daha fazla satır" +msgstr[1] "%ld daha fazla satır" + +#, c-format +msgid "%ld line less" +msgid_plural "%ld fewer lines" +msgstr[0] "%ld daha az satır" +msgstr[1] "%ld daha az satır" + +msgid " (Interrupted)" +msgstr " (Yarıda kesildi)" + +msgid "Beep!" +msgstr "Bip!" + +msgid "E677: Error writing temp file" +msgstr "E677: Geçici dosya yazılırken hata" + +msgid "ERROR: " +msgstr "HATA: " + +#, c-format +msgid "" +"\n" +"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n" +msgstr "" +"\n" +"[bitler] toplam ayrılan/boşaltılan %lu-%lu, kullanımda %lu, doruk nokt. %lu\n" + +#, c-format +msgid "" +"[calls] total re/malloc()'s %lu, total free()'s %lu\n" +"\n" +msgstr "" +"[çağrılar] toplam re/malloc()'lar %lu, toplam free()'ler %lu\n" +"\n" + +msgid "E341: Internal error: lalloc(0, )" +msgstr "E341: İç hata: lalloc(0, )" + +#, c-format +msgid "E342: Out of memory! (allocating %lu bytes)" +msgstr "E342: Yetersiz bellek! (%lu bit ayrılıyor)" + +#, c-format +msgid "Calling shell to execute: \"%s\"" +msgstr "Çalıştırmak için çağrılan kabuk: \"%s\"" + +msgid "E545: Missing colon" +msgstr "E545: İki nokta eksik" + +msgid "E546: Illegal mode" +msgstr "E546: İzin verilmeyen kip" + +msgid "E547: Illegal mouseshape" +msgstr "E547: İzin verilmeyen fare imleci türü" + +msgid "E548: digit expected" +msgstr "E548: Basamak bekleniyordu" + +msgid "E549: Illegal percentage" +msgstr "E549: İzin verilmeyen yüzde" + +#, c-format +msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\"" +msgstr "" +"E668: NetBeans bağlantı bilgisi dosyası için yanlış erişim kipi: \"%s\"" + +#, c-format +msgid "E658: NetBeans connection lost for buffer %d" +msgstr "E658: Arabellek %d için NetBeans bağlantısı koptu" + +msgid "E838: netbeans is not supported with this GUI" +msgstr "E838: NetBeans bu grafik arabirimde desteklenmiyor" + +msgid "E511: netbeans already connected" +msgstr "E511: NetBeans hâlihazırda bağlı" + +#, c-format +msgid "E505: %s is read-only (add ! to override)" +msgstr "E505: %s saltokunur (geçersiz kılmak için ! ekleyin)" + +msgid "E349: No identifier under cursor" +msgstr "E349: İmleç altında bir tanımlayıcı yok" + +msgid "Warning: terminal cannot highlight" +msgstr "Uyarı: Uçbirim vurgulama yapamıyor" + +msgid "E348: No string under cursor" +msgstr "E348: İmleç altında bir dizi yok" + +msgid "E352: Cannot erase folds with current 'foldmethod'" +msgstr "E352: Şu anki 'foldmethod' ile kıvırmalar silinemiyor" + +msgid "E664: changelist is empty" +msgstr "E664: Değişiklik listesi boş" + +msgid "E662: At start of changelist" +msgstr "E662: Değişiklik listesinin başında" + +msgid "E663: At end of changelist" +msgstr "E663: Değişiklik listesinin sonunda" + +msgid "Type :qa! and press <Enter> to abandon all changes and exit Vim" +msgstr "" +"Değişikliklerden vazgeçip Vim'den çıkmak için :qa! yazıp <Enter>'a basın" + +msgid "Type :qa and press <Enter> to exit Vim" +msgstr "Vim'den çıkmak için :qa yazıp <Enter>'a basın" + +#, c-format +msgid "%ld line %sed %d time" +msgid_plural "%ld line %sed %d times" +msgstr[0] "%ld satır, %s %d kez" +msgstr[1] "%ld satır, %s %d kez" + +#, c-format +msgid "%ld lines %sed %d time" +msgid_plural "%ld lines %sed %d times" +msgstr[0] "%ld satır, %s %d kez" +msgstr[1] "%ld satır, %s %d kez" + +msgid "cannot yank; delete anyway" +msgstr "kopyalanamıyor, silindi" + +#, c-format +msgid "%ld line changed" +msgid_plural "%ld lines changed" +msgstr[0] "%ld satır değiştirildi" +msgstr[1] "%ld satır değiştirildi" + +#, c-format +msgid "%d line changed" +msgid_plural "%d lines changed" +msgstr[0] "%d satır değiştirildi" +msgstr[1] "%d satır değiştirildi" + +#, c-format +msgid "%ld Cols; " +msgstr "%ld Sütun; " + +#, c-format +msgid "Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Bytes" +msgstr "%s%ld/%ld satır; %lld/%lld sözcük; %lld/%lld bit seçildi" + +#, c-format +msgid "" +"Selected %s%ld of %ld Lines; %lld of %lld Words; %lld of %lld Chars; %lld of " +"%lld Bytes" +msgstr "" +"%s%ld/%ld satır; %lld/%lld sözcük; %lld/%lld karakter; %lld/%lld bit seçildi" + +#, c-format +msgid "Col %s of %s; Line %ld of %ld; Word %lld of %lld; Byte %lld of %lld" +msgstr "Sütun %s/%s; Satır %ld/%ld; Sözcük %lld/%lld; Bit %lld/%lld" + +#, c-format +msgid "" +"Col %s of %s; Line %ld of %ld; Word %lld of %lld; Char %lld of %lld; Byte " +"%lld of %lld" +msgstr "" +"Sütun %s/%s; Satır %ld/%ld; Sözcük %lld/%lld; Karakter %lld/%lld; Bit %lld/" +"%lld" + +#, c-format +msgid "(+%lld for BOM)" +msgstr "(BOM için +%lld)" + +msgid "E774: 'operatorfunc' is empty" +msgstr "E774: 'operatorfunc' boş" + +msgid "E775: Eval feature not available" +msgstr "E775: Eval özelliği mevcut değil" + +msgid "E518: Unknown option" +msgstr "E518: Bilinmeyen seçenek" + +msgid "E519: Option not supported" +msgstr "E519: Özellik desteklenmiyor" + +msgid "E520: Not allowed in a modeline" +msgstr "E520: Bir kip satırında izin verilmiyor" + +msgid "E992: Not allowed in a modeline when 'modelineexpr' is off" +msgstr "E992: 'modelineexpr' kapalıyken bir kip satırında izin verilmiyor" + +msgid "E846: Key code not set" +msgstr "E846: Anahtar kodu ayarlanmamış" + +msgid "E521: Number required after =" +msgstr "E521: = sonrası sayı gerekiyor" + +msgid "E522: Not found in termcap" +msgstr "E522: termcap içinde bulunamadı" + +msgid "E946: Cannot make a terminal with running job modifiable" +msgstr "E946: Uçbirim bir iş çalışırken değiştirilebilir yapılamaz" + +msgid "E590: A preview window already exists" +msgstr "E590: Bir önizleme penceresi hâlihazırda mevcut" + +msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'" +msgstr "W17: Arapça UTF-8 gerektirir, ':set encoding=utf-8' yapın" + +msgid "E954: 24-bit colors are not supported on this environment" +msgstr "E954: 24 bit renkler bu ortamda desteklenmiyor" + +#, c-format +msgid "E593: Need at least %d lines" +msgstr "E593: En azından %d satır gerekli" + +#, c-format +msgid "E594: Need at least %d columns" +msgstr "E594: En azından %d sütun gerekli" + +#, c-format +msgid "E355: Unknown option: %s" +msgstr "E355: Bilinmeyen seçenek: %s" + +#, c-format +msgid "E521: Number required: &%s = '%s'" +msgstr "E521: Sayı gerekiyor: &%s = '%s'" + +msgid "" +"\n" +"--- Terminal codes ---" +msgstr "" +"\n" +"--- Uçbirim kodları ---" + +msgid "" +"\n" +"--- Global option values ---" +msgstr "" +"\n" +"--- Global seçenek değerleri ---" + +msgid "" +"\n" +"--- Local option values ---" +msgstr "" +"\n" +"--- Yerel seçenek değerleri ---" + +msgid "" +"\n" +"--- Options ---" +msgstr "" +"\n" +"--- Seçenekler ---" + +msgid "E356: get_varp ERROR" +msgstr "E356: get_varp HATASI" + +#, c-format +msgid "E539: Illegal character <%s>" +msgstr "E539: İzin verilmeyen karakter <%s>" + +#, c-format +msgid "For option %s" +msgstr "%s seçeneği için" + +msgid "E540: Unclosed expression sequence" +msgstr "E540: Kapatılmamış ifade sıralaması" + +msgid "E542: unbalanced groups" +msgstr "E542: Dengelenmemiş gruplar" + +msgid "E529: Cannot set 'term' to empty string" +msgstr "E529: Boş dizi için 'term' ayarlanamıyor" + +msgid "E530: Cannot change term in GUI" +msgstr "E530: Grafik arabirimde uçbirim değiştirilemez" + +msgid "E531: Use \":gui\" to start the GUI" +msgstr "E531: Grafik arabirimi başlatmak için \":gui\" yazın" + +msgid "E589: 'backupext' and 'patchmode' are equal" +msgstr "E589: 'backupext' ve 'patchmode' birbirine eşit" + +msgid "E834: Conflicts with value of 'listchars'" +msgstr "E834: 'listchars' değeriyle çakışmalar var" + +msgid "E835: Conflicts with value of 'fillchars'" +msgstr "E835: 'fillchars' değeriyle çakışmalar var" + +msgid "E617: Cannot be changed in the GTK+ 2 GUI" +msgstr "E617: GTK+ 2 grafik arabiriminde değiştirilemez" + +#, c-format +msgid "E950: Cannot convert between %s and %s" +msgstr "E950: %s ve %s arasında dönüştürme yapılamıyor" + +msgid "E524: Missing colon" +msgstr "E524: İki nokta eksik" + +msgid "E525: Zero length string" +msgstr "E525: Sıfır uzunlukta dizi" + +#, c-format +msgid "E526: Missing number after <%s>" +msgstr "E526: <%s> sonrasında sayı eksik" + +msgid "E527: Missing comma" +msgstr "E527: Virgül eksik" + +msgid "E528: Must specify a ' value" +msgstr "E528: Bir ' değeri belirtmeli" + +msgid "E595: 'showbreak' contains unprintable or wide character" +msgstr "E595: 'showbreak' yazdırılamaz veya geniş karakter içeriyor" + +msgid "E596: Invalid font(s)" +msgstr "E596: Geçersiz font(lar)" + +msgid "E597: can't select fontset" +msgstr "E597: Yazıtipi seti seçilemiyor" + +msgid "E598: Invalid fontset" +msgstr "E598: Geçersiz yazıtipi seti" + +msgid "E533: can't select wide font" +msgstr "E533: Geniş yazıtipi seçilemiyor" + +msgid "E534: Invalid wide font" +msgstr "E534: Geçersiz geniş yazıtipi" + +#, c-format +msgid "E535: Illegal character after <%c>" +msgstr "E535: <%c> sonrası izin verilmeyen karakter" + +msgid "E536: comma required" +msgstr "E536: Virgül gerekiyor" + +#, c-format +msgid "E537: 'commentstring' must be empty or contain %s" +msgstr "E537: 'commentstring' boş olmalı veya %s içermeli" + +msgid "cannot open " +msgstr "Açılamıyor: " + +msgid "VIM: Can't open window!\n" +msgstr "VİM: Pencere açılamıyor!\n" + +msgid "Need Amigados version 2.04 or later\n" +msgstr "AmigaDOS 2.04 sürümü veya sonrası gerekli\n" + +#, c-format +msgid "Need %s version %ld\n" +msgstr "%s %ld sürümü gerekli\n" + +msgid "Cannot open NIL:\n" +msgstr "NIL açılamıyor:\n" + +msgid "Cannot create " +msgstr "Oluşturulamıyor: " + +#, c-format +msgid "Vim exiting with %d\n" +msgstr "Vim %d ile çıkıyor\n" + +msgid "cannot change console mode ?!\n" +msgstr "Konsol kipi değiştirilemiyor?!\n" + +msgid "mch_get_shellsize: not a console??\n" +msgstr "mch_get_shellsize: Bir konsol değil??\n" + +msgid "E360: Cannot execute shell with -f option" +msgstr "E360: Kabuk -f seçeneği ile çalıştırılamıyor" + +msgid "Cannot execute " +msgstr "Çalıştırılamıyor: " + +msgid "shell " +msgstr "kabuk " + +msgid " returned\n" +msgstr " döndürüldü\n" + +msgid "ANCHOR_BUF_SIZE too small." +msgstr "ANCHOR_BUF_SIZE çok küçük." + +msgid "I/O ERROR" +msgstr "GİRDİ/ÇIKTI HATASI" + +msgid "Message" +msgstr "İleti" + +msgid "E237: Printer selection failed" +msgstr "E237: Yazıcı seçimi başarısız oldu" + +#, c-format +msgid "to %s on %s" +msgstr "%s, %s üzerinde" + +#, c-format +msgid "E613: Unknown printer font: %s" +msgstr "E613: Bilinmeyen yazıcı fontu: %s" + +#, c-format +msgid "E238: Print error: %s" +msgstr "E238: Yazdırma hatası: %s" + +#, c-format +msgid "Printing '%s'" +msgstr "'%s' yazdırılıyor" + +#, c-format +msgid "E244: Illegal charset name \"%s\" in font name \"%s\"" +msgstr "E244: Geçersiz karakter adı \"%s\", bulunduğu yazıtipi: \"%s\"" + +#, c-format +msgid "E244: Illegal quality name \"%s\" in font name \"%s\"" +msgstr "E244: İzin verilmeyen nitelik adı: \"%s\", bulunduğu yazıtipi: \"%s\"" + +#, c-format +msgid "E245: Illegal char '%c' in font name \"%s\"" +msgstr "" +"E245: İzin verilmeyen karakter '%c', bulunduğu yer: \"%s\" yazıtipi adı" + +#, c-format +msgid "Opening the X display took %ld msec" +msgstr "X ekranını açma %ld milisaniye sürdü" + +msgid "" +"\n" +"Vim: Got X error\n" +msgstr "" +"\n" +"Vim: X hatası alındı\n" + +#, c-format +msgid "restoring display %s" +msgstr "%s ekranı geri getiriliyor" + +msgid "Testing the X display failed" +msgstr "X ekran testi başarısız oldu" + +msgid "Opening the X display timed out" +msgstr "X ekran açılması zaman aşımına uğradı" + +msgid "" +"\n" +"Could not get security context for " +msgstr "" +"\n" +"Şunun için güvenlik bağlamı alınamadı: " + +msgid "" +"\n" +"Could not set security context for " +msgstr "" +"\n" +"Şunun için güvenlik bağlamı alınamadı: " + +#, c-format +msgid "Could not set security context %s for %s" +msgstr "Güvenlik bağlamı %s %s için alınamadı" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "Güvenlik bağlamı %s %s için alınamadı. Kaldırılıyor!" + +msgid "" +"\n" +"Cannot execute shell sh\n" +msgstr "" +"\n" +"sh kabuğu çalıştırılamıyor\n" + +msgid "" +"\n" +"shell returned " +msgstr "" +"\n" +"Program çıktı: " + +msgid "" +"\n" +"Cannot create pipes\n" +msgstr "" +"\n" +"Veri yolları oluşturulamıyor\n" + +msgid "" +"\n" +"Cannot fork\n" +msgstr "" +"\n" +"Çatallanamıyor\n" + +msgid "" +"\n" +"Cannot execute shell " +msgstr "" +"\n" +"Kabuk çalıştırılamıyor " + +msgid "" +"\n" +"Command terminated\n" +msgstr "" +"\n" +"Komut sonlandırıldı\n" + +msgid "XSMP lost ICE connection" +msgstr "XSMP, ICE bağlantısını kopardı" + +#, c-format +msgid "dlerror = \"%s\"" +msgstr "dlerror = \"%s\"" + +msgid "Opening the X display failed" +msgstr "X ekran açılışı başarısız oldu" + +msgid "XSMP handling save-yourself request" +msgstr "Kendini kurtarma isteği XSMP tarafından gerçekleştiriliyor" + +msgid "XSMP opening connection" +msgstr "XSMP bağlantıyı açıyor" + +msgid "XSMP ICE connection watch failed" +msgstr "XSMP ICE bağlantı izlemesi başarısız oldu" + +#, c-format +msgid "XSMP SmcOpenConnection failed: %s" +msgstr "XSMP SmcOpenConnection başarısız oldu: %s" + +msgid "At line" +msgstr "Satırda" + +#, c-format +msgid "Vim: Caught %s event\n" +msgstr "Vim: %s olayı yakalandı\n" + +msgid "close" +msgstr "kapat" + +msgid "logoff" +msgstr "oturumu kapat" + +msgid "shutdown" +msgstr "kapat" + +msgid "E371: Command not found" +msgstr "E371: Komut bulunamadı" + +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 üzerinde bulunamadı.\n" +"Dış komutlar tamamlandıktan sonra duraklamayacak.\n" +"Ek bilgi için :help win32-vimrun yazın." + +msgid "Vim Warning" +msgstr "Vim - Uyarı" + +#, c-format +msgid "shell returned %d" +msgstr "Program %d numaralı kod ile çıktı" + +msgid "E861: Cannot open a second popup with a terminal" +msgstr "E861: Bir uçbirimle ikinci bir açılır pencere açılamıyor" + +msgid "E450: buffer number, text or a list required" +msgstr "E450: Arabellek numarası, metin veya liste gerekiyor" + +#, c-format +msgid "E997: Tabpage not found: %d" +msgstr "E997: Sekme bulunamadı: %d" + +#, c-format +msgid "E993: window %d is not a popup window" +msgstr "E993: %d penceresi bir açılır pencere değil" + +msgid "E994: Not allowed in a popup window" +msgstr "E994: Açılır pencere içinde izin verilmiyor" + +msgid "E863: Not allowed for a terminal in a popup window" +msgstr "E863: Açılır pencere içinde uçbirime izin verilmiyor" + +msgid "E750: First use \":profile start {fname}\"" +msgstr "E750: İlk kullanım \":profile start {dosyaadı}\"" + +msgid "E553: No more items" +msgstr "E553: Öge yok" + +msgid "E925: Current quickfix list was changed" +msgstr "E925: Geçerli hızlı düzelt listesi değiştirildi" + +msgid "E926: Current location list was changed" +msgstr "E926: Geçerli konum listesi değiştirildi" + +#, c-format +msgid "E372: Too many %%%c in format string" +msgstr "E372: Biçim dizisinde çok fazla %%%c" + +#, c-format +msgid "E373: Unexpected %%%c in format string" +msgstr "E373: Biçimlendirme dizisinde beklenmeyen %%%c" + +msgid "E374: Missing ] in format string" +msgstr "E374: Biçimlendirme dizisinde ] eksik" + +#, c-format +msgid "E375: Unsupported %%%c in format string" +msgstr "E375: Biçimlendirme dizisinde desteklenmeyen %%%c" + +#, c-format +msgid "E376: Invalid %%%c in format string prefix" +msgstr "E376: Biçimlendirme dizisi önekinde geçersiz %%%c" + +#, c-format +msgid "E377: Invalid %%%c in format string" +msgstr "E377: Biçimlendirme dizisinde geçersiz %%%c" + +msgid "E378: 'errorformat' contains no pattern" +msgstr "E378: 'errorformat' bir dizgi içermiyor" + +msgid "E379: Missing or empty directory name" +msgstr "E379: Eksik veya boş dizin adı" + +msgid "E924: Current window was closed" +msgstr "E924: Geçerli pencere kapatıldı" + +#, c-format +msgid "(%d of %d)%s%s: " +msgstr "(%d/%d)%s%s: " + +msgid " (line deleted)" +msgstr " (satır silindi)" + +#, c-format +msgid "%serror list %d of %d; %d errors " +msgstr "%shata listesi %d/%d; %d hata " + +msgid "E380: At bottom of quickfix stack" +msgstr "E380: Hızlı düzelt yığınının en dibinde" + +msgid "E381: At top of quickfix stack" +msgstr "E381: Hızlı düzelt yığınının en tepesinde" + +msgid "No entries" +msgstr "Girdi yok" + +msgid "Error file" +msgstr "Hata dosyası" + +msgid "E683: File name missing or invalid pattern" +msgstr "E683: Dosya adı eksik veya geçersiz dizgi" + +#, c-format +msgid "Cannot open file \"%s\"" +msgstr "\"%s\" dosyası açılamıyor" + +msgid "cannot have both a list and a \"what\" argument" +msgstr "ya birinci ya da son değişken belirtilmelidir" + +msgid "E681: Buffer is not loaded" +msgstr "E681: Arabellek yüklenemedi" + +msgid "E777: String or List expected" +msgstr "E777: Dizi veya liste bekleniyordu" + +#, c-format +msgid "E927: Invalid action: '%s'" +msgstr "E927: Geçersiz eylem: '%s'" + +#, c-format +msgid "E369: invalid item in %s%%[]" +msgstr "E369: %s%%[] içinde geçersiz öge" + +#, c-format +msgid "E769: Missing ] after %s[" +msgstr "E769: %s[ sonrasında ] eksik" + +msgid "E944: Reverse range in character class" +msgstr "E944: Karakter sınıfında geriye dönük erim" + +msgid "E945: Range too large in character class" +msgstr "E945: Karakter sınıfında erim çok büyük" + +#, c-format +msgid "E53: Unmatched %s%%(" +msgstr "E53: Eşleşmemiş %s%%(" + +#, c-format +msgid "E54: Unmatched %s(" +msgstr "E54: Eşleşmemiş %s(" + +#, c-format +msgid "E55: Unmatched %s)" +msgstr "E55: Eşleşmemiş %s)" + +msgid "E66: \\z( not allowed here" +msgstr "E66: \\z('ye burada izin verilmiyor" + +msgid "E67: \\z1 - \\z9 not allowed here" +msgstr "E67: \\z1 - \\z9'a burada izin verilmiyor" + +#, c-format +msgid "E69: Missing ] after %s%%[" +msgstr "E69: %s%%[ sonrasında ] eksik" + +#, c-format +msgid "E70: Empty %s%%[]" +msgstr "E70: Boş %s%%[]" + +msgid "E956: Cannot use pattern recursively" +msgstr "E956: Dizgi özyineli olarak kullanılamaz" + +#, c-format +msgid "E654: missing delimiter after search pattern: %s" +msgstr "E654: Arama dizgisi sonrasında eksik sınırlandırıcı: %s" + +#, c-format +msgid "E554: Syntax error in %s{...}" +msgstr "E554: %s{...} içinde sözdizimi hatası" + +#, c-format +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA regexp) %s tekrar edemiyor" + +msgid "" +"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " +"used " +msgstr "" +"E864: \\%#= sonrasında yalnızca 0, 1, veya 2 gelebilir. Otomatik motor " +"kullanılacak " + +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Şu dizgi için düzenli ifade iz sürme motoruna geçiliyor: " + +msgid "E65: Illegal back reference" +msgstr "E65: Geçersiz dönüş başvurusu" + +msgid "E63: invalid use of \\_" +msgstr "E63: Geçersiz kullanım: \\_" + +#, c-format +msgid "E64: %s%c follows nothing" +msgstr "E64: %s%c tek başına kullanılıyor" + +msgid "E68: Invalid character after \\z" +msgstr "E68: \\z sonrası geçersiz karakter" + +#, c-format +msgid "E678: Invalid character after %s%%[dxouU]" +msgstr "E678: %s%%[dxouU] sonrası geçersiz karakter" + +#, c-format +msgid "E71: Invalid character after %s%%" +msgstr "E71: %s%% sonrası geçersiz karakter" + +#, c-format +msgid "E59: invalid character after %s@" +msgstr "E59: %s@ sonrası geçersiz karakter" + +#, c-format +msgid "E60: Too many complex %s{...}s" +msgstr "E60: Çok fazla karmaşık %s{...}(lar)" + +#, c-format +msgid "E61: Nested %s*" +msgstr "E61: İç içe geçmiş %s*" + +#, c-format +msgid "E62: Nested %s%c" +msgstr "E62: İç içe geçmiş %s%c" + +msgid "E50: Too many \\z(" +msgstr "E50: Çok fazla \\z(" + +#, c-format +msgid "E51: Too many %s(" +msgstr "E51: Çok fazla %s(" + +msgid "E52: Unmatched \\z(" +msgstr "E52: Eşleşmemiş \\z(" + +msgid "E339: Pattern too long" +msgstr "E339: Dizgi çok uzun" + +msgid "External submatches:\n" +msgstr "Dış alteşleşmeler:\n" + +msgid "E865: (NFA) Regexp end encountered prematurely" +msgstr "E865: (BSO) Düzenli ifade sonu çok erken geldi" + +#, c-format +msgid "E866: (NFA regexp) Misplaced %c" +msgstr "E866: (BSO düzenli ifadesi) Yanlış yere koyulmuş %c" + +#, c-format +msgid "E877: (NFA regexp) Invalid character class: %d" +msgstr "E877: (BSO düzenli ifadesi) Geçersiz karakter sınıfı: %d" + +msgid "E951: \\% value too large" +msgstr "E951: \\% çok büyük bir değer" + +#, c-format +msgid "E867: (NFA) Unknown operator '\\z%c'" +msgstr "E867: (BSO) Bilinmeyen işleç '\\z%c'" + +#, c-format +msgid "E867: (NFA) Unknown operator '\\%%%c'" +msgstr "E867: (BSO) Bilinmeyen işleç '\\%%%c'" + +msgid "E868: Error building NFA with equivalence class!" +msgstr "E868: Eşdeğerli sınıf ile BSO inşa ederken hata!" + +#, c-format +msgid "E869: (NFA) Unknown operator '\\@%c'" +msgstr "E869: (BSO) Bilinmeyen işleç '\\@%c'" + +msgid "E870: (NFA regexp) Error reading repetition limits" +msgstr "E870: (BSO düzenli ifadesi) Yineleme sınırlarımı okurken hata" + +msgid "E871: (NFA regexp) Can't have a multi follow a multi" +msgstr "E871: (BSO düzenli ifadesi) Bir çoklunun ardından çoklu gelemez" + +msgid "E872: (NFA regexp) Too many '('" +msgstr "E872: (BSO düzenli ifadesi) Çok fazla '('" + +msgid "E879: (NFA regexp) Too many \\z(" +msgstr "E879: (BSO düzenli ifadesi) Çok fazla \\z(" + +msgid "E873: (NFA regexp) proper termination error" +msgstr "E873: (BSO düzenli ifadesi) Düzgün sonlandırma hatası" + +msgid "Could not open temporary log file for writing, displaying on stderr... " +msgstr "" +"Geçici günlük dosyası yazma için açılamıyor, stderr'de görüntüleniyor..." + +msgid "E874: (NFA) Could not pop the stack!" +msgstr "E874: (BSO) Yığın çıkartılamadı!" + +msgid "" +"E875: (NFA regexp) (While converting from postfix to NFA), too many states " +"left on stack" +msgstr "" +"E875: (BSO düzenli ifadesi) (Art takı'dan BSO'ya çevirirken), yığında çok " +"fazla durum bırakıldı" + +msgid "E876: (NFA regexp) Not enough space to store the whole NFA " +msgstr "" +"E876: (BSO düzenli ifadesi) Tüm BSO'yu depolamak için yeterli alan yok " + +msgid "E878: (NFA) Could not allocate memory for branch traversal!" +msgstr "E878: (BSO) Dal gezinmesi için bellek ayrılamadı!" + +msgid "E748: No previously used register" +msgstr "E748: Daha önce kullanılan bir yazmaç yok" + +#, c-format +msgid "freeing %ld lines" +msgstr "%ld satırlık yer açılıyor" + +#, c-format +msgid " into \"%c" +msgstr " \"%c" + +#, c-format +msgid "block of %ld line yanked%s" +msgid_plural "block of %ld lines yanked%s" +msgstr[0] "%ld satırlık blok şuraya kopyalandı:%s" +msgstr[1] "%ld satırlık blok şuraya kopyalandı:%s" + +#, c-format +msgid "%ld line yanked%s" +msgid_plural "%ld lines yanked%s" +msgstr[0] "%ld satır şuraya kopyalandı:%s" +msgstr[1] "%ld satır şuraya kopyalandı:%s" + +#, c-format +msgid "E353: Nothing in register %s" +msgstr "E353: Yazmaç %s boş" + +msgid "" +"\n" +"Type Name Content" +msgstr "" +"\n" +"Tür Ad İçerik" + +msgid "" +"E883: search pattern and expression register may not contain two or more " +"lines" +msgstr "" +"E883: Arama dizgisi ve ifade yazmacı iki veya daha fazla satır içeremez" + +msgid " VREPLACE" +msgstr " SANAL DEĞİŞTİR" + +msgid " REPLACE" +msgstr " DEĞİŞTİR" + +msgid " REVERSE" +msgstr " GERİ AL" + +msgid " INSERT" +msgstr " EKLE" + +msgid " (insert)" +msgstr " (ekle)" + +msgid " (replace)" +msgstr " (değiştir)" + +msgid " (vreplace)" +msgstr " (sanal değiştir)" + +msgid " Hebrew" +msgstr " İbranca" + +msgid " Arabic" +msgstr " Arapça" + +msgid " (paste)" +msgstr " (yapıştır)" + +msgid " VISUAL" +msgstr " GÖRSEL" + +msgid " VISUAL LINE" +msgstr " GÖRSEL SATIR" + +msgid " VISUAL BLOCK" +msgstr " GÖRSEL BLOK" + +msgid " SELECT" +msgstr " SEÇ" + +msgid " SELECT LINE" +msgstr " SATIR SEÇ" + +msgid " SELECT BLOCK" +msgstr " BLOK SEÇ" + +msgid "recording" +msgstr "kaydediliyor" + +#, c-format +msgid "Searching for \"%s\" in \"%s\"" +msgstr "\"%s\", \"%s\" içinde aranıyor" + +#, c-format +msgid "Searching for \"%s\"" +msgstr "\"%s\" aranıyor" + +#, c-format +msgid "not found in '%s': \"%s\"" +msgstr "'%s' içinde bulunamadı: \"%s\"" + +msgid "Source Vim script" +msgstr "Vim betiği kaynak al" + +#, c-format +msgid "Cannot source a directory: \"%s\"" +msgstr "Dizin kaynak alınamıyor: \"%s\"" + +#, c-format +msgid "could not source \"%s\"" +msgstr "\"%s\" kaynak alınamadı" + +#, c-format +msgid "line %ld: could not source \"%s\"" +msgstr "%ld. satır: \"%s\" kaynak alınamadı" + +#, c-format +msgid "sourcing \"%s\"" +msgstr "\"%s\" kaynak alınıyor" + +#, c-format +msgid "line %ld: sourcing \"%s\"" +msgstr "%ld. satır: \"%s\" kaynak alınıyor" + +#, c-format +msgid "finished sourcing %s" +msgstr "%s kaynak alınması bitti" + +#, c-format +msgid "continuing in %s" +msgstr "%s içinde sürdürülüyor" + +msgid "modeline" +msgstr "kip satırı" + +msgid "--cmd argument" +msgstr "--cmd değişkeni" + +msgid "-c argument" +msgstr "-c değişkeni" + +msgid "environment variable" +msgstr "ortam değişkeni" + +msgid "error handler" +msgstr "hata işleyicisi" + +msgid "W15: Warning: Wrong line separator, ^M may be missing" +msgstr "W15: Uyarı: Yanlış satır ayırıcısı, ^M eksik olabilir" + +msgid "E167: :scriptencoding used outside of a sourced file" +msgstr "E167: :scriptencoding kaynak alınmış bir dosyanın dışında kullanıldı" + +msgid "E984: :scriptversion used outside of a sourced file" +msgstr "E984: :scriptversion kaynak alınmış bir dosyanın dışında kullanıldı" + +#, c-format +msgid "E999: scriptversion not supported: %d" +msgstr "E999: desteklenmeyen scriptversion: %d" + +msgid "E168: :finish used outside of a sourced file" +msgstr "E168: :finish kaynak alınmış bir dosyanın dışında kullanıldı" + +#, c-format +msgid "E383: Invalid search string: %s" +msgstr "E383: Geçersiz arama dizisi: %s" + +#, c-format +msgid "E384: search hit TOP without match for: %s" +msgstr "E384: Arama dosyanın BAŞINA vardı, %s bulunamadı" + +#, c-format +msgid "E385: search hit BOTTOM without match for: %s" +msgstr "E385: Arama dosyanın SONUNA vardı, %s bulunamadı" + +msgid "E386: Expected '?' or '/' after ';'" +msgstr "E386: ';' sonrasında '?' veya '/' bekleniyordu" + +msgid " (includes previously listed match)" +msgstr " (daha önce listelenen eşleşmeyi içerir)" + +msgid "--- Included files " +msgstr "--- İçerilen dosyalar " + +msgid "not found " +msgstr "bulunamadı " + +msgid "in path ---\n" +msgstr "yolda ---\n" + +msgid " (Already listed)" +msgstr " (Hâlihazırda listelenmiş)" + +msgid " NOT FOUND" +msgstr " BULUNAMADI" + +#, c-format +msgid "Scanning included file: %s" +msgstr "İçerilen dosya taranıyor: %s" + +#, c-format +msgid "Searching included file %s" +msgstr "İçerilen dosya %s aranıyor" + +msgid "E387: Match is on current line" +msgstr "E387: Eşleşme şu anda bulunulan satırda" + +msgid "All included files were found" +msgstr "Tüm içerilen dosyalar bulundu" + +msgid "No included files" +msgstr "İçerilen dosya yok" + +msgid "E388: Couldn't find definition" +msgstr "E388: Tanım bulunamadı" + +msgid "E389: Couldn't find pattern" +msgstr "E389: Dizgi bulunamadı" + +msgid "Save View" +msgstr "Görünümü Kaydet" + +msgid "Save Session" +msgstr "Oturumu Kaydet" + +msgid "Save Setup" +msgstr "Kurulumu Kaydet" + +msgid "[Deleted]" +msgstr "[Silindi]" + +msgid "" +"\n" +"--- Signs ---" +msgstr "" +"\n" +"--- İşaretler ---" + +#, c-format +msgid "Signs for %s:" +msgstr "%s için işaretler:" + +#, c-format +msgid " group=%s" +msgstr " grup=%s" + +#, c-format +msgid " line=%ld id=%d%s name=%s priority=%d" +msgstr " satır=%ld id=%d%s ad=%s öncelik=%d" + +msgid "E612: Too many signs defined" +msgstr "E612: Çok fazla işaret tanımlanmış" + +#, c-format +msgid "E239: Invalid sign text: %s" +msgstr "E239: Geçersiz işaret metni: %s" + +#, c-format +msgid "E155: Unknown sign: %s" +msgstr "E155: Bilinmeyen işaret: %s" + +#, c-format +msgid "E885: Not possible to change sign %s" +msgstr "E885: %s işaretini değiştirmek olanaklı değil" + +msgid "E159: Missing sign number" +msgstr "E159: İşaret numarası eksik" + +#, c-format +msgid "E157: Invalid sign ID: %d" +msgstr "E157: Geçersiz işaret kimliği: %d" + +msgid "E934: Cannot jump to a buffer that does not have a name" +msgstr "E934: Adı olmayan bir arabelleğe atlamak olanaklı değil" + +#, c-format +msgid "E160: Unknown sign command: %s" +msgstr "E160: Bilinmeyen işaret komutu: %s" + +msgid "E156: Missing sign name" +msgstr "E156: İşaret adı eksik" + +msgid " (NOT FOUND)" +msgstr " (BULUNAMADI)" + +msgid " (not supported)" +msgstr " (desteklenmiyor)" + +#, c-format +msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\"" +msgstr "Uyarı: Sözcük listesi \"%s_%s.spl\" veya \"%s_ascii.spl\" bulunamıyor" + +#, c-format +msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\"" +msgstr "Uyarı: Sözcük listesi \"%s.%s.spl\" veya \"%s.ascii.spl\" bulunamıyor" + +msgid "E797: SpellFileMissing autocommand deleted buffer" +msgstr "E797: SpellFileMissing otokomutu arabelleği sildi" + +#, c-format +msgid "Warning: region %s not supported" +msgstr "Uyarı: %s bölgesi desteklenmiyor" + +msgid "E752: No previous spell replacement" +msgstr "E752: Öncesinde düzeltilmiş bir yazım yok" + +#, c-format +msgid "E753: Not found: %s" +msgstr "E753: Bulunamadı: %s" + +msgid "E758: Truncated spell file" +msgstr "E758: Kırpılmış yazım dosyası" + +#, c-format +msgid "Trailing text in %s line %d: %s" +msgstr "%s içinde %d. satır ucunda fazladan metin: %s" + +#, c-format +msgid "Affix name too long in %s line %d: %s" +msgstr "%s içinde %d. satırda ek adı çok uzun: %s" + +msgid "E761: Format error in affix file FOL, LOW or UPP" +msgstr "E761: Ekler dosyası FOL, LOW veya UPP içinde biçimlendirme hatası" + +msgid "E762: Character in FOL, LOW or UPP is out of range" +msgstr "E762: FOL, LOW veya UPP içindeki karakterler erimin dışında" + +msgid "Compressing word tree..." +msgstr "Sözcük soyağacı sıkıştırılıyor..." + +#, c-format +msgid "Reading spell file \"%s\"" +msgstr "Yazım dosyası \"%s\" okunuyor" + +msgid "E757: This does not look like a spell file" +msgstr "E757: Bu bir yazım dosyasına benzemiyor" + +msgid "E771: Old spell file, needs to be updated" +msgstr "E771: Eski yazım dosyası, güncellenmesi gerekiyor" + +msgid "E772: Spell file is for newer version of Vim" +msgstr "E772: Yazım dosyası Vim'in daha yeni bir sürümü için" + +msgid "E770: Unsupported section in spell file" +msgstr "E770: Yazım dosyasında desteklenmeyen bölüm" + +#, c-format +msgid "E778: This does not look like a .sug file: %s" +msgstr "E778: Bu bir .sug dosyasına benzemiyor: %s" + +#, c-format +msgid "E779: Old .sug file, needs to be updated: %s" +msgstr "E779: Eski .sug dosyası, güncellenmesi gerekiyor: %s" + +#, c-format +msgid "E780: .sug file is for newer version of Vim: %s" +msgstr "E780: Bu .sug dosyası Vim'in daha yeni bir sürümü için: %s" + +#, c-format +msgid "E781: .sug file doesn't match .spl file: %s" +msgstr "E781: .sug dosyası .spl dosyasına eşleşmiyor: %s" + +#, c-format +msgid "E782: error while reading .sug file: %s" +msgstr "E782: .sug dosyasını okurken hata: %s" + +#, c-format +msgid "Reading affix file %s..." +msgstr "%s ekler dosyası okunuyor..." + +#, c-format +msgid "Conversion failure for word in %s line %d: %s" +msgstr "%s içinde %d. satırda sözcük için dönüştürme hatası: %s" + +#, c-format +msgid "Conversion in %s not supported: from %s to %s" +msgstr "%s içinde dönüştürme desteklenmiyor: %s konumundan %s konumuna" + +#, c-format +msgid "Invalid value for FLAG in %s line %d: %s" +msgstr "%s içinde %d. satırda BAYRAKTA geçersiz değer: %s" + +#, c-format +msgid "FLAG after using flags in %s line %d: %s" +msgstr "%s içinde %d. satırda bayraklardan sonra BAYRAK: %s" + +#, c-format +msgid "" +"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line " +"%d" +msgstr "" +"%s içinde %d. satırda PFX ögesinden sonra COMPOUNDFORBIDFLAG tanımlamak " +"hatalı sonuçlar verebilir" + +#, c-format +msgid "" +"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line " +"%d" +msgstr "" +"%s içinde %d. satırda PFX ögesinden sonra COMPOUNDPERMITFLAG tanımlamak " +"hatalı sonuçlar verebilir" + +#, c-format +msgid "Wrong COMPOUNDRULES value in %s line %d: %s" +msgstr "%s içinde %d. satırda yanlış COMPOUNDRULES değeri: %s" + +#, c-format +msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s" +msgstr "%s içinde %d. satırda yanlış COMPOUNDWORDMAX değeri: %s" + +#, c-format +msgid "Wrong COMPOUNDMIN value in %s line %d: %s" +msgstr "%s içinde %d. satırda yanlış COMPOUNDMIN değeri: %s" + +#, c-format +msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s" +msgstr "%s içinde %d. satırda yanlış COMPOUNDSYLMAX değeri: %s" + +#, c-format +msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s" +msgstr "%s içinde %d. satırda yanlış CHECKCOMPOUNDPATTERN değeri: %s" + +#, c-format +msgid "Different combining flag in continued affix block in %s line %d: %s" +msgstr "" +"%s içinde %d. satırdaki sürdürülen ek bloğunda farklı birleştirici bayrak: %s" + +#, c-format +msgid "Duplicate affix in %s line %d: %s" +msgstr "%s içinde %d. satırda yinelenen ek: %s" + +#, c-format +msgid "" +"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s " +"line %d: %s" +msgstr "" +"Ek aynı zamanda %s içinde %d. satırda BAD/RARE/KEEPCASE/NEEDAFFIX/" +"NEEDCOMPOUND/NOSUGGEST için de kullanılmış: %s" + +#, c-format +msgid "Expected Y or N in %s line %d: %s" +msgstr "%s içinde %d. satırda Y veya N bekleniyordu: %s" + +#, c-format +msgid "Broken condition in %s line %d: %s" +msgstr "%s içinde %d. satırda yerine getirilmeyen koşul: %s" + +#, c-format +msgid "Expected REP(SAL) count in %s line %d" +msgstr "%s içinde %d. satırda REP(SAL) toplam sayısı bekleniyordu" + +#, c-format +msgid "Expected MAP count in %s line %d" +msgstr "%s içinde %d. satırda MAP toplam sayısı bekleniyordu" + +#, c-format +msgid "Duplicate character in MAP in %s line %d" +msgstr "%s içinde %d. satırda MAP içinde yinelenen karakter" + +#, c-format +msgid "Unrecognized or duplicate item in %s line %d: %s" +msgstr "%s içinde %d. satırda yinelenen veya tanınmayan öge: %s" + +#, c-format +msgid "Missing FOL/LOW/UPP line in %s" +msgstr "%s içinde FOL/LOW/UPP satırı eksik" + +msgid "COMPOUNDSYLMAX used without SYLLABLE" +msgstr "COMPOUNDSYLMAX, SYLLABLE olmadan kullanılmış" + +msgid "Too many postponed prefixes" +msgstr "Çok fazla ertelenen önek" + +msgid "Too many compound flags" +msgstr "Çok fazla bileşik bayrak" + +msgid "Too many postponed prefixes and/or compound flags" +msgstr "Çok fazla ertelenen önek ve/veya bileşik bayrak" + +#, c-format +msgid "Missing SOFO%s line in %s" +msgstr "%s içinde SOFO%s satırı eksik" + +#, c-format +msgid "Both SAL and SOFO lines in %s" +msgstr "%s içinde hem SAL hem SOFO satırı" + +#, c-format +msgid "Flag is not a number in %s line %d: %s" +msgstr "%s içinde %d. satırda bayrak bir sayı değil: %s" + +#, c-format +msgid "Illegal flag in %s line %d: %s" +msgstr "%s içinde %d. satırda izin verilmeyen bayrak: %s" + +#, c-format +msgid "%s value differs from what is used in another .aff file" +msgstr "%s değeri diğer bir .aff dosyasında kullanılan değerden farklı" + +#, c-format +msgid "Reading dictionary file %s..." +msgstr "Sözlük dosyası %s okunuyor..." + +#, c-format +msgid "E760: No word count in %s" +msgstr "E760: %s içinde sözcük sayımı yok" + +#, c-format +msgid "line %6d, word %6ld - %s" +msgstr "satır %6d, sözcük %6ld - %s" + +#, c-format +msgid "Duplicate word in %s line %d: %s" +msgstr "%s içinde %d. satırda yinelenen sözcük: %s" + +#, c-format +msgid "First duplicate word in %s line %d: %s" +msgstr "%s içinde %d. satırdaki ilk yinelenen sözcük: %s" + +#, c-format +msgid "%d duplicate word(s) in %s" +msgstr "%d yinelenen sözcük, %s içinde" + +#, c-format +msgid "Ignored %d word(s) with non-ASCII characters in %s" +msgstr "%d sözcük %s içinde ASCII olmayan karakterler içerdiğinden yok sayıldı" + +#, c-format +msgid "Reading word file %s..." +msgstr "Sözcük dosyası %s okunuyor..." + +#, c-format +msgid "Conversion failure for word in %s line %ld: %s" +msgstr "%s içinde %ld. satırda sözcük için dönüştürme hatası: %s" + +#, c-format +msgid "Duplicate /encoding= line ignored in %s line %ld: %s" +msgstr "%s içinde %ld. satırda yinelenen /encoding= satırı yok sayıldı: %s" + +#, c-format +msgid "/encoding= line after word ignored in %s line %ld: %s" +msgstr "" +"%s içinde %ld. satırda sözcükten sonra gelen /encoding= yok sayıldı: %s" + +#, c-format +msgid "Duplicate /regions= line ignored in %s line %ld: %s" +msgstr "%s içinde %ld. satırda yinelenen /regions= satırı yok sayıldı: %s" + +#, c-format +msgid "Too many regions in %s line %ld: %s" +msgstr "%s içinde %ld. satırda çok fazla bölge: %s" + +#, c-format +msgid "/ line ignored in %s line %ld: %s" +msgstr "%s içinde %ld. satırda / satırı yok sayılıyor: %s" + +#, c-format +msgid "Invalid region nr in %s line %ld: %s" +msgstr "%s içinde %ld. satırda geçersiz bölge numarası: %s" + +#, c-format +msgid "Unrecognized flags in %s line %ld: %s" +msgstr "%s içinde %ld. satırda tanınmayan bayraklar: %s" + +#, c-format +msgid "Ignored %d words with non-ASCII characters" +msgstr "ASCII olmayan karakter içeren %d sözcük yok sayıldı" + +msgid "E845: Insufficient memory, word list will be incomplete" +msgstr "E845: Yetersiz bellek, sözcük listesi tam olmayacak" + +#, c-format +msgid "Compressed %s: %ld of %ld nodes; %ld (%ld%%) remaining" +msgstr "%s sıkıştırılıyor: %ld/%ld uç sıkıştırıldı; %ld (%%%ld) kalan" + +msgid "Reading back spell file..." +msgstr "Yazım dosyası yeniden okunuyor..." + +msgid "Performing soundfolding..." +msgstr "Sesler evriştiriliyor..." + +#, c-format +msgid "Number of words after soundfolding: %ld" +msgstr "Ses evriştirme sonrası sözcük sayısı: %ld" + +#, c-format +msgid "Total number of words: %d" +msgstr "Toplam sözcük sayısı: %d" + +#, c-format +msgid "Writing suggestion file %s..." +msgstr "Öneriler dosyası %s yazılıyor..." + +#, c-format +msgid "Estimated runtime memory use: %d bytes" +msgstr "Tahmini çalıştırılan bellek kullanımı: %d bit" + +msgid "E751: Output file name must not have region name" +msgstr "E751: Çıktı dosyası bir bölge adı içermemelidir" + +#, c-format +msgid "E754: Only up to %d regions supported" +msgstr "E754: En çok %d bölgeye kadar desteklenmektedir" + +#, c-format +msgid "E755: Invalid region in %s" +msgstr "E755: %s içinde geçersiz bölge" + +msgid "Warning: both compounding and NOBREAK specified" +msgstr "Uyarı: Hem bileştirme hem NOBREAK belirtilmiş" + +#, c-format +msgid "Writing spell file %s..." +msgstr "Yazım dosyası %s yazılıyor..." + +msgid "Done!" +msgstr "Yapıldı!" + +#, c-format +msgid "E765: 'spellfile' does not have %d entries" +msgstr "E765: 'spellfile' içinde %d adet girdi yok" + +#, c-format +msgid "Word '%.*s' removed from %s" +msgstr "'%.*s' sözcüğü %s içinden çıkartıldı" + +#, c-format +msgid "Word '%.*s' added to %s" +msgstr "'%.*s' sözcüğü %s dosyasına eklendi" + +msgid "E763: Word characters differ between spell files" +msgstr "E763: Sözcük karakterleri yazım dosyaları arasında ayrım gösteriyor" + +msgid "E783: duplicate char in MAP entry" +msgstr "E783: MAP girdisinde yinelenen karakter" + +msgid "Sorry, no suggestions" +msgstr "Üzgünüm, şu an için bir önerim yok" + +#, c-format +msgid "Sorry, only %ld suggestions" +msgstr "Üzgünüm, yalnızca %ld öneri" + +#, c-format +msgid "Change \"%.*s\" to:" +msgstr "\"%.*s\" şuna değiştirilecek:" + +#, c-format +msgid " < \"%.*s\"" +msgstr " < \"%.*s\"" + +#, c-format +msgid "E390: Illegal argument: %s" +msgstr "E390: İzin verilmeyen değişken: %s" + +msgid "No Syntax items defined for this buffer" +msgstr "Bu arabellek için sözdizim ögeleri tanımlanmamış" + +msgid "'redrawtime' exceeded, syntax highlighting disabled" +msgstr "'redrawtime' aşıldı, sözdizim vurgulaması kapatıldı" + +msgid "syntax conceal on" +msgstr "sözdizim gizlemesi açık" + +msgid "syntax conceal off" +msgstr "sözdizim gizlemesi kapalı" + +msgid "syntax case ignore" +msgstr "sözdizim BÜYÜK/küçük harf yok say" + +msgid "syntax case match" +msgstr "sözdizim BÜYÜK/küçük harfe duyarlı" + +msgid "syntax foldlevel start" +msgstr "sözdizim kıvırma düzeyi başlangıcı" + +msgid "syntax foldlevel minimum" +msgstr "sözdizim kıvırma düzeyi an az" + +msgid "syntax spell toplevel" +msgstr "bir sözdizim içinde olmayan metinde yazım denetimi yap" + +msgid "syntax spell notoplevel" +msgstr "bir sözdizim içinde olmayan metinde yazım denetimi yapma" + +msgid "syntax spell default" +msgstr "@Spell kümesi varsa yazım denetimi yapma (öntanımlı)" + +msgid "syntax iskeyword " +msgstr "sözdizim anahtar sözcük" + +msgid "syntax iskeyword not set" +msgstr "sözdizim anahtar sözcük ayarlanmamış" + +#, c-format +msgid "E391: No such syntax cluster: %s" +msgstr "E391: Böyle bir sözdizim kümesi yok: %s" + +msgid "syncing on C-style comments" +msgstr "C biçemli komutlar eşitleniyor" + +msgid "no syncing" +msgstr "eşitleme yok" + +msgid "syncing starts at the first line" +msgstr "eşitleme ilk satırda başlar" + +msgid "syncing starts " +msgstr "eşitleme başlangıcı " + +msgid " lines before top line" +msgstr " satır, en üst satır öncesi" + +msgid "" +"\n" +"--- Syntax sync items ---" +msgstr "" +"\n" +"--- Sözdizim eşitleme ögeleri ---" + +msgid "" +"\n" +"syncing on items" +msgstr "" +"\n" +"ögeler eşitleniyor" + +msgid "" +"\n" +"--- Syntax items ---" +msgstr "" +"\n" +"--- Sözdizim ögeleri ---" + +#, c-format +msgid "E392: No such syntax cluster: %s" +msgstr "E392: Böyle bir sözdizim kümesi yok: %s" + +msgid "from the first line" +msgstr "ilk satırdan" + +msgid "minimal " +msgstr "en az biçimde " + +msgid "maximal " +msgstr "en çok biçimde " + +msgid "; match " +msgstr "; eşleşme " + +msgid " line breaks" +msgstr " satır sonu" + +msgid "E395: contains argument not accepted here" +msgstr "E395: Burada kabul edilmeyen bir değişken içeriyor" + +msgid "E844: invalid cchar value" +msgstr "E844: Geçersiz cchar değeri" + +msgid "E393: group[t]here not accepted here" +msgstr "E393: group[t]here burada kabul edilmez" + +#, c-format +msgid "E394: Didn't find region item for %s" +msgstr "E394: %s için bölge ögesi bulunamadı" + +msgid "E397: Filename required" +msgstr "E397: Dosya adı gerekiyor" + +msgid "E847: Too many syntax includes" +msgstr "E847: Çok fazla sözdizim kuralı" + +#, c-format +msgid "E789: Missing ']': %s" +msgstr "E789: ']' eksik: %s" + +#, c-format +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: ']' sonrası fazladan karakter: %s]%s" + +#, c-format +msgid "E398: Missing '=': %s" +msgstr "E398: '=' eksik: %s" + +#, c-format +msgid "E399: Not enough arguments: syntax region %s" +msgstr "E399: Yetersiz değişken: %s sözdizim bölgesi" + +msgid "E848: Too many syntax clusters" +msgstr "E848: Çok fazla sözdizim kümesi" + +msgid "E400: No cluster specified" +msgstr "E400: Belirli bir küme yok" + +#, c-format +msgid "E401: Pattern delimiter not found: %s" +msgstr "E401: Dizgi sınırlandırıcısı bulunamadı: %s" + +#, c-format +msgid "E402: Garbage after pattern: %s" +msgstr "E402: Dizgiden sonra anlamsız veri: %s" + +msgid "E403: syntax sync: line continuations pattern specified twice" +msgstr "E403: Sözdizim eşitlemesi: Satır devamları dizgisi iki kez tanımlanmış" + +#, c-format +msgid "E404: Illegal arguments: %s" +msgstr "E404: İzin verilmeyen değişkenler: %s" + +#, c-format +msgid "E405: Missing equal sign: %s" +msgstr "E405: Eşittir imi eksik: %s" + +#, c-format +msgid "E406: Empty argument: %s" +msgstr "E406: Boş değişken: %s" + +#, c-format +msgid "E407: %s not allowed here" +msgstr "E407: %s burada kullanılamaz" + +#, c-format +msgid "E408: %s must be first in contains list" +msgstr "E408: %s öncelikle içerenler listesinde olmalı" + +#, c-format +msgid "E409: Unknown group name: %s" +msgstr "E409: Bilinmeyen grup adı: %s" + +#, c-format +msgid "E410: Invalid :syntax subcommand: %s" +msgstr "E410: Geçersiz :syntax altkomutu: %s" + +msgid "" +" TOTAL COUNT MATCH SLOWEST AVERAGE NAME PATTERN" +msgstr "" +" TOPLAM SAYI EŞ EN YAVAŞ ORTALAMA AD DİZGİ" + +msgid "E555: at bottom of tag stack" +msgstr "E555: Etiket yığınının en dibinde" + +msgid "E556: at top of tag stack" +msgstr "E556: Etiket yığınının en tepesinde" + +msgid "E986: cannot modify the tag stack within tagfunc" +msgstr "E986: Etiket yığını tagfunc dahilinde değiştirilemiyor" + +msgid "E987: invalid return value from tagfunc" +msgstr "E987: Etiket işlevinden geçersiz dönüş değeri" + +msgid "E425: Cannot go before first matching tag" +msgstr "E425: İlk eşleşen etiketten önceye gidilemiyor" + +#, c-format +msgid "E426: tag not found: %s" +msgstr "E426: Etiket bulunamadı: %s" + +msgid "E427: There is only one matching tag" +msgstr "E427: Eşleşen yalnızca bir etiket var" + +msgid "E428: Cannot go beyond last matching tag" +msgstr "E428: Son eşleşen etiketten öteye gidilemiyor" + +#, c-format +msgid "File \"%s\" does not exist" +msgstr "Dosya \"%s\" mevcut değil" + +#, c-format +msgid "tag %d of %d%s" +msgstr "etiket %d/%d%s" + +msgid " or more" +msgstr " veya daha fazla" + +msgid " Using tag with different case!" +msgstr " Etiket değişik bir durumla kullanılıyor!" + +#, c-format +msgid "E429: File \"%s\" does not exist" +msgstr "E429: Dosya \"%s\" mevcut değil" + +msgid " # pri kind tag" +msgstr " # ön tür etiket" + +msgid "file\n" +msgstr "dosya\n" + +msgid "" +"\n" +" # TO tag FROM line in file/text" +msgstr "" +"\n" +" # ETİKETE SATIRDAN dosya/metin içinde" + +#, c-format +msgid "Searching tags file %s" +msgstr "Etiket dosyası %s aranıyor" + +#, c-format +msgid "E430: Tag file path truncated for %s\n" +msgstr "E430: %s için etiket dosyası yolu kırpıldı\n" + +#, c-format +msgid "E431: Format error in tags file \"%s\"" +msgstr "E431: Etiket dosyası \"%s\" içinde biçim hatası" + +#, c-format +msgid "Before byte %ld" +msgstr "%ld bitinden önce" + +#, c-format +msgid "E432: Tags file not sorted: %s" +msgstr "E432: Etiket dosyası sıralanmadı: %s" + +msgid "E433: No tags file" +msgstr "E433: Etiket dosyası yok" + +msgid "Ignoring long line in tags file" +msgstr "Etiket dosyasındaki uzun satır yok sayılıyor" + +msgid "E434: Can't find tag pattern" +msgstr "E434: Etiket dizgisi bulunamıyor" + +msgid "E435: Couldn't find tag, just guessing!" +msgstr "E435: Etiket bulunamadı, tahmin ediliyor!" + +#, c-format +msgid "Duplicate field name: %s" +msgstr "Yinelenen alan adı: %s" + +msgid "' not known. Available builtin terminals are:" +msgstr "' bilinmiyor. Kullanılabilir uçbirimler şunlar:" + +msgid "defaulting to '" +msgstr "öntanımlı olarak '" + +msgid "E557: Cannot open termcap file" +msgstr "E557: termcap dosyası açılamıyor" + +msgid "E558: Terminal entry not found in terminfo" +msgstr "E558: terminfo içinde uçbirim girdisi bulunamadı" + +msgid "E559: Terminal entry not found in termcap" +msgstr "E559: termcap içinde uçbirim bilgisi bulunamadı" + +#, c-format +msgid "E436: No \"%s\" entry in termcap" +msgstr "E436: termcap içinde \"%s\" girdisi yok" + +msgid "E437: terminal capability \"cm\" required" +msgstr "E437: \"cm\" uçbirim kabiliyeti gerekiyor" + +msgid "" +"\n" +"--- Terminal keys ---" +msgstr "" +"\n" +"--- Uçbirim düğmeleri ---" + +msgid "Cannot open $VIMRUNTIME/rgb.txt" +msgstr "$VIMRUNTIME/rgb.txt açılamıyor" + +#, c-format +msgid "E181: Invalid attribute: %s" +msgstr "E181: Geçersiz öznitelik: %s" + +msgid "E279: Sorry, ++shell is not supported on this system" +msgstr "E279: Üzgünüm, ++shell bu sistemde desteklenmiyor" + +#, c-format +msgid "Kill job in \"%s\"?" +msgstr "\"%s\" içindeki iş sonlandırılsın mı?" + +msgid "Terminal" +msgstr "Uçbirim" + +msgid "Terminal-finished" +msgstr "Uçbirim-bitti" + +msgid "active" +msgstr "etkin" + +msgid "running" +msgstr "çalışıyor" + +msgid "finished" +msgstr "bitti" + +msgid "E958: Job already finished" +msgstr "E958: İş bitti bile" + +#, c-format +msgid "E953: File exists: %s" +msgstr "E953: Dosya mevcut: %s" + +msgid "E955: Not a terminal buffer" +msgstr "E955: Bir uçbirim arabelleği değil" + +msgid "E982: ConPTY is not available" +msgstr "E982: ConPTY mevcut değil" + +#, c-format +msgid "E971: Property type %s does not exist" +msgstr "E971: Özellik türü %s mevcut değil" + +#, c-format +msgid "E964: Invalid column number: %ld" +msgstr "E964: Geçersiz sütun numarası: %ld" + +#, c-format +msgid "E966: Invalid line number: %ld" +msgstr "E966: Geçersiz satır numarası: %ld" + +msgid "E965: missing property type name" +msgstr "E965: Özellik tür adı eksik" + +msgid "E275: Cannot add text property to unloaded buffer" +msgstr "E275: Bellekten kaldırılmış arabelleğe metin özelliği eklenemiyor" + +msgid "E967: text property info corrupted" +msgstr "E967: Metin özellik bilgisi hasarlı" + +msgid "E968: Need at least one of 'id' or 'type'" +msgstr "E968: En azından bir 'id' veya 'type' gerekli" + +msgid "E860: Need 'id' and 'type' with 'both'" +msgstr "E860: 'both' ile 'id' ve 'type' gerekli" + +#, c-format +msgid "E969: Property type %s already defined" +msgstr "E969: Özellik türü %s hâlihazırda tanımlanmış" + +#, c-format +msgid "E970: Unknown highlight group name: '%s'" +msgstr "E970: Bilinmeyen vurgulama grup adı: '%s'" + +msgid "(Invalid)" +msgstr "(Geçersiz)" + +msgid "%a %b %d %H:%M:%S %Y" +msgstr "%a %b %d %H:%M:%S %Y" + +#, c-format +msgid "%ld second ago" +msgid_plural "%ld seconds ago" +msgstr[0] "%ld saniye önce" +msgstr[1] "%ld saniye önce" + +msgid "E805: Using a Float as a Number" +msgstr "E805: Bir Kayan Noktalı Değer, Sayı yerine kullanılıyor" + +msgid "E703: Using a Funcref as a Number" +msgstr "E703: Bir Funcref, Sayı yerine kullanılıyor" + +msgid "E745: Using a List as a Number" +msgstr "E745: Bir Liste, Sayı yerine kullanılıyor" + +msgid "E728: Using a Dictionary as a Number" +msgstr "E728: Bir Sözlük, Sayı yerine kullanılıyor" + +msgid "E611: Using a Special as a Number" +msgstr "E611: Bir Özel, Sayı yerine kullanılıyor" + +msgid "E910: Using a Job as a Number" +msgstr "E910: Bir İş, Sayı yerine kullanılıyor" + +msgid "E913: Using a Channel as a Number" +msgstr "E913: Bir Kanal, Sayı yerine kullanılıyor" + +msgid "E974: Using a Blob as a Number" +msgstr "E974: Bir İkili Geniş Nesne, Sayı yerine kullanılıyor" + +msgid "E891: Using a Funcref as a Float" +msgstr "E891: Bir Funcref, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E892: Using a String as a Float" +msgstr "E892: Bir Dizi, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E893: Using a List as a Float" +msgstr "E893: Bir Liste, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: Bir Sözlük, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E362: Using a boolean value as a Float" +msgstr "E362: Bir Boole Değeri, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E907: Using a special value as a Float" +msgstr "E907: Bir Özel Değer, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E911: Using a Job as a Float" +msgstr "E911: Bir İş, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E914: Using a Channel as a Float" +msgstr "E914: Bir Kanal, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E975: Using a Blob as a Float" +msgstr "E975: Bir İkili Geniş Nesne, Kayan Noktalı Değer yerine kullanılıyor" + +msgid "E729: using Funcref as a String" +msgstr "E729: Funcref bir Dizi yerine kullanılıyor" + +msgid "E730: using List as a String" +msgstr "E730: Liste bir Dizi yerine kullanılıyor" + +msgid "E731: using Dictionary as a String" +msgstr "E731: Sözlük bir Dizi yerine kullanılıyor" + +msgid "E976: using Blob as a String" +msgstr "E976: İkili Geniş Nesne bir Dizi yerine kullanılıyor" + +msgid "E977: Can only compare Blob with Blob" +msgstr "" +"E977: Bir ikili geniş öğe yalnızca kendinden bir başkası ile " +"karşılaştırılabilir" + +msgid "E691: Can only compare List with List" +msgstr "E691: Bir liste yalnızca başka bir liste ile karşılaştırılabilir" + +msgid "E692: Invalid operation for List" +msgstr "E692: Geçersiz liste işlemi" + +msgid "E735: Can only compare Dictionary with Dictionary" +msgstr "E735: Bir sözlük yalnızca başka bir sözlük ile karşılaştırılabilir" + +msgid "E736: Invalid operation for Dictionary" +msgstr "E736: Geçersiz sözlük işlemi" + +msgid "E694: Invalid operation for Funcrefs" +msgstr "E694: Geçersiz Funcref işlemi" + +#, c-format +msgid "E112: Option name missing: %s" +msgstr "E112: Seçenek adı eksik: %s" + +msgid "E973: Blob literal should have an even number of hex characters" +msgstr "" +"E973: İkili geniş nesne hazır bilgisi çift onalt. karakterlere iye olmalıdır" + +#, c-format +msgid "E114: Missing quote: %s" +msgstr "E114: Tırnak imi eksik: %s" + +#, c-format +msgid "E115: Missing quote: %s" +msgstr "E115: Tırnak imi eksik: %s" + +msgid "new shell started\n" +msgstr "yeni kabuk başlatıldı\n" + +msgid "Vim: Error reading input, exiting...\n" +msgstr "Vim: Girdi okunurken hata, çıkılıyor...\n" + +msgid "E881: Line count changed unexpectedly" +msgstr "E881: Satır sayısı beklenmeyen bir biçimde değişti" + +msgid "No undo possible; continue anyway" +msgstr "Geri alma olanaklı değil; bekleme yapma" + +#, c-format +msgid "E828: Cannot open undo file for writing: %s" +msgstr "E828: Geri al dosyası yazma için açılamıyor: %s" + +#, c-format +msgid "E825: Corrupted undo file (%s): %s" +msgstr "E825: Hasarlı geri al dosyası (%s): %s" + +msgid "Cannot write undo file in any directory in 'undodir'" +msgstr "Geri al dosyası 'undodir' içindeki herhangi bir dizine yazılamıyor" + +#, c-format +msgid "Will not overwrite with undo file, cannot read: %s" +msgstr "Geri al dosyası üzerine yazmayacak, bu okunamıyor: %s" + +#, c-format +msgid "Will not overwrite, this is not an undo file: %s" +msgstr "Üzerine yazılmayacak, bu bir geri al dosyası değil: %s" + +msgid "Skipping undo file write, nothing to undo" +msgstr "Geri al yazması atlanıyor, geri alınacak bir şey yok" + +#, c-format +msgid "Writing undo file: %s" +msgstr "Geri al dosyası yazılıyor: %s" + +#, c-format +msgid "E829: write error in undo file: %s" +msgstr "E829: Geri al dosyasında yazma hatası: %s" + +#, c-format +msgid "Not reading undo file, owner differs: %s" +msgstr "Geri al dosyası okunmayacak, sahibi farklı: %s" + +#, c-format +msgid "Reading undo file: %s" +msgstr "Geri al dosyası okunuyor: %s" + +#, c-format +msgid "E822: Cannot open undo file for reading: %s" +msgstr "E822: Geri al dosyası okuma için açılamıyor: %s" + +#, c-format +msgid "E823: Not an undo file: %s" +msgstr "E823: Bir geri al dosyası değil: %s" + +#, c-format +msgid "E832: Non-encrypted file has encrypted undo file: %s" +msgstr "E832: Şifrelenmemiş dosyanın şifrelenmiş bir geri al dosyası var: %s" + +#, c-format +msgid "E826: Undo file decryption failed: %s" +msgstr "E826: Geri al dosyası şifre çözümü başarısız oldu: %s" + +#, c-format +msgid "E827: Undo file is encrypted: %s" +msgstr "E827: Geri al dosyası şifrelenmiş: %s" + +#, c-format +msgid "E824: Incompatible undo file: %s" +msgstr "E824: Uyumsuz geri al dosyası: %s" + +msgid "File contents changed, cannot use undo info" +msgstr "Dosya içeriği değişmiş, geri alma bilgisi kullanılamaz" + +#, c-format +msgid "Finished reading undo file %s" +msgstr "%s geri al dosyasının okunması bitti" + +msgid "Already at oldest change" +msgstr "Hâlihazırda en eski değişiklik üzerinde" + +msgid "Already at newest change" +msgstr "Hâlihazırda en yeni değişiklik üzerinde" + +#, c-format +msgid "E830: Undo number %ld not found" +msgstr "E830: %ld numaralı geri alma bulunamadı" + +msgid "E438: u_undo: line numbers wrong" +msgstr "E438: u_undo: Satır numaraları yanlış" + +msgid "more line" +msgstr "ek satır" + +msgid "more lines" +msgstr "ek satır" + +msgid "line less" +msgstr "daha az satır" + +msgid "fewer lines" +msgstr "daha az satır" + +msgid "change" +msgstr "değişiklik" + +msgid "changes" +msgstr "değişiklik" + +#, c-format +msgid "%ld %s; %s #%ld %s" +msgstr "%ld %s; %s #%ld %s" + +msgid "before" +msgstr "şundan önce:" + +msgid "after" +msgstr "şundan sonra:" + +msgid "Nothing to undo" +msgstr "Geri alınacak bir şey yok" + +msgid "number changes when saved" +msgstr "kaydedildiğinde numara değişir" + +msgid "E790: undojoin is not allowed after undo" +msgstr "E790: Geri al sonrasında geri almalar birleştirilemez" + +msgid "E439: undo list corrupt" +msgstr "E439: Geri al listesi hasarlı" + +msgid "E440: undo line missing" +msgstr "E440: Geri al satırı eksik" + +msgid "" +"\n" +" Name Args Address Complete Definition" +msgstr "" +"\n" +" Ad Dğkl Adres Tam Tanım" + +msgid "No user-defined commands found" +msgstr "Kullanıcı tanımlı bir komut bulunamadı" + +#, c-format +msgid "E180: Invalid address type value: %s" +msgstr "E180: Geçersiz adres türü değeri: %s" + +#, c-format +msgid "E180: Invalid complete value: %s" +msgstr "E180: Geçersiz tam değer: %s" + +msgid "E468: Completion argument only allowed for custom completion" +msgstr "E468: Tamamlama değişkenine yalnızca özel tamamlamalarda izin verilir" + +msgid "E467: Custom completion requires a function argument" +msgstr "E467: Özel tamamlama bir işlev değişkeni gerektirir" + +msgid "E175: No attribute specified" +msgstr "E175: Bir öznitelik belirtilmemiş" + +msgid "E176: Invalid number of arguments" +msgstr "E176: Geçersiz değişken sayısı" + +msgid "E177: Count cannot be specified twice" +msgstr "E177: Sayım iki defa belirtilemez" + +msgid "E178: Invalid default value for count" +msgstr "E178: Sayım için geçersiz öntanımlı değer" + +msgid "E179: argument required for -complete" +msgstr "E179: -complete için değişken gerekiyor" + +msgid "E179: argument required for -addr" +msgstr "E179: -addr için değişken gerekiyor" + +#, c-format +msgid "E174: Command already exists: add ! to replace it: %s" +msgstr "E174: Komut zaten mevcut: değiştirmek için ! ekleyin: %s" + +msgid "E182: Invalid command name" +msgstr "E182: Geçersiz komut adı" + +msgid "E183: User defined commands must start with an uppercase letter" +msgstr "E183: Kullanıcı tanımlı komutlar BÜYÜK harfle başlamalıdır" + +msgid "E841: Reserved name, cannot be used for user defined command" +msgstr "E841: Ayrılmış ad, kullanıcı tanımlı komut için kullanılamaz" + +#, c-format +msgid "E184: No such user-defined command: %s" +msgstr "E184: Böyle bir kullanıcı tanımlı komut yok: %s" + +#, c-format +msgid "E122: Function %s already exists, add ! to replace it" +msgstr "E122: %s işlevi hâlihazırda mevcut, değiştirmek için ! ekleyin" + +msgid "E717: Dictionary entry already exists" +msgstr "E717: Sözlük girdisi hâlihazırda mevcut" + +msgid "E718: Funcref required" +msgstr "E718: Funcref gerekiyor" + +#, c-format +msgid "E130: Unknown function: %s" +msgstr "E130: Bilinmeyen işlev: %s" + +#, c-format +msgid "E125: Illegal argument: %s" +msgstr "E125: İzin verilmeyen değişken: %s" + +#, c-format +msgid "E853: Duplicate argument name: %s" +msgstr "E853: Yinelenen değişken adı: %s" + +msgid "E989: Non-default argument follows default argument" +msgstr "E989: Öntanımlı olmayan değişken öntanımlı değişkenden sonra" + +#, c-format +msgid "E451: Expected }: %s" +msgstr "E451: } bekleniyordu: %s" + +#, c-format +msgid "E740: Too many arguments for function %s" +msgstr "E740: %s işlevi için çok fazla değişken" + +#, c-format +msgid "E116: Invalid arguments for function %s" +msgstr "E116: %s işlevi için geçersiz değişkenler" + +msgid "E132: Function call depth is higher than 'maxfuncdepth'" +msgstr "E132: İşlevin çağırdığı derinlik 'maxfuncdepth'ten daha yüksek" + +#, c-format +msgid "calling %s" +msgstr "%s çağrılıyor" + +#, c-format +msgid "%s aborted" +msgstr "%s durduruldu" + +#, c-format +msgid "%s returning #%ld" +msgstr "%s, #%ld döndürüyor" + +#, c-format +msgid "%s returning %s" +msgstr "%s, %s döndürüyor" + +msgid "E699: Too many arguments" +msgstr "E699: Çok fazla değişken" + +#, c-format +msgid "E276: Cannot use function as a method: %s" +msgstr "E276: İşlev bir yöntem olarak kullanılamaz: %s" + +#, c-format +msgid "E120: Using <SID> not in a script context: %s" +msgstr "E120: <SID> bir betik bağlamında kullanılmıyor: %s" + +#, c-format +msgid "E725: Calling dict function without Dictionary: %s" +msgstr "E725: dic işlevi bir sözlük olmadan çağrılıyor: %s" + +msgid "E129: Function name required" +msgstr "E129: İşlev adı gerekiyor" + +#, c-format +msgid "E128: Function name must start with a capital or \"s:\": %s" +msgstr "E128: İşlev adı bir BÜYÜK harfle veya \"s:\" ile başlamalı: %s" + +#, c-format +msgid "E884: Function name cannot contain a colon: %s" +msgstr "E884: İşlev adı iki nokta içeremez: %s" + +msgid "E454: function list was modified" +msgstr "E454: İşlev listesi değiştirilmiş" + +#, c-format +msgid "E123: Undefined function: %s" +msgstr "E123: Tanımlanmamış işlev: %s" + +#, c-format +msgid "E124: Missing '(': %s" +msgstr "E124: '(' eksik: %s" + +msgid "E862: Cannot use g: here" +msgstr "E862: g: burada kullanılamaz" + +#, c-format +msgid "E932: Closure function should not be at top level: %s" +msgstr "E932: Kapatma işlevi en üst düzeyde olmamalıdır: %s" + +msgid "E126: Missing :endfunction" +msgstr "E126: :endfunction eksik" + +#, c-format +msgid "W1001: Text found after :enddef: %s" +msgstr "W1001: :enddef sonrası metin bulundu: %s" + +#, c-format +msgid "W22: Text found after :endfunction: %s" +msgstr "W22: :endfunction sonrası metin bulundu: %s" + +#, c-format +msgid "E707: Function name conflicts with variable: %s" +msgstr "E707: İşlev adı şu değişken ile çakışıyor: %s" + +#, c-format +msgid "E127: Cannot redefine function %s: It is in use" +msgstr "E127: %s işlevi yeniden tanımlanamıyor: Şu an kullanımda" + +#, c-format +msgid "E746: Function name does not match script file name: %s" +msgstr "E746: İşlev adı betik dosyası adına eşleşmiyor: %s" + +#, c-format +msgid "E131: Cannot delete function %s: It is in use" +msgstr "E131: %s işlevi silinemiyor: Şu an kullanımda" + +msgid "E133: :return not inside a function" +msgstr "E133: :return bir işlev içinde değil" + +#, c-format +msgid "%s (%s, compiled %s)" +msgstr "%s (%s, %s tarihinde derlendi)" + +msgid "" +"\n" +"MS-Windows 64-bit GUI/console version" +msgstr "" +"\n" +"MS-Windows 64-bit grafik arabirim/konsol sürümü" + +msgid "" +"\n" +"MS-Windows 32-bit GUI/console version" +msgstr "" +"\n" +"MS-Windows 32-bit grafik arabirim/konsol sürümü" + +msgid "" +"\n" +"MS-Windows 64-bit GUI version" +msgstr "" +"\n" +"MS-Windows 64-bit grafik arabirim sürümü" + +msgid "" +"\n" +"MS-Windows 32-bit GUI version" +msgstr "" +"\n" +"MS-Windows 32-bit grafik arabirim sürümü" + +msgid " with OLE support" +msgstr ", OLE desteği ile" + +msgid "" +"\n" +"MS-Windows 64-bit console version" +msgstr "" +"\n" +"MS-Windows 64-bit konsol sürümü" + +msgid "" +"\n" +"MS-Windows 32-bit console version" +msgstr "" +"\n" +"MS-Windows 32-bit konsol sürümü" + +msgid "" +"\n" +"macOS version" +msgstr "" +"\n" +"macOS sürümü" + +msgid "" +"\n" +"macOS version w/o darwin feat." +msgstr "" +"\n" +"Darwin özellikleri olmayan macOS sürümü" + +msgid "" +"\n" +"OpenVMS version" +msgstr "" +"\n" +"OpenVMS sürümü" + +msgid "" +"\n" +"Included patches: " +msgstr "" +"\n" +"İçerilen yamalar: " + +msgid "" +"\n" +"Extra patches: " +msgstr "" +"\n" +"Ek yamalar: " + +msgid "Modified by " +msgstr "Değiştirme: " + +msgid "" +"\n" +"Compiled " +msgstr "" +"\n" +"Derleyen:" + +msgid "by " +msgstr " " + +msgid "" +"\n" +"Huge version " +msgstr "" +"\n" +"Dev sürüm " + +msgid "" +"\n" +"Big version " +msgstr "" +"\n" +"Büyük sürüm " + +msgid "" +"\n" +"Normal version " +msgstr "" +"\n" +"Orta boy sürüm " + +msgid "" +"\n" +"Small version " +msgstr "" +"\n" +"Küçük sürüm " + +msgid "" +"\n" +"Tiny version " +msgstr "" +"\n" +"Ufak sürüm " + +msgid "without GUI." +msgstr "(grafik arabirim içermez)." + +msgid "with GTK3 GUI." +msgstr "(GTK3 grafik arabirim ile)." + +msgid "with GTK2-GNOME GUI." +msgstr "(GTK2-GNOME grafik arabirim ile)." + +msgid "with GTK2 GUI." +msgstr "(GTK2 grafik arabirim ile)." + +msgid "with X11-Motif GUI." +msgstr "(X11-Motif grafik arabirim ile)." + +msgid "with X11-neXtaw GUI." +msgstr "(X11-neXtaw grafik arabirim ile)." + +msgid "with X11-Athena GUI." +msgstr "(X11-Athena grafik arabirim ile)." + +msgid "with Haiku GUI." +msgstr "(Haiku grafik arabirimi ile)." + +msgid "with Photon GUI." +msgstr "(Photon grafik arabirim ile)." + +msgid "with GUI." +msgstr "(grafik arabirim ile)." + +msgid " Features included (+) or not (-):\n" +msgstr " İçerilen özellikler (+), içerilmeyenler (-) ile gösterilir:\n" + +msgid " system vimrc file: \"" +msgstr " sistem vimrc dosyası: \"" + +msgid " user vimrc file: \"" +msgstr " kullanıcı vimrc dosyası: \"" + +msgid " 2nd user vimrc file: \"" +msgstr " kullanıcı 2. vimrc dosyası: \"" + +msgid " 3rd user vimrc file: \"" +msgstr " kullanıcı 3. vimrc dosyası: \"" + +msgid " user exrc file: \"" +msgstr " kullanıcı exrc dosyası: \"" + +msgid " 2nd user exrc file: \"" +msgstr " kullanıcı 2. exrc dosyası: \"" + +msgid " system gvimrc file: \"" +msgstr " sistem gvimrc dosyası: \"" + +msgid " user gvimrc file: \"" +msgstr " kullanıcı gvimrc dosyası: \"" + +msgid "2nd user gvimrc file: \"" +msgstr " kullanıcı 2. gvimrc dosyası: \"" + +msgid "3rd user gvimrc file: \"" +msgstr " kullanıcı 3. gvimrc dosyası: \"" + +msgid " defaults file: \"" +msgstr " öntanımlılar dosyası: \"" + +msgid " system menu file: \"" +msgstr " sistem menü dosyaları: \"" + +msgid " fall-back for $VIM: \"" +msgstr " $VIM öntanımlı konumu: \"" + +msgid " f-b for $VIMRUNTIME: \"" +msgstr "$VIMRUNTIME öntanımlı konumu: \"" + +msgid "Compilation: " +msgstr "Derleme: " + +msgid "Compiler: " +msgstr "Derleyici: " + +msgid "Linking: " +msgstr "Bağlama: " + +msgid " DEBUG BUILD" +msgstr " HATA AYIKLAMA AMAÇLI SÜRÜM" + +msgid "VIM - Vi IMproved" +msgstr "VİM - Vi IMproved" + +msgid "version " +msgstr "sürüm: " + +msgid "by Bram Moolenaar et al." +msgstr "geliştirme: Bram Moolenaar ve diğerleri" + +msgid "Vim is open source and freely distributable" +msgstr "Vim açık kaynaklıdır ve özgürce dağıtılabilir" + +msgid "Help poor children in Uganda!" +msgstr "Uganda'daki yoksul çocuklara yardım edin!" + +msgid "type :help iccf<Enter> for information " +msgstr "ek bilgi için :help iccf<Enter> " + +msgid "type :q<Enter> to exit " +msgstr "çıkmak için :q<Enter> " + +msgid "type :help<Enter> or <F1> for on-line help" +msgstr "yardım belgeleri için :help<Enter> veya <F1> " + +msgid "type :help version8<Enter> for version info" +msgstr "sürüm bilgisi için :help version8<Enter> " + +msgid "Running in Vi compatible mode" +msgstr "Vi uyumlu kipte çalışıyor" + +msgid "type :set nocp<Enter> for Vim defaults" +msgstr "öntanımlı ayarlar için :set nocp<Enter> " + +msgid "type :help cp-default<Enter> for info on this" +msgstr "ek bilgi için :help cp-default<Enter>" + +msgid "menu Help->Orphans for information " +msgstr "bilgi için menü -> Yardım -> Yetimler" + +msgid "Running modeless, typed text is inserted" +msgstr "Kipsiz çalışıyor, girilen metin doğrudan eklenir" + +msgid "menu Edit->Global Settings->Toggle Insert Mode " +msgstr "menü -> Düzen -> Genel Ayarlar -> Ekleme Kipine Geç" + +msgid " for two modes " +msgstr " iki kip için " + +msgid "menu Edit->Global Settings->Toggle Vi Compatible" +msgstr "menü -> Düzen -> Genel Ayarlar -> Vi Uyumlu Kipi Aç/Kapat" + +msgid " for Vim defaults " +msgstr " Vim öntanımlıları için " + +msgid "Sponsor Vim development!" +msgstr "Vim'in geliştirilmesine sponsor olun!" + +msgid "Become a registered Vim user!" +msgstr "Kayıtlı bir Vim kullanıcısı olun!" + +msgid "type :help sponsor<Enter> for information " +msgstr "bilgi için :help sponsor<Enter> " + +msgid "type :help register<Enter> for information " +msgstr "bilgi için :help register<Enter> " + +msgid "menu Help->Sponsor/Register for information " +msgstr "bilgi için Yardım -> Sponsorluk/Kayıt" + +msgid "[end of lines]" +msgstr "[satırların sonu]" + +msgid "global" +msgstr "global" + +msgid "buffer" +msgstr "arabellek" + +msgid "window" +msgstr "pencere" + +msgid "tab" +msgstr "sekme" + +msgid "" +"\n" +"# Buffer list:\n" +msgstr "" +"\n" +"# Arabellek listesi:\n" + +#, c-format +msgid "" +"\n" +"# %s History (newest to oldest):\n" +msgstr "" +"\n" +"# %s Geçmişi (yeniden eskiye):\n" + +msgid "Command Line" +msgstr "Komut Satırı" + +msgid "Search String" +msgstr "Arama Dizisi" + +msgid "Expression" +msgstr "İfade" + +msgid "Input Line" +msgstr "Girdi Satırı" + +msgid "Debug Line" +msgstr "Hata Ayıklama Satırı" + +msgid "" +"\n" +"# Bar lines, copied verbatim:\n" +msgstr "" +"\n" +"# Tam sureti kopyalanan | satırları:\n" + +#, c-format +msgid "%sviminfo: %s in line: " +msgstr "%sviminfo: satırdaki %s: " + +msgid "E136: viminfo: Too many errors, skipping rest of file" +msgstr "E136: viminfo: Çok fazla hata, dosyanın geri kalanı atlanıyor" + +msgid "" +"\n" +"# global variables:\n" +msgstr "" +"\n" +"# global değişkenler:\n" + +msgid "" +"\n" +"# Last Substitute String:\n" +"$" +msgstr "" +"\n" +"# Son Değiştirilen Dizi:\n" +"$" + +#, c-format +msgid "" +"\n" +"# Last %sSearch Pattern:\n" +"~" +msgstr "" +"\n" +"# Son %sArama Dizgileri:\n" +"~" + +msgid "Substitute " +msgstr "Şunu değiştir: " + +msgid "Illegal register name" +msgstr "İzin verilmeyen yazmaç adı" + +msgid "" +"\n" +"# Registers:\n" +msgstr "" +"\n" +"# Yazmaçlar:\n" + +#, c-format +msgid "E574: Unknown register type %d" +msgstr "E574: Bilinmeyen yazmaç türü %d" + +msgid "" +"\n" +"# History of marks within files (newest to oldest):\n" +msgstr "" +"\n" +"# Dosyalardaki imlerin geçmişi (yeniden eskiye):\n" + +msgid "" +"\n" +"# File marks:\n" +msgstr "" +"\n" +"# Dosya imleri:\n" + +msgid "" +"\n" +"# Jumplist (newest first):\n" +msgstr "" +"\n" +"# Atlama listesi (önce en yeniler):\n" + +msgid "Missing '>'" +msgstr "'>' eksik" + +msgid "Illegal starting char" +msgstr "İzin verilmeyen başlangıç karakteri" + +#, c-format +msgid "# This viminfo file was generated by Vim %s.\n" +msgstr "# Bu viminfo dosyası Vim %s tarafından oluşturulmuştur.\n" + +msgid "" +"# You may edit it if you're careful!\n" +"\n" +msgstr "" +"# Yapabileceğinizi düşünüyorsanız bu dosyayı düzenleyebilirsiniz!\n" +"\n" + +msgid "# Value of 'encoding' when this file was written\n" +msgstr "# Bu dosya yazıldığı sırada mevcut 'encoding'in değeri\n" + +#, c-format +msgid "Reading viminfo file \"%s\"%s%s%s%s" +msgstr "\"%s\" viminfo dosyası okunuyor...%s%s%s%s" + +msgid " info" +msgstr " bilgiler-" + +msgid " marks" +msgstr " imler-" + +msgid " oldfiles" +msgstr " düzenleme geçmişi" + +msgid " FAILED" +msgstr " BAŞARISIZ" + +#, c-format +msgid "E137: Viminfo file is not writable: %s" +msgstr "E137: Viminfo dosyası yazılabilir değil: %s" + +#, c-format +msgid "E929: Too many viminfo temp files, like %s!" +msgstr "E929: Çok fazla viminfo geçici dosyası, örneğin %s!" + +#, c-format +msgid "E138: Can't write viminfo file %s!" +msgstr "E138: viminfo dosyası %s yazılamıyor!" + +#, c-format +msgid "Writing viminfo file \"%s\"" +msgstr "viminfo dosyası \"%s\" yazılıyor" + +#, c-format +msgid "E886: Can't rename viminfo file to %s!" +msgstr "E886: viminfo dosyasının adı %s olarak değiştirilemiyor!" + +msgid "E195: Cannot open viminfo file for reading" +msgstr "E195: viminfo dosyası okuma için açılamıyor" + +msgid "Already only one window" +msgstr "Zaten tek pencere" + +#, c-format +msgid "E92: Buffer %ld not found" +msgstr "E92: Arabellek %ld bulunamadı" + +msgid "E441: There is no preview window" +msgstr "E441: Önizleme penceresi yok" + +msgid "E242: Can't split a window while closing another" +msgstr "E242: Bir başka pencere kapatılırken pencere bölünemez" + +msgid "E442: Can't split topleft and botright at the same time" +msgstr "E442: Üst sol ve alt sağ pencereler aynı anda bölünemez" + +msgid "E443: Cannot rotate when another window is split" +msgstr "E443: Başka bir pencere bölünmüşken döndürme yapılamaz" + +msgid "E444: Cannot close last window" +msgstr "E444: Son pencere kapatılamıyor" + +msgid "E814: Cannot close window, only autocmd window would remain" +msgstr "E814: Pencere kapatılamıyor, yalnızca otokomut penceresi açık kalır" + +msgid "E445: Other window contains changes" +msgstr "E445: Diğer pencerede değişiklikler var" + +msgid "E366: Not allowed to enter a popup window" +msgstr "E366: Bir açılır pencereye girişe izin verilmiyor" + +#, c-format +msgid "E370: Could not load library %s" +msgstr "E370: %s kitaplığı yüklenemedi" + +msgid "Sorry, this command is disabled: the Perl library could not be loaded." +msgstr "Üzgünüm, bu komut etkin değil: Perl kitaplığı yüklenemedi." + +msgid "E299: Perl evaluation forbidden in sandbox without the Safe module" +msgstr "" +"E299: Güvenli modül olmadan kum havuzu içinde Perl değerlendirmesine izin " +"verilmiyor" + +msgid "Edit with &multiple Vims" +msgstr "Birden &fazla Vim ile düzenle" + +msgid "Edit with single &Vim" +msgstr "Tek bir &Vim ile düzenle" + +msgid "Diff with Vim" +msgstr "Vim kullanarak karşılaştır" + +msgid "Edit with &Vim" +msgstr "&Vim ile düzenle" + +msgid "Edit with existing Vim" +msgstr "Mevcut Vim ile düzenle" + +msgid "Edit with existing Vim - " +msgstr "Mevcut Vim ile düzenle - " + +msgid "Edits the selected file(s) with Vim" +msgstr "Seçili dosyaları Vim ile düzenler" + +msgid "Error creating process: Check if gvim is in your path!" +msgstr "İşlem oluşturulurken hata: gvim'in yol üzerinde olduğundan emin olun!" + +msgid "gvimext.dll error" +msgstr "gvimext.dll hatası" + +msgid "Path length too long!" +msgstr "Yol çok uzun!" + +#, c-format +msgid "E121: Undefined variable: %s" +msgstr "E121: Tanımlanmamış değişken: %s" + +#, c-format +msgid "E121: Undefined variable: %c:%s" +msgstr "E121: Tanımlanmamış değişken: %c:%s" + +msgid "E476: Invalid command" +msgstr "E476: Geçersiz komut" + +#, c-format +msgid "E476: Invalid command: %s" +msgstr "E476: Geçersiz komut: %s" + +msgid "E710: List value has more items than targets" +msgstr "E710: Liste değeri hedeften daha fazla ögeye sahip" + +msgid "E711: List value does not have enough items" +msgstr "E711: Liste değeri yeterli ögeye sahip değil" + +msgid "E719: Cannot slice a Dictionary" +msgstr "E719: Bir Sözlük dilimlenemiyor" + +msgid "" +"E856: \"assert_fails()\" second argument must be a string or a list with one " +"or two strings" +msgstr "" +"E856: \"assert_fails()\" ikinci değişkeni bir dizi veya bir veya iki dizili " +"bir liste olmalıdır" + +msgid "E909: Cannot index a special variable" +msgstr "E909: Özel bir değişken dizinlenemiyor" + +#, c-format +msgid "E1100: Missing :var: %s" +msgstr "E1100: :var eksik: %s" + +#, c-format +msgid "E1001: Variable not found: %s" +msgstr "E1001: Değişken bulunamadı: %s" + +#, c-format +msgid "E1002: Syntax error at %s" +msgstr "E1002: %s konumunda sözdizim hatası" + +msgid "E1003: Missing return value" +msgstr "E1003: Dönüş değeri eksik" + +#, c-format +msgid "E1004: White space required before and after '%s'" +msgstr "E1004: '%s' öncesinde ve sonrasında boşluk gerekiyor" + +msgid "E1005: Too many argument types" +msgstr "E1005: Çok fazla değişken türü" + +#, c-format +msgid "E1006: %s is used as an argument" +msgstr "E1006: %s bir değişken olarak kullanılıyor" + +msgid "E1007: Mandatory argument after optional argument" +msgstr "E1007: İsteğe bağlı değişken sonrasında zorunlu değişken" + +msgid "E1008: Missing <type>" +msgstr "E1008: <tür> eksik" + +msgid "E1009: Missing > after type" +msgstr "E1009: Tür sonrasında > eksik" + +#, c-format +msgid "E1010: Type not recognized: %s" +msgstr "E1010: Tür tanımlanamadı: %s" + +#, c-format +msgid "E1011: Name too long: %s" +msgstr "E1011: Ad çok uzun: %s" + +#, c-format +msgid "E1012: Type mismatch; expected %s but got %s" +msgstr "E1012: Tür uyumsuzluğu, %s bekleniyordu, ancak %s alındı" + +#, c-format +msgid "E1013: Argument %d: type mismatch, expected %s but got %s" +msgstr "E1013: %d değişkeni: Tür uyumsuzluğu, %s bekleniyordu, ancak %s alındı" + +#, c-format +msgid "E1014: Invalid key: %s" +msgstr "E1014: Geçersiz anahtar: %s" + +#, c-format +msgid "E1015: Name expected: %s" +msgstr "E1015: Ad bekleniyordu: %s" + +#, c-format +msgid "E1016: Cannot declare a %s variable: %s" +msgstr "E1016: Bir %s değişkeni tanımlanamıyor: %s" + +#, c-format +msgid "E1016: Cannot declare an environment variable: %s" +msgstr "E1016: Bir ortam değişkeni tanımlanamıyor: %s" + +#, c-format +msgid "E1017: Variable already declared: %s" +msgstr "E1017: Değişken halihazırda tanımlanmış: %s" + +#, c-format +msgid "E1018: Cannot assign to a constant: %s" +msgstr "E1018: Bir sabite atanamıyor: %s" + +msgid "E1019: Can only concatenate to string" +msgstr "E1019: Yalnızca bir diziye birleştirilebilir" + +#, c-format +msgid "E1020: Cannot use an operator on a new variable: %s" +msgstr "E1020: Yeni bir değişken üzerinde bir işleç kullanılamaz: %s" + +msgid "E1021: Const requires a value" +msgstr "E1021: Sabit, bir değer gerektirir" + +msgid "E1022: Type or initialization required" +msgstr "E1022: Tür veya ilklendirme gerekiyor" + +#, c-format +msgid "E1023: Using a Number as a Bool: %d" +msgstr "E1023: Bir Sayı, bir Bool yerine kullanılıyor: %d" + +msgid "E1024: Using a Number as a String" +msgstr "E1024: Bir Sayı, bir Dizi yerine kullanılıyor" + +msgid "E1025: Using } outside of a block scope" +msgstr "E1025: } bir blok kapsamı dışında kullanılıyor" + +msgid "E1026: Missing }" +msgstr "E1026: } eksik" + +msgid "E1027: Missing return statement" +msgstr "E1027: Dönüş ifadesi eksik" + +msgid "E1028: Compiling :def function failed" +msgstr "E1028: :def işlevi derleme başarısız" + +#, c-format +msgid "E1029: Expected %s but got %s" +msgstr "E1029: %s bekleniyordu ancak %s alındı" + +#, c-format +msgid "E1030: Using a String as a Number: \"%s\"" +msgstr "E1030: Bir Dizi, bir Sayı yerine kullanılıyor: \"%s\"" + +msgid "E1031: Cannot use void value" +msgstr "E1031: Boş değer kullanılamaz" + +msgid "E1032: Missing :catch or :finally" +msgstr "E1032: :catch veya :finally eksik" + +msgid "E1033: Catch unreachable after catch-all" +msgstr "E1033: catch-all sonrası catch ulaşılamıyor" + +#, c-format +msgid "E1034: Cannot use reserved name %s" +msgstr "E1034: Ayrılmış ad %s kullanılamaz" + +msgid "E1035: % requires number arguments" +msgstr "E1035: %, sayı değişkenler gerektirir" + +#, c-format +msgid "E1036: %c requires number or float arguments" +msgstr "E1036: %c, sayı veya kayan noktalı değer değişkenler gerektirir" + +#, c-format +msgid "E1037: Cannot use \"%s\" with %s" +msgstr "E1037: \"%s\", %s ile birlikte kullanılamaz" + +msgid "E1038: \"vim9script\" can only be used in a script" +msgstr "E1038: \"vim9script\" yalnızca bir betikte kullanılabilir" + +msgid "E1039: \"vim9script\" must be the first command in a script" +msgstr "E1039: \"vim9script\" bir betikteki ilk komut olmalıdır" + +msgid "E1040: Cannot use :scriptversion after :vim9script" +msgstr "E1040: :vim9script sonrası :scriptversion kullanılamaz" + +#, c-format +msgid "E1041: Redefining script item %s" +msgstr "E1041: Betik ögesi %s yeniden tanımlanıyor" + +msgid "E1042: Export can only be used in vim9script" +msgstr "E1042: Dışa aktarım yalnızca vim9script içinde kullanılabilir" + +msgid "E1043: Invalid command after :export" +msgstr "E1043: :export sonrası geçersiz komut" + +msgid "E1044: Export with invalid argument" +msgstr "E1044: Geçersiz değişkenle dışa aktarım" + +msgid "E1045: Missing \"as\" after *" +msgstr "E1045: * sonrası \"as\" eksik" + +msgid "E1046: Missing comma in import" +msgstr "E1046: İçe aktarımda virgül eksik" + +msgid "E1047: Syntax error in import" +msgstr "E1047: İçe aktarımda sözdizim hatası" + +#, c-format +msgid "E1048: Item not found in script: %s" +msgstr "E1048: Betikte öge bulunamadı: %s" + +#, c-format +msgid "E1049: Item not exported in script: %s" +msgstr "E1049: Betikte öge dışa aktarılmadı: %s" + +msgid "E1050: Colon required before a range" +msgstr "E1050: Bir erim öncesi iki nokta gerekiyor" + +msgid "E1051: Wrong argument type for +" +msgstr "E1051: + için hatalı değişken türü" + +#, c-format +msgid "E1052: Cannot declare an option: %s" +msgstr "E1052: Bir seçenek tanımlanamıyor: %s" + +#, c-format +msgid "E1053: Could not import \"%s\"" +msgstr "E1053: \"%s\" içe aktarılamadı" + +#, c-format +msgid "E1054: Variable already declared in the script: %s" +msgstr "E1054: Betikte değişken halihazırda tanımlanmış: %s" + +msgid "E1055: Missing name after ..." +msgstr "E1055: ... sonraki ad eksik" + +#, c-format +msgid "E1056: Expected a type: %s" +msgstr "E1056: Bir tür bekleniyordu: %s" + +msgid "E1057: Missing :enddef" +msgstr "E1057: :enddef eksik" + +msgid "E1058: Function nesting too deep" +msgstr "E1058: İşlev çok iç içe geçmiş" + +#, c-format +msgid "E1059: No white space allowed before colon: %s" +msgstr "E1059: İki nokta öncesinde boşluğa izin verilmiyor: %s" + +#, c-format +msgid "E1060: Expected dot after name: %s" +msgstr "E1060: Ad sonrası nokta bekleniyordu: %s" + +#, c-format +msgid "E1061: Cannot find function %s" +msgstr "E1061: %s işlevi bulunamıyor" + +msgid "E1062: Cannot index a Number" +msgstr "E1062: Bir Sayı dizinlenemiyor" + +msgid "E1063: Type mismatch for v: variable" +msgstr "E1063: v: değişkeni için tür uyumsuzluğu" + +#, c-format +msgid "E1066: Cannot declare a register: %s" +msgstr "E1066: Bir yazmaç tanımlanamıyor: %s" + +#, c-format +msgid "E1067: Separator mismatch: %s" +msgstr "E1067: Ayırıcı uyumsuzluğu: %s" + +#, c-format +msgid "E1068: No white space allowed before '%s'" +msgstr "E1068: '%s' önce boşluğa izin verilmiyor" + +#, c-format +msgid "E1069: White space required after '%s'" +msgstr "E1069: '%s' sonrası boşluk gerekiyor" + +msgid "E1070: Missing \"from\"" +msgstr "E1070: \"from\" eksik" + +msgid "E1071: Invalid string after \"from\"" +msgstr "E1071: \"from\" sonrası geçersiz dizi" + +#, c-format +msgid "E1072: Cannot compare %s with %s" +msgstr "E1072: %s, %s ile karşılaştırılamıyor" + +#, c-format +msgid "E1073: Name already defined: %s" +msgstr "E1073: Ad halihazırda tanımlanmış: %s" + +msgid "E1074: No white space allowed after dot" +msgstr "E1074: Nokta sonrası boşluğa izin verilmiyor" + +#, c-format +msgid "E1075: Namespace not supported: %s" +msgstr "E1075: Ad alanı desteklenmiyor: %s" + +msgid "E1076: This Vim is not compiled with float support" +msgstr "E1076: Bu Vim kayan noktalı değer desteği ile derlenmemiş" + +#, c-format +msgid "E1077: Missing argument type for %s" +msgstr "E1077: %s için değişken türü eksik" + +#, c-format +msgid "E1081: Cannot unlet %s" +msgstr "E1081: %s sabitten değişkene çevrilemiyor" + +#, c-format +msgid "E1082: Cannot use a namespaced variable: %s" +msgstr "E1082: Ad alanına alınmış bir değişken kullanılamaz: %s" + +msgid "E1083: Missing backtick" +msgstr "E1083: Ters eğik kesme imi eksik" + +#, c-format +msgid "E1084: Cannot delete Vim9 script function %s" +msgstr "E1084: Vim9 betik işlevi %s silinemiyor" + +#, c-format +msgid "E1085: Not a callable type: %s" +msgstr "E1085: Çağrılabilir bir tür değil: %s" + +msgid "E1086: Cannot use :function inside :def" +msgstr "E1086: :def içinde :function kullanılamaz" + +msgid "E1087: Cannot use an index when declaring a variable" +msgstr "E1087: Bir değişken tanımlarken indeks kullanılamaz" + +#, c-format +msgid "E1089: Unknown variable: %s" +msgstr "E1089: Bilinmeyen değişken: %s" + +#, c-format +msgid "E1090: Cannot assign to argument %s" +msgstr "E1090: %s değişkenine atanamıyor" + +#, c-format +msgid "E1091: Function is not compiled: %s" +msgstr "E1091: İşlev derlenmemiş: %s" + +msgid "E1092: Cannot use a list for a declaration" +msgstr "E1092: Tanımlama için bir liste kullanılamaz" + +#, c-format +msgid "E1093: Expected %d items but got %d" +msgstr "E1093: %d öge bekleniyordu, ancak %d alındı" + +msgid "E1094: Import can only be used in a script" +msgstr "E1094: İçe aktarım yalnızca bir betikte kullanılabilir" + +msgid "E1095: Unreachable code after :return" +msgstr "E1095: :return sonrası ulaşılamayan kod" + +msgid "E1096: Returning a value in a function without a return type" +msgstr "E1096: Dönüş türü olmayan bir işlevde bir değer döndürülüyor" + +msgid "E1097: Line incomplete" +msgstr "E1097: Satır tamamlanmamış" + +#, c-format +msgid "E1099: Unknown error while executing %s" +msgstr "E1099: %s çalıştırılırken bilinmeyen hata" + +#, c-format +msgid "E1101: Cannot declare a script variable in a function: %s" +msgstr "E1101: Bir işlevde bir betik değişkeni tanımlanamıyor: %s" + +#, c-format +msgid "E1102: Lambda function not found: %s" +msgstr "E1102: Lambda işlevi bulunamadı: %s" + +msgid "E1103: Dictionary not set" +msgstr "E1103: Sözlük ayarlanmamış" + +msgid "E1104: Missing >" +msgstr "E1104: > eksik" + +#, c-format +msgid "E1105: Cannot convert %s to string" +msgstr "E1105: %s bir diziye dönüştürülemiyor" + +msgid "E1106: One argument too many" +msgstr "E1106: Bir değişken fazladan" + +#, c-format +msgid "E1106: %d arguments too many" +msgstr "E1106: %d değişken fazladan" + +msgid "E1107: String, List, Dict or Blob required" +msgstr "E1107: Dizi, Liste, Sözlük veya İkili Nesne gerekiyor" + +#, c-format +msgid "E1108: Item not found: %s" +msgstr "E1108: Öge bulunamadı: %s" + +#, c-format +msgid "E1109: List item %d is not a List" +msgstr "E1109: Liste ögesi %d bir Liste değil" + +#, c-format +msgid "E1110: List item %d does not contain 3 numbers" +msgstr "E1110: Liste ögesi %d 3 sayı içermiyor" + +#, c-format +msgid "E1111: List item %d range invalid" +msgstr "E1111: Liste ögesi %d erimi geçersiz" + +#, c-format +msgid "E1112: List item %d cell width invalid" +msgstr "E1112: Liste ögesi %d hücre genişliği geçersiz" + +#, c-format +msgid "E1113: Overlapping ranges for 0x%lx" +msgstr "E1113: 0x%lx için üst üste binen erimler" + +msgid "E1114: Only values of 0x100 and higher supported" +msgstr "E1114: Yalnızca 0x100 ve daha yüksek değerler destekleniyor" + +msgid "E1115: \"assert_fails()\" fourth argument must be a number" +msgstr "E1115: \"assert_fails()\" dördüncü değişkeni bir sayı olmalıdır" + +msgid "E1116: \"assert_fails()\" fifth argument must be a string" +msgstr "E1116: \"assert_fails()\" beşinci değişkeni bir dizi olmalıdır" + +msgid "E1117: Cannot use ! with nested :def" +msgstr "E1117: !, iç içe geçmiş :def ile kullanılamaz" + +msgid "E1118: Cannot change list" +msgstr "E1118: Liste değiştirilemez" + +msgid "E1119: Cannot change list item" +msgstr "E1119: Liste ögesi değiştirilemez" + +msgid "E1120: Cannot change dict" +msgstr "E1120: Sözlük değiştirilemez" + +msgid "E1121: Cannot change dict item" +msgstr "E1121: Sözlük ögesi değiştirilemez" + +#, c-format +msgid "E1122: Variable is locked: %s" +msgstr "E1122: Değişken kilitli: %s" + +#, c-format +msgid "E1123: Missing comma before argument: %s" +msgstr "E1123: Değişken öncesi virgül eksik: %s" + +#, c-format +msgid "E1124: \"%s\" cannot be used in legacy Vim script" +msgstr "E1124: \"%s\" yalnızca eski Vim betiklerinde kullanılabilir" + +msgid "E1125: Final requires a value" +msgstr "E1125: Final, bir değer gerektirir" + +msgid "E1126: Cannot use :let in Vim9 script" +msgstr "E1126: :let, Vim9 betiğinde kullanılamaz" + +msgid "E1127: Missing name after dot" +msgstr "E1127: Nokta sonrası ad eksik" + +msgid "E1128: } without {" +msgstr "E1128: { olmadan }" + +msgid "E1129: Throw with empty string" +msgstr "E1129: Boş dizi ile \"Throw\"" + +msgid "E1130: Cannot add to null list" +msgstr "E1130: Null listesine bir öge eklenemez" + +msgid "E1131: Cannot add to null blob" +msgstr "E1131: Null ikili geniş nesnesine ekleme yapılamaz" + +msgid "E1132: Missing function argument" +msgstr "E1132: İşlev değişkeni eksik" + +msgid "E1133: Cannot extend a null dict" +msgstr "E1133: Bir null sözlük genişletilemez" + +msgid "E1134: Cannot extend a null list" +msgstr "E1134: Bir null listesi genişletilemez" + +#, c-format +msgid "E1135: Using a String as a Bool: \"%s\"" +msgstr "E1135: Bir Dizi, bir Boole yerine kullanılıyor: \"%s\"" + +msgid "E1135: <Cmd> mapping must end with <CR>" +msgstr "E1135: <Cmd> eşlemlemesi <CR> ile bitmelidir" + +msgid "E1136: <Cmd> mapping must end with <CR> before second <Cmd>" +msgstr "E1136: <Cmd> eşlemlemesi ikinci <Cmd>'den önce <CR> ile bitmelidir" + +#, c-format +msgid "E1137: <Cmd> mapping must not include %s key" +msgstr "E1137: <Cmd> eşlemlemesi %s anahtarını içermemelidir" + +msgid "E1138: Using a Bool as a Number" +msgstr "E1138: Bir Boole, Sayı yerine kullanılıyor" + +msgid "E1139: Missing matching bracket after dict key" +msgstr "E1139: Sözlük anahtarı sonrası eşleşen ayraç eksik" + +msgid "E1140: For argument must be a sequence of lists" +msgstr "E1140: For değişkeni listelerin bir sıralaması olmalıdır" + +msgid "E1141: Indexable type required" +msgstr "E1141: İndekslenebilir tür gerekiyor" + +msgid "--No lines in buffer--" +msgstr "--Arabellek içinde satır yok--" + +msgid "E470: Command aborted" +msgstr "E470: Komut durduruldu" + +msgid "E471: Argument required" +msgstr "E471: Değişken gerekiyor" + +msgid "E10: \\ should be followed by /, ? or &" +msgstr "E10: \\ sonrasında /, ? veya & gelmeli" + +msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits" +msgstr "E11: Komut satırı penceresinde geçersiz; <CR> çalıştırır, CTRL-C çıkar" + +msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search" +msgstr "" +"E12: Geçerli dizin veya etiket aramasında exrc veya vimrc'den komutlara izin " +"verilmiyor" + +msgid "E171: Missing :endif" +msgstr "E171: :endif eksik" + +msgid "E603: :catch without :try" +msgstr "E603: :try olmadan :catch" + +msgid "E606: :finally without :try" +msgstr "E606: :try olmadan :finally" + +msgid "E607: multiple :finally" +msgstr "E607: Birden fazla :finally" + +msgid "E600: Missing :endtry" +msgstr "E600: :endtry eksik" + +msgid "E602: :endtry without :try" +msgstr "E602: :try olmadan :endtry" + +msgid "E170: Missing :endwhile" +msgstr "E170: :endwhile eksik" + +msgid "E170: Missing :endfor" +msgstr "E170: :endfor eksik" + +msgid "E588: :endwhile without :while" +msgstr "E588: :while olmadan :endwhile" + +msgid "E588: :endfor without :for" +msgstr "E588: :for olmadan :endfor" + +msgid "E13: File exists (add ! to override)" +msgstr "E13: Dosya mevcut (geçersiz kılmak için ! ekleyin)" + +msgid "E472: Command failed" +msgstr "E472: Komut başarısız oldu" + +#, c-format +msgid "E234: Unknown fontset: %s" +msgstr "E234: Bilinmeyen yazıtipi seti: %s" + +#, c-format +msgid "E235: Unknown font: %s" +msgstr "E235: Bilinmeyen yazıtipi: %s" + +#, c-format +msgid "E236: Font \"%s\" is not fixed-width" +msgstr "E236: \"%s\" yazıtipi sabit genişlikli değil" + +msgid "E473: Internal error" +msgstr "E473: İç hata" + +#, c-format +msgid "E685: Internal error: %s" +msgstr "E685: İç hata: %s" + +msgid "Interrupted" +msgstr "Yarıda kesildi" + +msgid "E474: Invalid argument" +msgstr "E474: Geçersiz değişken" + +#, c-format +msgid "E475: Invalid argument: %s" +msgstr "E475: Geçersiz değişken: %s" + +#, c-format +msgid "E983: Duplicate argument: %s" +msgstr "E983: Yinelenen değişken: %s" + +#, c-format +msgid "E475: Invalid value for argument %s" +msgstr "E475: %s değişkeni için geçersiz değer" + +#, c-format +msgid "E475: Invalid value for argument %s: %s" +msgstr "E475: %s değişkeni için geçersiz değer: %s" + +#, c-format +msgid "E15: Invalid expression: %s" +msgstr "E15: Geçersiz ifade: %s" + +msgid "E16: Invalid range" +msgstr "E16: Geçersiz erim" + +#, c-format +msgid "E17: \"%s\" is a directory" +msgstr "E17: \"%s\" bir dizin" + +msgid "E756: Spell checking is not possible" +msgstr "E756: Yazım denetimi olanaklı değil" + +#, c-format +msgid "E364: Library call failed for \"%s()\"" +msgstr "E364: \"%s()\" için kitaplık çağrısı başarısız oldu" + +msgid "E667: Fsync failed" +msgstr "E667: Fsync başarısız oldu" + +#, c-format +msgid "E448: Could not load library function %s" +msgstr "E448: %s kitaplık işlevi yüklenemedi" + +msgid "E19: Mark has invalid line number" +msgstr "E19: İm satır numarası geçersiz" + +msgid "E20: Mark not set" +msgstr "E20: İm ayarlanmamış" + +msgid "E21: Cannot make changes, 'modifiable' is off" +msgstr "E21: Değişiklik yapılamıyor, 'modifiable' kapalı" + +msgid "E22: Scripts nested too deep" +msgstr "E22: Betikler çok iç içe geçmiş" + +msgid "E23: No alternate file" +msgstr "E23: Başka bir dosya yok" + +msgid "E24: No such abbreviation" +msgstr "E24: Böyle bir kısaltma yok" + +msgid "E477: No ! allowed" +msgstr "E477: ! imine izin verilmiyor" + +msgid "E25: GUI cannot be used: Not enabled at compile time" +msgstr "E25: Grafik arabirim kullanılamaz: Derlenirken etkinleştirilmemiş" + +msgid "E26: Hebrew cannot be used: Not enabled at compile time\n" +msgstr "E26: İbranca kullanılamaz: Derlenirken etkinleştirilmemiş\n" + +msgid "E27: Farsi support has been removed\n" +msgstr "E27: Farsça desteği kaldırıldı\n" + +msgid "E800: Arabic cannot be used: Not enabled at compile time\n" +msgstr "E800: Arapça kullanılamaz: Derlenirken etkinleştirilmemiş\n" + +#, c-format +msgid "E28: No such highlight group name: %s" +msgstr "E28: Böyle bir vurgulama grup adı yok: %s" + +msgid "E29: No inserted text yet" +msgstr "E29: Henüz bir metin eklenmedi" + +msgid "E30: No previous command line" +msgstr "E30: Öncesinde komut satırı yok" + +msgid "E31: No such mapping" +msgstr "E31: Böyle bir eşlem yok" + +msgid "E479: No match" +msgstr "E479: Eşleşme yok" + +#, c-format +msgid "E480: No match: %s" +msgstr "E480: Eşleşme yok: %s" + +msgid "E32: No file name" +msgstr "E32: Dosya adı yok" + +msgid "E33: No previous substitute regular expression" +msgstr "E33: Öncesinde yerine geçen bir düzenli ifade yok" + +msgid "E34: No previous command" +msgstr "E34: Öncesinde komut yok" + +msgid "E35: No previous regular expression" +msgstr "E35: Öncesinde düzenli ifade yok" + +msgid "E481: No range allowed" +msgstr "E481: Erime izin verilmiyor" + +msgid "E36: Not enough room" +msgstr "E36: Yeterli alan yok" + +#, c-format +msgid "E247: no registered server named \"%s\"" +msgstr "E247: \"%s\" adlı kayıtlı bir sunucu yok" + +#, c-format +msgid "E482: Can't create file %s" +msgstr "E482: %s dosyası oluşturulamıyor" + +msgid "E483: Can't get temp file name" +msgstr "E483: Geçici dosya adı alınamıyor" + +#, c-format +msgid "E484: Can't open file %s" +msgstr "E484: %s dosyası açılamıyor" + +#, c-format +msgid "E485: Can't read file %s" +msgstr "E485: %s dosyası okunamıyor" + +msgid "E38: Null argument" +msgstr "E38: Anlamsız değişken" + +msgid "E39: Number expected" +msgstr "E39: Sayı bekleniyordu" + +#, c-format +msgid "E40: Can't open errorfile %s" +msgstr "E40: Hata dosyası %s açılamıyor" + +msgid "E233: cannot open display" +msgstr "E233: Görüntü açılamıyor" + +msgid "E41: Out of memory!" +msgstr "E41: Bellek yetersiz!" + +msgid "Pattern not found" +msgstr "Dizgi bulunamadı" + +#, c-format +msgid "E486: Pattern not found: %s" +msgstr "E486: Dizgi bulunamadı: %s" + +msgid "E487: Argument must be positive" +msgstr "E487: Değişken pozitif olmalı" + +msgid "E459: Cannot go back to previous directory" +msgstr "E459: Bir önceki dizine gidilemiyor" + +msgid "E42: No Errors" +msgstr "E42: Hata yok" + +msgid "E776: No location list" +msgstr "E776: Konum listesi yok" + +msgid "E43: Damaged match string" +msgstr "E43: Hasarlı eşleşme dizisi" + +msgid "E44: Corrupted regexp program" +msgstr "E44: Bozulmuş regexp programı" + +msgid "E45: 'readonly' option is set (add ! to override)" +msgstr "E45: 'readonly' seçeneği ayarlanmış (geçersiz kılmak için ! ekleyin)" + +#, c-format +msgid "E734: Wrong variable type for %s=" +msgstr "E734: %s= için yanlış değişken türü" + +#, c-format +msgid "E461: Illegal variable name: %s" +msgstr "E461: İzin verilmeyen değişken adı: %s" + +msgid "E995: Cannot modify existing variable" +msgstr "E995: Mevcut değişken değiştirilemiyor" + +#, c-format +msgid "E46: Cannot change read-only variable \"%s\"" +msgstr "E46: Salt okunur değişken \"%s\" değiştirilemiyor" + +#, c-format +msgid "E794: Cannot set variable in the sandbox: \"%s\"" +msgstr "E794: Değişken kum havuzunda ayarlanamıyor: \"%s\"" + +msgid "E928: String required" +msgstr "E928: Dizi gerekiyor" + +msgid "E713: Cannot use empty key for Dictionary" +msgstr "E713: Sözlük için boş anahtar kullanılamaz" + +msgid "E715: Dictionary required" +msgstr "E715: Sözlük gerekiyor" + +#, c-format +msgid "E684: list index out of range: %ld" +msgstr "E684: Liste sırası erimin dışında: %ld" + +#, c-format +msgid "E979: Blob index out of range: %ld" +msgstr "E979: İkili geniş nesne sırası erimin dışında: %ld" + +msgid "E978: Invalid operation for Blob" +msgstr "E978: İkili geniş nesne için geçersiz işlem" + +#, c-format +msgid "E118: Too many arguments for function: %s" +msgstr "E118: İşlev için çok fazla değişken: %s" + +#, c-format +msgid "E119: Not enough arguments for function: %s" +msgstr "E119: Şu işlev için yetersiz sayıda değişken: %s" + +#, c-format +msgid "E933: Function was deleted: %s" +msgstr "E933: İşlev silinmiş: %s" + +#, c-format +msgid "E716: Key not present in Dictionary: \"%s\"" +msgstr "E716: Anahtar sözlükte mevcut değil: \"%s\"" + +msgid "E714: List required" +msgstr "E714: Liste gerekiyor" + +msgid "E897: List or Blob required" +msgstr "E897: Liste veya ikili geniş nesne gerekiyor" + +#, c-format +msgid "E697: Missing end of List ']': %s" +msgstr "E697: Liste sonunda ']' eksik: %s" + +#, c-format +msgid "E712: Argument of %s must be a List or Dictionary" +msgstr "E712: %s ögesinin değişkeni bir liste veya sözlük olmalıdır" + +#, c-format +msgid "E896: Argument of %s must be a List, Dictionary or Blob" +msgstr "E896: %s değişkeni bir liste, sözlük veya ikili geniş nesne olmalıdır" + +msgid "E804: Cannot use '%' with Float" +msgstr "E804: Bir kayan noktalı değer ile '%' kullanılamaz" + +msgid "E908: using an invalid value as a String" +msgstr "E908: Geçersiz bir değer bir Dizi yerine kullanılıyor" + +msgid "E996: Cannot lock an option" +msgstr "E996: Seçenek kilitlenemiyor" + +#, c-format +msgid "E113: Unknown option: %s" +msgstr "E113: Bilinmeyen seçenek: %s" + +msgid "E18: Unexpected characters in :let" +msgstr "E18: :let içinde beklenmeyen karakter" + +#, c-format +msgid "E998: Reduce of an empty %s with no initial value" +msgstr "E998: Başlangıç değeri olmayan boş bir %s için reduce() yapılamıyor" + +#, c-format +msgid "E857: Dictionary key \"%s\" required" +msgstr "E857: Sözlük anahtarı \"%s\" gerekiyor" + +msgid "E47: Error while reading errorfile" +msgstr "E47: Hata dosyası okunurken hata" + +msgid "E48: Not allowed in sandbox" +msgstr "E48: Kum havuzunda izin verilmiyor" + +msgid "E523: Not allowed here" +msgstr "E523: Burada izin verilmiyor" + +msgid "E578: Not allowed to change text here" +msgstr "E578: Burada metin değişikliğine izin verilmiyor" + +msgid "E565: Not allowed to change text or change window" +msgstr "E565: Pencere veya metin değişikliğine izin verilmiyor" + +msgid "E359: Screen mode setting not supported" +msgstr "E359: Ekran kipi ayarı desteklenmiyor" + +msgid "E49: Invalid scroll size" +msgstr "E49: Geçersiz kaydırma boyutu" + +msgid "E91: 'shell' option is empty" +msgstr "E91: 'shell' seçeneği boş" + +msgid "E255: Couldn't read in sign data!" +msgstr "E255: İşaret verisi okunamadı!" + +msgid "E72: Close error on swap file" +msgstr "E72: Takas dosyasında kapama hatası" + +msgid "E73: tag stack empty" +msgstr "E73: Etiket yığını boş" + +msgid "E74: Command too complex" +msgstr "E74: Komut çok karmaşık" + +msgid "E75: Name too long" +msgstr "E75: Ad çok uzun" + +msgid "E76: Too many [" +msgstr "E76: Çok fazla [" + +msgid "E77: Too many file names" +msgstr "E77: Çok fazla dosya adı" + +msgid "E488: Trailing characters" +msgstr "E488: Sonda fazladan karakterler" + +#, c-format +msgid "E488: Trailing characters: %s" +msgstr "E488: Sonda fazladan karakterler: %s" + +msgid "E78: Unknown mark" +msgstr "E78: Bilinmeyen im" + +msgid "E79: Cannot expand wildcards" +msgstr "E79: Joker karakterleri genişletilemiyor" + +msgid "E591: 'winheight' cannot be smaller than 'winminheight'" +msgstr "E591: 'winheight' değeri 'winminheight' değerinden küçük olamaz" + +msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'" +msgstr "E592: 'winwidth' değeri 'winminwidth' değerinden küçük olamaz" + +msgid "E80: Error while writing" +msgstr "E80: Yazma sırasında hata" + +msgid "E939: Positive count required" +msgstr "E939: Pozitif sayım gerekiyor" + +msgid "E81: Using <SID> not in a script context" +msgstr "E81: <SID> bir betik bağlamında kullanılmıyor" + +#, c-format +msgid "E107: Missing parentheses: %s" +msgstr "E107: Ayraç eksik: %s" + +msgid "E110: Missing ')'" +msgstr "E110: ')' eksik" + +#, c-format +msgid "E720: Missing colon in Dictionary: %s" +msgstr "E720: Sözlükte iki nokta eksik: %s" + +#, c-format +msgid "E721: Duplicate key in Dictionary: \"%s\"" +msgstr "E721: Sözlükte yinelenmiş anahtar: \"%s\"" + +#, c-format +msgid "E722: Missing comma in Dictionary: %s" +msgstr "E722: Sözlükte virgül eksik: %s" + +#, c-format +msgid "E723: Missing end of Dictionary '}': %s" +msgstr "E723: Sözlük sonu '}' eksik: %s" + +msgid "E449: Invalid expression received" +msgstr "E449: Geçersiz ifade alındı" + +msgid "E463: Region is guarded, cannot modify" +msgstr "E463: Bölge korunuyor, değiştirilemez" + +msgid "E744: NetBeans does not allow changes in read-only files" +msgstr "E744: NetBeans salt okunur dosyalarda değişikliklere izin vermiyor" + +msgid "E363: pattern uses more memory than 'maxmempattern'" +msgstr "E363: Dizgi 'maxmempattern' ögesinden daha fazla bellek kullanıyor" + +msgid "E749: empty buffer" +msgstr "E749: Boş arabellek" + +#, c-format +msgid "E86: Buffer %ld does not exist" +msgstr "E86: Arabellek %ld mevcut değil" + +msgid "E682: Invalid search pattern or delimiter" +msgstr "E682: Geçersiz arama dizgisi veya sınırlandırıcısı" + +msgid "E139: File is loaded in another buffer" +msgstr "E139: Dosya başka bir arabellekte yüklü" + +#, c-format +msgid "E764: Option '%s' is not set" +msgstr "E764: '%s' seçeneği ayarlanmamış" + +msgid "E850: Invalid register name" +msgstr "E850: Geçersiz yazmaç adı" + +msgid "E806: using Float as a String" +msgstr "E806: Kayan Noktalı Değer, bir Dizi yerine kullanılıyor" + +#, c-format +msgid "E919: Directory not found in '%s': \"%s\"" +msgstr "E919: '%s' içinde dizin bulunamadı: \"%s\"" + +msgid "E952: Autocommand caused recursive behavior" +msgstr "E952: Otokomut özyineli davranışa neden oldu" + +msgid "E813: Cannot close autocmd or popup window" +msgstr "E813: Otokomut veya açılır pencere kapatılamıyor" + +msgid "E328: Menu only exists in another mode" +msgstr "E328: Menü yalnızca başka bir kipte mevcut" + +msgid "E957: Invalid window number" +msgstr "E957: Geçersiz pencere numarası" + +#, c-format +msgid "E686: Argument of %s must be a List" +msgstr "E686: %s değişkeni bir liste olmalı" + +msgid "E109: Missing ':' after '?'" +msgstr "E109: '?' sonrası ':' eksik" + +msgid "E690: Missing \"in\" after :for" +msgstr "E690: :for sonrası \"in\" eksik" + +#, c-format +msgid "E117: Unknown function: %s" +msgstr "E117: Bilinmeyen işlev: %s" + +msgid "E111: Missing ']'" +msgstr "E111: ']' eksik" + +msgid "E581: :else without :if" +msgstr "E581: :if olmadan :else" + +msgid "E582: :elseif without :if" +msgstr "E582: :if olmadan :elseif" + +msgid "E580: :endif without :if" +msgstr "E580: :if olmadan :endif" + +msgid "E586: :continue without :while or :for" +msgstr "E586: :while veya :for olmadan :continue" + +msgid "E587: :break without :while or :for" +msgstr "E587: :while veya :for olmadan :break" + +msgid "E274: No white space allowed before parenthesis" +msgstr "E274: Ayraçtan önce boşluğa izin verilmiyor" + +#, c-format +msgid "E940: Cannot lock or unlock variable %s" +msgstr "E940: Değişken %s kilitlenemiyor veya açılamıyor" + +#, c-format +msgid "E254: Cannot allocate color %s" +msgstr "E254: %s rengi ayrılamıyor" + +msgid "search hit TOP, continuing at BOTTOM" +msgstr "Arama dosyanın BAŞINI geçti, dosyanın SONUNDAN sürüyor" + +msgid "search hit BOTTOM, continuing at TOP" +msgstr "Arama dosyanın SONUNU geçti, dosyanın BAŞINDAN sürüyor" + +msgid " line " +msgstr " satır " + +#, c-format +msgid "Need encryption key for \"%s\"" +msgstr "\"%s\" için şifreleme anahtarı gerekli" + +msgid "empty keys are not allowed" +msgstr "boş anahtarlara izin verilmiyor" + +msgid "dictionary is locked" +msgstr "sözlük kilitli" + +msgid "list is locked" +msgstr "liste kilitli" + +#, c-format +msgid "failed to add key '%s' to dictionary" +msgstr "'%s' anahtarı sözlüğe eklenemedi" + +#, c-format +msgid "index must be int or slice, not %s" +msgstr "dizin bir tamsayı veya dilim olmalıdır, %s olamaz" + +#, c-format +msgid "expected str() or unicode() instance, but got %s" +msgstr "str() veya unicode() örneği bekleniyordu, %s geldi" + +#, c-format +msgid "expected bytes() or str() instance, but got %s" +msgstr "bytes() veya str() örneği bekleniyordu, %s geldi" + +#, c-format +msgid "" +"expected int(), long() or something supporting coercing to long(), but got %s" +msgstr "" +"int(), long() veya long()'a baskıyı destekleyen bir şey bekleniyordu, %s " +"geldi" + +#, c-format +msgid "expected int() or something supporting coercing to int(), but got %s" +msgstr "int() veya int()'e baskıyı destekleyen bir şey bekleniyordu, %s geldi" + +msgid "value is too large to fit into C int type" +msgstr "değer C tamsayı türüne sığmak için çok büyük" + +msgid "value is too small to fit into C int type" +msgstr "değer C tamsayı türüne sığmak için çok küçük" + +msgid "number must be greater than zero" +msgstr "sayı sıfırdan büyük olmalı" + +msgid "number must be greater or equal to zero" +msgstr "sayı sıfıra eşit veya sıfırdan büyük olmalı" + +msgid "can't delete OutputObject attributes" +msgstr "OutputObject öznitelikleri silinemiyor" + +#, c-format +msgid "invalid attribute: %s" +msgstr "geçersiz öznitelik: %s" + +msgid "E264: Python: Error initialising I/O objects" +msgstr "E264: Python: Girdi/Çıktı nesneleri başlatılırken hata" + +msgid "failed to change directory" +msgstr "dizin değiştirilemedi" + +#, c-format +msgid "expected 3-tuple as imp.find_module() result, but got %s" +msgstr "imp.find_module() sonucu olarak 3 çoklu öge bekleniyordu, %s geldi" + +#, c-format +msgid "expected 3-tuple as imp.find_module() result, but got tuple of size %d" +msgstr "" +"imp.find_module() sonucu olarak 3 tuple bekleniyordu, %d boyutlu çok öge " +"geldi" + +msgid "internal error: imp.find_module returned tuple with NULL" +msgstr "iç hata: imp.find_module BOŞ bir çoklu öge döndürdü" + +msgid "cannot delete vim.Dictionary attributes" +msgstr "vim.Dictionary öznitelikleri silinemiyor" + +msgid "cannot modify fixed dictionary" +msgstr "sabit sözlük değiştirilemiyor" + +#, c-format +msgid "cannot set attribute %s" +msgstr "%s özniteliği ayarlanamıyor" + +msgid "hashtab changed during iteration" +msgstr "Sağlama tablosu dürüm sırasında değişti" + +#, c-format +msgid "expected sequence element of size 2, but got sequence of size %d" +msgstr "2 boyut bir sıralama bekleniyordu, ancak %d boyut bir sıralama geldi" + +msgid "list constructor does not accept keyword arguments" +msgstr "liste yapıcısı anahtar sözcük değişkenleri kabul etmez" + +msgid "list index out of range" +msgstr "liste dizini erimin dışında" + +#, c-format +msgid "internal error: failed to get Vim list item %d" +msgstr "iç hata: %d vim liste ögesi alınamadı" + +msgid "slice step cannot be zero" +msgstr "dilim adımı sıfır olamaz" + +#, c-format +msgid "attempt to assign sequence of size greater than %d to extended slice" +msgstr "genişletilmiş dilime %d boyuttan büyük bir sıralamayı atama denemesi" + +#, c-format +msgid "internal error: no Vim list item %d" +msgstr "iç hata: %d vim liste ögesi yok" + +msgid "internal error: not enough list items" +msgstr "iç hata: yeterli liste ögesi yok" + +msgid "internal error: failed to add item to list" +msgstr "iç hata: öge listeye eklenemedi" + +#, c-format +msgid "attempt to assign sequence of size %d to extended slice of size %d" +msgstr "%d boyut sıralamayı %d boyut genişletilmiş dizine atama denemesi" + +msgid "failed to add item to list" +msgstr "öge listeye eklenemedi" + +msgid "cannot delete vim.List attributes" +msgstr "vim.List öznitelikleri silinemiyor" + +msgid "cannot modify fixed list" +msgstr "sabit liste değiştirilemiyor" + +#, c-format +msgid "unnamed function %s does not exist" +msgstr "adsız %s işlevi mevcut değil" + +#, c-format +msgid "function %s does not exist" +msgstr "%s işlevi mevcut değil" + +#, c-format +msgid "failed to run function %s" +msgstr "%s işlevi çalıştırılamadı" + +msgid "unable to get option value" +msgstr "seçenek değeri alınamadı" + +msgid "internal error: unknown option type" +msgstr "iç hata: bilinmeyen seçenek türü" + +msgid "problem while switching windows" +msgstr "pencereler arasında gezinirken hata" + +#, c-format +msgid "unable to unset global option %s" +msgstr "%s global seçenek ayarı kapatılamıyor" + +#, c-format +msgid "unable to unset option %s which does not have global value" +msgstr "global değeri olmayan %s seçenek ayarı kapatılamıyor" + +msgid "attempt to refer to deleted tab page" +msgstr "silinmiş sekme sayfasına başvurma denemesi" + +msgid "no such tab page" +msgstr "böyle bir sekme sayfası yok" + +msgid "attempt to refer to deleted window" +msgstr "silinmiş pencereye başvurma denemesi" + +msgid "readonly attribute: buffer" +msgstr "saltokunur öznitelik: arabellek" + +msgid "cursor position outside buffer" +msgstr "imleç konumu arabelleğin dışında" + +msgid "no such window" +msgstr "böyle bir pencere yok" + +msgid "attempt to refer to deleted buffer" +msgstr "silinmiş arabelleğe başvurma denemesi" + +msgid "failed to rename buffer" +msgstr "arabellek adı değiştirilemedi" + +msgid "mark name must be a single character" +msgstr "im adı tek bir karakterden olmalıdır" + +#, c-format +msgid "expected vim.Buffer object, but got %s" +msgstr "vim.Buffer nesnesi bekleniyordu, %s geldi" + +#, c-format +msgid "failed to switch to buffer %d" +msgstr "%d arabelleğine geçilemedi" + +#, c-format +msgid "expected vim.Window object, but got %s" +msgstr "vim.Window nesnesi bekleniyordu, %s geldi" + +msgid "failed to find window in the current tab page" +msgstr "mevcut sekme sayfasında pencere bulunamadı" + +msgid "did not switch to the specified window" +msgstr "belirtilen pencereye geçilemedi" + +#, c-format +msgid "expected vim.TabPage object, but got %s" +msgstr "vim.TabPage nesnesi bekleniyordu, %s geldi" + +msgid "did not switch to the specified tab page" +msgstr "belirtilen sekme sayfasına geçilemedi" + +msgid "failed to run the code" +msgstr "kod çalıştırılamadı" + +msgid "E858: Eval did not return a valid python object" +msgstr "E858: Eval geçerli bir python nesnesi döndürmedi" + +msgid "E859: Failed to convert returned python object to a Vim value" +msgstr "E859: Döndürülen python nesnesi vim değerine dönüştürülemedi" + +#, c-format +msgid "unable to convert %s to a Vim dictionary" +msgstr "%s vim sözlüğüne dönüştürülemedi" + +#, c-format +msgid "unable to convert %s to a Vim list" +msgstr "%s vim listesine dönüştürülemedi" + +#, c-format +msgid "unable to convert %s to a Vim structure" +msgstr "%s vim yapısına dönüştürülemedi" + +msgid "internal error: NULL reference passed" +msgstr "iç hata: BOŞ başvuru geçirildi" + +msgid "internal error: invalid value type" +msgstr "iç hata: geçersiz değer türü" + +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 "" +"Yol kancası ayarlanamadı: sys.path_hooks bir liste değil\n" +"Şimdi şunları yapmanız gerekiyor:\n" +"- vim.path_hook'u sys.path_hooks'a iliştirmek\n" +"- vim.VIM_SPECIAL_PATH'i sys.path'e iliştirmek\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 "" +"Yol ayarlanamadı: sys.path bir liste değil\n" +"Şimdi vim.VIM_SPECIAL_PATH'i sys.path'e iliştirmelisiniz" + +msgid "" +"Vim macro files (*.vim)\t*.vim\n" +"All Files (*.*)\t*.*\n" +msgstr "" +"Vim makro dosyaları (*.vim)\t*.vim\n" +"Tüm Dosyalar (*.*)\t*.*\n" + +msgid "All Files (*.*)\t*.*\n" +msgstr "Tüm Dosyalar (*.*)\t*.*\n" + +msgid "" +"All Files (*.*)\t*.*\n" +"C source (*.c, *.h)\t*.c;*.h\n" +"C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n" +"VB code (*.bas, *.frm)\t*.bas;*.frm\n" +"Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" +msgstr "" +"Tüm Dosyalar (*.*)\t*.*\n" +"C kaynak dosyaları (*.c, *.h)\t*.c;*.h\n" +"C++ kaynak dosyaları (*.cpp, *.hpp)\t*.cpp;*.hpp\n" +"VB kodu (*.bas, *.frm)\t*.bas;*.frm\n" +"Vim dosyaları (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" + +msgid "" +"Vim macro files (*.vim)\t*.vim\n" +"All Files (*)\t*\n" +msgstr "" +"Vim makro dosyaları (*.vim)\t*.vim\n" +"Tüm Dosyalar (*)\t*\n" + +msgid "All Files (*)\t*\n" +msgstr "Tüm Dosyalar (*)\t*\n" + +msgid "" +"All Files (*)\t*\n" +"C source (*.c, *.h)\t*.c;*.h\n" +"C++ source (*.cpp, *.hpp)\t*.cpp;*.hpp\n" +"Vim files (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" +msgstr "" +"Tüm Dosyalar (*)\t*\n" +"C kaynak dosyaları (*.c, *.h)\t*.c;*.h\n" +"C++ kaynak dosyaları (*.cpp, *.hpp)\t*.cpp;*.hpp\n" +"Vim dosyaları (*.vim, _vimrc, _gvimrc)\t*.vim;_vimrc;_gvimrc\n" + +msgid "GVim" +msgstr "GVim" + +msgid "Text Editor" +msgstr "Metin Düzenleyici" + +msgid "Edit text files" +msgstr "Metin dosyaları düzenleyin" + +msgid "Text;editor;" +msgstr "Metin;düzenleyici;" + +msgid "Vim" +msgstr "Vim" + +msgid "(local to window)" +msgstr "(pencereye yerel)" + +msgid "(local to buffer)" +msgstr "(arabelleğe yerel)" + +msgid "(global or local to buffer)" +msgstr "(arabelleğe global veya yerel)" + +msgid "" +"\" Each \"set\" line shows the current value of an option (on the left)." +msgstr "\" Her \"set\" satırı bir seçeneğin geçerli değerini gösterir (solda)." + +msgid "\" Hit <Enter> on a \"set\" line to execute it." +msgstr "\" Değiştirmek için bir \"set\" satırında <Enter>'a basın." + +msgid "\" A boolean option will be toggled." +msgstr "\" Bir Boole değeri işletilecektir." + +msgid "" +"\" For other options you can edit the value before hitting " +"<Enter>." +msgstr "" +"\" Diğer seçenekler için <Enter>'a basmadan önce değeri " +"düzenleyebilirsiniz." + +msgid "\" Hit <Enter> on a help line to open a help window on this option." +msgstr "" +"\" Yardım penceresini açmak için seçenek adı üzerinde <Enter>'a basın." + +msgid "\" Hit <Enter> on an index line to jump there." +msgstr "" +"\" Bir seçeneğe atlamak için indeks satırının üzerinde <Enter>'a basın." + +msgid "\" Hit <Space> on a \"set\" line to refresh it." +msgstr "" +"\" Bir seçeneği yenilemek için bir \"set\" satırının üzerinde <Boşluk>'a " +"basın." + +msgid "important" +msgstr "önemli" + +msgid "behave very Vi compatible (not advisable)" +msgstr "olabildiğince Vi uyumlu biçimde davran (önerilmez)" + +msgid "list of flags to specify Vi compatibility" +msgstr "Vi uyumluluğu bayrakları listesi" + +msgid "use Insert mode as the default mode" +msgstr "Ekleme kipini öntanımlı kip olarak kullan" + +msgid "paste mode, insert typed text literally" +msgstr "yapıştır kipi, girilen metni doğrudan ekle" + +msgid "key sequence to toggle paste mode" +msgstr "yapıştır kipini açıp/kapatmak için düğme sıralaması" + +msgid "list of directories used for runtime files and plugins" +msgstr "çalışma zamanı dosyaları ve eklentileri için kullanılan dizinler" + +msgid "list of directories used for plugin packages" +msgstr "eklenti paketleri için kullanılan dizinlerin listesi" + +msgid "name of the main help file" +msgstr "ana yardım dosyasının adı" + +msgid "moving around, searching and patterns" +msgstr "dolaşma, arama ve dizgeler" + +msgid "list of flags specifying which commands wrap to another line" +msgstr "hangi komutların diğer satıra kaydırıldığını belirleyen bayraklar\n" +"listesi" + +msgid "" +"many jump commands move the cursor to the first non-blank\n" +"character of a line" +msgstr "" +"çoğu atlama komutu, imleci satırın boş olmayan ilk\n" +"karakterine taşır" + +msgid "nroff macro names that separate paragraphs" +msgstr "paragrafları ayıran nroff makro adları" + +msgid "nroff macro names that separate sections" +msgstr "bölümleri ayıran nroff makro adları" + +msgid "list of directory names used for file searching" +msgstr "dosya arama için kullanılan dizin adları listesi" + +msgid "list of directory names used for :cd" +msgstr ":cd için kullanılan dizin adları listesi" + +msgid "change to directory of file in buffer" +msgstr "arabellekteki dosyanın olduğu dizine değiştir" + +msgid "search commands wrap around the end of the buffer" +msgstr "arama komutları, arabelleğin sonunda kaydırılır" + +msgid "show match for partly typed search command" +msgstr "bir kısmı yazılmış arama komutu ile eşleşeni göster" + +msgid "change the way backslashes are used in search patterns" +msgstr "arama dizgilerinde ters eğik çizginin kullanımını değiştir" + +msgid "select the default regexp engine used" +msgstr "öntanımlı kullanılan düzenli ifade motorunu seç" + +msgid "ignore case when using a search pattern" +msgstr "bir arama dizgisinde BÜYÜK/küçük harf ayrımını yok say" + +msgid "override 'ignorecase' when pattern has upper case characters" +msgstr "dizgide BÜYÜK harf varsa 'ignorecase'i geçersiz kıl" + +msgid "what method to use for changing case of letters" +msgstr "BÜYÜK/küçük harf değiştirirken hangi yöntemin kullanılacağı" + +msgid "maximum amount of memory in Kbyte used for pattern matching" +msgstr "dizgi eşleşme için kullanılabilecek en çok bellek miktarı (KiB)" + +msgid "pattern for a macro definition line" +msgstr "bir makro tanım satırı için dizgi" + +msgid "pattern for an include-file line" +msgstr "bir 'include-file' satırı için dizgi" + +msgid "expression used to transform an include line to a file name" +msgstr "bir 'include' satırını dosya adına dönüştürmede kullanılan ifade" + +msgid "tags" +msgstr "etiketler" + +msgid "use binary searching in tags files" +msgstr "etiketler dosyasında ikili arama kullan" + +msgid "number of significant characters in a tag name or zero" +msgstr "bir etiket adındaki belirgin karakterlerin sayısı veya sıfır" + +msgid "list of file names to search for tags" +msgstr "etiketlerin aranacağı dosyaların listesi" + +msgid "" +"how to handle case when searching in tags files:\n" +"\"followic\" to follow 'ignorecase', \"ignore\" or \"match\"" +msgstr "" +"etiket dosyalarında arama yaparken BÜYÜK/küçük harf kullanımı:\n" +"'ignorecase', \"ignore\" veya \"match\"den sonra \"followic\" gelir" + +msgid "file names in a tags file are relative to the tags file" +msgstr "bir etiket dosyasındaki dosya adları etiket dosyasına görelidir" + +msgid "a :tag command will use the tagstack" +msgstr "bir :tag komutu etiket yığınını kullanır" + +msgid "when completing tags in Insert mode show more info" +msgstr "Ekleme kipinde etiketleri tamamlarken daha çok bilgi göster" + +msgid "a function to be used to perform tag searches" +msgstr "etiket aramaları gerçekleştirmek için bir işlev kullanılır" + +msgid "command for executing cscope" +msgstr "cscope çalıştırmak için kullanılacak komut" + +msgid "use cscope for tag commands" +msgstr "etiket komutları için cscope kullan" + +msgid "0 or 1; the order in which \":cstag\" performs a search" +msgstr "0 veya 1; \":cstag\"in arama yaparken kullanacağı sıra" + +msgid "give messages when adding a cscope database" +msgstr "bir cscope veritabanı eklerken iletiler göster" + +msgid "how many components of the path to show" +msgstr "yolun kaç tane bileşeninin gösterileceği" + +msgid "when to open a quickfix window for cscope" +msgstr "cscope için ne zaman bir hızlı düzelt penceresinin açılacağı" + +msgid "file names in a cscope file are relative to that file" +msgstr "bir cscope dosyasındaki o dosyaya göreli olan dosya adları" + +msgid "displaying text" +msgstr "metin görüntüleme" + +msgid "number of lines to scroll for CTRL-U and CTRL-D" +msgstr "CTRL-U ve CTRL-D için kaydırılacak satır sayısı" + +msgid "number of screen lines to show around the cursor" +msgstr "imleç etrafında gösterilecek ekran satırları sayısı" + +msgid "long lines wrap" +msgstr "uzun satırları kaydır" + +msgid "wrap long lines at a character in 'breakat'" +msgstr "'breakat' içindeki bir karakterde uzun satırları kaydır" + +msgid "preserve indentation in wrapped text" +msgstr "kaydırılmış metindeki girintilemeyi koru" + +msgid "adjust breakindent behaviour" +msgstr "'breakindent' davranışını ayarla" + +msgid "which characters might cause a line break" +msgstr "hangi karakterler bir satır sonuna neden olabilir" + +msgid "string to put before wrapped screen lines" +msgstr "kaydırılmış ekran satırlarından önce konumlanacak dizi" + +msgid "minimal number of columns to scroll horizontally" +msgstr "en az yatay kaydırma sütunu sayısı" + +msgid "minimal number of columns to keep left and right of the cursor" +msgstr "imlecin sağında ve solunda bırakılacak en az sütun sayısı" + +msgid "" +"include \"lastline\" to show the last line even if it doesn't fit\n" +"include \"uhex\" to show unprintable characters as a hex number" +msgstr "" +"eğer sığmasa bile son satırı göstermek için \"lastline\"ı içer\n" +"yazdırılamayan karakterleri onaltılık olarak göstermek için\n" +"\"uhex\" içer" + +msgid "characters to use for the status line, folds and filler lines" +msgstr "durum satırı, kıvırma ve doldurucular için kullanılan karakterler" + +msgid "number of lines used for the command-line" +msgstr "komut satırı için kullanılan satırların sayısı" + +msgid "width of the display" +msgstr "ekranın genişliği" + +msgid "number of lines in the display" +msgstr "ekrandaki satırların sayısı" + +msgid "number of lines to scroll for CTRL-F and CTRL-B" +msgstr "CTRL-F ve CTRL-B için kaydırılacak satır sayısı" + +msgid "don't redraw while executing macros" +msgstr "makroları çalıştırırken yenileme yapma" + +msgid "timeout for 'hlsearch' and :match highlighting in msec" +msgstr "'hlsearch' ve : match vurgulaması için zaman aşımı (milisaniye)" + +msgid "" +"delay in msec for each char written to the display\n" +"(for debugging)" +msgstr "" +"ekrana yazılan her karakter için gecikme süresi (milisaniye)\n" +"(hata ayıklama için)" + +msgid "show <Tab> as ^I and end-of-line as $" +msgstr "<Tab>'ı ^I ve satır sonunu $ olarak göster" + +msgid "list of strings used for list mode" +msgstr "liste kipi için kullanılan diziler listesi" + +msgid "show the line number for each line" +msgstr "her satır için satır numarasını göster" + +msgid "show the relative line number for each line" +msgstr "her satır için göreli satır numarasını göster" + +msgid "number of columns to use for the line number" +msgstr "satır numarası için kullanılacak sütün sayısı" + +msgid "controls whether concealable text is hidden" +msgstr "gizlenebilir metnin saklı olup olmadığını denetler" + +msgid "modes in which text in the cursor line can be concealed" +msgstr "imleç satırındaki metnin gizlenebileceği kipler" + +msgid "syntax, highlighting and spelling" +msgstr "sözdizim, vurgulama ve yazım denetimi" + +msgid "\"dark\" or \"light\"; the background color brightness" +msgstr "\"dark\" veya \"light\"; arka plan renk parlaklığı" + +msgid "type of file; triggers the FileType event when set" +msgstr "dosya türü; ayarlandığında FileType olayını tetikler" + +msgid "name of syntax highlighting used" +msgstr "kullanılan sözdizim vurgulamanın adı" + +msgid "maximum column to look for syntax items" +msgstr "sözdizim ögeleri için bakılacak en çok sütun sayısı" + +msgid "which highlighting to use for various occasions" +msgstr "çeşitli durumlarda hangi vurgulamanın kullanılacağı" + +msgid "highlight all matches for the last used search pattern" +msgstr "son kullanılan arama dizgisi için tüm eşleşmeleri vurgula" + +msgid "highlight group to use for the window" +msgstr "pencere için kullanılacak vurgulama grubu" + +msgid "use GUI colors for the terminal" +msgstr "uçbirim için grafik arabirim renklerini kullan" + +msgid "highlight the screen column of the cursor" +msgstr "imlecin ekrandaki sütununu vurgula" + +msgid "highlight the screen line of the cursor" +msgstr "imlecin ekrandaki satırını vurgula" + +msgid "specifies which area 'cursorline' highlights" +msgstr "'cursorline'ın hangi alanı vurgulayacağı" + +msgid "columns to highlight" +msgstr "vurgulanacak sütunlar" + +msgid "highlight spelling mistakes" +msgstr "yazım yanlışlarını vurgula" + +msgid "list of accepted languages" +msgstr "kabul edilen dillerin listesi" + +msgid "file that \"zg\" adds good words to" +msgstr "\"zg\" komutunun düzgün sözcükleri ekleyeceği dosya" + +msgid "pattern to locate the end of a sentence" +msgstr "bir tümcenin sonunu bulmak için kullanılan dizgi" + +msgid "flags to change how spell checking works" +msgstr "yazım denetiminin nice çalıştığını değiştirmek için bayraklar" + +msgid "methods used to suggest corrections" +msgstr "düzeltmeleri önermek için yöntemler" + +msgid "amount of memory used by :mkspell before compressing" +msgstr "sıkıştırma öncesi :mkspell tarafından kullanılan bellek" + +msgid "multiple windows" +msgstr "çoklu pencereler" + +msgid "0, 1 or 2; when to use a status line for the last window" +msgstr "0, 1 veya 2; son pencere için ne zaman bir durum satırı\n" +"kullanılacağı" + +msgid "alternate format to be used for a status line" +msgstr "durum satırı için kullanılabilecek alternatif biçim" + +msgid "make all windows the same size when adding/removing windows" +msgstr "pencere eklerken/kaldırırken tüm pencereleri aynı boyuta getir" + +msgid "in which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"" +msgstr "'equalalways'in hangi yönde çalıştığı: \"ver\", \"hor\" veya \"both\"" + +msgid "minimal number of lines used for the current window" +msgstr "geçerli pencere için kullanılan en az satır sayısı" + +msgid "minimal number of lines used for any window" +msgstr "herhangi bir pencere için kullanılan en az satır sayısı" + +msgid "keep the height of the window" +msgstr "pencerenin yüksekliğini tut" + +msgid "keep the width of the window" +msgstr "pencerenin genişliğini tut" + +msgid "minimal number of columns used for the current window" +msgstr "geçerli pencere için kullanılan en az sütun sayısı" + +msgid "minimal number of columns used for any window" +msgstr "herhangi bir pencere için kullanılan en az sütun sayısı" + +msgid "initial height of the help window" +msgstr "yardım penceresinin başlangıç yüksekliği" + +msgid "use a popup window for preview" +msgstr "önizleme için bir açılır pencere kullan" + +msgid "default height for the preview window" +msgstr "önizleme penceresi için öntanımlı yükseklik" + +msgid "identifies the preview window" +msgstr "önizleme penceresini tanımlar" + +msgid "don't unload a buffer when no longer shown in a window" +msgstr "arabellek artık pencerede görüntülenmiyorsa bellekten kaldırma" + +msgid "" +"\"useopen\" and/or \"split\"; which window to use when jumping\n" +"to a buffer" +msgstr "" +"\"useopen\" ve/veya \"split\"; bir belleğe atlarken hangi\n" +"pencerenin kullanılacağı" + +msgid "a new window is put below the current one" +msgstr "geçerli pencerenin altına yeni bir pencere koyulur" + +msgid "a new window is put right of the current one" +msgstr "yeni bir pencere geçerli pencerenin sağına koyulur" + +msgid "this window scrolls together with other bound windows" +msgstr "bu pencere, bağlı diğer pencerelerle birlikte kayar" + +msgid "\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'" +msgstr "\"ver\", \"hor\" ve/veya \"jump\"; 'scrollbind' için seçenekler listesi" + +msgid "this window's cursor moves together with other bound windows" +msgstr "bu pencerenin imleci bağlı diğer pencerelerle birlikte kayar" + +msgid "size of a terminal window" +msgstr "bir uçbirim penceresinin boyutu" + +msgid "key that precedes Vim commands in a terminal window" +msgstr "bir uçbirim penceresinde Vim komutlarından önce gelen düğme" + +msgid "max number of lines to keep for scrollback in a terminal window" +msgstr "bir uçbirim penceresinde geri kaydırma için kullanılacak\n" +"en çok satır sayısı" + +msgid "type of pty to use for a terminal window" +msgstr "bir uçbirim penceresi için kullanılacak pty türü" + +msgid "name of the winpty dynamic library" +msgstr "winpty devingen kitaplığının adı" + +msgid "multiple tab pages" +msgstr "çoklu sekme sayfaları" + +msgid "0, 1 or 2; when to use a tab pages line" +msgstr "0, 1 veya 2; ne zaman bir sekme sayfası satırının kullanılacağı" + +msgid "maximum number of tab pages to open for -p and \"tab all\"" +msgstr "-p ve \"tab all\"un açacağı en çok sekme sayfası sayısı" + +msgid "custom tab pages line" +msgstr "özelleştirilmiş sekme sayfası satırı" + +msgid "custom tab page label for the GUI" +msgstr "grafik arabirim için özelleştirilmiş sekme sayfası etiketi" + +msgid "custom tab page tooltip for the GUI" +msgstr "grafik arabirim için özelleştirilmiş sekme sayfası bilgi kutusu" + +msgid "terminal" +msgstr "uçbirim" + +msgid "name of the used terminal" +msgstr "kullanılan uçbirimin adı" + +msgid "alias for 'term'" +msgstr "'term' için arma" + +msgid "check built-in termcaps first" +msgstr "önce iç termcaps'i denetle" + +msgid "terminal connection is fast" +msgstr "uçbirim bağlantısı hızlı" + +msgid "terminal that requires extra redrawing" +msgstr "ek yenileme gerektiren uçbirim" + +msgid "recognize keys that start with <Esc> in Insert mode" +msgstr "Ekleme kipinde <Esc> ile başlayan düğmeleri tanı" + +msgid "minimal number of lines to scroll at a time" +msgstr "herhangi bir zamanda kaydırılacak en az satır sayısı" + +msgid "maximum number of lines to use scrolling instead of redrawing" +msgstr "yenileme yerine kaydırma kullanacak en çok satır sayısı" + +msgid "specifies what the cursor looks like in different modes" +msgstr "imlecin farklı kiplerde nice göründüğünü belirler" + +msgid "show info in the window title" +msgstr "pencere başlığında bilgi görüntüle" + +msgid "percentage of 'columns' used for the window title" +msgstr "pencere başlığı için kullanılacak 'columns' yüzdesi" + +msgid "when not empty, string to be used for the window title" +msgstr "boş değilken, pencere başlığı yerine kullanılacak dizi" + +msgid "string to restore the title to when exiting Vim" +msgstr "Vim'den çıkarken başlığın döndürüleceği dizi" + +msgid "set the text of the icon for this window" +msgstr "bu pencere için simgenin metnini ayarla" + +msgid "when not empty, text for the icon of this window" +msgstr "boş değilken, bu pencerenin simgesi için metin" + +msgid "restore the screen contents when exiting Vim" +msgstr "Vim'den çıkarken ekran içeriğini eski haline getir" + +msgid "using the mouse" +msgstr "fare kullanımı" + +msgid "list of flags for using the mouse" +msgstr "fare kullanımı için bayraklar listesi" + +msgid "the window with the mouse pointer becomes the current one" +msgstr "fare imlecinin olduğu pencere geçerli pencere olur" + +msgid "the window with the mouse pointer scrolls with the mouse wheel" +msgstr "fare imlecinin olduğu pencere fare tekerleği ile kaydırılabilir" + +msgid "hide the mouse pointer while typing" +msgstr "yazı yazarken fare imlecini gizle" + +msgid "" +"\"extend\", \"popup\" or \"popup_setpos\"; what the right\n" +"mouse button is used for" +msgstr "" +"\"extend\", \"popup\" veya \"popup_setpos\"; sağ fare düğmesinin\"\n" +"ne için kullanıldığı" + +msgid "maximum time in msec to recognize a double-click" +msgstr "bir çif tıklamayı tanımak için en çok süre (milisaniye)" + +msgid "\"xterm\", \"xterm2\", \"sgr\", etc.; type of mouse" +msgstr "\"xterm\", \"xterm2\", \"sgr\" vb.; fare türü" + +msgid "what the mouse pointer looks like in different modes" +msgstr "farklı kiplerde fare imlecinin nice göründüğü" + +msgid "GUI" +msgstr "grafik arabirim" + +msgid "list of font names to be used in the GUI" +msgstr "grafik arabirimde kullanılacak yazıtiplerinin listesi" + +msgid "pair of fonts to be used, for multibyte editing" +msgstr "çoklu bayt düzenlemede kullanılacak yazıtipi eşleşmeleri" + +msgid "list of font names to be used for double-wide characters" +msgstr "çift genişlikli karakterler için kullanılacak yazıtiplerinin listesi" + +msgid "use smooth, antialiased fonts" +msgstr "düzletilmiş yazıtipleri kullan" + +msgid "list of flags that specify how the GUI works" +msgstr "grafik arabirimin nice çalıştığını belirleyen bayraklar listesi" + +msgid "\"icons\", \"text\" and/or \"tooltips\"; how to show the toolbar" +msgstr "" +"\"icons\", \"text\" ve/veya \"tooltips\"; araç çubuğu kipleri " + +msgid "size of toolbar icons" +msgstr "araç çubuğu simgelerinin boyutu" + +msgid "room (in pixels) left above/below the window" +msgstr "pencerenin altında/üstünde bırakılan alan (piksel)" + +msgid "options for text rendering" +msgstr "metin dokuması için seçenekler" + +msgid "use a pseudo-tty for I/O to external commands" +msgstr "dış komutlara, girdi çıktı için yalancı-tty kullan" + +msgid "" +"\"last\", \"buffer\" or \"current\": which directory used for the file " +"browser" +msgstr "" +"\"last\", \"buffer\" veya \"current\"; dosya tarayıcısı için hangi dizinin " +"kullanıldığı" + +msgid "language to be used for the menus" +msgstr "menüler için kullanılan dil" + +msgid "maximum number of items in one menu" +msgstr "bir menüdeki en çok öge sayısı" + +msgid "\"no\", \"yes\" or \"menu\"; how to use the ALT key" +msgstr "\"no\", \"yes\" veya \"menu\"; ALT düğmesinin nice kullanılacağı" + +msgid "number of pixel lines to use between characters" +msgstr "karakterler arasında kullanılacak piksel satırları sayısı" + +msgid "delay in milliseconds before a balloon may pop up" +msgstr "bir balonun patlamadan önceki gecikme (milisaniye)" + +msgid "use balloon evaluation in the GUI" +msgstr "grafik arabirimde balon değerlendirme kullan" + +msgid "use balloon evaluation in the terminal" +msgstr "uçbirimde balon değerlendirme kullan" + +msgid "expression to show in balloon eval" +msgstr "balon değerlendirmesinde gösterilecek ifade" + +msgid "printing" +msgstr "yazdırma" + +msgid "list of items that control the format of :hardcopy output" +msgstr ":hardcopy çıktısının biçimini denetleyen ögelerin listesi" + +msgid "name of the printer to be used for :hardcopy" +msgstr ":hardcopy için kullanılan yazıcının adı" + +msgid "expression used to print the PostScript file for :hardcopy" +msgstr ":hardcopy için PostScript dosyasını yazdırmada kullanılan ifade" + +msgid "name of the font to be used for :hardcopy" +msgstr ":hardcopy için kullanılan yazıtipinin adı" + +msgid "format of the header used for :hardcopy" +msgstr ":hardcopy için kullanılan üstbilginin biçimi" + +msgid "encoding used to print the PostScript file for :hardcopy" +msgstr ":hardcopy için Postscript dosyasını yazdırmada kullanılan kodlama" + +msgid "the CJK character set to be used for CJK output from :hardcopy" +msgstr ":hardcopy'deki ÇJK çıktısında kullanılan ÇJK karakter seti" + +msgid "list of font names to be used for CJK output from :hardcopy" +msgstr ":hardcopy'deki ÇJK çıktısında kullanılan ÇJK yazıtipi" + +msgid "messages and info" +msgstr "iletiler ve bilgi" + +msgid "add 's' flag in 'shortmess' (don't show search message)" +msgstr "'shortness'daki 's' bayrağını ekle (arama iletisini gösterme)" + +msgid "list of flags to make messages shorter" +msgstr "iletileri kısalaştırmak için kullanılan bayraklar listesi" + +msgid "show (partial) command keys in the status line" +msgstr "durum satırında (kısmi) komut düğmelerini göster" + +msgid "display the current mode in the status line" +msgstr "durum satırında geçerli kipi görüntüle" + +msgid "show cursor position below each window" +msgstr "her pencerenin altında imleç konumunu göster" + +msgid "alternate format to be used for the ruler" +msgstr "cetvel için kullanılan alternatif biçim" + +msgid "threshold for reporting number of changed lines" +msgstr "değiştirilmiş satırların sayısını raporlama eşiği" + +msgid "the higher the more messages are given" +msgstr "ne kadar yüksek olursa o kadar çok ileti olur" + +msgid "file to write messages in" +msgstr "iletilerin içine yazılacağı dosya" + +msgid "pause listings when the screen is full" +msgstr "ekran doluyken listelemeleri duraklat" + +msgid "start a dialog when a command fails" +msgstr "bir komut başarısız olursa iletişim kutusu göster" + +msgid "ring the bell for error messages" +msgstr "hata iletilerinde zili çal" + +msgid "use a visual bell instead of beeping" +msgstr "bipleme yerine görsel zil kullan" + +msgid "do not ring the bell for these reasons" +msgstr "bu nedenlerle zili çalma" + +msgid "list of preferred languages for finding help" +msgstr "yardım için yeğlenen diller listesi" + +msgid "selecting text" +msgstr "metin seçme" + +msgid "\"old\", \"inclusive\" or \"exclusive\"; how selecting text behaves" +msgstr "\"old\", \"inclusive\" veya \"exclusive\"; metin seçim davranışı" + +msgid "" +"\"mouse\", \"key\" and/or \"cmd\"; when to start Select mode\n" +"instead of Visual mode" +msgstr "" +"\"mouse\", \"key\", ve/veya \"cmd\"; Görsel kip yerine Seçim\n" +"kipinin başlatılacağı zaman" + +msgid "" +"\"unnamed\" to use the * register like unnamed register\n" +"\"autoselect\" to always put selected text on the clipboard" +msgstr "" +"\"unnamed\": * yazmacını adsız yazmaç gibi kullan\n" +"\"autoselect\": seçili metni her zaman panoya koy" + +msgid "\"startsel\" and/or \"stopsel\"; what special keys can do" +msgstr "\"startsel\" ve/veya \"stopsel\"; özel düğmelerin işlevleri" + +msgid "editing text" +msgstr "metin düzenleme" + +msgid "maximum number of changes that can be undone" +msgstr "geri alınabilecek en çok değişiklik sayısı" + +msgid "automatically save and restore undo history" +msgstr "geri al geçmişini kendiliğinden kaydet ve eski haline getir" + +msgid "list of directories for undo files" +msgstr "geri al dosyaları için dizinler listesi" + +msgid "maximum number lines to save for undo on a buffer reload" +msgstr "arabellek yeniden yüklemesinde geri al için kaydedilecek\n" +"en çok satır sayısı" + +msgid "changes have been made and not written to a file" +msgstr "yapılan; ancak bir dosyaya yazılmayan değişiklikler" + +msgid "buffer is not to be written" +msgstr "arabellek, yazım için değil" + +msgid "changes to the text are possible" +msgstr "metne değişiklik yapımı olanaklı" + +msgid "line length above which to break a line" +msgstr "sonrasında yeni satır yapılacak satır uzunluğu" + +msgid "margin from the right in which to break a line" +msgstr "sonrasında yeni satır yapılacak sağ kenar boşluğu" + +msgid "specifies what <BS>, CTRL-W, etc. can do in Insert mode" +msgstr "<BS>, CTRL-W, vb. Ekleme kipinde ne yapabileceğini belirtir" + +msgid "definition of what comment lines look like" +msgstr "yorum satırlarının nice görüneceğinin tanımı" + +msgid "list of flags that tell how automatic formatting works" +msgstr "kendiliğinden biçimlendirmenin nice çalıştığını anlatan\n" +"bayraklar listesi" + +msgid "pattern to recognize a numbered list" +msgstr "numaralandırılmış bir listeyi tanımak için dizgi" + +msgid "expression used for \"gq\" to format lines" +msgstr "satırları biçimlendirmek için \"gq\" için kullanılan ifade" + +msgid "specifies how Insert mode completion works for CTRL-N and CTRL-P" +msgstr "Ekleme kipi tamamlamasının CTRL-N ve CTRL-P için nice çalıştığını\n" +"belirler" + +msgid "whether to use a popup menu for Insert mode completion" +msgstr "Ekleme kipi tamamlaması için açılır menü kullanımı" + +msgid "options for the Insert mode completion info popup" +msgstr "Ekleme kipi tamamlama açılır penceresi için seçenekler" + +msgid "maximum height of the popup menu" +msgstr "açılır menünün en çok yüksekliği" + +msgid "minimum width of the popup menu" +msgstr "açılır menünün en çok genişliği" + +msgid "user defined function for Insert mode completion" +msgstr "Ekleme kipi tamamlaması için kullanıcı tanımlı işlev" + +msgid "function for filetype-specific Insert mode completion" +msgstr "dosya türüne özel Ekleme kipi tamamlaması için işlev" + +msgid "list of dictionary files for keyword completion" +msgstr "anahtar sözcük tamamlaması için sözlük dosyaları listesi" + +msgid "list of thesaurus files for keyword completion" +msgstr "anahtar sözcük tamamlaması için eşanlamlılar sözlüğü dosyaları\n" +"listesi" + +msgid "adjust case of a keyword completion match" +msgstr "anahtar sözcük tamamlama eşleşmesinin BÜYÜK/küçük harfini ayarla" + +msgid "enable entering digraphs with c1 <BS> c2" +msgstr "c1 <BS> c2 ile ikili harflerin girilmesini etkinleştir" + +msgid "the \"~\" command behaves like an operator" +msgstr "\"~\" komutu bir işleç gibi davranır" + +msgid "function called for the \"g@\" operator" +msgstr "\"g@\" işleci için çağrılan işlev" + +msgid "when inserting a bracket, briefly jump to its match" +msgstr "bir ayraç eklendiğinde hemen eşine atla" + +msgid "tenth of a second to show a match for 'showmatch'" +msgstr "bir 'showmatch' eşleşmesini göstermek için saniyenin onda biri" + +msgid "list of pairs that match for the \"%\" command" +msgstr "\"%\" komutu için eşleşen eşleşmelerin listesi" + +msgid "use two spaces after '.' when joining a line" +msgstr "bir satırı birleştirirken '.' sonrası iki boşluk kullan" + +msgid "" +"\"alpha\", \"octal\", \"hex\", \"bin\" and/or \"unsigned\"; number formats\n" +"recognized for CTRL-A and CTRL-X commands" +msgstr "" +"\"alpha\", \"octal\", \"hex\", \"bin\" ve/veya \"unsigned\"; CTRL-A ve\n" +"CTRL-X komutları için tanınan sayı biçimleri" + +msgid "tabs and indenting" +msgstr "sekmeler ve girintileme" + +msgid "number of spaces a <Tab> in the text stands for" +msgstr "metinde bir <Tab>'ın denk olduğu boşluk sayısı" + +msgid "number of spaces used for each step of (auto)indent" +msgstr "her bir kendiliğinden girintileme için kullanılan boşluk sayısı" + +msgid "list of number of spaces a tab counts for" +msgstr "bir sekmenin denk olduğu boşlukların sayısının listesi" + +msgid "list of number of spaces a soft tabsstop counts for" +msgstr "bir yumuşak sekmedurağının denk olduğu boşlukların sayısı listesi" + +msgid "a <Tab> in an indent inserts 'shiftwidth' spaces" +msgstr "bir girintideki <Tab>, 'shiftwidth' kadar boşluk ekler" + +msgid "if non-zero, number of spaces to insert for a <Tab>" +msgstr "eğer sıfırdan farklıysa, bir <Tab> için eklenecek boşluk sayısı" + +msgid "round to 'shiftwidth' for \"<<\" and \">>\"" +msgstr "\"<<\" ve \">>\" için 'shiftwidth'e yuvarla" + +msgid "expand <Tab> to spaces in Insert mode" +msgstr "Ekleme kipinde <Tab>'ı boşluklara genişlet" + +msgid "automatically set the indent of a new line" +msgstr "yeni bir satırın girintisini kendiliğinden ayarla" + +msgid "do clever autoindenting" +msgstr "akıllı kendiliğinden girintileme yap" + +msgid "enable specific indenting for C code" +msgstr "C kodu için özel girintilemeyi etkinleştir" + +msgid "options for C-indenting" +msgstr "C girintilemesi için seçenekler" + +msgid "keys that trigger C-indenting in Insert mode" +msgstr "Ekleme kipinde C girintilemesini tetikleyen düğmeler" + +msgid "list of words that cause more C-indent" +msgstr "daha çok C girintilemesine neden olan sözcüklerin listesi" + +msgid "expression used to obtain the indent of a line" +msgstr "bir satırın girintisini elde etmek için kullanılan ifade" + +msgid "keys that trigger indenting with 'indentexpr' in Insert mode" +msgstr "Ekleme kipinde 'indentexpr' ile girintilemeyi tetikleyen düğmeler" + +msgid "copy whitespace for indenting from previous line" +msgstr "bir önceki satırdan girintileme için boşlukları kopyala" + +msgid "preserve kind of whitespace when changing indent" +msgstr "girintilemeyi değiştirirken boşluk türünü koru" + +msgid "enable lisp mode" +msgstr "lisp kipini etkinleştir" + +msgid "words that change how lisp indenting works" +msgstr "lisp girintilemesinin nice çalıştığını değiştiren sözcükler" + +msgid "folding" +msgstr "kıvırma" + +msgid "unset to display all folds open" +msgstr "tüm kıvırmaları açık görüntülemek için ayarı kaldır" + +msgid "folds with a level higher than this number will be closed" +msgstr "bu sayıdan daha yüksek düzeyli kıvırmalar kapatılacak" + +msgid "value for 'foldlevel' when starting to edit a file" +msgstr "bir dosyayı düzenlemeye başlarkenki 'foldlevel' değeri" + +msgid "width of the column used to indicate folds" +msgstr "kıvırmaları belirtmek için kullanılan sütunun genişliği" + +msgid "expression used to display the text of a closed fold" +msgstr "kapalı bir kıvırmanın metnini görüntülemek için kullanılan ifade" + +msgid "set to \"all\" to close a fold when the cursor leaves it" +msgstr "imleç ayrıldığında kıvırmayı kapatmak için \"all\" olarak ayarlayın" + +msgid "specifies for which commands a fold will be opened" +msgstr "hangi komutlarda bir kıvırmanın açılacağını belirler" + +msgid "minimum number of screen lines for a fold to be closed" +msgstr "bir kıvırmanın kapatılması için en az ekran satırı sayısı" + +msgid "template for comments; used to put the marker in" +msgstr "yorumlar için şablon; imleyiciyi içine koymak için kullanılır" + +msgid "" +"folding type: \"manual\", \"indent\", \"expr\", \"marker\",\n" +"\"syntax\" or \"diff\"" +msgstr "" +"kıvırma türü: \"manual\", \"indent\", \"expr\", \"marker\",\n" +"\"syntax\" veya \"diff\"" + +msgid "expression used when 'foldmethod' is \"expr\"" +msgstr "'foldmethod' \"expr\" olduğundan kullanılacak ifade" + +msgid "used to ignore lines when 'foldmethod' is \"indent\"" +msgstr "'foldmethod' \"indent\" olduğunda satırları yok saymada kullanılır" + +msgid "markers used when 'foldmethod' is \"marker\"" +msgstr "'foldmethod' \"marker\" olduğunda kullanılan imleyiciler" + +msgid "maximum fold depth for when 'foldmethod' is \"indent\" or \"syntax\"" +msgstr "'foldmethod' \"indent\" veya \"syntax\" olduğunda kullanılan en çok\n" +"kıvırma derinliği" + +msgid "diff mode" +msgstr "diff kipi" + +msgid "use diff mode for the current window" +msgstr "geçerli pencere için diff kipi kullan" + +msgid "options for using diff mode" +msgstr "diff kipi kullanımı için seçenekler" + +msgid "expression used to obtain a diff file" +msgstr "bir diff dosyası elde etmek için kullanılan ifade" + +msgid "expression used to patch a file" +msgstr "bir dosyayı yamalamak için kullanılan ifade" + +msgid "mapping" +msgstr "eşlemleme" + +msgid "maximum depth of mapping" +msgstr "en çok eşlemleme derinliği" + +msgid "recognize mappings in mapped keys" +msgstr "eşlemlenmiş düğmelerdeki eşlemlemeleri tanımla" + +msgid "allow timing out halfway into a mapping" +msgstr "bir eşlemlemenin yarısında zaman aşımına izin ver" + +msgid "allow timing out halfway into a key code" +msgstr "bir düğme kodunun yarısında zaman aşımına izin ver" + +msgid "time in msec for 'timeout'" +msgstr "'timeout' için süre (milisaniye)" + +msgid "time in msec for 'ttimeout'" +msgstr "'ttimeout' için süre (milisaniye)" + +msgid "reading and writing files" +msgstr "dosyaları okuma ve yazma" + +msgid "enable using settings from modelines when reading a file" +msgstr "dosya okurken ayarları kip satırından kullanımı etkinleştir" + +msgid "allow setting expression options from a modeline" +msgstr "ifade seçeneklerini bir kip satırından ayarlamaya izin ver" + +msgid "number of lines to check for modelines" +msgstr "kip satırlarını denetlemede kullanılacak satırların sayısı" + +msgid "binary file editing" +msgstr "ikili dosya düzenleme" + +msgid "last line in the file has an end-of-line" +msgstr "dosyanın son satırında bir satırsonu var" + +msgid "fixes missing end-of-line at end of text file" +msgstr "bir metin dosyasının sonundaki eksik satırsonlarını onarır" + +msgid "prepend a Byte Order Mark to the file" +msgstr "dosyanın önüne bir Bayt Sıralama İmi ekle" + +msgid "end-of-line format: \"dos\", \"unix\" or \"mac\"" +msgstr "satırsonu biçimi: \"dos\", \"unix\" veya \"mac\"" + +msgid "list of file formats to look for when editing a file" +msgstr "bir dosyayı düzenlerken bakılacak dosya biçimler listesi" + +msgid "obsolete, use 'fileformat'" +msgstr "eskimiş, yerine 'fileformat' kullanın" + +msgid "obsolete, use 'fileformats'" +msgstr "eskimiş, yerine 'fileformats' kullanın" + +msgid "writing files is allowed" +msgstr "dosya yazımına izin verilir" + +msgid "write a backup file before overwriting a file" +msgstr "bir dosyanın üzerine yazmadan önce bir yedek dosyası yaz" + +msgid "keep a backup after overwriting a file" +msgstr "bir dosyanın üzerine yazdıktan sonra bir yedek tut" + +msgid "patterns that specify for which files a backup is not made" +msgstr "bir yedeği yapılmayan dosyaları belirleyen dizgi" + +msgid "whether to make the backup as a copy or rename the existing file" +msgstr "yedeğin kopya olarak mı yoksa ad değişikliği ile mi yapılacağı" + +msgid "list of directories to put backup files in" +msgstr "yedek dosyalarının koyulacağı dizinlerin listesi" + +msgid "file name extension for the backup file" +msgstr "yedek dosyası için dosya adı uzantısı" + +msgid "automatically write a file when leaving a modified buffer" +msgstr "değiştirilmiş arabellekten çıkarken dosyayı kendiliğinden yaz" + +msgid "as 'autowrite', but works with more commands" +msgstr "'autowrite' gibi, ancak daha çok komutla çalışır" + +msgid "always write without asking for confirmation" +msgstr "onay beklemeden her zaman yaz" + +msgid "automatically read a file when it was modified outside of Vim" +msgstr "Vim dışında değiştirildiğinde dosyayı kendiliğinden oku" + +msgid "keep oldest version of a file; specifies file name extension" +msgstr "bir dosyanın en eski sürümünü tut; dosya adı uzantısı belirler" + +msgid "forcibly sync the file to disk after writing it" +msgstr "yazımdan sonra dosyayı zorla diske eşitle" + +msgid "use 8.3 file names" +msgstr "8.3 dosya adlarını kullan" + +msgid "encryption method for file writing: zip, blowfish or blowfish2" +msgstr "dosya yazımı için şifreleme yöntemi: zip, blowfish veya blowfish2" + +msgid "the swap file" +msgstr "takas dosyası" + +msgid "list of directories for the swap file" +msgstr "takas dosyası için dizinler listesi" + +msgid "use a swap file for this buffer" +msgstr "bu arabellek için bir takas dosyası kullan" + +msgid "\"sync\", \"fsync\" or empty; how to flush a swap file to disk" +msgstr "\"sync\", \"fsync\", veya boş; bir takas dosyasının diske\n" +"nice floşlanacağı" + +msgid "number of characters typed to cause a swap file update" +msgstr "takas dosyası güncellemesi için yazılması gereken karakter sayısı" + +msgid "time in msec after which the swap file will be updated" +msgstr "takas dosyasının güncelleneceği süre dilimi (milisaniye)" + +msgid "maximum amount of memory in Kbyte used for one buffer" +msgstr "bir arabellek için kullanılacak en çok bellek miktarı (KiB)" + +msgid "maximum amount of memory in Kbyte used for all buffers" +msgstr "tüm arabellekler için kullanılacak en çok bellek miktarı (KiB)" + +msgid "command line editing" +msgstr "komut satırı düzenleme" + +msgid "how many command lines are remembered" +msgstr "kaç tane komut satırının hatırlandığı" + +msgid "key that triggers command-line expansion" +msgstr "komut satırı ifadesi tetikleyen düğme" + +msgid "like 'wildchar' but can also be used in a mapping" +msgstr "'wildchar' gibi; ancak bir eşlemleme içinde kullanılabilir" + +msgid "specifies how command line completion works" +msgstr "komut satırı tamamlamasının nasıl çalıştığını belirtir" + +msgid "empty or \"tagfile\" to list file name of matching tags" +msgstr "eşleşen etiketlerin dosya adını listelemek için boş veya \"tagfile\"" + +msgid "list of file name extensions that have a lower priority" +msgstr "düşük öncelikli dosya adı uzantılarının listesi" + +msgid "list of file name extensions added when searching for a file" +msgstr "bir dosya ararken eklenen dosya adı uzantılarının listesi" + +msgid "list of patterns to ignore files for file name completion" +msgstr "dosya adı tamamlaması için yok sayılacak dizgelerin listesi" + +msgid "ignore case when using file names" +msgstr "dosya adları kullanırken BÜYÜK/küçük harf yok say" + +msgid "ignore case when completing file names" +msgstr "dosya adları tamamlarken BÜYÜK/küçük harf yok say" + +msgid "command-line completion shows a list of matches" +msgstr "komut satırı tamamlaması, eşleşmelerin bir listesini gösterir" + +msgid "key used to open the command-line window" +msgstr "komut satırı penceresini açmak için kullanılan düğme" + +msgid "height of the command-line window" +msgstr "komut satırı penceresinin yüksekliği" + +msgid "executing external commands" +msgstr "dış komutları çalıştırma" + +msgid "name of the shell program used for external commands" +msgstr "dış komutlar için kullanılan kabuk programının adı" + +msgid "when to use the shell or directly execute a command" +msgstr "ne zaman kabuğu kullanmalı veya doğrudan bir komut çalıştırmalı" + +msgid "character(s) to enclose a shell command in" +msgstr "bir kabuk komutunu çevreleyen karakter(ler)" + +msgid "like 'shellquote' but include the redirection" +msgstr "'shellquote' gibi; ancak yeniden yönlendirmeyi içer" + +msgid "characters to escape when 'shellxquote' is (" +msgstr "'shellxquote' ( iken kaçırılacak karakterler" + +msgid "argument for 'shell' to execute a command" +msgstr "bir komut çalıştırmak için 'shell' için değişken" + +msgid "used to redirect command output to a file" +msgstr "komut çıktısını bir dosyaya yeniden yönlendirmek için kullanılır" + +msgid "use a temp file for shell commands instead of using a pipe" +msgstr "bir veri yolu kullanımı yerine kabuk komutları için geçici\n" +"bir dosya kullan" + +msgid "program used for \"=\" command" +msgstr "\"=\" komutu için kullanılan program" + +msgid "program used to format lines with \"gq\" command" +msgstr "\"gq\" komutu ile satır biçimlemek için kullanılan program" + +msgid "program used for the \"K\" command" +msgstr "\"K\" komutu için kullanılan program" + +msgid "warn when using a shell command and a buffer has changes" +msgstr "bir kabuk komutu kullanılıyorsa ve arabellekte değişiklikler\n" +"varsa uyar" + +msgid "running make and jumping to errors (quickfix)" +msgstr "make çalıştırma ve hatalara atlama (hızlı düzelt)" + +msgid "name of the file that contains error messages" +msgstr "hata iletileri içeren dosyanın adı" + +msgid "list of formats for error messages" +msgstr "hata iletileri için biçim listesi" + +msgid "program used for the \":make\" command" +msgstr "\":make\" komutu için kullanılan program" + +msgid "string used to put the output of \":make\" in the error file" +msgstr "\":make\" komutunun çıktısını hata dosyasına koymak için\n" +"kullanılan dizi" + +msgid "name of the errorfile for the 'makeprg' command" +msgstr "'makeprg' komutu için hata dosyası adı" + +msgid "program used for the \":grep\" command" +msgstr "\":grep\" komutu için kullanılan program" + +msgid "list of formats for output of 'grepprg'" +msgstr "'grepprg' çıktısı için kullanılan biçimlerin listesi" + +msgid "encoding of the \":make\" and \":grep\" output" +msgstr "\":make\" ve \":grep\" çıktılarının kodlaması" + +msgid "function to display text in the quickfix window" +msgstr "hızlı düzelt içinde metin düzenlemek için işlev" + +msgid "system specific" +msgstr "sisteme özel" + +msgid "use forward slashes in file names; for Unix-like shells" +msgstr "dosya adlarında eğik çizgi kullan; Unix tarzı kabuklar için" + +msgid "specifies slash/backslash used for completion" +msgstr "tamamlama için kullanılan eğik/ters eğik çizgiyi belirler" + +msgid "language specific" +msgstr "dile özel ayarlar" + +msgid "specifies the characters in a file name" +msgstr "bir dosya adındaki karakterleri belirtir" + +msgid "specifies the characters in an identifier" +msgstr "bir tanımlayıcıdaki karakterleri belirler" + +msgid "specifies the characters in a keyword" +msgstr "bir anahtar sözcükteki karakterleri belirler" + +msgid "specifies printable characters" +msgstr "yazdırılabilir karakterleri belirler" + +msgid "specifies escape characters in a string" +msgstr "bir dizideki kaçış karakterlerini belirler" + +msgid "display the buffer right-to-left" +msgstr "arabelleği sağdan sola görüntüle" + +msgid "when to edit the command-line right-to-left" +msgstr "komut satırının ne zaman sağdan sola düzenleneceği" + +msgid "insert characters backwards" +msgstr "karakterleri geriye doğru ekle" + +msgid "allow CTRL-_ in Insert and Command-line mode to toggle 'revins'" +msgstr "'revins' açıp kapatmak için Ekleme ve Komut Satırı kipinde\n" +"CTRL-_ izin ver" + +msgid "the ASCII code for the first letter of the Hebrew alphabet" +msgstr "İbran abecesinin ilk harfinin ASCII kodu" + +msgid "use Hebrew keyboard mapping" +msgstr "İbranca klavye eşlemlemesini kullan" + +msgid "use phonetic Hebrew keyboard mapping" +msgstr "fonetik İbranca klavye eşlemlemesini kullan" + +msgid "prepare for editing Arabic text" +msgstr "Arapça metni düzenleme için hazırlan" + +msgid "perform shaping of Arabic characters" +msgstr "Arapça karakterlerin şekillendirmesini gerçekleştir" + +msgid "terminal will perform bidi handling" +msgstr "sağdan sola yazımı uçbirim gerçekleştirecek" + +msgid "name of a keyboard mapping" +msgstr "bir klavye eşlemlemesinin adı" + +msgid "list of characters that are translated in Normal mode" +msgstr "Normal kipte çevrilen karakterlerin listesi" + +msgid "apply 'langmap' to mapped characters" +msgstr "eşlemlenen karakterlere 'langmap' uygula" + +msgid "when set never use IM; overrules following IM options" +msgstr "ayarlandığında hiçbir zaman IM kullanma; aşağıdaki IM seçeneklerini " +"geçersiz kılar" + +msgid "in Insert mode: 1: use :lmap; 2: use IM; 0: neither" +msgstr "Ekleme kipinde: 1: :lmap kullan; 2; IM kullan; 0: hiçbiri" + +msgid "input method style, 0: on-the-spot, 1: over-the-spot" +msgstr "girdi yöntemi stili, 0: on-the-spot, 1: over-the-spot" + +msgid "entering a search pattern: 1: use :lmap; 2: use IM; 0: neither" +msgstr "bir arama dizgisi gir: 1: :lmap kullan; 2: IM kullan; 0: hiçbiri" + +msgid "when set always use IM when starting to edit a command line" +msgstr "" +"ayarlandığında, bir komut satırı düzenlemeye başlarken her zaman IM kullan" + +msgid "function to obtain IME status" +msgstr "IME durumunu elde etmek için işlev" + +msgid "function to enable/disable IME" +msgstr "IME'yi etkinleştirmek/devre dışı bırakmak için işlev" + +msgid "multi-byte characters" +msgstr "çoklu bayt karakterler" + +msgid "" +"character encoding used in Vim: \"latin1\", \"utf-8\",\n" +"\"euc-jp\", \"big5\", etc." +msgstr "" +"Vim'de kullanılan karakter kodlamaları: \"latin1\", \"utf-8\",\n" +"\"euc-jp\", \"big5\" gibi" + +msgid "character encoding for the current file" +msgstr "geçerli dosya için karakter kodlaması" + +msgid "automatically detected character encodings" +msgstr "karakter kodlamasını kendiliğinden algıla" + +msgid "character encoding used by the terminal" +msgstr "uçbirim tarafından kullanılan karakter kodlaması" + +msgid "expression used for character encoding conversion" +msgstr "karakter kodlaması dönüşümü için kullanılan ifade" + +msgid "delete combining (composing) characters on their own" +msgstr "birleştiren (oluşturucu) karakterleri kendi başına kullan" + +msgid "maximum number of combining (composing) characters displayed" +msgstr "en çok görüntülenen birleştiren (oluşturucu) karakterlerin sayısı" + +msgid "key that activates the X input method" +msgstr "X girdi yöntemini etkinleştiren düğme" + +msgid "width of ambiguous width characters" +msgstr "belirsiz genişlikli karakterlerin genişliği" + +msgid "emoji characters are full width" +msgstr "emoji karakterleri tam genişliklidir" + +msgid "various" +msgstr "çeşitli" + +msgid "" +"when to use virtual editing: \"block\", \"insert\", \"all\"\n" +"and/or \"onemore\"" +msgstr "" +"ne zaman sanal düzenleme kullanmalı: \"block\", \"insert\",\n" +"\"all\" ve/veya \"onemore\"" + +msgid "list of autocommand events which are to be ignored" +msgstr "yok sayılacak otokomut olayları" + +msgid "load plugin scripts when starting up" +msgstr "başlarken eklenti betiklerini yükle" + +msgid "enable reading .vimrc/.exrc/.gvimrc in the current directory" +msgstr "geçerli dizinde .vimrc/.exrc/.gvimrc okumayı etkinleştir" + +msgid "safer working with script files in the current directory" +msgstr "geçerli dizinde betik dosyalarıyla daha güvenli çalışma" + +msgid "use the 'g' flag for \":substitute\"" +msgstr "\":substitute\" için 'g' bayrağını kullan" + +msgid "'g' and 'c' flags of \":substitute\" toggle" +msgstr "\":substitute\" açma/kapama düğmesinin 'g' ve 'c' bayrakları" + +msgid "allow reading/writing devices" +msgstr "aygıtları okumaya/yazmaya izin ver" + +msgid "maximum depth of function calls" +msgstr "işlev çağrılarının en çok derinliği" + +msgid "list of words that specifies what to put in a session file" +msgstr "bir oturum dosyasına ne koyulacağını belirleyen sözcükler listesi" + +msgid "list of words that specifies what to save for :mkview" +msgstr ":mkview için neyin kaydedileceğini belirleyen sözcükler listesi" + +msgid "directory where to store files with :mkview" +msgstr ":mkview ile dosyaların depolanacağı dizin" + +msgid "list that specifies what to write in the viminfo file" +msgstr "viminfo dosyasına nelerin yazılacağını belirleyen liste" + +msgid "file name used for the viminfo file" +msgstr "viminfo dosyası için kullanılan dosya adı" + +msgid "what happens with a buffer when it's no longer in a window" +msgstr "bir arabellek artık bir pencerede değilken ne olacağı" + +msgid "empty, \"nofile\", \"nowrite\", \"quickfix\", etc.: type of buffer" +msgstr "boş, \"nofile\", \"nowrite\", \"quickfix\" vb.: arabellek türü" + +msgid "whether the buffer shows up in the buffer list" +msgstr "arabelleğin, arabellek listesinde görünüp görünmeyeceği" + +msgid "set to \"msg\" to see all error messages" +msgstr "tüm hata iletilerini görmek için \"msg\" olarak ayarlayın" + +msgid "whether to show the signcolumn" +msgstr "işaret sütununun görünüp görünmeyeceği" + +msgid "interval in milliseconds between polls for MzScheme threads" +msgstr "MzScheme iş parçacıkları için anketler arasındaki süre (milisaniye)" + +msgid "name of the Lua dynamic library" +msgstr "Lua devingen kitaplığının adı" + +msgid "name of the Perl dynamic library" +msgstr "Perl devingen kitaplığının adı" + +msgid "whether to use Python 2 or 3" +msgstr "Python 2 veya 3 mü kullanılacağı" + +msgid "name of the Python 2 dynamic library" +msgstr "Python 2 devingen kitaplığının adı" + +msgid "name of the Python 2 home directory" +msgstr "Python 2 ev dizininin adı" + +msgid "name of the Python 3 dynamic library" +msgstr "Python 3 devingen kitaplığının adı" + +msgid "name of the Python 3 home directory" +msgstr "Python 3 ev dizininin adı" + +msgid "name of the Ruby dynamic library" +msgstr "Ruby devingen kitaplığının adı" + +msgid "name of the Tcl dynamic library" +msgstr "Tcl devingen kitaplığının adı" + +msgid "name of the MzScheme dynamic library" +msgstr "MzScheme devingen kitaplığının adı" + +msgid "name of the MzScheme GC dynamic library" +msgstr "MzScheme GC devingen kitaplığının adı" diff --git a/src/nvim/popupmnu.c b/src/nvim/popupmnu.c index 32c9750628..f620517aff 100644 --- a/src/nvim/popupmnu.c +++ b/src/nvim/popupmnu.c @@ -421,6 +421,10 @@ void pum_redraw(void) } grid_assign_handle(&pum_grid); + + pum_grid.zindex = ((State == CMDLINE) + ? kZIndexCmdlinePopupMenu : kZIndexPopupMenu); + bool moved = ui_comp_put_grid(&pum_grid, pum_row, pum_col-col_off, pum_height, grid_width, false, true); bool invalid_grid = moved || pum_invalid; @@ -436,10 +440,10 @@ void pum_redraw(void) } if (ui_has(kUIMultigrid)) { const char *anchor = pum_above ? "SW" : "NW"; - int row_off = pum_above ? pum_height : 0; + int row_off = pum_above ? -pum_height : 0; ui_call_win_float_pos(pum_grid.handle, -1, cstr_to_string(anchor), pum_anchor_grid, pum_row-row_off, pum_col-col_off, - false); + false, pum_grid.zindex); } diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index 464d72eccb..1a9bbe26f0 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -100,6 +100,7 @@ typedef struct qf_list_S { char_u *qf_title; ///< title derived from the command that created ///< the error list or set by setqflist typval_T *qf_ctx; ///< context set by setqflist/setloclist + char_u *qf_qftf; ///< 'quickfixtextfunc' setting for this list struct dir_stack_T *qf_dir_stack; char_u *qf_directory; @@ -1999,6 +2000,11 @@ static int copy_loclist(const qf_list_T *from_qfl, qf_list_T *to_qfl) } else { to_qfl->qf_ctx = NULL; } + if (from_qfl->qf_qftf != NULL) { + to_qfl->qf_qftf = vim_strsave(from_qfl->qf_qftf); + } else { + to_qfl->qf_qftf = NULL; + } if (from_qfl->qf_count) { if (copy_loclist_entries(from_qfl, to_qfl) == FAIL) { @@ -2666,7 +2672,7 @@ static void qf_goto_win_with_qfl_file(int qf_fnum) static int qf_jump_to_usable_window(int qf_fnum, bool newwin, int *opened_window) { - win_T *usable_win_ptr = NULL; + win_T *usable_wp = NULL; bool usable_win = false; // If opening a new window, then don't use the location list referred by @@ -2675,8 +2681,8 @@ static int qf_jump_to_usable_window(int qf_fnum, bool newwin, qf_info_T *ll_ref = newwin ? NULL : curwin->w_llist_ref; if (ll_ref != NULL) { // Find a non-quickfix window with this location list - usable_win_ptr = qf_find_win_with_loclist(ll_ref); - if (usable_win_ptr != NULL) { + usable_wp = qf_find_win_with_loclist(ll_ref); + if (usable_wp != NULL) { usable_win = true; } } @@ -2704,7 +2710,7 @@ static int qf_jump_to_usable_window(int qf_fnum, bool newwin, *opened_window = true; // close it when fail } else { if (curwin->w_llist_ref != NULL) { // In a location window - qf_goto_win_with_ll_file(usable_win_ptr, qf_fnum, ll_ref); + qf_goto_win_with_ll_file(usable_wp, qf_fnum, ll_ref); } else { // In a quickfix window qf_goto_win_with_qfl_file(qf_fnum); } @@ -3032,14 +3038,11 @@ theend: qfl->qf_ptr = qf_ptr; qfl->qf_index = qf_index; } - if (p_swb != old_swb && opened_window) { + if (p_swb != old_swb && p_swb == empty_option && opened_window) { // Restore old 'switchbuf' value, but not when an autocommand or // modeline has changed the value. - if (p_swb == empty_option) { - p_swb = old_swb; - swb_flags = old_swb_flags; - } else - free_string_option(old_swb); + p_swb = old_swb; + swb_flags = old_swb_flags; } } @@ -3382,6 +3385,7 @@ static void qf_free(qf_list_T *qfl) XFREE_CLEAR(qfl->qf_title); tv_free(qfl->qf_ctx); qfl->qf_ctx = NULL; + XFREE_CLEAR(qfl->qf_qftf); qfl->qf_id = 0; qfl->qf_changedtick = 0L; } @@ -3721,7 +3725,7 @@ void ex_copen(exarg_T *eap) lnum = qfl->qf_index; // Fill the buffer with the quickfix list. - qf_fill_buffer(qfl, curbuf, NULL); + qf_fill_buffer(qfl, curbuf, NULL, curwin->handle); decr_quickfix_busy(); @@ -3884,6 +3888,11 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last) buf = qf_find_buf(qi); if (buf != NULL) { linenr_T old_line_count = buf->b_ml.ml_line_count; + int qf_winid = 0; + + if (IS_LL_STACK(qi)) { + qf_winid = curwin->handle; + } if (old_last == NULL) { // set curwin/curbuf to buf and save a few things @@ -3892,7 +3901,7 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last) qf_update_win_titlevar(qi); - qf_fill_buffer(qf_get_curlist(qi), buf, old_last); + qf_fill_buffer(qf_get_curlist(qi), buf, old_last, qf_winid); buf_inc_changedtick(buf); if (old_last == NULL) { @@ -3911,70 +3920,75 @@ static void qf_update_buffer(qf_info_T *qi, qfline_T *old_last) } // Add an error line to the quickfix buffer. -static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp, - char_u *dirname, bool first_bufline) - FUNC_ATTR_NONNULL_ALL +static int qf_buf_add_line(qf_list_T *qfl, buf_T *buf, linenr_T lnum, + const qfline_T *qfp, char_u *dirname, + char_u *qftf_str, bool first_bufline) + FUNC_ATTR_NONNULL_ARG(1, 2, 4, 5) { int len; buf_T *errbuf; - if (qfp->qf_module != NULL) { - STRLCPY(IObuff, qfp->qf_module, IOSIZE - 1); - len = (int)STRLEN(IObuff); - } else if (qfp->qf_fnum != 0 - && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL - && errbuf->b_fname != NULL) { - if (qfp->qf_type == 1) { // :helpgrep - STRLCPY(IObuff, path_tail(errbuf->b_fname), IOSIZE - 1); - } else { - // Shorten the file name if not done already. - // For optimization, do this only for the first entry in a - // buffer. - if (first_bufline - && (errbuf->b_sfname == NULL - || path_is_absolute(errbuf->b_sfname))) { - if (*dirname == NUL) { - os_dirname(dirname, MAXPATHL); + if (qftf_str != NULL) { + STRLCPY(IObuff, qftf_str, IOSIZE); + } else { + if (qfp->qf_module != NULL) { + STRLCPY(IObuff, qfp->qf_module, IOSIZE); + len = (int)STRLEN(IObuff); + } else if (qfp->qf_fnum != 0 + && (errbuf = buflist_findnr(qfp->qf_fnum)) != NULL + && errbuf->b_fname != NULL) { + if (qfp->qf_type == 1) { // :helpgrep + STRLCPY(IObuff, path_tail(errbuf->b_fname), IOSIZE); + } else { + // Shorten the file name if not done already. + // For optimization, do this only for the first entry in a + // buffer. + if (first_bufline + && (errbuf->b_sfname == NULL + || path_is_absolute(errbuf->b_sfname))) { + if (*dirname == NUL) { + os_dirname(dirname, MAXPATHL); + } + shorten_buf_fname(errbuf, dirname, false); } - shorten_buf_fname(errbuf, dirname, false); + STRLCPY(IObuff, errbuf->b_fname, IOSIZE); } - STRLCPY(IObuff, errbuf->b_fname, IOSIZE - 1); + len = (int)STRLEN(IObuff); + } else { + len = 0; } - len = (int)STRLEN(IObuff); - } else { - len = 0; - } - if (len < IOSIZE - 1) { - IObuff[len++] = '|'; - } - if (qfp->qf_lnum > 0) { - snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%" PRId64, - (int64_t)qfp->qf_lnum); - len += (int)STRLEN(IObuff + len); + if (len < IOSIZE - 1) { + IObuff[len++] = '|'; + } + if (qfp->qf_lnum > 0) { + snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%" PRId64, + (int64_t)qfp->qf_lnum); + len += (int)STRLEN(IObuff + len); + + if (qfp->qf_col > 0) { + snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), " col %d", + qfp->qf_col); + len += (int)STRLEN(IObuff + len); + } - if (qfp->qf_col > 0) { - snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), " col %d", - qfp->qf_col); + snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%s", + (char *)qf_types(qfp->qf_type, qfp->qf_nr)); len += (int)STRLEN(IObuff + len); + } else if (qfp->qf_pattern != NULL) { + qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len); + len += (int)STRLEN(IObuff + len); + } + if (len < IOSIZE - 2) { + IObuff[len++] = '|'; + IObuff[len++] = ' '; } - snprintf((char *)IObuff + len, (size_t)(IOSIZE - len), "%s", - (char *)qf_types(qfp->qf_type, qfp->qf_nr)); - len += (int)STRLEN(IObuff + len); - } else if (qfp->qf_pattern != NULL) { - qf_fmt_text(qfp->qf_pattern, IObuff + len, IOSIZE - len); - len += (int)STRLEN(IObuff + len); + // Remove newlines and leading whitespace from the text. + // For an unrecognized line keep the indent, the compiler may + // mark a word with ^^^^. + qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, + IObuff + len, IOSIZE - len); } - if (len < IOSIZE - 2) { - IObuff[len++] = '|'; - IObuff[len++] = ' '; - } - - // Remove newlines and leading whitespace from the text. - // For an unrecognized line keep the indent, the compiler may - // mark a word with ^^^^. - qf_fmt_text(len > 3 ? skipwhite(qfp->qf_text) : qfp->qf_text, - IObuff + len, IOSIZE - len); if (ml_append_buf(buf, lnum, IObuff, (colnr_T)STRLEN(IObuff) + 1, false) == FAIL) { @@ -3983,17 +3997,56 @@ static int qf_buf_add_line(buf_T *buf, linenr_T lnum, const qfline_T *qfp, return OK; } +static list_T *call_qftf_func(qf_list_T *qfl, + int qf_winid, + long start_idx, + long end_idx) +{ + char_u *qftf = p_qftf; + list_T *qftf_list = NULL; + + // If 'quickfixtextfunc' is set, then use the user-supplied function to get + // the text to display. Use the local value of 'quickfixtextfunc' if it is + // set. + if (qfl->qf_qftf != NULL) { + qftf = qfl->qf_qftf; + } + if (qftf != NULL && *qftf != NUL) { + typval_T args[1]; + + // create the dict argument + dict_T *const dict = tv_dict_alloc_lock(VAR_FIXED); + + tv_dict_add_nr(dict, S_LEN("quickfix"), IS_QF_LIST(qfl)); + tv_dict_add_nr(dict, S_LEN("winid"), qf_winid); + tv_dict_add_nr(dict, S_LEN("id"), qfl->qf_id); + tv_dict_add_nr(dict, S_LEN("start_idx"), start_idx); + tv_dict_add_nr(dict, S_LEN("end_idx"), end_idx); + dict->dv_refcount++; + args[0].v_type = VAR_DICT; + args[0].vval.v_dict = dict; + + qftf_list = call_func_retlist(qftf, 1, args); + dict->dv_refcount--; + } + + return qftf_list; +} + /// 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_list_T *qfl, buf_T *buf, qfline_T *old_last) +static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last, + int qf_winid) FUNC_ATTR_NONNULL_ARG(2) { linenr_T lnum; qfline_T *qfp; const bool old_KeyTyped = KeyTyped; + list_T *qftf_list = NULL; + listitem_T *qftf_li = NULL; if (old_last == NULL) { if (buf != curbuf) { @@ -4026,8 +4079,19 @@ static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last) } lnum = buf->b_ml.ml_line_count; } + + qftf_list = call_qftf_func(qfl, qf_winid, lnum + 1, (long)qfl->qf_count); + qftf_li = tv_list_first(qftf_list); + while (lnum < qfl->qf_count) { - if (qf_buf_add_line(buf, lnum, qfp, dirname, + char_u *qftf_str = NULL; + + if (qftf_li != NULL) { + // Use the text supplied by the user defined function + qftf_str = (char_u *)tv_get_string_chk(TV_LIST_ITEM_TV(qftf_li)); + } + + if (qf_buf_add_line(qfl, buf, lnum, qfp, dirname, qftf_str, prev_bufnr != qfp->qf_fnum) == FAIL) { break; } @@ -4037,6 +4101,10 @@ static void qf_fill_buffer(qf_list_T *qfl, buf_T *buf, qfline_T *old_last) if (qfp == NULL) { break; } + + if (qftf_li != NULL) { + qftf_li = TV_LIST_ITEM_NEXT(qftf_list, qftf_li); + } } if (old_last == NULL) { // Delete the empty line which is now at the end @@ -5665,7 +5733,10 @@ static int get_qfline_items(qfline_T *qfp, list_T *list) /// Add each quickfix error to list "list" as a dictionary. /// If qf_idx is -1, use the current list. Otherwise, use the specified list. -int get_errorlist(qf_info_T *qi_arg, win_T *wp, int qf_idx, list_T *list) +/// If eidx is not 0, then return only the specified entry. Otherwise return +/// all the entries. +int get_errorlist(qf_info_T *qi_arg, win_T *wp, int qf_idx, int eidx, + list_T *list) { qf_info_T *qi = qi_arg; qf_list_T *qfl; @@ -5682,6 +5753,10 @@ int get_errorlist(qf_info_T *qi_arg, win_T *wp, int qf_idx, list_T *list) } } + if (eidx < 0) { + return OK; + } + if (qf_idx == INVALID_QFIDX) { qf_idx = qi->qf_curlist; } @@ -5696,7 +5771,13 @@ int get_errorlist(qf_info_T *qi_arg, win_T *wp, int qf_idx, list_T *list) } FOR_ALL_QFL_ITEMS(qfl, qfp, i) { - get_qfline_items(qfp, list); + if (eidx > 0) { + if (eidx == i) { + return get_qfline_items(qfp, list); + } + } else if (get_qfline_items(qfp, list) == FAIL) { + return FAIL; + } } return OK; @@ -5743,7 +5824,7 @@ static int qf_get_list_from_lines(dict_T *what, dictitem_T *di, dict_T *retdict) if (qf_init_ext(qi, 0, NULL, NULL, &di->di_tv, errorformat, true, (linenr_T)0, (linenr_T)0, NULL, NULL) > 0) { - (void)get_errorlist(qi, NULL, 0, l); + (void)get_errorlist(qi, NULL, 0, 0, l); qf_free(&qi->qf_lists[0]); } xfree(qi); @@ -5934,11 +6015,13 @@ static int qf_getprop_filewinid(const win_T *wp, const qf_info_T *qi, return tv_dict_add_nr(retdict, S_LEN("filewinid"), winid); } -/// Return the quickfix list items/entries as 'items' in retdict -static int qf_getprop_items(qf_info_T *qi, int qf_idx, dict_T *retdict) +/// Return the quickfix list items/entries as 'items' in retdict. +/// If eidx is not 0, then return the item at the specified index. +static int qf_getprop_items(qf_info_T *qi, int qf_idx, int eidx, + dict_T *retdict) { list_T *l = tv_list_alloc(kListLenMayKnow); - get_errorlist(qi, NULL, qf_idx, l); + get_errorlist(qi, NULL, qf_idx, eidx, l); tv_dict_add_list(retdict, S_LEN("items"), l); return OK; @@ -5963,15 +6046,18 @@ static int qf_getprop_ctx(qf_list_T *qfl, dict_T *retdict) return status; } -/// Return the current quickfix list index as 'idx' in retdict -static int qf_getprop_idx(qf_list_T *qfl, dict_T *retdict) +/// Return the current quickfix list index as 'idx' in retdict. +/// If a specific entry index (eidx) is supplied, then use that. +static int qf_getprop_idx(qf_list_T *qfl, int eidx, dict_T *retdict) { - int curidx = qfl->qf_index; - if (qf_list_empty(qfl)) { - // For empty lists, current index is set to 0 - curidx = 0; + if (eidx == 0) { + eidx = qfl->qf_index; + if (qf_list_empty(qfl)) { + // For empty lists, current index is set to 0 + eidx = 0; + } } - return tv_dict_add_nr(retdict, S_LEN("idx"), curidx); + return tv_dict_add_nr(retdict, S_LEN("idx"), eidx); } /// Return quickfix/location list details (title) as a dictionary. @@ -5984,6 +6070,7 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) dictitem_T *di = NULL; int status = OK; int qf_idx = INVALID_QFIDX; + int eidx = 0; if ((di = tv_dict_find(what, S_LEN("lines"))) != NULL) { return qf_get_list_from_lines(what, di, retdict); @@ -6006,6 +6093,14 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) qfl = qf_get_list(qi, qf_idx); + // If an entry index is specified, use that + if ((di = tv_dict_find(what, S_LEN("idx"))) != NULL) { + if (di->di_tv.v_type != VAR_NUMBER) { + return FAIL; + } + eidx = (int)di->di_tv.vval.v_number; + } + if (flags & QF_GETLIST_TITLE) { status = qf_getprop_title(qfl, retdict); } @@ -6016,7 +6111,7 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) status = tv_dict_add_nr(retdict, S_LEN("winid"), qf_winid(qi)); } if ((status == OK) && (flags & QF_GETLIST_ITEMS)) { - status = qf_getprop_items(qi, qf_idx, retdict); + status = qf_getprop_items(qi, qf_idx, eidx, retdict); } if ((status == OK) && (flags & QF_GETLIST_CONTEXT)) { status = qf_getprop_ctx(qfl, retdict); @@ -6025,7 +6120,7 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) status = tv_dict_add_nr(retdict, S_LEN("id"), qfl->qf_id); } if ((status == OK) && (flags & QF_GETLIST_IDX)) { - status = qf_getprop_idx(qfl, retdict); + status = qf_getprop_idx(qfl, eidx, retdict); } if ((status == OK) && (flags & QF_GETLIST_SIZE)) { status = tv_dict_add_nr(retdict, S_LEN("size"), @@ -6042,6 +6137,17 @@ int qf_get_properties(win_T *wp, dict_T *what, dict_T *retdict) return status; } +/// Set the current index in the specified quickfix list +static int qf_setprop_qftf(qf_info_T *qi, qf_list_T *qfl, + dictitem_T *di) +{ + XFREE_CLEAR(qfl->qf_qftf); + if (di->di_tv.v_type == VAR_STRING && di->di_tv.vval.v_string != NULL) { + qfl->qf_qftf = vim_strsave(di->di_tv.vval.v_string); + } + return OK; +} + /// Add a new quickfix entry to list at 'qf_idx' in the stack 'qi' from the /// items in the dict 'd'. If it is a valid error entry, then set 'valid_entry' /// to true. @@ -6407,6 +6513,9 @@ static int qf_set_properties(qf_info_T *qi, const dict_T *what, int action, if ((di = tv_dict_find(what, S_LEN("idx"))) != NULL) { retval = qf_setprop_curidx(qi, qfl, di); } + if ((di = tv_dict_find(what, S_LEN("quickfixtextfunc"))) != NULL) { + retval = qf_setprop_qftf(qi, qfl, di); + } if (newlist || retval == OK) { qf_list_changed(qfl); diff --git a/src/nvim/regexp.c b/src/nvim/regexp.c index 184f5da97d..c2ef217638 100644 --- a/src/nvim/regexp.c +++ b/src/nvim/regexp.c @@ -692,6 +692,7 @@ static char_u *regparse; ///< Input-scan pointer. static int prevchr_len; ///< byte length of previous char static int num_complex_braces; ///< Complex \{...} count static int regnpar; ///< () count. +static bool wants_nfa; ///< regex should use NFA engine static int regnzpar; ///< \z() count. static int re_has_z; ///< \z item detected static char_u *regcode; ///< Code-emit pointer, or JUST_CALC_SIZE @@ -2911,7 +2912,7 @@ static int peekchr(void) at_start = false; // be able to say "/\*ptr" regparse++; after_slash++; - peekchr(); + (void)peekchr(); regparse--; after_slash--; curchr = toggle_Magic(curchr); @@ -3436,7 +3437,7 @@ static long bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, } /// Match a regexp against a string ("line" points to the string) or multiple -/// lines ("line" is NULL, use reg_getline()). +/// lines (if "line" is NULL, use reg_getline()). /// @return 0 for failure, or number of lines contained in the match. static long bt_regexec_both(char_u *line, colnr_T col, // column to start search @@ -3754,6 +3755,7 @@ static bool reg_match_visual(void) int mode; colnr_T start, end; colnr_T start2, end2; + colnr_T curswant; // Check if the buffer is the current buffer. if (rex.reg_buf != curbuf || VIsual.lnum == 0) { @@ -3769,6 +3771,7 @@ static bool reg_match_visual(void) bot = VIsual; } mode = VIsual_mode; + curswant = wp->w_curswant; } else { if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end)) { top = curbuf->b_visual.vi_start; @@ -3778,6 +3781,7 @@ static bool reg_match_visual(void) bot = curbuf->b_visual.vi_start; } mode = curbuf->b_visual.vi_mode; + curswant = curbuf->b_visual.vi_curswant; } lnum = rex.lnum + rex.reg_firstlnum; if (lnum < top.lnum || lnum > bot.lnum) { @@ -3797,8 +3801,9 @@ static bool reg_match_visual(void) start = start2; if (end2 > end) end = end2; - if (top.col == MAXCOL || bot.col == MAXCOL) + if (top.col == MAXCOL || bot.col == MAXCOL || curswant == MAXCOL) { end = MAXCOL; + } unsigned int cols_u = win_linetabsize(wp, rex.line, (colnr_T)(rex.input - rex.line)); assert(cols_u <= MAXCOL); @@ -3974,17 +3979,25 @@ static bool regmatch( pos = getmark_buf(rex.reg_buf, mark, false); if (pos == NULL // mark doesn't exist - || pos->lnum <= 0 // mark isn't set in reg_buf - || (pos->lnum == rex.lnum + rex.reg_firstlnum - ? (pos->col == (colnr_T)(rex.input - rex.line) - ? (cmp == '<' || cmp == '>') - : (pos->col < (colnr_T)(rex.input - rex.line) - ? cmp != '>' - : cmp != '<')) - : (pos->lnum < rex.lnum + rex.reg_firstlnum - ? cmp != '>' - : cmp != '<'))) { + || pos->lnum <= 0) { // mark isn't set in reg_buf status = RA_NOMATCH; + } else { + const colnr_T pos_col = pos->lnum == rex.lnum + rex.reg_firstlnum + && pos->col == MAXCOL + ? (colnr_T)STRLEN(reg_getline(pos->lnum - rex.reg_firstlnum)) + : pos->col; + + if (pos->lnum == rex.lnum + rex.reg_firstlnum + ? (pos_col == (colnr_T)(rex.input - rex.line) + ? (cmp == '<' || cmp == '>') + : (pos_col < (colnr_T)(rex.input - rex.line) + ? cmp != '>' + : cmp != '<')) + : (pos->lnum < rex.lnum + rex.reg_firstlnum + ? cmp != '>' + : cmp != '<')) { + status = RA_NOMATCH; + } } } break; @@ -7240,7 +7253,7 @@ regprog_T *vim_regcomp(char_u *expr_arg, int re_flags) // Check for error compiling regexp with initial engine. if (prog == NULL) { #ifdef BT_REGEXP_DEBUG_LOG - // Debugging log for NFA. + // Debugging log for BT engine. if (regexp_engine != BACKTRACKING_ENGINE) { FILE *f = fopen(BT_REGEXP_DEBUG_LOG_NAME, "a"); if (f) { @@ -7257,6 +7270,7 @@ regprog_T *vim_regcomp(char_u *expr_arg, int re_flags) // But don't try if an error message was given. if (regexp_engine == AUTOMATIC_ENGINE && !called_emsg) { regexp_engine = BACKTRACKING_ENGINE; + report_re_switch(expr); prog = bt_regengine.regcomp(expr, re_flags); } } diff --git a/src/nvim/regexp_nfa.c b/src/nvim/regexp_nfa.c index b6bcee3fda..35c3285cda 100644 --- a/src/nvim/regexp_nfa.c +++ b/src/nvim/regexp_nfa.c @@ -328,6 +328,11 @@ static int *post_start; ///< holds the postfix form of r.e. static int *post_end; static int *post_ptr; +// Set when the pattern should use the NFA engine. +// E.g. [[:upper:]] only allows 8bit characters for BT engine, +// while NFA engine handles multibyte characters correctly. +static bool wants_nfa; + static int nstate; ///< Number of states in the NFA. Also used when executing. static int istate; ///< Index in the state vector, used in alloc_state() @@ -377,6 +382,7 @@ nfa_regcomp_start ( post_start = (int *)xmalloc(postfix_size); post_ptr = post_start; post_end = post_start + nstate_max; + wants_nfa = false; rex.nfa_has_zend = false; rex.nfa_has_backref = false; @@ -1455,10 +1461,10 @@ static int nfa_regatom(void) if (nfa_regatom() == FAIL) return FAIL; } - getchr(); /* get the ] */ - if (n == 0) - EMSG2_RET_FAIL(_(e_empty_sb), - reg_magic == MAGIC_ALL); + (void)getchr(); // get the ] + if (n == 0) { + EMSG2_RET_FAIL(_(e_empty_sb), reg_magic == MAGIC_ALL); + } EMIT(NFA_OPT_CHARS); EMIT(n); @@ -1618,6 +1624,7 @@ collection: EMIT(NFA_CLASS_GRAPH); break; case CLASS_LOWER: + wants_nfa = true; EMIT(NFA_CLASS_LOWER); break; case CLASS_PRINT: @@ -1630,6 +1637,7 @@ collection: EMIT(NFA_CLASS_SPACE); break; case CLASS_UPPER: + wants_nfa = true; EMIT(NFA_CLASS_UPPER); break; case CLASS_XDIGIT: @@ -1998,10 +2006,17 @@ static int nfa_regpiece(void) return OK; } - // The engine is very inefficient (uses too many states) when the maximum - // is much larger than the minimum and when the maximum is large. Bail out - // if we can use the other engine. - if ((nfa_re_flags & RE_AUTO) && (maxval > 500 || maxval > minval + 200)) { + // The engine is very inefficient (uses too many states) when the + // maximum is much larger than the minimum and when the maximum is + // large. However, when maxval is MAX_LIMIT, it is okay, as this + // will emit NFA_STAR. + // Bail out if we can use the other engine, but only, when the + // pattern does not need the NFA engine like (e.g. [[:upper:]]\{2,\} + // does not work with with characters > 8 bit with the BT engine) + if ((nfa_re_flags & RE_AUTO) + && (maxval > 500 || maxval > minval + 200) + && (maxval != MAX_LIMIT && minval < 200) + && !wants_nfa) { return FAIL; } @@ -6055,21 +6070,27 @@ static int nfa_regmatch(nfa_regprog_T *prog, nfa_state_T *start, { pos_T *pos = getmark_buf(rex.reg_buf, t->state->val, false); - // Compare the mark position to the match position. - result = (pos != NULL // mark doesn't exist - && pos->lnum > 0 // mark isn't set in reg_buf - && (pos->lnum == rex.lnum + rex.reg_firstlnum - ? (pos->col == (colnr_T)(rex.input - rex.line) - ? t->state->c == NFA_MARK - : (pos->col < (colnr_T)(rex.input - rex.line) - ? t->state->c == NFA_MARK_GT - : t->state->c == NFA_MARK_LT)) - : (pos->lnum < rex.lnum + rex.reg_firstlnum - ? t->state->c == NFA_MARK_GT - : t->state->c == NFA_MARK_LT))); - if (result) { - add_here = true; - add_state = t->state->out; + // Compare the mark position to the match position, if the mark + // exists and mark is set in reg_buf. + if (pos != NULL && pos->lnum > 0) { + const colnr_T pos_col = pos->lnum == rex.lnum + rex.reg_firstlnum + && pos->col == MAXCOL + ? (colnr_T)STRLEN(reg_getline(pos->lnum - rex.reg_firstlnum)) + : pos->col; + + result = pos->lnum == rex.lnum + rex.reg_firstlnum + ? (pos_col == (colnr_T)(rex.input - rex.line) + ? t->state->c == NFA_MARK + : (pos_col < (colnr_T)(rex.input - rex.line) + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT)) + : (pos->lnum < rex.lnum + rex.reg_firstlnum + ? t->state->c == NFA_MARK_GT + : t->state->c == NFA_MARK_LT); + if (result) { + add_here = true; + add_state = t->state->out; + } } break; } @@ -6491,7 +6512,7 @@ static long nfa_regtry(nfa_regprog_T *prog, } /// Match a regexp against a string ("line" points to the string) or multiple -/// lines ("line" is NULL, use reg_getline()). +/// lines (if "line" is NULL, use reg_getline()). /// /// @param line String in which to search or NULL /// @param startcol Column to start looking for match diff --git a/src/nvim/runtime.c b/src/nvim/runtime.c index 1fb7e3b434..c3cd210538 100644 --- a/src/nvim/runtime.c +++ b/src/nvim/runtime.c @@ -245,7 +245,8 @@ int source_in_path(char_u *path, char_u *name, int flags) return do_in_path_and_pp(path, name, flags, source_callback, NULL); } -// Expand wildcards in "pat" and invoke do_source() for each match. +// Expand wildcards in "pat" and invoke do_source()/nlua_exec_file() +// for each match. static void source_all_matches(char_u *pat) { int num_files; @@ -405,17 +406,15 @@ theend: /// Load scripts in "plugin" and "ftdetect" directories of the package. static int load_pack_plugin(char_u *fname) { - static const char *plugpat = "%s/plugin/**/*.vim"; // NOLINT static const char *ftpat = "%s/ftdetect/*.vim"; // NOLINT - int retval = FAIL; char *const ffname = fix_fname((char *)fname); 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); + char_u *pat = xmallocz(len); + + vim_snprintf((char *)pat, len, "%s/plugin/**/*.vim", ffname); // NOLINT + source_all_matches(pat); + vim_snprintf((char *)pat, len, "%s/plugin/**/*.lua", ffname); // NOLINT source_all_matches(pat); char_u *cmd = vim_strsave((char_u *)"g:did_load_filetypes"); @@ -426,16 +425,15 @@ static int load_pack_plugin(char_u *fname) do_cmdline_cmd("augroup filetypedetect"); vim_snprintf((char *)pat, len, ftpat, ffname); source_all_matches(pat); + vim_snprintf((char *)pat, len, "%s/ftdetect/*.lua", ffname); // NOLINT + source_all_matches(pat); do_cmdline_cmd("augroup END"); } xfree(cmd); xfree(pat); - retval = OK; - -theend: xfree(ffname); - return retval; + return OK; } // used for "cookie" of add_pack_plugin() diff --git a/src/nvim/screen.c b/src/nvim/screen.c index 35d672294d..5c494d5066 100644 --- a/src/nvim/screen.c +++ b/src/nvim/screen.c @@ -2101,6 +2101,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, bool search_attr_from_match = false; // if search_attr is from :match bool has_decor = false; // this buffer has decoration bool do_virttext = false; // draw virtual text for this line + int win_col_offset = 0; // offset for window columns char_u buf_fold[FOLD_TEXT_LEN + 1]; // Hold value returned by get_foldtext @@ -2790,6 +2791,10 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, } } + if (draw_state == WL_NR && n_extra == 0) { + win_col_offset = off; + } + if (wp->w_briopt_sbr && draw_state == WL_BRI - 1 && n_extra == 0 && *p_sbr != NUL) { // draw indent after showbreak value @@ -2904,7 +2909,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, && vcol >= (long)wp->w_virtcol) || (number_only && draw_state > WL_NR)) && filler_todo <= 0) { - draw_virt_text(buf, &col, grid->Columns); + draw_virt_text(buf, win_col_offset, &col, grid->Columns); grid_put_linebuf(grid, row, 0, col, -grid->Columns, wp->w_p_rl, wp, wp->w_hl_attr_normal, false); // Pretend we have finished updating the window. Except when @@ -3945,13 +3950,15 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, draw_color_col = advance_color_col(VCOL_HLC, &color_cols); VirtText virt_text = KV_INITIAL_VALUE; + bool has_aligned = false; if (err_text) { int hl_err = syn_check_group((char_u *)S_LEN("ErrorMsg")); kv_push(virt_text, ((VirtTextChunk){ .text = err_text, .hl_id = hl_err })); do_virttext = true; } else if (has_decor) { - virt_text = decor_redraw_eol(wp->w_buffer, &decor_state, &line_attr); + virt_text = decor_redraw_eol(wp->w_buffer, &decor_state, &line_attr, + &has_aligned); if (kv_size(virt_text)) { do_virttext = true; } @@ -3963,7 +3970,8 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, grid->Columns * (row - startrow + 1) + v && lnum != wp->w_cursor.lnum) || draw_color_col || line_attr_lowprio || line_attr - || diff_hlf != (hlf_T)0 || do_virttext)) { + || diff_hlf != (hlf_T)0 || do_virttext + || has_aligned)) { int rightmost_vcol = 0; int i; @@ -4001,7 +4009,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, } int base_attr = hl_combine_attr(line_attr_lowprio, diff_attr); - if (base_attr || line_attr) { + if (base_attr || line_attr || has_aligned) { rightmost_vcol = INT_MAX; } @@ -4079,7 +4087,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, } } - draw_virt_text(buf, &col, grid->Columns); + draw_virt_text(buf, win_col_offset, &col, grid->Columns); grid_put_linebuf(grid, row, 0, col, grid->Columns, wp->w_p_rl, wp, wp->w_hl_attr_normal, false); row++; @@ -4130,9 +4138,16 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, // highlight the cursor position itself. // Also highlight the 'colorcolumn' if it is different than // 'cursorcolumn' + // Also highlight the 'colorcolumn' if 'breakindent' and/or 'showbreak' + // options are set vcol_save_attr = -1; - if (draw_state == WL_LINE && !lnum_in_visual_area - && search_attr == 0 && area_attr == 0) { + if ((draw_state == WL_LINE + || draw_state == WL_BRI + || draw_state == WL_SBR) + && !lnum_in_visual_area + && search_attr == 0 + && area_attr == 0 + && filler_todo <= 0) { if (wp->w_p_cuc && VCOL_HLC == (long)wp->w_virtcol && lnum != wp->w_cursor.lnum) { vcol_save_attr = char_attr; @@ -4300,7 +4315,7 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, && !wp->w_p_rl; // Not right-to-left. int draw_col = col - boguscols; - draw_virt_text(buf, &draw_col, grid->Columns); + draw_virt_text(buf, win_col_offset, &draw_col, grid->Columns); grid_put_linebuf(grid, row, 0, draw_col, grid->Columns, wp->w_p_rl, wp, wp->w_hl_attr_normal, wrap); if (wrap) { @@ -4377,52 +4392,62 @@ static int win_line(win_T *wp, linenr_T lnum, int startrow, int endrow, return row; } -void draw_virt_text(buf_T *buf, int *end_col, int max_col) +void draw_virt_text(buf_T *buf, int col_off, int *end_col, int max_col) { DecorState *state = &decor_state; + int right_pos = max_col; for (size_t i = 0; i < kv_size(state->active); i++) { DecorRange *item = &kv_A(state->active, i); - if (item->start_row == state->row && kv_size(item->decor.virt_text) - && item->decor.virt_text_pos == kVTOverlay - && item->virt_col >= 0) { - VirtText vt = item->decor.virt_text; - HlMode hl_mode = item->decor.hl_mode; - LineState s = LINE_STATE(""); - int virt_attr = 0; - int col = item->virt_col; - size_t virt_pos = 0; - item->virt_col = -2; // deactivate + if (item->start_row == state->row && kv_size(item->decor.virt_text)) { + if (item->win_col == -1) { + if (item->decor.virt_text_pos == kVTRightAlign) { + right_pos -= item->decor.col; + item->win_col = right_pos; + } else if (item->decor.virt_text_pos == kVTWinCol) { + item->win_col = MAX(item->decor.col+col_off, 0); + } + } + if (item->win_col < 0) { + continue; + } + VirtText vt = item->decor.virt_text; + HlMode hl_mode = item->decor.hl_mode; + LineState s = LINE_STATE(""); + int virt_attr = 0; + int col = item->win_col; + size_t virt_pos = 0; + item->win_col = -2; // deactivate - while (col < max_col) { - if (!*s.p) { - if (virt_pos == kv_size(vt)) { - break; - } - s.p = kv_A(vt, virt_pos).text; - int hl_id = kv_A(vt, virt_pos).hl_id; - virt_attr = hl_id > 0 ? syn_id2attr(hl_id) : 0; - virt_pos++; - continue; - } - int attr; - bool through = false; - if (hl_mode == kHlModeCombine) { - attr = hl_combine_attr(linebuf_attr[col], virt_attr); - } else if (hl_mode == kHlModeBlend) { - through = (*s.p == ' '); - attr = hl_blend_attrs(linebuf_attr[col], virt_attr, &through); - } else { - attr = virt_attr; + while (col < max_col) { + if (!*s.p) { + if (virt_pos == kv_size(vt)) { + break; } - schar_T dummy[2]; - int cells = line_putchar(&s, through ? dummy : &linebuf_char[col], - max_col-col, false); + s.p = kv_A(vt, virt_pos).text; + int hl_id = kv_A(vt, virt_pos).hl_id; + virt_attr = hl_id > 0 ? syn_id2attr(hl_id) : 0; + virt_pos++; + continue; + } + int attr; + bool through = false; + if (hl_mode == kHlModeCombine) { + attr = hl_combine_attr(linebuf_attr[col], virt_attr); + } else if (hl_mode == kHlModeBlend) { + through = (*s.p == ' '); + attr = hl_blend_attrs(linebuf_attr[col], virt_attr, &through); + } else { + attr = virt_attr; + } + schar_T dummy[2]; + int cells = line_putchar(&s, through ? dummy : &linebuf_char[col], + max_col-col, false); + linebuf_attr[col++] = attr; + if (cells > 1) { linebuf_attr[col++] = attr; - if (cells > 1) { - linebuf_attr[col++] = attr; - } } - *end_col = MAX(*end_col, col); + } + *end_col = MAX(*end_col, col); } } } diff --git a/src/nvim/search.c b/src/nvim/search.c index abe05bbd12..82fc0f9d8e 100644 --- a/src/nvim/search.c +++ b/src/nvim/search.c @@ -46,38 +46,36 @@ #include "nvim/window.h" #include "nvim/os/time.h" - #ifdef INCLUDE_GENERATED_DECLARATIONS # include "search.c.generated.h" #endif -/* - * This file contains various searching-related routines. These fall into - * three groups: - * 1. string searches (for /, ?, n, and N) - * 2. character searches within a single line (for f, F, t, T, etc) - * 3. "other" kinds of searches like the '%' command, and 'word' searches. - */ -/* - * String searches - * - * The string search functions are divided into two levels: - * lowest: searchit(); uses a pos_T for starting position and found match. - * Highest: do_search(); uses curwin->w_cursor; calls searchit(). - * - * The last search pattern is remembered for repeating the same search. - * This pattern is shared between the :g, :s, ? and / commands. - * This is in search_regcomp(). - * - * The actual string matching is done using a heavily modified version of - * Henry Spencer's regular expression library. See regexp.c. - */ +// This file contains various searching-related routines. These fall into +// three groups: +// 1. string searches (for /, ?, n, and N) +// 2. character searches within a single line (for f, F, t, T, etc) +// 3. "other" kinds of searches like the '%' command, and 'word' searches. +// +// +// String searches +// +// The string search functions are divided into two levels: +// lowest: searchit(); uses a pos_T for starting position and found match. +// Highest: do_search(); uses curwin->w_cursor; calls searchit(). +// +// The last search pattern is remembered for repeating the same search. +// This pattern is shared between the :g, :s, ? and / commands. +// This is in search_regcomp(). +// +// The actual string matching is done using a heavily modified version of +// Henry Spencer's regular expression library. See regexp.c. +// +// +// +// Two search patterns are remembered: One for the :substitute command and +// one for other searches. last_idx points to the one that was used the last +// time. -/* - * Two search patterns are remembered: One for the :substitute command and - * one for other searches. last_idx points to the one that was used the last - * time. - */ static struct spat spats[2] = { // Last used search pattern @@ -1002,7 +1000,7 @@ static int first_submatch(regmmatch_T *rp) /* * Highest level string search function. * Search for the 'count'th occurrence of pattern 'pat' in direction 'dirc' - * If 'dirc' is 0: use previous dir. + * If 'dirc' is 0: use previous dir. * If 'pat' is NULL or empty : use previous string. * If 'options & SEARCH_REV' : go in reverse of previous dir. * If 'options & SEARCH_ECHO': echo the search command and handle options @@ -1042,7 +1040,6 @@ int do_search( char_u *msgbuf = NULL; size_t len; bool has_offset = false; -#define SEARCH_STAT_BUF_LEN 12 /* * A line offset is not remembered, this is vi compatible. @@ -1383,11 +1380,14 @@ int do_search( && c != FAIL && !shortmess(SHM_SEARCHCOUNT) && msgbuf != NULL) { - search_stat(dirc, &pos, show_top_bot_msg, msgbuf, - (count != 1 - || has_offset - || (!(fdo_flags & FDO_SEARCH) - && hasFolding(curwin->w_cursor.lnum, NULL, NULL)))); + cmdline_search_stat(dirc, &pos, &curwin->w_cursor, + show_top_bot_msg, msgbuf, + (count != 1 || has_offset + || (!(fdo_flags & FDO_SEARCH) + && hasFolding(curwin->w_cursor.lnum, NULL, + NULL))), + SEARCH_STAT_DEF_MAX_COUNT, + SEARCH_STAT_DEF_TIMEOUT); } // The search command can be followed by a ';' to do another search. @@ -1715,10 +1715,10 @@ static void find_mps_values(int *initc, int *findc, bool *backwards, * '#' look for preprocessor directives * 'R' look for raw string start: R"delim(text)delim" (only backwards) * - * flags: FM_BACKWARD search backwards (when initc is '/', '*' or '#') - * FM_FORWARD search forwards (when initc is '/', '*' or '#') - * FM_BLOCKSTOP stop at start/end of block ({ or } in column 0) - * FM_SKIPCOMM skip comments (not implemented yet!) + * flags: FM_BACKWARD search backwards (when initc is '/', '*' or '#') + * FM_FORWARD search forwards (when initc is '/', '*' or '#') + * FM_BLOCKSTOP stop at start/end of block ({ or } in column 0) + * FM_SKIPCOMM skip comments (not implemented yet!) * * "oap" is only used to set oap->motion_type for a linewise motion, it can be * NULL @@ -3003,7 +3003,7 @@ current_word( /* * If the start is on white space, and white space should be included - * (" word"), or start is not on white space, and white space should + * (" word"), or start is not on white space, and white space should * not be included ("word"), find end of word. */ if ((cls() == 0) == include) { @@ -3012,8 +3012,8 @@ current_word( } else { /* * If the start is not on white space, and white space should be - * included ("word "), or start is on white space and white - * space should not be included (" "), find start of word. + * included ("word "), or start is on white space and white + * space should not be included (" "), find start of word. * If we end up in the first column of the next line (single char * word) back up to end of the line. */ @@ -4347,121 +4347,287 @@ int linewhite(linenr_T lnum) } // Add the search count "[3/19]" to "msgbuf". -// When "recompute" is true Always recompute the numbers. -static void search_stat(int dirc, pos_T *pos, - bool show_top_bot_msg, char_u *msgbuf, bool recompute) +// See update_search_stat() for other arguments. +static void cmdline_search_stat(int dirc, pos_T *pos, pos_T *cursor_pos, + bool show_top_bot_msg, char_u *msgbuf, + bool recompute, int maxcount, long timeout) +{ + searchstat_T stat; + + update_search_stat(dirc, pos, cursor_pos, &stat, recompute, maxcount, + timeout); + if (stat.cur > 0) { + char t[SEARCH_STAT_BUF_LEN]; + + if (curwin->w_p_rl && *curwin->w_p_rlc == 's') { + if (stat.incomplete == 1) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[?/??]"); + } else if (stat.cnt > maxcount && stat.cur > maxcount) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>%d/>%d]", + maxcount, maxcount); + } else if (stat.cnt > maxcount) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>%d/%d]", + maxcount, stat.cur); + } else { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/%d]", + stat.cnt, stat.cur); + } + } else { + if (stat.incomplete == 1) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[?/??]"); + } else if (stat.cnt > maxcount && stat.cur > maxcount) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>%d/>%d]", + maxcount, maxcount); + } else if (stat.cnt > maxcount) { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/>%d]", + stat.cur, maxcount); + } else { + vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/%d]", + stat.cur, stat.cnt); + } + } + + size_t len = strlen(t); + if (show_top_bot_msg && len + 2 < SEARCH_STAT_BUF_LEN) { + memmove(t + 2, t, len); + t[0] = 'W'; + t[1] = ' '; + len += 2; + } + + memmove(msgbuf + STRLEN(msgbuf) - len, t, len); + if (dirc == '?' && stat.cur == maxcount + 1) { + stat.cur = -1; + } + + // keep the message even after redraw, but don't put in history + msg_hist_off = true; + msg_ext_set_kind("search_count"); + give_warning(msgbuf, false); + msg_hist_off = false; + } +} + +// Add the search count information to "stat". +// "stat" must not be NULL. +// When "recompute" is true always recompute the numbers. +// dirc == 0: don't find the next/previous match (only set the result to "stat") +// dirc == '/': find the next match +// dirc == '?': find the previous match +static void update_search_stat(int dirc, pos_T *pos, pos_T *cursor_pos, + searchstat_T *stat, bool recompute, int maxcount, + long timeout) { - int save_ws = p_ws; - int wraparound = false; - pos_T p = (*pos); - static pos_T lastpos = { 0, 0, 0 }; + int save_ws = p_ws; + bool wraparound = false; + pos_T p = (*pos); + static pos_T lastpos = { 0, 0, 0 }; static int cur = 0; static int cnt = 0; + static bool exact_match = false; + static int incomplete = 0; + static int last_maxcount = SEARCH_STAT_DEF_MAX_COUNT; static int chgtick = 0; static char_u *lastpat = NULL; static buf_T *lbuf = NULL; - proftime_T start; -#define OUT_OF_TIME 999 + proftime_T start; + memset(stat, 0, sizeof(searchstat_T)); + + if (dirc == 0 && !recompute && !EMPTY_POS(lastpos)) { + stat->cur = cur; + stat->cnt = cnt; + stat->exact_match = exact_match; + stat->incomplete = incomplete; + stat->last_maxcount = last_maxcount; + return; + } + last_maxcount = maxcount; wraparound = ((dirc == '?' && lt(lastpos, p)) || (dirc == '/' && lt(p, lastpos))); // If anything relevant changed the count has to be recomputed. // STRNICMP ignores case, but we should not ignore case. // Unfortunately, there is no STRNICMP function. + // XXX: above comment should be "no MB_STRCMP function" ? if (!(chgtick == buf_get_changedtick(curbuf) && lastpat != NULL // supress clang/NULL passed as nonnull parameter && STRNICMP(lastpat, spats[last_idx].pat, STRLEN(lastpat)) == 0 && STRLEN(lastpat) == STRLEN(spats[last_idx].pat) - && equalpos(lastpos, curwin->w_cursor) + && equalpos(lastpos, *cursor_pos) && lbuf == curbuf) - || wraparound || cur < 0 || cur > 99 || recompute) { + || wraparound || cur < 0 || (maxcount > 0 && cur > maxcount) + || recompute) { cur = 0; cnt = 0; + exact_match = false; + incomplete = 0; clearpos(&lastpos); lbuf = curbuf; } - if (equalpos(lastpos, curwin->w_cursor) && !wraparound - && (dirc == '/' ? cur < cnt : cur > 0)) { - cur += dirc == '/' ? 1 : -1; + if (equalpos(lastpos, *cursor_pos) && !wraparound + && (dirc == 0 || dirc == '/' ? cur < cnt : cur > 0)) { + cur += dirc == 0 ? 0 : dirc == '/' ? 1 : -1; } else { + bool done_search = false; + pos_T endpos = { 0, 0, 0 }; p_ws = false; - start = profile_setlimit(20L); - while (!got_int && searchit(curwin, curbuf, &lastpos, NULL, + if (timeout > 0) { + start = profile_setlimit(timeout); + } + while (!got_int && searchit(curwin, curbuf, &lastpos, &endpos, FORWARD, NULL, 1, SEARCH_KEEP, RE_LAST, NULL) != FAIL) { + done_search = true; // Stop after passing the time limit. - if (profile_passed_limit(start)) { - cnt = OUT_OF_TIME; - cur = OUT_OF_TIME; + if (timeout > 0 && profile_passed_limit(start)) { + incomplete = 1; break; } cnt++; if (ltoreq(lastpos, p)) { - cur++; + cur = cnt; + if (lt(p, endpos)) { + exact_match = true; + } } fast_breakcheck(); - if (cnt > 99) { + if (maxcount > 0 && cnt > maxcount) { + incomplete = 2; // max count exceeded break; } } if (got_int) { cur = -1; // abort } + if (done_search) { + xfree(lastpat); + lastpat = vim_strsave(spats[last_idx].pat); + chgtick = buf_get_changedtick(curbuf); + lbuf = curbuf; + lastpos = p; + } } - if (cur > 0) { - char t[SEARCH_STAT_BUF_LEN] = ""; - int len; + stat->cur = cur; + stat->cnt = cnt; + stat->exact_match = exact_match; + stat->incomplete = incomplete; + stat->last_maxcount = last_maxcount; + p_ws = save_ws; +} - if (curwin->w_p_rl && *curwin->w_p_rlc == 's') { - if (cur == OUT_OF_TIME) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[?\?/?]"); - } else if (cnt > 99 && cur > 99) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>99/>99]"); - } else if (cnt > 99) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>99/%d]", cur); - } else { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/%d]", cnt, cur); +// "searchcount()" function +void f_searchcount(typval_T *argvars, typval_T *rettv, FunPtr fptr) +{ + pos_T pos = curwin->w_cursor; + char_u *pattern = NULL; + int maxcount = SEARCH_STAT_DEF_MAX_COUNT; + long timeout = SEARCH_STAT_DEF_TIMEOUT; + bool recompute = true; + searchstat_T stat; + + tv_dict_alloc_ret(rettv); + + if (shortmess(SHM_SEARCHCOUNT)) { // 'shortmess' contains 'S' flag + recompute = true; + } + + if (argvars[0].v_type != VAR_UNKNOWN) { + dict_T *dict; + dictitem_T *di; + listitem_T *li; + bool error = false; + + if (argvars[0].v_type != VAR_DICT || argvars[0].vval.v_dict == NULL) { + EMSG(_(e_dictreq)); + return; + } + dict = argvars[0].vval.v_dict; + di = tv_dict_find(dict, (const char *)"timeout", -1); + if (di != NULL) { + timeout = (long)tv_get_number_chk(&di->di_tv, &error); + if (error) { + return; } - } else { - if (cur == OUT_OF_TIME) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[?/??]"); - } else if (cnt > 99 && cur > 99) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[>99/>99]"); - } else if (cnt > 99) { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/>99]", cur); - } else { - vim_snprintf(t, SEARCH_STAT_BUF_LEN, "[%d/%d]", cur, cnt); + } + di = tv_dict_find(dict, (const char *)"maxcount", -1); + if (di != NULL) { + maxcount = (int)tv_get_number_chk(&di->di_tv, &error); + if (error) { + return; } } - - len = STRLEN(t); - if (show_top_bot_msg && len + 2 < SEARCH_STAT_BUF_LEN) { - memmove(t + 2, t, len); - t[0] = 'W'; - t[1] = ' '; - len += 2; + di = tv_dict_find(dict, (const char *)"recompute", -1); + if (di != NULL) { + recompute = tv_get_number_chk(&di->di_tv, &error); + if (error) { + return; + } } + di = tv_dict_find(dict, (const char *)"pattern", -1); + if (di != NULL) { + pattern = (char_u *)tv_get_string_chk(&di->di_tv); + if (pattern == NULL) { + return; + } + } + di = tv_dict_find(dict, (const char *)"pos", -1); + if (di != NULL) { + if (di->di_tv.v_type != VAR_LIST) { + EMSG2(_(e_invarg2), "pos"); + return; + } + if (tv_list_len(di->di_tv.vval.v_list) != 3) { + EMSG2(_(e_invarg2), "List format should be [lnum, col, off]"); + return; + } + li = tv_list_find(di->di_tv.vval.v_list, 0L); + if (li != NULL) { + pos.lnum = tv_get_number_chk(TV_LIST_ITEM_TV(li), &error); + if (error) { + return; + } + } + li = tv_list_find(di->di_tv.vval.v_list, 1L); + if (li != NULL) { + pos.col = tv_get_number_chk(TV_LIST_ITEM_TV(li), &error) - 1; + if (error) { + return; + } + } + li = tv_list_find(di->di_tv.vval.v_list, 2L); + if (li != NULL) { + pos.coladd = tv_get_number_chk(TV_LIST_ITEM_TV(li), &error); + if (error) { + return; + } + } + } + } - memmove(msgbuf + STRLEN(msgbuf) - len, t, len); - if (dirc == '?' && cur == 100) { - cur = -1; + save_last_search_pattern(); + if (pattern != NULL) { + if (*pattern == NUL) { + goto the_end; } + xfree(spats[last_idx].pat); + spats[last_idx].pat = vim_strsave(pattern); + } + if (spats[last_idx].pat == NULL || *spats[last_idx].pat == NUL) { + goto the_end; // the previous pattern was never defined + } - xfree(lastpat); - lastpat = vim_strsave(spats[last_idx].pat); - chgtick = buf_get_changedtick(curbuf); - lbuf = curbuf; - lastpos = p; + update_search_stat(0, &pos, &pos, &stat, recompute, maxcount, timeout); - // keep the message even after redraw, but don't put in history - msg_hist_off = true; - msg_ext_set_kind("search_count"); - give_warning(msgbuf, false); - msg_hist_off = false; - } - p_ws = save_ws; + tv_dict_add_nr(rettv->vval.v_dict, S_LEN("current"), stat.cur); + tv_dict_add_nr(rettv->vval.v_dict, S_LEN("total"), stat.cnt); + tv_dict_add_nr(rettv->vval.v_dict, S_LEN("exact_match"), stat.exact_match); + tv_dict_add_nr(rettv->vval.v_dict, S_LEN("incomplete"), stat.incomplete); + tv_dict_add_nr(rettv->vval.v_dict, S_LEN("maxcount"), stat.last_maxcount); + +the_end: + restore_last_search_pattern(); } /* diff --git a/src/nvim/search.h b/src/nvim/search.h index 0366aee8a1..98ddaa5eeb 100644 --- a/src/nvim/search.h +++ b/src/nvim/search.h @@ -6,6 +6,7 @@ #include "nvim/vim.h" #include "nvim/buffer_defs.h" +#include "nvim/eval/funcs.h" #include "nvim/eval/typval.h" #include "nvim/normal.h" #include "nvim/os/time.h" @@ -49,6 +50,11 @@ #define RE_BOTH 2 /* save pat in both patterns */ #define RE_LAST 2 /* use last used pattern if "pat" is NULL */ +// Values for searchcount() +#define SEARCH_STAT_DEF_TIMEOUT 40L +#define SEARCH_STAT_DEF_MAX_COUNT 99 +#define SEARCH_STAT_BUF_LEN 12 + /// Structure containing offset definition for the last search pattern /// /// @note Only offset for the last search pattern is used, not for the last @@ -78,6 +84,16 @@ typedef struct { int sa_wrapped; ///< search wrapped around } searchit_arg_T; +typedef struct searchstat +{ + int cur; // current position of found words + int cnt; // total count of found words + int exact_match; // TRUE if matched exactly on specified position + int incomplete; // 0: search was fully completed + // 1: recomputing was timed out + // 2: max count exceeded + int last_maxcount; // the max count of the last search +} searchstat_T; #ifdef INCLUDE_GENERATED_DECLARATIONS # include "search.h.generated.h" diff --git a/src/nvim/sign.c b/src/nvim/sign.c index 5c7b497a19..15fd25e096 100644 --- a/src/nvim/sign.c +++ b/src/nvim/sign.c @@ -742,15 +742,15 @@ void sign_mark_adjust( next = sign->se_next; new_lnum = sign->se_lnum; if (sign->se_lnum >= line1 && sign->se_lnum <= line2) { - if (amount == MAXLNUM && (!is_fixed || signcol >= 2)) { + if (amount != MAXLNUM) { + new_lnum += amount; + } else if (!is_fixed || signcol >= 2) { *lastp = next; if (next) { next->se_prev = last; } xfree(sign); continue; - } else { - new_lnum += amount; } } else if (sign->se_lnum > line2) { new_lnum += amount_after; @@ -2012,9 +2012,6 @@ int sign_place_from_dict( group = NULL; } else { group = vim_strsave(group); - if (group == NULL) { - return -1; - } } } @@ -2114,9 +2111,6 @@ int sign_unplace_from_dict(typval_T *group_tv, dict_T *dict) group = NULL; } else { group = vim_strsave(group); - if (group == NULL) { - return -1; - } } } diff --git a/src/nvim/spell.c b/src/nvim/spell.c index f6dc3a04a7..771c2106db 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -441,7 +441,8 @@ size_t spell_check( MB_PTR_ADV(mi.mi_fend); } - (void)spell_casefold(ptr, (int)(mi.mi_fend - ptr), mi.mi_fword, MAXWLEN + 1); + (void)spell_casefold(wp, ptr, (int)(mi.mi_fend - ptr), mi.mi_fword, + MAXWLEN + 1); mi.mi_fwordlen = (int)STRLEN(mi.mi_fword); if (camel_case) { @@ -869,10 +870,11 @@ static void find_word(matchinf_T *mip, int mode) if (slang->sl_compsylmax < MAXWLEN) { // "fword" is only needed for checking syllables. - if (ptr == mip->mi_word) - (void)spell_casefold(ptr, wlen, fword, MAXWLEN); - else + if (ptr == mip->mi_word) { + (void)spell_casefold(mip->mi_win, ptr, wlen, fword, MAXWLEN); + } else { STRLCPY(fword, ptr, endlen[endidxcnt] + 1); + } } if (!can_compound(slang, fword, mip->mi_compflags)) continue; @@ -1315,9 +1317,9 @@ static int fold_more(matchinf_T *mip) MB_PTR_ADV(mip->mi_fend); } - (void)spell_casefold(p, (int)(mip->mi_fend - p), - mip->mi_fword + mip->mi_fwordlen, - MAXWLEN - mip->mi_fwordlen); + (void)spell_casefold(mip->mi_win, p, (int)(mip->mi_fend - p), + mip->mi_fword + mip->mi_fwordlen, + MAXWLEN - mip->mi_fwordlen); flen = (int)STRLEN(mip->mi_fword + mip->mi_fwordlen); mip->mi_fwordlen += flen; return flen; @@ -1341,7 +1343,7 @@ static bool no_spell_checking(win_T *wp) { if (!wp->w_p_spell || *wp->w_s->b_p_spl == NUL || GA_EMPTY(&wp->w_s->b_langp)) { - EMSG(_("E756: Spell checking is not enabled")); + EMSG(_(e_no_spell)); return true; } return false; @@ -1677,6 +1679,7 @@ static void int_wordlist_spl(char_u *fname) // Allocate a new slang_T for language "lang". "lang" can be NULL. // Caller must fill "sl_next". slang_T *slang_alloc(char_u *lang) + FUNC_ATTR_NONNULL_RET { slang_T *lp = xcalloc(1, sizeof(slang_T)); @@ -2654,7 +2657,9 @@ static bool spell_iswordp_w(const int *p, const win_T *wp) // Uses the character definitions from the .spl file. // When using a multi-byte 'encoding' the length may change! // Returns FAIL when something wrong. -int spell_casefold(char_u *str, int len, char_u *buf, int buflen) +int spell_casefold(const win_T *wp, char_u *str, int len, char_u *buf, + int buflen) + FUNC_ATTR_NONNULL_ALL { if (len >= buflen) { buf[0] = NUL; @@ -2669,8 +2674,22 @@ int spell_casefold(char_u *str, int len, char_u *buf, int buflen) buf[outi] = NUL; return FAIL; } - const int c = mb_cptr2char_adv((const char_u **)&p); - outi += utf_char2bytes(SPELL_TOFOLD(c), buf + outi); + int c = mb_cptr2char_adv((const char_u **)&p); + + // Exception: greek capital sigma 0x03A3 folds to 0x03C3, except + // when it is the last character in a word, then it folds to + // 0x03C2. + if (c == 0x03a3 || c == 0x03c2) { + if (p == str + len || !spell_iswordp(p, wp)) { + c = 0x03c2; + } else { + c = 0x03c3; + } + } else { + c = SPELL_TOFOLD(c); + } + + outi += utf_char2bytes(c, buf + outi); } buf[outi] = NUL; @@ -2752,9 +2771,17 @@ void spell_suggest(int count) int selected = count; int badlen = 0; int msg_scroll_save = msg_scroll; + const int wo_spell_save = curwin->w_p_spell; + + if (!curwin->w_p_spell) { + did_set_spelllang(curwin); + curwin->w_p_spell = true; + } - if (no_spell_checking(curwin)) + if (*curwin->w_s->b_p_spl == NUL) { + EMSG(_(e_no_spell)); return; + } if (VIsual_active) { // Use the Visually selected text as the bad word. But reject @@ -2947,6 +2974,7 @@ void spell_suggest(int count) spell_find_cleanup(&sug); xfree(line); + curwin->w_p_spell = wo_spell_save; } // Check if the word at line "lnum" column "col" is required to start with a @@ -3154,7 +3182,8 @@ spell_find_suggest ( if (su->su_badlen >= MAXWLEN) su->su_badlen = MAXWLEN - 1; // just in case STRLCPY(su->su_badword, su->su_badptr, su->su_badlen + 1); - (void)spell_casefold(su->su_badptr, su->su_badlen, su->su_fbadword, MAXWLEN); + (void)spell_casefold(curwin, su->su_badptr, su->su_badlen, su->su_fbadword, + MAXWLEN); // TODO(vim): make this work if the case-folded text is longer than the // original text. Currently an illegal byte causes wrong pointer @@ -3534,7 +3563,7 @@ static void suggest_try_change(suginfo_T *su) STRCPY(fword, su->su_fbadword); n = (int)STRLEN(fword); p = su->su_badptr + su->su_badlen; - (void)spell_casefold(p, (int)STRLEN(p), fword + n, MAXWLEN - n); + (void)spell_casefold(curwin, p, (int)STRLEN(p), fword + n, MAXWLEN - n); for (int lpi = 0; lpi < curwin->w_s->b_langp.ga_len; ++lpi) { lp = LANGP_ENTRY(curwin->w_s->b_langp, lpi); @@ -5086,7 +5115,7 @@ stp_sal_score ( pbad = badsound; else { // soundfold the bad word with more characters following - (void)spell_casefold(su->su_badptr, stp->st_orglen, fword, MAXWLEN); + (void)spell_casefold(curwin, su->su_badptr, stp->st_orglen, fword, MAXWLEN); // When joining two words the sound often changes a lot. E.g., "t he" // sounds like "t h" while "the" sounds like "@". Avoid that by @@ -5741,7 +5770,9 @@ cleanup_suggestions ( xfree(stp[i].st_word); } gap->ga_len = keep; - return stp[keep - 1].st_score; + if (keep >= 1) { + return stp[keep - 1].st_score; + } } } return maxscore; @@ -5799,10 +5830,10 @@ void spell_soundfold(slang_T *slang, char_u *inword, bool folded, char_u *res) spell_soundfold_sofo(slang, inword, res); else { // SAL items used. Requires the word to be case-folded. - if (folded) + if (folded) { word = inword; - else { - (void)spell_casefold(inword, (int)STRLEN(inword), fword, MAXWLEN); + } else { + (void)spell_casefold(curwin, inword, (int)STRLEN(inword), fword, MAXWLEN); word = fword; } diff --git a/src/nvim/spell_defs.h b/src/nvim/spell_defs.h index e2c9ab7ae8..f07f5673f9 100644 --- a/src/nvim/spell_defs.h +++ b/src/nvim/spell_defs.h @@ -284,4 +284,11 @@ extern int did_set_spelltab; extern char *e_format; +// Values for "what" argument of spell_add_word() +typedef enum { + SPELL_ADD_GOOD = 0, + SPELL_ADD_BAD = 1, + SPELL_ADD_RARE = 2, +} SpellAddType; + #endif // NVIM_SPELL_DEFS_H diff --git a/src/nvim/spellfile.c b/src/nvim/spellfile.c index 3c125959a9..0597f392e7 100644 --- a/src/nvim/spellfile.c +++ b/src/nvim/spellfile.c @@ -2942,9 +2942,9 @@ static void add_fromto(spellinfo_T *spin, garray_T *gap, char_u *from, char_u *t char_u word[MAXWLEN]; fromto_T *ftp = GA_APPEND_VIA_PTR(fromto_T, gap); - (void)spell_casefold(from, (int)STRLEN(from), word, MAXWLEN); + (void)spell_casefold(curwin, from, (int)STRLEN(from), word, MAXWLEN); ftp->ft_from = getroom_save(spin, word); - (void)spell_casefold(to, (int)STRLEN(to), word, MAXWLEN); + (void)spell_casefold(curwin, to, (int)STRLEN(to), word, MAXWLEN); ftp->ft_to = getroom_save(spin, word); } @@ -3764,7 +3764,7 @@ store_word ( char_u *word, int flags, // extra flags, WF_BANNED int region, // supported region(s) - char_u *pfxlist, // list of prefix IDs or NULL + const char_u *pfxlist, // list of prefix IDs or NULL bool need_affix // only store word with affix ID ) { @@ -3772,25 +3772,28 @@ store_word ( int ct = captype(word, word + len); char_u foldword[MAXWLEN]; int res = OK; - char_u *p; - (void)spell_casefold(word, len, foldword, MAXWLEN); - for (p = pfxlist; res == OK; ++p) { - if (!need_affix || (p != NULL && *p != NUL)) + (void)spell_casefold(curwin, word, len, foldword, MAXWLEN); + for (const char_u *p = pfxlist; res == OK; p++) { + if (!need_affix || (p != NULL && *p != NUL)) { res = tree_add_word(spin, foldword, spin->si_foldroot, ct | flags, - region, p == NULL ? 0 : *p); - if (p == NULL || *p == NUL) + region, p == NULL ? 0 : *p); + } + if (p == NULL || *p == NUL) { break; + } } ++spin->si_foldwcount; if (res == OK && (ct == WF_KEEPCAP || (flags & WF_KEEPCAP))) { - for (p = pfxlist; res == OK; ++p) { - if (!need_affix || (p != NULL && *p != NUL)) + for (const char_u *p = pfxlist; res == OK; p++) { + if (!need_affix || (p != NULL && *p != NUL)) { res = tree_add_word(spin, word, spin->si_keeproot, flags, - region, p == NULL ? 0 : *p); - if (p == NULL || *p == NUL) + region, p == NULL ? 0 : *p); + } + if (p == NULL || *p == NUL) { break; + } } ++spin->si_keepwcount; } @@ -5287,13 +5290,16 @@ static void spell_message(const spellinfo_T *spin, char_u *str) } // ":[count]spellgood {word}" -// ":[count]spellwrong {word}" +// ":[count]spellwrong {word}" // ":[count]spellundo {word}" +// ":[count]spellrare {word}" void ex_spell(exarg_T *eap) { - spell_add_word(eap->arg, (int)STRLEN(eap->arg), eap->cmdidx == CMD_spellwrong, - eap->forceit ? 0 : (int)eap->line2, - eap->cmdidx == CMD_spellundo); + spell_add_word(eap->arg, (int)STRLEN(eap->arg), + eap->cmdidx == CMD_spellwrong ? SPELL_ADD_BAD : + eap->cmdidx == CMD_spellrare ? SPELL_ADD_RARE : SPELL_ADD_GOOD, + eap->forceit ? 0 : (int)eap->line2, + eap->cmdidx == CMD_spellundo); } // Add "word[len]" to 'spellfile' as a good or bad word. @@ -5301,10 +5307,10 @@ void spell_add_word ( char_u *word, int len, - int bad, - int idx, // "zG" and "zW": zero, otherwise index in - // 'spellfile' - bool undo // true for "zug", "zuG", "zuw" and "zuW" + SpellAddType what, // SPELL_ADD_ values + int idx, // "zG" and "zW": zero, otherwise index in + // 'spellfile' + bool undo // true for "zug", "zuG", "zuw" and "zuW" ) { FILE *fd = NULL; @@ -5361,7 +5367,7 @@ spell_add_word ( fname = fnamebuf; } - if (bad || undo) { + if (what == SPELL_ADD_BAD || undo) { // When the word appears as good word we need to remove that one, // since its flags sort before the one with WF_BANNED. fd = os_fopen((char *)fname, "r"); @@ -5419,13 +5425,16 @@ spell_add_word ( } } - if (fd == NULL) + if (fd == NULL) { EMSG2(_(e_notopen), fname); - else { - if (bad) + } else { + if (what == SPELL_ADD_BAD) { fprintf(fd, "%.*s/!\n", len, word); - else + } else if (what == SPELL_ADD_RARE) { + fprintf(fd, "%.*s/?\n", len, word); + } else { fprintf(fd, "%.*s\n", len, word); + } fclose(fd); home_replace(NULL, fname, NameBuff, MAXPATHL, TRUE); diff --git a/src/nvim/syntax.c b/src/nvim/syntax.c index 77a751e5ad..ce81f26d38 100644 --- a/src/nvim/syntax.c +++ b/src/nvim/syntax.c @@ -3469,13 +3469,13 @@ static void syn_cmd_onoff(exarg_T *eap, char *name) } } -void syn_maybe_on(void) +void syn_maybe_enable(void) { if (!did_syntax_onoff) { exarg_T ea; ea.arg = (char_u *)""; ea.skip = false; - syn_cmd_onoff(&ea, "syntax"); + syn_cmd_enable(&ea, false); } } @@ -6438,6 +6438,10 @@ int load_colors(char_u *name) apply_autocmds(EVENT_COLORSCHEMEPRE, name, curbuf->b_fname, false, curbuf); snprintf((char *)buf, buflen, "colors/%s.vim", name); retval = source_runtime(buf, DIP_START + DIP_OPT); + if (retval == FAIL) { + snprintf((char *)buf, buflen, "colors/%s.lua", name); + retval = source_runtime(buf, DIP_START + DIP_OPT); + } xfree(buf); apply_autocmds(EVENT_COLORSCHEME, name, curbuf->b_fname, FALSE, curbuf); diff --git a/src/nvim/tag.c b/src/nvim/tag.c index a6310344e9..ab35c936ca 100644 --- a/src/nvim/tag.c +++ b/src/nvim/tag.c @@ -1143,7 +1143,6 @@ static int find_tagfunc_tags( typval_T args[4]; typval_T rettv; char_u flagString[4]; - dict_T *d; taggy_T *tag = &curwin->w_tagstack[curwin->w_tagstackidx]; if (*curbuf->b_p_tfu == NUL) { @@ -1156,7 +1155,7 @@ static int find_tagfunc_tags( args[1].vval.v_string = flagString; // create 'info' dict argument - d = tv_dict_alloc(); + dict_T *const d = tv_dict_alloc_lock(VAR_FIXED); if (tag->user_data != NULL) { tv_dict_add_str(d, S_LEN("user_data"), (const char *)tag->user_data); } @@ -3011,7 +3010,7 @@ static int find_extra(char_u **pp) // Repeat for addresses separated with ';' for (;; ) { if (ascii_isdigit(*str)) { - str = skipdigits(str); + str = skipdigits(str + 1); } else if (*str == '/' || *str == '?') { str = skip_regexp(str + 1, *str, false, NULL); if (*str != first_char) { diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index afad20f557..c07a956dde 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -450,6 +450,7 @@ static int terminal_execute(VimState *state, int key) case K_LEFTMOUSE: case K_LEFTDRAG: case K_LEFTRELEASE: + case K_MOUSEMOVE: case K_MIDDLEMOUSE: case K_MIDDLEDRAG: case K_MIDDLERELEASE: @@ -1098,6 +1099,7 @@ static bool send_mouse_event(Terminal *term, int c) switch (c) { case K_LEFTDRAG: drag = true; FALLTHROUGH; case K_LEFTMOUSE: button = 1; break; + case K_MOUSEMOVE: drag = true; button = 0; break; case K_MIDDLEDRAG: drag = true; FALLTHROUGH; case K_MIDDLEMOUSE: button = 2; break; case K_RIGHTDRAG: drag = true; FALLTHROUGH; diff --git a/src/nvim/testdir/shared.vim b/src/nvim/testdir/shared.vim index 0e20ac1593..f456ff4250 100644 --- a/src/nvim/testdir/shared.vim +++ b/src/nvim/testdir/shared.vim @@ -179,7 +179,7 @@ endfunc func s:WaitForCommon(expr, assert, timeout) " using reltime() is more accurate, but not always available let slept = 0 - if has('reltime') + if exists('*reltimefloat') let start = reltime() endif @@ -204,7 +204,7 @@ func s:WaitForCommon(expr, assert, timeout) endif sleep 10m - if has('reltime') + if exists('*reltimefloat') let slept = float2nr(reltimefloat(reltime(start)) * 1000) else let slept += 10 @@ -220,7 +220,7 @@ endfunc " feeds key-input and resumes process. Return time waited in milliseconds. " Without +timers it uses simply :sleep. func Standby(msec) - if has('timers') + if has('timers') && exists('*reltimefloat') let start = reltime() let g:_standby_timer = timer_start(a:msec, function('s:feedkeys')) call getchar() diff --git a/src/nvim/testdir/test_alot.vim b/src/nvim/testdir/test_alot.vim index e50602ccad..b5c50b5894 100644 --- a/src/nvim/testdir/test_alot.vim +++ b/src/nvim/testdir/test_alot.vim @@ -10,6 +10,7 @@ source test_cursor_func.vim source test_ex_equal.vim source test_ex_undo.vim source test_ex_z.vim +source test_ex_mode.vim source test_execute_func.vim source test_expand_func.vim source test_feedkeys.vim diff --git a/src/nvim/testdir/test_autocmd.vim b/src/nvim/testdir/test_autocmd.vim index 5611560b1b..bb84fa498e 100644 --- a/src/nvim/testdir/test_autocmd.vim +++ b/src/nvim/testdir/test_autocmd.vim @@ -190,7 +190,6 @@ func Test_autocmd_bufunload_avoiding_SEGV_02() normal! i1 call assert_fails('edit a.txt', 'E517:') - call feedkeys("\<CR>") autocmd! test_autocmd_bufunload augroup! test_autocmd_bufunload @@ -452,6 +451,27 @@ func Test_autocmd_bufwipe_in_SessLoadPost() endfor endfunc +" Using :blast and :ball for many events caused a crash, because b_nwindows was +" not incremented correctly. +func Test_autocmd_blast_badd() + let content =<< trim [CODE] + au BufNew,BufAdd,BufWinEnter,BufEnter,BufLeave,BufWinLeave,BufUnload,VimEnter foo* blast + edit foo1 + au BufNew,BufAdd,BufWinEnter,BufEnter,BufLeave,BufWinLeave,BufUnload,VimEnter foo* ball + edit foo2 + call writefile(['OK'], 'Xerrors') + qall + [CODE] + + call writefile(content, 'XblastBall') + call system(GetVimCommand() .. ' --clean -S XblastBall') + " call assert_match('OK', readfile('Xerrors')->join()) + call assert_match('OK', join(readfile('Xerrors'))) + + call delete('XblastBall') + call delete('Xerrors') +endfunc + " SEGV occurs in older versions. func Test_autocmd_bufwipe_in_SessLoadPost2() tabnew @@ -1949,6 +1969,26 @@ func Test_autocmd_window() %bw! endfunc +" Test for trying to close the tab that has the temporary window for exeucing +" an autocmd. +func Test_close_autocmd_tab() + edit one.txt + tabnew two.txt + augroup aucmd_win_test + au! + au BufEnter * if expand('<afile>') == 'one.txt' | tabfirst | tabonly | endif + augroup END + + call assert_fails('doautoall BufEnter', 'E813:') + + tabonly + augroup aucmd_win_test + au! + augroup END + augroup! aucmd_win_test + %bwipe! +endfunc + func Test_autocmd_closes_window() au BufNew,BufWinLeave * e %e file yyy @@ -1960,4 +2000,13 @@ func Test_autocmd_closes_window() au! BufWinLeave endfunc +func Test_autocmd_closing_cmdwin() + au BufWinLeave * nested q + call assert_fails("norm 7q?\n", 'E855:') + + au! BufWinLeave + new + only +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_blockedit.vim b/src/nvim/testdir/test_blockedit.vim index 527224ccd2..180524cd73 100644 --- a/src/nvim/testdir/test_blockedit.vim +++ b/src/nvim/testdir/test_blockedit.vim @@ -1,6 +1,5 @@ " Test for block inserting " -" TODO: rewrite test39.in into this new style test func Test_blockinsert_indent() new diff --git a/src/nvim/testdir/test_cmdline.vim b/src/nvim/testdir/test_cmdline.vim index 489b2477e6..34126b49fa 100644 --- a/src/nvim/testdir/test_cmdline.vim +++ b/src/nvim/testdir/test_cmdline.vim @@ -477,7 +477,7 @@ func Test_expand_star_star() call delete('a', 'rf') endfunc -func Test_paste_in_cmdline() +func Test_cmdline_paste() let @a = "def" call feedkeys(":abc \<C-R>a ghi\<C-B>\"\<CR>", 'tx') call assert_equal('"abc def ghi', @:) @@ -517,18 +517,38 @@ func Test_paste_in_cmdline() bwipe! endfunc -func Test_remove_char_in_cmdline() - call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx') - call assert_equal('"abc ef', @:) +func Test_cmdline_remove_char() + let encoding_save = &encoding + + " for e in ['utf8', 'latin1'] + for e in ['utf8'] + exe 'set encoding=' . e + + call feedkeys(":abc def\<S-Left>\<Del>\<C-B>\"\<CR>", 'tx') + call assert_equal('"abc ef', @:, e) + + call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx') + call assert_equal('"abcdef', @:) + + call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx') + call assert_equal('"abc ghi', @:, e) + + call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx') + call assert_equal('"def', @:, e) + endfor - call feedkeys(":abc def\<S-Left>\<BS>\<C-B>\"\<CR>", 'tx') - call assert_equal('"abcdef', @:) + let &encoding = encoding_save +endfunc - call feedkeys(":abc def ghi\<S-Left>\<C-W>\<C-B>\"\<CR>", 'tx') - call assert_equal('"abc ghi', @:) +func Test_cmdline_keymap_ctrl_hat() + if !has('keymap') + return + endif - call feedkeys(":abc def\<S-Left>\<C-U>\<C-B>\"\<CR>", 'tx') - call assert_equal('"def', @:) + set keymap=esperanto + call feedkeys(":\"Jxauxdo \<C-^>Jxauxdo \<C-^>Jxauxdo\<CR>", 'tx') + call assert_equal('"Jxauxdo Ĵaŭdo Jxauxdo', @:) + set keymap= endfunc func Test_illegal_address1() @@ -615,10 +635,20 @@ func Test_cmdline_complete_bang() endfunc funct Test_cmdline_complete_languages() + let lang = substitute(execute('language time'), '.*"\(.*\)"$', '\1', '') + call assert_equal(lang, v:lc_time) + + let lang = substitute(execute('language ctype'), '.*"\(.*\)"$', '\1', '') + call assert_equal(lang, v:ctype) + + let lang = substitute(execute('language collate'), '.*"\(.*\)"$', '\1', '') + call assert_equal(lang, v:collate) + let lang = substitute(execute('language messages'), '.*"\(.*\)"$', '\1', '') + call assert_equal(lang, v:lang) call feedkeys(":language \<c-a>\<c-b>\"\<cr>", 'tx') - call assert_match('^"language .*\<ctype\>.*\<messages\>.*\<time\>', @:) + call assert_match('^"language .*\<collate\>.*\<ctype\>.*\<messages\>.*\<time\>', @:) if has('unix') " TODO: these tests don't work on Windows. lang appears to be 'C' @@ -633,6 +663,9 @@ funct Test_cmdline_complete_languages() call feedkeys(":language time \<c-a>\<c-b>\"\<cr>", 'tx') call assert_match('^"language .*\<' . lang . '\>', @:) + + call feedkeys(":language collate \<c-a>\<c-b>\"\<cr>", 'tx') + call assert_match('^"language .*\<' . lang . '\>', @:) endif endfunc @@ -850,20 +883,20 @@ func Test_cmdline_overstrike() " Test overstrike in the middle of the command line. call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt') - call assert_equal('"0ab1cd4', @:) + call assert_equal('"0ab1cd4', @:, e) " Test overstrike going beyond end of command line. call feedkeys(":\"01234\<home>\<right>\<right>ab\<right>\<insert>cdefgh\<enter>", 'xt') - call assert_equal('"0ab1cdefgh', @:) + call assert_equal('"0ab1cdefgh', @:, e) " Test toggling insert/overstrike a few times. call feedkeys(":\"01234\<home>\<right>ab\<right>\<insert>cd\<right>\<insert>ef\<enter>", 'xt') - call assert_equal('"ab0cd3ef4', @:) + call assert_equal('"ab0cd3ef4', @:, e) endfor " Test overstrike with multi-byte characters. call feedkeys(":\"テキストエディタ\<home>\<right>\<right>ab\<right>\<insert>cd\<enter>", 'xt') - call assert_equal('"テabキcdエディタ', @:) + call assert_equal('"テabキcdエディタ', @:, e) let &encoding = encoding_save endfunc @@ -972,6 +1005,25 @@ func Test_buffers_lastused() bwipeout bufc endfunc +" Test for CmdwinEnter autocmd +func Test_cmdwin_autocmd() + CheckFeature cmdwin + + augroup CmdWin + au! + autocmd BufLeave * if &buftype == '' | update | endif + autocmd CmdwinEnter * startinsert + augroup END + + call assert_fails('call feedkeys("q:xyz\<CR>", "xt")', 'E492:') + call assert_equal('xyz', @:) + + augroup CmdWin + au! + augroup END + augroup! CmdWin +endfunc + func Test_cmdlineclear_tabenter() " See test/functional/legacy/cmdline_spec.lua CheckScreendump @@ -1020,4 +1072,52 @@ func Test_read_shellcmd() endif endfunc +" Test for recalling newer or older cmdline from history with <Up>, <Down>, +" <S-Up>, <S-Down>, <PageUp>, <PageDown>, <C-p>, or <C-n>. +func Test_recalling_cmdline() + CheckFeature cmdline_hist + + let g:cmdlines = [] + cnoremap <Plug>(save-cmdline) <Cmd>let g:cmdlines += [getcmdline()]<CR> + + let histories = [ + \ {'name': 'cmd', 'enter': ':', 'exit': "\<Esc>"}, + \ {'name': 'search', 'enter': '/', 'exit': "\<Esc>"}, + \ {'name': 'expr', 'enter': ":\<C-r>=", 'exit': "\<Esc>\<Esc>"}, + \ {'name': 'input', 'enter': ":call input('')\<CR>", 'exit': "\<CR>"}, + "\ TODO: {'name': 'debug', ...} + \] + let keypairs = [ + \ {'older': "\<Up>", 'newer': "\<Down>", 'prefixmatch': v:true}, + \ {'older': "\<S-Up>", 'newer': "\<S-Down>", 'prefixmatch': v:false}, + \ {'older': "\<PageUp>", 'newer': "\<PageDown>", 'prefixmatch': v:false}, + \ {'older': "\<C-p>", 'newer': "\<C-n>", 'prefixmatch': v:false}, + \] + let prefix = 'vi' + for h in histories + call histadd(h.name, 'vim') + call histadd(h.name, 'virtue') + call histadd(h.name, 'Virgo') + call histadd(h.name, 'vogue') + call histadd(h.name, 'emacs') + for k in keypairs + let g:cmdlines = [] + let keyseqs = h.enter + \ .. prefix + \ .. repeat(k.older .. "\<Plug>(save-cmdline)", 2) + \ .. repeat(k.newer .. "\<Plug>(save-cmdline)", 2) + \ .. h.exit + call feedkeys(keyseqs, 'xt') + call histdel(h.name, -1) " delete the history added by feedkeys above + let expect = k.prefixmatch + \ ? ['virtue', 'vim', 'virtue', prefix] + \ : ['emacs', 'vogue', 'emacs', prefix] + call assert_equal(expect, g:cmdlines) + endfor + endfor + + unlet g:cmdlines + cunmap <Plug>(save-cmdline) +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_cscope.vim b/src/nvim/testdir/test_cscope.vim index e5dab05511..cc6154af69 100644 --- a/src/nvim/testdir/test_cscope.vim +++ b/src/nvim/testdir/test_cscope.vim @@ -22,7 +22,7 @@ endfunc func Test_cscopeWithCscopeConnections() call CscopeSetupOrClean(1) - " Test 0: E568: duplicate cscope database not added + " Test: E568: duplicate cscope database not added try set nocscopeverbose cscope add Xcscope.out @@ -33,44 +33,49 @@ func Test_cscopeWithCscopeConnections() call assert_fails('cscope add', 'E560') call assert_fails('cscope add Xcscope.out', 'E568') call assert_fails('cscope add doesnotexist.out', 'E563') + if has('unix') + call assert_fails('cscope add /dev/null', 'E564:') + endif - " Test 1: Find this C-Symbol + " Test: Find this C-Symbol for cmd in ['cs find s main', 'cs find 0 main'] let a = execute(cmd) - " Test 1.1 test where it moves the cursor + " Test where it moves the cursor call assert_equal('main(void)', getline('.')) - " Test 1.2 test the output of the :cs command + " Test the output of the :cs command call assert_match('\n(1 of 1): <<main>> main(void )', a) endfor - " Test 2: Find this definition - for cmd in ['cs find g test_mf_hash', 'cs find 1 test_mf_hash'] + " Test: Find this definition + for cmd in ['cs find g test_mf_hash', + \ 'cs find 1 test_mf_hash', + \ 'cs find 1 test_mf_hash'] " leading space ignored. exe cmd call assert_equal(['', '/*', ' * Test mf_hash_*() functions.', ' */', ' static void', 'test_mf_hash(void)', '{'], getline(line('.')-5, line('.')+1)) endfor - " Test 3: Find functions called by this function + " Test: Find functions called by this function for cmd in ['cs find d test_mf_hash', 'cs find 2 test_mf_hash'] let a = execute(cmd) call assert_match('\n(1 of 42): <<mf_hash_init>> mf_hash_init(&ht);', a) call assert_equal(' mf_hash_init(&ht);', getline('.')) endfor - " Test 4: Find functions calling this function + " Test: Find functions calling this function for cmd in ['cs find c test_mf_hash', 'cs find 3 test_mf_hash'] let a = execute(cmd) call assert_match('\n(1 of 1): <<main>> test_mf_hash();', a) call assert_equal(' test_mf_hash();', getline('.')) endfor - " Test 5: Find this text string + " Test: Find this text string for cmd in ['cs find t Bram', 'cs find 4 Bram'] let a = execute(cmd) call assert_match('(1 of 1): <<<unknown>>> \* VIM - Vi IMproved^Iby Bram Moolenaar', a) call assert_equal(' * VIM - Vi IMproved by Bram Moolenaar', getline('.')) endfor - " Test 6: Find this egrep pattern + " Test: Find this egrep pattern " test all matches returned by cscope for cmd in ['cs find e ^\#includ.', 'cs find 6 ^\#includ.'] let a = execute(cmd) @@ -83,7 +88,7 @@ func Test_cscopeWithCscopeConnections() call assert_fails('cnext', 'E553:') endfor - " Test 7: Find the same egrep pattern using lcscope this time. + " Test: Find the same egrep pattern using lcscope this time. let a = execute('lcs find e ^\#includ.') call assert_match('\n(1 of 3): <<<unknown>>> #include <assert.h>', a) call assert_equal('#include <assert.h>', getline('.')) @@ -93,7 +98,7 @@ func Test_cscopeWithCscopeConnections() call assert_equal('#include "memfile.c"', getline('.')) call assert_fails('lnext', 'E553:') - " Test 8: Find this file + " Test: Find this file for cmd in ['cs find f Xmemfile_test.c', 'cs find 7 Xmemfile_test.c'] enew let a = execute(cmd) @@ -101,7 +106,7 @@ func Test_cscopeWithCscopeConnections() call assert_equal('Xmemfile_test.c', @%) endfor - " Test 9: Find files #including this file + " Test: Find files #including this file for cmd in ['cs find i assert.h', 'cs find 8 assert.h'] enew let a = execute(cmd) @@ -112,39 +117,42 @@ func Test_cscopeWithCscopeConnections() call assert_equal('#include <assert.h>', getline('.')) endfor - " Test 10: Invalid find command + " Test: Invalid find command + call assert_fails('cs find', 'E560:') call assert_fails('cs find x', 'E560:') - " Test 11: Find places where this symbol is assigned a value - " this needs a cscope >= 15.8 - " unfortunately, Travis has cscope version 15.7 - let cscope_version = systemlist('cscope --version')[0] - let cs_version = str2float(matchstr(cscope_version, '\d\+\(\.\d\+\)\?')) - if cs_version >= 15.8 - for cmd in ['cs find a item', 'cs find 9 item'] - let a = execute(cmd) - call assert_equal(['', '(1 of 4): <<test_mf_hash>> item = (mf_hashitem_T *)lalloc_clear(sizeof(*item), FALSE);'], split(a, '\n', 1)) - call assert_equal(' item = (mf_hashitem_T *)lalloc_clear(sizeof(*item), FALSE);', getline('.')) - cnext - call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) - cnext - call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) - cnext - call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) - endfor + if has('float') + " Test: Find places where this symbol is assigned a value + " this needs a cscope >= 15.8 + " unfortunately, Travis has cscope version 15.7 + let cscope_version = systemlist('cscope --version')[0] + let cs_version = str2float(matchstr(cscope_version, '\d\+\(\.\d\+\)\?')) + if cs_version >= 15.8 + for cmd in ['cs find a item', 'cs find 9 item'] + let a = execute(cmd) + call assert_equal(['', '(1 of 4): <<test_mf_hash>> item = (mf_hashitem_T *)lalloc_clear(sizeof(*item), FALSE);'], split(a, '\n', 1)) + call assert_equal(' item = (mf_hashitem_T *)lalloc_clear(sizeof(*item), FALSE);', getline('.')) + cnext + call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) + cnext + call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) + cnext + call assert_equal(' item = mf_hash_find(&ht, key);', getline('.')) + endfor + endif endif - " Test 12: leading whitespace is not removed for cscope find text + " Test: leading whitespace is not removed for cscope find text let a = execute('cscope find t test_mf_hash') call assert_equal(['', '(1 of 1): <<<unknown>>> test_mf_hash();'], split(a, '\n', 1)) call assert_equal(' test_mf_hash();', getline('.')) - " Test 13: test with scscope + " Test: test with scscope let a = execute('scs find t Bram') call assert_match('(1 of 1): <<<unknown>>> \* VIM - Vi IMproved^Iby Bram Moolenaar', a) call assert_equal(' * VIM - Vi IMproved by Bram Moolenaar', getline('.')) - " Test 14: cscope help + " Test: cscope help for cmd in ['cs', 'cs help', 'cs xxx'] let a = execute(cmd) call assert_match('^cscope commands:\n', a) @@ -158,28 +166,35 @@ func Test_cscopeWithCscopeConnections() let a = execute('scscope help') call assert_match('This cscope command does not support splitting the window\.', a) - " Test 15: reset connections + " Test: reset connections let a = execute('cscope reset') call assert_match('\nAdded cscope database.*Xcscope.out (#0)', a) call assert_match('\nAll cscope databases reset', a) - " Test 16: cscope show + " Test: cscope show let a = execute('cscope show') call assert_match('\n 0 \d\+.*Xcscope.out\s*<none>', a) - " Test 17: cstag and 'csto' option + " Test: cstag and 'csto' option set csto=0 let a = execute('cstag TEST_COUNT') call assert_match('(1 of 1): <<TEST_COUNT>> #define TEST_COUNT 50000', a) call assert_equal('#define TEST_COUNT 50000', getline('.')) + call assert_fails('cstag DOES_NOT_EXIST', 'E257:') set csto=1 let a = execute('cstag index_to_key') call assert_match('(1 of 1): <<index_to_key>> #define index_to_key(i) ((i) ^ 15167)', a) call assert_equal('#define index_to_key(i) ((i) ^ 15167)', getline('.')) - call assert_fails('cstag xxx', 'E257:') + call assert_fails('cstag DOES_NOT_EXIST', 'E257:') call assert_fails('cstag', 'E562:') + let save_tags = &tags + set tags= + call assert_fails('cstag DOES_NOT_EXIST', 'E257:') + let a = execute('cstag index_to_key') + call assert_match('(1 of 1): <<index_to_key>> #define index_to_key(i) ((i) ^ 15167)', a) + let &tags = save_tags - " Test 18: 'cst' option + " Test: 'cst' option set nocst call assert_fails('tag TEST_COUNT', 'E426:') set cst @@ -189,12 +204,28 @@ func Test_cscopeWithCscopeConnections() let a = execute('tags') call assert_match('1 1 TEST_COUNT\s\+\d\+\s\+#define index_to_key', a) - " Test 19: this should trigger call to cs_print_tags() + " Test: 'cscoperelative' + call mkdir('Xcscoperelative') + cd Xcscoperelative + let a = execute('cs find g test_mf_hash') + call assert_notequal('test_mf_hash(void)', getline('.')) + set cscoperelative + let a = execute('cs find g test_mf_hash') + call assert_equal('test_mf_hash(void)', getline('.')) + set nocscoperelative + cd .. + call delete('Xcscoperelative', 'd') + + " Test: E259: no match found + call assert_fails('cscope find g DOES_NOT_EXIST', 'E259:') + + " Test: this should trigger call to cs_print_tags() " Unclear how to check result though, we just exercise the code. set cst cscopequickfix=s0 call feedkeys(":cs find s main\<CR>", 't') - " Test 20: cscope kill + " Test: cscope kill + call assert_fails('cscope kill', 'E560:') call assert_fails('cscope kill 2', 'E261:') call assert_fails('cscope kill xxx', 'E261:') @@ -211,20 +242,20 @@ func Test_cscopeWithCscopeConnections() let a = execute('cscope kill -1') call assert_equal('', a) - " Test 21: 'csprg' option + " Test: 'csprg' option call assert_equal('cscope', &csprg) set csprg=doesnotexist call assert_fails('cscope add Xcscope2.out', 'E609:') set csprg=cscope - " Test 22: multiple cscope connections + " Test: multiple cscope connections cscope add Xcscope.out cscope add Xcscope2.out . -C let a = execute('cscope show') call assert_match('\n 0 \d\+.*Xcscope.out\s*<none>', a) call assert_match('\n 1 \d\+.*Xcscope2.out\s*\.', a) - " Test 23: test Ex command line completion + " Test: test Ex command line completion call feedkeys(":cs \<C-A>\<C-B>\"\<CR>", 'tx') call assert_equal('"cs add find help kill reset show', @:) @@ -240,19 +271,26 @@ func Test_cscopeWithCscopeConnections() call feedkeys(":cs add Xcscope\<C-A>\<C-B>\"\<CR>", 'tx') call assert_equal('"cs add Xcscope.out Xcscope2.out', @:) - " Test 24: cscope_connection() + " Test: cscope_connection() call assert_equal(cscope_connection(), 1) call assert_equal(cscope_connection(0, 'out'), 1) call assert_equal(cscope_connection(0, 'xxx'), 1) + call assert_equal(cscope_connection(1, 'out'), 1) call assert_equal(cscope_connection(1, 'xxx'), 0) + call assert_equal(cscope_connection(2, 'out'), 0) + call assert_equal(cscope_connection(2, getcwd() .. '/Xcscope.out', 1), 1) + call assert_equal(cscope_connection(3, 'xxx', '..'), 0) call assert_equal(cscope_connection(3, 'out', 'xxx'), 0) call assert_equal(cscope_connection(3, 'out', '.'), 1) + call assert_equal(cscope_connection(4, 'out', '.'), 0) - " CleanUp + call assert_equal(cscope_connection(5, 'out'), 0) + call assert_equal(cscope_connection(-1, 'out'), 0) + call CscopeSetupOrClean(0) endfunc diff --git a/src/nvim/testdir/test_diffmode.vim b/src/nvim/testdir/test_diffmode.vim index 21c1f98283..8592f48af7 100644 --- a/src/nvim/testdir/test_diffmode.vim +++ b/src/nvim/testdir/test_diffmode.vim @@ -781,17 +781,68 @@ func Test_diff_lastline() bwipe! endfunc +func WriteDiffFiles(buf, list1, list2) + call writefile(a:list1, 'Xfile1') + call writefile(a:list2, 'Xfile2') + if a:buf + call term_sendkeys(a:buf, ":checktime\<CR>") + endif +endfunc +" Verify a screendump with both the internal and external diff. +func VerifyBoth(buf, dumpfile, extra) + " trailing : for leaving the cursor on the command line + for cmd in [":set diffopt=filler" . a:extra . "\<CR>:", ":set diffopt+=internal\<CR>:"] + call term_sendkeys(a:buf, cmd) + if VerifyScreenDump(a:buf, a:dumpfile, {}, cmd =~ 'internal' ? 'internal' : 'external') + break " don't let the next iteration overwrite the "failed" file. + " don't let the next iteration overwrite the "failed" file. + return + endif + endfor + + " also test unified diff + call term_sendkeys(a:buf, ":call SetupUnified()\<CR>:") + call term_sendkeys(a:buf, ":redraw!\<CR>:") + call VerifyScreenDump(a:buf, a:dumpfile, {}, 'unified') + call term_sendkeys(a:buf, ":call StopUnified()\<CR>:") +endfunc + +" Verify a screendump with the internal diff only. +func VerifyInternal(buf, dumpfile, extra) + call term_sendkeys(a:buf, ":diffupdate!\<CR>") + " trailing : for leaving the cursor on the command line + call term_sendkeys(a:buf, ":set diffopt=internal,filler" . a:extra . "\<CR>:") + call TermWait(a:buf) + call VerifyScreenDump(a:buf, a:dumpfile, {}) +endfunc + func Test_diff_screen() CheckScreendump CheckFeature menu + let lines =<< trim END + func UnifiedDiffExpr() + " Prepend some text to check diff type detection + call writefile(['warning', ' message'], v:fname_out) + silent exe '!diff -U0 ' .. v:fname_in .. ' ' .. v:fname_new .. '>>' .. v:fname_out + endfunc + func SetupUnified() + set diffexpr=UnifiedDiffExpr() + diffupdate + endfunc + func StopUnified() + set diffexpr= + endfunc + END + call writefile(lines, 'XdiffSetup') + " clean up already existing swap files, just in case call delete('.Xfile1.swp') call delete('.Xfile2.swp') " Test 1: Add a line in beginning of file 2 call WriteDiffFiles(0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) - let buf = RunVimInTerminal('-d Xfile1 Xfile2', {}) + let buf = RunVimInTerminal('-d -S XdiffSetup Xfile1 Xfile2', {}) " Set autoread mode, so that Vim won't complain once we re-write the test " files call term_sendkeys(buf, ":set autoread\<CR>\<c-w>w:set autoread\<CR>\<c-w>w") @@ -911,6 +962,7 @@ func Test_diff_screen() call StopVimInTerminal(buf) call delete('Xfile1') call delete('Xfile2') + call delete('XdiffSetup') endfunc func Test_diff_with_cursorline() @@ -1096,4 +1148,38 @@ func Test_diff_and_scroll() set ls& endfunc +func Test_diff_filler_cursorcolumn() + CheckScreendump + + let content =<< trim END + call setline(1, ['aa', 'bb', 'cc']) + vnew + call setline(1, ['aa', 'cc']) + windo diffthis + wincmd p + setlocal cursorcolumn foldcolumn=0 + norm! gg0 + redraw! + END + call writefile(content, 'Xtest_diff_cuc') + let buf = RunVimInTerminal('-S Xtest_diff_cuc', {}) + + call VerifyScreenDump(buf, 'Test_diff_cuc_01', {}) + + call term_sendkeys(buf, "l") + call term_sendkeys(buf, "\<C-l>") + call VerifyScreenDump(buf, 'Test_diff_cuc_02', {}) + call term_sendkeys(buf, "0j") + call term_sendkeys(buf, "\<C-l>") + call VerifyScreenDump(buf, 'Test_diff_cuc_03', {}) + call term_sendkeys(buf, "l") + call term_sendkeys(buf, "\<C-l>") + call VerifyScreenDump(buf, 'Test_diff_cuc_04', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_diff_cuc') +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_eval_stuff.vim b/src/nvim/testdir/test_eval_stuff.vim index 73b57f302e..4870b9a60a 100644 --- a/src/nvim/testdir/test_eval_stuff.vim +++ b/src/nvim/testdir/test_eval_stuff.vim @@ -120,6 +120,15 @@ func Test_skip_after_throw() endtry endfunc +func Test_number_max_min_size() + " This will fail on systems without 64 bit number support or when not + " configured correctly. + call assert_equal(64, v:numbersize) + + call assert_true(v:numbermin < -9999999) + call assert_true(v:numbermax > 9999999) +endfunc + func Test_curly_assignment() let s:svar = 'svar' let g:gvar = 'gvar' diff --git a/src/nvim/testdir/test_ex_mode.vim b/src/nvim/testdir/test_ex_mode.vim new file mode 100644 index 0000000000..1c645ad0f8 --- /dev/null +++ b/src/nvim/testdir/test_ex_mode.vim @@ -0,0 +1,101 @@ +" Test editing line in Ex mode (see :help Q and :help gQ). + +source check.vim +source shared.vim + +" Helper function to test editing line in Q Ex mode +func Ex_Q(cmd) + " Is there a simpler way to test editing Ex line? + call feedkeys("Q" + \ .. "let s:test_ex =<< END\<CR>" + \ .. a:cmd .. "\<CR>" + \ .. "END\<CR>" + \ .. "visual\<CR>", 'tx') + return s:test_ex[0] +endfunc + +" Helper function to test editing line in gQ Ex mode +func Ex_gQ(cmd) + call feedkeys("gQ" .. a:cmd .. "\<C-b>\"\<CR>", 'tx') + let ret = @:[1:] " Remove leading quote. + call feedkeys("visual\<CR>", 'tx') + return ret +endfunc + +" Helper function to test editing line with both Q and gQ Ex mode. +func Ex(cmd) + return [Ex_Q(a:cmd), Ex_gQ(a:cmd)] +endfunc + +" Test editing line in Ex mode (both Q and gQ) +func Test_ex_mode() + throw 'skipped: TODO: ' + let encoding_save = &encoding + set sw=2 + + " for e in ['utf8', 'latin1'] + for e in ['utf8'] + exe 'set encoding=' . e + + call assert_equal(['bar', 'bar'], Ex("foo bar\<C-u>bar"), e) + call assert_equal(["1\<C-u>2", "1\<C-u>2"], Ex("1\<C-v>\<C-u>2"), e) + call assert_equal(["1\<C-b>2\<C-e>3", '213'], Ex("1\<C-b>2\<C-e>3"), e) + call assert_equal(['0123', '2013'], Ex("01\<Home>2\<End>3"), e) + call assert_equal(['0123', '0213'], Ex("01\<Left>2\<Right>3"), e) + call assert_equal(['01234', '0342'], Ex("012\<Left>\<Left>\<Insert>3\<Insert>4"), e) + call assert_equal(["foo bar\<C-w>", 'foo '], Ex("foo bar\<C-w>"), e) + call assert_equal(['foo', 'foo'], Ex("fooba\<Del>\<Del>"), e) + call assert_equal(["foo\tbar", 'foobar'], Ex("foo\<Tab>bar"), e) + call assert_equal(["abbrev\t", 'abbreviate'], Ex("abbrev\<Tab>"), e) + call assert_equal([' 1', "1\<C-t>\<C-t>"], Ex("1\<C-t>\<C-t>"), e) + call assert_equal([' 1', "1\<C-t>\<C-t>"], Ex("1\<C-t>\<C-t>\<C-d>"), e) + call assert_equal([' foo', ' foo'], Ex(" foo\<C-d>"), e) + call assert_equal(['foo', ' foo0'], Ex(" foo0\<C-d>"), e) + call assert_equal(['foo', ' foo^'], Ex(" foo^\<C-d>"), e) + endfor + + set sw& + let &encoding = encoding_save +endfunc + +func Test_ex_mode_errors() + " Not allowed to enter ex mode when text is locked + au InsertCharPre <buffer> normal! gQ<CR> + let caught_e523 = 0 + try + call feedkeys("ix\<esc>", 'xt') + catch /^Vim\%((\a\+)\)\=:E523/ " catch E523 + let caught_e523 = 1 + endtry + call assert_equal(1, caught_e523) + au! InsertCharPre + + new + au CmdLineEnter * call ExEnterFunc() + func ExEnterFunc() + + endfunc + call feedkeys("gQvi\r", 'xt') + + au! CmdLineEnter + delfunc ExEnterFunc + quit +endfunc + +func Test_ex_mode_count_overflow() + " this used to cause a crash + let lines =<< trim END + call feedkeys("\<Esc>Q\<CR>") + v9|9silent! vi|333333233333y32333333%O + call writefile(['done'], 'Xdidexmode') + qall! + END + call writefile(lines, 'Xexmodescript') + call assert_equal(1, RunVim([], [], '-e -s -S Xexmodescript -c qa')) + call assert_equal(['done'], readfile('Xdidexmode')) + + call delete('Xdidexmode') + call delete('Xexmodescript') +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_excmd.vim b/src/nvim/testdir/test_excmd.vim index 15557056ee..ed2bb2c06b 100644 --- a/src/nvim/testdir/test_excmd.vim +++ b/src/nvim/testdir/test_excmd.vim @@ -54,6 +54,132 @@ func Test_buffers_lastused() bwipeout bufc endfunc +" Test for the :copy command +func Test_copy() + new + + call setline(1, ['L1', 'L2', 'L3', 'L4']) + " copy lines in a range to inside the range + 1,3copy 2 + call assert_equal(['L1', 'L2', 'L1', 'L2', 'L3', 'L3', 'L4'], getline(1, 7)) + + close! +endfunc + +" Test for the :file command +func Test_file_cmd() + call assert_fails('3file', 'E474:') + call assert_fails('0,0file', 'E474:') + call assert_fails('0file abc', 'E474:') +endfunc + +" Test for the :drop command +func Test_drop_cmd() + call writefile(['L1', 'L2'], 'Xfile') + enew | only + drop Xfile + call assert_equal('L2', getline(2)) + " Test for switching to an existing window + below new + drop Xfile + call assert_equal(1, winnr()) + " Test for splitting the current window + enew | only + set modified + drop Xfile + call assert_equal(2, winnr('$')) + " Check for setting the argument list + call assert_equal(['Xfile'], argv()) + enew | only! + call delete('Xfile') +endfunc + +" Test for the :append command +func Test_append_cmd() + new + call setline(1, [' L1']) + call feedkeys(":append\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L2', ' L3'], getline(1, '$')) + %delete _ + " append after a specific line + call setline(1, [' L1', ' L2', ' L3']) + call feedkeys(":2append\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L2', ' L4', ' L5', ' L3'], getline(1, '$')) + %delete _ + " append with toggling 'autoindent' + call setline(1, [' L1']) + call feedkeys(":append!\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L2', ' L3'], getline(1, '$')) + call assert_false(&autoindent) + %delete _ + " append with 'autoindent' set and toggling 'autoindent' + set autoindent + call setline(1, [' L1']) + call feedkeys(":append!\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L2', ' L3'], getline(1, '$')) + call assert_true(&autoindent) + set autoindent& + close! +endfunc + +" Test for the :insert command +func Test_insert_cmd() + set noautoindent " test assumes noautoindent, but it's on by default in Nvim + new + call setline(1, [' L1']) + call feedkeys(":insert\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L2', ' L3', ' L1'], getline(1, '$')) + %delete _ + " insert before a specific line + call setline(1, [' L1', ' L2', ' L3']) + call feedkeys(":2insert\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L4', ' L5', ' L2', ' L3'], getline(1, '$')) + %delete _ + " insert with toggling 'autoindent' + call setline(1, [' L1']) + call feedkeys(":insert!\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L2', ' L3', ' L1'], getline(1, '$')) + call assert_false(&autoindent) + %delete _ + " insert with 'autoindent' set and toggling 'autoindent' + set autoindent + call setline(1, [' L1']) + call feedkeys(":insert!\<CR> L2\<CR> L3\<CR>.\<CR>", 'xt') + call assert_equal([' L2', ' L3', ' L1'], getline(1, '$')) + call assert_true(&autoindent) + set autoindent& + close! +endfunc + +" Test for the :change command +func Test_change_cmd() + set noautoindent " test assumes noautoindent, but it's on by default in Nvim + new + call setline(1, [' L1', 'L2', 'L3']) + call feedkeys(":change\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L4', ' L5', 'L2', 'L3'], getline(1, '$')) + %delete _ + " change a specific line + call setline(1, [' L1', ' L2', ' L3']) + call feedkeys(":2change\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L1', ' L4', ' L5', ' L3'], getline(1, '$')) + %delete _ + " change with toggling 'autoindent' + call setline(1, [' L1', 'L2', 'L3']) + call feedkeys(":change!\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L4', ' L5', 'L2', 'L3'], getline(1, '$')) + call assert_false(&autoindent) + %delete _ + " change with 'autoindent' set and toggling 'autoindent' + set autoindent + call setline(1, [' L1', 'L2', 'L3']) + call feedkeys(":change!\<CR> L4\<CR> L5\<CR>.\<CR>", 'xt') + call assert_equal([' L4', ' L5', 'L2', 'L3'], getline(1, '$')) + call assert_true(&autoindent) + set autoindent& + close! +endfunc + " Test for the :confirm command dialog func Test_confirm_cmd() CheckNotGui @@ -132,6 +258,61 @@ func Test_confirm_cmd_cancel() call StopVimInTerminal(buf) endfunc +func Test_confirm_write_ro() + CheckNotGui + CheckRunVimInTerminal + + call writefile(['foo'], 'Xconfirm_write_ro') + let lines =<< trim END + set nobackup ff=unix cmdheight=2 + edit Xconfirm_write_ro + norm Abar + END + call writefile(lines, 'Xscript') + let buf = RunVimInTerminal('-S Xscript', {'rows': 20}) + + " Try to write with 'ro' option. + call term_sendkeys(buf, ":set ro | confirm w\n") + call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$", + \ term_getline(buf, 18))}, 1000) + call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$', + \ term_getline(buf, 19))}, 1000) + call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000) + call term_sendkeys(buf, 'N') + call WaitForAssert({-> assert_match('^ *$', term_getline(buf, 19))}, 1000) + call WaitForAssert({-> assert_match('.* All$', term_getline(buf, 20))}, 1000) + call assert_equal(['foo'], readfile('Xconfirm_write_ro')) + + call term_sendkeys(buf, ":confirm w\n") + call WaitForAssert({-> assert_match("^'readonly' option is set for \"Xconfirm_write_ro\"\. *$", + \ term_getline(buf, 18))}, 1000) + call WaitForAssert({-> assert_match('^Do you wish to write anyway? *$', + \ term_getline(buf, 19))}, 1000) + call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000) + call term_sendkeys(buf, 'Y') + call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 7B written$', + \ term_getline(buf, 19))}, 1000) + call assert_equal(['foobar'], readfile('Xconfirm_write_ro')) + + " Try to write with read-only file permissions. + call setfperm('Xconfirm_write_ro', 'r--r--r--') + call term_sendkeys(buf, ":set noro | undo | confirm w\n") + call WaitForAssert({-> assert_match("^File permissions of \"Xconfirm_write_ro\" are read-only\. *$", + \ term_getline(buf, 17))}, 1000) + call WaitForAssert({-> assert_match('^It may still be possible to write it\. *$', + \ term_getline(buf, 18))}, 1000) + call WaitForAssert({-> assert_match('^Do you wish to try? *$', term_getline(buf, 19))}, 1000) + call WaitForAssert({-> assert_match('^(Y)es, \[N\]o: *$', term_getline(buf, 20))}, 1000) + call term_sendkeys(buf, 'Y') + call WaitForAssert({-> assert_match('^"Xconfirm_write_ro" 1L, 4B written$', + \ term_getline(buf, 19))}, 1000) + call assert_equal(['foo'], readfile('Xconfirm_write_ro')) + + call StopVimInTerminal(buf) + call delete('Xscript') + call delete('Xconfirm_write_ro') +endfunc + " Test for the :winsize command func Test_winsize_cmd() call assert_fails('winsize 1', 'E465:') diff --git a/src/nvim/testdir/test_exec_while_if.vim b/src/nvim/testdir/test_exec_while_if.vim index d6afabff45..3da2784d77 100644 --- a/src/nvim/testdir/test_exec_while_if.vim +++ b/src/nvim/testdir/test_exec_while_if.vim @@ -1,6 +1,6 @@ -" Test for :execute, :while and :if +" Test for :execute, :while, :for and :if -function Test_exec_while_if() +func Test_exec_while_if() new let i = 0 @@ -50,4 +50,6 @@ function Test_exec_while_if() \ "7x999999999888888887777777666666555554444333221", \ "8", \ "9x"], getline(1, 10)) -endfunction +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_execute_func.vim b/src/nvim/testdir/test_execute_func.vim index eb84a6739d..15ba894dbe 100644 --- a/src/nvim/testdir/test_execute_func.vim +++ b/src/nvim/testdir/test_execute_func.vim @@ -1,5 +1,7 @@ " test execute() +source view_util.vim + func NestedEval() let nested = execute('echo "nested\nlines"') echo 'got: "' . nested . '"' @@ -82,3 +84,54 @@ func Test_execute_not_silent() endfor call assert_equal('xyz ', text2) endfunc + +func Test_win_execute() + let thiswin = win_getid() + new + let otherwin = win_getid() + call setline(1, 'the new window') + call win_gotoid(thiswin) + let line = win_execute(otherwin, 'echo getline(1)') + call assert_match('the new window', line) + let line = win_execute(134343, 'echo getline(1)') + call assert_equal('', line) + + if has('textprop') + let popupwin = popup_create('the popup win', {'line': 2, 'col': 3}) + redraw + let line = win_execute(popupwin, 'echo getline(1)') + call assert_match('the popup win', line) + + call popup_close(popupwin) + endif + + call win_gotoid(otherwin) + bwipe! +endfunc + +func Test_win_execute_update_ruler() + enew + call setline(1, range(500)) + 20 + split + let winid = win_getid() + set ruler + wincmd w + let height = winheight(winid) + redraw + call assert_match('20,1', Screenline(height + 1)) + let line = win_execute(winid, 'call cursor(100, 1)') + redraw + call assert_match('100,1', Screenline(height + 1)) + + bwipe! +endfunc + +func Test_win_execute_other_tab() + let thiswin = win_getid() + tabnew + call win_execute(thiswin, 'let xyz = 1') + call assert_equal(1, xyz) + tabclose + unlet xyz +endfunc diff --git a/src/nvim/testdir/test_filetype.vim b/src/nvim/testdir/test_filetype.vim index 3cfc964f0a..71a7a2cce5 100644 --- a/src/nvim/testdir/test_filetype.vim +++ b/src/nvim/testdir/test_filetype.vim @@ -45,7 +45,7 @@ endfunc " Filetypes detected just from matching the file name. let s:filename_checks = { \ '8th': ['file.8th'], - \ 'a2ps': ['/etc/a2ps.cfg', '/etc/a2ps/file.cfg', 'a2psrc', '.a2psrc'], + \ 'a2ps': ['/etc/a2ps.cfg', '/etc/a2ps/file.cfg', 'a2psrc', '.a2psrc', 'any/etc/a2ps.cfg', 'any/etc/a2ps/file.cfg'], \ 'a65': ['file.a65'], \ 'aap': ['file.aap'], \ 'abap': ['file.abap'], @@ -55,23 +55,24 @@ let s:filename_checks = { \ 'ada': ['file.adb', 'file.ads', 'file.ada', 'file.gpr'], \ 'ahdl': ['file.tdf'], \ 'aidl': ['file.aidl'], - \ 'alsaconf': ['.asoundrc', '/usr/share/alsa/alsa.conf', '/etc/asound.conf'], + \ 'alsaconf': ['.asoundrc', '/usr/share/alsa/alsa.conf', '/etc/asound.conf', 'any/etc/asound.conf', 'any/usr/share/alsa/alsa.conf'], \ 'aml': ['file.aml'], \ 'ampl': ['file.run'], \ 'ant': ['build.xml'], - \ 'apache': ['.htaccess', '/etc/httpd/file.conf', '/etc/apache2/sites-2/file.com', '/etc/apache2/some.config', '/etc/apache2/conf.file/conf', '/etc/apache2/mods-some/file', '/etc/apache2/sites-some/file', '/etc/httpd/conf.d/file.config'], - \ 'apachestyle': ['/etc/proftpd/file.config,/etc/proftpd/conf.file/file'], + \ 'apache': ['.htaccess', '/etc/httpd/file.conf', '/etc/apache2/sites-2/file.com', '/etc/apache2/some.config', '/etc/apache2/conf.file/conf', '/etc/apache2/mods-some/file', '/etc/apache2/sites-some/file', '/etc/httpd/conf.d/file.config', '/etc/apache2/conf.file/file', '/etc/apache2/file.conf', '/etc/apache2/file.conf-file', '/etc/apache2/mods-file/file', '/etc/apache2/sites-file/file', '/etc/apache2/sites-file/file.com', '/etc/httpd/conf.d/file.conf', '/etc/httpd/conf.d/file.conf-file', 'access.conf', 'access.conf-file', 'any/etc/apache2/conf.file/file', 'any/etc/apache2/file.conf', 'any/etc/apache2/file.conf-file', 'any/etc/apache2/mods-file/file', 'any/etc/apache2/sites-file/file', 'any/etc/apache2/sites-file/file.com', 'any/etc/httpd/conf.d/file.conf', 'any/etc/httpd/conf.d/file.conf-file', 'any/etc/httpd/file.conf', 'apache.conf', 'apache.conf-file', 'apache2.conf', 'apache2.conf-file', 'httpd.conf', 'httpd.conf-file', 'srm.conf', 'srm.conf-file'], + \ 'apachestyle': ['/etc/proftpd/file.config,/etc/proftpd/conf.file/file', '/etc/proftpd/conf.file/file', '/etc/proftpd/file.conf', '/etc/proftpd/file.conf-file', 'any/etc/proftpd/conf.file/file', 'any/etc/proftpd/file.conf', 'any/etc/proftpd/file.conf-file', 'proftpd.conf', 'proftpd.conf-file'], \ 'applescript': ['file.scpt'], - \ 'aptconf': ['apt.conf', '/.aptitude/config'], - \ 'arch': ['.arch-inventory'], + \ 'aptconf': ['apt.conf', '/.aptitude/config', 'any/.aptitude/config'], + \ 'arch': ['.arch-inventory', '=tagging-method'], \ 'arduino': ['file.ino', 'file.pde'], \ 'art': ['file.art'], \ 'asciidoc': ['file.asciidoc', 'file.adoc'], \ 'asn': ['file.asn', 'file.asn1'], + \ 'asterisk': ['asterisk/file.conf', 'asterisk/file.conf-file', 'some-asterisk/file.conf', 'some-asterisk/file.conf-file'], \ 'atlas': ['file.atl', 'file.as'], \ 'autohotkey': ['file.ahk'], \ 'autoit': ['file.au3'], - \ 'automake': ['GNUmakefile.am'], + \ 'automake': ['GNUmakefile.am', 'makefile.am', 'Makefile.am'], \ 'ave': ['file.ave'], \ 'awk': ['file.awk', 'file.gawk'], \ 'b': ['file.mch', 'file.ref', 'file.imp'], @@ -80,23 +81,23 @@ let s:filename_checks = { \ 'bdf': ['file.bdf'], \ 'bib': ['file.bib'], \ 'beancount': ['file.beancount'], - \ 'bindzone': ['named.root'], + \ 'bindzone': ['named.root', '/bind/db.file', '/named/db.file', 'any/bind/db.file', 'any/named/db.file'], \ 'blank': ['file.bl'], - \ 'bsdl': ['file.bsd', 'file.bsdl'], + \ 'bsdl': ['file.bsd', 'file.bsdl', 'bsd', 'some-bsd'], \ 'bst': ['file.bst'], - \ 'bzr': ['bzr_log.any'], - \ 'c': ['enlightenment/file.cfg', 'file.qc', 'file.c'], + \ 'bzr': ['bzr_log.any', 'bzr_log.file'], + \ 'c': ['enlightenment/file.cfg', 'file.qc', 'file.c', 'some-enlightenment/file.cfg'], \ 'cabal': ['file.cabal'], \ 'cabalconfig': ['cabal.config'], \ 'cabalproject': ['cabal.project', 'cabal.project.local'], - \ 'calendar': ['calendar'], - \ 'catalog': ['catalog', 'sgml.catalogfile'], + \ 'calendar': ['calendar', '/.calendar/file', '/share/calendar/any/calendar.file', '/share/calendar/calendar.file', 'any/share/calendar/any/calendar.file', 'any/share/calendar/calendar.file'], + \ 'catalog': ['catalog', 'sgml.catalogfile', 'sgml.catalog', 'sgml.catalog-file'], \ 'cdl': ['file.cdl'], - \ 'cdrdaoconf': ['/etc/cdrdao.conf', '/etc/defaults/cdrdao', '/etc/default/cdrdao', '.cdrdao'], + \ 'cdrdaoconf': ['/etc/cdrdao.conf', '/etc/defaults/cdrdao', '/etc/default/cdrdao', '.cdrdao', 'any/etc/cdrdao.conf', 'any/etc/default/cdrdao', 'any/etc/defaults/cdrdao'], \ 'cdrtoc': ['file.toc'], \ 'cf': ['file.cfm', 'file.cfi', 'file.cfc'], \ 'cfengine': ['cfengine.conf'], - \ 'cfg': ['file.cfg', 'file.hgrc', 'filehgrc'], + \ 'cfg': ['file.cfg', 'file.hgrc', 'filehgrc', 'hgrc', 'some-hgrc'], \ 'ch': ['file.chf'], \ 'chaiscript': ['file.chai'], \ 'chaskell': ['file.chs'], @@ -106,15 +107,16 @@ let s:filename_checks = { \ 'clean': ['file.dcl', 'file.icl'], \ 'clojure': ['file.clj', 'file.cljs', 'file.cljx', 'file.cljc'], \ 'cmake': ['CMakeLists.txt', 'file.cmake', 'file.cmake.in'], - \ 'cmusrc': ['any/.cmus/autosave', 'any/.cmus/rc', 'any/.cmus/command-history', 'any/.cmus/file.theme', 'any/cmus/rc', 'any/cmus/file.theme'], + \ 'cmusrc': ['any/.cmus/autosave', 'any/.cmus/rc', 'any/.cmus/command-history', 'any/.cmus/file.theme', 'any/cmus/rc', 'any/cmus/file.theme', '/.cmus/autosave', '/.cmus/command-history', '/.cmus/file.theme', '/.cmus/rc', '/cmus/file.theme', '/cmus/rc'], \ 'cobol': ['file.cbl', 'file.cob', 'file.lib'], \ 'coco': ['file.atg'], \ 'conaryrecipe': ['file.recipe'], \ 'conf': ['auto.master'], - \ 'config': ['configure.in', 'configure.ac', 'Pipfile'], + \ 'config': ['configure.in', 'configure.ac', 'Pipfile', '/etc/hostname.file'], \ 'context': ['tex/context/any/file.tex', 'file.mkii', 'file.mkiv', 'file.mkvi', 'file.mkxl', 'file.mklx'], \ 'cpp': ['file.cxx', 'file.c++', 'file.hh', 'file.hxx', 'file.hpp', 'file.ipp', 'file.moc', 'file.tcc', 'file.inl', 'file.tlh'], \ 'crm': ['file.crm'], + \ 'crontab': ['crontab', 'crontab.file', '/etc/cron.d/file', 'any/etc/cron.d/file'], \ 'cs': ['file.cs'], \ 'csc': ['file.csc'], \ 'csdl': ['file.csdl'], @@ -122,7 +124,7 @@ let s:filename_checks = { \ 'css': ['file.css'], \ 'cterm': ['file.con'], \ 'cucumber': ['file.feature'], - \ 'cuda': ['file.cu'], + \ 'cuda': ['file.cu', 'file.cuh'], \ 'cupl': ['file.pld'], \ 'cuplsim': ['file.si'], \ 'cvs': ['cvs123'], @@ -132,8 +134,9 @@ let s:filename_checks = { \ 'datascript': ['file.ds'], \ 'dcd': ['file.dcd'], \ 'debchangelog': ['changelog.Debian', 'changelog.dch', 'NEWS.Debian', 'NEWS.dch', '/debian/changelog'], - \ 'debcontrol': ['/debian/control'], - \ 'debsources': ['/etc/apt/sources.list', '/etc/apt/sources.list.d/file.list'], + \ 'debcontrol': ['/debian/control', 'any/debian/control'], + \ 'debcopyright': ['/debian/copyright', 'any/debian/copyright'], + \ 'debsources': ['/etc/apt/sources.list', '/etc/apt/sources.list.d/file.list', 'any/etc/apt/sources.list', 'any/etc/apt/sources.list.d/file.list'], \ 'def': ['file.def'], \ 'denyhosts': ['denyhosts.conf'], \ 'desc': ['file.desc'], @@ -141,13 +144,13 @@ let s:filename_checks = { \ 'dictconf': ['dict.conf', '.dictrc'], \ 'dictdconf': ['dictd.conf'], \ 'diff': ['file.diff', 'file.rej'], - \ 'dircolors': ['.dir_colors', '.dircolors', '/etc/DIR_COLORS'], - \ 'dnsmasq': ['/etc/dnsmasq.conf'], - \ 'dockerfile': ['Dockerfile', 'file.Dockerfile'], + \ 'dircolors': ['.dir_colors', '.dircolors', '/etc/DIR_COLORS', 'any/etc/DIR_COLORS'], + \ 'dnsmasq': ['/etc/dnsmasq.conf', '/etc/dnsmasq.d/file', 'any/etc/dnsmasq.conf', 'any/etc/dnsmasq.d/file'], + \ 'dockerfile': ['Containerfile', 'Dockerfile', 'file.Dockerfile'], \ 'dosbatch': ['file.bat', 'file.sys'], - \ 'dosini': ['.editorconfig', '/etc/pacman.conf', '/etc/yum.conf', 'file.ini', 'npmrc', '.npmrc', 'php.ini', 'php.ini-5'], + \ 'dosini': ['.editorconfig', '/etc/pacman.conf', '/etc/yum.conf', 'file.ini', 'npmrc', '.npmrc', 'php.ini', 'php.ini-5', 'php.ini-file', '/etc/yum.repos.d/file', 'any/etc/pacman.conf', 'any/etc/yum.conf', 'any/etc/yum.repos.d/file', 'file.wrap'], \ 'dot': ['file.dot', 'file.gv'], - \ 'dracula': ['file.drac', 'file.drc', 'filelvs', 'filelpe'], + \ 'dracula': ['file.drac', 'file.drc', 'filelvs', 'filelpe', 'drac.file', 'lpe', 'lvs', 'some-lpe', 'some-lvs'], \ 'dsl': ['file.dsl'], \ 'dtd': ['file.dtd'], \ 'dts': ['file.dts', 'file.dtsi'], @@ -163,10 +166,10 @@ let s:filename_checks = { \ 'epuppet': ['file.epp'], \ 'erlang': ['file.erl', 'file.hrl', 'file.yaws'], \ 'eruby': ['file.erb', 'file.rhtml'], - \ 'esmtprc': ['anyesmtprc'], + \ 'esmtprc': ['anyesmtprc', 'esmtprc', 'some-esmtprc'], \ 'esqlc': ['file.ec', 'file.EC'], \ 'esterel': ['file.strl'], - \ 'eterm': ['anyEterm/file.cfg'], + \ 'eterm': ['anyEterm/file.cfg', 'Eterm/file.cfg', 'some-Eterm/file.cfg'], \ 'exim': ['exim.conf'], \ 'expect': ['file.exp'], \ 'exports': ['exports'], @@ -179,16 +182,18 @@ let s:filename_checks = { \ 'focexec': ['file.fex', 'file.focexec'], \ 'forth': ['file.fs', 'file.ft', 'file.fth'], \ 'fortran': ['file.f', 'file.for', 'file.fortran', 'file.fpp', 'file.ftn', 'file.f77', 'file.f90', 'file.f95', 'file.f03', 'file.f08'], + \ 'fpcmake': ['file.fpc'], \ 'framescript': ['file.fsl'], \ 'freebasic': ['file.fb', 'file.bi'], \ 'fstab': ['fstab', 'mtab'], + \ 'fvwm': ['/.fvwm/file', 'any/.fvwm/file'], \ 'gdb': ['.gdbinit'], \ 'gdmo': ['file.mo', 'file.gdmo'], - \ 'gedcom': ['file.ged', 'lltxxxxx.txt'], + \ 'gedcom': ['file.ged', 'lltxxxxx.txt', '/tmp/lltmp', '/tmp/lltmp-file', 'any/tmp/lltmp', 'any/tmp/lltmp-file'], \ 'gift': ['file.gift'], \ 'gitcommit': ['COMMIT_EDITMSG', 'MERGE_MSG', 'TAG_EDITMSG'], - \ 'gitconfig': ['file.git/config', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config', '/etc/gitconfig'], - \ 'gitolite': ['gitolite.conf'], + \ 'gitconfig': ['file.git/config', '.gitconfig', '.gitmodules', 'file.git/modules//config', '/.config/git/config', '/etc/gitconfig', '/etc/gitconfig.d/file', '/.gitconfig.d/file', 'any/.config/git/config', 'any/.gitconfig.d/file', 'some.git/config', 'some.git/modules/any/config'], + \ 'gitolite': ['gitolite.conf', '/gitolite-admin/conf/file', 'any/gitolite-admin/conf/file'], \ 'gitrebase': ['git-rebase-todo'], \ 'gitsendemail': ['.gitsendemail.msg.xxxxxx'], \ 'gkrellmrc': ['gkrellmrc', 'gkrellmrc_x'], @@ -196,17 +201,17 @@ let s:filename_checks = { \ 'gnuplot': ['file.gpi'], \ 'go': ['file.go'], \ 'gp': ['file.gp', '.gprc'], - \ 'gpg': ['/.gnupg/options', '/.gnupg/gpg.conf', '/usr/any/gnupg/options.skel'], + \ 'gpg': ['/.gnupg/options', '/.gnupg/gpg.conf', '/usr/any/gnupg/options.skel', 'any/.gnupg/gpg.conf', 'any/.gnupg/options', 'any/usr/any/gnupg/options.skel'], \ 'grads': ['file.gs'], \ 'gretl': ['file.gretl'], \ 'groovy': ['file.gradle', 'file.groovy'], - \ 'group': ['any/etc/group', 'any/etc/group-', 'any/etc/group.edit', 'any/etc/gshadow', 'any/etc/gshadow-', 'any/etc/gshadow.edit', 'any/var/backups/group.bak', 'any/var/backups/gshadow.bak'], - \ 'grub': ['/boot/grub/menu.lst', '/boot/grub/grub.conf', '/etc/grub.conf'], + \ 'group': ['any/etc/group', 'any/etc/group-', 'any/etc/group.edit', 'any/etc/gshadow', 'any/etc/gshadow-', 'any/etc/gshadow.edit', 'any/var/backups/group.bak', 'any/var/backups/gshadow.bak', '/etc/group', '/etc/group-', '/etc/group.edit', '/etc/gshadow', '/etc/gshadow-', '/etc/gshadow.edit', '/var/backups/group.bak', '/var/backups/gshadow.bak'], + \ 'grub': ['/boot/grub/menu.lst', '/boot/grub/grub.conf', '/etc/grub.conf', 'any/boot/grub/grub.conf', 'any/boot/grub/menu.lst', 'any/etc/grub.conf'], \ 'gsp': ['file.gsp'], - \ 'gtkrc': ['.gtkrc', 'gtkrc'], + \ 'gtkrc': ['.gtkrc', 'gtkrc', '.gtkrc-file', 'gtkrc-file'], \ 'haml': ['file.haml'], \ 'hamster': ['file.hsm'], - \ 'haskell': ['file.hs', 'file.hsc', 'file.hs-boot'], + \ 'haskell': ['file.hs', 'file.hsc', 'file.hs-boot', 'file.hsig'], \ 'haste': ['file.ht'], \ 'hastepreproc': ['file.htpp'], \ 'hb': ['file.hb'], @@ -215,24 +220,35 @@ let s:filename_checks = { \ 'hgcommit': ['hg-editor-file.txt'], \ 'hog': ['file.hog', 'snort.conf', 'vision.conf'], \ 'hollywood': ['file.hws'], - \ 'hostconf': ['/etc/host.conf'], - \ 'hostsaccess': ['/etc/hosts.allow', '/etc/hosts.deny'], + \ 'hostconf': ['/etc/host.conf', 'any/etc/host.conf'], + \ 'hostsaccess': ['/etc/hosts.allow', '/etc/hosts.deny', 'any/etc/hosts.allow', 'any/etc/hosts.deny'], + \ 'logcheck': ['/etc/logcheck/file.d-some/file', '/etc/logcheck/file.d/file', 'any/etc/logcheck/file.d-some/file', 'any/etc/logcheck/file.d/file'], + \ 'modula3': ['file.m3', 'file.mg', 'file.i3', 'file.ig'], + \ 'natural': ['file.NSA', 'file.NSC', 'file.NSG', 'file.NSL', 'file.NSM', 'file.NSN', 'file.NSP', 'file.NSS'], + \ 'neomuttrc': ['Neomuttrc', '.neomuttrc', '.neomuttrc-file', '/.neomutt/neomuttrc', '/.neomutt/neomuttrc-file', 'Neomuttrc', 'Neomuttrc-file', 'any/.neomutt/neomuttrc', 'any/.neomutt/neomuttrc-file', 'neomuttrc', 'neomuttrc-file'], + \ 'opl': ['file.OPL', 'file.OPl', 'file.OpL', 'file.Opl', 'file.oPL', 'file.oPl', 'file.opL', 'file.opl'], + \ 'pcmk': ['file.pcmk'], + \ 'r': ['file.r'], + \ 'rhelp': ['file.rd'], + \ 'rmd': ['file.rmd', 'file.smd'], + \ 'rnoweb': ['file.rnw', 'file.snw'], + \ 'rrst': ['file.rrst', 'file.srst'], \ 'template': ['file.tmpl'], \ 'htmlm4': ['file.html.m4'], \ 'httest': ['file.htt', 'file.htb'], \ 'ibasic': ['file.iba', 'file.ibi'], - \ 'icemenu': ['/.icewm/menu'], + \ 'icemenu': ['/.icewm/menu', 'any/.icewm/menu'], \ 'icon': ['file.icn'], \ 'indent': ['.indent.pro', 'indentrc'], \ 'inform': ['file.inf', 'file.INF'], - \ 'initng': ['/etc/initng/any/file.i', 'file.ii'], + \ 'initng': ['/etc/initng/any/file.i', 'file.ii', 'any/etc/initng/any/file.i'], \ 'inittab': ['inittab'], \ 'ipfilter': ['ipf.conf', 'ipf6.conf', 'ipf.rules'], \ 'iss': ['file.iss'], \ 'ist': ['file.ist', 'file.mst'], \ 'j': ['file.ijs'], \ 'jal': ['file.jal', 'file.JAL'], - \ 'jam': ['file.jpl', 'file.jpr'], + \ 'jam': ['file.jpl', 'file.jpr', 'JAM-file.file', 'JAM.file', 'Prl-file.file', 'Prl.file'], \ 'java': ['file.java', 'file.jav'], \ 'javacc': ['file.jj', 'file.jjt'], \ 'javascript': ['file.js', 'file.javascript', 'file.es', 'file.mjs', 'file.cjs'], @@ -240,10 +256,10 @@ let s:filename_checks = { \ 'jess': ['file.clp'], \ 'jgraph': ['file.jgr'], \ 'jovial': ['file.jov', 'file.j73', 'file.jovial'], - \ 'jproperties': ['file.properties', 'file.properties_xx', 'file.properties_xx_xx'], - \ 'json': ['file.json', 'file.jsonp', 'file.webmanifest', 'Pipfile.lock'], + \ 'jproperties': ['file.properties', 'file.properties_xx', 'file.properties_xx_xx', 'some.properties_xx_xx_file'], + \ 'json': ['file.json', 'file.jsonp', 'file.webmanifest', 'Pipfile.lock', 'file.ipynb'], \ 'jsp': ['file.jsp'], - \ 'kconfig': ['Kconfig', 'Kconfig.debug'], + \ 'kconfig': ['Kconfig', 'Kconfig.debug', 'Kconfig.file'], \ 'kivy': ['file.kv'], \ 'kix': ['file.kix'], \ 'kotlin': ['file.kt', 'file.ktm', 'file.kts'], @@ -255,18 +271,18 @@ let s:filename_checks = { \ 'ldif': ['file.ldif'], \ 'less': ['file.less'], \ 'lex': ['file.lex', 'file.l', 'file.lxx', 'file.l++'], - \ 'lftp': ['lftp.conf', '.lftprc', 'anylftp/rc'], + \ 'lftp': ['lftp.conf', '.lftprc', 'anylftp/rc', 'lftp/rc', 'some-lftp/rc'], \ 'lhaskell': ['file.lhs'], - \ 'libao': ['/etc/libao.conf', '/.libao'], + \ 'libao': ['/etc/libao.conf', '/.libao', 'any/.libao', 'any/etc/libao.conf'], \ 'lifelines': ['file.ll'], - \ 'lilo': ['lilo.conf'], - \ 'limits': ['/etc/limits', '/etc/anylimits.conf', '/etc/anylimits.d/file.conf'], + \ 'lilo': ['lilo.conf', 'lilo.conf-file'], + \ 'limits': ['/etc/limits', '/etc/anylimits.conf', '/etc/anylimits.d/file.conf', '/etc/limits.conf', '/etc/limits.d/file.conf', '/etc/some-limits.conf', '/etc/some-limits.d/file.conf', 'any/etc/limits', 'any/etc/limits.conf', 'any/etc/limits.d/file.conf', 'any/etc/some-limits.conf', 'any/etc/some-limits.d/file.conf'], \ 'liquid': ['file.liquid'], \ 'lisp': ['file.lsp', 'file.lisp', 'file.el', 'file.cl', '.emacs', '.sawfishrc', 'sbclrc', '.sbclrc'], \ 'lite': ['file.lite', 'file.lt'], - \ 'litestep': ['/LiteStep/any/file.rc'], - \ 'loginaccess': ['/etc/login.access'], - \ 'logindefs': ['/etc/login.defs'], + \ 'litestep': ['/LiteStep/any/file.rc', 'any/LiteStep/any/file.rc'], + \ 'loginaccess': ['/etc/login.access', 'any/etc/login.access'], + \ 'logindefs': ['/etc/login.defs', 'any/etc/login.defs'], \ 'logtalk': ['file.lgt'], \ 'lotos': ['file.lot', 'file.lotos'], \ 'lout': ['file.lou', 'file.lout'], @@ -278,12 +294,12 @@ let s:filename_checks = { \ 'm3build': ['m3makefile', 'm3overrides'], \ 'm3quake': ['file.quake', 'cm3.cfg'], \ 'm4': ['file.at'], - \ 'mail': ['snd.123', '.letter', '.letter.123', '.followup', '.article', '.article.123', 'pico.123', 'mutt-xx-xxx', 'muttng-xx-xxx', 'ae123.txt', 'file.eml'], - \ 'mailaliases': ['/etc/mail/aliases', '/etc/aliases'], + \ 'mail': ['snd.123', '.letter', '.letter.123', '.followup', '.article', '.article.123', 'pico.123', 'mutt-xx-xxx', 'muttng-xx-xxx', 'ae123.txt', 'file.eml', 'reportbug-file'], + \ 'mailaliases': ['/etc/mail/aliases', '/etc/aliases', 'any/etc/aliases', 'any/etc/mail/aliases'], \ 'mailcap': ['.mailcap', 'mailcap'], - \ 'make': ['file.mk', 'file.mak', 'file.dsp'], + \ 'make': ['file.mk', 'file.mak', 'file.dsp', 'makefile', 'Makefile', 'makefile-file', 'Makefile-file', 'some-makefile', 'some-Makefile'], \ 'mallard': ['file.page'], - \ 'manconf': ['/etc/man.conf', 'man.config'], + \ 'manconf': ['/etc/man.conf', 'man.config', 'any/etc/man.conf'], \ 'map': ['file.map'], \ 'maple': ['file.mv', 'file.mpl', 'file.mws'], \ 'markdown': ['file.markdown', 'file.mdown', 'file.mkd', 'file.mkdn', 'file.mdwn', 'file.md'], @@ -305,27 +321,27 @@ let s:filename_checks = { \ 'mix': ['file.mix', 'file.mixal'], \ 'mma': ['file.nb'], \ 'mmp': ['file.mmp'], - \ 'modconf': ['/etc/modules.conf', '/etc/modules', '/etc/conf.modules'], + \ 'modconf': ['/etc/modules.conf', '/etc/modules', '/etc/conf.modules', '/etc/modprobe.file', 'any/etc/conf.modules', 'any/etc/modprobe.file', 'any/etc/modules', 'any/etc/modules.conf'], \ 'modula2': ['file.m2', 'file.mi'], \ 'monk': ['file.isc', 'file.monk', 'file.ssc', 'file.tsc'], \ 'moo': ['file.moo'], \ 'mp': ['file.mp'], - \ 'mplayerconf': ['mplayer.conf', '/.mplayer/config'], + \ 'mplayerconf': ['mplayer.conf', '/.mplayer/config', 'any/.mplayer/config'], \ 'mrxvtrc': ['mrxvtrc', '.mrxvtrc'], \ 'msidl': ['file.odl', 'file.mof'], \ 'msql': ['file.msql'], \ 'mupad': ['file.mu'], \ 'mush': ['file.mush'], - \ 'muttrc': ['Muttngrc', 'Muttrc'], + \ 'muttrc': ['Muttngrc', 'Muttrc', '.muttngrc', '.muttngrc-file', '.muttrc', '.muttrc-file', '/.mutt/muttngrc', '/.mutt/muttngrc-file', '/.mutt/muttrc', '/.mutt/muttrc-file', '/.muttng/muttngrc', '/.muttng/muttngrc-file', '/.muttng/muttrc', '/.muttng/muttrc-file', '/etc/Muttrc.d/file', 'Muttngrc-file', 'Muttrc-file', 'any/.mutt/muttngrc', 'any/.mutt/muttngrc-file', 'any/.mutt/muttrc', 'any/.mutt/muttrc-file', 'any/.muttng/muttngrc', 'any/.muttng/muttngrc-file', 'any/.muttng/muttrc', 'any/.muttng/muttrc-file', 'any/etc/Muttrc.d/file', 'muttngrc', 'muttngrc-file', 'muttrc', 'muttrc-file'], \ 'mysql': ['file.mysql'], \ 'n1ql': ['file.n1ql', 'file.nql'], - \ 'named': ['namedfile.conf', 'rndcfile.conf'], - \ 'nanorc': ['/etc/nanorc', 'file.nanorc'], + \ 'named': ['namedfile.conf', 'rndcfile.conf', 'named-file.conf', 'named.conf', 'rndc-file.conf', 'rndc-file.key', 'rndc.conf', 'rndc.key'], + \ 'nanorc': ['/etc/nanorc', 'file.nanorc', 'any/etc/nanorc'], \ 'ncf': ['file.ncf'], \ 'netrc': ['.netrc'], \ 'ninja': ['file.ninja'], \ 'nqc': ['file.nqc'], - \ 'nroff': ['file.tr', 'file.nr', 'file.roff', 'file.tmac', 'file.mom'], + \ 'nroff': ['file.tr', 'file.nr', 'file.roff', 'file.tmac', 'file.mom', 'tmac.file'], \ 'nsis': ['file.nsi', 'file.nsh'], \ 'obj': ['file.obj'], \ 'ocaml': ['file.ml', 'file.mli', 'file.mll', 'file.mly', '.ocamlinit', 'file.mlt', 'file.mlp', 'file.mlip', 'file.mli.cppo', 'file.ml.cppo'], @@ -334,16 +350,15 @@ let s:filename_checks = { \ 'opam': ['opam', 'file.opam', 'file.opam.template'], \ 'openroad': ['file.or'], \ 'ora': ['file.ora'], - \ 'pamconf': ['/etc/pam.conf'], - \ 'pamenv': ['/etc/security/pam_env.conf', '/home/user/.pam_environment'], + \ 'pamconf': ['/etc/pam.conf', '/etc/pam.d/file', 'any/etc/pam.conf', 'any/etc/pam.d/file'], + \ 'pamenv': ['/etc/security/pam_env.conf', '/home/user/.pam_environment', '.pam_environment', 'pam_env.conf'], \ 'papp': ['file.papp', 'file.pxml', 'file.pxsl'], \ 'pascal': ['file.pas', 'file.dpr', 'file.lpr'], - \ 'passwd': ['any/etc/passwd', 'any/etc/passwd-', 'any/etc/passwd.edit', 'any/etc/shadow', 'any/etc/shadow-', 'any/etc/shadow.edit', 'any/var/backups/passwd.bak', 'any/var/backups/shadow.bak'], + \ 'passwd': ['any/etc/passwd', 'any/etc/passwd-', 'any/etc/passwd.edit', 'any/etc/shadow', 'any/etc/shadow-', 'any/etc/shadow.edit', 'any/var/backups/passwd.bak', 'any/var/backups/shadow.bak', '/etc/passwd', '/etc/passwd-', '/etc/passwd.edit', '/etc/shadow', '/etc/shadow-', '/etc/shadow.edit', '/var/backups/passwd.bak', '/var/backups/shadow.bak'], \ 'pbtxt': ['file.pbtxt'], \ 'pccts': ['file.g'], \ 'pdf': ['file.pdf'], \ 'perl': ['file.plx', 'file.al', 'file.psgi', 'gitolite.rc', '.gitolite.rc', 'example.gitolite.rc'], - \ 'perl6': ['file.p6', 'file.pm6', 'file.pl6', 'file.raku', 'file.rakumod'], \ 'pf': ['pf.conf'], \ 'pfmain': ['main.cf'], \ 'php': ['file.php', 'file.php9', 'file.phtml', 'file.ctp'], @@ -352,14 +367,13 @@ let s:filename_checks = { \ 'cmod': ['file.cmod'], \ 'pilrc': ['file.rcp'], \ 'pine': ['.pinerc', 'pinerc', '.pinercex', 'pinercex'], - \ 'pinfo': ['/etc/pinforc', '/.pinforc'], + \ 'pinfo': ['/etc/pinforc', '/.pinforc', 'any/.pinforc', 'any/etc/pinforc'], \ 'pli': ['file.pli', 'file.pl1'], \ 'plm': ['file.plm', 'file.p36', 'file.pac'], \ 'plp': ['file.plp'], \ 'plsql': ['file.pls', 'file.plsql'], \ 'po': ['file.po', 'file.pot'], \ 'pod': ['file.pod'], - \ 'pod6': ['file.pod6'], \ 'poke': ['file.pk'], \ 'postscr': ['file.ps', 'file.pfa', 'file.afm', 'file.eps', 'file.epsf', 'file.epsi', 'file.ai'], \ 'pov': ['file.pov'], @@ -372,7 +386,7 @@ let s:filename_checks = { \ 'prolog': ['file.pdb'], \ 'promela': ['file.pml'], \ 'proto': ['file.proto'], - \ 'protocols': ['/etc/protocols'], + \ 'protocols': ['/etc/protocols', 'any/etc/protocols'], \ 'ps1': ['file.ps1', 'file.psd1', 'file.psm1', 'file.pssc'], \ 'ps1xml': ['file.ps1xml'], \ 'psf': ['file.psf'], @@ -380,14 +394,15 @@ let s:filename_checks = { \ 'puppet': ['file.pp'], \ 'pyrex': ['file.pyx', 'file.pxd'], \ 'python': ['file.py', 'file.pyw', '.pythonstartup', '.pythonrc', 'file.ptl', 'file.pyi', 'SConstruct'], - \ 'quake': ['anybaseq2/file.cfg', 'anyid1/file.cfg', 'quake3/file.cfg'], + \ 'quake': ['anybaseq2/file.cfg', 'anyid1/file.cfg', 'quake3/file.cfg', 'baseq2/file.cfg', 'id1/file.cfg', 'quake1/file.cfg', 'some-baseq2/file.cfg', 'some-id1/file.cfg', 'some-quake1/file.cfg'], \ 'radiance': ['file.rad', 'file.mat'], + \ 'raku': ['file.pm6', 'file.p6', 'file.t6', 'file.pod6', 'file.raku', 'file.rakumod', 'file.rakudoc', 'file.rakutest'], \ 'ratpoison': ['.ratpoisonrc', 'ratpoisonrc'], \ 'rbs': ['file.rbs'], \ 'rc': ['file.rc', 'file.rch'], \ 'rcs': ['file,v'], \ 'readline': ['.inputrc', 'inputrc'], - \ 'remind': ['.reminders', 'file.remind', 'file.rem'], + \ 'remind': ['.reminders', 'file.remind', 'file.rem', '.reminders-file'], \ 'rego': ['file.rego'], \ 'resolv': ['resolv.conf'], \ 'reva': ['file.frt'], @@ -417,9 +432,9 @@ let s:filename_checks = { \ 'sdc': ['file.sdc'], \ 'sdl': ['file.sdl', 'file.pr'], \ 'sed': ['file.sed'], - \ 'sensors': ['/etc/sensors.conf', '/etc/sensors3.conf'], - \ 'services': ['/etc/services'], - \ 'setserial': ['/etc/serial.conf'], + \ 'sensors': ['/etc/sensors.conf', '/etc/sensors3.conf', 'any/etc/sensors.conf', 'any/etc/sensors3.conf'], + \ 'services': ['/etc/services', 'any/etc/services'], + \ 'setserial': ['/etc/serial.conf', 'any/etc/serial.conf'], \ 'sh': ['.bashrc', 'file.bash', '/usr/share/doc/bash-completion/filter.sh','/etc/udev/cdsymlinks.conf', 'any/etc/udev/cdsymlinks.conf'], \ 'sieve': ['file.siv', 'file.sieve'], \ 'simula': ['file.sim'], @@ -428,9 +443,9 @@ let s:filename_checks = { \ 'skill': ['file.il', 'file.ils', 'file.cdf'], \ 'slang': ['file.sl'], \ 'slice': ['file.ice'], - \ 'slpconf': ['/etc/slp.conf'], - \ 'slpreg': ['/etc/slp.reg'], - \ 'slpspi': ['/etc/slp.spi'], + \ 'slpconf': ['/etc/slp.conf', 'any/etc/slp.conf'], + \ 'slpreg': ['/etc/slp.reg', 'any/etc/slp.reg'], + \ 'slpspi': ['/etc/slp.spi', 'any/etc/slp.spi'], \ 'slrnrc': ['.slrnrc'], \ 'slrnsc': ['file.score'], \ 'sm': ['sendmail.cf'], @@ -450,19 +465,19 @@ let s:filename_checks = { \ 'sqr': ['file.sqr', 'file.sqi'], \ 'squid': ['squid.conf'], \ 'srec': ['file.s19', 'file.s28', 'file.s37', 'file.mot', 'file.srec'], - \ 'sshconfig': ['ssh_config', '/.ssh/config', '/etc/ssh/ssh_config.d/file.conf', 'any/etc/ssh/ssh_config.d/file.conf'], + \ 'sshconfig': ['ssh_config', '/.ssh/config', '/etc/ssh/ssh_config.d/file.conf', 'any/etc/ssh/ssh_config.d/file.conf', 'any/.ssh/config'], \ 'sshdconfig': ['sshd_config', '/etc/ssh/sshd_config.d/file.conf', 'any/etc/ssh/sshd_config.d/file.conf'], \ 'st': ['file.st'], \ 'stata': ['file.ado', 'file.do', 'file.imata', 'file.mata'], \ 'stp': ['file.stp'], - \ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp'], + \ 'sudoers': ['any/etc/sudoers', 'sudoers.tmp', '/etc/sudoers'], \ 'svg': ['file.svg'], - \ 'svn': ['svn-commitfile.tmp'], + \ 'svn': ['svn-commitfile.tmp', 'svn-commit-file.tmp', 'svn-commit.tmp'], \ 'swift': ['file.swift'], \ 'swiftgyb': ['file.swift.gyb'], \ 'sil': ['file.sil'], - \ 'sysctl': ['/etc/sysctl.conf', '/etc/sysctl.d/file.conf'], - \ 'systemd': ['any/systemd/file.automount', 'any/systemd/file.dnssd', 'any/systemd/file.link', 'any/systemd/file.mount', 'any/systemd/file.netdev', 'any/systemd/file.network', 'any/systemd/file.nspawn', 'any/systemd/file.path', 'any/systemd/file.service', 'any/systemd/file.slice', 'any/systemd/file.socket', 'any/systemd/file.swap', 'any/systemd/file.target', 'any/systemd/file.timer', '/etc/systemd/some.conf.d/file.conf', '/etc/systemd/system/some.d/file.conf', '/etc/systemd/system/some.d/.#file', '/etc/systemd/system/.#otherfile', '/home/user/.config/systemd/user/some.d/mine.conf', '/home/user/.config/systemd/user/some.d/.#file', '/home/user/.config/systemd/user/.#otherfile'], + \ 'sysctl': ['/etc/sysctl.conf', '/etc/sysctl.d/file.conf', 'any/etc/sysctl.conf', 'any/etc/sysctl.d/file.conf'], + \ 'systemd': ['any/systemd/file.automount', 'any/systemd/file.dnssd', 'any/systemd/file.link', 'any/systemd/file.mount', 'any/systemd/file.netdev', 'any/systemd/file.network', 'any/systemd/file.nspawn', 'any/systemd/file.path', 'any/systemd/file.service', 'any/systemd/file.slice', 'any/systemd/file.socket', 'any/systemd/file.swap', 'any/systemd/file.target', 'any/systemd/file.timer', '/etc/systemd/some.conf.d/file.conf', '/etc/systemd/system/some.d/file.conf', '/etc/systemd/system/some.d/.#file', '/etc/systemd/system/.#otherfile', '/home/user/.config/systemd/user/some.d/mine.conf', '/home/user/.config/systemd/user/some.d/.#file', '/home/user/.config/systemd/user/.#otherfile', '/.config/systemd/user/.#', '/.config/systemd/user/.#-file', '/.config/systemd/user/file.d/.#', '/.config/systemd/user/file.d/.#-file', '/.config/systemd/user/file.d/file.conf', '/etc/systemd/file.conf.d/file.conf', '/etc/systemd/system/.#', '/etc/systemd/system/.#-file', '/etc/systemd/system/file.d/.#', '/etc/systemd/system/file.d/.#-file', '/etc/systemd/system/file.d/file.conf', '/systemd/file.automount', '/systemd/file.dnssd', '/systemd/file.link', '/systemd/file.mount', '/systemd/file.netdev', '/systemd/file.network', '/systemd/file.nspawn', '/systemd/file.path', '/systemd/file.service', '/systemd/file.slice', '/systemd/file.socket', '/systemd/file.swap', '/systemd/file.target', '/systemd/file.timer', 'any/.config/systemd/user/.#', 'any/.config/systemd/user/.#-file', 'any/.config/systemd/user/file.d/.#', 'any/.config/systemd/user/file.d/.#-file', 'any/.config/systemd/user/file.d/file.conf', 'any/etc/systemd/file.conf.d/file.conf', 'any/etc/systemd/system/.#', 'any/etc/systemd/system/.#-file', 'any/etc/systemd/system/file.d/.#', 'any/etc/systemd/system/file.d/.#-file', 'any/etc/systemd/system/file.d/file.conf'], \ 'systemverilog': ['file.sv', 'file.svh'], \ 'tags': ['tags'], \ 'tak': ['file.tak'], @@ -479,7 +494,7 @@ let s:filename_checks = { \ 'tidy': ['.tidyrc', 'tidyrc', 'tidy.conf'], \ 'tilde': ['file.t.html'], \ 'tli': ['file.tli'], - \ 'tmux': ['tmuxfile.conf', '.tmuxfile.conf'], + \ 'tmux': ['tmuxfile.conf', '.tmuxfile.conf', '.tmux-file.conf', '.tmux.conf', 'tmux-file.conf', 'tmux.conf'], \ 'toml': ['file.toml'], \ 'tpp': ['file.tpp'], \ 'treetop': ['file.treetop'], @@ -491,12 +506,12 @@ let s:filename_checks = { \ 'twig': ['file.twig'], \ 'typescriptreact': ['file.tsx'], \ 'uc': ['file.uc'], - \ 'udevconf': ['/etc/udev/udev.conf'], - \ 'udevperm': ['/etc/udev/permissions.d/file.permissions'], + \ 'udevconf': ['/etc/udev/udev.conf', 'any/etc/udev/udev.conf'], + \ 'udevperm': ['/etc/udev/permissions.d/file.permissions', 'any/etc/udev/permissions.d/file.permissions'], \ 'udevrules': ['/etc/udev/rules.d/file.rules', '/usr/lib/udev/rules.d/file.rules', '/lib/udev/rules.d/file.rules'], \ 'uil': ['file.uit', 'file.uil'], - \ 'updatedb': ['/etc/updatedb.conf'], - \ 'upstart': ['/usr/share/upstart/file.conf', '/usr/share/upstart/file.override', '/etc/init/file.conf', '/etc/init/file.override', '/.init/file.conf', '/.init/file.override', '/.config/upstart/file.conf', '/.config/upstart/file.override'], + \ 'updatedb': ['/etc/updatedb.conf', 'any/etc/updatedb.conf'], + \ 'upstart': ['/usr/share/upstart/file.conf', '/usr/share/upstart/file.override', '/etc/init/file.conf', '/etc/init/file.override', '/.init/file.conf', '/.init/file.override', '/.config/upstart/file.conf', '/.config/upstart/file.override', 'any/.config/upstart/file.conf', 'any/.config/upstart/file.override', 'any/.init/file.conf', 'any/.init/file.override', 'any/etc/init/file.conf', 'any/etc/init/file.override', 'any/usr/share/upstart/file.conf', 'any/usr/share/upstart/file.override'], \ 'upstreamdat': ['upstream.dat', 'UPSTREAM.DAT', 'upstream.file.dat', 'UPSTREAM.FILE.DAT', 'file.upstream.dat', 'FILE.UPSTREAM.DAT'], \ 'upstreaminstalllog': ['upstreaminstall.log', 'UPSTREAMINSTALL.LOG', 'upstreaminstall.file.log', 'UPSTREAMINSTALL.FILE.LOG', 'file.upstreaminstall.log', 'FILE.UPSTREAMINSTALL.LOG'], \ 'upstreamlog': ['fdrupstream.log', 'upstream.log', 'UPSTREAM.LOG', 'upstream.file.log', 'UPSTREAM.FILE.LOG', 'file.upstream.log', 'FILE.UPSTREAM.LOG', 'UPSTREAM-file.log', 'UPSTREAM-FILE.LOG'], @@ -507,8 +522,8 @@ let s:filename_checks = { \ 'verilog': ['file.v'], \ 'verilogams': ['file.va', 'file.vams'], \ 'vgrindefs': ['vgrindefs'], - \ 'vhdl': ['file.hdl', 'file.vhd', 'file.vhdl', 'file.vbe', 'file.vst', 'file.vhdl_123', 'file.vho'], - \ 'vim': ['file.vim', 'file.vba', '.exrc', '_exrc'], + \ 'vhdl': ['file.hdl', 'file.vhd', 'file.vhdl', 'file.vbe', 'file.vst', 'file.vhdl_123', 'file.vho', 'some.vhdl_1', 'some.vhdl_1-file'], + \ 'vim': ['file.vim', 'file.vba', '.exrc', '_exrc', 'some-vimrc', 'some-vimrc-file', 'vimrc', 'vimrc-file'], \ 'viminfo': ['.viminfo', '_viminfo'], \ 'vmasm': ['file.mar'], \ 'voscm': ['file.cm'], @@ -520,14 +535,15 @@ let s:filename_checks = { \ 'wget': ['.wgetrc', 'wgetrc'], \ 'winbatch': ['file.wbt'], \ 'wml': ['file.wml'], + \ 'wsh': ['file.wsf', 'file.wsc'], \ 'wsml': ['file.wsml'], \ 'wvdial': ['wvdial.conf', '.wvdialrc'], - \ 'xdefaults': ['.Xdefaults', '.Xpdefaults', '.Xresources', 'xdm-config', 'file.ad'], + \ 'xdefaults': ['.Xdefaults', '.Xpdefaults', '.Xresources', 'xdm-config', 'file.ad', '/Xresources/file', '/app-defaults/file', 'Xresources', 'Xresources-file', 'any/Xresources/file', 'any/app-defaults/file'], \ 'xhtml': ['file.xhtml', 'file.xht'], - \ 'xinetd': ['/etc/xinetd.conf'], + \ 'xinetd': ['/etc/xinetd.conf', '/etc/xinetd.d/file', 'any/etc/xinetd.conf', 'any/etc/xinetd.d/file'], \ 'xmath': ['file.msc', 'file.msf'], - \ 'xml': ['/etc/blkid.tab', '/etc/blkid.tab.old', 'file.xmi', 'file.csproj', 'file.csproj.user', 'file.ui', 'file.tpm', '/etc/xdg/menus/file.menu', 'fglrxrc', 'file.xlf', 'file.xliff', 'file.xul', 'file.wsdl', 'file.wpl', 'any/etc/blkid.tab', 'any/etc/blkid.tab.old', 'any/etc/xdg/menus/file.menu', 'file.atom', 'file.rss', 'file.cdxml', 'file.psc1'], - \ 'xmodmap': ['anyXmodmap'], + \ 'xml': ['/etc/blkid.tab', '/etc/blkid.tab.old', 'file.xmi', 'file.csproj', 'file.csproj.user', 'file.ui', 'file.tpm', '/etc/xdg/menus/file.menu', 'fglrxrc', 'file.xlf', 'file.xliff', 'file.xul', 'file.wsdl', 'file.wpl', 'any/etc/blkid.tab', 'any/etc/blkid.tab.old', 'any/etc/xdg/menus/file.menu'], + \ 'xmodmap': ['anyXmodmap', 'Xmodmap', 'some-Xmodmap', 'some-xmodmap', 'some-xmodmap-file', 'xmodmap', 'xmodmap-file'], \ 'xf86conf': ['xorg.conf', 'xorg.conf-4'], \ 'xpm2': ['file.xpm2'], \ 'xquery': ['file.xq', 'file.xql', 'file.xqm', 'file.xquery', 'file.xqy'], @@ -540,7 +556,7 @@ let s:filename_checks = { \ 'z8a': ['file.z8a'], \ 'zimbu': ['file.zu'], \ 'zimbutempl': ['file.zut'], - \ 'zsh': ['.zprofile', '/etc/zprofile', '.zfbfmarks', 'file.zsh'], + \ 'zsh': ['.zprofile', '/etc/zprofile', '.zfbfmarks', 'file.zsh', '.zcompdump', '.zlogin', '.zlogout', '.zshenv', '.zshrc', '.zcompdump-file', '.zlog', '.zlog-file', '.zsh', '.zsh-file', 'any/etc/zprofile', 'zlog', 'zlog-file', 'zsh', 'zsh-file'], \ \ 'help': [$VIMRUNTIME . '/doc/help.txt'], \ 'xpm': ['file.xpm'], @@ -607,7 +623,7 @@ let s:script_checks = { \ ['#!/path/pike0'], \ ['#!/path/pike9']], \ 'lua': [['#!/path/lua']], - \ 'perl6': [['#!/path/perl6']], + \ 'raku': [['#!/path/raku']], \ 'perl': [['#!/path/perl']], \ 'php': [['#!/path/php']], \ 'python': [['#!/path/python'], diff --git a/src/nvim/testdir/test_fnameescape.vim b/src/nvim/testdir/test_fnameescape.vim index 5382b89aa6..0bafdc29fb 100644 --- a/src/nvim/testdir/test_fnameescape.vim +++ b/src/nvim/testdir/test_fnameescape.vim @@ -18,4 +18,10 @@ func Test_fnameescape() endtry call assert_true(status, "ExclamationMark") call delete(fname) + + call assert_equal('\-', fnameescape('-')) + call assert_equal('\+', fnameescape('+')) + call assert_equal('\>', fnameescape('>')) endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_fold.vim b/src/nvim/testdir/test_fold.vim index fcdf888b96..2cc5b47cb0 100644 --- a/src/nvim/testdir/test_fold.vim +++ b/src/nvim/testdir/test_fold.vim @@ -796,6 +796,26 @@ func Test_fold_delete_first_line() set foldmethod& endfunc +func Test_undo_fold_deletion() + new + set fdm=marker + let lines =<< trim END + " {{{ + " }}}1 + " {{{ + END + call setline(1, lines) + 3d + g/"/d + undo + redo + " eval getline(1, '$')->assert_equal(['']) + eval assert_equal(getline(1, '$'), ['']) + + set fdm&vim + bwipe! +endfunc + " this was crashing func Test_move_no_folds() new diff --git a/src/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim index 93f567b3a0..224ca257ab 100644 --- a/src/nvim/testdir/test_functions.vim +++ b/src/nvim/testdir/test_functions.vim @@ -28,12 +28,14 @@ func Test_empty() call assert_equal(0, empty(1)) call assert_equal(0, empty(-1)) - call assert_equal(1, empty(0.0)) - call assert_equal(1, empty(-0.0)) - call assert_equal(0, empty(1.0)) - call assert_equal(0, empty(-1.0)) - call assert_equal(0, empty(1.0/0.0)) - call assert_equal(0, empty(0.0/0.0)) + if has('float') + call assert_equal(1, empty(0.0)) + call assert_equal(1, empty(-0.0)) + call assert_equal(0, empty(1.0)) + call assert_equal(0, empty(-1.0)) + call assert_equal(0, empty(1.0/0.0)) + call assert_equal(0, empty(0.0/0.0)) + endif call assert_equal(1, empty([])) call assert_equal(0, empty(['a'])) @@ -115,7 +117,9 @@ func Test_strwidth() call assert_fails('call strwidth({->0})', 'E729:') call assert_fails('call strwidth([])', 'E730:') call assert_fails('call strwidth({})', 'E731:') - call assert_fails('call strwidth(1.2)', 'E806:') + if has('float') + call assert_fails('call strwidth(1.2)', 'E806:') + endif endfor set ambiwidth& @@ -319,19 +323,19 @@ func Test_setbufvar_options() let prev_id = win_getid() wincmd j - let wh = winheight('.') + let wh = winheight(0) let dummy_buf = bufnr('dummy_buf1', v:true) call setbufvar(dummy_buf, '&buftype', 'nofile') execute 'belowright vertical split #' . dummy_buf - call assert_equal(wh, winheight('.')) + call assert_equal(wh, winheight(0)) let dum1_id = win_getid() wincmd h - let wh = winheight('.') + let wh = winheight(0) let dummy_buf = bufnr('dummy_buf2', v:true) call setbufvar(dummy_buf, '&buftype', 'nofile') execute 'belowright vertical split #' . dummy_buf - call assert_equal(wh, winheight('.')) + call assert_equal(wh, winheight(0)) bwipe! call win_gotoid(prev_id) @@ -1067,6 +1071,22 @@ func Test_inputlist() call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>3\<cr>", 'tx') call assert_equal(3, c) + " CR to cancel + call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<cr>", 'tx') + call assert_equal(0, c) + + " Esc to cancel + call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>\<Esc>", 'tx') + call assert_equal(0, c) + + " q to cancel + call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>q", 'tx') + call assert_equal(0, c) + + " Cancel after inputting a number + call feedkeys(":let c = inputlist(['Select color:', '1. red', '2. green', '3. blue'])\<cr>5q", 'tx') + call assert_equal(0, c) + call assert_fails('call inputlist("")', 'E686:') endfunc diff --git a/src/nvim/testdir/test_ga.vim b/src/nvim/testdir/test_ga.vim index 87f1382342..ce31edfc7a 100644 --- a/src/nvim/testdir/test_ga.vim +++ b/src/nvim/testdir/test_ga.vim @@ -18,6 +18,7 @@ func Test_ga_command() call assert_equal("\nNUL", Do_ga('')) call assert_equal("\n<^A> 1, Hex 01, Oct 001, Digr SH", Do_ga("\x01")) call assert_equal("\n<^I> 9, Hex 09, Oct 011, Digr HT", Do_ga("\t")) + call assert_equal("\n<^@> 0, Hex 00, Octal 000", Do_ga("\n")) call assert_equal("\n<e> 101, Hex 65, Octal 145", Do_ga('e')) @@ -30,5 +31,13 @@ func Test_ga_command() call assert_equal("\n<e> 101, Hex 65, Octal 145 < ́> 769, Hex 0301, Octal 1401", Do_ga("e\u0301")) call assert_equal("\n<e> 101, Hex 65, Octal 145 < ́> 769, Hex 0301, Octal 1401 < ̱> 817, Hex 0331, Octal 1461", Do_ga("e\u0301\u0331")) call assert_equal("\n<e> 101, Hex 65, Octal 145 < ́> 769, Hex 0301, Octal 1401 < ̱> 817, Hex 0331, Octal 1461 < ̸> 824, Hex 0338, Octal 1470", Do_ga("e\u0301\u0331\u0338")) + + " When using Mac fileformat, CR instead of NL is used for line termination + enew! + set fileformat=mac + call assert_equal("\n<^J> 10, Hex 0a, Oct 012, Digr NU", Do_ga("\r")) + bwipe! endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_glob2regpat.vim b/src/nvim/testdir/test_glob2regpat.vim index e6e41f13e7..354f239ef1 100644 --- a/src/nvim/testdir/test_glob2regpat.vim +++ b/src/nvim/testdir/test_glob2regpat.vim @@ -1,7 +1,9 @@ " Test glob2regpat() func Test_glob2regpat_invalid() - call assert_fails('call glob2regpat(1.33)', 'E806:') + if has('float') + call assert_fails('call glob2regpat(1.33)', 'E806:') + endif call assert_fails('call glob2regpat("}")', 'E219:') call assert_fails('call glob2regpat("{")', 'E220:') endfunc diff --git a/src/nvim/testdir/test_global.vim b/src/nvim/testdir/test_global.vim index 7ccf2812ff..2de2c412de 100644 --- a/src/nvim/testdir/test_global.vim +++ b/src/nvim/testdir/test_global.vim @@ -29,3 +29,11 @@ func Test_nested_global() call assert_equal(['nothing', '++found', 'found bad', 'bad'], getline(1, 4)) bwipe! endfunc + +func Test_global_error() + call assert_fails('g\\a', 'E10:') + call assert_fails('g', 'E148:') + call assert_fails('g/\(/y', 'E476:') +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_highlight.vim b/src/nvim/testdir/test_highlight.vim index ce22de09ca..24c9c3580e 100644 --- a/src/nvim/testdir/test_highlight.vim +++ b/src/nvim/testdir/test_highlight.vim @@ -595,6 +595,42 @@ func Test_cursorline_with_visualmode() call delete('Xtest_cursorline_with_visualmode') endfunc +func Test_colorcolumn_bri() + CheckScreendump + + " check 'colorcolumn' when 'breakindent' is set + let lines =<< trim END + call setline(1, 'The quick brown fox jumped over the lazy dogs') + END + call writefile(lines, 'Xtest_colorcolumn_bri') + let buf = RunVimInTerminal('-S Xtest_colorcolumn_bri', {'rows': 10,'columns': 40}) + call term_sendkeys(buf, ":set co=40 linebreak bri briopt=shift:2 cc=40,41,43\<CR>") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_colorcolumn_2', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_colorcolumn_bri') +endfunc + +func Test_colorcolumn_sbr() + CheckScreendump + + " check 'colorcolumn' when 'showbreak' is set + let lines =<< trim END + call setline(1, 'The quick brown fox jumped over the lazy dogs') + END + call writefile(lines, 'Xtest_colorcolumn_srb') + let buf = RunVimInTerminal('-S Xtest_colorcolumn_srb', {'rows': 10,'columns': 40}) + call term_sendkeys(buf, ":set co=40 showbreak=+++>\\ cc=40,41,43\<CR>") + call TermWait(buf) + call VerifyScreenDump(buf, 'Test_colorcolumn_3', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('Xtest_colorcolumn_srb') +endfunc + " This test must come before the Test_cursorline test, as it appears this " defines the Normal highlighting group anyway. func Test_1_highlight_Normalgroup_exists() diff --git a/src/nvim/testdir/test_increment.vim b/src/nvim/testdir/test_increment.vim index f81f8edbde..6d08cd40a8 100644 --- a/src/nvim/testdir/test_increment.vim +++ b/src/nvim/testdir/test_increment.vim @@ -1,4 +1,4 @@ -" Tests for using Ctrl-A/Ctrl-X on visual selections +" Tests for using Ctrl-A/Ctrl-X func SetUp() new dummy @@ -779,6 +779,50 @@ func Test_increment_empty_line() bwipe! endfunc +" Try incrementing/decrementing a number when nrformats contains unsigned +func Test_increment_unsigned() + set nrformats+=unsigned + + call setline(1, '0') + exec "norm! gg0\<C-X>" + call assert_equal('0', getline(1)) + + call setline(1, '3') + exec "norm! gg010\<C-X>" + call assert_equal('0', getline(1)) + + call setline(1, '-0') + exec "norm! gg0\<C-X>" + call assert_equal("-0", getline(1)) + + call setline(1, '-11') + exec "norm! gg08\<C-X>" + call assert_equal('-3', getline(1)) + + " NOTE: 18446744073709551615 == 2^64 - 1 + call setline(1, '18446744073709551615') + exec "norm! gg0\<C-A>" + call assert_equal('18446744073709551615', getline(1)) + + call setline(1, '-18446744073709551615') + exec "norm! gg0\<C-A>" + call assert_equal('-18446744073709551615', getline(1)) + + call setline(1, '-18446744073709551614') + exec "norm! gg08\<C-A>" + call assert_equal('-18446744073709551615', getline(1)) + + call setline(1, '-1') + exec "norm! gg0\<C-A>" + call assert_equal('-2', getline(1)) + + call setline(1, '-3') + exec "norm! gg08\<C-A>" + call assert_equal('-11', getline(1)) + + set nrformats-=unsigned +endfunc + func Test_normal_increment_with_virtualedit() set virtualedit=all diff --git a/src/nvim/testdir/test_listdict.vim b/src/nvim/testdir/test_listdict.vim index affb141a26..5152af8f58 100644 --- a/src/nvim/testdir/test_listdict.vim +++ b/src/nvim/testdir/test_listdict.vim @@ -689,7 +689,9 @@ func Test_listdict_extend() let l = [1, 2, 3] call assert_fails("call extend(l, [4, 5, 6], 4)", 'E684:') call assert_fails("call extend(l, [4, 5, 6], -4)", 'E684:') - call assert_fails("call extend(l, [4, 5, 6], 1.2)", 'E805:') + if has('float') + call assert_fails("call extend(l, [4, 5, 6], 1.2)", 'E805:') + endif " Test extend() with dictionaries. @@ -713,7 +715,9 @@ func Test_listdict_extend() let d = {'a': 'A', 'b': 'B'} call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'error')", 'E737:') call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 'xxx')", 'E475:') - call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 1.2)", 'E806:') + if has('float') + call assert_fails("call extend(d, {'b': 0, 'c':'C'}, 1.2)", 'E806:') + endif call assert_equal({'a': 'A', 'b': 'B'}, d) call assert_fails("call extend([1, 2], 1)", 'E712:') diff --git a/src/nvim/testdir/test_mapping.vim b/src/nvim/testdir/test_mapping.vim index 0191dbf33e..f88e8cf843 100644 --- a/src/nvim/testdir/test_mapping.vim +++ b/src/nvim/testdir/test_mapping.vim @@ -559,4 +559,13 @@ func Test_map_cmdkey_redo() ounmap i- endfunc +func Test_abbreviate_multi_byte() + new + iabbrev foo bar + call feedkeys("ifoo…\<Esc>", 'xt') + call assert_equal("bar…", getline(1)) + iunabbrev foo + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_mksession.vim b/src/nvim/testdir/test_mksession.vim index 7bb76ad9eb..4e46dbac16 100644 --- a/src/nvim/testdir/test_mksession.vim +++ b/src/nvim/testdir/test_mksession.vim @@ -149,6 +149,21 @@ func Test_mksession_large_winheight() call delete('Xtest_mks_winheight.out') endfunc +func Test_mksession_zero_winheight() + set winminheight=0 + edit SomeFile + split + wincmd _ + mksession! Xtest_mks_zero + set winminheight& + " let text = readfile('Xtest_mks_zero')->join() + let text = join(readfile('Xtest_mks_zero')) + call delete('Xtest_mks_zero') + close + " check there is no divide by zero + call assert_notmatch('/ 0[^0-9]', text) +endfunc + func Test_mksession_rtp() if has('win32') " TODO: fix problem with backslashes diff --git a/src/nvim/testdir/test_move.vim b/src/nvim/testdir/test_move.vim index d774c93dbd..f666a904b0 100644 --- a/src/nvim/testdir/test_move.vim +++ b/src/nvim/testdir/test_move.vim @@ -35,6 +35,11 @@ func Test_move() call assert_fails('1,2move 1', 'E134') call assert_fails('2,3move 2', 'E134') + call assert_fails("move -100", 'E16:') + call assert_fails("move +100", 'E16:') + call assert_fails('move', 'E16:') %bwipeout! endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_normal.vim b/src/nvim/testdir/test_normal.vim index 7a846e5ea0..5c413d1e16 100644 --- a/src/nvim/testdir/test_normal.vim +++ b/src/nvim/testdir/test_normal.vim @@ -512,6 +512,12 @@ func Test_normal14_page_eol() bw! endfunc +" Test for errors with z command +func Test_normal_z_error() + call assert_beeps('normal! z2p') + call assert_beeps('normal! zq') +endfunc + func Test_normal15_z_scroll_vert() " basic test for z commands that scroll the window call Setup_NewWindow() @@ -1105,161 +1111,6 @@ func Test_normal18_z_fold() bw! endfunc -func Test_normal19_z_spell() - if !has("spell") || !has('syntax') - return - endif - new - call append(0, ['1 good', '2 goood', '3 goood']) - set spell spellfile=./Xspellfile.add spelllang=en - let oldlang=v:lang - lang C - - " Test for zg - 1 - norm! ]s - call assert_equal('2 goood', getline('.')) - norm! zg - 1 - let a=execute('unsilent :norm! ]s') - call assert_equal('1 good', getline('.')) - call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) - let cnt=readfile('./Xspellfile.add') - call assert_equal('goood', cnt[0]) - - " Test for zw - 2 - norm! $zw - 1 - norm! ]s - call assert_equal('2 goood', getline('.')) - let cnt=readfile('./Xspellfile.add') - call assert_equal('#oood', cnt[0]) - call assert_equal('goood/!', cnt[1]) - - " Test for zg in visual mode - let a=execute('unsilent :norm! V$zg') - call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) - 1 - norm! ]s - call assert_equal('3 goood', getline('.')) - let cnt=readfile('./Xspellfile.add') - call assert_equal('2 goood', cnt[2]) - " Remove "2 good" from spellfile - 2 - let a=execute('unsilent norm! V$zw') - call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) - let cnt=readfile('./Xspellfile.add') - call assert_equal('2 goood/!', cnt[3]) - - " Test for zG - let a=execute('unsilent norm! V$zG') - call assert_match("Word '2 goood' added to .*", a) - let fname=matchstr(a, 'to\s\+\zs\f\+$') - let fname=Fix_truncated_tmpfile(fname) - let cnt=readfile(fname) - call assert_equal('2 goood', cnt[0]) - - " Test for zW - let a=execute('unsilent norm! V$zW') - call assert_match("Word '2 goood' added to .*", a) - let cnt=readfile(fname) - call assert_equal('# goood', cnt[0]) - call assert_equal('2 goood/!', cnt[1]) - - " Test for zuW - let a=execute('unsilent norm! V$zuW') - call assert_match("Word '2 goood' removed from .*", a) - let cnt=readfile(fname) - call assert_equal('# goood', cnt[0]) - call assert_equal('# goood/!', cnt[1]) - - " Test for zuG - let a=execute('unsilent norm! $zG') - call assert_match("Word 'goood' added to .*", a) - let cnt=readfile(fname) - call assert_equal('# goood', cnt[0]) - call assert_equal('# goood/!', cnt[1]) - call assert_equal('goood', cnt[2]) - let a=execute('unsilent norm! $zuG') - let cnt=readfile(fname) - call assert_match("Word 'goood' removed from .*", a) - call assert_equal('# goood', cnt[0]) - call assert_equal('# goood/!', cnt[1]) - call assert_equal('#oood', cnt[2]) - " word not found in wordlist - let a=execute('unsilent norm! V$zuG') - let cnt=readfile(fname) - call assert_match("", a) - call assert_equal('# goood', cnt[0]) - call assert_equal('# goood/!', cnt[1]) - call assert_equal('#oood', cnt[2]) - - " Test for zug - call delete('./Xspellfile.add') - 2 - let a=execute('unsilent norm! $zg') - let cnt=readfile('./Xspellfile.add') - call assert_equal('goood', cnt[0]) - let a=execute('unsilent norm! $zug') - call assert_match("Word 'goood' removed from \./Xspellfile.add", a) - let cnt=readfile('./Xspellfile.add') - call assert_equal('#oood', cnt[0]) - " word not in wordlist - let a=execute('unsilent norm! V$zug') - call assert_match('', a) - let cnt=readfile('./Xspellfile.add') - call assert_equal('#oood', cnt[0]) - - " Test for zuw - call delete('./Xspellfile.add') - 2 - let a=execute('unsilent norm! Vzw') - let cnt=readfile('./Xspellfile.add') - call assert_equal('2 goood/!', cnt[0]) - let a=execute('unsilent norm! Vzuw') - call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) - let cnt=readfile('./Xspellfile.add') - call assert_equal('# goood/!', cnt[0]) - " word not in wordlist - let a=execute('unsilent norm! $zug') - call assert_match('', a) - let cnt=readfile('./Xspellfile.add') - call assert_equal('# goood/!', cnt[0]) - - " add second entry to spellfile setting - set spellfile=./Xspellfile.add,./Xspellfile2.add - call delete('./Xspellfile.add') - 2 - let a=execute('unsilent norm! $2zg') - let cnt=readfile('./Xspellfile2.add') - call assert_match("Word 'goood' added to ./Xspellfile2.add", a) - call assert_equal('goood', cnt[0]) - - " Test for :spellgood! - let temp = execute(':spe!0/0') - call assert_match('Invalid region', temp) - let spellfile = matchstr(temp, 'Invalid region nr in \zs.*\ze line \d: 0') - call assert_equal(['# goood', '# goood/!', '#oood', '0/0'], readfile(spellfile)) - call delete(spellfile) - - " clean up - exe "lang" oldlang - call delete("./Xspellfile.add") - call delete("./Xspellfile2.add") - call delete("./Xspellfile.add.spl") - call delete("./Xspellfile2.add.spl") - - " zux -> no-op - 2 - norm! $zux - call assert_equal([], glob('Xspellfile.add',0,1)) - call assert_equal([], glob('Xspellfile2.add',0,1)) - - set spellfile= - bw! -endfunc - func Test_normal20_exmode() if !has("unix") " Reading from redirected file doesn't work on MS-Windows @@ -2877,3 +2728,35 @@ func Test_normal_gk() bw! set cpoptions& number& numberwidth& endfunc + +" Some commands like yy, cc, dd, >>, << and !! accept a count after +" typing the first letter of the command. +func Test_normal_count_after_operator() + new + setlocal shiftwidth=4 tabstop=8 autoindent + call setline(1, ['one', 'two', 'three', 'four', 'five']) + let @a = '' + normal! j"ay4y + call assert_equal("two\nthree\nfour\nfive\n", @a) + normal! 3G>2> + call assert_equal(['one', 'two', ' three', ' four', 'five'], + \ getline(1, '$')) + exe "normal! 3G0c2cred\nblue" + call assert_equal(['one', 'two', ' red', ' blue', 'five'], + \ getline(1, '$')) + exe "normal! gg<8<" + call assert_equal(['one', 'two', 'red', 'blue', 'five'], + \ getline(1, '$')) + exe "normal! ggd3d" + call assert_equal(['blue', 'five'], getline(1, '$')) + call setline(1, range(1, 4)) + call feedkeys("gg!3!\<C-B>\"\<CR>", 'xt') + call assert_equal('".,.+2!', @:) + call feedkeys("gg!1!\<C-B>\"\<CR>", 'xt') + call assert_equal('".!', @:) + call feedkeys("gg!9!\<C-B>\"\<CR>", 'xt') + call assert_equal('".,$!', @:) + bw! +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_options.vim b/src/nvim/testdir/test_options.vim index 5aef33cb09..8796af7a20 100644 --- a/src/nvim/testdir/test_options.vim +++ b/src/nvim/testdir/test_options.vim @@ -629,6 +629,25 @@ func Test_visualbell() set belloff=all endfunc +" Test for the 'write' option +func Test_write() + new + call setline(1, ['L1']) + set nowrite + call assert_fails('write Xfile', 'E142:') + set write + close! +endfunc + +" Test for 'buftype' option +func Test_buftype() + new + call setline(1, ['L1']) + set buftype=nowrite + call assert_fails('write', 'E382:') + close! +endfunc + " Test for setting option values using v:false and v:true func Test_opt_boolean() set number& diff --git a/src/nvim/testdir/test_partial.vim b/src/nvim/testdir/test_partial.vim index 52aac05ea1..8c90f21600 100644 --- a/src/nvim/testdir/test_partial.vim +++ b/src/nvim/testdir/test_partial.vim @@ -105,7 +105,7 @@ fun InnerCall(funcref) endfu fun OuterCall() - let opt = { 'func' : function('sin') } + let opt = { 'func' : function('max') } call InnerCall(opt.func) endfu diff --git a/src/nvim/testdir/test_popup.vim b/src/nvim/testdir/test_popup.vim index 9443958984..06bdb1236a 100644 --- a/src/nvim/testdir/test_popup.vim +++ b/src/nvim/testdir/test_popup.vim @@ -850,6 +850,34 @@ func Test_popup_position() call delete('Xtest') endfunc +func Test_popup_command() + if !CanRunVimInTerminal() || !has('menu') + return + endif + + call writefile([ + \ 'one two three four five', + \ 'and one two Xthree four five', + \ 'one more two three four five', + \ ], 'Xtest') + let buf = RunVimInTerminal('Xtest', {}) + call term_sendkeys(buf, ":source $VIMRUNTIME/menu.vim\<CR>") + call term_sendkeys(buf, "/X\<CR>:popup PopUp\<CR>") + call VerifyScreenDump(buf, 'Test_popup_command_01', {}) + + " Select a word + call term_sendkeys(buf, "jj") + call VerifyScreenDump(buf, 'Test_popup_command_02', {}) + + " Select a word + call term_sendkeys(buf, "j\<CR>") + call VerifyScreenDump(buf, 'Test_popup_command_03', {}) + + call term_sendkeys(buf, "\<Esc>") + call StopVimInTerminal(buf) + call delete('Xtest') +endfunc + func Test_popup_complete_backwards() new call setline(1, ['Post', 'Port', 'Po']) @@ -1077,4 +1105,77 @@ func Test_pum_getpos() unlet g:pum_pos endfunc +" Test for the popup menu with the 'rightleft' option set +func Test_pum_rightleft() + CheckFeature rightleft + CheckScreendump + + let lines =<< trim END + abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz + vim + victory + END + call writefile(lines, 'Xtest1') + let buf = RunVimInTerminal('--cmd "set rightleft" Xtest1', {}) + call term_wait(buf) + call term_sendkeys(buf, "Go\<C-P>") + call term_wait(buf) + call VerifyScreenDump(buf, 'Test_pum_rightleft_01', {'rows': 8}) + call term_sendkeys(buf, "\<C-P>\<C-Y>") + call term_wait(buf) + redraw! + call assert_match('\s*miv', Screenline(5)) + + " Test for expanding tabs to spaces in the popup menu + let lines =<< trim END + one two + one three + four + END + call writefile(lines, 'Xtest2') + call term_sendkeys(buf, "\<Esc>:e! Xtest2\<CR>") + call term_wait(buf) + call term_sendkeys(buf, "Goone\<C-X>\<C-L>") + call term_wait(buf) + redraw! + call VerifyScreenDump(buf, 'Test_pum_rightleft_02', {'rows': 7}) + call term_sendkeys(buf, "\<C-Y>") + call term_wait(buf) + redraw! + call assert_match('\s*eerht eno', Screenline(4)) + + call StopVimInTerminal(buf) + call delete('Xtest1') + call delete('Xtest2') +endfunc + +" Test for a popup menu with a scrollbar +func Test_pum_scrollbar() + CheckScreendump + let lines =<< trim END + one + two + three + END + call writefile(lines, 'Xtest1') + let buf = RunVimInTerminal('--cmd "set pumheight=2" Xtest1', {}) + call term_wait(buf) + call term_sendkeys(buf, "Go\<C-P>\<C-P>\<C-P>") + call term_wait(buf) + call VerifyScreenDump(buf, 'Test_pum_scrollbar_01', {'rows': 7}) + call term_sendkeys(buf, "\<C-E>\<Esc>dd") + call term_wait(buf) + + if has('rightleft') + call term_sendkeys(buf, ":set rightleft\<CR>") + call term_wait(buf) + call term_sendkeys(buf, "Go\<C-P>\<C-P>\<C-P>") + call term_wait(buf) + call VerifyScreenDump(buf, 'Test_pum_scrollbar_02', {'rows': 7}) + endif + + call StopVimInTerminal(buf) + call delete('Xtest1') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index da949f5940..14240f0d5f 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -14,7 +14,7 @@ func s:setup_commands(cchar) command! -nargs=* Xaddexpr <mods>caddexpr <args> command! -nargs=* -count Xolder <mods><count>colder <args> command! -nargs=* Xnewer <mods>cnewer <args> - command! -nargs=* Xopen <mods>copen <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> @@ -32,8 +32,8 @@ func s:setup_commands(cchar) command! -count -nargs=* -bang Xnfile <mods><count>cnfile<bang> <args> command! -nargs=* -bang Xpfile <mods>cpfile<bang> <args> command! -nargs=* Xexpr <mods>cexpr <args> - command! -range -nargs=* Xvimgrep <mods><count>vimgrep <args> - command! -nargs=* Xvimgrepadd <mods>vimgrepadd <args> + command! -count -nargs=* Xvimgrep <mods> <count>vimgrep <args> + command! -nargs=* Xvimgrepadd <mods> vimgrepadd <args> command! -nargs=* Xgrep <mods> grep <args> command! -nargs=* Xgrepadd <mods> grepadd <args> command! -nargs=* Xhelpgrep helpgrep <args> @@ -51,7 +51,7 @@ func s:setup_commands(cchar) command! -nargs=* Xaddexpr <mods>laddexpr <args> command! -nargs=* -count Xolder <mods><count>lolder <args> command! -nargs=* Xnewer <mods>lnewer <args> - command! -nargs=* Xopen <mods>lopen <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> @@ -69,8 +69,8 @@ func s:setup_commands(cchar) command! -count -nargs=* -bang Xnfile <mods><count>lnfile<bang> <args> command! -nargs=* -bang Xpfile <mods>lpfile<bang> <args> command! -nargs=* Xexpr <mods>lexpr <args> - command! -range -nargs=* Xvimgrep <mods><count>lvimgrep <args> - command! -nargs=* Xvimgrepadd <mods>lvimgrepadd <args> + command! -count -nargs=* Xvimgrep <mods> <count>lvimgrep <args> + command! -nargs=* Xvimgrepadd <mods> lvimgrepadd <args> command! -nargs=* Xgrep <mods> lgrep <args> command! -nargs=* Xgrepadd <mods> lgrepadd <args> command! -nargs=* Xhelpgrep lhelpgrep <args> @@ -157,6 +157,12 @@ func XlistTests(cchar) \ ' 2 Data.Text:20 col 10 warning 22: ModuleWarning', \ ' 3 Data/Text.hs:30 col 15 warning 33: FileWarning'], l) + " For help entries in the quickfix list, only the filename without directory + " should be displayed + Xhelpgrep setqflist() + let l = split(execute('Xlist 1', ''), "\n") + call assert_match('^ 1 [^\\/]\{-}:', l[0]) + " Error cases call assert_fails('Xlist abc', 'E488:') endfunc @@ -255,13 +261,13 @@ func XwindowTests(cchar) " Open the window Xopen 5 call assert_true(winnr('$') == 2 && getline('.') ==# '|| non-error 1' - \ && winheight('.') == 5) + \ && winheight(0) == 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 && + \ winheight(0) == 7 && \ getline('.') ==# '|| non-error 1') " :cnext in quickfix window should move to the next entry @@ -272,6 +278,14 @@ func XwindowTests(cchar) Xwindow call assert_true(winnr('$') == 1) + " Specifying the width should adjust the width for a vertically split + " quickfix window. + vert Xopen + call assert_equal(10, winwidth(0)) + vert Xopen 12 + call assert_equal(12, winwidth(0)) + Xclose + if a:cchar == 'c' " Opening the quickfix window in multiple tab pages should reuse the " quickfix buffer @@ -352,6 +366,13 @@ func XfileTests(cchar) \ 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') + " Test for a file with a long line and without a newline at the end + let text = repeat('x', 1024) + let t = 'a.txt:18:' . text + call writefile([t], 'Xqftestfile1', 'b') + silent! Xfile Xqftestfile1 + call assert_equal(text, g:Xgetlist()[0].text) + call delete('Xqftestfile1') endfunc @@ -475,6 +496,12 @@ func Xtest_browse(cchar) call assert_equal(5, g:Xgetlist({'idx':0}).idx) 2Xcc call assert_equal(2, g:Xgetlist({'idx':0}).idx) + if a:cchar == 'c' + cc + else + ll + endif + call assert_equal(2, g:Xgetlist({'idx':0}).idx) 10Xcc call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xlast @@ -483,6 +510,14 @@ func Xtest_browse(cchar) call assert_equal(11, line('.')) call assert_fails('Xnext', 'E553') call assert_fails('Xnfile', 'E553') + " To process the range using quickfix list entries, directly use the + " quickfix commands (don't use the user defined commands) + if a:cchar == 'c' + $cc + else + $ll + endif + call assert_equal(6, g:Xgetlist({'idx':0}).idx) Xrewind call assert_equal('Xqftestfile1', bufname('%')) call assert_equal(5, line('.')) @@ -1095,6 +1130,10 @@ func Xinvalid_efm_Tests(cchar) set efm=%f:%l:%m,%f:%l:%m:%R call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E377:') + " Invalid regular expression + set efm=%\\%%k + call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E867:') + set efm= call assert_fails('Xexpr "abc.txt:1:Hello world"', 'E378:') @@ -1125,6 +1164,11 @@ func Test_efm2() let l = split(execute('clist', ''), "\n") call assert_equal([' 1 Xtestfile:^\VLine search text\$: '], l) + " Test for a long line + cexpr 'Xtestfile:' . repeat('a', 1026) + let l = getqflist() + call assert_equal('^\V' . repeat('a', 1019) . '\$', l[0].pattern) + " Test for %P, %Q and %t format specifiers let lines =<< trim [DATA] [Xtestfile1] @@ -1162,6 +1206,14 @@ func Test_efm2() call delete('Xtestfile2') call delete('Xtestfile3') + " Test for %P, %Q with non-existing files + cexpr lines + let l = getqflist() + call assert_equal(14, len(l)) + call assert_equal('[Xtestfile1]', l[0].text) + call assert_equal('[Xtestfile2]', l[6].text) + call assert_equal('[Xtestfile3]', l[9].text) + " Tests for %E, %C and %Z format specifiers let lines =<< trim [DATA] Error 275 @@ -1203,18 +1255,19 @@ func Test_efm2() File "/usr/lib/python2.2/unittest.py", line 286, in failUnlessEqual raise self.failureException, \\ - AssertionError: 34 != 33 + W:AssertionError: 34 != 33 -------------------------------------------------------------- Ran 27 tests in 0.063s [DATA] - set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m + set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%t:%m cgetexpr lines let l = getqflist() call assert_equal(8, len(l)) call assert_equal(89, l[4].lnum) call assert_equal(1, l[4].valid) call assert_equal(expand('unittests/dbfacadeTest.py'), bufname(l[4].bufnr)) + call assert_equal('W', l[4].type) " Test for %o set efm=%f(%o):%l\ %m @@ -1231,6 +1284,14 @@ func Test_efm2() bd call delete("Xotestfile") + " Test for a long module name + cexpr 'Xtest(' . repeat('m', 1026) . '):15 message' + let l = getqflist() + " call assert_equal(repeat('m', 1024), l[0].module) + call assert_equal(repeat('m', 1023), l[0].module) + call assert_equal(15, l[0].lnum) + call assert_equal('message', l[0].text) + " The following sequence of commands used to crash Vim set efm=%W%m cgetexpr ['msg1'] @@ -1716,9 +1777,11 @@ func Test_switchbuf() call assert_equal(winid, win_getid()) 2cnext call assert_equal(winid, win_getid()) - enew + " Test for 'switchbuf' set to search for files in windows in the current + " tabpage and jump to an existing window (if present) set switchbuf=useopen + enew cfirst | cnext call assert_equal(file1_winid, win_getid()) 2cnext @@ -1726,6 +1789,8 @@ func Test_switchbuf() 2cnext call assert_equal(file2_winid, win_getid()) + " Test for 'switchbuf' set to search for files in tabpages and jump to an + " existing tabpage (if present) enew | only set switchbuf=usetab tabedit Xqftestfile1 @@ -1744,6 +1809,7 @@ func Test_switchbuf() call assert_equal(4, tabpagenr()) tabfirst | tabonly | enew + " Test for 'switchbuf' set to open a new window for every file set switchbuf=split cfirst | cnext call assert_equal(1, winnr('$')) @@ -1751,9 +1817,10 @@ func Test_switchbuf() call assert_equal(2, winnr('$')) cnext | cnext call assert_equal(3, winnr('$')) - enew | only + " Test for 'switchbuf' set to open a new tabpage for every file set switchbuf=newtab + enew | only cfirst | cnext call assert_equal(1, tabpagenr('$')) cnext | cnext @@ -1770,6 +1837,8 @@ func Test_switchbuf() call assert_equal(last_winid, win_getid()) enew | only + " With an empty 'switchbuf', jumping to a quickfix entry should open the + " file in an existing window (if present) set switchbuf= edit Xqftestfile1 let file1_winid = win_getid() @@ -1799,6 +1868,32 @@ func Test_switchbuf() call assert_equal(4, tabpagenr()) tabfirst | tabonly | enew | only + " Jumping to a file that is not present in any of the tabpages and the + " current tabpage doesn't have any usable windows, should open it in a new + " window in the current tabpage. + copen | only + cfirst + call assert_equal(1, tabpagenr()) + call assert_equal('Xqftestfile1', bufname('')) + + " If opening a file changes 'switchbuf', then the new value should be + " retained. + call writefile(["vim: switchbuf=split"], 'Xqftestfile1') + enew | only + set switchbuf&vim + cexpr "Xqftestfile1:1:10" + call assert_equal('split', &switchbuf) + call writefile(["vim: switchbuf=usetab"], 'Xqftestfile1') + enew | only + set switchbuf=useopen + cexpr "Xqftestfile1:1:10" + call assert_equal('usetab', &switchbuf) + call writefile(["vim: switchbuf&vim"], 'Xqftestfile1') + enew | only + set switchbuf=useopen + cexpr "Xqftestfile1:1:10" + call assert_equal('', &switchbuf) + call delete('Xqftestfile1') call delete('Xqftestfile2') call delete('Xqftestfile3') @@ -1825,11 +1920,16 @@ func Xadjust_qflnum(cchar) 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) + " If a file doesn't have any quickfix entries, then deleting lines in the + " file should not update the quickfix list + call g:Xsetlist([], 'f') + 1,2delete + call assert_equal([], g:Xgetlist()) + enew! call delete(fname) endfunc @@ -2592,6 +2692,28 @@ func Test_cwindow_jump() set efm&vim endfunc +func Test_cwindow_highlight() + CheckScreendump + + let lines =<< trim END + call setline(1, ['some', 'text', 'with', 'matches']) + write XCwindow + vimgrep e XCwindow + redraw + cwindow 4 + END + call writefile(lines, 'XtestCwindow') + let buf = RunVimInTerminal('-S XtestCwindow', #{rows: 12}) + call VerifyScreenDump(buf, 'Test_quickfix_cwindow_1', {}) + call term_sendkeys(buf, ":cnext\<CR>") + call VerifyScreenDump(buf, 'Test_quickfix_cwindow_2', {}) + + " clean up + call StopVimInTerminal(buf) + call delete('XtestCwindow') + call delete('XCwindow') +endfunc + func XvimgrepTests(cchar) call s:setup_commands(a:cchar) @@ -2617,7 +2739,7 @@ func XvimgrepTests(cchar) call assert_equal(2, len(l)) call assert_equal('Editor:Notepad NOTEPAD', l[0].text) - Xvimgrep #\cvim#g Xtestfile? + 10Xvimgrep #\cvim#g Xtestfile? let l = g:Xgetlist() call assert_equal(2, len(l)) call assert_equal(8, l[0].col) @@ -3690,6 +3812,41 @@ func Test_vimgrep_autocmd() call setqflist([], 'f') endfunc +" Test for an autocmd changing the current directory when running vimgrep +func Xvimgrep_autocmd_cd(cchar) + call s:setup_commands(a:cchar) + + %bwipe + let save_cwd = getcwd() + + augroup QF_Test + au! + autocmd BufRead * silent cd %:p:h + augroup END + + 10Xvimgrep /vim/ Xdir/** + let l = g:Xgetlist() + call assert_equal('f1.txt', bufname(l[0].bufnr)) + call assert_equal('f2.txt', fnamemodify(bufname(l[2].bufnr), ':t')) + + augroup QF_Test + au! + augroup END + + exe 'cd ' . save_cwd +endfunc + +func Test_vimgrep_autocmd_cd() + call mkdir('Xdir/a', 'p') + call mkdir('Xdir/b', 'p') + call writefile(['a_L1_vim', 'a_L2_vim'], 'Xdir/a/f1.txt') + call writefile(['b_L1_vim', 'b_L2_vim'], 'Xdir/b/f2.txt') + call Xvimgrep_autocmd_cd('c') + call Xvimgrep_autocmd_cd('l') + %bwipe + call delete('Xdir', 'rf') +endfunc + " The following test used to crash Vim func Test_lhelpgrep_autocmd() lhelpgrep quickfix @@ -4786,4 +4943,148 @@ func Test_qfbuf_update() call Xqfbuf_update('l') endfunc +" Test for getting a specific item from a quickfix list +func Xtest_getqflist_by_idx(cchar) + call s:setup_commands(a:cchar) + " Empty list + call assert_equal([], g:Xgetlist({'idx' : 1, 'items' : 0}).items) + Xexpr ['F1:10:L10', 'F1:20:L20'] + let l = g:Xgetlist({'idx' : 2, 'items' : 0}).items + call assert_equal(bufnr('F1'), l[0].bufnr) + call assert_equal(20, l[0].lnum) + call assert_equal('L20', l[0].text) + call assert_equal([], g:Xgetlist({'idx' : -1, 'items' : 0}).items) + call assert_equal([], g:Xgetlist({'idx' : 3, 'items' : 0}).items) + %bwipe! +endfunc + +func Test_getqflist_by_idx() + call Xtest_getqflist_by_idx('c') + call Xtest_getqflist_by_idx('l') +endfunc + +" Test for the 'quickfixtextfunc' setting +func Tqfexpr(info) + if a:info.quickfix + let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items + else + let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items + endif + + + let l = [] + for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) + let e = qfl[idx] + let s = '' + if e.bufnr != 0 + let bname = bufname(e.bufnr) + let s ..= fnamemodify(bname, ':.') + endif + let s ..= '-' + let s ..= 'L' .. string(e.lnum) .. 'C' .. string(e.col) .. '-' + let s ..= e.text + call add(l, s) + endfor + + return l +endfunc + +func Xtest_qftextfunc(cchar) + call s:setup_commands(a:cchar) + + set efm=%f:%l:%c:%m + set quickfixtextfunc=Tqfexpr + Xexpr ['F1:10:2:green', 'F1:20:4:blue'] + Xwindow + call assert_equal('F1-L10C2-green', getline(1)) + call assert_equal('F1-L20C4-blue', getline(2)) + Xclose + set quickfixtextfunc&vim + Xwindow + call assert_equal('F1|10 col 2| green', getline(1)) + call assert_equal('F1|20 col 4| blue', getline(2)) + Xclose + set efm& + set quickfixtextfunc& + + " Test for per list 'quickfixtextfunc' setting + func PerQfText(info) + if a:info.quickfix + let qfl = getqflist({'id' : a:info.id, 'items' : 1}).items + else + let qfl = getloclist(a:info.winid, {'id' : a:info.id, 'items' : 1}).items + endif + if empty(qfl) + return [] + endif + let l = [] + for idx in range(a:info.start_idx - 1, a:info.end_idx - 1) + call add(l, 'Line ' .. qfl[idx].lnum .. ', Col ' .. qfl[idx].col) + endfor + return l + endfunc + set quickfixtextfunc=Tqfexpr + call g:Xsetlist([], ' ', {'quickfixtextfunc' : "PerQfText"}) + Xaddexpr ['F1:10:2:green', 'F1:20:4:blue'] + Xwindow + call assert_equal('Line 10, Col 2', getline(1)) + call assert_equal('Line 20, Col 4', getline(2)) + Xclose + " Add entries to the list when the quickfix buffer is hidden + Xaddexpr ['F1:30:6:red'] + Xwindow + call assert_equal('Line 30, Col 6', getline(3)) + Xclose + call g:Xsetlist([], 'r', {'quickfixtextfunc' : ''}) + set quickfixtextfunc& + delfunc PerQfText + + " Non-existing function + set quickfixtextfunc=Tabc + " call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') + Xexpr ['F1:10:2:green', 'F1:20:4:blue']" + call assert_fails("Xwindow", 'E117:') + Xclose + set quickfixtextfunc& + + " set option to a non-function + set quickfixtextfunc=[10,\ 20] + " call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E117:') + Xexpr ['F1:10:2:green', 'F1:20:4:blue']" + call assert_fails("Xwindow", 'E117:') + Xclose + set quickfixtextfunc& + + " set option to a function with different set of arguments + func Xqftext(a, b, c) + return a:a .. a:b .. a:c + endfunc + set quickfixtextfunc=Xqftext + " call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue']", 'E119:') + Xexpr ['F1:10:2:green', 'F1:20:4:blue']" + call assert_fails("Xwindow", 'E119:') + Xclose + + " set option to a function that returns a list with non-strings + func Xqftext2(d) + return ['one', [], 'two'] + endfunc + set quickfixtextfunc=Xqftext2 + " call assert_fails("Xexpr ['F1:10:2:green', 'F1:20:4:blue', 'F1:30:6:red']", + " \ 'E730:') + Xexpr ['F1:10:2:green', 'F1:20:4:blue', 'F1:30:6:red'] + call assert_fails('Xwindow', 'E730:') + call assert_equal(['one', 'F1|20 col 4| blue', 'two'], getline(1, '$')) + Xclose + + set quickfixtextfunc& + delfunc Xqftext + delfunc Xqftext2 +endfunc + +func Test_qftextfunc() + call Xtest_qftextfunc('c') + call Xtest_qftextfunc('l') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_regexp_latin.vim b/src/nvim/testdir/test_regexp_latin.vim index cacdd68d10..712f1e6025 100644 --- a/src/nvim/testdir/test_regexp_latin.vim +++ b/src/nvim/testdir/test_regexp_latin.vim @@ -1,7 +1,10 @@ " Tests for regexp in latin1 encoding + " set encoding=latin1 scriptencoding latin1 +source check.vim + 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ñ oòóôõöø p q r s t uùúûü v w x yýÿ z" let groups = split(str) @@ -42,9 +45,9 @@ func Test_range_with_newline() endfunc func Test_pattern_compile_speed() - if !exists('+spellcapcheck') || !has('reltime') - return - endif + CheckOption spellcapcheck + CheckFunction reltimefloat + let start = reltime() " this used to be very slow, not it should be about a second set spc=\\v(((((Nxxxxxxx&&xxxx){179})+)+)+){179} diff --git a/src/nvim/testdir/test_regexp_utf8.vim b/src/nvim/testdir/test_regexp_utf8.vim index 513780938e..d8d5797dcf 100644 --- a/src/nvim/testdir/test_regexp_utf8.vim +++ b/src/nvim/testdir/test_regexp_utf8.vim @@ -542,6 +542,52 @@ func Test_match_start_of_line_combining() bwipe! endfunc +" Check that [[:upper:]] matches for automatic engine +func Test_match_char_class_upper() + new + let _engine=®expengine + + " Test 1: [[:upper:]]\{2,\} + set regexpengine=0 + call setline(1, ['05. ПЕСНЯ О ГЕРОЯХ муз. А. Давиденко, М. Коваля и Б. Шехтера ...', '05. PJESNJA O GJEROJAKH mus. A. Davidjenko, M. Kovalja i B. Shjekhtjera ...']) + call cursor(1,1) + let search_cmd='norm /\<[[:upper:]]\{2,\}\>' .. "\<CR>" + exe search_cmd + call assert_equal(4, searchcount().total, 'TEST 1') + set regexpengine=1 + exe search_cmd + call assert_equal(2, searchcount().total, 'TEST 1') + set regexpengine=2 + exe search_cmd + call assert_equal(4, searchcount().total, 'TEST 1') + + " Test 2: [[:upper:]].\+ + let search_cmd='norm /\<[[:upper:]].\+\>' .. "\<CR>" + set regexpengine=0 + exe search_cmd + call assert_equal(2, searchcount().total, 'TEST 2') + set regexpengine=1 + exe search_cmd + call assert_equal(1, searchcount().total, 'TEST 2') + set regexpengine=2 + exe search_cmd + call assert_equal(2, searchcount().total, 'TEST 2') + + " Test 3: [[:lower:]]\+ + let search_cmd='norm /\<[[:lower:]]\+\>' .. "\<CR>" + set regexpengine=0 + exe search_cmd + call assert_equal(4, searchcount().total, 'TEST 3 lower') + set regexpengine=1 + exe search_cmd + call assert_equal(2, searchcount().total, 'TEST 3 lower') + set regexpengine=2 + exe search_cmd + call assert_equal(4, searchcount().total, 'TEST 3 lower') + " clean up + let ®expengine=_engine + bwipe! +endfunc " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_search.vim b/src/nvim/testdir/test_search.vim index 75d42b986b..5ba24d047c 100644 --- a/src/nvim/testdir/test_search.vim +++ b/src/nvim/testdir/test_search.vim @@ -824,6 +824,26 @@ func Test_incsearch_search_dump() call delete('Xis_search_script') endfunc +func Test_hlsearch_block_visual_match() + CheckScreendump + + let lines =<< trim END + set hlsearch + call setline(1, ['aa', 'bbbb', 'cccccc']) + END + call writefile(lines, 'Xhlsearch_block') + let buf = RunVimInTerminal('-S Xhlsearch_block', {'rows': 9, 'cols': 60}) + + call term_sendkeys(buf, "G\<C-V>$kk\<Esc>") + sleep 100m + call term_sendkeys(buf, "/\\%V\<CR>") + sleep 100m + call VerifyScreenDump(buf, 'Test_hlsearch_block_visual_match', {}) + + call StopVimInTerminal(buf) + call delete('Xhlsearch_block') +endfunc + func Test_incsearch_substitute() CheckFunction test_override CheckOption incsearch @@ -1177,13 +1197,28 @@ func Test_look_behind() bwipe! endfunc +func Test_search_visual_area_linewise() + new + call setline(1, ['aa', 'bb', 'cc']) + exe "normal 2GV\<Esc>" + for engine in [1, 2] + exe 'set regexpengine=' .. engine + exe "normal gg/\\%'<\<CR>>" + call assert_equal([0, 2, 1, 0, 1], getcurpos(), 'engine ' .. engine) + exe "normal gg/\\%'>\<CR>" + call assert_equal([0, 2, 2, 0, 2], getcurpos(), 'engine ' .. engine) + endfor + + bwipe! + set regexpengine& +endfunc + func Test_search_sentence() new " this used to cause a crash - call assert_fails("/\\%')", 'E486') - call assert_fails("/", 'E486') /\%'( / + bwipe endfunc " Test that there is no crash when there is a last search pattern but no last diff --git a/src/nvim/testdir/test_search_stat.vim b/src/nvim/testdir/test_search_stat.vim index 11c6489ca2..335a51268d 100644 --- a/src/nvim/testdir/test_search_stat.vim +++ b/src/nvim/testdir/test_search_stat.vim @@ -8,6 +8,41 @@ func Test_search_stat() set shortmess-=S " Append 50 lines with text to search for, "foobar" appears 20 times call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 10)) + call nvim_win_set_cursor(0, [1, 0]) + + " searchcount() returns an empty dictionary when previous pattern was not set + call assert_equal({}, searchcount(#{pattern: ''})) + " but setting @/ should also work (even 'n' nor 'N' was executed) + " recompute the count when the last position is different. + call assert_equal( + \ #{current: 1, exact_match: 1, total: 40, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'foo'})) + call assert_equal( + \ #{current: 0, exact_match: 0, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar'})) + call assert_equal( + \ #{current: 0, exact_match: 0, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar', pos: [2, 1, 0]})) + call assert_equal( + \ #{current: 1, exact_match: 1, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar', pos: [3, 1, 0]})) + " on last char of match + call assert_equal( + \ #{current: 1, exact_match: 1, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar', pos: [3, 9, 0]})) + " on char after match + call assert_equal( + \ #{current: 1, exact_match: 0, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar', pos: [3, 10, 0]})) + call assert_equal( + \ #{current: 1, exact_match: 0, total: 10, incomplete: 0, maxcount: 99}, + \ searchcount(#{pattern: 'fooooobar', pos: [4, 1, 0]})) + call assert_equal( + \ #{current: 1, exact_match: 0, total: 2, incomplete: 2, maxcount: 1}, + \ searchcount(#{pattern: 'fooooobar', pos: [4, 1, 0], maxcount: 1})) + call assert_equal( + \ #{current: 0, exact_match: 0, total: 2, incomplete: 2, maxcount: 1}, + \ searchcount(#{pattern: 'fooooobar', maxcount: 1})) " match at second line call cursor(1, 1) @@ -17,6 +52,9 @@ func Test_search_stat() let stat = '\[2/50\]' let pat = escape(@/, '()*?'). '\s\+' call assert_match(pat .. stat, g:a) + call assert_equal( + \ #{current: 2, exact_match: 1, total: 50, incomplete: 0, maxcount: 99}, + \ searchcount(#{recompute: 0})) " didn't get added to message history call assert_equal(messages_before, execute('messages')) @@ -25,6 +63,9 @@ func Test_search_stat() let g:a = execute(':unsilent :norm! n') let stat = '\[50/50\]' call assert_match(pat .. stat, g:a) + call assert_equal( + \ #{current: 50, exact_match: 1, total: 50, incomplete: 0, maxcount: 99}, + \ searchcount(#{recompute: 0})) " No search stat set shortmess+=S @@ -32,6 +73,14 @@ func Test_search_stat() let stat = '\[2/50\]' let g:a = execute(':unsilent :norm! n') call assert_notmatch(pat .. stat, g:a) + call writefile(getline(1, '$'), 'sample.txt') + " n does not update search stat + call assert_equal( + \ #{current: 50, exact_match: 1, total: 50, incomplete: 0, maxcount: 99}, + \ searchcount(#{recompute: 0})) + call assert_equal( + \ #{current: 2, exact_match: 1, total: 50, incomplete: 0, maxcount: 99}, + \ searchcount(#{recompute: v:true})) set shortmess-=S " Many matches @@ -41,10 +90,28 @@ func Test_search_stat() let g:a = execute(':unsilent :norm! n') let stat = '\[>99/>99\]' call assert_match(pat .. stat, g:a) + call assert_equal( + \ #{current: 100, exact_match: 0, total: 100, incomplete: 2, maxcount: 99}, + \ searchcount(#{recompute: 0})) + call assert_equal( + \ #{current: 272, exact_match: 1, total: 280, incomplete: 0, maxcount: 0}, + \ searchcount(#{recompute: v:true, maxcount: 0, timeout: 200})) + call assert_equal( + \ #{current: 1, exact_match: 1, total: 280, incomplete: 0, maxcount: 0}, + \ searchcount(#{recompute: 1, maxcount: 0, pos: [1, 1, 0], timeout: 200})) call cursor(line('$'), 1) let g:a = execute(':unsilent :norm! n') let stat = 'W \[1/>99\]' call assert_match(pat .. stat, g:a) + call assert_equal( + \ #{current: 1, exact_match: 1, total: 100, incomplete: 2, maxcount: 99}, + \ searchcount(#{recompute: 0})) + call assert_equal( + \ #{current: 1, exact_match: 1, total: 280, incomplete: 0, maxcount: 0}, + \ searchcount(#{recompute: 1, maxcount: 0, timeout: 200})) + call assert_equal( + \ #{current: 271, exact_match: 1, total: 280, incomplete: 0, maxcount: 0}, + \ searchcount(#{recompute: 1, maxcount: 0, pos: [line('$')-2, 1, 0], timeout: 200})) " Many matches call cursor(1, 1) @@ -180,12 +247,22 @@ func Test_search_stat() call assert_match('^\s\+' .. stat, g:b) unmap n + " Time out + %delete _ + call append(0, repeat(['foobar', 'foo', 'fooooobar', 'foba', 'foobar'], 100000)) + call cursor(1, 1) + call assert_equal(1, searchcount(#{pattern: 'foo', maxcount: 0, timeout: 1}).incomplete) + " Clean up set shortmess+=S " close the window bwipe! endfunc +func Test_searchcount_fails() + call assert_fails('echo searchcount("boo!")', 'E715:') +endfunc + func Test_search_stat_foldopen() CheckScreendump @@ -252,9 +329,9 @@ func Test_searchcount_in_statusline() function TestSearchCount() abort let search_count = searchcount() if !empty(search_count) - return '[' . search_count.current . '/' . search_count.total . ']' + return '[' . search_count.current . '/' . search_count.total . ']' else - return '' + return '' endif endfunction set hlsearch diff --git a/src/nvim/testdir/test_sort.vim b/src/nvim/testdir/test_sort.vim index 7533eaf2e8..570c4415c6 100644 --- a/src/nvim/testdir/test_sort.vim +++ b/src/nvim/testdir/test_sort.vim @@ -1,5 +1,7 @@ " Tests for the "sort()" function and for the ":sort" command. +source check.vim + func Compare1(a, b) abort call sort(range(3), 'Compare2') return a:a - a:b @@ -13,6 +15,37 @@ func Test_sort_strings() " numbers compared as strings call assert_equal([1, 2, 3], sort([3, 2, 1])) call assert_equal([13, 28, 3], sort([3, 28, 13])) + + call assert_equal(['A', 'O', 'P', 'a', 'o', 'p', 'Ä', 'Ô', 'ä', 'ô', 'Œ', 'œ'], + \ sort(['A', 'O', 'P', 'a', 'o', 'p', 'Ä', 'Ô', 'ä', 'ô', 'œ', 'Œ'])) + + call assert_equal(['A', 'a', 'o', 'O', 'p', 'P', 'Ä', 'Ô', 'ä', 'ô', 'Œ', 'œ'], + \ sort(['A', 'a', 'o', 'O', 'œ', 'Œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'i')) + + " This does not appear to work correctly on Mac. + if !has('mac') + if v:collate =~? '^\(en\|fr\)_ca.utf-\?8$' + " with Canadian English capitals come before lower case. + " 'Œ' is omitted because it can sort before or after 'œ' + call assert_equal(['A', 'a', 'Ä', 'ä', 'O', 'o', 'Ô', 'ô', 'œ', 'P', 'p'], + \ sort(['A', 'a', 'o', 'O', 'œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l')) + elseif v:collate =~? '^\(en\|es\|de\|fr\|it\|nl\).*\.utf-\?8$' + " With the following locales, the accentuated letters are ordered + " similarly to the non-accentuated letters... + call assert_equal(['a', 'A', 'ä', 'Ä', 'o', 'O', 'ô', 'Ô', 'œ', 'Œ', 'p', 'P'], + \ sort(['A', 'a', 'o', 'O', 'œ', 'Œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l')) + elseif v:collate =~? '^sv.*utf-\?8$' + " ... whereas with a Swedish locale, the accentuated letters are ordered + " after Z. + call assert_equal(['a', 'A', 'o', 'O', 'p', 'P', 'ä', 'Ä', 'œ', 'œ', 'ô', 'Ô'], + \ sort(['A', 'a', 'o', 'O', 'œ', 'œ', 'p', 'P', 'Ä', 'ä', 'ô', 'Ô'], 'l')) + endif + endif +endfunc + +func Test_sort_null_string() + " null strings are sorted as empty strings. + call assert_equal(['', 'a', 'b'], sort(['b', v:_null_string, 'a'])) endfunc func Test_sort_numeric() @@ -28,6 +61,7 @@ func Test_sort_numbers() endfunc func Test_sort_float() + CheckFeature float call assert_equal([0.28, 3, 13.5], sort([13.5, 0.28, 3], 'f')) endfunc @@ -37,6 +71,8 @@ func Test_sort_nested() endfunc func Test_sort_default() + CheckFeature float + " docs say omitted, empty or zero argument sorts on string representation. call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"])) call assert_equal(['2', 'A', 'AA', 'a', 1, 3.3], sort([3.3, 1, "2", "A", "a", "AA"], '')) @@ -1145,30 +1181,6 @@ func Test_sort_cmd() \ ] \ }, \ { - \ 'name' : 'float', - \ 'cmd' : 'sort f', - \ 'input' : [ - \ '1.234', - \ '0.88', - \ '123.456', - \ '1.15e-6', - \ '-1.1e3', - \ '-1.01e3', - \ '', - \ '' - \ ], - \ 'expected' : [ - \ '', - \ '', - \ '-1.1e3', - \ '-1.01e3', - \ '1.15e-6', - \ '0.88', - \ '1.234', - \ '123.456' - \ ] - \ }, - \ { \ 'name' : 'alphabetical, sorted input', \ 'cmd' : 'sort', \ 'input' : [ @@ -1197,8 +1209,133 @@ func Test_sort_cmd() \ 'cc', \ ] \ }, + \ { + \ 'name' : 'sort one line buffer', + \ 'cmd' : 'sort', + \ 'input' : [ + \ 'single line' + \ ], + \ 'expected' : [ + \ 'single line' + \ ] + \ }, + \ { + \ 'name' : 'sort ignoring case', + \ 'cmd' : '%sort i', + \ 'input' : [ + \ 'BB', + \ 'Cc', + \ 'aa' + \ ], + \ 'expected' : [ + \ 'aa', + \ 'BB', + \ 'Cc' + \ ] + \ }, \ ] + " This does not appear to work correctly on Mac. + if !has('mac') + if v:collate =~? '^\(en\|fr\)_ca.utf-\?8$' + " en_CA.utf-8 sorts capitals before lower case + " 'Œ' is omitted because it can sort before or after 'œ' + let tests += [ + \ { + \ 'name' : 'sort with locale ' .. v:collate, + \ 'cmd' : '%sort l', + \ 'input' : [ + \ 'A', + \ 'E', + \ 'O', + \ 'À', + \ 'È', + \ 'É', + \ 'Ô', + \ 'Z', + \ 'a', + \ 'e', + \ 'o', + \ 'à', + \ 'è', + \ 'é', + \ 'ô', + \ 'œ', + \ 'z' + \ ], + \ 'expected' : [ + \ 'A', + \ 'a', + \ 'À', + \ 'à', + \ 'E', + \ 'e', + \ 'É', + \ 'é', + \ 'È', + \ 'è', + \ 'O', + \ 'o', + \ 'Ô', + \ 'ô', + \ 'œ', + \ 'Z', + \ 'z' + \ ] + \ }, + \ ] + elseif v:collate =~? '^\(en\|es\|de\|fr\|it\|nl\).*\.utf-\?8$' + " With these locales, the accentuated letters are ordered + " similarly to the non-accentuated letters. + let tests += [ + \ { + \ 'name' : 'sort with locale ' .. v:collate, + \ 'cmd' : '%sort l', + \ 'input' : [ + \ 'A', + \ 'E', + \ 'O', + \ 'À', + \ 'È', + \ 'É', + \ 'Ô', + \ 'Œ', + \ 'Z', + \ 'a', + \ 'e', + \ 'o', + \ 'à', + \ 'è', + \ 'é', + \ 'ô', + \ 'œ', + \ 'z' + \ ], + \ 'expected' : [ + \ 'a', + \ 'A', + \ 'à', + \ 'À', + \ 'e', + \ 'E', + \ 'é', + \ 'É', + \ 'è', + \ 'È', + \ 'o', + \ 'O', + \ 'ô', + \ 'Ô', + \ 'œ', + \ 'Œ', + \ 'z', + \ 'Z' + \ ] + \ }, + \ ] + endif + endif + for t in tests enew! call append(0, t.input) @@ -1217,7 +1354,11 @@ func Test_sort_cmd() endif endfor - call assert_fails('sort no', 'E474') + " Needs atleast two lines for this test + call setline(1, ['line1', 'line2']) + call assert_fails('sort no', 'E474:') + call assert_fails('sort c', 'E475:') + call assert_fails('sort #pat%', 'E682:') enew! endfunc @@ -1319,4 +1460,46 @@ func Test_sort_cmd_report() " the output comes from the :g command, not from the :sort call assert_match("6 fewer lines", res) enew! - endfunc +endfunc + +" Test for a :sort command followed by another command +func Test_sort_followed_by_cmd() + new + let var = '' + call setline(1, ['cc', 'aa', 'bb']) + %sort | let var = "sortcmdtest" + call assert_equal(var, "sortcmdtest") + call assert_equal(['aa', 'bb', 'cc'], getline(1, '$')) + " Test for :sort followed by a comment + call setline(1, ['3b', '1c', '2a']) + %sort /\d\+/ " sort alphabetically + call assert_equal(['2a', '3b', '1c'], getline(1, '$')) + close! +endfunc + +" Test for :sort using last search pattern +func Test_sort_last_search_pat() + new + let @/ = '\d\+' + call setline(1, ['3b', '1c', '2a']) + sort // + call assert_equal(['2a', '3b', '1c'], getline(1, '$')) + close! +endfunc + +" Test for retaining marks across a :sort +func Test_sort_with_marks() + new + call setline(1, ['cc', 'aa', 'bb']) + call setpos("'c", [0, 1, 0, 0]) + call setpos("'a", [0, 2, 0, 0]) + call setpos("'b", [0, 3, 0, 0]) + %sort + call assert_equal(['aa', 'bb', 'cc'], getline(1, '$')) + call assert_equal(2, line("'a")) + call assert_equal(3, line("'b")) + call assert_equal(1, line("'c")) + close! +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_spell.vim b/src/nvim/testdir/test_spell.vim index ab8a998bb8..e525d06ea2 100644 --- a/src/nvim/testdir/test_spell.vim +++ b/src/nvim/testdir/test_spell.vim @@ -106,11 +106,14 @@ foobar/? set spelllang=Xwords.spl call assert_equal(['foobar', 'rare'], spellbadword('foo foobar')) - " Typo should not be detected without the 'spell' option. + " Typo should be detected even without the 'spell' option. set spelllang=en_gb nospell call assert_equal(['', ''], spellbadword('centre')) - call assert_equal(['', ''], spellbadword('My bycycle.')) - call assert_equal(['', ''], spellbadword('A sentence. another sentence')) + call assert_equal(['bycycle', 'bad'], spellbadword('My bycycle.')) + call assert_equal(['another', 'caps'], spellbadword('A sentence. another sentence')) + + set spelllang= + call assert_fails("call spellbadword('maxch')", 'E756:') call delete('Xwords.spl') call delete('Xwords') @@ -172,6 +175,183 @@ func Test_spellreall() bwipe! endfunc +" Test spellsuggest({word} [, {max} [, {capital}]]) +func Test_spellsuggest() + " Verify suggestions are given even when spell checking is not enabled. + set nospell + call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) + + set spell + + " With 1 argument. + call assert_equal(['march', 'March'], spellsuggest('marrch')[0:1]) + + " With 2 arguments. + call assert_equal(['march', 'March'], spellsuggest('marrch', 2)) + + " With 3 arguments. + call assert_equal(['march'], spellsuggest('marrch', 1, 0)) + call assert_equal(['March'], spellsuggest('marrch', 1, 1)) + + " Test with digits and hyphen. + call assert_equal('Carbon-14', spellsuggest('Carbon-15')[0]) + + " Comment taken from spellsuggest.c explains the following test cases: + " + " If there are more UPPER than lower case letters suggest an + " ALLCAP word. Otherwise, if the first letter is UPPER then + " suggest ONECAP. Exception: "ALl" most likely should be "All", + " require three upper case letters. + call assert_equal(['THIRD', 'third'], spellsuggest('thIRD', 2)) + call assert_equal(['third', 'THIRD'], spellsuggest('tHIrd', 2)) + call assert_equal(['Third'], spellsuggest('THird', 1)) + call assert_equal(['All'], spellsuggest('ALl', 1)) + + call assert_fails("call spellsuggest('maxch', [])", 'E745:') + call assert_fails("call spellsuggest('maxch', 2, [])", 'E745:') + + set spelllang= + call assert_fails("call spellsuggest('maxch')", 'E756:') + set spelllang& + + set spell& +endfunc + +" Test 'spellsuggest' option with methods fast, best and double. +func Test_spellsuggest_option_methods() + set spell + + for e in ['utf-8'] + exe 'set encoding=' .. e + + set spellsuggest=fast + call assert_equal(['Stick', 'Stitch'], spellsuggest('Stich', 2), e) + + " With best or double option, "Stitch" should become the top suggestion + " because of better phonetic matching. + set spellsuggest=best + call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) + + set spellsuggest=double + call assert_equal(['Stitch', 'Stick'], spellsuggest('Stich', 2), e) + endfor + + set spell& spellsuggest& encoding& +endfunc + +" Test 'spellsuggest' option with value file:{filename} +func Test_spellsuggest_option_file() + set spell spellsuggest=file:Xspellsuggest + call writefile(['emacs/vim', + \ 'theribal/terrible', + \ 'teribal/terrrible', + \ 'terribal'], + \ 'Xspellsuggest') + + call assert_equal(['vim'], spellsuggest('emacs', 2)) + call assert_equal(['terrible'], spellsuggest('theribal',2)) + + " If the suggestion is misspelled (*terrrible* with 3 r), + " it should not be proposed. + " The entry for "terribal" should be ignored because of missing slash. + call assert_equal([], spellsuggest('teribal', 2)) + call assert_equal([], spellsuggest('terribal', 2)) + + set spell spellsuggest=best,file:Xspellsuggest + call assert_equal(['vim', 'Emacs'], spellsuggest('emacs', 2)) + call assert_equal(['terrible', 'tribal'], spellsuggest('theribal', 2)) + call assert_equal(['tribal'], spellsuggest('teribal', 1)) + call assert_equal(['tribal'], spellsuggest('terribal', 1)) + + call delete('Xspellsuggest') + call assert_fails("call spellsuggest('vim')", "E484: Can't open file Xspellsuggest") + + set spellsuggest& spell& +endfunc + +" Test 'spellsuggest' option with value {number} +" to limit the number of suggestions +func Test_spellsuggest_option_number() + set spell spellsuggest=2,best + new + + " We limited the number of suggestions to 2, so selecting + " the 1st and 2nd suggestion should correct the word, but + " selecting a 3rd suggestion should do nothing. + call setline(1, 'A baord') + norm $1z= + call assert_equal('A board', getline(1)) + + call setline(1, 'A baord') + norm $2z= + call assert_equal('A bard', getline(1)) + + call setline(1, 'A baord') + norm $3z= + call assert_equal('A baord', getline(1)) + + let a = execute('norm $z=') + call assert_equal( + \ "\n" + \ .. "Change \"baord\" to:\n" + \ .. " 1 \"board\"\n" + \ .. " 2 \"bard\"\n" + \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) + + set spell spellsuggest=0 + call assert_equal("\nSorry, no suggestions", execute('norm $z=')) + + " Unlike z=, function spellsuggest(...) should not be affected by the + " max number of suggestions (2) set by the 'spellsuggest' option. + call assert_equal(['board', 'bard', 'broad'], spellsuggest('baord', 3)) + + set spellsuggest& spell& + bwipe! +endfunc + +" Test 'spellsuggest' option with value expr:{expr} +func Test_spellsuggest_option_expr() + " A silly 'spellsuggest' function which makes suggestions all uppercase + " and makes the score of each suggestion the length of the suggested word. + " So shorter suggestions are preferred. + func MySuggest() + let spellsuggest_save = &spellsuggest + set spellsuggest=3,best + let result = map(spellsuggest(v:val, 3), "[toupper(v:val), len(v:val)]") + let &spellsuggest = spellsuggest_save + return result + endfunc + + set spell spellsuggest=expr:MySuggest() + call assert_equal(['BARD', 'BOARD', 'BROAD'], spellsuggest('baord', 3)) + + new + call setline(1, 'baord') + let a = execute('norm z=') + call assert_equal( + \ "\n" + \ .. "Change \"baord\" to:\n" + \ .. " 1 \"BARD\"\n" + \ .. " 2 \"BOARD\"\n" + \ .. " 3 \"BROAD\"\n" + \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) + + " With verbose, z= should show the score i.e. word length with + " our SpellSuggest() function. + set verbose=1 + let a = execute('norm z=') + call assert_equal( + \ "\n" + \ .. "Change \"baord\" to:\n" + \ .. " 1 \"BARD\" (4 - 0)\n" + \ .. " 2 \"BOARD\" (5 - 0)\n" + \ .. " 3 \"BROAD\" (5 - 0)\n" + \ .. "Type number and <Enter> or click with the mouse (q or empty cancels): ", a) + + set spell& spellsuggest& verbose& + bwipe! +endfunc + func Test_spellinfo() throw 'skipped: Nvim does not support enc=latin1' new @@ -227,7 +407,7 @@ func Test_zz_basic() \ ) call assert_equal("gebletegek", soundfold('goobledygoook')) - call assert_equal("kepereneven", soundfold('koprnven')) + call assert_equal("kepereneven", soundfold('kóopërÿnôven')) call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale')) endfunc @@ -408,7 +588,7 @@ func Test_zz_sal_and_addition() mkspell! Xtest Xtest set spl=Xtest.latin1.spl spell call assert_equal('kbltykk', soundfold('goobledygoook')) - call assert_equal('kprnfn', soundfold('koprnven')) + call assert_equal('kprnfn', soundfold('kóopërÿnôven')) call assert_equal('*fls kswts tl', soundfold('oeverloos gezwets edale')) "also use an addition file @@ -461,6 +641,34 @@ func Test_zeq_crash() bwipe! endfunc +" Check that z= works even when 'nospell' is set. This test uses one of the +" tests in Test_spellsuggest_option_number() just to verify that z= basically +" works and that "E756: Spell checking is not enabled" is not generated. +func Test_zeq_nospell() + new + set nospell spellsuggest=1,best + call setline(1, 'A baord') + try + norm $1z= + call assert_equal('A board', getline(1)) + catch + call assert_report("Caught exception: " . v:exception) + endtry + set spell& spellsuggest& + bwipe! +endfunc + +" Check that "E756: Spell checking is not possible" is reported when z= is +" executed and 'spelllang' is empty. +func Test_zeq_no_spelllang() + new + set spelllang= spellsuggest=1,best + call setline(1, 'A baord') + call assert_fails('normal $1z=', 'E756:') + set spelllang& spellsuggest& + bwipe! +endfunc + " Check handling a word longer than MAXWLEN. func Test_spell_long_word() set enc=utf-8 diff --git a/src/nvim/testdir/test_spell_utf8.vim b/src/nvim/testdir/test_spell_utf8.vim new file mode 100644 index 0000000000..cafdb97f28 --- /dev/null +++ b/src/nvim/testdir/test_spell_utf8.vim @@ -0,0 +1,773 @@ +" Test for spell checking with 'encoding' set to utf-8 + +source check.vim +CheckFeature spell + +scriptencoding utf-8 + +func TearDown() + set nospell + call delete('Xtest.aff') + call delete('Xtest.dic') + call delete('Xtest.utf-8.add') + call delete('Xtest.utf-8.add.spl') + call delete('Xtest.utf-8.spl') + call delete('Xtest.utf-8.sug') +endfunc + +let g:test_data_aff1 = [ + \"SET ISO8859-1", + \"TRY esianrtolcdugmphbyfvkwjkqxz-ëéèêïîäàâöüû'ESIANRTOLCDUGMPHBYFVKWJKQXZ", + \"", + \"FOL àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ", + \"LOW àáâãäåæçèéêëìíîïðñòóôõöøùúûüýþßÿ", + \"UPP ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßÿ", + \"", + \"SOFOFROM abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xBF", + \"SOFOTO ebctefghejklnnepkrstevvkesebctefghejklnnepkrstevvkeseeeeeeeceeeeeeeedneeeeeeeeeeepseeeeeeeeceeeeeeeedneeeeeeeeeeep?", + \"", + \"MIDWORD\t'-", + \"", + \"KEP =", + \"RAR ?", + \"BAD !", + \"", + \"PFX I N 1", + \"PFX I 0 in .", + \"", + \"PFX O Y 1", + \"PFX O 0 out .", + \"", + \"SFX S Y 2", + \"SFX S 0 s [^s]", + \"SFX S 0 es s", + \"", + \"SFX N N 3", + \"SFX N 0 en [^n]", + \"SFX N 0 nen n", + \"SFX N 0 n .", + \"", + \"REP 3", + \"REP g ch", + \"REP ch g", + \"REP svp s.v.p.", + \"", + \"MAP 9", + \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", + \"MAP e\xE8\xE9\xEA\xEB", + \"MAP i\xEC\xED\xEE\xEF", + \"MAP o\xF2\xF3\xF4\xF5\xF6", + \"MAP u\xF9\xFA\xFB\xFC", + \"MAP n\xF1", + \"MAP c\xE7", + \"MAP y\xFF\xFD", + \"MAP s\xDF" + \ ] +let g:test_data_dic1 = [ + \"123456", + \"test/NO", + \"# comment", + \"wrong", + \"Comment", + \"OK", + \"uk", + \"put/ISO", + \"the end", + \"deol", + \"d\xE9\xF4r", + \ ] +let g:test_data_aff2 = [ + \"SET ISO8859-1", + \"", + \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", + \"", + \"PFXPOSTPONE", + \"", + \"MIDWORD\t'-", + \"", + \"KEP =", + \"RAR ?", + \"BAD !", + \"", + \"PFX I N 1", + \"PFX I 0 in .", + \"", + \"PFX O Y 1", + \"PFX O 0 out [a-z]", + \"", + \"SFX S Y 2", + \"SFX S 0 s [^s]", + \"SFX S 0 es s", + \"", + \"SFX N N 3", + \"SFX N 0 en [^n]", + \"SFX N 0 nen n", + \"SFX N 0 n .", + \"", + \"REP 3", + \"REP g ch", + \"REP ch g", + \"REP svp s.v.p.", + \"", + \"MAP 9", + \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", + \"MAP e\xE8\xE9\xEA\xEB", + \"MAP i\xEC\xED\xEE\xEF", + \"MAP o\xF2\xF3\xF4\xF5\xF6", + \"MAP u\xF9\xFA\xFB\xFC", + \"MAP n\xF1", + \"MAP c\xE7", + \"MAP y\xFF\xFD", + \"MAP s\xDF", + \ ] +let g:test_data_aff3 = [ + \"SET ISO8859-1", + \"", + \"COMPOUNDMIN 3", + \"COMPOUNDRULE m*", + \"NEEDCOMPOUND x", + \ ] +let g:test_data_dic3 = [ + \"1234", + \"foo/m", + \"bar/mx", + \"m\xEF/m", + \"la/mx", + \ ] +let g:test_data_aff4 = [ + \"SET ISO8859-1", + \"", + \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", + \"", + \"COMPOUNDRULE m+", + \"COMPOUNDRULE sm*e", + \"COMPOUNDRULE sm+", + \"COMPOUNDMIN 3", + \"COMPOUNDWORDMAX 3", + \"COMPOUNDFORBIDFLAG t", + \"", + \"COMPOUNDSYLMAX 5", + \"SYLLABLE a\xE1e\xE9i\xEDo\xF3\xF6\xF5u\xFA\xFC\xFBy/aa/au/ea/ee/ei/ie/oa/oe/oo/ou/uu/ui", + \"", + \"MAP 9", + \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", + \"MAP e\xE8\xE9\xEA\xEB", + \"MAP i\xEC\xED\xEE\xEF", + \"MAP o\xF2\xF3\xF4\xF5\xF6", + \"MAP u\xF9\xFA\xFB\xFC", + \"MAP n\xF1", + \"MAP c\xE7", + \"MAP y\xFF\xFD", + \"MAP s\xDF", + \"", + \"NEEDAFFIX x", + \"", + \"PFXPOSTPONE", + \"", + \"MIDWORD '-", + \"", + \"SFX q N 1", + \"SFX q 0 -ok .", + \"", + \"SFX a Y 2", + \"SFX a 0 s .", + \"SFX a 0 ize/t .", + \"", + \"PFX p N 1", + \"PFX p 0 pre .", + \"", + \"PFX P N 1", + \"PFX P 0 nou .", + \ ] +let g:test_data_dic4 = [ + \"1234", + \"word/mP", + \"util/am", + \"pro/xq", + \"tomato/m", + \"bork/mp", + \"start/s", + \"end/e", + \ ] +let g:test_data_aff5 = [ + \"SET ISO8859-1", + \"", + \"FLAG long", + \"", + \"NEEDAFFIX !!", + \"", + \"COMPOUNDRULE ssmm*ee", + \"", + \"NEEDCOMPOUND xx", + \"COMPOUNDPERMITFLAG pp", + \"", + \"SFX 13 Y 1", + \"SFX 13 0 bork .", + \"", + \"SFX a1 Y 1", + \"SFX a1 0 a1 .", + \"", + \"SFX a\xE9 Y 1", + \"SFX a\xE9 0 a\xE9 .", + \"", + \"PFX zz Y 1", + \"PFX zz 0 pre/pp .", + \"", + \"PFX yy Y 1", + \"PFX yy 0 nou .", + \ ] +let g:test_data_dic5 = [ + \"1234", + \"foo/a1a\xE9!!", + \"bar/zz13ee", + \"start/ss", + \"end/eeyy", + \"middle/mmxx", + \ ] +let g:test_data_aff6 = [ + \"SET ISO8859-1", + \"", + \"FLAG caplong", + \"", + \"NEEDAFFIX A!", + \"", + \"COMPOUNDRULE sMm*Ee", + \"", + \"NEEDCOMPOUND Xx", + \"", + \"COMPOUNDPERMITFLAG p", + \"", + \"SFX N3 Y 1", + \"SFX N3 0 bork .", + \"", + \"SFX A1 Y 1", + \"SFX A1 0 a1 .", + \"", + \"SFX A\xE9 Y 1", + \"SFX A\xE9 0 a\xE9 .", + \"", + \"PFX Zz Y 1", + \"PFX Zz 0 pre/p .", + \ ] +let g:test_data_dic6 = [ + \"1234", + \"mee/A1A\xE9A!", + \"bar/ZzN3Ee", + \"lead/s", + \"end/Ee", + \"middle/MmXx", + \ ] +let g:test_data_aff7 = [ + \"SET ISO8859-1", + \"", + \"FLAG num", + \"", + \"NEEDAFFIX 9999", + \"", + \"COMPOUNDRULE 2,77*123", + \"", + \"NEEDCOMPOUND 1", + \"COMPOUNDPERMITFLAG 432", + \"", + \"SFX 61003 Y 1", + \"SFX 61003 0 meat .", + \"", + \"SFX 0 Y 1", + \"SFX 0 0 zero .", + \"", + \"SFX 391 Y 1", + \"SFX 391 0 a1 .", + \"", + \"SFX 111 Y 1", + \"SFX 111 0 a\xE9 .", + \"", + \"PFX 17 Y 1", + \"PFX 17 0 pre/432 .", + \ ] +let g:test_data_dic7 = [ + \"1234", + \"mee/0,391,111,9999", + \"bar/17,61003,123", + \"lead/2", + \"tail/123", + \"middle/77,1", + \ ] +let g:test_data_aff8 = [ + \"SET ISO8859-1", + \"", + \"NOSPLITSUGS", + \ ] +let g:test_data_dic8 = [ + \"1234", + \"foo", + \"bar", + \"faabar", + \ ] +let g:test_data_aff9 = [ + \ ] +let g:test_data_dic9 = [ + \"1234", + \"foo", + \"bar", + \ ] +let g:test_data_aff10 = [ + \"COMPOUNDRULE se", + \"COMPOUNDPERMITFLAG p", + \"", + \"SFX A Y 1", + \"SFX A 0 able/Mp .", + \"", + \"SFX M Y 1", + \"SFX M 0 s .", + \ ] +let g:test_data_dic10 = [ + \"1234", + \"drink/As", + \"table/e", + \ ] +let g:test_data_aff_sal = [ + \"SET ISO8859-1", + \"TRY esianrtolcdugmphbyfvkwjkqxz-\xEB\xE9\xE8\xEA\xEF\xEE\xE4\xE0\xE2\xF6\xFC\xFB'ESIANRTOLCDUGMPHBYFVKWJKQXZ", + \"", + \"FOL \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"LOW \xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xDF\xFF", + \"UPP \xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xFF", + \"", + \"MIDWORD\t'-", + \"", + \"KEP =", + \"RAR ?", + \"BAD !", + \"", + \"PFX I N 1", + \"PFX I 0 in .", + \"", + \"PFX O Y 1", + \"PFX O 0 out .", + \"", + \"SFX S Y 2", + \"SFX S 0 s [^s]", + \"SFX S 0 es s", + \"", + \"SFX N N 3", + \"SFX N 0 en [^n]", + \"SFX N 0 nen n", + \"SFX N 0 n .", + \"", + \"REP 3", + \"REP g ch", + \"REP ch g", + \"REP svp s.v.p.", + \"", + \"MAP 9", + \"MAP a\xE0\xE1\xE2\xE3\xE4\xE5", + \"MAP e\xE8\xE9\xEA\xEB", + \"MAP i\xEC\xED\xEE\xEF", + \"MAP o\xF2\xF3\xF4\xF5\xF6", + \"MAP u\xF9\xFA\xFB\xFC", + \"MAP n\xF1", + \"MAP c\xE7", + \"MAP y\xFF\xFD", + \"MAP s\xDF", + \"", + \"SAL AH(AEIOUY)-^ *H", + \"SAL AR(AEIOUY)-^ *R", + \"SAL A(HR)^ *", + \"SAL A^ *", + \"SAL AH(AEIOUY)- H", + \"SAL AR(AEIOUY)- R", + \"SAL A(HR) _", + \"SAL \xC0^ *", + \"SAL \xC5^ *", + \"SAL BB- _", + \"SAL B B", + \"SAL CQ- _", + \"SAL CIA X", + \"SAL CH X", + \"SAL C(EIY)- S", + \"SAL CK K", + \"SAL COUGH^ KF", + \"SAL CC< C", + \"SAL C K", + \"SAL DG(EIY) K", + \"SAL DD- _", + \"SAL D T", + \"SAL \xC9< E", + \"SAL EH(AEIOUY)-^ *H", + \"SAL ER(AEIOUY)-^ *R", + \"SAL E(HR)^ *", + \"SAL ENOUGH^$ *NF", + \"SAL E^ *", + \"SAL EH(AEIOUY)- H", + \"SAL ER(AEIOUY)- R", + \"SAL E(HR) _", + \"SAL FF- _", + \"SAL F F", + \"SAL GN^ N", + \"SAL GN$ N", + \"SAL GNS$ NS", + \"SAL GNED$ N", + \"SAL GH(AEIOUY)- K", + \"SAL GH _", + \"SAL GG9 K", + \"SAL G K", + \"SAL H H", + \"SAL IH(AEIOUY)-^ *H", + \"SAL IR(AEIOUY)-^ *R", + \"SAL I(HR)^ *", + \"SAL I^ *", + \"SAL ING6 N", + \"SAL IH(AEIOUY)- H", + \"SAL IR(AEIOUY)- R", + \"SAL I(HR) _", + \"SAL J K", + \"SAL KN^ N", + \"SAL KK- _", + \"SAL K K", + \"SAL LAUGH^ LF", + \"SAL LL- _", + \"SAL L L", + \"SAL MB$ M", + \"SAL MM M", + \"SAL M M", + \"SAL NN- _", + \"SAL N N", + \"SAL OH(AEIOUY)-^ *H", + \"SAL OR(AEIOUY)-^ *R", + \"SAL O(HR)^ *", + \"SAL O^ *", + \"SAL OH(AEIOUY)- H", + \"SAL OR(AEIOUY)- R", + \"SAL O(HR) _", + \"SAL PH F", + \"SAL PN^ N", + \"SAL PP- _", + \"SAL P P", + \"SAL Q K", + \"SAL RH^ R", + \"SAL ROUGH^ RF", + \"SAL RR- _", + \"SAL R R", + \"SAL SCH(EOU)- SK", + \"SAL SC(IEY)- S", + \"SAL SH X", + \"SAL SI(AO)- X", + \"SAL SS- _", + \"SAL S S", + \"SAL TI(AO)- X", + \"SAL TH @", + \"SAL TCH-- _", + \"SAL TOUGH^ TF", + \"SAL TT- _", + \"SAL T T", + \"SAL UH(AEIOUY)-^ *H", + \"SAL UR(AEIOUY)-^ *R", + \"SAL U(HR)^ *", + \"SAL U^ *", + \"SAL UH(AEIOUY)- H", + \"SAL UR(AEIOUY)- R", + \"SAL U(HR) _", + \"SAL V^ W", + \"SAL V F", + \"SAL WR^ R", + \"SAL WH^ W", + \"SAL W(AEIOU)- W", + \"SAL X^ S", + \"SAL X KS", + \"SAL Y(AEIOU)- Y", + \"SAL ZZ- _", + \"SAL Z S", + \ ] + +func LoadAffAndDic(aff_contents, dic_contents) + set enc=utf-8 + set spellfile= + call writefile(a:aff_contents, "Xtest.aff") + call writefile(a:dic_contents, "Xtest.dic") + " Generate a .spl file from a .dic and .aff file. + mkspell! Xtest Xtest + " use that spell file + set spl=Xtest.utf-8.spl spell +endfunc + +func ListWords() + spelldump + %yank + quit + return split(@", "\n") +endfunc + +func TestGoodBadBase() + exe '1;/^good:' + normal 0f:]s + let prevbad = '' + let result = [] + while 1 + let [bad, a] = spellbadword() + if bad == '' || bad == prevbad || bad == 'badend' + break + endif + let prevbad = bad + " let lst = bad->spellsuggest(3) + let lst = spellsuggest(bad, 3) + normal mm + + call add(result, [bad, lst]) + normal `m]s + endwhile + return result +endfunc + +func RunGoodBad(good, bad, expected_words, expected_bad_words) + %bwipe! + call setline(1, ['', "good: ", a:good, a:bad, " badend "]) + let words = ListWords() + call assert_equal(a:expected_words, words[1:-1]) + let bad_words = TestGoodBadBase() + call assert_equal(a:expected_bad_words, bad_words) + %bwipe! +endfunc + +func Test_spell_basic() + call LoadAffAndDic(g:test_data_aff1, g:test_data_dic1) + call RunGoodBad("wrong OK puts. Test the end", + \ "bad: inputs comment ok Ok. test d\u00E9\u00F4l end the", + \["Comment", "deol", "d\u00E9\u00F4r", "input", "OK", "output", "outputs", "outtest", "put", "puts", + \ "test", "testen", "testn", "the end", "uk", "wrong"], + \[ + \ ["bad", ["put", "uk", "OK"]], + \ ["inputs", ["input", "puts", "outputs"]], + \ ["comment", ["Comment", "outtest", "the end"]], + \ ["ok", ["OK", "uk", "put"]], + \ ["Ok", ["OK", "Uk", "Put"]], + \ ["test", ["Test", "testn", "testen"]], + \ ["d\u00E9\u00F4l", ["deol", "d\u00E9\u00F4r", "test"]], + \ ["end", ["put", "uk", "test"]], + \ ["the", ["put", "uk", "test"]], + \ ] + \ ) + + call assert_equal("gebletegek", soundfold('goobledygoook')) + " call assert_equal("kepereneven", 'kóopërÿnôven'->soundfold()) + call assert_equal("kepereneven", soundfold('kóopërÿnôven')) + call assert_equal("everles gesvets etele", soundfold('oeverloos gezwets edale')) +endfunc + +" Postponed prefixes +func Test_spell_prefixes() + call LoadAffAndDic(g:test_data_aff2, g:test_data_dic1) + call RunGoodBad("puts", + \ "bad: inputs comment ok Ok end the. test d\u00E9\u00F4l", + \ ["Comment", "deol", "d\u00E9\u00F4r", "OK", "put", "input", "output", "puts", "outputs", "test", "outtest", "testen", "testn", "the end", "uk", "wrong"], + \ [ + \ ["bad", ["put", "uk", "OK"]], + \ ["inputs", ["input", "puts", "outputs"]], + \ ["comment", ["Comment"]], + \ ["ok", ["OK", "uk", "put"]], + \ ["Ok", ["OK", "Uk", "Put"]], + \ ["end", ["put", "uk", "deol"]], + \ ["the", ["put", "uk", "test"]], + \ ["test", ["Test", "testn", "testen"]], + \ ["d\u00E9\u00F4l", ["deol", "d\u00E9\u00F4r", "test"]], + \ ]) +endfunc + +"Compound words +func Test_spell_compound() + throw 'skipped: TODO: ' + call LoadAffAndDic(g:test_data_aff3, g:test_data_dic3) + call RunGoodBad("foo m\u00EF foobar foofoobar barfoo barbarfoo", + \ "bad: bar la foom\u00EF barm\u00EF m\u00EFfoo m\u00EFbar m\u00EFm\u00EF lala m\u00EFla lam\u00EF foola labar", + \ ["foo", "m\u00EF"], + \ [ + \ ["bad", ["foo", "m\u00EF"]], + \ ["bar", ["barfoo", "foobar", "foo"]], + \ ["la", ["m\u00EF", "foo"]], + \ ["foom\u00EF", ["foo m\u00EF", "foo", "foofoo"]], + \ ["barm\u00EF", ["barfoo", "m\u00EF", "barbar"]], + \ ["m\u00EFfoo", ["m\u00EF foo", "foo", "foofoo"]], + \ ["m\u00EFbar", ["foobar", "barbar", "m\u00EF"]], + \ ["m\u00EFm\u00EF", ["m\u00EF m\u00EF", "m\u00EF"]], + \ ["lala", []], + \ ["m\u00EFla", ["m\u00EF", "m\u00EF m\u00EF"]], + \ ["lam\u00EF", ["m\u00EF", "m\u00EF m\u00EF"]], + \ ["foola", ["foo", "foobar", "foofoo"]], + \ ["labar", ["barbar", "foobar"]], + \ ]) + + call LoadAffAndDic(g:test_data_aff4, g:test_data_dic4) + call RunGoodBad("word util bork prebork start end wordutil wordutils pro-ok bork borkbork borkborkbork borkborkborkbork borkborkborkborkbork tomato tomatotomato startend startword startwordword startwordend startwordwordend startwordwordwordend prebork preborkbork preborkborkbork nouword", + \ "bad: wordutilize pro borkborkborkborkborkbork tomatotomatotomato endstart endend startstart wordend wordstart preborkprebork preborkpreborkbork startwordwordwordwordend borkpreborkpreborkbork utilsbork startnouword", + \ ["bork", "prebork", "end", "pro-ok", "start", "tomato", "util", "utilize", "utils", "word", "nouword"], + \ [ + \ ["bad", ["end", "bork", "word"]], + \ ["wordutilize", ["word utilize", "wordutils", "wordutil"]], + \ ["pro", ["bork", "word", "end"]], + \ ["borkborkborkborkborkbork", ["bork borkborkborkborkbork", "borkbork borkborkborkbork", "borkborkbork borkborkbork"]], + \ ["tomatotomatotomato", ["tomato tomatotomato", "tomatotomato tomato", "tomato tomato tomato"]], + \ ["endstart", ["end start", "start"]], + \ ["endend", ["end end", "end"]], + \ ["startstart", ["start start"]], + \ ["wordend", ["word end", "word", "wordword"]], + \ ["wordstart", ["word start", "bork start"]], + \ ["preborkprebork", ["prebork prebork", "preborkbork", "preborkborkbork"]], + \ ["preborkpreborkbork", ["prebork preborkbork", "preborkborkbork", "preborkborkborkbork"]], + \ ["startwordwordwordwordend", ["startwordwordwordword end", "startwordwordwordword", "start wordwordwordword end"]], + \ ["borkpreborkpreborkbork", ["bork preborkpreborkbork", "bork prebork preborkbork", "bork preborkprebork bork"]], + \ ["utilsbork", ["utilbork", "utils bork", "util bork"]], + \ ["startnouword", ["start nouword", "startword", "startborkword"]], + \ ]) + +endfunc + +" Test affix flags with two characters +func Test_spell_affix() + throw 'skipped: TODO: ' + call LoadAffAndDic(g:test_data_aff5, g:test_data_dic5) + call RunGoodBad("fooa1 fooa\u00E9 bar prebar barbork prebarbork startprebar start end startend startmiddleend nouend", + \ "bad: foo fooa2 prabar probarbirk middle startmiddle middleend endstart startprobar startnouend", + \ ["bar", "barbork", "end", "fooa1", "fooa\u00E9", "nouend", "prebar", "prebarbork", "start"], + \ [ + \ ["bad", ["bar", "end", "fooa1"]], + \ ["foo", ["fooa1", "fooa\u00E9", "bar"]], + \ ["fooa2", ["fooa1", "fooa\u00E9", "bar"]], + \ ["prabar", ["prebar", "bar", "bar bar"]], + \ ["probarbirk", ["prebarbork"]], + \ ["middle", []], + \ ["startmiddle", ["startmiddleend", "startmiddlebar"]], + \ ["middleend", []], + \ ["endstart", ["end start", "start"]], + \ ["startprobar", ["startprebar", "start prebar", "startbar"]], + \ ["startnouend", ["start nouend", "startend"]], + \ ]) + + call LoadAffAndDic(g:test_data_aff6, g:test_data_dic6) + call RunGoodBad("meea1 meea\u00E9 bar prebar barbork prebarbork leadprebar lead end leadend leadmiddleend", + \ "bad: mee meea2 prabar probarbirk middle leadmiddle middleend endlead leadprobar", + \ ["bar", "barbork", "end", "lead", "meea1", "meea\u00E9", "prebar", "prebarbork"], + \ [ + \ ["bad", ["bar", "end", "lead"]], + \ ["mee", ["meea1", "meea\u00E9", "bar"]], + \ ["meea2", ["meea1", "meea\u00E9", "lead"]], + \ ["prabar", ["prebar", "bar", "leadbar"]], + \ ["probarbirk", ["prebarbork"]], + \ ["middle", []], + \ ["leadmiddle", ["leadmiddleend", "leadmiddlebar"]], + \ ["middleend", []], + \ ["endlead", ["end lead", "lead", "end end"]], + \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], + \ ]) + + call LoadAffAndDic(g:test_data_aff7, g:test_data_dic7) + call RunGoodBad("meea1 meezero meea\u00E9 bar prebar barmeat prebarmeat leadprebar lead tail leadtail leadmiddletail", + \ "bad: mee meea2 prabar probarmaat middle leadmiddle middletail taillead leadprobar", + \ ["bar", "barmeat", "lead", "meea1", "meea\u00E9", "meezero", "prebar", "prebarmeat", "tail"], + \ [ + \ ["bad", ["bar", "lead", "tail"]], + \ ["mee", ["meea1", "meea\u00E9", "bar"]], + \ ["meea2", ["meea1", "meea\u00E9", "lead"]], + \ ["prabar", ["prebar", "bar", "leadbar"]], + \ ["probarmaat", ["prebarmeat"]], + \ ["middle", []], + \ ["leadmiddle", ["leadmiddlebar"]], + \ ["middletail", []], + \ ["taillead", ["tail lead", "tail"]], + \ ["leadprobar", ["leadprebar", "lead prebar", "leadbar"]], + \ ]) +endfunc + +func Test_spell_NOSLITSUGS() + call LoadAffAndDic(g:test_data_aff8, g:test_data_dic8) + call RunGoodBad("foo bar faabar", "bad: foobar barfoo", + \ ["bar", "faabar", "foo"], + \ [ + \ ["bad", ["bar", "foo"]], + \ ["foobar", ["faabar", "foo bar", "bar"]], + \ ["barfoo", ["bar foo", "bar", "foo"]], + \ ]) +endfunc + +" Numbers +func Test_spell_Numbers() + call LoadAffAndDic(g:test_data_aff9, g:test_data_dic9) + call RunGoodBad("0b1011 0777 1234 0x01ff", "", + \ ["bar", "foo"], + \ [ + \ ]) +endfunc + +" Affix flags +func Test_spell_affix_flags() + throw 'skipped: TODO: ' + call LoadAffAndDic(g:test_data_aff10, g:test_data_dic10) + call RunGoodBad("drink drinkable drinkables drinktable drinkabletable", + \ "bad: drinks drinkstable drinkablestable", + \ ["drink", "drinkable", "drinkables", "table"], + \ [['bad', []], + \ ['drinks', ['drink']], + \ ['drinkstable', ['drinktable', 'drinkable', 'drink table']], + \ ['drinkablestable', ['drinkabletable', 'drinkables table', 'drinkable table']], + \ ]) +endfunc + +function FirstSpellWord() + call feedkeys("/^start:\n", 'tx') + normal ]smm + let [str, a] = spellbadword() + return str +endfunc + +function SecondSpellWord() + normal `m]s + let [str, a] = spellbadword() + return str +endfunc + +" Test with SAL instead of SOFO items; test automatic reloading +func Test_spell_sal_and_addition() + set spellfile= + call writefile(g:test_data_dic1, "Xtest.dic") + call writefile(g:test_data_aff_sal, "Xtest.aff") + mkspell! Xtest Xtest + set spl=Xtest.utf-8.spl spell + call assert_equal('kbltykk', soundfold('goobledygoook')) + call assert_equal('kprnfn', soundfold('kóopërÿnôven')) + call assert_equal('*fls kswts tl', soundfold('oeverloos gezwets edale')) + + "also use an addition file + call writefile(["/regions=usgbnz", "elequint/2", "elekwint/3"], "Xtest.utf-8.add") + mkspell! Xtest.utf-8.add.spl Xtest.utf-8.add + + bwipe! + call setline(1, ["start: elequint test elekwint test elekwent asdf"]) + + set spellfile=Xtest.utf-8.add + call assert_equal("elekwent", FirstSpellWord()) + + set spl=Xtest_us.utf-8.spl + call assert_equal("elequint", FirstSpellWord()) + call assert_equal("elekwint", SecondSpellWord()) + + set spl=Xtest_gb.utf-8.spl + call assert_equal("elekwint", FirstSpellWord()) + call assert_equal("elekwent", SecondSpellWord()) + + set spl=Xtest_nz.utf-8.spl + call assert_equal("elequint", FirstSpellWord()) + call assert_equal("elekwent", SecondSpellWord()) + + set spl=Xtest_ca.utf-8.spl + call assert_equal("elequint", FirstSpellWord()) + call assert_equal("elekwint", SecondSpellWord()) +endfunc + +func Test_spellfile_value() + set spellfile=Xdir/Xtest.utf-8.add + set spellfile=Xdir/Xtest.utf-8.add,Xtest_other.add +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_spellfile.vim b/src/nvim/testdir/test_spellfile.vim new file mode 100644 index 0000000000..729467b556 --- /dev/null +++ b/src/nvim/testdir/test_spellfile.vim @@ -0,0 +1,240 @@ +" Test for commands that operate on the spellfile. + +source shared.vim +source check.vim + +CheckFeature spell +CheckFeature syntax + +func Test_spell_normal() + new + call append(0, ['1 good', '2 goood', '3 goood']) + set spell spellfile=./Xspellfile.add spelllang=en + let oldlang=v:lang + lang C + + " Test for zg + 1 + norm! ]s + call assert_equal('2 goood', getline('.')) + norm! zg + 1 + let a=execute('unsilent :norm! ]s') + call assert_equal('1 good', getline('.')) + call assert_equal('search hit BOTTOM, continuing at TOP', a[1:]) + let cnt=readfile('./Xspellfile.add') + call assert_equal('goood', cnt[0]) + + " Test for zw + 2 + norm! $zw + 1 + norm! ]s + call assert_equal('2 goood', getline('.')) + let cnt=readfile('./Xspellfile.add') + call assert_equal('#oood', cnt[0]) + call assert_equal('goood/!', cnt[1]) + + " Test for :spellrare + spellrare rare + let cnt=readfile('./Xspellfile.add') + call assert_equal(['#oood', 'goood/!', 'rare/?'], cnt) + + " Make sure :spellundo works for rare words. + spellundo rare + let cnt=readfile('./Xspellfile.add') + call assert_equal(['#oood', 'goood/!', '#are/?'], cnt) + + " Test for zg in visual mode + let a=execute('unsilent :norm! V$zg') + call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) + 1 + norm! ]s + call assert_equal('3 goood', getline('.')) + let cnt=readfile('./Xspellfile.add') + call assert_equal('2 goood', cnt[3]) + " Remove "2 good" from spellfile + 2 + let a=execute('unsilent norm! V$zw') + call assert_equal("Word '2 goood' added to ./Xspellfile.add", a[1:]) + let cnt=readfile('./Xspellfile.add') + call assert_equal('2 goood/!', cnt[4]) + + " Test for zG + let a=execute('unsilent norm! V$zG') + call assert_match("Word '2 goood' added to .*", a) + let fname=matchstr(a, 'to\s\+\zs\f\+$') + let cnt=readfile(fname) + call assert_equal('2 goood', cnt[0]) + + " Test for zW + let a=execute('unsilent norm! V$zW') + call assert_match("Word '2 goood' added to .*", a) + let cnt=readfile(fname) + call assert_equal('# goood', cnt[0]) + call assert_equal('2 goood/!', cnt[1]) + + " Test for zuW + let a=execute('unsilent norm! V$zuW') + call assert_match("Word '2 goood' removed from .*", a) + let cnt=readfile(fname) + call assert_equal('# goood', cnt[0]) + call assert_equal('# goood/!', cnt[1]) + + " Test for zuG + let a=execute('unsilent norm! $zG') + call assert_match("Word 'goood' added to .*", a) + let cnt=readfile(fname) + call assert_equal('# goood', cnt[0]) + call assert_equal('# goood/!', cnt[1]) + call assert_equal('goood', cnt[2]) + let a=execute('unsilent norm! $zuG') + let cnt=readfile(fname) + call assert_match("Word 'goood' removed from .*", a) + call assert_equal('# goood', cnt[0]) + call assert_equal('# goood/!', cnt[1]) + call assert_equal('#oood', cnt[2]) + " word not found in wordlist + let a=execute('unsilent norm! V$zuG') + let cnt=readfile(fname) + call assert_match("", a) + call assert_equal('# goood', cnt[0]) + call assert_equal('# goood/!', cnt[1]) + call assert_equal('#oood', cnt[2]) + + " Test for zug + call delete('./Xspellfile.add') + 2 + let a=execute('unsilent norm! $zg') + let cnt=readfile('./Xspellfile.add') + call assert_equal('goood', cnt[0]) + let a=execute('unsilent norm! $zug') + call assert_match("Word 'goood' removed from \./Xspellfile.add", a) + let cnt=readfile('./Xspellfile.add') + call assert_equal('#oood', cnt[0]) + " word not in wordlist + let a=execute('unsilent norm! V$zug') + call assert_match('', a) + let cnt=readfile('./Xspellfile.add') + call assert_equal('#oood', cnt[0]) + + " Test for zuw + call delete('./Xspellfile.add') + 2 + let a=execute('unsilent norm! Vzw') + let cnt=readfile('./Xspellfile.add') + call assert_equal('2 goood/!', cnt[0]) + let a=execute('unsilent norm! Vzuw') + call assert_match("Word '2 goood' removed from \./Xspellfile.add", a) + let cnt=readfile('./Xspellfile.add') + call assert_equal('# goood/!', cnt[0]) + " word not in wordlist + let a=execute('unsilent norm! $zug') + call assert_match('', a) + let cnt=readfile('./Xspellfile.add') + call assert_equal('# goood/!', cnt[0]) + + " add second entry to spellfile setting + set spellfile=./Xspellfile.add,./Xspellfile2.add + call delete('./Xspellfile.add') + 2 + let a=execute('unsilent norm! $2zg') + let cnt=readfile('./Xspellfile2.add') + call assert_match("Word 'goood' added to ./Xspellfile2.add", a) + call assert_equal('goood', cnt[0]) + + " Test for :spellgood! + let temp = execute(':spe!0/0') + call assert_match('Invalid region', temp) + let spellfile = matchstr(temp, 'Invalid region nr in \zs.*\ze line \d: 0') + call assert_equal(['# goood', '# goood/!', '#oood', '0/0'], readfile(spellfile)) + + " Test for :spellrare! + :spellrare! raare + call assert_equal(['# goood', '# goood/!', '#oood', '0/0', 'raare/?'], readfile(spellfile)) + call delete(spellfile) + + " clean up + exe "lang" oldlang + call delete("./Xspellfile.add") + call delete("./Xspellfile2.add") + call delete("./Xspellfile.add.spl") + call delete("./Xspellfile2.add.spl") + + " zux -> no-op + 2 + norm! $zux + call assert_equal([], glob('Xspellfile.add',0,1)) + call assert_equal([], glob('Xspellfile2.add',0,1)) + + set spellfile= + bw! +endfunc + +" Test CHECKCOMPOUNDPATTERN (see :help spell-CHECKCOMPOUNDPATTERN) +func Test_spellfile_CHECKCOMPOUNDPATTERN() + call writefile(['4', + \ 'one/c', + \ 'two/c', + \ 'three/c', + \ 'four'], 'XtestCHECKCOMPOUNDPATTERN.dic') + " Forbid compound words where first word ends with 'wo' and second starts with 'on'. + call writefile(['CHECKCOMPOUNDPATTERN 1', + \ 'CHECKCOMPOUNDPATTERN wo on', + \ 'COMPOUNDFLAG c'], 'XtestCHECKCOMPOUNDPATTERN.aff') + + let output = execute('mkspell! XtestCHECKCOMPOUNDPATTERN-utf8.spl XtestCHECKCOMPOUNDPATTERN') + set spell spelllang=XtestCHECKCOMPOUNDPATTERN-utf8.spl + + " Check valid words with and without valid compounds. + for goodword in ['one', 'two', 'three', 'four', + \ 'oneone', 'onetwo', 'onethree', + \ 'twotwo', 'twothree', + \ 'threeone', 'threetwo', 'threethree', + \ 'onetwothree', 'onethreetwo', 'twothreeone', 'oneoneone'] + call assert_equal(['', ''], spellbadword(goodword), goodword) + endfor + + " Compounds 'twoone' or 'threetwoone' should be forbidden by CHECKCOMPOUNPATTERN. + " 'four' does not have the 'c' flag in *.aff file so no compound. + " 'five' is not in the *.dic file. + for badword in ['five', 'onetwox', + \ 'twoone', 'threetwoone', + \ 'fourone', 'onefour'] + call assert_equal([badword, 'bad'], spellbadword(badword)) + endfor + + set spell& spelllang& + call delete('XtestCHECKCOMPOUNDPATTERN.dic') + call delete('XtestCHECKCOMPOUNDPATTERN.aff') + call delete('XtestCHECKCOMPOUNDPATTERN-utf8.spl') +endfunc + +" Test COMMON (better suggestions with common words, see :help spell-COMMON) +func Test_spellfile_COMMON() + call writefile(['7', + \ 'and', + \ 'ant', + \ 'end', + \ 'any', + \ 'tee', + \ 'the', + \ 'ted'], 'XtestCOMMON.dic') + call writefile(['COMMON the and'], 'XtestCOMMON.aff') + + let output = execute('mkspell! XtestCOMMON-utf8.spl XtestCOMMON') + set spell spelllang=XtestCOMMON-utf8.spl + + " COMMON words 'and' and 'the' should be the top suggestions. + call assert_equal(['and', 'ant'], spellsuggest('anr', 2)) + call assert_equal(['and', 'end'], spellsuggest('ond', 2)) + call assert_equal(['the', 'ted'], spellsuggest('tha', 2)) + call assert_equal(['the', 'tee'], spellsuggest('dhe', 2)) + + set spell& spelllang& + call delete('XtestCOMMON.dic') + call delete('XtestCOMMON.aff') + call delete('XtestCOMMON-utf8.spl') +endfunc + +" vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_startup_utf8.vim b/src/nvim/testdir/test_startup_utf8.vim index 1b3d2184a0..bb4304396e 100644 --- a/src/nvim/testdir/test_startup_utf8.vim +++ b/src/nvim/testdir/test_startup_utf8.vim @@ -1,5 +1,6 @@ " Tests for startup using utf-8. +source check.vim source shared.vim source screendump.vim @@ -73,7 +74,7 @@ func Test_detect_ambiwidth() \ 'call test_option_not_set("ambiwidth")', \ 'redraw', \ ], 'Xscript') - let buf = RunVimInTerminal('-S Xscript', {}) + let buf = RunVimInTerminal('-S Xscript', #{keep_t_u7: 1}) call term_wait(buf) call term_sendkeys(buf, "S\<C-R>=&ambiwidth\<CR>\<Esc>") call WaitForAssert({-> assert_match('single', term_getline(buf, 1))}) diff --git a/src/nvim/testdir/test_statusline.vim b/src/nvim/testdir/test_statusline.vim index f5b6446108..a3e4dcdd25 100644 --- a/src/nvim/testdir/test_statusline.vim +++ b/src/nvim/testdir/test_statusline.vim @@ -241,6 +241,26 @@ func Test_statusline() call assert_match('^vimLineComment\s*$', s:get_statusline()) syntax off + "%{%expr%}: evaluates enxpressions present in result of expr + func! Inner_eval() + return '%n some other text' + endfunc + func! Outer_eval() + return 'some text %{%Inner_eval()%}' + endfunc + set statusline=%{%Outer_eval()%} + call assert_match('^some text ' . bufnr() . ' some other text\s*$', s:get_statusline()) + delfunc Inner_eval + delfunc Outer_eval + + "%{%expr%}: Doesn't get stuck in recursion + func! Recurse_eval() + return '%{%Recurse_eval()%}' + endfunc + set statusline=%{%Recurse_eval()%} + call assert_match('^%{%Recurse_eval()%}\s*$', s:get_statusline()) + delfunc Recurse_eval + "%(: Start of item group. set statusline=ab%(cd%q%)de call assert_match('^abde\s*$', s:get_statusline()) diff --git a/src/nvim/testdir/test_substitute.vim b/src/nvim/testdir/test_substitute.vim index cc3bfe9f7f..e7f9bb76f2 100644 --- a/src/nvim/testdir/test_substitute.vim +++ b/src/nvim/testdir/test_substitute.vim @@ -426,6 +426,8 @@ func Test_substitute_errors() call assert_fails('s/FOO/bar/', 'E486:') call assert_fails('s/foo/bar/@', 'E488:') call assert_fails('s/\(/bar/', 'E476:') + call assert_fails('s afooabara', 'E146:') + call assert_fails('s\\a', 'E10:') setl nomodifiable call assert_fails('s/foo/bar/', 'E21:') @@ -754,4 +756,13 @@ func Test_submatch_list_concatenate() call assert_equal(substitute('A1', pat, Rep, ''), "[['A1'], ['1']]") endfunc +func Test_substitute_skipped_range() + new + if 0 + /1/5/2/2/\n + endif + call assert_equal([0, 1, 1, 0, 1], getcurpos()) + bwipe! +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_true_false.vim b/src/nvim/testdir/test_true_false.vim index 84aca737ac..315ba188cb 100644 --- a/src/nvim/testdir/test_true_false.vim +++ b/src/nvim/testdir/test_true_false.vim @@ -1,5 +1,7 @@ " Test behavior of boolean-like values. +source check.vim + " Test what is explained at ":help TRUE" and ":help FALSE". func Test_if() if v:false @@ -41,7 +43,9 @@ func Test_if() call assert_fails('if [1]', 'E745') call assert_fails('if {1: 1}', 'E728') call assert_fails('if function("string")', 'E703') - call assert_fails('if 1.3")', 'E805') + if has('float') + call assert_fails('if 1.3")', 'E805') + endif endfunc function Try_arg_true_false(expr, false_val, true_val) @@ -113,6 +117,7 @@ func Test_true_false_arg() endfunc function Try_arg_non_zero(expr, false_val, true_val) + CheckFeature float for v in ['v:false', '0', '[1]', '{2:3}', '3.4'] let r = eval(substitute(a:expr, '%v%', v, '')) call assert_equal(a:false_val, r, 'result for ' . v . ' is not ' . a:false_val . ' but ' . r) diff --git a/src/nvim/testdir/test_user_func.vim b/src/nvim/testdir/test_user_func.vim index e9e181ce3d..7dcd92a54b 100644 --- a/src/nvim/testdir/test_user_func.vim +++ b/src/nvim/testdir/test_user_func.vim @@ -113,9 +113,11 @@ func MakeBadFunc() endfunc func Test_default_arg() - call assert_equal(1.0, Log(10)) - call assert_equal(log(10), Log(10, exp(1))) - call assert_fails("call Log(1,2,3)", 'E118') + if has('float') + call assert_equal(1.0, Log(10)) + call assert_equal(log(10), Log(10, exp(1))) + call assert_fails("call Log(1,2,3)", 'E118') + endif let res = Args(1) call assert_equal(res.mandatory, 1) diff --git a/src/nvim/testdir/test_vimscript.vim b/src/nvim/testdir/test_vimscript.vim index 43907de1d9..5922660ef9 100644 --- a/src/nvim/testdir/test_vimscript.vim +++ b/src/nvim/testdir/test_vimscript.vim @@ -1271,8 +1271,10 @@ func Test_num64() call assert_equal(-9223372036854775807, -1 / 0) call assert_equal(-9223372036854775807 - 1, 0 / 0) - call assert_equal( 0x7FFFffffFFFFffff, float2nr( 1.0e150)) - call assert_equal(-0x7FFFffffFFFFffff, float2nr(-1.0e150)) + if has('float') + call assert_equal( 0x7FFFffffFFFFffff, float2nr( 1.0e150)) + call assert_equal(-0x7FFFffffFFFFffff, float2nr(-1.0e150)) + endif let rng = range(0xFFFFffff, 0x100000001) call assert_equal([0xFFFFffff, 0x100000000, 0x100000001], rng) @@ -1531,22 +1533,22 @@ func Test_compound_assignment_operators() call assert_equal('string', x) let x += 1 call assert_equal(1, x) - let x -= 1.5 - call assert_equal(-0.5, x) if has('float') - " Test for float - let x = 0.5 - let x += 4.5 - call assert_equal(5.0, x) - let x -= 1.5 - call assert_equal(3.5, x) - let x *= 3.0 - call assert_equal(10.5, x) - let x /= 2.5 - call assert_equal(4.2, x) - call assert_fails('let x %= 0.5', 'E734') - call assert_fails('let x .= "f"', 'E734') + " Test for float + let x -= 1.5 + call assert_equal(-0.5, x) + let x = 0.5 + let x += 4.5 + call assert_equal(5.0, x) + let x -= 1.5 + call assert_equal(3.5, x) + let x *= 3.0 + call assert_equal(10.5, x) + let x /= 2.5 + call assert_equal(4.2, x) + call assert_fails('let x %= 0.5', 'E734') + call assert_fails('let x .= "f"', 'E734') endif " Test for environment variable diff --git a/src/nvim/testdir/test_visual.vim b/src/nvim/testdir/test_visual.vim index 73c7960579..a40b0236e0 100644 --- a/src/nvim/testdir/test_visual.vim +++ b/src/nvim/testdir/test_visual.vim @@ -1,4 +1,4 @@ -" Tests for various Visual mode. +" Tests for various Visual modes. func Test_block_shift_multibyte() " Uses double-wide character. @@ -738,4 +738,327 @@ func Test_select_mode_gv() bwipe! endfunc +" Tests for the visual block mode commands +func Test_visual_block_mode() + new + call append(0, '') + call setline(1, ['abcdefghijklm', 'abcdefghijklm', 'abcdefghijklm', + \ 'abcdefghijklm', 'abcdefghijklm']) + call cursor(1, 1) + + " Test shift-right of a block + exe "normal jllll\<C-V>jj>wll\<C-V>jlll>" + " Test shift-left of a block + exe "normal G$hhhh\<C-V>kk<" + " Test block-insert + exe "normal Gkl\<C-V>kkkIxyz" + " Test block-replace + exe "normal Gllll\<C-V>kkklllrq" + " Test block-change + exe "normal G$khhh\<C-V>hhkkcmno" + call assert_equal(['axyzbcdefghijklm', + \ 'axyzqqqq mno ghijklm', + \ 'axyzqqqqef mno ghijklm', + \ 'axyzqqqqefgmnoklm', + \ 'abcdqqqqijklm'], getline(1, 5)) + + " Test from ':help v_b_I_example' + %d _ + setlocal tabstop=8 shiftwidth=4 + let lines =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call setline(1, lines) + exe "normal ggfo\<C-V>3jISTRING" + let expected =<< trim END + abcdefghijklmnSTRINGopqrstuvwxyz + abc STRING defghijklmnopqrstuvwxyz + abcdef ghi STRING jklmnopqrstuvwxyz + abcdefghijklmnSTRINGopqrstuvwxyz + END + call assert_equal(expected, getline(1, '$')) + + " Test from ':help v_b_A_example' + %d _ + let lines =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call setline(1, lines) + exe "normal ggfo\<C-V>3j$ASTRING" + let expected =<< trim END + abcdefghijklmnopqrstuvwxyzSTRING + abc defghijklmnopqrstuvwxyzSTRING + abcdef ghi jklmnopqrstuvwxyzSTRING + abcdefghijklmnopqrstuvwxyzSTRING + END + call assert_equal(expected, getline(1, '$')) + + " Test from ':help v_b_<_example' + %d _ + let lines =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call setline(1, lines) + exe "normal ggfo\<C-V>3j3l<.." + let expected =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call assert_equal(expected, getline(1, '$')) + + " Test from ':help v_b_>_example' + %d _ + let lines =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call setline(1, lines) + exe "normal ggfo\<C-V>3j>.." + let expected =<< trim END + abcdefghijklmn opqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmn opqrstuvwxyz + END + call assert_equal(expected, getline(1, '$')) + + " Test from ':help v_b_r_example' + %d _ + let lines =<< trim END + abcdefghijklmnopqrstuvwxyz + abc defghijklmnopqrstuvwxyz + abcdef ghi jklmnopqrstuvwxyz + abcdefghijklmnopqrstuvwxyz + END + call setline(1, lines) + exe "normal ggfo\<C-V>5l3jrX" + let expected =<< trim END + abcdefghijklmnXXXXXXuvwxyz + abc XXXXXXhijklmnopqrstuvwxyz + abcdef ghi XXXXXX jklmnopqrstuvwxyz + abcdefghijklmnXXXXXXuvwxyz + END + call assert_equal(expected, getline(1, '$')) + + bwipe! + set tabstop& shiftwidth& +endfunc + +" Test block-insert using cursor keys for movement +func Test_visual_block_insert_cursor_keys() + new + call append(0, ['aaaaaa', 'bbbbbb', 'cccccc', 'dddddd']) + call cursor(1, 1) + + exe "norm! l\<C-V>jjjlllI\<Right>\<Right> \<Esc>" + call assert_equal(['aaa aaa', 'bbb bbb', 'ccc ccc', 'ddd ddd'], + \ getline(1, 4)) + + call deletebufline('', 1, '$') + call setline(1, ['xaaa', 'bbbb', 'cccc', 'dddd']) + call cursor(1, 1) + exe "norm! \<C-V>jjjI<>\<Left>p\<Esc>" + call assert_equal(['<p>xaaa', '<p>bbbb', '<p>cccc', '<p>dddd'], + \ getline(1, 4)) + bwipe! +endfunc + +func Test_visual_block_create() + new + call append(0, '') + " Test for Visual block was created with the last <C-v>$ + call setline(1, ['A23', '4567']) + call cursor(1, 1) + exe "norm! l\<C-V>j$Aab\<Esc>" + call assert_equal(['A23ab', '4567ab'], getline(1, 2)) + + " Test for Visual block was created with the middle <C-v>$ (1) + call deletebufline('', 1, '$') + call setline(1, ['B23', '4567']) + call cursor(1, 1) + exe "norm! l\<C-V>j$hAab\<Esc>" + call assert_equal(['B23 ab', '4567ab'], getline(1, 2)) + + " Test for Visual block was created with the middle <C-v>$ (2) + call deletebufline('', 1, '$') + call setline(1, ['C23', '4567']) + call cursor(1, 1) + exe "norm! l\<C-V>j$hhAab\<Esc>" + call assert_equal(['C23ab', '456ab7'], getline(1, 2)) + bwipe! +endfunc + +" Test for Visual block insert when virtualedit=all +func Test_virtualedit_visual_block() + set ve=all + new + call append(0, ["\t\tline1", "\t\tline2", "\t\tline3"]) + call cursor(1, 1) + exe "norm! 07l\<C-V>jjIx\<Esc>" + call assert_equal([" x \tline1", + \ " x \tline2", + \ " x \tline3"], getline(1, 3)) + + " Test for Visual block append when virtualedit=all + exe "norm! 012l\<C-v>jjAx\<Esc>" + call assert_equal([' x x line1', + \ ' x x line2', + \ ' x x line3'], getline(1, 3)) + set ve= + bwipe! +endfunc + +" Test for changing case +func Test_visual_change_case() + new + " gUe must uppercase a whole word, also when ß changes to SS + exe "normal Gothe youtußeuu end\<Esc>Ypk0wgUe\r" + " gUfx must uppercase until x, inclusive. + exe "normal O- youßtußexu -\<Esc>0fogUfx\r" + " VU must uppercase a whole line + exe "normal YpkVU\r" + " same, when it's the last line in the buffer + exe "normal YPGi111\<Esc>VUddP\r" + " Uppercase two lines + exe "normal Oblah di\rdoh dut\<Esc>VkUj\r" + " Uppercase part of two lines + exe "normal ddppi333\<Esc>k0i222\<Esc>fyllvjfuUk" + call assert_equal(['the YOUTUSSEUU end', '- yOUSSTUSSEXu -', + \ 'THE YOUTUSSEUU END', '111THE YOUTUSSEUU END', 'BLAH DI', 'DOH DUT', + \ '222the yoUTUSSEUU END', '333THE YOUTUßeuu end'], getline(2, '$')) + bwipe! +endfunc + +" Test for Visual replace using Enter or NL +func Test_visual_replace_crnl() + new + exe "normal G3o123456789\e2k05l\<C-V>2jr\r" + exe "normal G3o98765\e2k02l\<C-V>2jr\<C-V>\r\n" + exe "normal G3o123456789\e2k05l\<C-V>2jr\n" + exe "normal G3o98765\e2k02l\<C-V>2jr\<C-V>\n" + call assert_equal(['12345', '789', '12345', '789', '12345', '789', "98\r65", + \ "98\r65", "98\r65", '12345', '789', '12345', '789', '12345', '789', + \ "98\n65", "98\n65", "98\n65"], getline(2, '$')) + bwipe! +endfunc + +func Test_ve_block_curpos() + new + " Test cursor position. When ve=block and Visual block mode and $gj + call append(0, ['12345', '789']) + call cursor(1, 3) + set virtualedit=block + exe "norm! \<C-V>$gj\<Esc>" + call assert_equal([0, 2, 4, 0], getpos("'>")) + set virtualedit= + bwipe! +endfunc + +" Test for block_insert when replacing spaces in front of the a with tabs +func Test_block_insert_replace_tabs() + new + set ts=8 sts=4 sw=4 + call append(0, ["#define BO_ALL\t 0x0001", + \ "#define BO_BS\t 0x0002", + \ "#define BO_CRSR\t 0x0004"]) + call cursor(1, 1) + exe "norm! f0\<C-V>2jI\<tab>\<esc>" + call assert_equal([ + \ "#define BO_ALL\t\t0x0001", + \ "#define BO_BS\t \t0x0002", + \ "#define BO_CRSR\t \t0x0004", ''], getline(1, '$')) + set ts& sts& sw& + bwipe! +endfunc + +func Test_visual_put_in_block_using_zp() + new + " paste using zP + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ '/subdir', + \ '/longsubdir', + \ '/longlongsubdir']) + exe "normal! 5G\<c-v>2j$y" + norm! 1Gf;zP + call assert_equal(['/path/subdir;text', '/path/longsubdir;text', '/path/longlongsubdir;text'], getline(1, 3)) + %d + " paste using zP + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ '/subdir', + \ '/longsubdir', + \ '/longlongsubdir']) + exe "normal! 5G\<c-v>2j$y" + norm! 1Gf;hzp + call assert_equal(['/path/subdir;text', '/path/longsubdir;text', '/path/longlongsubdir;text'], getline(1, 3)) + bwipe! +endfunc + +func Test_visual_put_in_block_using_zy_and_zp() + new + + " Test 1) Paste using zp - after the cursor without trailing spaces + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ 'texttext /subdir columntext', + \ 'texttext /longsubdir columntext', + \ 'texttext /longlongsubdir columntext']) + exe "normal! 5G0f/\<c-v>2jezy" + norm! 1G0f;hzp + call assert_equal(['/path/subdir;text', '/path/longsubdir;text', '/path/longlongsubdir;text'], getline(1, 3)) + + " Test 2) Paste using zP - in front of the cursor without trailing spaces + %d + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ 'texttext /subdir columntext', + \ 'texttext /longsubdir columntext', + \ 'texttext /longlongsubdir columntext']) + exe "normal! 5G0f/\<c-v>2jezy" + norm! 1G0f;zP + call assert_equal(['/path/subdir;text', '/path/longsubdir;text', '/path/longlongsubdir;text'], getline(1, 3)) + + " Test 3) Paste using p - with trailing spaces + %d + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ 'texttext /subdir columntext', + \ 'texttext /longsubdir columntext', + \ 'texttext /longlongsubdir columntext']) + exe "normal! 5G0f/\<c-v>2jezy" + norm! 1G0f;hp + call assert_equal(['/path/subdir ;text', '/path/longsubdir ;text', '/path/longlongsubdir;text'], getline(1, 3)) + + " Test 4) Paste using P - with trailing spaces + %d + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ 'texttext /subdir columntext', + \ 'texttext /longsubdir columntext', + \ 'texttext /longlongsubdir columntext']) + exe "normal! 5G0f/\<c-v>2jezy" + norm! 1G0f;P + call assert_equal(['/path/subdir ;text', '/path/longsubdir ;text', '/path/longlongsubdir;text'], getline(1, 3)) + + " Test 5) Yank with spaces inside the block + %d + call setline(1, ['/path;text', '/path;text', '/path;text', '', + \ 'texttext /sub dir/ columntext', + \ 'texttext /lon gsubdir/ columntext', + \ 'texttext /lon glongsubdir/ columntext']) + exe "normal! 5G0f/\<c-v>2jf/zy" + norm! 1G0f;zP + call assert_equal(['/path/sub dir/;text', '/path/lon gsubdir/;text', '/path/lon glongsubdir/;text'], getline(1, 3)) + bwipe! +endfunc + + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/testdir/test_winbuf_close.vim b/src/nvim/testdir/test_winbuf_close.vim index ee43540fdd..7f5b80e8d3 100644 --- a/src/nvim/testdir/test_winbuf_close.vim +++ b/src/nvim/testdir/test_winbuf_close.vim @@ -160,7 +160,7 @@ func Test_winfixwidth_on_close() endfunction " Test that 'winfixheight' will be respected even there is non-leaf frame -fun! Test_winfixheight_non_leaf_frame() +func Test_winfixheight_non_leaf_frame() vsplit botright 11new let l:wid = win_getid() @@ -173,7 +173,7 @@ fun! Test_winfixheight_non_leaf_frame() endf " Test that 'winfixwidth' will be respected even there is non-leaf frame -fun! Test_winfixwidth_non_leaf_frame() +func Test_winfixwidth_non_leaf_frame() split topleft 11vnew let l:wid = win_getid() @@ -184,3 +184,13 @@ fun! Test_winfixwidth_non_leaf_frame() call assert_equal(11, winwidth(l:wid)) %bwipe! endf + +func Test_tabwin_close() + enew + let l:wid = win_getid() + tabedit + call win_execute(l:wid, 'close') + " Should not crash. + call assert_true(v:true) + %bwipe! +endfunc diff --git a/src/nvim/testdir/test_writefile.vim b/src/nvim/testdir/test_writefile.vim index c62c01d5f3..6922e2185d 100644 --- a/src/nvim/testdir/test_writefile.vim +++ b/src/nvim/testdir/test_writefile.vim @@ -164,6 +164,69 @@ func Test_writefile_autowrite_nowrite() set noautowrite endfunc +" Test for ':w !<cmd>' to pipe lines from the current buffer to an external +" command. +func Test_write_pipe_to_cmd() + if !has('unix') + return + endif + new + call setline(1, ['L1', 'L2', 'L3', 'L4']) + 2,3w !cat > Xfile + call assert_equal(['L2', 'L3'], readfile('Xfile')) + close! + call delete('Xfile') +endfunc + +" Test for :saveas +func Test_saveas() + call assert_fails('saveas', 'E471:') + call writefile(['L1'], 'Xfile') + new Xfile + new + call setline(1, ['L1']) + call assert_fails('saveas Xfile', 'E139:') + close! + enew | only + call delete('Xfile') +endfunc + +func Test_write_errors() + " Test for writing partial buffer + call writefile(['L1', 'L2', 'L3'], 'Xfile') + new Xfile + call assert_fails('1,2write', 'E140:') + close! + + " Try to overwrite a directory + if has('unix') + call mkdir('Xdir1') + call assert_fails('write Xdir1', 'E17:') + call delete('Xdir1', 'd') + endif + + " Test for :wall for a buffer with no name + enew | only + call setline(1, ['L1']) + call assert_fails('wall', 'E141:') + enew! + + " Test for writing a 'readonly' file + new Xfile + set readonly + call assert_fails('write', 'E45:') + close + + " Test for writing to a read-only file + new Xfile + call setfperm('Xfile', 'r--r--r--') + call assert_fails('write', 'E505:') + call setfperm('Xfile', 'rw-rw-rw-') + close + + call delete('Xfile') +endfunc + func Test_writefile_sync_dev_stdout() if !has('unix') return @@ -298,4 +361,25 @@ func Test_write_file_encoding() %bw! endfunc +" Check that buffer is written before triggering QuitPre +func Test_wq_quitpre_autocommand() + edit Xsomefile + call setline(1, 'hello') + split + let g:seq = [] + augroup Testing + au QuitPre * call add(g:seq, 'QuitPre - ' .. (&modified ? 'modified' : 'not modified')) + au BufWritePost * call add(g:seq, 'written') + augroup END + wq + call assert_equal(['written', 'QuitPre - not modified'], g:seq) + + augroup Testing + au! + augroup END + bwipe! + unlet g:seq + call delete('Xsomefile') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index ed40a64c66..fd83681aed 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -2009,9 +2009,9 @@ static void augment_terminfo(TUIData *data, const char *term, } data->unibi_ext.save_title = (int)unibi_add_ext_str( - ut, "ext.save_title", "\x1b[22;0;0t"); + ut, "ext.save_title", "\x1b[22;0t"); data->unibi_ext.restore_title = (int)unibi_add_ext_str( - ut, "ext.restore_title", "\x1b[23;0;0t"); + ut, "ext.restore_title", "\x1b[23;0t"); /// Terminals usually ignore unrecognized private modes, and there is no /// known ambiguity with these. So we just set them unconditionally. diff --git a/src/nvim/ui_compositor.c b/src/nvim/ui_compositor.c index c1e4a40ef2..1ec5189795 100644 --- a/src/nvim/ui_compositor.c +++ b/src/nvim/ui_compositor.c @@ -165,22 +165,13 @@ bool ui_comp_put_grid(ScreenGrid *grid, int row, int col, int height, int width, } #endif - // TODO(bfredl): this is pretty ad-hoc, add a proper z-order/priority - // scheme. For now: - // - msg_grid is always on top. - // - pum_grid is on top of all windows but not msg_grid. Except for when - // wildoptions=pum, and completing the cmdline with scrolled messages, - // then the pum has to be drawn over the scrolled messages. size_t insert_at = kv_size(layers); - bool cmd_completion = (grid == &pum_grid && (State & CMDLINE) - && (wop_flags & WOP_PUM)); - if (kv_A(layers, insert_at-1) == &msg_grid && !cmd_completion) { - insert_at--; - } - if (kv_A(layers, insert_at-1) == &pum_grid && (grid != &msg_grid)) { + while (insert_at > 0 && kv_A(layers, insert_at-1)->zindex > grid->zindex) { insert_at--; } + if (curwin && kv_A(layers, insert_at-1) == &curwin->w_grid_alloc + && kv_A(layers, insert_at-1)->zindex == grid->zindex && !on_top) { insert_at--; } @@ -279,12 +270,11 @@ static void ui_comp_grid_cursor_goto(UI *ui, Integer grid_handle, // should configure all grids before entering win_update() if (curgrid != &default_grid) { size_t new_index = kv_size(layers)-1; - if (kv_A(layers, new_index) == &msg_grid) { - new_index--; - } - if (kv_A(layers, new_index) == &pum_grid) { + + while (new_index > 1 && kv_A(layers, new_index)->zindex > curgrid->zindex) { new_index--; } + if (curgrid->comp_index < new_index) { ui_comp_raise_grid(curgrid, new_index); } diff --git a/src/nvim/undo.c b/src/nvim/undo.c index f52850f6f3..ffd613cec2 100644 --- a/src/nvim/undo.c +++ b/src/nvim/undo.c @@ -1018,9 +1018,7 @@ static ExtmarkUndoObject *unserialize_extmark(bufinfo_T *bi, bool *error, goto error; } - if (buf) { - xfree(buf); - } + xfree(buf); return extup; diff --git a/src/nvim/version.c b/src/nvim/version.c index deba3f6e49..f3a30630f8 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -406,13 +406,13 @@ static const int included_patches[] = { 1514, 1513, 1512, - // 1511, + 1511, 1510, 1509, 1508, 1507, 1506, - // 1505, + 1505, 1504, 1503, 1502, diff --git a/src/nvim/vim.h b/src/nvim/vim.h index 0245c472ef..df4ab04eb6 100644 --- a/src/nvim/vim.h +++ b/src/nvim/vim.h @@ -313,6 +313,7 @@ enum { FOLD_TEXT_LEN = 51 }; //!< buffer size for get_foldtext() #define DIP_NORTP 0x20 // do not use 'runtimepath' #define DIP_NOAFTER 0x40 // skip "after" directories #define DIP_AFTER 0x80 // only use "after" directories +#define DIP_LUA 0x100 // also use ".lua" files // Lowest number used for window ID. Cannot have this many windows per tab. #define LOWEST_WIN_ID 1000 diff --git a/src/nvim/window.c b/src/nvim/window.c index d1163399f5..aea60fe24c 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -570,6 +570,45 @@ static void cmd_with_count(char *cmd, char_u *bufp, size_t bufsize, } } +void win_set_buf(Window window, Buffer buffer, bool noautocmd, Error *err) +{ + win_T *win = find_window_by_handle(window, err), *save_curwin = curwin; + buf_T *buf = find_buffer_by_handle(buffer, err); + tabpage_T *tab = win_find_tabpage(win), *save_curtab = curtab; + + if (!win || !buf) { + return; + } + + if (noautocmd) { + block_autocmds(); + } + if (switch_win_noblock(&save_curwin, &save_curtab, win, tab, false) == FAIL) { + api_set_error(err, + kErrorTypeException, + "Failed to switch to window %d", + window); + } + + try_start(); + int result = do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, buf->b_fnum, 0); + if (!try_end(err) && result == FAIL) { + api_set_error(err, + kErrorTypeException, + "Failed to set buffer %d", + buffer); + } + + // If window is not current, state logic will not validate its cursor. + // So do it now. + validate_cursor(); + + restore_win_noblock(save_curwin, save_curtab, false); + if (noautocmd) { + unblock_autocmds(); + } +} + /// Create a new float. /// /// if wp == NULL allocate a new window, otherwise turn existing window into a @@ -676,9 +715,17 @@ void win_config_float(win_T *wp, FloatConfig fconfig) wp->w_float_config = fconfig; + bool has_border = wp->w_floating && wp->w_float_config.border; + for (int i = 0; i < 4; i++) { + wp->w_border_adj[i] = + has_border && wp->w_float_config.border_chars[2 * i+1][0]; + } + if (!ui_has(kUIMultigrid)) { - wp->w_height = MIN(wp->w_height, Rows-1); - wp->w_width = MIN(wp->w_width, Columns); + wp->w_height = MIN(wp->w_height, + Rows - 1 - (wp->w_border_adj[0] + wp->w_border_adj[2])); + wp->w_width = MIN(wp->w_width, + Columns - (wp->w_border_adj[1] + wp->w_border_adj[3])); } win_set_inner_size(wp); @@ -755,10 +802,13 @@ void ui_ext_win_position(win_T *wp) } api_clear_error(&dummy); } + + wp->w_grid_alloc.zindex = wp->w_float_config.zindex; if (ui_has(kUIMultigrid)) { String anchor = cstr_to_string(float_anchor_str[c.anchor]); ui_call_win_float_pos(wp->w_grid_alloc.handle, wp->handle, anchor, - grid->handle, row, col, c.focusable); + grid->handle, row, col, c.focusable, + wp->w_grid_alloc.zindex); } else { // TODO(bfredl): ideally, compositor should work like any multigrid UI // and use standard win_pos events. @@ -767,8 +817,8 @@ void ui_ext_win_position(win_T *wp) int comp_row = (int)row - (south ? wp->w_height : 0); int comp_col = (int)col - (east ? wp->w_width : 0); - comp_row = MAX(MIN(comp_row, Rows-wp->w_height-1), 0); - comp_col = MAX(MIN(comp_col, Columns-wp->w_width), 0); + comp_row = MAX(MIN(comp_row, Rows-wp->w_height_outer-1), 0); + comp_col = MAX(MIN(comp_col, Columns-wp->w_width_outer), 0); wp->w_winrow = comp_row; wp->w_wincol = comp_col; bool valid = (wp->w_redr_type == 0); @@ -2191,7 +2241,7 @@ bool one_nonfloat(void) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT /// always false for a floating window bool last_nonfloat(win_T *wp) FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT { - return firstwin == wp && !(wp->w_next && !wp->w_floating); + return wp != NULL && firstwin == wp && !(wp->w_next && !wp->w_floating); } /// Close the possibly last window in a tab page. @@ -2278,7 +2328,7 @@ int win_close(win_T *win, bool free_buf) return FAIL; // window is already being closed } if (win == aucmd_win) { - EMSG(_("E813: Cannot close autocmd window")); + EMSG(_(e_autocmd_close)); return FAIL; } if ((firstwin == aucmd_win || lastwin == aucmd_win) && one_window()) { @@ -2478,7 +2528,7 @@ int win_close(win_T *win, bool free_buf) // only resize that frame. Otherwise resize all windows. win_equal(curwin, curwin->w_frame->fr_parent == win_frame, dir); } else { - win_comp_pos(); + (void)win_comp_pos(); } } @@ -3458,6 +3508,9 @@ int win_alloc_first(void) first_tabpage = alloc_tabpage(); first_tabpage->tp_topframe = topframe; curtab = first_tabpage; + curtab->tp_firstwin = firstwin; + curtab->tp_lastwin = lastwin; + curtab->tp_curwin = curwin; return OK; } @@ -3626,6 +3679,8 @@ int win_new_tabpage(int after, char_u *filename) newtp->tp_next = tp->tp_next; tp->tp_next = newtp; } + newtp->tp_firstwin = newtp->tp_lastwin = newtp->tp_curwin = curwin; + win_init_size(); firstwin->w_winrow = tabline_height(); win_comp_scroll(curwin); @@ -5734,12 +5789,6 @@ void win_set_inner_size(win_T *wp) terminal_check_size(wp->w_buffer->terminal); } - bool has_border = wp->w_floating && wp->w_float_config.border; - for (int i = 0; i < 4; i++) { - wp->w_border_adj[i] = - has_border && wp->w_float_config.border_chars[2 * i+1][0]; - } - wp->w_height_outer = (wp->w_height_inner + wp->w_border_adj[0] + wp->w_border_adj[2]); wp->w_width_outer = (wp->w_width_inner @@ -6247,9 +6296,10 @@ restore_snapshot ( && curtab->tp_snapshot[idx]->fr_height == topframe->fr_height && check_snapshot_rec(curtab->tp_snapshot[idx], topframe) == OK) { wp = restore_snapshot_rec(curtab->tp_snapshot[idx], topframe); - win_comp_pos(); - if (wp != NULL && close_curwin) + (void)win_comp_pos(); + if (wp != NULL && close_curwin) { win_goto(wp); + } redraw_all_later(NOT_VALID); } clear_snapshot(curtab, idx); @@ -6334,6 +6384,13 @@ static win_T *get_snapshot_focus(int idx) int switch_win(win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp, int no_display) { block_autocmds(); + return switch_win_noblock(save_curwin, save_curtab, win, tp, no_display); +} + +// As switch_win() but without blocking autocommands. +int switch_win_noblock(win_T **save_curwin, tabpage_T **save_curtab, + win_T *win, tabpage_T *tp, int no_display) +{ *save_curwin = curwin; if (tp != NULL) { *save_curtab = curtab; @@ -6359,6 +6416,14 @@ int switch_win(win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage // triggered. void restore_win(win_T *save_curwin, tabpage_T *save_curtab, bool no_display) { + restore_win_noblock(save_curwin, save_curtab, no_display); + unblock_autocmds(); +} + +// As restore_win() but without unblocking autocommands. +void restore_win_noblock(win_T *save_curwin, tabpage_T *save_curtab, + bool no_display) +{ if (save_curtab != NULL && valid_tabpage(save_curtab)) { if (no_display) { curtab->tp_firstwin = firstwin; @@ -6373,7 +6438,6 @@ void restore_win(win_T *save_curwin, tabpage_T *save_curtab, bool no_display) curwin = save_curwin; curbuf = curwin->w_buffer; } - unblock_autocmds(); } /// Make "buf" the current buffer. @@ -6806,10 +6870,19 @@ void win_id2tabwin(typval_T *const argvars, typval_T *const rettv) win_T * win_id2wp(typval_T *argvars) { + return win_id2wp_tp(argvars, NULL); +} + +// Return the window and tab pointer of window "id". +win_T * win_id2wp_tp(typval_T *argvars, tabpage_T **tpp) +{ int id = tv_get_number(&argvars[0]); FOR_ALL_TAB_WINDOWS(tp, wp) { if (wp->handle == id) { + if (tpp != NULL) { + *tpp = tp; + } return wp; } } |