]> granicus.if.org Git - vim/commitdiff
patch 8.2.2531: Vim9: the :k command is obscure v8.2.2531
authorBram Moolenaar <Bram@vim.org>
Fri, 19 Feb 2021 20:42:57 +0000 (21:42 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 19 Feb 2021 20:42:57 +0000 (21:42 +0100)
Problem:    Vim9: the :k command is obscure.
Solution:   Disallow using :k, can use :mark instead. (closes #7874)

runtime/doc/vim9.txt
src/ex_cmds.h
src/ex_docmd.c
src/testdir/test_vim9_script.vim
src/version.c
src/vim9compile.c
src/vim9script.c

index def68d312a05fb900f410b81d9ca62b35a8d8195..bde3c9b7b1be1981c0064b9e3b786506c2b100a3 100644 (file)
@@ -96,8 +96,8 @@ script and `:def` functions; details are below:
        def CallMe(count: number, message: string): bool
 - Call functions without `:call`: >
        writefile(['done'], 'file.txt')
-- You cannot use `:xit`, `:t`, `:append`, `:change`, `:insert` or curly-braces
-  names.
+- You cannot use `:xit`, `:t`, `:k`, `:append`, `:change`, `:insert` or
+  curly-braces names.
 - A range before a command must be prefixed with a colon: >
        :%s/this/that
 - Unless mentioned specifically, the highest |scriptversion| is used.
@@ -562,11 +562,12 @@ error.  A number can be given with and without the []: >
        {'456': 'with', '123': 'without'}
 
 
-No :xit, :t, :append, :change or :insert ~
+No :xit, :t, :k, :append, :change or :insert ~
 
 These commands are too easily confused with local variable names.
 Instead of `:x` or `:xit` you can use `:exit`.
 Instead of `:t` you can use `:copy`.
+Instead of `:k` you can use `:mark`.
 
 
 Comparators ~
index e82e91bb374075061204e59c1a361b0b2542894b..7888d6fee0d901729ab39fbb45452dbd72be3579 100644 (file)
@@ -741,7 +741,7 @@ EXCMD(CMD_jumps,    "jumps",        ex_jumps,
        EX_TRLBAR|EX_CMDWIN|EX_LOCK_OK,
        ADDR_NONE),
 EXCMD(CMD_k,           "k",            ex_mark,
-       EX_RANGE|EX_WORD1|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK,
+       EX_RANGE|EX_WORD1|EX_TRLBAR|EX_SBOXOK|EX_CMDWIN|EX_LOCK_OK|EX_NONWHITE_OK,
        ADDR_LINES),
 EXCMD(CMD_keepmarks,   "keepmarks",    ex_wrongmodifier,
        EX_NEEDARG|EX_EXTRA|EX_NOTRLCOM,
index 371f3d606249bb8b95a3ae4aea83e9f66d276b74..77162ec7d66d2169079c6748c7042adef78011d1 100644 (file)
@@ -3461,7 +3461,8 @@ find_ex_command(
     /*
      * Isolate the command and search for it in the command table.
      * Exceptions:
-     * - the 'k' command can directly be followed by any character.
+     * - The 'k' command can directly be followed by any character.
+     *   But it is not used in Vim9 script.
      * - the 's' command can be followed directly by 'c', 'g', 'i', 'I' or 'r'
      *     but :sre[wind] is another command, as are :scr[iptnames],
      *     :scs[cope], :sim[alt], :sig[ns] and :sil[ent].
@@ -8056,6 +8057,10 @@ ex_mark(exarg_T *eap)
 {
     pos_T      pos;
 
+#ifdef FEAT_EVAL
+    if (not_in_vim9(eap) == FAIL)
+       return;
+#endif
     if (*eap->arg == NUL)              // No argument?
        emsg(_(e_argreq));
     else if (eap->arg[1] != NUL)       // more than one character?
index f444bb5a8d7e98585122130f400e7f301f861ec1..d22c6538b804081116220205d7dd2638ec1ca0c9 100644 (file)
@@ -3491,6 +3491,31 @@ def Test_import_gone_when_sourced_twice()
   unlet g:guard
 enddef
 
+def Test_unsupported_commands()
+  var lines =<< trim END
+      ka
+  END
+  CheckDefAndScriptFailure(lines, 'E1100:')
+
+  lines =<< trim END
+    t
+  END
+  CheckDefFailure(lines, 'E1100:')
+  CheckScriptFailure(['vim9script'] + lines, 'E1100:')
+
+  lines =<< trim END
+    x
+  END
+  CheckDefFailure(lines, 'E1100:')
+  CheckScriptFailure(['vim9script'] + lines, 'E1100:')
+
+  lines =<< trim END
+    xit
+  END
+  CheckDefFailure(lines, 'E1100:')
+  CheckScriptFailure(['vim9script'] + lines, 'E1100:')
+enddef
+
 " Keep this last, it messes up highlighting.
 def Test_substitute_cmd()
   new
index 7e42fa3abb86b2ad8bab87378a61e47fb65abc7c..d802a49c2825733d1f4c88e10b432bd3366e0911 100644 (file)
@@ -750,6 +750,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    2531,
 /**/
     2530,
 /**/
index 84c9108cacca6bc8e8676d0ac308fe2ad54a980c..c75ead9d957951750436024400fcc1d667236a21 100644 (file)
@@ -8520,6 +8520,7 @@ compile_def_function(
            case CMD_append:
            case CMD_change:
            case CMD_insert:
+           case CMD_k:
            case CMD_t:
            case CMD_xit:
                    not_in_vim9(&ea);
index d40104cb7acfb268041e1c187ce6b9a65fdafec5..751d8fb7701de6525571386e20085cdbe89619eb 100644 (file)
@@ -95,6 +95,7 @@ not_in_vim9(exarg_T *eap)
            case CMD_append:
            case CMD_change:
            case CMD_insert:
+           case CMD_k:
            case CMD_t:
            case CMD_xit:
                semsg(_(e_command_not_supported_in_vim9_script_missing_var_str), eap->cmd);