diff options
Diffstat (limited to 'src')
32 files changed, 1010 insertions, 1508 deletions
| diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 5a3db74903..4aaae5172f 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -78,6 +78,9 @@ foreach(sfile ${NEOVIM_SOURCES})    if(${f} MATCHES "^(regexp_nfa.c)$")      list(APPEND to_remove ${sfile})    endif() +  if(WIN32 AND ${f} MATCHES "^(pty_process_unix.c)$") +    list(APPEND to_remove ${sfile}) +  endif()  endforeach()  list(REMOVE_ITEM NEOVIM_SOURCES ${to_remove}) diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 46d72b847d..43d58a539a 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -57,6 +57,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)    bool remap = true;    bool insert = false;    bool typed = false; +  bool execute = false;    if (keys.size == 0) {      return; @@ -68,6 +69,7 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)      case 'm': remap = true; break;      case 't': typed = true; break;      case 'i': insert = true; break; +    case 'x': execute = true; break;      }    } @@ -86,8 +88,12 @@ void vim_feedkeys(String keys, String mode, Boolean escape_csi)        xfree(keys_esc);    } -  if (vgetc_busy) +  if (vgetc_busy) {      typebuf_was_filled = true; +  } +  if (execute) { +    exec_normal(true); +  }  }  /// Passes input keys to Neovim. Unlike `vim_feedkeys`, this will use a diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 7edf511c18..d8f1ce8494 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -77,7 +77,7 @@  #include "nvim/eval/decode.h"  #include "nvim/os/os.h"  #include "nvim/event/libuv_process.h" -#include "nvim/event/pty_process.h" +#include "nvim/os/pty_process.h"  #include "nvim/event/rstream.h"  #include "nvim/event/wstream.h"  #include "nvim/event/time.h" @@ -508,6 +508,7 @@ void eval_init(void)        /* add to compat scope dict */        hash_add(&compat_hashtab, p->vv_di.di_key);    } +  vimvars[VV_VERSION].vv_nr = VIM_VERSION_100;    dict_T *const msgpack_types_dict = dict_alloc();    for (size_t i = 0; i < ARRAY_SIZE(msgpack_type_names); i++) { @@ -2978,11 +2979,16 @@ int do_unlet(char_u *name, int forceit)      } else if (current_funccal != NULL                 && ht == ¤t_funccal->l_vars.dv_hashtab) {        d = ¤t_funccal->l_vars; +    } else if (ht == &compat_hashtab) { +        d = &vimvardict;      } else {        di = find_var_in_ht(ht, *name, (char_u *)"", false);        d = di->di_tv.vval.v_dict;      } - +    if (d == NULL) { +      EMSG2(_(e_intern2), "do_unlet()"); +      return FAIL; +    }      hi = hash_find(ht, varname);      if (!HASHITEM_EMPTY(hi)) {        di = HI2DI(hi); @@ -2991,6 +2997,11 @@ int do_unlet(char_u *name, int forceit)            || tv_check_lock(d->dv_lock, name, false)) {          return FAIL;        } + +      if (d == NULL || tv_check_lock(d->dv_lock, name, false)) { +        return FAIL; +      } +        typval_T oldtv;        bool watched = is_watched(dict); @@ -9888,7 +9899,7 @@ static void f_getcmdwintype(typval_T *argvars, typval_T *rettv)  static void f_getcwd(typval_T *argvars, typval_T *rettv)  {    // Possible scope of working directory to return. -  CdScope scope = MIN_CD_SCOPE; +  CdScope scope = kCdScopeInvalid;    // Numbers of the scope objects (window, tab) we want the working directory    // of. A `-1` means to skip this scope, a `0` means the current object. @@ -9917,26 +9928,27 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)        return;      }      scope_number[i] = argvars[i].vval.v_number; -    // The scope is the current iteration step. -    scope = i;      // It is an error for the scope number to be less than `-1`.      if (scope_number[i] < -1) {        EMSG(_(e_invarg));        return;      } +    // Use the narrowest scope the user requested +    if (scope_number[i] >= 0 && scope == kCdScopeInvalid) { +      // The scope is the current iteration step. +      scope = i; +    } else if (scope_number[i] < 0) { +      scope = i + 1; +    }    } -  // Normalize scope, the number of the new scope will be 0. -  if (scope_number[scope] < 0) { -    // Arguments to `getcwd` always end at second-highest scope, so scope will -    // always be <= `MAX_CD_SCOPE`. -    scope++; +  // If the user didn't specify anything, default to window scope +  if (scope == kCdScopeInvalid) { +    scope = MIN_CD_SCOPE;    }    // Find the tabpage by number -  if (scope_number[kCdScopeTab] == -1) { -    tp = NULL; -  } else if (scope_number[kCdScopeTab] > 0) { +  if (scope_number[kCdScopeTab] > 0) {      tp = find_tabpage(scope_number[kCdScopeTab]);      if (!tp) {        EMSG(_("E5000: Cannot find tab number.")); @@ -9945,16 +9957,14 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)    }    // Find the window in `tp` by number, `NULL` if none. -  if (scope_number[kCdScopeWindow] == -1) { -    win = NULL; -  } else if (scope_number[kCdScopeWindow] >= 0) { -    if (!tp) { +  if (scope_number[kCdScopeWindow] >= 0) { +    if (scope_number[kCdScopeTab] < 0) {        EMSG(_("E5001: Higher scope cannot be -1 if lower scope is >= 0."));        return;      }      if (scope_number[kCdScopeWindow] > 0) { -      win = find_win_by_nr(&argvars[0], curtab); +      win = find_win_by_nr(&argvars[0], tp);        if (!win) {          EMSG(_("E5002: Cannot find window number."));          return; @@ -9989,6 +9999,9 @@ static void f_getcwd(typval_T *argvars, typval_T *rettv)          }        }        break; +    case kCdScopeInvalid: +      // We should never get here +      assert(false);    }    if (from) { @@ -10836,7 +10849,7 @@ static void f_has_key(typval_T *argvars, typval_T *rettv)  static void f_haslocaldir(typval_T *argvars, typval_T *rettv)  {    // Possible scope of working directory to return. -  CdScope scope = MIN_CD_SCOPE; +  CdScope scope = kCdScopeInvalid;    // Numbers of the scope objects (window, tab) we want the working directory    // of. A `-1` means to skip this scope, a `0` means the current object. @@ -10861,25 +10874,26 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)        return;      }      scope_number[i] = argvars[i].vval.v_number; -    // The scope is the current iteration step. -    scope = i;      if (scope_number[i] < -1) {        EMSG(_(e_invarg));        return;      } +    // Use the narrowest scope the user requested +    if (scope_number[i] >= 0 && scope == kCdScopeInvalid) { +      // The scope is the current iteration step. +      scope = i; +    } else if (scope_number[i] < 0) { +      scope = i + 1; +    }    } -  // Normalize scope, the number of the new scope will be 0. -  if (scope_number[scope] < 0) { -    // Arguments to `haslocaldir` always end at second-highest scope, so scope -    // will always be <= `MAX_CD_SCOPE`. -    scope++; +  // If the user didn't specify anything, default to window scope +  if (scope == kCdScopeInvalid) { +    scope = MIN_CD_SCOPE;    }    // Find the tabpage by number -  if (scope_number[kCdScopeTab] == -1) { -    tp = NULL; -  } else if (scope_number[kCdScopeTab] > 0) { +  if (scope_number[kCdScopeTab] > 0) {      tp = find_tabpage(scope_number[kCdScopeTab]);      if (!tp) {        EMSG(_("5000: Cannot find tab number.")); @@ -10888,16 +10902,14 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)    }    // Find the window in `tp` by number, `NULL` if none. -  if (scope_number[kCdScopeWindow] == -1) { -    win = NULL; -  } else if (scope_number[kCdScopeWindow] >= 0) { -    if (!tp) { +  if (scope_number[kCdScopeWindow] >= 0) { +    if (scope_number[kCdScopeTab] < 0) {        EMSG(_("E5001: Higher scope cannot be -1 if lower scope is >= 0."));        return;      }      if (scope_number[kCdScopeWindow] > 0) { -      win = find_win_by_nr(&argvars[0], curtab); +      win = find_win_by_nr(&argvars[0], tp);        if (!win) {          EMSG(_("E5002: Cannot find window number."));          return; @@ -10918,6 +10930,9 @@ static void f_haslocaldir(typval_T *argvars, typval_T *rettv)        // The global scope never has a local directory        rettv->vval.v_number = 0;        break; +    case kCdScopeInvalid: +      // We should never get here +      assert(false);    }  } @@ -15079,13 +15094,18 @@ typedef struct {    int idx;  } sortItem_T; -static int item_compare_ic; -static bool item_compare_numeric; -static bool item_compare_numbers; -static bool item_compare_float; -static char_u   *item_compare_func; -static dict_T   *item_compare_selfdict; -static int item_compare_func_err; +/// struct storing information about current sort +typedef struct { +  int item_compare_ic; +  bool item_compare_numeric; +  bool item_compare_numbers; +  bool item_compare_float; +  char_u *item_compare_func; +  dict_T *item_compare_selfdict; +  int item_compare_func_err; +} sortinfo_T; +static sortinfo_T *sortinfo = NULL; +  #define ITEM_COMPARE_FAIL 999  /* @@ -15105,14 +15125,14 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)    typval_T *tv1 = &si1->item->li_tv;    typval_T *tv2 = &si2->item->li_tv; -  if (item_compare_numbers) { +  if (sortinfo->item_compare_numbers) {      long v1 = get_tv_number(tv1);      long v2 = get_tv_number(tv2);      return v1 == v2 ? 0 : v1 > v2 ? 1 : -1;    } -  if (item_compare_float) { +  if (sortinfo->item_compare_float) {      float_T v1 = get_tv_float(tv1);      float_T v2 = get_tv_float(tv2); @@ -15123,7 +15143,7 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)    // do that for string variables. Use a single quote when comparing with    // a non-string to do what the docs promise.    if (tv1->v_type == VAR_STRING) { -    if (tv2->v_type != VAR_STRING || item_compare_numeric) { +    if (tv2->v_type != VAR_STRING || sortinfo->item_compare_numeric) {        p1 = (char_u *)"'";      } else {        p1 = tv1->vval.v_string; @@ -15132,7 +15152,7 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)      tofree1 = p1 = (char_u *) encode_tv2string(tv1, NULL);    }    if (tv2->v_type == VAR_STRING) { -    if (tv1->v_type != VAR_STRING || item_compare_numeric) { +    if (tv1->v_type != VAR_STRING || sortinfo->item_compare_numeric) {        p2 = (char_u *)"'";      } else {        p2 = tv2->vval.v_string; @@ -15140,12 +15160,14 @@ static int item_compare(const void *s1, const void *s2, bool keep_zero)    } else {      tofree2 = p2 = (char_u *) encode_tv2string(tv2, NULL);    } -  if (p1 == NULL) +  if (p1 == NULL) {      p1 = (char_u *)""; -  if (p2 == NULL) +  } +  if (p2 == NULL) {      p2 = (char_u *)""; -  if (!item_compare_numeric) { -    if (item_compare_ic) { +  } +  if (!sortinfo->item_compare_numeric) { +    if (sortinfo->item_compare_ic) {        res = STRICMP(p1, p2);      } else {        res = STRCMP(p1, p2); @@ -15186,9 +15208,10 @@ static int item_compare2(const void *s1, const void *s2, bool keep_zero)    typval_T argv[3];    int dummy; -  /* shortcut after failure in previous call; compare all items equal */ -  if (item_compare_func_err) +  // shortcut after failure in previous call; compare all items equal +  if (sortinfo->item_compare_func_err) {      return 0; +  }    si1 = (sortItem_T *)s1;    si2 = (sortItem_T *)s2; @@ -15198,19 +15221,22 @@ static int item_compare2(const void *s1, const void *s2, bool keep_zero)    copy_tv(&si1->item->li_tv, &argv[0]);    copy_tv(&si2->item->li_tv, &argv[1]); -  rettv.v_type = VAR_UNKNOWN;           /* clear_tv() uses this */ -  res = call_func(item_compare_func, (int)STRLEN(item_compare_func), -      &rettv, 2, argv, 0L, 0L, &dummy, TRUE, -      item_compare_selfdict); +  rettv.v_type = VAR_UNKNOWN;  // clear_tv() uses this +  res = call_func(sortinfo->item_compare_func, +                  (int)STRLEN(sortinfo->item_compare_func), +                  &rettv, 2, argv, 0L, 0L, &dummy, true, +                  sortinfo->item_compare_selfdict);    clear_tv(&argv[0]);    clear_tv(&argv[1]); -  if (res == FAIL) +  if (res == FAIL) {      res = ITEM_COMPARE_FAIL; -  else -    res = get_tv_number_chk(&rettv, &item_compare_func_err); -  if (item_compare_func_err) -    res = ITEM_COMPARE_FAIL;      /* return value has wrong type */ +  } else { +    res = get_tv_number_chk(&rettv, &sortinfo->item_compare_func_err); +  } +  if (sortinfo->item_compare_func_err) { +    res = ITEM_COMPARE_FAIL;  // return value has wrong type +  }    clear_tv(&rettv);    // When the result would be zero, compare the pointers themselves.  Makes @@ -15243,6 +15269,12 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)    long len;    long i; +  // Pointer to current info struct used in compare function. Save and restore +  // the current one for nested calls. +  sortinfo_T info; +  sortinfo_T *old_sortinfo = sortinfo; +  sortinfo = &info; +    if (argvars[0].v_type != VAR_LIST) {      EMSG2(_(e_listarg), sort ? "sort()" : "uniq()");    } else { @@ -15253,61 +15285,70 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)                                      ? N_("sort() argument")                                      : N_("uniq() argument")),                           true)) { -      return; +        goto theend;      }      rettv->vval.v_list = l;      rettv->v_type = VAR_LIST;      ++l->lv_refcount;      len = list_len(l); -    if (len <= 1) -      return;           /* short list sorts pretty quickly */ +    if (len <= 1) { +      goto theend;  // short list sorts pretty quickly +    } -    item_compare_ic = FALSE; -    item_compare_numeric = false; -    item_compare_numbers = false; -    item_compare_float = false; -    item_compare_func = NULL; -    item_compare_selfdict = NULL; +    info.item_compare_ic = false; +    info.item_compare_numeric = false; +    info.item_compare_numbers = false; +    info.item_compare_float = false; +    info.item_compare_func = NULL; +    info.item_compare_selfdict = NULL;      if (argvars[1].v_type != VAR_UNKNOWN) {        /* optional second argument: {func} */        if (argvars[1].v_type == VAR_FUNC) { -        item_compare_func = argvars[1].vval.v_string; +        info.item_compare_func = argvars[1].vval.v_string;        } else {          int error = FALSE;          i = get_tv_number_chk(&argvars[1], &error); -        if (error) -          return;                       /* type error; errmsg already given */ -        if (i == 1) -          item_compare_ic = TRUE; -        else -          item_compare_func = get_tv_string(&argvars[1]); -        if (item_compare_func != NULL) { -          if (STRCMP(item_compare_func, "n") == 0) { -            item_compare_func = NULL; -            item_compare_numeric = true; -          } else if (STRCMP(item_compare_func, "N") == 0) { -            item_compare_func = NULL; -            item_compare_numbers = true; -          } else if (STRCMP(item_compare_func, "f") == 0) { -            item_compare_func = NULL; -            item_compare_float = true; -          } else if (STRCMP(item_compare_func, "i") == 0) { -            item_compare_func = NULL; -            item_compare_ic = TRUE; +        if (error) { +          goto theend;  // type error; errmsg already given +        } +        if (i == 1) { +          info.item_compare_ic = true; +        } else if (argvars[1].v_type != VAR_NUMBER) { +          info.item_compare_func = get_tv_string(&argvars[1]); +        } else if (i != 0) { +          EMSG(_(e_invarg)); +          goto theend; +        } +        if (info.item_compare_func != NULL) { +          if (*info.item_compare_func == NUL) { +            // empty string means default sort +            info.item_compare_func = NULL; +          } else if (STRCMP(info.item_compare_func, "n") == 0) { +            info.item_compare_func = NULL; +            info.item_compare_numeric = true; +          } else if (STRCMP(info.item_compare_func, "N") == 0) { +            info.item_compare_func = NULL; +            info.item_compare_numbers = true; +          } else if (STRCMP(info.item_compare_func, "f") == 0) { +            info.item_compare_func = NULL; +            info.item_compare_float = true; +          } else if (STRCMP(info.item_compare_func, "i") == 0) { +            info.item_compare_func = NULL; +            info.item_compare_ic = true;            }          }        }        if (argvars[2].v_type != VAR_UNKNOWN) { -        /* optional third argument: {dict} */ +        // optional third argument: {dict}          if (argvars[2].v_type != VAR_DICT) {            EMSG(_(e_dictreq)); -          return; +          goto theend;          } -        item_compare_selfdict = argvars[2].vval.v_dict; +        info.item_compare_selfdict = argvars[2].vval.v_dict;        }      } @@ -15323,19 +15364,20 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)          i++;        } -      item_compare_func_err = FALSE; +      info.item_compare_func_err = false;        // Test the compare function. -      if (item_compare_func != NULL +      if (info.item_compare_func != NULL            && item_compare2_not_keeping_zero(&ptrs[0], &ptrs[1])               == ITEM_COMPARE_FAIL) {          EMSG(_("E702: Sort compare function failed"));        } else {          // Sort the array with item pointers.          qsort(ptrs, (size_t)len, sizeof (sortItem_T), -              item_compare_func == NULL ? item_compare_not_keeping_zero : -                                          item_compare2_not_keeping_zero); +              (info.item_compare_func == NULL ? +               item_compare_not_keeping_zero : +               item_compare2_not_keeping_zero)); -        if (!item_compare_func_err) { +        if (!info.item_compare_func_err) {            // Clear the list and append the items in the sorted order.            l->lv_first    = NULL;            l->lv_last     = NULL; @@ -15351,21 +15393,24 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)        int (*item_compare_func_ptr)(const void *, const void *);        // f_uniq(): ptrs will be a stack of items to remove. -      item_compare_func_err = FALSE; -      item_compare_func_ptr = item_compare_func ? item_compare2_keeping_zero : -                                                  item_compare_keeping_zero; +      info.item_compare_func_err = false; +      if (info.item_compare_func != NULL) { +          item_compare_func_ptr = item_compare2_keeping_zero; +      } else { +          item_compare_func_ptr = item_compare_keeping_zero; +      }        for (li = l->lv_first; li != NULL && li->li_next != NULL; li = li->li_next) {          if (item_compare_func_ptr(&li, &li->li_next) == 0) {            ptrs[i++].item = li;          } -        if (item_compare_func_err) { +        if (info.item_compare_func_err) {            EMSG(_("E882: Uniq compare function failed"));            break;          }        } -      if (!item_compare_func_err) { +      if (!info.item_compare_func_err) {          while (--i >= 0) {            assert(ptrs[i].item->li_next);            li = ptrs[i].item->li_next; @@ -15384,6 +15429,9 @@ static void do_sort_uniq(typval_T *argvars, typval_T *rettv, bool sort)      xfree(ptrs);    } + +theend: +  sortinfo = old_sortinfo;  }  /// "sort"({list})" function @@ -17716,7 +17764,8 @@ void set_vim_var_special(const VimVarIndex idx, const SpecialVarValue val)  void set_vim_var_string(const VimVarIndex idx, const char *const val,                          const ptrdiff_t len)  { -  xfree(vimvars[idx].vv_str); +  clear_tv(&vimvars[idx].vv_di.di_tv); +  vimvars[idx].vv_type = VAR_STRING;    if (val == NULL) {      vimvars[idx].vv_str = NULL;    } else if (len == -1) { @@ -17732,7 +17781,8 @@ void set_vim_var_string(const VimVarIndex idx, const char *const val,  /// @param[in,out]  val  Value to set to. Reference count will be incremented.  void set_vim_var_list(const VimVarIndex idx, list_T *const val)  { -  list_unref(vimvars[idx].vv_list); +  clear_tv(&vimvars[idx].vv_di.di_tv); +  vimvars[idx].vv_type = VAR_LIST;    vimvars[idx].vv_list = val;    if (val != NULL) {      val->lv_refcount++; @@ -17746,7 +17796,8 @@ void set_vim_var_list(const VimVarIndex idx, list_T *const val)  ///                      Also keys of the dictionary will be made read-only.  void set_vim_var_dict(const VimVarIndex idx, dict_T *const val)  { -  dict_unref(vimvars[idx].vv_dict); +  clear_tv(&vimvars[idx].vv_di.di_tv); +  vimvars[idx].vv_type = VAR_DICT;    vimvars[idx].vv_dict = val;    if (val != NULL) { diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c index 9bb62891c7..0a4cbe724e 100644 --- a/src/nvim/event/process.c +++ b/src/nvim/event/process.c @@ -9,7 +9,7 @@  #include "nvim/event/wstream.h"  #include "nvim/event/process.h"  #include "nvim/event/libuv_process.h" -#include "nvim/event/pty_process.h" +#include "nvim/os/pty_process.h"  #include "nvim/globals.h"  #include "nvim/log.h" diff --git a/src/nvim/ex_docmd.c b/src/nvim/ex_docmd.c index dd096af6b3..b66b5cf3a9 100644 --- a/src/nvim/ex_docmd.c +++ b/src/nvim/ex_docmd.c @@ -6865,6 +6865,9 @@ void post_chdir(CdScope scope)        curwin->w_localdir = vim_strsave(NameBuff);      }      break; +  case kCdScopeInvalid: +    // We should never get here +    assert(false);    }    shorten_fnames(TRUE); @@ -7855,19 +7858,26 @@ static void ex_stopinsert(exarg_T *eap)   */  void exec_normal_cmd(char_u *cmd, int remap, bool silent)  { +  // Stuff the argument into the typeahead buffer. +  ins_typebuf(cmd, remap, 0, true, silent); +  exec_normal(false); +} + +/// Execute normal_cmd() until there is no typeahead left. +/// +/// @param was_typed whether or not something was typed +void exec_normal(bool was_typed) +{    oparg_T oa; -  /* -   * Stuff the argument into the typeahead buffer. -   * Execute normal_cmd() until there is no typeahead left. -   */    clear_oparg(&oa); -  finish_op = FALSE; -  ins_typebuf(cmd, remap, 0, TRUE, silent); -  while ((!stuff_empty() || (!typebuf_typed() && typebuf.tb_len > 0)) +  finish_op = false; +  while ((!stuff_empty() +          || ((was_typed || !typebuf_typed()) +              && typebuf.tb_len > 0))           && !got_int) {      update_topline_cursor(); -    normal_cmd(&oa, TRUE);      /* execute a Normal mode cmd */ +    normal_cmd(&oa, true);      // execute a Normal mode cmd    }  } diff --git a/src/nvim/ex_docmd.h b/src/nvim/ex_docmd.h index dbfc64e2f1..bafad20169 100644 --- a/src/nvim/ex_docmd.h +++ b/src/nvim/ex_docmd.h @@ -26,6 +26,7 @@  /// `getcwd()`. When using scopes as limits (e.g. in loops) don't use the scopes  /// directly, use `MIN_CD_SCOPE` and `MAX_CD_SCOPE` instead.  typedef enum { +  kCdScopeInvalid = -1,    kCdScopeWindow,  ///< Affects one window.    kCdScopeTab,     ///< Affects one tab page.    kCdScopeGlobal,  ///< Affects the entire instance of Neovim. diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index dbf0322d78..ae1857f318 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1754,10 +1754,11 @@ static int vgetorpeek(int advance)                     || ((compl_cont_status & CONT_LOCAL)                         && (c1 == Ctrl_N || c1 == Ctrl_P)))                ) { -            if (c1 == K_SPECIAL) +            if (c1 == K_SPECIAL) {                nolmaplen = 2; -            else { -              LANGMAP_ADJUST(c1, (State & (CMDLINE | INSERT)) == 0); +            } else { +              LANGMAP_ADJUST(c1, (State & (CMDLINE | INSERT)) == 0 +                             && get_real_state() != SELECTMODE);                nolmaplen = 0;              }              /* First try buffer-local mappings. */ diff --git a/src/nvim/log.c b/src/nvim/log.c index 773d497881..c31af6b287 100644 --- a/src/nvim/log.c +++ b/src/nvim/log.c @@ -10,7 +10,14 @@  #include "nvim/os/os.h"  #include "nvim/os/time.h" -#define USR_LOG_FILE "$HOME" _PATHSEPSTR ".nvimlog" +/// First location of the log file used by log_path_init() +#define USR_LOG_FILE "$NVIM_LOG_FILE" + +/// Fall back location of the log file used by log_path_init() +#define USR_LOG_FILE_2 "$HOME" _PATHSEPSTR ".nvimlog" + +/// Cached location of the log file set by log_path_init() +static char expanded_log_file_path[MAXPATHL + 1] = { 0 };  static uv_mutex_t mutex; @@ -18,6 +25,35 @@ static uv_mutex_t mutex;  # include "log.c.generated.h"  #endif +/// Initialize path to log file +/// +/// Tries to use #USR_LOG_FILE, then falls back #USR_LOG_FILE_2. Path to log +/// file is cached, so only the first call has effect, unless first call was not +/// successful. To make initialization not succeed either a bug in expand_env() +/// is needed or both `$NVIM_LOG_FILE` and `$HOME` environment variables +/// undefined. +/// +/// @return true if path was initialized, false otherwise. +static bool log_path_init(void) +{ +  if (expanded_log_file_path[0]) { +    return true; +  } +  expand_env((char_u *)USR_LOG_FILE, (char_u *)expanded_log_file_path, +             sizeof(expanded_log_file_path) - 1); +  // if the log file path expansion failed then fall back to stderr +  if (strcmp(USR_LOG_FILE, expanded_log_file_path) == 0) { +    memset(expanded_log_file_path, 0, sizeof(expanded_log_file_path)); +    expand_env((char_u *)USR_LOG_FILE_2, (char_u *)expanded_log_file_path, +               sizeof(expanded_log_file_path) - 1); +    if (strcmp(USR_LOG_FILE_2, expanded_log_file_path) == 0) { +      memset(expanded_log_file_path, 0, sizeof(expanded_log_file_path)); +      return false; +    } +  } +  return true; +} +  void log_init(void)  {    uv_mutex_init(&mutex); @@ -73,30 +109,17 @@ FILE *open_log_file(void)      return stderr;    } -  // expand USR_LOG_FILE and open the file -  FILE *log_file; +  // expand USR_LOG_FILE if needed and open the file +  FILE *log_file = NULL;    opening_log_file = true; -  { -    static char expanded_log_file_path[MAXPATHL + 1]; - -    expand_env((char_u *)USR_LOG_FILE, (char_u *)expanded_log_file_path, -               MAXPATHL); -    // if the log file path expansion failed then fall back to stderr -    if (strcmp(USR_LOG_FILE, expanded_log_file_path) == 0) { -      goto open_log_file_error; -    } - +  if (log_path_init()) {      log_file = fopen(expanded_log_file_path, "a"); -    if (log_file == NULL) { -      goto open_log_file_error; -    }    }    opening_log_file = false; -  return log_file; - -open_log_file_error: -  opening_log_file = false; +  if (log_file != NULL) { +    return log_file; +  }    do_log_to_file(stderr, ERROR_LOG_LEVEL, __func__, __LINE__, true,                   "Couldn't open USR_LOG_FILE, logging to stderr! This may be " diff --git a/src/nvim/normal.c b/src/nvim/normal.c index cc604352e1..d4055ac1ef 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -974,7 +974,7 @@ static int normal_execute(VimState *state, int key)    s->old_col = curwin->w_curswant;    s->c = key; -  LANGMAP_ADJUST(s->c, true); +  LANGMAP_ADJUST(s->c, get_real_state() != SELECTMODE);    // If a mapping was started in Visual or Select mode, remember the length    // of the mapping.  This is used below to not return to Insert mode for as diff --git a/src/nvim/os/pty_process.h b/src/nvim/os/pty_process.h new file mode 100644 index 0000000000..94923499ca --- /dev/null +++ b/src/nvim/os/pty_process.h @@ -0,0 +1,9 @@ +#ifndef NVIM_OS_PTY_PROCESS_H +#define NVIM_OS_PTY_PROCESS_H + +#ifdef WIN32 +# include "nvim/os/pty_process_win.h" +#else +# include "nvim/os/pty_process_unix.h" +#endif +#endif  // NVIM_OS_PTY_PROCESS_H diff --git a/src/nvim/event/pty_process.c b/src/nvim/os/pty_process_unix.c index 8eef72f12f..d0a38e663b 100644 --- a/src/nvim/event/pty_process.c +++ b/src/nvim/os/pty_process_unix.c @@ -26,11 +26,11 @@  #include "nvim/event/rstream.h"  #include "nvim/event/wstream.h"  #include "nvim/event/process.h" -#include "nvim/event/pty_process.h" +#include "nvim/os/pty_process_unix.h"  #include "nvim/log.h"  #ifdef INCLUDE_GENERATED_DECLARATIONS -# include "event/pty_process.c.generated.h" +# include "os/pty_process_unix.c.generated.h"  #endif  bool pty_process_spawn(PtyProcess *ptyproc) @@ -44,7 +44,7 @@ bool pty_process_spawn(PtyProcess *ptyproc)    Process *proc = (Process *)ptyproc;    assert(!proc->err);    uv_signal_start(&proc->loop->children_watcher, chld_handler, SIGCHLD); -  ptyproc->winsize = (struct winsize){ptyproc->height, ptyproc->width, 0, 0}; +  ptyproc->winsize = (struct winsize){ ptyproc->height, ptyproc->width, 0, 0 };    uv_disable_stdio_inheritance();    int master;    int pid = forkpty(&master, NULL, &termios, &ptyproc->winsize); @@ -86,11 +86,10 @@ error:    return false;  } -void pty_process_resize(PtyProcess *ptyproc, uint16_t width, -    uint16_t height) +void pty_process_resize(PtyProcess *ptyproc, uint16_t width, uint16_t height)    FUNC_ATTR_NONNULL_ALL  { -  ptyproc->winsize = (struct winsize){height, width, 0, 0}; +  ptyproc->winsize = (struct winsize){ height, width, 0, 0 };    ioctl(ptyproc->tty_fd, TIOCSWINSZ, &ptyproc->winsize);  } diff --git a/src/nvim/event/pty_process.h b/src/nvim/os/pty_process_unix.h index 446d7fd3c8..f7c57b3839 100644 --- a/src/nvim/event/pty_process.h +++ b/src/nvim/os/pty_process_unix.h @@ -1,5 +1,5 @@ -#ifndef NVIM_EVENT_PTY_PROCESS_H -#define NVIM_EVENT_PTY_PROCESS_H +#ifndef NVIM_OS_PTY_PROCESS_UNIX_H +#define NVIM_OS_PTY_PROCESS_UNIX_H  #include <sys/ioctl.h> @@ -25,6 +25,7 @@ static inline PtyProcess pty_process_init(Loop *loop, void *data)  }  #ifdef INCLUDE_GENERATED_DECLARATIONS -# include "event/pty_process.h.generated.h" +# include "os/pty_process_unix.h.generated.h"  #endif -#endif  // NVIM_EVENT_PTY_PROCESS_H + +#endif  // NVIM_OS_PTY_PROCESS_UNIX_H diff --git a/src/nvim/os/pty_process_win.h b/src/nvim/os/pty_process_win.h new file mode 100644 index 0000000000..20cc589925 --- /dev/null +++ b/src/nvim/os/pty_process_win.h @@ -0,0 +1,28 @@ +#ifndef NVIM_OS_PTY_PROCESS_WIN_H +#define NVIM_OS_PTY_PROCESS_WIN_H + +#include "nvim/event/libuv_process.h" + +typedef struct pty_process { +  Process process; +  char *term_name; +  uint16_t width, height; +} PtyProcess; + +#define pty_process_spawn(job) libuv_process_spawn((LibuvProcess *)job) +#define pty_process_close(job) libuv_process_close((LibuvProcess *)job) +#define pty_process_close_master(job) libuv_process_close((LibuvProcess *)job) +#define pty_process_resize(job, width, height) +#define pty_process_teardown(loop) + +static inline PtyProcess pty_process_init(Loop *loop, void *data) +{ +  PtyProcess rv; +  rv.process = process_init(loop, kProcessTypePty, data); +  rv.term_name = NULL; +  rv.width = 80; +  rv.height = 24; +  return rv; +} + +#endif  // NVIM_OS_PTY_PROCESS_WIN_H diff --git a/src/nvim/po/eo.po b/src/nvim/po/eo.po index 5b0cb2260b..6bc76506ae 100644 --- a/src/nvim/po/eo.po +++ b/src/nvim/po/eo.po @@ -23,8 +23,8 @@ msgid ""  msgstr ""  "Project-Id-Version: Vim(Esperanto)\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-30 17:54+0200\n" -"PO-Revision-Date: 2015-07-30 18:00+0200\n" +"POT-Creation-Date: 2016-02-13 23:42+0100\n" +"PO-Revision-Date: 2016-02-13 23:45+0100\n"  "Last-Translator: Dominique PELLÉ <dominique.pelle@gmail.com>\n"  "Language-Team: \n"  "Language: eo\n" @@ -504,10 +504,6 @@ msgstr "E686: Argumento de %s devas esti Listo"  msgid "E712: Argument of %s must be a List or Dictionary"  msgstr "E712: Argumento de %s devas esti Listo aŭ Vortaro" -#: ../eval.c:144 -msgid "E713: Cannot use empty key for Dictionary" -msgstr "E713: Ne eblas uzi malplenan ŝlosilon de Vortaro" -  #: ../eval.c:145  msgid "E714: List required"  msgstr "E714: Listo bezonata" @@ -657,6 +653,9 @@ msgstr "E110: Mankas ')'"  msgid "E695: Cannot index a Funcref"  msgstr "E695: Ne eblas indeksi Funcref" +msgid "E909: Cannot index a special variable" +msgstr "E909: Ne eblas indeksi specialan variablon" +  #: ../eval.c:4839  #, c-format  msgid "E112: Option name missing: %s" @@ -689,7 +688,7 @@ msgstr "E697: Mankas fino de Listo ']': %s"  #: ../eval.c:5750  msgid "Not enough memory to set references, garbage collection aborted!" -msgstr "Ne sufiĉa memory por valorigi referencojn, senrubigado ĉesigita!" +msgstr "Ne sufiĉa memoro por valorigi referencojn, senrubigado ĉesigita!"  #: ../eval.c:6475  #, c-format @@ -874,6 +873,18 @@ msgstr "E745: Uzo de Listo kiel Nombro"  msgid "E728: Using a Dictionary as a Number"  msgstr "E728: Uzo de Vortaro kiel Nombro" +msgid "E891: Using a Funcref as a Float" +msgstr "E891: Uzo de Funcref kiel Glitpunktnombro" + +msgid "E892: Using a String as a Float" +msgstr "E892: Uzo de Ĉeno kiel Glitpunktnombro" + +msgid "E893: Using a List as a Float" +msgstr "E893: Uzo de Listo kiel Glitpunktnombro" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: Uzo de Vortaro kiel Glitpunktnombro" +  #: ../eval.c:16259  msgid "E729: using Funcref as a String"  msgstr "E729: uzo de Funcref kiel Ĉeno" @@ -886,6 +897,9 @@ msgstr "E730: uzo de Listo kiel Ĉeno"  msgid "E731: using Dictionary as a String"  msgstr "E731: uzo de Vortaro kiel Ĉeno" +msgid "E908: using an invalid value as a String" +msgstr "E908: uzo de nevalida valoro kiel Ĉeno" +  #: ../eval.c:16619  #, c-format  msgid "E706: Variable type mismatch for: %s" @@ -1391,6 +1405,13 @@ msgstr "linio %<PRId64>: %s"  msgid "cmd: %s"  msgstr "kmd: %s" +msgid "frame is zero" +msgstr "kadro estas nul" + +#, c-format +msgid "frame at highest level: %d" +msgstr "kadro je la plej alta nivelo: %d" +  #: ../ex_cmds2.c:322  #, c-format  msgid "Breakpoint in \"%s%s\" line %<PRId64>" @@ -2861,6 +2882,9 @@ msgstr "E46: Ne eblas ŝanĝi nurlegeblan variablon \"%s\""  msgid "E794: Cannot set variable in the sandbox: \"%s\""  msgstr "E794: Ne eblas agordi variablon en la sabloludejo: \"%s\"" +msgid "E713: Cannot use empty key for Dictionary" +msgstr "E713: Ne eblas uzi malplenan ŝlosilon de Vortaro" +  #: ../globals.h:1076  msgid "E47: Error while reading errorfile"  msgstr "E47: Eraro dum legado de erardosiero" @@ -4090,12 +4114,12 @@ msgid ""  "\n"  "(1) Another program may be editing the same file.  If this is the case,\n"  "    be careful not to end up with two different instances of the same\n" -"    file when making changes." +"    file when making changes.  Quit, or continue with caution.\n"  msgstr ""  "\n" -"(1) Alia programo eble redaktas la saman dosieron.\n" -"    Se jes, estu singarda por ne havi du malsamajn\n" -"    aperojn de la sama dosiero, kiam vi faros ŝanĝojn." +"(1) Alia programo eble redaktas la saman dosieron. Se jes, estu singarda\n" +"    por ne havi du malsamajn aperojn de la sama dosiero, kiam vi faros\n" +"    ŝanĝojn. Eliru aŭ daŭrigu singarde.\n"  #: ../memline.c:3245  msgid "  Quit, or continue with caution.\n" @@ -4792,6 +4816,15 @@ msgstr ""  "\n"  "Ne povis ŝalti kuntekston de sekureco por " +#, c-format +msgid "Could not set security context %s for %s" +msgstr "Ne povis ŝalti kuntekston de sekureco %s por %s" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "" +"Ne povis akiri kuntekston de sekureco %s por %s. Gi nun estas forigata!" +  #: ../os_unix.c:1558 ../os_unix.c:1647  #, c-format  msgid "dlerror = \"%s\"" @@ -5717,6 +5750,9 @@ msgstr "Neniu sintaksa elemento difinita por tiu bufro"  msgid "E390: Illegal argument: %s"  msgstr "E390: Nevalida argumento: %s" +msgid "syntax iskeyword " +msgstr "sintakso iskeyword " +  #: ../syntax.c:3299  #, c-format  msgid "E391: No such syntax cluster: %s" @@ -5813,6 +5849,10 @@ msgstr "E847: Tro da sintaksaj inkluzivoj"  msgid "E789: Missing ']': %s"  msgstr "E789: Mankas ']': %s" +#, c-format +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: vosta signo post ']': %s]%s" +  #: ../syntax.c:4531  #, c-format  msgid "E398: Missing '=': %s" diff --git a/src/nvim/po/it.po b/src/nvim/po/it.po index 171e155689..084102da60 100644 --- a/src/nvim/po/it.po +++ b/src/nvim/po/it.po @@ -13,13 +13,13 @@ msgid ""  msgstr ""  "Project-Id-Version: vim 7.4\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-08-11 20:58+0200\n" -"PO-Revision-Date:  2015-08-11 22:02+0200\n" -"Last-Translator:   Vlad Sandrini   <vlad.gently@gmail.com>\n" -"Language-Team:     Italian                   Antonio Colombo <azc100@gmail." -"com>                   Vlad Sandrini <vlad.gently@gmail." -"com>                   Luciano Montanaro <mikelima@cirulla.net>\n" -"Language: \n" +"POT-Creation-Date: 2016-02-11 12:10+0100\n" +"PO-Revision-Date:  2016-02-11 14:42+0200\n" +"Last-Translator:   Antonio Colombo   <azc100@gmail.com>\n" +"Language-Team:     Antonio Colombo   <azc100@gmail.com>" +"                   Vlad Sandrini     <vlad.gently@gmail.com" +"                   Luciano Montanaro <mikelima@cirulla.net>\n" +"Language: Italian\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=ISO_8859-1\n"  "Content-Transfer-Encoding: 8-bit\n" @@ -491,10 +491,6 @@ msgstr "E686: L'argomento di %s deve essere una Lista"  msgid "E712: Argument of %s must be a List or Dictionary"  msgstr "E712: L'argomento di %s deve essere una Lista o un Dizionario" -#: ../eval.c:144 -msgid "E713: Cannot use empty key for Dictionary" -msgstr "E713: Non posso usare una chiave nulla per il Dizionario" -  #: ../eval.c:145  msgid "E714: List required"  msgstr "E714:  necessaria una Lista" @@ -548,7 +544,7 @@ msgstr "E461: Nome di variabile non ammesso: %s"  # nuovo  #: ../eval.c:157  msgid "E806: using Float as a String" -msgstr "E806: uso di un numero con virgola come stringa" +msgstr "E806: uso di un Numero-a-virgola-mobile come Stringa"  #: ../eval.c:1830  msgid "E687: Less targets than List items" @@ -635,7 +631,7 @@ msgstr "E694: Operazione non valida per Funcref"  #: ../eval.c:4277  msgid "E804: Cannot use '%' with Float" -msgstr "E804: Non si pu usare '%' con un numero con virgola" +msgstr "E804: Non si pu usare '%' con un Numero-a-virgola-mobile"  #: ../eval.c:4478  msgid "E110: Missing ')'" @@ -645,6 +641,9 @@ msgstr "E110: Manca ')'"  msgid "E695: Cannot index a Funcref"  msgstr "E695: Non posso indicizzare un Funcref" +msgid "E909: Cannot index a special variable" +msgstr "E909: Non posso indicizzare una variabile speciale" +  #: ../eval.c:4839  #, c-format  msgid "E112: Option name missing: %s" @@ -736,7 +735,7 @@ msgstr "E725: Chiamata di funzione dict in assenza di Dizionario: %s"  #: ../eval.c:7453  msgid "E808: Number or Float required" -msgstr "E808: Ci vuole un numero intero o con virgola" +msgstr "E808: Ci vuole un Numero o un Numero-a-virgola-mobile"  #: ../eval.c:7503  msgid "add() argument" @@ -847,7 +846,7 @@ msgstr "E677: Errore in scrittura su file temporaneo"  #: ../eval.c:16159  msgid "E805: Using a Float as a Number" -msgstr "E805: Uso di un numero con virgola come intero" +msgstr "E805: Uso di un Numero-a-virgola-mobile come Numero"  #: ../eval.c:16162  msgid "E703: Using a Funcref as a Number" @@ -861,6 +860,18 @@ msgstr "E745: Uso di Lista come Numero"  msgid "E728: Using a Dictionary as a Number"  msgstr "E728: Uso di Dizionario come Numero" +msgid "E891: Using a Funcref as a Float" +msgstr "E891: Uso di Funcref come Numero-a-virgola-mobile" + +msgid "E892: Using a String as a Float" +msgstr "E892: Uso di Stringa come Numero-a-virgola-mobile" + +msgid "E893: Using a List as a Float" +msgstr "E893: Uso di Lista come Numero-a-virgola-mobile" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: Uso di Dizionario come Numero-a-virgola-mobile" +  #: ../eval.c:16259  msgid "E729: using Funcref as a String"  msgstr "E729: uso di Funcref come Stringa" @@ -873,6 +884,10 @@ msgstr "E730: uso di Lista come Stringa"  msgid "E731: using Dictionary as a String"  msgstr "E731: uso di Dizionario come Stringa" +# nuovo +msgid "E908: using an invalid value as a String" +msgstr "E908: uso di un valore non valido come Stringa" +  #: ../eval.c:16619  #, c-format  msgid "E706: Variable type mismatch for: %s" @@ -960,12 +975,14 @@ msgid "E129: Function name required"  msgstr "E129: Nome funzione necessario"  #: ../eval.c:17824 +#, c-format  msgid "E128: Function name must start with a capital or \"s:\": %s" -msgstr "E128: Il nome funzione deve iniziare con una maiuscola o \"s:\": %s" +msgstr "E128: Il nome funzione deve iniziare con maiuscola o \"s:\": %s"  #: ../eval.c:17833 +#, c-format  msgid "E884: Function name cannot contain a colon: %s" -msgstr "E884: Il nome funzione non pu contenere una virgola: %s" +msgstr "E884: Il nome della funzione non pu contenere un due punti: %s"  #: ../eval.c:18336  #, c-format @@ -1382,6 +1399,13 @@ msgstr "riga %<PRId64>: %s"  msgid "cmd: %s"  msgstr "com: %s" +msgid "frame is zero" +msgstr "al livello zero" + +#, c-format +msgid "frame at highest level: %d" +msgstr "al livello pi alto: %d" +  #: ../ex_cmds2.c:322  #, c-format  msgid "Breakpoint in \"%s%s\" line %<PRId64>" @@ -1422,8 +1446,7 @@ msgstr "E162: Buffer \"%s\" non salvato dopo modifica"  #: ../ex_cmds2.c:1480  msgid "Warning: Entered other buffer unexpectedly (check autocommands)"  msgstr "" -"Avviso: Entrato in altro buffer inaspettatamente (controllare " -"autocomandi)" +"Avviso: Entrato in altro buffer inaspettatamente (controllare autocomandi)"  #: ../ex_cmds2.c:1826  msgid "E163: There is only one file to edit" @@ -2301,19 +2324,19 @@ msgstr "[in formato DOS]"  #: ../fileio.c:3801  msgid "[mac]" -msgstr "[MAC]" +msgstr "[Mac]"  #: ../fileio.c:3801  msgid "[mac format]" -msgstr "[in formato MAC]" +msgstr "[in formato Mac]"  #: ../fileio.c:3807  msgid "[unix]" -msgstr "[UNIX]" +msgstr "[Unix]"  #: ../fileio.c:3807  msgid "[unix format]" -msgstr "[in formato UNIX]" +msgstr "[in formato Unix]"  #: ../fileio.c:3831  msgid "1 line, " @@ -2864,6 +2887,9 @@ msgstr "E46: Non posso cambiare la variabile read-only \"%s\""  msgid "E794: Cannot set variable in the sandbox: \"%s\""  msgstr "E794: Non posso impostare la variabile read-only in ambiente protetto: \"%s\"" +msgid "E713: Cannot use empty key for Dictionary" +msgstr "E713: Non posso usare una chiave nulla per il Dizionario" +  #: ../globals.h:1076  msgid "E47: Error while reading errorfile"  msgstr "E47: Errore leggendo il file errori" @@ -4087,12 +4113,12 @@ msgid ""  "\n"  "(1) Another program may be editing the same file.  If this is the case,\n"  "    be careful not to end up with two different instances of the same\n" -"    file when making changes." +"    file when making changes.  Quit, or continue with caution.\n"  msgstr ""  "\n" -"(1) Un altro programma pu essere in edit sullo stesso file.\n" -"    Se  cos, attenzione a non trovarti con due versioni\n" -"    differenti dello stesso file a cui vengono apportate modifiche." +"(1) Un altro programma pu essere in edit sullo stesso file.  Se  cos,\n" +"    attenzione a non finire con due sessioni differenti che modificano lo\n" +"    stesso file.  Uscire da Vim, o continuare con cautela.\n"  #: ../memline.c:3245  msgid "  Quit, or continue with caution.\n" @@ -4335,7 +4361,7 @@ msgstr "E766: Argomenti non sufficienti per printf()"  #: ../message.c:3119  msgid "E807: Expected Float argument for printf()" -msgstr "E807: Numero con virgola atteso come argomento per printf()" +msgstr "E807: Numero-a-virgola-mobile atteso come argomento per printf()"  #: ../message.c:3873  msgid "E767: Too many arguments to printf()" @@ -4526,7 +4552,8 @@ msgstr "E574: Tipo di registro sconosciuto: %d"  msgid ""  "E883: search pattern and expression register may not contain two or more "  "lines" -msgstr "E883: espressione di ricerca e registro dell'espressione non possono " +msgstr "" +"E883: espressione di ricerca e registro dell'espressione non possono "  "contenere due o pi righe"  #: ../ops.c:5089 @@ -4794,6 +4821,14 @@ msgstr ""  "\n"  "Non posso impostare il contesto di sicurezza per " +#, c-format +msgid "Could not set security context %s for %s" +msgstr "Non posso impostare il contesto di sicurezza %s per %s" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "Non posso ottenere il contesto di sicurezza %s per %s. Lo rimuovo!" +  #: ../os_unix.c:1558 ../os_unix.c:1647  #, c-format  msgid "dlerror = \"%s\"" @@ -4890,6 +4925,7 @@ msgid "E777: String or List expected"  msgstr "E777: aspettavo Stringa o Lista"  #: ../regexp.c:359 +#, c-format  msgid "E369: invalid item in %s%%[]"  msgstr "E369: elemento non valido in %s%%[]" @@ -5005,6 +5041,7 @@ msgid "External submatches:\n"  msgstr "Sotto-corrispondenze esterne:\n"  #: ../regexp.c:2470 +#, c-format  msgid "E888: (NFA regexp) cannot repeat %s"  msgstr "E888: (NFA regexp) non riesco a ripetere %s" @@ -5399,8 +5436,7 @@ msgstr "Valore errato per CHECKCOMPOUNDPATTERN in %s riga %d: %s"  #: ../spell.c:4847  #, c-format  msgid "Different combining flag in continued affix block in %s line %d: %s" -msgstr "" -"Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s" +msgstr "Flag combinazione diverso in blocco affissi continuo in %s riga %d: %s"  #: ../spell.c:4850  #, c-format @@ -5639,10 +5675,12 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"  msgstr "E765: 'spellfile' non ha %<PRId64> elementi"  #: ../spell.c:8074 +#, c-format  msgid "Word '%.*s' removed from %s"  msgstr "Parola '%.*s' rimossa da %s"  #: ../spell.c:8117 +#, c-format  msgid "Word '%.*s' added to %s"  msgstr "Parola '%.*s' aggiunta a %s" @@ -5720,6 +5758,9 @@ msgstr "Nessun elemento sintattico definito per questo buffer"  msgid "E390: Illegal argument: %s"  msgstr "E390: Argomento non ammesso: %s" +msgid "syntax iskeyword " +msgstr "syntax iskeyword " +  #: ../syntax.c:3299  #, c-format  msgid "E391: No such syntax cluster: %s" @@ -5816,6 +5857,9 @@ msgstr "E847: Troppe inclusioni di sintassi"  msgid "E789: Missing ']': %s"  msgstr "E789: Manca ']': %s" +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: Caratteri in pi dopo ']': %s]%s" +  #: ../syntax.c:4531  #, c-format  msgid "E398: Missing '=': %s" diff --git a/src/nvim/po/ja.euc-jp.po b/src/nvim/po/ja.euc-jp.po index d3061d3c5a..85042e3506 100644 --- a/src/nvim/po/ja.euc-jp.po +++ b/src/nvim/po/ja.euc-jp.po @@ -1,11 +1,11 @@ -# Japanese translation for Vim			vim:set foldmethod=marker: +# Japanese translation for Vim  #  # Do ":help uganda"  in Vim to read copying and usage conditions.  # Do ":help credits" in Vim to see a list of people who contributed.  # -# Last Change: 2013 Jul 06 +# Copyright (C) 2001-2016 MURAOKA Taro <koron.kaoriya@gmail.com>, +# 			  vim-jp (http://vim-jp.org/)  # -# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>  # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.  #  # Generated from ja.po, DO NOT EDIT. @@ -14,10 +14,10 @@ msgid ""  msgstr ""  "Project-Id-Version: Vim 7.4\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-05-26 14:21+0200\n" -"PO-Revision-Date: 2013-07-06 15:00+0900\n" +"POT-Creation-Date: 2016-02-01 09:02+0900\n" +"PO-Revision-Date: 2016-02-01 09:08+0900\n"  "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n" -"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n" +"Language-Team: vim-jp (https://github.com/vim-jp/lang-ja)\n"  "Language: Japanese\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=euc-jp\n" @@ -34,7 +34,7 @@ msgstr "顼: ̤ΤΥץǤ"  #: ../buffer.c:92  msgid "[Location List]" -msgstr "[ꥹ]" +msgstr "[ꥹ]"  #: ../buffer.c:93  msgid "[Quickfix List]" @@ -277,7 +277,7 @@ msgstr "E810: եɹ⤷ϽǤޤ"  #: ../diff.c:755  msgid "E97: Cannot create diffs" -msgstr "E97: ʬǤޤ " +msgstr "E97: ʬǤޤ"  #: ../diff.c:966  msgid "E816: Cannot read patch output" @@ -293,7 +293,7 @@ msgstr "E99: ߤΥХåեϺʬ⡼ɤǤϤޤ"  #: ../diff.c:2100  msgid "E793: No other buffer in diff mode is modifiable" -msgstr "E793: ʬ⡼ɤǤ¾ΥХåեѹǽǤ" +msgstr "E793: ʬ⡼ɤǤ¾ΥХåեѹǤޤ"  #: ../diff.c:2102  msgid "E100: No other buffer in diff mode" @@ -349,7 +349,7 @@ msgstr " ()䴰 (^L^N^P)"  #: ../edit.c:86  msgid " File name completion (^F^N^P)" -msgstr "ե̾䴰 (^F^N^P)" +msgstr " ե̾䴰 (^F^N^P)"  #: ../edit.c:87  msgid " Tag completion (^]^N^P)" @@ -377,7 +377,7 @@ msgstr " ޥɥ饤䴰 (^V^N^P)"  #: ../edit.c:94  msgid " User defined completion (^U^N^P)" -msgstr " 桼䴰 (^U^N^P)" +msgstr " 桼䴰 (^U^N^P)"  #: ../edit.c:95  msgid " Omni completion (^O^N^P)" @@ -679,6 +679,11 @@ msgstr "E696: ꥹȷ˥ޤޤ: %s"  msgid "E697: Missing end of List ']': %s"  msgstr "E697: ꥹȷκǸ ']' ޤ: %s" +#: ../eval.c:5807 +msgid "Not enough memory to set references, garbage collection aborted!" +msgstr "" +"٥å쥯ߤޤ! ȤΤ˥꤬ޤ" +  #: ../eval.c:6475  #, c-format  msgid "E720: Missing colon in Dictionary: %s" @@ -721,7 +726,7 @@ msgstr "E117: ̤ΤδؿǤ: %s"  #: ../eval.c:7383  #, c-format  msgid "E119: Not enough arguments for function: %s" -msgstr "E119: ؿΰʲޤ: %s" +msgstr "E119: ؿΰޤ: %s"  #: ../eval.c:7387  #, c-format @@ -826,18 +831,16 @@ msgid "sort() argument"  msgstr "sort() ΰ"  #: ../eval.c:13721 -#, fuzzy  msgid "uniq() argument" -msgstr "add() ΰ" +msgstr "uniq() ΰ"  #: ../eval.c:13776  msgid "E702: Sort compare function failed"  msgstr "E702: ȤӴؿԤޤ"  #: ../eval.c:13806 -#, fuzzy  msgid "E882: Uniq compare function failed" -msgstr "E702: ȤӴؿԤޤ" +msgstr "E882: Uniq ӴؿԤޤ"  #: ../eval.c:14085  msgid "(Invalid)" @@ -863,6 +866,18 @@ msgstr "E745: ꥹȷͤȤưäƤޤ"  msgid "E728: Using a Dictionary as a Number"  msgstr "E728: ͤȤưäƤޤ" +msgid "E891: Using a Funcref as a Float" +msgstr "E891: ؿȷưȤưäƤޤ" + +msgid "E892: Using a String as a Float" +msgstr "E892: ʸưȤưäƤޤ" + +msgid "E893: Using a List as a Float" +msgstr "E893: ꥹȷưȤưäƤޤ" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: ưȤưäƤޤ" +  #: ../eval.c:16259  msgid "E729: using Funcref as a String"  msgstr "E729: ؿȷʸȤưäƤޤ" @@ -961,14 +976,14 @@ msgid "E129: Function name required"  msgstr "E129: ؿ̾ᤵޤ"  #: ../eval.c:17824 -#, fuzzy, c-format +#, c-format  msgid "E128: Function name must start with a capital or \"s:\": %s" -msgstr "E128: ؿ̾ʸǻϤޤ뤫ޤޤʤФʤޤ: %s" +msgstr "E128: ؿ̾ʸ \"s:\" ǻϤޤʤФʤޤ: %s"  #: ../eval.c:17833 -#, fuzzy, c-format +#, c-format  msgid "E884: Function name cannot contain a colon: %s" -msgstr "E128: ؿ̾ʸǻϤޤ뤫ޤޤʤФʤޤ: %s" +msgstr "E884: ؿ̾ˤϥϴޤޤ: %s"  #: ../eval.c:18336  #, c-format @@ -1081,7 +1096,7 @@ msgstr "E136: viminfo: 顼¿Τ, ʹߤϥåפޤ"  #: ../ex_cmds.c:1458  #, c-format  msgid "Reading viminfo file \"%s\"%s%s%s" -msgstr "viminfoե \"%s\"%s%s%s ɹ " +msgstr "viminfoե \"%s\"%s%s%s ɹ"  #: ../ex_cmds.c:1460  msgid " info" @@ -1357,6 +1372,10 @@ msgstr "E158: ̵ʥХåե̾Ǥ: %s"  msgid "E157: Invalid sign ID: %<PRId64>"  msgstr "E157: ̵sign̻ҤǤ: %<PRId64>" +#, c-format +msgid "E885: Not possible to change sign %s" +msgstr "E885: ѹǤʤ sign Ǥ: %s" +  #: ../ex_cmds.c:6066  msgid " (not supported)"  msgstr " (ݡ)" @@ -1379,6 +1398,13 @@ msgstr " %<PRId64>: %s"  msgid "cmd: %s"  msgstr "ޥ: %s" +msgid "frame is zero" +msgstr "ե졼ब 0 Ǥ" + +#, c-format +msgid "frame at highest level: %d" +msgstr "ǹ٥Υե졼: %d" +  #: ../ex_cmds2.c:322  #, c-format  msgid "Breakpoint in \"%s%s\" line %<PRId64>" @@ -1528,7 +1554,8 @@ msgstr "E197:  \"%s\" Ǥޤ"  #. don't wait for return  #: ../ex_docmd.c:387  msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode." -msgstr "Ex⡼ɤޤ. Ρޥˤ\"visual\"ϤƤ." +msgstr "" +"Ex⡼ɤޤ. Ρޥ⡼ɤˤ\"visual\"ϤƤ."  #: ../ex_docmd.c:428  msgid "E501: At end-of-file" @@ -1553,7 +1580,7 @@ msgstr "ؿκǸǤ"  #: ../ex_docmd.c:1628  msgid "E464: Ambiguous use of user-defined command" -msgstr "E464: 桼ޥɤΤޤʻѤǤ" +msgstr "E464: 桼ޥɤΤޤʻѤǤ"  #: ../ex_docmd.c:1638  msgid "E492: Not an editor command" @@ -1606,14 +1633,14 @@ msgstr "E174: ޥɤˤޤ: ˤ ! ɲäƤ"  #: ../ex_docmd.c:4432  msgid ""  "\n" -"    Name        Args Range Complete  Definition" +"    Name        Args       Address   Complete  Definition"  msgstr ""  "\n" -"    ̾         ϰ  䴰      " +"    ̾               ɥ쥹  䴰      "  #: ../ex_docmd.c:4516  msgid "No user-defined commands found" -msgstr "桼ޥɤĤޤǤ" +msgstr "桼ޥɤĤޤǤ"  #: ../ex_docmd.c:4538  msgid "E175: No attribute specified" @@ -1633,7 +1660,10 @@ msgstr "E178: Ȥξά̵ͤǤ"  #: ../ex_docmd.c:4625  msgid "E179: argument required for -complete" -msgstr "E179: -䴰ΤΰɬפǤ" +msgstr "E179: -complete ˤϰɬפǤ" + +msgid "E179: argument required for -addr" +msgstr "E179: -addr ˤϰɬפǤ"  #: ../ex_docmd.c:4635  #, c-format @@ -1650,12 +1680,16 @@ msgstr "E183: 桼ޥɤϱʸǻϤޤʤФʤޤ"  #: ../ex_docmd.c:4696  msgid "E841: Reserved name, cannot be used for user defined command" -msgstr "E841: ͽ̾ʤΤ, 桼ޥɤѤǤޤ" +msgstr "E841: ͽ̾ʤΤ, 桼ޥɤѤǤޤ"  #: ../ex_docmd.c:4751  #, c-format  msgid "E184: No such user-defined command: %s" -msgstr "E184: Υ桼ޥɤϤޤ: %s" +msgstr "E184: Υ桼ޥɤϤޤ: %s" + +#, c-format +msgid "E180: Invalid address type value: %s" +msgstr "E180: ̵ʥɥ쥹ͤǤ: %s"  #: ../ex_docmd.c:5219  #, c-format @@ -2019,11 +2053,11 @@ msgstr "ʥե̾"  #: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578  msgid "is a directory" -msgstr " ϥǥ쥯ȥǤ" +msgstr "ϥǥ쥯ȥǤ"  #: ../fileio.c:397  msgid "is not a file" -msgstr " ϥեǤϤޤ" +msgstr "ϥեǤϤޤ"  #: ../fileio.c:508 ../fileio.c:3522  msgid "[New File]" @@ -2039,7 +2073,7 @@ msgstr "[ե]"  #: ../fileio.c:534  msgid "[Permission Denied]" -msgstr "[ǧĤޤ]" +msgstr "[¤ޤ]"  #: ../fileio.c:653  msgid "E200: *ReadPre autocommands made the file unreadable" @@ -2210,7 +2244,7 @@ msgstr " Ѵ顼"  #: ../fileio.c:3509  #, c-format  msgid " in line %<PRId64>;" -msgstr " %<PRId64>;" +msgstr "  %<PRId64>;"  #: ../fileio.c:3519  msgid "[Device]" @@ -2766,9 +2800,8 @@ msgid "E37: No write since last change (add ! to override)"  msgstr "E37: Ǹѹ¸Ƥޤ (! ɲäѹ˴)"  #: ../globals.h:1055 -#, fuzzy  msgid "E37: No write since last change" -msgstr "[Ǹѹ¸Ƥޤ]\n" +msgstr "E37: Ǹѹ¸Ƥޤ"  #: ../globals.h:1056  msgid "E38: Null argument" @@ -2810,7 +2843,7 @@ msgstr "E42: 顼Ϥޤ"  #: ../globals.h:1067  msgid "E776: No location list" -msgstr "E776: ꥹȤϤޤ" +msgstr "E776: ꥹȤϤޤ"  #: ../globals.h:1068  msgid "E43: Damaged match string" @@ -3831,7 +3864,7 @@ msgid ""  "\n"  msgstr ""  "\n" -"줫.swpեƤ\n" +".swpեϺƤޤ\n"  "\n"  #. use msg() to start the scrolling properly @@ -3845,7 +3878,7 @@ msgstr "   ߤΥǥ쥯ȥ:\n"  #: ../memline.c:1448  msgid "   Using specified name:\n" -msgstr "   ̾:\n" +msgstr "   ʲ̾:\n"  #: ../memline.c:1450  msgid "   In directory " @@ -3901,7 +3934,7 @@ msgid ""  "         user name: "  msgstr ""  "\n" -"          桼̾: " +"        桼̾: "  #: ../memline.c:1568  msgid "   host name: " @@ -4050,12 +4083,12 @@ msgid ""  msgstr ""  "\n"  "(1) ̤ΥץबƱեԽƤ뤫⤷ޤ.\n" -"    ξˤ, ѹݤ˺ǽŪ, Ʊեΰۤʤ\n" -"    2ĤΥǤƤޤȤդƤ." +"    ξˤ, ѹƤޤ1ĤΥեФưۤʤ2Ĥ\n" +"    ǤƤޤΤ, ʤ褦˵ĤƤ."  #: ../memline.c:3245  msgid "  Quit, or continue with caution.\n" -msgstr "  λ뤫, դʤ³Ƥ.\n" +msgstr "    λ뤫, դʤ³Ƥ.\n"  #: ../memline.c:3246  msgid "(2) An edit session for this file crashed.\n" @@ -4479,6 +4512,11 @@ msgstr ""  msgid "E574: Unknown register type %d"  msgstr "E574: ̤ΤΥ쥸 %d Ǥ" +msgid "" +"E883: search pattern and expression register may not contain two or more " +"lines" +msgstr "E883: ѥȼ쥸ˤ2ʾޤޤ" +  #: ../ops.c:5089  #, c-format  msgid "%<PRId64> Cols; " @@ -4563,6 +4601,10 @@ msgstr "E522: termcap ˸Ĥޤ"  msgid "E539: Illegal character <%s>"  msgstr "E539: ʸǤ <%s>" +#, c-format +msgid "For option %s" +msgstr "ץ: %s" +  #: ../option.c:3862  msgid "E529: Cannot set 'term' to empty string"  msgstr "E529: 'term' ˤ϶ʸǤޤ" @@ -4740,6 +4782,14 @@ msgstr ""  "\n"  "ƥƥȤǤޤ " +#, c-format +msgid "Could not set security context %s for %s" +msgstr "ƥƥ %s  %s Ǥޤ" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "ƥƥ %s  %s Ǥޤ. ޤ!" +  #: ../os_unix.c:1558 ../os_unix.c:1647  #, c-format  msgid "dlerror = \"%s\"" @@ -4960,6 +5010,10 @@ msgstr "E554: %s{...} ʸˡ顼ޤ"  msgid "External submatches:\n"  msgstr "ʬ:\n" +#, c-format +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA ɽ) ֤ޤ %s" +  #: ../regexp.c:7022  msgid ""  "E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " @@ -4968,6 +5022,9 @@ msgstr ""  "E864: \\%#= ˤ 0, 1 ⤷ 2 Τߤ³ޤɽϼư"  "ޤ" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "Υѥ˥Хåȥå RE ŬѤޤ: " +  #: ../regexp_nfa.c:239  msgid "E865: (NFA) Regexp end encountered prematurely"  msgstr "E865: (NFA) Ԥɽνüãޤ" @@ -4980,7 +5037,7 @@ msgstr "E866: (NFA ɽ) ֤äƤޤ: %c"  #: ../regexp_nfa.c:242  #, c-format  msgid "E877: (NFA regexp) Invalid character class: %<PRId64>" -msgstr "" +msgstr "E877: (NFA ɽ) ̵ʸ饹: %<PRId64>"  #: ../regexp_nfa.c:1261  #, c-format @@ -5590,14 +5647,14 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"  msgstr "E765: 'spellfile' ˤ %<PRId64> ĤΥȥϤޤ"  #: ../spell.c:8074 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' removed from %s" -msgstr "%s ñ줬ޤ" +msgstr "ñ '%.*s'  %s ޤ"  #: ../spell.c:8117 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' added to %s" -msgstr "%s ñ줬ɲäޤ" +msgstr "ñ '%.*s'  %s ɲäޤ"  #: ../spell.c:8381  msgid "E763: Word characters differ between spell files" @@ -5673,6 +5730,9 @@ msgstr "ΥХåե줿ʸǤϤޤ"  msgid "E390: Illegal argument: %s"  msgstr "E390: ʰǤ: %s" +msgid "syntax iskeyword " +msgstr "å iskeyword " +  #: ../syntax.c:3299  #, c-format  msgid "E391: No such syntax cluster: %s" @@ -5769,6 +5829,10 @@ msgstr "E847: ʸμ(include)¿ޤ"  msgid "E789: Missing ']': %s"  msgstr "E789: ']' ޤ: %s" +#, c-format +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: ']' θ;ʬʸޤ: %s]%s" +  #: ../syntax.c:4531  #, c-format  msgid "E398: Missing '=': %s" @@ -5874,7 +5938,7 @@ msgstr "E415: ͽǤ: %s"  #: ../syntax.c:6395  #, c-format  msgid "E416: missing equal sign: %s" -msgstr "E416: 椬ޤ: %s" +msgstr "E416: 椬ޤ: %s"  #: ../syntax.c:6418  #, c-format @@ -6078,9 +6142,8 @@ msgstr "Vim: ϤɹΥ顼ˤ꽪λޤ...\n"  #. This happens when the FileChangedRO autocommand changes the  #. * file in a way it becomes shorter.  #: ../undo.c:379 -#, fuzzy  msgid "E881: Line count changed unexpectedly" -msgstr "E834: ͽԥȤѤޤ" +msgstr "E881: ͽԥȤѤޤ"  #: ../undo.c:627  #, c-format @@ -6287,23 +6350,23 @@ msgstr "      ƥ vimrc: \""  #: ../version.c:672  msgid "     user vimrc file: \"" -msgstr "        桼 vimrc: \"" +msgstr "      桼 vimrc: \""  #: ../version.c:677  msgid " 2nd user vimrc file: \"" -msgstr "     2桼 vimrc: \"" +msgstr "   2桼 vimrc: \""  #: ../version.c:682  msgid " 3rd user vimrc file: \"" -msgstr "     3桼 vimrc: \"" +msgstr "   3桼 vimrc: \""  #: ../version.c:687  msgid "      user exrc file: \"" -msgstr "         桼 exrc: \"" +msgstr "       桼 exrc: \""  #: ../version.c:692  msgid "  2nd user exrc file: \"" -msgstr "      2桼 exrc: \"" +msgstr "    2桼 exrc: \""  #: ../version.c:699  msgid "  fall-back for $VIM: \"" @@ -6379,7 +6442,7 @@ msgstr "Vimγȯ礷Ƥ!"  #: ../version.c:828  msgid "Become a registered Vim user!" -msgstr "VimϿ桼ˤʤäƤ!" +msgstr "VimϿ桼ˤʤäƤ!"  #: ../version.c:831  msgid "type  :help sponsor<Enter>    for information " @@ -6391,7 +6454,7 @@ msgstr "ܺ٤ʾ           :help register<Enter>  "  #: ../version.c:834  msgid "menu  Help->Sponsor/Register  for information    " -msgstr "ܺ٤ϥ˥塼 إעݥ/Ͽ ȤƲ   " +msgstr "ܺ٤ϥ˥塼 إ->ݥ/Ͽ ȤƲ"  #: ../window.c:119  msgid "Already only one window" @@ -6429,6 +6492,9 @@ msgstr "E445: ¾Υɥˤѹޤ"  msgid "E446: No file name under cursor"  msgstr "E446: β˥ե̾ޤ" +msgid "List or number required" +msgstr "ꥹȤͤɬפǤ" +  #~ msgid "E831: bf_key_init() called with empty password"  #~ msgstr "E831: bf_key_init() ѥɤǸƤӽФޤ" diff --git a/src/nvim/po/ja.po b/src/nvim/po/ja.po index 6bdfcb426f..8a3fcb8f78 100644 --- a/src/nvim/po/ja.po +++ b/src/nvim/po/ja.po @@ -1,11 +1,11 @@ -# Japanese translation for Vim			vim:set foldmethod=marker: +# Japanese translation for Vim  #  # Do ":help uganda"  in Vim to read copying and usage conditions.  # Do ":help credits" in Vim to see a list of people who contributed.  # -# Last Change: 2013 Jul 06 +# Copyright (C) 2001-2016 MURAOKA Taro <koron.kaoriya@gmail.com>, +# 			  vim-jp (http://vim-jp.org/)  # -# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>  # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.  #  # Original translations. @@ -14,10 +14,10 @@ msgid ""  msgstr ""  "Project-Id-Version: Vim 7.4\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-05-26 14:21+0200\n" -"PO-Revision-Date: 2013-07-06 15:00+0900\n" +"POT-Creation-Date: 2016-02-01 09:02+0900\n" +"PO-Revision-Date: 2013-06-02-01 09:08+09n"  "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n" -"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n" +"Language-Team: vim-jp (https://github.com/vim-jp/lang-ja)\n"  "Language: Japanese\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=utf-8\n" @@ -34,7 +34,7 @@ msgstr "内部エラー: 未知のオプション型です"  #: ../buffer.c:92  msgid "[Location List]" -msgstr "[場所リスト]" +msgstr "[ロケーションリスト]"  #: ../buffer.c:93  msgid "[Quickfix List]" @@ -277,7 +277,7 @@ msgstr "E810: 一時ファイルの読込もしくは書込ができません"  #: ../diff.c:755  msgid "E97: Cannot create diffs" -msgstr "E97: 差分を作成できません " +msgstr "E97: 差分を作成できません"  #: ../diff.c:966  msgid "E816: Cannot read patch output" @@ -293,7 +293,7 @@ msgstr "E99: 現在のバッファは差分モードではありません"  #: ../diff.c:2100  msgid "E793: No other buffer in diff mode is modifiable" -msgstr "E793: 差分モードである他のバッファは変更可能です" +msgstr "E793: 差分モードである他のバッファは変更できません"  #: ../diff.c:2102  msgid "E100: No other buffer in diff mode" @@ -349,7 +349,7 @@ msgstr " 行(全体)補完 (^L^N^P)"  #: ../edit.c:86  msgid " File name completion (^F^N^P)" -msgstr "ファイル名補完 (^F^N^P)" +msgstr " ファイル名補完 (^F^N^P)"  #: ../edit.c:87  msgid " Tag completion (^]^N^P)" @@ -377,7 +377,7 @@ msgstr " コマンドライン補完 (^V^N^P)"  #: ../edit.c:94  msgid " User defined completion (^U^N^P)" -msgstr " ユーザ定義補完 (^U^N^P)" +msgstr " ユーザー定義補完 (^U^N^P)"  #: ../edit.c:95  msgid " Omni completion (^O^N^P)" @@ -679,6 +679,10 @@ msgstr "E696: リスト型にカンマがありません: %s"  msgid "E697: Missing end of List ']': %s"  msgstr "E697: リスト型の最後に ']' がありません: %s" +msgid "Not enough memory to set references, garbage collection aborted!" +msgstr "" +"ガーベッジコレクションを中止しました! 参照を作成するのにメモリが不足しました" +  #: ../eval.c:6475  #, c-format  msgid "E720: Missing colon in Dictionary: %s" @@ -721,7 +725,7 @@ msgstr "E117: 未知の関数です: %s"  #: ../eval.c:7383  #, c-format  msgid "E119: Not enough arguments for function: %s" -msgstr "E119: 関数の引数が少な過ぎます: %s" +msgstr "E119: 関数の引数が足りません: %s"  #: ../eval.c:7387  #, c-format @@ -826,18 +830,16 @@ msgid "sort() argument"  msgstr "sort() の引数"  #: ../eval.c:13721 -#, fuzzy  msgid "uniq() argument" -msgstr "add() の引数" +msgstr "uniq() の引数"  #: ../eval.c:13776  msgid "E702: Sort compare function failed"  msgstr "E702: ソートの比較関数が失敗しました"  #: ../eval.c:13806 -#, fuzzy  msgid "E882: Uniq compare function failed" -msgstr "E702: ソートの比較関数が失敗しました" +msgstr "E882: Uniq の比較関数が失敗しました"  #: ../eval.c:14085  msgid "(Invalid)" @@ -863,6 +865,18 @@ msgstr "E745: リスト型を数値として扱っています"  msgid "E728: Using a Dictionary as a Number"  msgstr "E728: 辞書型を数値として扱っています" +msgid "E891: Using a Funcref as a Float" +msgstr "E891: 関数参照型を浮動小数点数として扱っています。" + +msgid "E892: Using a String as a Float" +msgstr "E892: 文字列を浮動小数点数として扱っています" + +msgid "E893: Using a List as a Float" +msgstr "E893: リスト型を浮動小数点数として扱っています" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: 辞書型を浮動小数点数として扱っています" +  #: ../eval.c:16259  msgid "E729: using Funcref as a String"  msgstr "E729: 関数参照型を文字列として扱っています" @@ -961,14 +975,14 @@ msgid "E129: Function name required"  msgstr "E129: 関数名が要求されます"  #: ../eval.c:17824 -#, fuzzy, c-format +#, c-format  msgid "E128: Function name must start with a capital or \"s:\": %s" -msgstr "E128: 関数名は大文字で始まるかコロンを含まなければなりません: %s" +msgstr "E128: 関数名は大文字か \"s:\" で始まらなければなりません: %s"  #: ../eval.c:17833 -#, fuzzy, c-format +#, c-format  msgid "E884: Function name cannot contain a colon: %s" -msgstr "E128: 関数名は大文字で始まるかコロンを含まなければなりません: %s" +msgstr "E884: 関数名にはコロンは含められません: %s"  #: ../eval.c:18336  #, c-format @@ -1081,7 +1095,7 @@ msgstr "E136: viminfo: エラーが多過ぎるので, 以降はスキップし  #: ../ex_cmds.c:1458  #, c-format  msgid "Reading viminfo file \"%s\"%s%s%s" -msgstr "viminfoファイル \"%s\"%s%s%s を読込み中 " +msgstr "viminfoファイル \"%s\"%s%s%s を読込み中"  #: ../ex_cmds.c:1460  msgid " info" @@ -1357,6 +1371,10 @@ msgstr "E158: 無効なバッファ名です: %s"  msgid "E157: Invalid sign ID: %<PRId64>"  msgstr "E157: 無効なsign識別子です: %<PRId64>" +#, c-format +msgid "E885: Not possible to change sign %s" +msgstr "E885: 変更できない sign です: %s" +  #: ../ex_cmds.c:6066  msgid " (not supported)"  msgstr " (非サポート)" @@ -1379,6 +1397,13 @@ msgstr "行 %<PRId64>: %s"  msgid "cmd: %s"  msgstr "コマンド: %s" +msgid "frame is zero" +msgstr "フレームが 0 です" + +#, c-format +msgid "frame at highest level: %d" +msgstr "最高レベルのフレーム: %d" +  #: ../ex_cmds2.c:322  #, c-format  msgid "Breakpoint in \"%s%s\" line %<PRId64>" @@ -1528,7 +1553,8 @@ msgstr "E197: 言語を \"%s\" に設定できません"  #. don't wait for return  #: ../ex_docmd.c:387  msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode." -msgstr "Exモードに入ります. ノーマルに戻るには\"visual\"と入力してください." +msgstr "" +"Exモードに入ります. ノーマルモードに戻るには\"visual\"と入力してください."  #: ../ex_docmd.c:428  msgid "E501: At end-of-file" @@ -1553,7 +1579,7 @@ msgstr "関数の最後です"  #: ../ex_docmd.c:1628  msgid "E464: Ambiguous use of user-defined command" -msgstr "E464: ユーザ定義コマンドのあいまいな使用です" +msgstr "E464: ユーザー定義コマンドのあいまいな使用です"  #: ../ex_docmd.c:1638  msgid "E492: Not an editor command" @@ -1606,14 +1632,14 @@ msgstr "E174: コマンドが既にあります: 再定義するには ! を追  #: ../ex_docmd.c:4432  msgid ""  "\n" -"    Name        Args Range Complete  Definition" +"    Name        Args       Address   Complete  Definition"  msgstr ""  "\n" -"    名前        引数 範囲  補完      定義" +"    名前        引数       アドレス  補完      定義"  #: ../ex_docmd.c:4516  msgid "No user-defined commands found" -msgstr "ユーザ定義コマンドが見つかりませんでした" +msgstr "ユーザー定義コマンドが見つかりませんでした"  #: ../ex_docmd.c:4538  msgid "E175: No attribute specified" @@ -1633,7 +1659,10 @@ msgstr "E178: カウントの省略値が無効です"  #: ../ex_docmd.c:4625  msgid "E179: argument required for -complete" -msgstr "E179: -補完のための引数が必要です" +msgstr "E179: -complete には引数が必要です" + +msgid "E179: argument required for -addr" +msgstr "E179: -addr には引数が必要です"  #: ../ex_docmd.c:4635  #, c-format @@ -1646,16 +1675,20 @@ msgstr "E182: 無効なコマンド名です"  #: ../ex_docmd.c:4691  msgid "E183: User defined commands must start with an uppercase letter" -msgstr "E183: ユーザ定義コマンドは英大文字で始まらなければなりません" +msgstr "E183: ユーザー定義コマンドは英大文字で始まらなければなりません"  #: ../ex_docmd.c:4696  msgid "E841: Reserved name, cannot be used for user defined command" -msgstr "E841: 予約名なので, ユーザ定義コマンドに利用できません" +msgstr "E841: 予約名なので, ユーザー定義コマンドに利用できません"  #: ../ex_docmd.c:4751  #, c-format  msgid "E184: No such user-defined command: %s" -msgstr "E184: そのユーザ定義コマンドはありません: %s" +msgstr "E184: そのユーザー定義コマンドはありません: %s" + +#, c-format +msgid "E180: Invalid address type value: %s" +msgstr "E180: 無効なアドレスタイプ値です: %s"  #: ../ex_docmd.c:5219  #, c-format @@ -2019,11 +2052,11 @@ msgstr "不正なファイル名"  #: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578  msgid "is a directory" -msgstr " はディレクトリです" +msgstr "はディレクトリです"  #: ../fileio.c:397  msgid "is not a file" -msgstr " はファイルではありません" +msgstr "はファイルではありません"  #: ../fileio.c:508 ../fileio.c:3522  msgid "[New File]" @@ -2039,7 +2072,7 @@ msgstr "[ファイル過大]"  #: ../fileio.c:534  msgid "[Permission Denied]" -msgstr "[認可がありません]" +msgstr "[権限がありません]"  #: ../fileio.c:653  msgid "E200: *ReadPre autocommands made the file unreadable" @@ -2210,7 +2243,7 @@ msgstr " 変換エラー"  #: ../fileio.c:3509  #, c-format  msgid " in line %<PRId64>;" -msgstr "行 %<PRId64>;" +msgstr " 行 %<PRId64>;"  #: ../fileio.c:3519  msgid "[Device]" @@ -2766,9 +2799,8 @@ msgid "E37: No write since last change (add ! to override)"  msgstr "E37: 最後の変更が保存されていません (! を追加で変更を破棄)"  #: ../globals.h:1055 -#, fuzzy  msgid "E37: No write since last change" -msgstr "[最後の変更が保存されていません]\n" +msgstr "E37: 最後の変更が保存されていません"  #: ../globals.h:1056  msgid "E38: Null argument" @@ -2810,7 +2842,7 @@ msgstr "E42: エラーはありません"  #: ../globals.h:1067  msgid "E776: No location list" -msgstr "E776: 場所リストはありません" +msgstr "E776: ロケーションリストはありません"  #: ../globals.h:1068  msgid "E43: Damaged match string" @@ -3831,7 +3863,7 @@ msgid ""  "\n"  msgstr ""  "\n" -"それから.swpファイルを削除してください\n" +"元の.swpファイルは削除しても構いません\n"  "\n"  #. use msg() to start the scrolling properly @@ -3845,7 +3877,7 @@ msgstr "   現在のディレクトリ:\n"  #: ../memline.c:1448  msgid "   Using specified name:\n" -msgstr "   ある名前を使用中:\n" +msgstr "   以下の名前を使用中:\n"  #: ../memline.c:1450  msgid "   In directory " @@ -3901,7 +3933,7 @@ msgid ""  "         user name: "  msgstr ""  "\n" -"          ユーザ名: " +"        ユーザー名: "  #: ../memline.c:1568  msgid "   host name: " @@ -4050,12 +4082,12 @@ msgid ""  msgstr ""  "\n"  "(1) 別のプログラムが同じファイルを編集しているかもしれません.\n" -"    この場合には, 変更をした際に最終的に, 同じファイルの異なる\n" -"    2つのインスタンスができてしまうことに注意してください." +"    この場合には, 変更をしてしまうと1つのファイルに対して異なる2つの\n" +"    インスタンスができてしまうので, そうしないように気をつけてください."  #: ../memline.c:3245  msgid "  Quit, or continue with caution.\n" -msgstr "  終了するか, 注意しながら続けてください.\n" +msgstr "    終了するか, 注意しながら続けてください.\n"  #: ../memline.c:3246  msgid "(2) An edit session for this file crashed.\n" @@ -4479,6 +4511,11 @@ msgstr ""  msgid "E574: Unknown register type %d"  msgstr "E574: 未知のレジスタ型 %d です" +msgid "" +"E883: search pattern and expression register may not contain two or more " +"lines" +msgstr "E883: 検索パターンと式レジスタには2行以上を含められません" +  #: ../ops.c:5089  #, c-format  msgid "%<PRId64> Cols; " @@ -4563,6 +4600,10 @@ msgstr "E522: termcap 内に見つかりません"  msgid "E539: Illegal character <%s>"  msgstr "E539: 不正な文字です <%s>" +#, c-format +msgid "For option %s" +msgstr "オプション: %s" +  #: ../option.c:3862  msgid "E529: Cannot set 'term' to empty string"  msgstr "E529: 'term' には空文字列を設定できません" @@ -4740,6 +4781,14 @@ msgstr ""  "\n"  "セキュリティコンテキストを設定できません " +#, c-format +msgid "Could not set security context %s for %s" +msgstr "セキュリティコンテキスト %s を %s に設定できません" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "セキュリティコンテキスト %s を %s から取得できません. 削除します!" +  #: ../os_unix.c:1558 ../os_unix.c:1647  #, c-format  msgid "dlerror = \"%s\"" @@ -4960,6 +5009,10 @@ msgstr "E554: %s{...} 内に文法エラーがあります"  msgid "External submatches:\n"  msgstr "外部の部分該当:\n" +#, c-format +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA 正規表現) 繰り返せません %s" +  #: ../regexp.c:7022  msgid ""  "E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " @@ -4968,6 +5021,9 @@ msgstr ""  "E864: \\%#= には 0, 1 もしくは 2 のみが続けられます。正規表現エンジンは自動選"  "択されます。" +msgid "Switching to backtracking RE engine for pattern: " +msgstr "次のパターンにバックトラッキング RE エンジンを適用します: " +  #: ../regexp_nfa.c:239  msgid "E865: (NFA) Regexp end encountered prematurely"  msgstr "E865: (NFA) 期待より早く正規表現の終端に到達しました" @@ -4980,7 +5036,7 @@ msgstr "E866: (NFA 正規表現) 位置が誤っています: %c"  #: ../regexp_nfa.c:242  #, c-format  msgid "E877: (NFA regexp) Invalid character class: %<PRId64>" -msgstr "" +msgstr "E877: (NFA 正規表現) 無効な文字クラス: %<PRId64>"  #: ../regexp_nfa.c:1261  #, c-format @@ -5590,12 +5646,12 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"  msgstr "E765: 'spellfile' には %<PRId64> 個のエントリはありません"  #: ../spell.c:8074 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' removed from %s" -msgstr "%s から単語が削除されました" +msgstr "単語 '%.*s' が %s から削除されました"  #: ../spell.c:8117 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' added to %s"  msgstr "%s に単語が追加されました" @@ -5673,6 +5729,9 @@ msgstr "このバッファに定義された構文要素はありません"  msgid "E390: Illegal argument: %s"  msgstr "E390: 不正な引数です: %s" +msgid "syntax iskeyword " +msgstr "シンタックス用 iskeyword " +  #: ../syntax.c:3299  #, c-format  msgid "E391: No such syntax cluster: %s" @@ -5769,6 +5828,10 @@ msgstr "E847: 構文の取り込み(include)が多過ぎます"  msgid "E789: Missing ']': %s"  msgstr "E789: ']' がありません: %s" +#, c-format +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: ']' の後ろに余分な文字があります: %s]%s" +  #: ../syntax.c:4531  #, c-format  msgid "E398: Missing '=': %s" @@ -5874,7 +5937,7 @@ msgstr "E415: 予期せぬ等号です: %s"  #: ../syntax.c:6395  #, c-format  msgid "E416: missing equal sign: %s" -msgstr "E416: 等号ががありません: %s" +msgstr "E416: 等号がありません: %s"  #: ../syntax.c:6418  #, c-format @@ -6078,9 +6141,8 @@ msgstr "Vim: 入力を読込み中のエラーにより終了します...\n"  #. This happens when the FileChangedRO autocommand changes the  #. * file in a way it becomes shorter.  #: ../undo.c:379 -#, fuzzy  msgid "E881: Line count changed unexpectedly" -msgstr "E834: 予期せず行カウントが変わりました" +msgstr "E881: 予期せず行カウントが変わりました"  #: ../undo.c:627  #, c-format @@ -6287,23 +6349,23 @@ msgstr "      システム vimrc: \""  #: ../version.c:672  msgid "     user vimrc file: \"" -msgstr "        ユーザ vimrc: \"" +msgstr "      ユーザー vimrc: \""  #: ../version.c:677  msgid " 2nd user vimrc file: \"" -msgstr "     第2ユーザ vimrc: \"" +msgstr "   第2ユーザー vimrc: \""  #: ../version.c:682  msgid " 3rd user vimrc file: \"" -msgstr "     第3ユーザ vimrc: \"" +msgstr "   第3ユーザー vimrc: \""  #: ../version.c:687  msgid "      user exrc file: \"" -msgstr "         ユーザ exrc: \"" +msgstr "       ユーザー exrc: \""  #: ../version.c:692  msgid "  2nd user exrc file: \"" -msgstr "      第2ユーザ exrc: \"" +msgstr "    第2ユーザー exrc: \""  #: ../version.c:699  msgid "  fall-back for $VIM: \"" @@ -6379,7 +6441,7 @@ msgstr "Vimの開発を応援してください!"  #: ../version.c:828  msgid "Become a registered Vim user!" -msgstr "Vimの登録ユーザになってください!" +msgstr "Vimの登録ユーザーになってください!"  #: ../version.c:831  msgid "type  :help sponsor<Enter>    for information " @@ -6391,7 +6453,7 @@ msgstr "詳細な情報は           :help register<Enter>  "  #: ../version.c:834  msgid "menu  Help->Sponsor/Register  for information    " -msgstr "詳細はメニューの ヘルプ→スポンサー/登録 を参照して下さい   " +msgstr "詳細はメニューの ヘルプ->スポンサー/登録 を参照して下さい"  #: ../window.c:119  msgid "Already only one window" @@ -6429,6 +6491,9 @@ msgstr "E445: 他のウィンドウには変更があります"  msgid "E446: No file name under cursor"  msgstr "E446: カーソルの下にファイル名がありません" +msgid "List or number required" +msgstr "リストか数値が必要です" +  #~ msgid "E831: bf_key_init() called with empty password"  #~ msgstr "E831: bf_key_init() が空パスワードで呼び出されました" diff --git a/src/nvim/po/ja.sjis.po b/src/nvim/po/ja.sjis.po index 7dac89e172..16a5d2ce36 100644 --- a/src/nvim/po/ja.sjis.po +++ b/src/nvim/po/ja.sjis.po @@ -1,11 +1,11 @@ -# Japanese translation for Vim			vim:set foldmethod=marker: +# Japanese translation for Vim  #  # Do ":help uganda"  in Vim to read copying and usage conditions.  # Do ":help credits" in Vim to see a list of people who contributed.  # -# Last Change: 2013 Jul 06 +# Copyright (C) 2001-2016 MURAOKA Taro <koron.kaoriya@gmail.com>, +# 			  vim-jp (http://vim-jp.org/)  # -# Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>  # THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.  #  # Original translations. @@ -14,10 +14,10 @@ msgid ""  msgstr ""  "Project-Id-Version: Vim 7.4\n"  "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-05-26 14:21+0200\n" -"PO-Revision-Date: 2013-07-06 15:00+0900\n" +"POT-Creation-Date: 2016-02-01 09:02+0900\n" +"PO-Revision-Date: 2016-02-01 09:08+0900\n"  "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n" -"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n" +"Language-Team: vim-jpj (https://github.com/vim-jp/lang-ja)\n"  "Language: Japanese\n"  "MIME-Version: 1.0\n"  "Content-Type: text/plain; charset=cp932\n" @@ -34,7 +34,7 @@ msgstr "G[: m̃IvV^ł"  #: ../buffer.c:92  msgid "[Location List]" -msgstr "[ꏊXg]" +msgstr "[P[VXg]"  #: ../buffer.c:93  msgid "[Quickfix List]" @@ -277,7 +277,7 @@ msgstr "E810: ꎞt@C̓Ǎ͏ł܂"  #: ../diff.c:755  msgid "E97: Cannot create diffs" -msgstr "E97: 쐬ł܂ " +msgstr "E97: 쐬ł܂"  #: ../diff.c:966  msgid "E816: Cannot read patch output" @@ -293,7 +293,7 @@ msgstr "E99: ݂̃obt@͍[hł͂܂"  #: ../diff.c:2100  msgid "E793: No other buffer in diff mode is modifiable" -msgstr "E793: [hł鑼̃obt@͕ύX\\ł" +msgstr "E793: [hł鑼̃obt@͕ύXł܂"  #: ../diff.c:2102  msgid "E100: No other buffer in diff mode" @@ -349,7 +349,7 @@ msgstr " s(S)⊮ (^L^N^P)"  #: ../edit.c:86  msgid " File name completion (^F^N^P)" -msgstr "t@C⊮ (^F^N^P)" +msgstr " t@C⊮ (^F^N^P)"  #: ../edit.c:87  msgid " Tag completion (^]^N^P)" @@ -377,7 +377,7 @@ msgstr " R}hC⊮ (^V^N^P)"  #: ../edit.c:94  msgid " User defined completion (^U^N^P)" -msgstr " [U`⊮ (^U^N^P)" +msgstr " [U[`⊮ (^U^N^P)"  #: ../edit.c:95  msgid " Omni completion (^O^N^P)" @@ -679,6 +679,10 @@ msgstr "E696: Xg^ɃJ}܂: %s"  msgid "E697: Missing end of List ']': %s"  msgstr "E697: Xg^̍Ō ']' ܂: %s" +msgid "Not enough memory to set references, garbage collection aborted!" +msgstr "" +"K[xbWRNV𒆎~܂! QƂ쐬̂Ƀs܂" +  #: ../eval.c:6475  #, c-format  msgid "E720: Missing colon in Dictionary: %s" @@ -721,7 +725,7 @@ msgstr "E117: m̊ł: %s"  #: ../eval.c:7383  #, c-format  msgid "E119: Not enough arguments for function: %s" -msgstr "E119: ̈ȉ߂܂: %s" +msgstr "E119: ̈܂: %s"  #: ../eval.c:7387  #, c-format @@ -826,18 +830,16 @@ msgid "sort() argument"  msgstr "sort() ̈"  #: ../eval.c:13721 -#, fuzzy  msgid "uniq() argument" -msgstr "add() ̈" +msgstr "uniq() ̈"  #: ../eval.c:13776  msgid "E702: Sort compare function failed"  msgstr "E702: \\[g̔rs܂"  #: ../eval.c:13806 -#, fuzzy  msgid "E882: Uniq compare function failed" -msgstr "E702: \\[g̔rs܂" +msgstr "E882: Uniq ̔rs܂"  #: ../eval.c:14085  msgid "(Invalid)" @@ -863,6 +865,18 @@ msgstr "E745: Xg^𐔒lƂĈĂ܂"  msgid "E728: Using a Dictionary as a Number"  msgstr "E728: ^𐔒lƂĈĂ܂" +msgid "E891: Using a Funcref as a Float" +msgstr "E891: Qƌ^_ƂĈĂ܂B" + +msgid "E892: Using a String as a Float" +msgstr "E892: _ƂĈĂ܂" + +msgid "E893: Using a List as a Float" +msgstr "E893: Xg^_ƂĈĂ܂" + +msgid "E894: Using a Dictionary as a Float" +msgstr "E894: ^_ƂĈĂ܂" +  #: ../eval.c:16259  msgid "E729: using Funcref as a String"  msgstr "E729: Qƌ^ƂĈĂ܂" @@ -961,14 +975,14 @@ msgid "E129: Function name required"  msgstr "E129: v܂"  #: ../eval.c:17824 -#, fuzzy, c-format +#, c-format  msgid "E128: Function name must start with a capital or \"s:\": %s" -msgstr "E128: ͑啶Ŏn܂邩R܂܂ȂȂ܂: %s" +msgstr "E128: ͑啶 \"s:\" Ŏn܂ȂȂ܂: %s"  #: ../eval.c:17833 -#, fuzzy, c-format +#, c-format  msgid "E884: Function name cannot contain a colon: %s" -msgstr "E128: ͑啶Ŏn܂邩R܂܂ȂȂ܂: %s" +msgstr "E884: ɂ̓R͊܂߂܂: %s"  #: ../eval.c:18336  #, c-format @@ -1081,7 +1095,7 @@ msgstr "E136: viminfo: G[߂̂, ȍ~̓XLbv܂"  #: ../ex_cmds.c:1458  #, c-format  msgid "Reading viminfo file \"%s\"%s%s%s" -msgstr "viminfot@C \"%s\"%s%s%s Ǎݒ " +msgstr "viminfot@C \"%s\"%s%s%s Ǎݒ"  #: ../ex_cmds.c:1460  msgid " info" @@ -1357,6 +1371,10 @@ msgstr "E158: ȃobt@ł: %s"  msgid "E157: Invalid sign ID: %<PRId64>"  msgstr "E157: signʎqł: %<PRId64>" +#, c-format +msgid "E885: Not possible to change sign %s" +msgstr "E885: ύXłȂ sign ł: %s" +  #: ../ex_cmds.c:6066  msgid " (not supported)"  msgstr " (T|[g)" @@ -1379,6 +1397,13 @@ msgstr "s %<PRId64>: %s"  msgid "cmd: %s"  msgstr "R}h: %s" +msgid "frame is zero" +msgstr "t[ 0 ł" + +#, c-format +msgid "frame at highest level: %d" +msgstr "ōx̃t[: %d" +  #: ../ex_cmds2.c:322  #, c-format  msgid "Breakpoint in \"%s%s\" line %<PRId64>" @@ -1528,7 +1553,8 @@ msgstr "E197:  \"%s\" ɐݒł܂"  #. don't wait for return  #: ../ex_docmd.c:387  msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode." -msgstr "Ex[hɓ܂. m[}ɖ߂ɂ\"visual\"Ɠ͂Ă." +msgstr "" +"Ex[hɓ܂. m[}[hɖ߂ɂ\"visual\"Ɠ͂Ă."  #: ../ex_docmd.c:428  msgid "E501: At end-of-file" @@ -1553,7 +1579,7 @@ msgstr "̍Ōł"  #: ../ex_docmd.c:1628  msgid "E464: Ambiguous use of user-defined command" -msgstr "E464: [U`R}ĥ܂Ȏgpł" +msgstr "E464: [U[`R}ĥ܂Ȏgpł"  #: ../ex_docmd.c:1638  msgid "E492: Not an editor command" @@ -1606,14 +1632,14 @@ msgstr "E174: R}hɂ܂: Ē`ɂ ! ljĂ"  #: ../ex_docmd.c:4432  msgid ""  "\n" -"    Name        Args Range Complete  Definition" +"    Name        Args       Address   Complete  Definition"  msgstr ""  "\n" -"    O         ͈  ⊮      `" +"    O               AhX  ⊮      `"  #: ../ex_docmd.c:4516  msgid "No user-defined commands found" -msgstr "[U`R}h܂ł" +msgstr "[U[`R}h܂ł"  #: ../ex_docmd.c:4538  msgid "E175: No attribute specified" @@ -1633,7 +1659,10 @@ msgstr "E178: JEg̏ȗlł"  #: ../ex_docmd.c:4625  msgid "E179: argument required for -complete" -msgstr "E179: -⊮̂߂̈Kvł" +msgstr "E179: -complete ɂ͈Kvł" + +msgid "E179: argument required for -addr" +msgstr "E179: -addr ɂ͈Kvł"  #: ../ex_docmd.c:4635  #, c-format @@ -1646,16 +1675,20 @@ msgstr "E182: ȃR}hł"  #: ../ex_docmd.c:4691  msgid "E183: User defined commands must start with an uppercase letter" -msgstr "E183: [U`R}h͉p啶Ŏn܂ȂȂ܂" +msgstr "E183: [U[`R}h͉p啶Ŏn܂ȂȂ܂"  #: ../ex_docmd.c:4696  msgid "E841: Reserved name, cannot be used for user defined command" -msgstr "E841: \\Ȃ̂, [U`R}hɗpł܂" +msgstr "E841: \\Ȃ̂, [U[`R}hɗpł܂"  #: ../ex_docmd.c:4751  #, c-format  msgid "E184: No such user-defined command: %s" -msgstr "E184: ̃[U`R}h͂܂: %s" +msgstr "E184: ̃[U[`R}h͂܂: %s" + +#, c-format +msgid "E180: Invalid address type value: %s" +msgstr "E180: ȃAhX^Cvlł: %s"  #: ../ex_docmd.c:5219  #, c-format @@ -2019,11 +2052,11 @@ msgstr "sȃt@C"  #: ../fileio.c:395 ../fileio.c:476 ../fileio.c:2543 ../fileio.c:2578  msgid "is a directory" -msgstr " ̓fBNgł" +msgstr "̓fBNgł"  #: ../fileio.c:397  msgid "is not a file" -msgstr " ̓t@Cł͂܂" +msgstr "̓t@Cł͂܂"  #: ../fileio.c:508 ../fileio.c:3522  msgid "[New File]" @@ -2039,7 +2072,7 @@ msgstr "[t@Cߑ]"  #: ../fileio.c:534  msgid "[Permission Denied]" -msgstr "[F܂]" +msgstr "[܂]"  #: ../fileio.c:653  msgid "E200: *ReadPre autocommands made the file unreadable" @@ -2210,7 +2243,7 @@ msgstr " ϊG["  #: ../fileio.c:3509  #, c-format  msgid " in line %<PRId64>;" -msgstr "s %<PRId64>;" +msgstr " s %<PRId64>;"  #: ../fileio.c:3519  msgid "[Device]" @@ -2766,9 +2799,8 @@ msgid "E37: No write since last change (add ! to override)"  msgstr "E37: Ō̕ύXۑĂ܂ (! ljŕύXj)"  #: ../globals.h:1055 -#, fuzzy  msgid "E37: No write since last change" -msgstr "[Ō̕ύXۑĂ܂]\n" +msgstr "E37: Ō̕ύXۑĂ܂"  #: ../globals.h:1056  msgid "E38: Null argument" @@ -2810,7 +2842,7 @@ msgstr "E42: G[͂܂"  #: ../globals.h:1067  msgid "E776: No location list" -msgstr "E776: ꏊXg͂܂" +msgstr "E776: P[VXg͂܂"  #: ../globals.h:1068  msgid "E43: Damaged match string" @@ -2931,6 +2963,10 @@ msgstr "E363: p^[ 'maxmempattern' ȏ̃gp܂"  msgid "E749: empty buffer"  msgstr "E749: obt@ł" +#, c-format +msgid "E86: Buffer %ld does not exist" +msgstr "E86: obt@ %ld ͂܂" +  #: ../globals.h:1108  msgid "E682: Invalid search pattern or delimiter"  msgstr "E682: p^[Lsł" @@ -3831,7 +3867,7 @@ msgid ""  "\n"  msgstr ""  "\n" -"ꂩ.swpt@C폜Ă\n" +".swpt@C͍폜Ă\\܂\n"  "\n"  #. use msg() to start the scrolling properly @@ -3845,7 +3881,7 @@ msgstr "   ݂̃fBNg:\n"  #: ../memline.c:1448  msgid "   Using specified name:\n" -msgstr "   閼Ogp:\n" +msgstr "   ȉ̖Ogp:\n"  #: ../memline.c:1450  msgid "   In directory " @@ -3901,7 +3937,7 @@ msgid ""  "         user name: "  msgstr ""  "\n" -"          [U: " +"        [U[: "  #: ../memline.c:1568  msgid "   host name: " @@ -4050,12 +4086,12 @@ msgid ""  msgstr ""  "\n"  "(1) ʂ̃vOt@CҏWĂ邩܂.\n" -"    ̏ꍇɂ, ύXۂɍŏII, t@C̈قȂ\n" -"    2̃CX^XłĂ܂ƂɒӂĂ." +"    ̏ꍇɂ, ύXĂ܂1̃t@CɑĈقȂ2\n" +"    CX^XłĂ܂̂, Ȃ悤ɋCĂ."  #: ../memline.c:3245  msgid "  Quit, or continue with caution.\n" -msgstr "  I邩, ӂȂ瑱Ă.\n" +msgstr "    I邩, ӂȂ瑱Ă.\n"  #: ../memline.c:3246  msgid "(2) An edit session for this file crashed.\n" @@ -4479,6 +4515,11 @@ msgstr ""  msgid "E574: Unknown register type %d"  msgstr "E574: m̃WX^^ %d ł" +msgid "" +"E883: search pattern and expression register may not contain two or more " +"lines" +msgstr "E883: p^[ƎWX^ɂ2sȏ܂߂܂" +  #: ../ops.c:5089  #, c-format  msgid "%<PRId64> Cols; " @@ -4563,6 +4604,10 @@ msgstr "E522: termcap Ɍ܂"  msgid "E539: Illegal character <%s>"  msgstr "E539: sȕł <%s>" +#, c-format +msgid "For option %s" +msgstr "IvV: %s" +  #: ../option.c:3862  msgid "E529: Cannot set 'term' to empty string"  msgstr "E529: 'term' ɂ͋ݒł܂" @@ -4740,6 +4785,14 @@ msgstr ""  "\n"  "ZLeBReLXgݒł܂ " +#, c-format +msgid "Could not set security context %s for %s" +msgstr "ZLeBReLXg %s  %s ɐݒł܂" + +#, c-format +msgid "Could not get security context %s for %s. Removing it!" +msgstr "ZLeBReLXg %s  %s 擾ł܂. 폜܂!" +  #: ../os_unix.c:1558 ../os_unix.c:1647  #, c-format  msgid "dlerror = \"%s\"" @@ -4960,6 +5013,10 @@ msgstr "E554: %s{...} ɕ@G[܂"  msgid "External submatches:\n"  msgstr "O̕Y:\n" +#, c-format +msgid "E888: (NFA regexp) cannot repeat %s" +msgstr "E888: (NFA K\\) JԂ܂ %s" +  #: ../regexp.c:7022  msgid ""  "E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be " @@ -4968,7 +5025,9 @@ msgstr ""  "E864: \\%#= ɂ 0, 1  2 ݂̂܂BK\\GW͎I"  "܂B" -#: ../regexp_nfa.c:239 +msgid "Switching to backtracking RE engine for pattern: " +msgstr "̃p^[ɃobNgbLO RE GWKp܂: " +  msgid "E865: (NFA) Regexp end encountered prematurely"  msgstr "E865: (NFA) ҂葁K\\̏I[ɓB܂" @@ -4980,7 +5039,7 @@ msgstr "E866: (NFA K\\) ʒuĂ܂: %c"  #: ../regexp_nfa.c:242  #, c-format  msgid "E877: (NFA regexp) Invalid character class: %<PRId64>" -msgstr "" +msgstr "E877: (NFA K\\) ȕNX: %<PRId64>"  #: ../regexp_nfa.c:1261  #, c-format @@ -5590,14 +5649,14 @@ msgid "E765: 'spellfile' does not have %<PRId64> entries"  msgstr "E765: 'spellfile' ɂ %<PRId64> ̃Gg͂܂"  #: ../spell.c:8074 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' removed from %s" -msgstr "%s Pꂪ폜܂" +msgstr "P '%.*s'  %s 폜܂"  #: ../spell.c:8117 -#, fuzzy, c-format +#, c-format  msgid "Word '%.*s' added to %s" -msgstr "%s ɒPꂪlj܂" +msgstr "P '%.*s'  %s ֒lj܂"  #: ../spell.c:8381  msgid "E763: Word characters differ between spell files" @@ -5673,6 +5732,9 @@ msgstr "̃obt@ɒ`ꂽ\\vf͂܂"  msgid "E390: Illegal argument: %s"  msgstr "E390: sȈł: %s" +msgid "syntax iskeyword " +msgstr "V^bNXp iskeyword " +  #: ../syntax.c:3299  #, c-format  msgid "E391: No such syntax cluster: %s" @@ -5769,6 +5831,10 @@ msgstr "E847: \\̎荞(include)߂܂"  msgid "E789: Missing ']': %s"  msgstr "E789: ']' ܂: %s" +#, c-format +msgid "E890: trailing char after ']': %s]%s" +msgstr "E890: ']' ̌ɗ]ȕ܂: %s]%s" +  #: ../syntax.c:4531  #, c-format  msgid "E398: Missing '=': %s" @@ -5874,7 +5940,7 @@ msgstr "E415: \\ʓł: %s"  #: ../syntax.c:6395  #, c-format  msgid "E416: missing equal sign: %s" -msgstr "E416: ܂: %s" +msgstr "E416: ܂: %s"  #: ../syntax.c:6418  #, c-format @@ -6078,9 +6144,8 @@ msgstr "Vim: ͂Ǎݒ̃G[ɂI܂...\n"  #. This happens when the FileChangedRO autocommand changes the  #. * file in a way it becomes shorter.  #: ../undo.c:379 -#, fuzzy  msgid "E881: Line count changed unexpectedly" -msgstr "E834: \\sJEgς܂" +msgstr "E881: \\sJEgς܂"  #: ../undo.c:627  #, c-format @@ -6287,23 +6352,23 @@ msgstr "      VXe vimrc: \""  #: ../version.c:672  msgid "     user vimrc file: \"" -msgstr "        [U vimrc: \"" +msgstr "      [U[ vimrc: \""  #: ../version.c:677  msgid " 2nd user vimrc file: \"" -msgstr "     2[U vimrc: \"" +msgstr "   2[U[ vimrc: \""  #: ../version.c:682  msgid " 3rd user vimrc file: \"" -msgstr "     3[U vimrc: \"" +msgstr "   3[U[ vimrc: \""  #: ../version.c:687  msgid "      user exrc file: \"" -msgstr "         [U exrc: \"" +msgstr "       [U[ exrc: \""  #: ../version.c:692  msgid "  2nd user exrc file: \"" -msgstr "      2[U exrc: \"" +msgstr "    2[U[ exrc: \""  #: ../version.c:699  msgid "  fall-back for $VIM: \"" @@ -6379,7 +6444,7 @@ msgstr "Vim̊JĂ!"  #: ../version.c:828  msgid "Become a registered Vim user!" -msgstr "Vim̓o^[UɂȂĂ!" +msgstr "Vim̓o^[U[ɂȂĂ!"  #: ../version.c:831  msgid "type  :help sponsor<Enter>    for information " @@ -6391,7 +6456,7 @@ msgstr "ڍׂȏ           :help register<Enter>  "  #: ../version.c:834  msgid "menu  Help->Sponsor/Register  for information    " -msgstr "ڍׂ̓j[ wvX|T[/o^ QƂĉ   " +msgstr "ڍׂ̓j[ wv->X|T[/o^ QƂĉ"  #: ../window.c:119  msgid "Already only one window" @@ -6429,6 +6494,9 @@ msgstr "E445: ̃EBhEɂ͕ύX܂"  msgid "E446: No file name under cursor"  msgstr "E446: J[\\̉Ƀt@C܂" +msgid "List or number required" +msgstr "XglKvł" +  #~ msgid "E831: bf_key_init() called with empty password"  #~ msgstr "E831: bf_key_init() pX[hŌĂяo܂" diff --git a/src/nvim/spell.c b/src/nvim/spell.c index 84906a3548..d2401b6776 100644 --- a/src/nvim/spell.c +++ b/src/nvim/spell.c @@ -9319,7 +9319,56 @@ static void suggest_try_special(suginfo_T *su)    }  } +// Measure how much time is spent in each state. +// Output is dumped in "suggestprof". + +#ifdef SUGGEST_PROFILE +proftime_T current; +proftime_T total; +proftime_T times[STATE_FINAL + 1]; +long counts[STATE_FINAL + 1]; + +  static void +prof_init(void) +{ +  for (int i = 0; i <= STATE_FINAL; i++) { +    profile_zero(×[i]); +    counts[i] = 0; +  } +  profile_start(¤t); +  profile_start(&total); +} + +// call before changing state +  static void +prof_store(state_T state) +{ +  profile_end(¤t); +  profile_add(×[state], ¤t); +  counts[state]++; +  profile_start(¤t); +} +# define PROF_STORE(state) prof_store(state); + +  static void +prof_report(char *name) +{ +  FILE *fd = fopen("suggestprof", "a"); + +  profile_end(&total); +  fprintf(fd, "-----------------------\n"); +  fprintf(fd, "%s: %s\n", name, profile_msg(&total)); +  for (int i = 0; i <= STATE_FINAL; i++) { +    fprintf(fd, "%d: %s ("%" PRId64)\n", i, profile_msg(×[i]), counts[i]); +  } +  fclose(fd); +} +#else +# define PROF_STORE(state) +#endif +  // Try finding suggestions by adding/removing/swapping letters. +  static void suggest_try_change(suginfo_T *su)  {    char_u fword[MAXWLEN];            // copy of the bad word, case-folded @@ -9344,7 +9393,14 @@ static void suggest_try_change(suginfo_T *su)        continue;      // Try it for this language.  Will add possible suggestions. +    // +#ifdef SUGGEST_PROFILE +    prof_init(); +#endif      suggest_trie_walk(su, lp, fword, false); +#ifdef SUGGEST_PROFILE +    prof_report("try_change"); +#endif    }  } @@ -9478,6 +9534,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so          // Always past NUL bytes now.          n = (int)sp->ts_state; +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_ENDNUL;          sp->ts_save_badflags = su->su_badflags; @@ -9517,6 +9574,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if (sp->ts_curi > len || byts[arridx] != 0) {          // Past bytes in node and/or past NUL bytes. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_ENDNUL;          sp->ts_save_badflags = su->su_badflags;          break; @@ -9870,6 +9928,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so  #endif              // Save things to be restored at STATE_SPLITUNDO.              sp->ts_save_badflags = su->su_badflags; +            PROF_STORE(sp->ts_state)              sp->ts_state = STATE_SPLITUNDO;              ++depth; @@ -9936,6 +9995,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so                byts = pbyts;                idxs = pidxs;                sp->ts_prefixdepth = PFD_PREFIXTREE; +              PROF_STORE(sp->ts_state)                sp->ts_state = STATE_NOPREFIX;              }            } @@ -9948,6 +10008,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        su->su_badflags = sp->ts_save_badflags;        // Continue looking for NUL bytes. +      PROF_STORE(sp->ts_state)        sp->ts_state = STATE_START;        // In case we went into the prefix tree. @@ -9962,9 +10023,11 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so            && sp->ts_tcharlen == 0            ) {          // The badword ends, can't use STATE_PLAIN. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_DEL;          break;        } +      PROF_STORE(sp->ts_state)        sp->ts_state = STATE_PLAIN;      // FALLTHROUGH @@ -9975,10 +10038,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if (sp->ts_curi > byts[arridx]) {          // Done all bytes at this node, do next state.  When still at          // already changed bytes skip the other tricks. -        if (sp->ts_fidx >= sp->ts_fidxtry) +        PROF_STORE(sp->ts_state) +        if (sp->ts_fidx >= sp->ts_fidxtry) {            sp->ts_state = STATE_DEL; -        else +        } else {            sp->ts_state = STATE_FINAL; +        }        } else {          arridx += sp->ts_curi++;          c = byts[arridx]; @@ -10110,10 +10175,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        // When past the first byte of a multi-byte char don't try        // delete/insert/swap a character.        if (has_mbyte && sp->ts_tcharlen > 0) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_FINAL;          break;        }        // Try skipping one character in the bad word (delete it). +      PROF_STORE(sp->ts_state)        sp->ts_state = STATE_INS_PREP;        sp->ts_curi = 1;        if (soundfold && sp->ts_fidx == 0 && fword[sp->ts_fidx] == '*') @@ -10161,6 +10228,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if (sp->ts_flags & TSF_DIDDEL) {          // If we just deleted a byte then inserting won't make sense,          // a substitute is always cheaper. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_SWAP;          break;        } @@ -10170,11 +10238,13 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        for (;; ) {          if (sp->ts_curi > byts[n]) {            // Only NUL bytes at this node, go to next state. +          PROF_STORE(sp->ts_state)            sp->ts_state = STATE_SWAP;            break;          }          if (byts[n + sp->ts_curi] != NUL) {            // Found a byte to insert. +          PROF_STORE(sp->ts_state)            sp->ts_state = STATE_INS;            break;          } @@ -10190,6 +10260,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        n = sp->ts_arridx;        if (sp->ts_curi > byts[n]) {          // Done all bytes at this node, go to next state. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_SWAP;          break;        } @@ -10250,6 +10321,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        c = *p;        if (c == NUL) {          // End of word, can't swap or replace. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_FINAL;          break;        } @@ -10257,6 +10329,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        // Don't swap if the first character is not a word character.        // SWAP3 etc. also don't make sense then.        if (!soundfold && !spell_iswordp(p, curwin)) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI;          break;        } @@ -10281,6 +10354,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        // When the second character is NUL we can't swap.        if (c2 == NUL) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI;          break;        } @@ -10288,6 +10362,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        // When characters are identical, swap won't do anything.        // Also get here if the second char is not a word character.        if (c == c2) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_SWAP3;          break;        } @@ -10298,6 +10373,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so              sp->ts_twordlen, tword, fword + sp->ts_fidx,              c, c2);  #endif +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_UNSWAP;          ++depth;          if (has_mbyte) { @@ -10312,6 +10388,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so          }        } else          // If this swap doesn't work then SWAP3 won't either. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI;        break; @@ -10359,6 +10436,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        // Also get here when the third character is not a word character.        // Second character may any char: "a.b" -> "b.a"        if (c == c3 || c3 == NUL) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI;          break;        } @@ -10369,6 +10447,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so              sp->ts_twordlen, tword, fword + sp->ts_fidx,              c, c3);  #endif +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_UNSWAP3;          ++depth;          if (has_mbyte) { @@ -10382,8 +10461,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so            p[2] = c;            stack[depth].ts_fidxtry = sp->ts_fidx + 3;          } -      } else +      } else { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI; +      }        break;      case STATE_UNSWAP3: @@ -10409,6 +10490,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if (!soundfold && !spell_iswordp(p, curwin)) {          // Middle char is not a word char, skip the rotate.  First and          // third char were already checked at swap and swap3. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI;          break;        } @@ -10423,6 +10505,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so              sp->ts_twordlen, tword, fword + sp->ts_fidx,              p[0], p[1], p[2]);  #endif +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_UNROT3L;          ++depth;          p = fword + sp->ts_fidx; @@ -10441,8 +10524,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so            p[2] = c;            stack[depth].ts_fidxtry = sp->ts_fidx + 3;          } -      } else +      } else { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI; +      }        break;      case STATE_UNROT3L: @@ -10472,6 +10557,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so              sp->ts_twordlen, tword, fword + sp->ts_fidx,              p[0], p[1], p[2]);  #endif +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_UNROT3R;          ++depth;          p = fword + sp->ts_fidx; @@ -10490,8 +10576,10 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so            *p = c;            stack[depth].ts_fidxtry = sp->ts_fidx + 3;          } -      } else +      } else { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_REP_INI; +      }        break;      case STATE_UNROT3R: @@ -10521,6 +10609,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if ((lp->lp_replang == NULL && !soundfold)            || sp->ts_score + SCORE_REP >= su->su_maxscore            || sp->ts_fidx < sp->ts_fidxtry) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_FINAL;          break;        } @@ -10533,10 +10622,12 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so          sp->ts_curi = lp->lp_replang->sl_rep_first[fword[sp->ts_fidx]];        if (sp->ts_curi < 0) { +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_FINAL;          break;        } +      PROF_STORE(sp->ts_state)        sp->ts_state = STATE_REP;      // FALLTHROUGH @@ -10566,6 +10657,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so                ftp->ft_from, ftp->ft_to);  #endif            // Need to undo this afterwards. +          PROF_STORE(sp->ts_state)            sp->ts_state = STATE_REP_UNDO;            // Change the "from" to the "to" string. @@ -10585,6 +10677,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so        if (sp->ts_curi >= gap->ga_len && sp->ts_state == STATE_REP)          // No (more) matches. +        PROF_STORE(sp->ts_state)          sp->ts_state = STATE_FINAL;        break; @@ -10604,6 +10697,7 @@ static void suggest_trie_walk(suginfo_T *su, langp_T *lp, char_u *fword, bool so          repextra -= tl - fl;        }        memmove(p, ftp->ft_from, fl); +      PROF_STORE(sp->ts_state)        sp->ts_state = STATE_REP;        break; @@ -11014,7 +11108,13 @@ static void suggest_try_soundalike(suginfo_T *su)        // try all kinds of inserts/deletes/swaps/etc.        // TODO: also soundfold the next words, so that we can try joining        // and splitting +#ifdef SUGGEST_PROFILE +      prof_init(); +#endif        suggest_trie_walk(su, lp, salword, true); +#ifdef SUGGEST_PROFILE +      prof_report("soundalike"); +#endif      }    }  } @@ -13364,3 +13464,4 @@ int expand_spelling(linenr_T lnum, char_u *pat, char_u ***matchp)    return ga.ga_len;  } + diff --git a/src/nvim/testdir/Makefile b/src/nvim/testdir/Makefile index b06efc9ffb..4b0b5e8d26 100644 --- a/src/nvim/testdir/Makefile +++ b/src/nvim/testdir/Makefile @@ -9,7 +9,6 @@ SCRIPTSOURCE := ../../../runtime  SCRIPTS := \             test8.out              \ -           test10.out             \             test12.out             \             test13.out             \             test14.out             \ @@ -17,7 +16,6 @@ SCRIPTS := \             test24.out             \             test30.out             \             test32.out             \ -           test34.out             \             test37.out             \             test40.out             \             test42.out             \ @@ -26,7 +24,6 @@ SCRIPTS := \             test49.out             \             test52.out             \             test53.out             \ -           test55.out             \             test64.out             \             test69.out             \             test73.out             \ @@ -37,10 +34,13 @@ SCRIPTS := \  # Keep test_alot*.res as the last one, sort the others.  NEW_TESTS = \  	    test_cursor_func.res \ +	    test_hardcopy.res \  	    test_help_tagjump.res \ +	    test_langmap.res \  	    test_menu.res \  	    test_syntax.res \  	    test_timers.res \ +	    test_unlet.res \  	    test_viml.res \  	    test_alot.res diff --git a/src/nvim/testdir/test10.in b/src/nvim/testdir/test10.in deleted file mode 100644 index 2178cf41ce..0000000000 --- a/src/nvim/testdir/test10.in +++ /dev/null @@ -1,110 +0,0 @@ -Test for 'errorformat'.  This will fail if the quickfix feature was disabled. - -STARTTEST -:7/start of errorfile/,/end of errorfile/w! Xerrorfile1 -:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2 -:/start of testfile/,/end of testfile/w! Xtestfile -:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m -:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m -:cf Xerrorfile2 -:clast -:copen -:let a=w:quickfix_title -:wincmd p -lgR=a
 -:cf Xerrorfile1 -grA -:cn -gRLINE 6, COL 19 -:cn -gRNO COLUMN SPECIFIED -:cn -gRAGAIN NO COLUMN -:cn -gRCOL 1 -:cn -gRCOL 2 -:cn -gRCOL 10 -:cn -gRVCOL 10 -:cn -grI -:cn -gR. SPACE POINTER -:cn -gR. DOT POINTER -:cn -gR. DASH POINTER -:cn -gR. TAB-SPACE POINTER -:clast -:cprev -:cprev -:wincmd w -:let a=w:quickfix_title -:wincmd p -lgR=a
 -:w! test.out             " Write contents of this file -:qa! -ENDTEST - -start of errorfile -"Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set. -"Xtestfile", line 6 col 19; this is an error -gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include  version.c -Xtestfile:9: parse error before `asd' -make: *** [vim] Error 1 -in file "Xtestfile" linenr 10: there is an error - -2 returned -"Xtestfile", line 11 col 1; this is an error -"Xtestfile", line 12 col 2; this is another error -"Xtestfile", line 14:10; this is an error in column 10 -=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time -"Xtestfile", linenr 16: yet another problem -Error in "Xtestfile" at line 17: -x should be a dot -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17 -            ^ -Error in "Xtestfile" at line 18: -x should be a dot -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18 -.............^ -Error in "Xtestfile" at line 19: -x should be a dot -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19 ---------------^ -Error in "Xtestfile" at line 20: -x should be a dot -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20 -	       ^ - -Does anyone know what is the problem and how to correction it? -"Xtestfile", line 21 col 9: What is the title of the quickfix window? -"Xtestfile", line 22 col 9: What is the title of the quickfix window? -end of errorfile - -start of testfile -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  4 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  6 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  9 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 10 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 12 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 14 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 15 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 21 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 22 -end of testfile diff --git a/src/nvim/testdir/test10.ok b/src/nvim/testdir/test10.ok deleted file mode 100644 index 76a02f40b4..0000000000 --- a/src/nvim/testdir/test10.ok +++ /dev/null @@ -1,23 +0,0 @@ -start of testfile -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3 -	xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx    line  4 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5 -	xxxxxxxxxxxxxxxxxLINE 6, COL 19   line  6 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8 -	NO COLUMN SPECIFIEDxxxxxxxxxxx    line  9 -	AGAIN NO COLUMNxxxxxxxxxxxxxxx    line 10 -COL 1	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11 -	COL 2xxxxxxxxxxxxxxxxxxxxxxxxx    line 12 -	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13 -	xxxxxxxxCOL 10xxxxxxxxxxxxxxxx    line 14 -	xVCOL 10xxxxxxxxxxxxxxxxxxxxxx    line 15 -	Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16 -	xxxx. SPACE POINTERxxxxxxxxxxx    line 17 -	xxxxx. DOT POINTERxxxxxxxxxxxx    line 18 -	xxxxxx. DASH POINTERxxxxxxxxxx    line 19 -	xxxxxxx. TAB-SPACE POINTERxxxx    line 20 -	xxxxxxxx:cf Xerrorfile1xxxxxxx    line 21 -	xxxxxxxx:cf Xerrorfile2xxxxxxx    line 22 -end of testfile diff --git a/src/nvim/testdir/test10a.in b/src/nvim/testdir/test10a.in deleted file mode 100644 index 99a5a03db8..0000000000 --- a/src/nvim/testdir/test10a.in +++ /dev/null @@ -1,72 +0,0 @@ -Test for 'errorformat'. - -STARTTEST -:/start of errorfile/,/end of errorfile/w! Xerrorfile -:/start of testfile/,/end of testfile/w! Xtestfile -:cf Xerrorfile -rA -:cn -rB -:cn -rC -:cn -rD -:cn -rE -:w! test.out             " Write contents of this file -:qa! -ENDTEST - -start of errorfile - -                  printf(" %d \n", (number/other)%10 ); -..................^ -%CC-E-NOSEMI, Missing ";". -at line number 4 in file SYS$DISK:XTESTFILE - -             other=10000000; -.............^ -%CC-E-UNDECLARED, In this statement, "oszt" is not declared. -at line number 7 in file SYS$DISK:XTESTFILE - -             for (i = 0; i<7 ; i++ ){ -..................^ -%CC-E-UNDECLARED, In this statement, "i" is not declared. -at line number 16 in file SYS$DISK:XTESTFILE - -some other error somewhere here. -...........................^ -%CC-W-WARRING, Sorry, but no expalnation for such an warring. -at line number 19 in file SYS$DISK:XTESTFILE - -and finally some other error exactly here. -.....................................^ -%CC-I-INFORMATIONAL, It should be some informational message. -at line number 20 in file SYS$DISK:XTESTFILE - -Does anyone know what is the problem and how to correct ??  :) -end of errorfile - -start of testfile -01234567890123456789012345678901234567 -line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 4  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 7  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -end of testfile diff --git a/src/nvim/testdir/test10a.ok b/src/nvim/testdir/test10a.ok deleted file mode 100644 index 10e78c9239..0000000000 --- a/src/nvim/testdir/test10a.ok +++ /dev/null @@ -1,23 +0,0 @@ -start of testfile -01234567890123456789012345678901234567 -line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 4  xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx -line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 7  xxxxxBxxxxxxxxxxxxxxxxxxxxxxxx -line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 16 xxxxxxxxxxCxxxxxxxxxxxxxxxxxxx -line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 19 xxxxxxxxxxxxxxxxxxxDxxxxxxxxxx -line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxE -line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -end of testfile diff --git a/src/nvim/testdir/test34.in b/src/nvim/testdir/test34.in deleted file mode 100644 index 4cb7e9494a..0000000000 --- a/src/nvim/testdir/test34.in +++ /dev/null @@ -1,86 +0,0 @@ -Test for user functions. -Also test an <expr> mapping calling a function. -Also test that a builtin function cannot be replaced. -Also test for regression when calling arbitrary expression. - -STARTTEST -:function Table(title, ...) -:  let ret = a:title -:  let idx = 1 -:  while idx <= a:0 -:    exe "let ret = ret . a:" . idx -:    let idx = idx + 1 -:  endwhile -:  return ret -:endfunction -:function Compute(n1, n2, divname) -:  if a:n2 == 0 -:    return "fail" -:  endif -:  exe "let g:" . a:divname . " = ". a:n1 / a:n2 -:  return "ok" -:endfunction -:func Expr1() -:  normal! v -:  return "111" -:endfunc -:func Expr2() -:  call search('XX', 'b') -:  return "222" -:endfunc -:func ListItem() -:  let g:counter += 1 -:  return g:counter . '. ' -:endfunc -:func ListReset() -:  let g:counter = 0 -:  return '' -:endfunc -:func FuncWithRef(a) -:  unlet g:FuncRef -:  return a:a -:endfunc -:let g:FuncRef=function("FuncWithRef") -:let counter = 0 -:inoremap <expr> ( ListItem() -:inoremap <expr> [ ListReset() -:imap <expr> + Expr1() -:imap <expr> * Expr2() -:let retval = "nop" -/^here -C=Table("xxx", 4, "asdf") - =Compute(45, 0, "retval") - =retval - =Compute(45, 5, "retval") - =retval - =g:FuncRef(333) - -XX+-XX ----*--- -(one -(two -[(one again:call append(line('$'), max([1, 2, 3])) -:call extend(g:, {'max': function('min')}) -:call append(line('$'), max([1, 2, 3])) -:try -:    " Regression: the first line below used to throw ?E110: Missing ')'? -:    " Second is here just to prove that this line is correct when not skipping -:    " rhs of &&. -:    $put =(0&&(function('tr'))(1, 2, 3)) -:    $put =(1&&(function('tr'))(1, 2, 3)) -:catch -:    $put ='!!! Unexpected exception:' -:    $put =v:exception -:endtry -:$-9,$w! test.out -:delfunc Table -:delfunc Compute -:delfunc Expr1 -:delfunc Expr2 -:delfunc ListItem -:delfunc ListReset -:unlet retval counter -:q! -ENDTEST - -here diff --git a/src/nvim/testdir/test34.ok b/src/nvim/testdir/test34.ok deleted file mode 100644 index 97995de80e..0000000000 --- a/src/nvim/testdir/test34.ok +++ /dev/null @@ -1,10 +0,0 @@ -xxx4asdf fail nop ok 9 333 -XX111-XX ----222--- -1. one -2. two -1. one again -3 -3 -0 -1 diff --git a/src/nvim/testdir/test55.in b/src/nvim/testdir/test55.in deleted file mode 100644 index 9a55eac6f6..0000000000 --- a/src/nvim/testdir/test55.in +++ /dev/null @@ -1,600 +0,0 @@ -Tests for List and Dictionary types.     vim: set ft=vim : - -STARTTEST -:fun Test(...) -:lang C -:" Creating List directly with different types -:let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},] -:$put =string(l) -:$put =string(l[-1]) -:$put =string(l[-4]) -:try -:  $put =string(l[-5]) -:catch -:  $put =v:exception[:14] -:endtry -:" List slices -:$put =string(l[:]) -:$put =string(l[1:]) -:$put =string(l[:-2]) -:$put =string(l[0:8]) -:$put =string(l[8:-1]) -:" -:" List identity -:let ll = l -:let lx = copy(l) -:try -:  $put =(l == ll) . (l isnot ll) . (l is ll) . (l == lx) . (l is lx) . (l isnot lx) -:catch -:  $put =v:exception -:endtry -:" -:" Creating Dictionary directly with different types -:let d = {001: 'asd', 'b': [1, 2, function('strlen')], -1: {'a': 1},} -:$put =string(d) . d.1 -:$put =string(sort(keys(d))) -:$put =string (values(d)) -:for [key, val] in items(d) -:  $put =key . ':' . string(val) -:  unlet key val -:endfor -:call extend  (d, {3:33, 1:99}) -:call extend(d, {'b':'bbb', 'c':'ccc'}, "keep") -:try -:  call extend(d, {3:333,4:444}, "error") -:catch -:  $put =v:exception[:15] . v:exception[-1:-1] -:endtry -:$put =string(d) -:call filter(d, 'v:key =~ ''[ac391]''') -:$put =string(d) -:" -:" Dictionary identity -:let dd = d -:let dx = copy(d) -:try -:  $put =(d == dd) . (d isnot dd) . (d is dd) . (d == dx) . (d is dx) . (d isnot dx) -:catch -:  $put =v:exception -:endtry -:" -:" Changing var type should fail -:try -:  let d = [] -:catch -:  $put =v:exception[:14] . v:exception[-1:-1] -:endtry -:try -:  let l = {} -:catch -:  $put =v:exception[:14] . v:exception[-1:-1] -:endtry -:" -:" removing items with :unlet -:unlet l[2] -:$put =string(l) -:let l = range(8) -:try -:unlet l[:3] -:unlet l[1:] -:catch -:$put =v:exception -:endtry -:$put =string(l) -:" -:unlet d.c -:unlet d[-1] -:$put =string(d) -:" -:" removing items out of range: silently skip items that don't exist -let l = [0, 1, 2, 3] -:unlet l[2:1] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[2:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[2:3] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[2:4] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[2:5] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-1:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-2:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-3:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-4:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-5:2] -:$put =string(l) -let l = [0, 1, 2, 3] -:unlet l[-6:2] -:$put =string(l) -:" -:" assignment to a list -:let l = [0, 1, 2, 3] -:let [va, vb] = l[2:3] -:$put =va -:$put =vb -:try -:  let [va, vb] = l -:catch -:  $put =v:exception[:14] -:endtry -:try -:  let [va, vb] = l[1:1] -:catch -:  $put =v:exception[:14] -:endtry -:" -:" manipulating a big Dictionary (hashtable.c has a border of 1000 entries) -:let d = {} -:for i in range(1500) -: let d[i] = 3000 - i -:endfor -:$put =d[0] . ' ' . d[100] . ' ' . d[999] . ' ' . d[1400] . ' ' . d[1499] -:try -:  let n = d[1500] -:catch -:  $put =substitute(v:exception, '\v(.{14}).*( \d{4}).*', '\1\2', '') -:endtry -:" lookup each items -:for i in range(1500) -: if d[i] != 3000 - i -:  $put =d[i] -: endif -:endfor -: let i += 1 -:" delete even items -:while i >= 2 -: let i -= 2 -: unlet d[i] -:endwhile -:$put =get(d, 1500 - 100, 'NONE') . ' ' . d[1] -:" delete odd items, checking value, one intentionally wrong -:let d[33] = 999 -:let i = 1 -:while i < 1500 -: if d[i] != 3000 - i -:  $put =i . '=' . d[i] -: else -:  unlet d[i] -: endif -: let i += 2 -:endwhile -:$put =string(d)  " must be almost empty now -:unlet d -:" -:" Dictionary function -:let dict = {} -:func dict.func(a) dict -:  $put =a:a . len(self.data) -:endfunc -:let dict.data = [1,2,3] -:call dict.func("len: ") -:let x = dict.func("again: ") -:try -:  let Fn = dict.func -:  call Fn('xxx') -:catch -:  $put =v:exception[:15] -:endtry -:"  -:" Function in script-local List or Dict -:let g:dict = {} -:function g:dict.func() dict -:  $put ='g:dict.func'.self.foo[1].self.foo[0]('asdf') -:endfunc -:let g:dict.foo = ['-', 2, 3] -:call insert(g:dict.foo, function('strlen')) -:call g:dict.func() -:"  -:" Nasty: remove func from Dict that's being called (works) -:let d = {1:1} -:func d.func(a) -:  return "a:". a:a -:endfunc -:$put =d.func(string(remove(d, 'func'))) -:" -:" Nasty: deepcopy() dict that refers to itself (fails when noref used) -:let d = {1:1, 2:2} -:let l = [4, d, 6] -:let d[3] = l -:let dc = deepcopy(d) -:try -:  let dc = deepcopy(d, 1) -:catch -:  $put =v:exception[:14] -:endtry -:let l2 = [0, l, l, 3] -:let l[1] = l2 -:let l3 = deepcopy(l2) -:$put ='same list: ' . (l3[1] is l3[2]) -:" -:" Locked variables -:for depth in range(5) -:  $put ='depth is ' . depth -:  for u in range(3) -:    unlet l -:    let l = [0, [1, [2, 3]], {4: 5, 6: {7: 8}}] -:    exe "lockvar " . depth . " l" -:    if u == 1 -:      exe "unlockvar l" -:    elseif u == 2 -:      exe "unlockvar " . depth . " l" -:    endif -:    let ps = islocked("l").islocked("l[1]").islocked("l[1][1]").islocked("l[1][1][0]").'-'.islocked("l[2]").islocked("l[2]['6']").islocked("l[2]['6'][7]") -:    $put =ps -:    let ps = '' -:    try -:      let l[1][1][0] = 99 -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l[1][1] = [99] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l[1] = [99] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l[2]['6'][7] = 99 -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l[2][6] = {99: 99} -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l[2] = {99: 99} -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      let l = [99] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    $put =ps -:  endfor -:endfor -:" -:" Unletting locked variables -:$put ='Unletting:' -:for depth in range(5) -:  $put ='depth is ' . depth -:  for u in range(3) -:    unlet l -:    let l = [0, [1, [2, 3]], {4: 5, 6: {7: 8}}] -:    exe "lockvar " . depth . " l" -:    if u == 1 -:      exe "unlockvar l" -:    elseif u == 2 -:      exe "unlockvar " . depth . " l" -:    endif -:    let ps = islocked("l").islocked("l[1]").islocked("l[1][1]").islocked("l[1][1][0]").'-'.islocked("l[2]").islocked("l[2]['6']").islocked("l[2]['6'][7]") -:    $put =ps -:    let ps = '' -:    try -:      unlet l[2]['6'][7] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l[2][6] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l[2] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l[1][1][0] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l[1][1] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l[1] -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    try -:      unlet l -:      let ps .= 'p' -:    catch -:      let ps .= 'F' -:    endtry -:    $put =ps -:  endfor -:endfor -:" -:" Locked variables and :unlet or list / dict functions -:$put ='Locks and commands or functions:' -:" -:$put ='No :unlet after lock on dict:' -:unlet! d -:let d = {'a': 99, 'b': 100} -:lockvar 1 d -:try -:  unlet d.a -:  $put ='did :unlet' -:catch -:  $put =v:exception[:16] -:endtry -:$put =string(d) -:" -:$put =':unlet after lock on dict item:' -:unlet! d -:let d = {'a': 99, 'b': 100} -:lockvar d.a -:try -:  unlet d.a -:  $put ='did :unlet' -:catch -:  $put =v:exception[:16] -:endtry -:$put =string(d) -:" -:$put ='filter() after lock on dict item:' -:unlet! d -:let d = {'a': 99, 'b': 100} -:lockvar d.a -:try -:  call filter(d, 'v:key != "a"') -:  $put ='did filter()' -:catch -:  $put =v:exception[:16] -:endtry -:$put =string(d) -:" -:$put ='map() after lock on dict:' -:unlet! d -:let d = {'a': 99, 'b': 100} -:lockvar 1 d -:try -:  call map(d, 'v:val + 200') -:  $put ='did map()' -:catch -:  $put =v:exception[:16] -:endtry -:$put =string(d) -:" -:$put ='No extend() after lock on dict item:' -:unlet! d -:let d = {'a': 99, 'b': 100} -:lockvar d.a -:try -:  $put =string(extend(d, {'a': 123})) -:  $put ='did extend()' -:catch -:  $put =v:exception[:14] -:endtry -:$put =string(d) -:" -:$put ='No remove() of write-protected scope-level variable:' -:fun! Tfunc(this_is_a_loooooooooong_parameter_name) -:  try -:    $put =string(remove(a:, 'this_is_a_loooooooooong_parameter_name')) -:    $put ='did remove()' -:  catch -:    $put =v:exception[:14] -:  endtry -:endfun -:call Tfunc('testval') -:" -:$put ='No extend() of write-protected scope-level variable:' -:fun! Tfunc(this_is_a_loooooooooong_parameter_name) -:  try -:    $put =string(extend(a:, {'this_is_a_loooooooooong_parameter_name': 1234})) -:    $put ='did extend()' -:  catch -:    $put =v:exception[:14] -:  endtry -:endfun -:call Tfunc('testval') -:" -:$put ='No :unlet of variable in locked scope:' -:let b:testvar = 123 -:lockvar 1 b: -:try -:  unlet b:testvar -:  $put ='b:testvar was :unlet: '. (!exists('b:testvar')) -:catch -:  $put =v:exception[:16] -:endtry -:unlockvar 1 b: -:unlet! b:testvar -:" -:$put ='No :let += of locked list variable:' -:let l = ['a', 'b', 3] -:lockvar 1 l -:try -:  let l += ['x'] -:  $put ='did :let +=' -:catch -:  $put =v:exception[:14] -:endtry -:$put =string(l) -:" -:unlet l -:let l = [1, 2, 3, 4] -:lockvar! l -:$put =string(l) -:unlockvar l[1] -:unlet l[0:1] -:$put =string(l) -:unlet l[1:2] -:$put =string(l) -:unlockvar l[1] -:let l[0:1] = [0, 1] -:$put =string(l) -:let l[1:2] = [0, 1] -:$put =string(l) -:unlet l -:" :lockvar/islocked() triggering script autoloading -:set rtp+=./sautest -:lockvar g:footest#x -:unlockvar g:footest#x -:$put ='locked g:footest#x:'.islocked('g:footest#x') -:$put ='exists g:footest#x:'.exists('g:footest#x') -:$put ='g:footest#x: '.g:footest#x -:" -:" a:000 function argument -:" first the tests that should fail -:try -:  let a:000 = [1, 2] -:catch -:  $put ='caught a:000' -:endtry -:try -:  let a:000[0] = 9 -:catch -:  $put ='caught a:000[0]' -:endtry -:try -:  let a:000[2] = [9, 10] -:catch -:  $put ='caught a:000[2]' -:endtry -:try -:  let a:000[3] = {9: 10} -:catch -:  $put ='caught a:000[3]' -:endtry -:" now the tests that should pass -:try -:  let a:000[2][1] = 9 -:  call extend(a:000[2], [5, 6]) -:  let a:000[3][5] = 8 -:  let a:000[3]['a'] = 12 -:  $put =string(a:000) -:catch -:  $put ='caught ' . v:exception -:endtry -:" -:" reverse(), sort(), uniq() -:let l = ['-0', 'A11', 2, 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5] -:$put =string(uniq(copy(l))) -:$put =string(reverse(l)) -:$put =string(reverse(reverse(l))) -:$put =string(sort(l)) -:$put =string(reverse(sort(l))) -:$put =string(sort(reverse(sort(l)))) -:$put =string(uniq(sort(l))) -:let l=[7, 9, 'one', 18, 12, 22, 'two', 10.0e-16, -1, 'three', 0xff, 0.22, 'four'] -:$put =string(sort(copy(l), 'n')) -:let l=[7, 9, 18, 12, 22, 10.0e-16, -1, 0xff, 0, -0, 0.22, 'bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', {}, []] -:$put =string(sort(copy(l), 1)) -:$put =string(sort(copy(l), 'i')) -:$put =string(sort(copy(l))) -:" -:" splitting a string to a List -:$put =string(split('  aa  bb ')) -:$put =string(split('  aa  bb  ', '\W\+', 0)) -:$put =string(split('  aa  bb  ', '\W\+', 1)) -:$put =string(split('  aa  bb  ', '\W', 1)) -:$put =string(split(':aa::bb:', ':', 0)) -:$put =string(split(':aa::bb:', ':', 1)) -:$put =string(split('aa,,bb, cc,', ',\s*', 1)) -:$put =string(split('abc', '\zs')) -:$put =string(split('abc', '\zs', 1)) -:" -:" compare recursively linked list and dict -:let l = [1, 2, 3, 4] -:let d = {'1': 1, '2': l, '3': 3} -:let l[1] = d -:$put =(l == l) -:$put =(d == d) -:$put =(l != deepcopy(l)) -:$put =(d != deepcopy(d)) -:" -:" compare complex recursively linked list and dict -:let l = [] -:call add(l, l) -:let dict4 = {"l": l} -:call add(dict4.l, dict4) -:let lcopy = deepcopy(l) -:let dict4copy = deepcopy(dict4) -:$put =(l == lcopy) -:$put =(dict4 == dict4copy) -:" -:" Pass the same List to extend() -:let l = [1, 2, 3, 4, 5] -:call extend(l, l) -:$put =string(l) -:" -:" Pass the same Dict to extend() -:let d = { 'a': {'b': 'B'}} -:call extend(d, d) -:$put =string(d) -:" -:" Pass the same Dict to extend() with "error" -:try -:  call extend(d, d, "error") -:catch -:  $put =v:exception[:15] . v:exception[-1:-1] -:endtry -:$put =string(d) -:" -:" test for range assign -:let l = [0] -:let l[:] = [1, 2] -:$put =string(l) -:endfun -:" -:call Test(1, 2, [3, 4], {5: 6})  " This may take a while -:" -:delfunc Test -:unlet dict -:call garbagecollect(1) -:" -:" test for patch 7.3.637 -:let a = 'No error caught' -:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry -o=a
:" -:lang C -:redir => a -:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry -:redir END -o=a
:" -:" -:/^start:/,$wq! test.out -ENDTEST - -start: diff --git a/src/nvim/testdir/test55.ok b/src/nvim/testdir/test55.ok deleted file mode 100644 index 607a95ead9..0000000000 --- a/src/nvim/testdir/test55.ok +++ /dev/null @@ -1,199 +0,0 @@ -start: -[1, 'as''d', [1, 2, function('strlen')], {'a': 1}] -{'a': 1} -1 -Vim(put):E684:  -[1, 'as''d', [1, 2, function('strlen')], {'a': 1}] -['as''d', [1, 2, function('strlen')], {'a': 1}] -[1, 'as''d', [1, 2, function('strlen')]] -[1, 'as''d', [1, 2, function('strlen')], {'a': 1}] -[] -101101 -{'1': 'asd', 'b': [1, 2, function('strlen')], '-1': {'a': 1}}asd -['-1', '1', 'b'] -['asd', [1, 2, function('strlen')], {'a': 1}] -1:'asd' -b:[1, 2, function('strlen')] --1:{'a': 1} -Vim(call):E737: 3 -{'c': 'ccc', '1': 99, 'b': [1, 2, function('strlen')], '3': 33, '-1': {'a': 1}} -{'c': 'ccc', '1': 99, '3': 33, '-1': {'a': 1}} -101101 -Vim(let):E706: d -Vim(let):E706: l -[1, 'as''d', {'a': 1}] -[4] -{'1': 99, '3': 33} -[0, 1, 2, 3] -[0, 1, 3] -[0, 1] -[0, 1] -[0, 1] -[0, 1, 2, 3] -[0, 1, 3] -[0, 3] -[3] -[3] -[3] -2 -3 -Vim(let):E687:  -Vim(let):E688:  -3000 2900 2001 1600 1501 -Vim(let):E716: 1500 -NONE 2999 -33=999 -{'33': 999} -len: 3 -again: 3 -Vim(call):E725:  -g:dict.func-4 -a:function('3') -Vim(let):E698:  -same list: 1 -depth is 0 -0000-000 -ppppppp -0000-000 -ppppppp -0000-000 -ppppppp -depth is 1 -1000-000 -ppppppF -0000-000 -ppppppp -0000-000 -ppppppp -depth is 2 -1100-100 -ppFppFF -0000-000 -ppppppp -0000-000 -ppppppp -depth is 3 -1110-110 -pFFpFFF -0010-010 -pFppFpp -0000-000 -ppppppp -depth is 4 -1111-111 -FFFFFFF -0011-011 -FFpFFpp -0000-000 -ppppppp -Unletting: -depth is 0 -0000-000 -ppppppp -0000-000 -ppppppp -0000-000 -ppppppp -depth is 1 -1000-000 -ppFppFp -0000-000 -ppppppp -0000-000 -ppppppp -depth is 2 -1100-100 -pFFpFFp -0000-000 -ppppppp -0000-000 -ppppppp -depth is 3 -1110-110 -FFFFFFp -0010-010 -FppFppp -0000-000 -ppppppp -depth is 4 -1111-111 -FFFFFFp -0011-011 -FppFppp -0000-000 -ppppppp -Locks and commands or functions: -No :unlet after lock on dict: -Vim(unlet):E741:  -{'a': 99, 'b': 100} -:unlet after lock on dict item: -did :unlet -{'b': 100} -filter() after lock on dict item: -did filter() -{'b': 100} -map() after lock on dict: -did map() -{'a': 299, 'b': 300} -No extend() after lock on dict item: -Vim(put):E741:  -{'a': 99, 'b': 100} -No remove() of write-protected scope-level variable: -Vim(put):E795:  -No extend() of write-protected scope-level variable: -Vim(put):E742:  -No :unlet of variable in locked scope: -Vim(unlet):E741:  -No :let += of locked list variable: -Vim(let):E741:  -['a', 'b', 3] -[1, 2, 3, 4] -[1, 2, 3, 4] -[1, 2, 3, 4] -[1, 2, 3, 4] -[1, 2, 3, 4] -locked g:footest#x:-1 -exists g:footest#x:0 -g:footest#x: 1 -caught a:000 -caught a:000[0] -caught a:000[2] -caught a:000[3] -[1, 2, [3, 9, 5, 6], {'a': 12, '5': 8}] -['-0', 'A11', 2, 'xaaa', 4, 'foo', 'foo6', 'foo', [0, 1, 2], 'x8', [0, 1, 2], 1.5] -[1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0'] -[1.5, [0, 1, 2], 'x8', [0, 1, 2], 'foo', 'foo6', 'foo', 4, 'xaaa', 2, 2, 'A11', '-0'] -['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]] -[[0, 1, 2], [0, 1, 2], 4, 2, 2, 1.5, 'xaaa', 'x8', 'foo6', 'foo', 'foo', 'A11', '-0'] -['-0', 'A11', 'foo', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 2, 4, [0, 1, 2], [0, 1, 2]] -['-0', 'A11', 'foo', 'foo6', 'x8', 'xaaa', 1.5, 2, 4, [0, 1, 2]] -[-1, 'one', 'two', 'three', 'four', 1.0e-15, 0.22, 7, 9, 12, 18, 22, 255] -['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}] -['bar', 'BAR', 'Bar', 'Foo', 'FOO', 'foo', 'FOOBAR', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}] -['BAR', 'Bar', 'FOO', 'FOOBAR', 'Foo', 'bar', 'foo', -1, 0, 0, 0.22, 1.0e-15, 12, 18, 22, 255, 7, 9, [], {}] -['aa', 'bb'] -['aa', 'bb'] -['', 'aa', 'bb', ''] -['', '', 'aa', '', 'bb', '', ''] -['aa', '', 'bb'] -['', 'aa', '', 'bb', ''] -['aa', '', 'bb', 'cc', ''] -['a', 'b', 'c'] -['', 'a', '', 'b', '', 'c', ''] -1 -1 -0 -0 -1 -1 -[1, 2, 3, 4, 5, 1, 2, 3, 4, 5] -{'a': {'b': 'B'}} -Vim(call):E737: a -{'a': {'b': 'B'}} -[1, 2] -Vim(foldopen):E490: - - -Error detected while processing : -E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry - diff --git a/src/nvim/testdir/test_hardcopy.vim b/src/nvim/testdir/test_hardcopy.vim new file mode 100644 index 0000000000..4629d17dd2 --- /dev/null +++ b/src/nvim/testdir/test_hardcopy.vim @@ -0,0 +1,58 @@ +" Test :hardcopy + +func Test_printoptions_parsing() +  " Only test that this doesn't throw an error. +  set printoptions=left:5in,right:10pt,top:8mm,bottom:2pc +  set printoptions=left:2in,top:30pt,right:16mm,bottom:3pc +  set printoptions=header:3,syntax:y,number:7,wrap:n +  set printoptions=duplex:short,collate:n,jobsplit:y,portrait:n +  set printoptions=paper:10x14 +  set printoptions=paper:A3 +  set printoptions=paper:A4 +  set printoptions=paper:A5 +  set printoptions=paper:B4 +  set printoptions=paper:B5 +  set printoptions=paper:executive +  set printoptions=paper:folio +  set printoptions=paper:ledger +  set printoptions=paper:legal +  set printoptions=paper:letter +  set printoptions=paper:quarto +  set printoptions=paper:statement +  set printoptions=paper:tabloid +  set printoptions=formfeed:y +  set printoptions= +  set printoptions& +endfunc + +func Test_printmbfont_parsing() +  " Only test that this doesn't throw an error. +  set printmbfont=r:WadaMin-Regular,b:WadaMin-Bold,i:WadaMin-Italic,o:WadaMin-Bold-Italic,c:yes,a:no +  set printmbfont= +  set printmbfont& +endfunc + +func Test_printheader_parsing() +  " Only test that this doesn't throw an error. +  set printheader=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P +  set printheader=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P +  set printheader=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b' +  set printheader=...%r%{VarExists('b:gzflag','\ [GZ]')}%h... +  set printheader= +  set printheader& +endfunc + +" Test that :hardcopy produces a non-empty file. +" We don't check much of the contents. +func Test_with_syntax() +  if has('postscript') +    set printoptions=syntax:y +    syn on +    hardcopy > Xhardcopy +    let lines = readfile('Xhardcopy') +    call assert_true(len(lines) > 20) +    call assert_true(lines[0] =~ 'PS-Adobe') +    call delete('Xhardcopy') +    set printoptions& +  endif +endfunc diff --git a/src/nvim/testdir/test_langmap.vim b/src/nvim/testdir/test_langmap.vim new file mode 100644 index 0000000000..066c3bf2bd --- /dev/null +++ b/src/nvim/testdir/test_langmap.vim @@ -0,0 +1,24 @@ +" tests for 'langmap' + +func Test_langmap() +  new +  set langmap=}l,^x,%v + +  call setline(1, ['abc']) +  call feedkeys('gg0}^', 'tx') +  call assert_equal('ac', getline(1)) + +  " in Replace mode +  " need silent! to avoid a delay when entering Insert mode +  call setline(1, ['abcde']) +  silent! call feedkeys("gg0lR%{z\<Esc>00", 'tx') +  call assert_equal('a%{ze', getline(1)) + +  " in Select mode +  " need silent! to avoid a delay when entering Insert mode +  call setline(1, ['abcde']) +  silent! call feedkeys("gg0}%}\<C-G>}^\<Esc>00", 'tx') +  call assert_equal('a}^de', getline(1)) + +  quit! +endfunc diff --git a/src/nvim/testdir/test_unlet.vim b/src/nvim/testdir/test_unlet.vim new file mode 100644 index 0000000000..f6705997a9 --- /dev/null +++ b/src/nvim/testdir/test_unlet.vim @@ -0,0 +1,26 @@ +" Tests for :unlet + +func Test_read_only() +  try +    " this caused a crash +    unlet count +  catch +    call assert_true(v:exception =~ ':E795:') +  endtry +endfunc + +func Test_existing() +  let does_exist = 1 +  call assert_true(exists('does_exist')) +  unlet does_exist +  call assert_false(exists('does_exist')) +endfunc + +func Test_not_existing() +  unlet! does_not_exist +  try +    unlet does_not_exist +  catch +    call assert_true(v:exception =~ ':E108:') +  endtry +endfunc diff --git a/src/nvim/version.c b/src/nvim/version.c index 0f1325fd40..1a66589080 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -225,11 +225,11 @@ static int included_patches[] = {    // 1471 NA    // 1470 NA    // 1469 NA -  // 1468, +  1468,    // 1467 NA    // 1466 NA    // 1465 NA -  // 1464, +  1464,    // 1463 NA    // 1462 NA    // 1461 NA @@ -296,10 +296,10 @@ static int included_patches[] = {    // 1400 NA    // 1399 NA    // 1398 NA -  // 1397, +  1397,    // 1396,    // 1395 NA -  // 1394, +  1394,    // 1393 NA    // 1392 NA    // 1391 NA @@ -470,7 +470,7 @@ static int included_patches[] = {    // 1226 NA    // 1225 NA    // 1224 NA -  // 1223, +  1223,    // 1222 NA    // 1221 NA    // 1220 NA @@ -540,10 +540,10 @@ static int included_patches[] = {    // 1156 NA    // 1155 NA    // 1154 NA -  // 1153, +  1153,    // 1152 NA -  // 1151, -  // 1150, +  1151, +  1150,    1149,    // 1148 NA    // 1147, @@ -599,11 +599,11 @@ static int included_patches[] = {    // 1097,    1096,    // 1095 NA -  // 1094, +  1094,    1093,    1092,    1091, -  // 1090, +  1090,    1089,    1088,    1087, @@ -625,7 +625,7 @@ static int included_patches[] = {    1071,    // 1070 NA    // 1069 NA -  // 1068, +  1068,    // 1067 NA    // 1066 NA    1065, @@ -637,12 +637,12 @@ static int included_patches[] = {    1059,    // 1058,    1057, -  // 1056, +  1056,    1055,    1054,    1053,    1052, -  // 1051, +  1051,    1050,    1049,    1048, @@ -2020,3 +2020,4 @@ void ex_intro(exarg_T *eap)    intro_message(TRUE);    wait_return(TRUE);  } + | 
