Loading ...
Sorry, an error occurred while loading the content.

74354Re: [PATCH] :S filename modifier

Expand Messages
  • ZyX
    Dec 5, 2013
    • 0 Attachment
      > Is this sufficient to explain what this does exactly?
      >
      > Perhaps a few more references are needed in the help, it's not easy to
      > guess that escaping can be done this way.

      Done. Here two changesets are exported, update is in the second one. c.diff contains both:

      # HG changeset patch
      # User ZyX <kp-pav@...>
      # Date 1385842851 -14400
      # Sun Dec 01 00:20:51 2013 +0400
      # Branch S-modifier
      # Node ID ce302bfd3622491bed0267bc6fedad0eb7cfc221
      # Parent 486655e0c5a21469364d3cf895535137f09b3724
      Add %:S filename modifier

      diff -r 486655e0c5a2 -r ce302bfd3622 runtime/doc/cmdline.txt
      --- a/runtime/doc/cmdline.txt Thu Nov 28 19:27:30 2013 +0100
      +++ b/runtime/doc/cmdline.txt Sun Dec 01 00:20:51 2013 +0400
      @@ -824,8 +824,8 @@
      the start of the function.

      *filename-modifiers*
      - *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
      - *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs*
      +*:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs* *::S*
      + *%:8* *%:p* *%:.* *%:~* *%:h* *%:t* *%:r* *%:e* *%:s* *%:gs* *%:S*
      The file name modifiers can be used after "%", "#", "#n", "<cfile>", "<sfile>",
      "<afile>" or "<abuf>". They are also used with the |fnamemodify()| function.
      These are not available when Vim has been compiled without the |+modify_fname|
      @@ -880,6 +880,8 @@
      :gs?pat?sub?
      Substitute all occurrences of "pat" with "sub". Otherwise
      this works like ":s".
      + :S Escape special characters (see |shellescape()|). Must be the
      + last one.

      Examples, when the file name is "src/version.c", current dir
      "/home/mool/vim": >
      diff -r 486655e0c5a2 -r ce302bfd3622 src/eval.c
      --- a/src/eval.c Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/eval.c Sun Dec 01 00:20:51 2013 +0400
      @@ -16924,7 +16924,7 @@
      typval_T *rettv;
      {
      rettv->vval.v_string = vim_strsave_shellescape(
      - get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]));
      + get_tv_string(&argvars[0]), non_zero_arg(&argvars[1]), TRUE);
      rettv->v_type = VAR_STRING;
      }

      @@ -24328,6 +24328,17 @@
      }
      }

      + if (src[*usedlen] == ':' && src[*usedlen + 1] == 'S')
      + {
      + p = vim_strsave_shellescape(*fnamep, FALSE, FALSE);
      + if (p == NULL)
      + return -1;
      + vim_free(*bufp);
      + *bufp = *fnamep = p;
      + *fnamelen = (int)STRLEN(p);
      + *usedlen += 2;
      + }
      +
      return valid;
      }

      diff -r 486655e0c5a2 -r ce302bfd3622 src/misc2.c
      --- a/src/misc2.c Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/misc2.c Sun Dec 01 00:20:51 2013 +0400
      @@ -1368,13 +1368,15 @@
      * (MS-DOS and MS-Windows without 'shellslash' set).
      * Escape a newline, depending on the 'shell' option.
      * When "do_special" is TRUE also replace "!", "%", "#" and things starting
      + * When "do_newline" is FALSE do not escape newline unless it is csh shell
      * with "<" like "<cfile>".
      * Returns the result in allocated memory, NULL if we have run out.
      */
      char_u *
      -vim_strsave_shellescape(string, do_special)
      +vim_strsave_shellescape(string, do_special, do_newline)
      char_u *string;
      int do_special;
      + int do_newline;
      {
      unsigned length;
      char_u *p;
      @@ -1403,7 +1405,8 @@
      # endif
      if (*p == '\'')
      length += 3; /* ' => '\'' */
      - if (*p == '\n' || (*p == '!' && (csh_like || do_special)))
      + if ((*p == '\n' && (csh_like || do_newline))
      + || (*p == '!' && (csh_like || do_special)))
      {
      ++length; /* insert backslash */
      if (csh_like && do_special)
      @@ -1454,7 +1457,8 @@
      ++p;
      continue;
      }
      - if (*p == '\n' || (*p == '!' && (csh_like || do_special)))
      + if ((*p == '\n' && (csh_like || do_newline))
      + || (*p == '!' && (csh_like || do_special)))
      {
      *d++ = '\\';
      if (csh_like && do_special)
      diff -r 486655e0c5a2 -r ce302bfd3622 src/normal.c
      --- a/src/normal.c Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/normal.c Sun Dec 01 00:20:51 2013 +0400
      @@ -5784,7 +5784,7 @@
      {
      /* Escape the argument properly for a shell command */
      ptr = vim_strnsave(ptr, n);
      - p = vim_strsave_shellescape(ptr, TRUE);
      + p = vim_strsave_shellescape(ptr, TRUE, TRUE);
      vim_free(ptr);
      if (p == NULL)
      {
      diff -r 486655e0c5a2 -r ce302bfd3622 src/proto/misc2.pro
      --- a/src/proto/misc2.pro Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/proto/misc2.pro Sun Dec 01 00:20:51 2013 +0400
      @@ -32,7 +32,7 @@
      char_u *vim_strsave_escaped __ARGS((char_u *string, char_u *esc_chars));
      char_u *vim_strsave_escaped_ext __ARGS((char_u *string, char_u *esc_chars, int cc, int bsl));
      int csh_like_shell __ARGS((void));
      -char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special));
      +char_u *vim_strsave_shellescape __ARGS((char_u *string, int do_special, int do_newline));
      char_u *vim_strsave_up __ARGS((char_u *string));
      char_u *vim_strnsave_up __ARGS((char_u *string, int len));
      void vim_strup __ARGS((char_u *p));
      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Make_amiga.mak
      --- a/src/testdir/Make_amiga.mak Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Make_amiga.mak Sun Dec 01 00:20:51 2013 +0400
      @@ -34,7 +34,8 @@
      test81.out test82.out test83.out test84.out test88.out \
      test89.out test90.out test91.out test92.out test93.out \
      test94.out test95.out test96.out test97.out test98.out \
      - test99.out test100.out test101.out test102.out test103.out
      + test99.out test100.out test101.out test102.out test103.out \
      + test104.out

      .SUFFIXES: .in .out

      @@ -154,3 +155,4 @@
      test101.out: test101.in
      test102.out: test102.in
      test103.out: test103.in
      +test104.out: test104.in
      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Make_dos.mak
      --- a/src/testdir/Make_dos.mak Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Make_dos.mak Sun Dec 01 00:20:51 2013 +0400
      @@ -33,7 +33,7 @@
      test84.out test85.out test86.out test87.out test88.out \
      test89.out test90.out test91.out test92.out test93.out \
      test94.out test95.out test96.out test98.out test99.out \
      - test100.out test101.out test102.out test103.out
      + test100.out test101.out test102.out test103.out test104.out

      SCRIPTS32 = test50.out test70.out

      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Make_ming.mak
      --- a/src/testdir/Make_ming.mak Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Make_ming.mak Sun Dec 01 00:20:51 2013 +0400
      @@ -53,7 +53,7 @@
      test84.out test85.out test86.out test87.out test88.out \
      test89.out test90.out test91.out test92.out test93.out \
      test94.out test95.out test96.out test98.out test99.out \
      - test100out test101.out test102.out test103.out
      + test100out test101.out test102.out test103.out test104.out

      SCRIPTS32 = test50.out test70.out

      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Make_os2.mak
      --- a/src/testdir/Make_os2.mak Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Make_os2.mak Sun Dec 01 00:20:51 2013 +0400
      @@ -35,7 +35,7 @@
      test81.out test82.out test83.out test84.out test88.out \
      test89.out test90.out test91.out test92.out test93.out \
      test94.out test95.out test96.out test98.out test99.out \
      - test100.out test101.out test102.out test103.out
      + test100.out test101.out test102.out test103.out test104.out

      .SUFFIXES: .in .out

      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Make_vms.mms
      --- a/src/testdir/Make_vms.mms Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Make_vms.mms Sun Dec 01 00:20:51 2013 +0400
      @@ -79,7 +79,7 @@
      test82.out test83.out test84.out test88.out test89.out \
      test90.out test91.out test92.out test93.out test94.out \
      test95.out test96.out test97.out test98.out test99.out \
      - test100.out test101.out test102.out test103.out
      + test100.out test101.out test102.out test103.out test104.out

      # Known problems:
      # Test 30: a problem around mac format - unknown reason
      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/Makefile
      --- a/src/testdir/Makefile Thu Nov 28 19:27:30 2013 +0100
      +++ b/src/testdir/Makefile Sun Dec 01 00:20:51 2013 +0400
      @@ -30,7 +30,8 @@
      test84.out test85.out test86.out test87.out test88.out \
      test89.out test90.out test91.out test92.out test93.out \
      test94.out test95.out test96.out test97.out test98.out \
      - test99.out test100.out test101.out test102.out test103.out
      + test99.out test100.out test101.out test102.out test103.out \
      + test104.out

      SCRIPTS_GUI = test16.out

      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/test104.in
      --- /dev/null Thu Jan 01 00:00:00 1970 +0000
      +++ b/src/testdir/test104.in Sun Dec 01 00:20:51 2013 +0400
      @@ -0,0 +1,45 @@
      +Test filename modifiers vim: set ft=vim :
      +
      +STARTTEST
      +:source small.vim
      +:%delete _
      +:set shell=sh
      +:set shellslash
      +:let tab="\t"
      +:command -nargs=1 Put :let expr=<q-args> | $put =expr.tab.strtrans(string(eval(expr)))
      +:let $HOME=fnamemodify('.', ':p:h:h:h')
      +:Put fnamemodify('.', ':p' )[-1:]
      +:Put fnamemodify('.', ':p:h' )[-1:]
      +:Put fnamemodify('test.out', ':p' )[-1:]
      +:Put fnamemodify('test.out', ':.' )
      +:Put fnamemodify('../testdir/a', ':.' )
      +:Put fnamemodify('test.out', ':~' )
      +:Put fnamemodify('../testdir/a', ':~' )
      +:Put fnamemodify('../testdir/a', ':t' )
      +:Put fnamemodify('.', ':p:t' )
      +:Put fnamemodify('test.out', ':p:t' )
      +:Put fnamemodify('test.out', ':p:e' )
      +:Put fnamemodify('test.out', ':p:t:e' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':r' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':r:r' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':r:r:r' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':p:r:r' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':e' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':e:e' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':e:e:e' )
      +:Put fnamemodify('abc.fb2.tar.gz', ':e:e:e:e')
      +:Put fnamemodify('abc.fb2.tar.gz', ':e:e:r' )
      +:Put fnamemodify('abc def', ':S' )
      +:Put fnamemodify('abc" "def', ':S' )
      +:Put fnamemodify('abc"%"def', ':S' )
      +:Put fnamemodify('abc'' ''def', ':S' )
      +:Put fnamemodify('abc''%''def', ':S' )
      +:Put fnamemodify("abc\ndef", ':S' )
      +:set shell=tcsh
      +:Put fnamemodify("abc\ndef", ':S' )
      +:$put ='vim: ts=8'
      +:1 delete _
      +:w! test.out
      +:qa!
      +ENDTEST
      +
      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/test104.ok
      --- /dev/null Thu Jan 01 00:00:00 1970 +0000
      +++ b/src/testdir/test104.ok Sun Dec 01 00:20:51 2013 +0400
      @@ -0,0 +1,29 @@
      +fnamemodify('.', ':p' )[-1:] '/'
      +fnamemodify('.', ':p:h' )[-1:] 'r'
      +fnamemodify('test.out', ':p' )[-1:] 't'
      +fnamemodify('test.out', ':.' ) 'test.out'
      +fnamemodify('../testdir/a', ':.' ) 'a'
      +fnamemodify('test.out', ':~' ) '~/src/testdir/test.out'
      +fnamemodify('../testdir/a', ':~' ) '~/src/testdir/a'
      +fnamemodify('../testdir/a', ':t' ) 'a'
      +fnamemodify('.', ':p:t' ) ''
      +fnamemodify('test.out', ':p:t' ) 'test.out'
      +fnamemodify('test.out', ':p:e' ) 'out'
      +fnamemodify('test.out', ':p:t:e' ) 'out'
      +fnamemodify('abc.fb2.tar.gz', ':r' ) 'abc.fb2.tar'
      +fnamemodify('abc.fb2.tar.gz', ':r:r' ) 'abc.fb2'
      +fnamemodify('abc.fb2.tar.gz', ':r:r:r' ) 'abc'
      +fnamemodify('abc.fb2.tar.gz', ':p:r:r' ) '/home/zyx/a.a/Proj/c/vim-small-patches/src/testdir/abc.fb2'
      +fnamemodify('abc.fb2.tar.gz', ':e' ) 'gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e' ) 'tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:e' ) 'fb2.tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:e:e') 'fb2.tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:r' ) 'tar'
      +fnamemodify('abc def', ':S' ) '''abc def'''
      +fnamemodify('abc" "def', ':S' ) '''abc" "def'''
      +fnamemodify('abc"%"def', ':S' ) '''abc"%"def'''
      +fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
      +fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
      +fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
      +fnamemodify("abc\ndef", ':S' ) '''abc\^@def'''
      +vim: ts=8
      diff -r 486655e0c5a2 -r ce302bfd3622 src/testdir/test104.out
      --- /dev/null Thu Jan 01 00:00:00 1970 +0000
      +++ b/src/testdir/test104.out Sun Dec 01 00:20:51 2013 +0400
      @@ -0,0 +1,29 @@
      +fnamemodify('.', ':p' )[-1:] '/'
      +fnamemodify('.', ':p:h' )[-1:] 'r'
      +fnamemodify('test.out', ':p' )[-1:] 't'
      +fnamemodify('test.out', ':.' ) 'test.out'
      +fnamemodify('../testdir/a', ':.' ) 'a'
      +fnamemodify('test.out', ':~' ) '~/src/testdir/test.out'
      +fnamemodify('../testdir/a', ':~' ) '~/src/testdir/a'
      +fnamemodify('../testdir/a', ':t' ) 'a'
      +fnamemodify('.', ':p:t' ) ''
      +fnamemodify('test.out', ':p:t' ) 'test.out'
      +fnamemodify('test.out', ':p:e' ) 'out'
      +fnamemodify('test.out', ':p:t:e' ) 'out'
      +fnamemodify('abc.fb2.tar.gz', ':r' ) 'abc.fb2.tar'
      +fnamemodify('abc.fb2.tar.gz', ':r:r' ) 'abc.fb2'
      +fnamemodify('abc.fb2.tar.gz', ':r:r:r' ) 'abc'
      +fnamemodify('abc.fb2.tar.gz', ':p:r:r' ) '/home/zyx/a.a/Proj/c/vim-small-patches/src/testdir/abc.fb2'
      +fnamemodify('abc.fb2.tar.gz', ':e' ) 'gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e' ) 'tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:e' ) 'fb2.tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:e:e') 'fb2.tar.gz'
      +fnamemodify('abc.fb2.tar.gz', ':e:e:r' ) 'tar'
      +fnamemodify('abc def', ':S' ) '''abc def'''
      +fnamemodify('abc" "def', ':S' ) '''abc" "def'''
      +fnamemodify('abc"%"def', ':S' ) '''abc"%"def'''
      +fnamemodify('abc'' ''def', ':S' ) '''abc''\'''' ''\''''def'''
      +fnamemodify('abc''%''def', ':S' ) '''abc''\''''%''\''''def'''
      +fnamemodify("abc\ndef", ':S' ) '''abc^@def'''
      +fnamemodify("abc\ndef", ':S' ) '''abc\^@def'''
      +vim: ts=8
      # HG changeset patch
      # User ZyX <kp-pav@...>
      # Date 1386303741 -14400
      # Fri Dec 06 08:22:21 2013 +0400
      # Branch S-modifier
      # Node ID 83480ec3a99cacf604e42ef4cdd7b01ebe6e27a1
      # Parent ce302bfd3622491bed0267bc6fedad0eb7cfc221
      Add examples for %:S and reference or use it in a number of places

      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/cmdline.txt
      --- a/runtime/doc/cmdline.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/cmdline.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -880,8 +880,10 @@
      :gs?pat?sub?
      Substitute all occurrences of "pat" with "sub". Otherwise
      this works like ":s".
      - :S Escape special characters (see |shellescape()|). Must be the
      - last one.
      + :S Escape special characters for use with shell (see
      + |shellescape()|). Must be the last one. Examples: >
      + :!dir <cfile>:S
      + :call system('chmod +w -- ' . expand('%:S'))

      Examples, when the file name is "src/version.c", current dir
      "/home/mool/vim": >
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/eval.txt
      --- a/runtime/doc/eval.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/eval.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -5418,6 +5418,7 @@
      < This results in a directory listing for the file under the
      cursor. Example of use with |system()|: >
      :call system("chmod +w -- " . shellescape(expand("%")))
      +< See also |::S|.


      shiftwidth() *shiftwidth()*
      @@ -5900,14 +5901,16 @@
      passed as stdin to the command. The string is written as-is,
      you need to take care of using the correct line separators
      yourself. Pipes are not used.
      - Note: Use |shellescape()| to escape special characters in a
      - command argument. Newlines in {expr} may cause the command to
      - fail. The characters in 'shellquote' and 'shellxquote' may
      - also cause trouble.
      + Note: Use |shellescape()| or |::S| with |expand()| or
      + |fnamemodify()| to escape special characters in a command
      + argument. Newlines in {expr} may cause the command to fail.
      + The characters in 'shellquote' and 'shellxquote' may also
      + cause trouble.
      This is not to be used for interactive commands.

      The result is a String. Example: >
      :let files = system("ls " . shellescape(expand('%:h')))
      + :let files = system('ls ' . expand('%:h:S'))

      < To make the result more system-independent, the shell output
      is filtered to replace <CR> with <NL> for Macintosh, and
      @@ -7447,7 +7450,7 @@
      for Vim commands, |shellescape()| for |:!| commands.
      Examples: >
      :execute "e " . fnameescape(filename)
      - :execute "!ls " . shellescape(expand('%:h'), 1)
      + :execute "!ls " . shellescape(filename, 1)
      <
      Note: The executed string may be any command-line, but
      you cannot start or end a "while", "for" or "if"
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/map.txt
      --- a/runtime/doc/map.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/map.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -593,7 +593,7 @@
      When you have a mapping that contains an Ex command, you need to put a line
      terminator after it to have it executed. The use of <CR> is recommended for
      this (see |<>|). Example: >
      - :map _ls :!ls -l %<CR>:echo "the end"<CR>
      + :map _ls :!ls -l %:S<CR>:echo "the end"<CR>

      To avoid mapping of the characters you type in insert or Command-line mode,
      type a CTRL-V first. The mapping in Insert mode is disabled if the 'paste'
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/options.txt
      --- a/runtime/doc/options.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/options.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -4757,8 +4757,9 @@
      global or local to buffer |global-local|
      {not in Vi}
      Program to use for the ":make" command. See |:make_makeprg|.
      - This option may contain '%' and '#' characters, which are expanded to
      - the current and alternate file name. |:_%| |:_#|
      + This option may contain '%' and '#' characters (see |:_%| and |:_#|),
      + which are expanded to the current and alternate file name. Use |::S|
      + to escape file names in case they contain special characters.
      Environment variables are expanded |:set_env|. See |option-backslash|
      about including spaces and backslashes.
      Note that a '|' must be escaped twice: once for ":set" and once for
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/quickfix.txt
      --- a/runtime/doc/quickfix.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/quickfix.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -838,7 +838,7 @@
      The alltests.py script seems to be used quite often, that's all.
      Useful values for the 'makeprg' options therefore are:
      setlocal makeprg=./alltests.py " Run a testsuite
      - setlocal makeprg=python % " Run a single testcase
      + setlocal makeprg=python\ %:S " Run a single testcase

      Also see http://vim.sourceforge.net/tip_view.php?tip_id=280.

      @@ -1332,7 +1332,7 @@
      Here is an alternative from Michael F. Lamb for Unix that filters the errors
      first: >
      :setl errorformat=%Z%f:%l:\ %m,%A%p^,%-G%*[^sl]%.%#
      - :setl makeprg=javac\ %\ 2>&1\ \\\|\ vim-javac-filter
      + :setl makeprg=javac\ %:S\ 2>&1\ \\\|\ vim-javac-filter

      You need to put the following in "vim-javac-filter" somewhere in your path
      (e.g., in ~/bin) and make it executable: >
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/usr_30.txt
      --- a/runtime/doc/usr_30.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/usr_30.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -128,7 +128,7 @@
      You can include special Vim keywords in the command specification. The %
      character expands to the name of the current file. So if you execute the
      command: >
      - :set makeprg=make\ %
      + :set makeprg=make\ %:S

      When you are editing main.c, then ":make" executes the following command: >

      @@ -137,7 +137,7 @@
      This is not too useful, so you will refine the command a little and use the :r
      (root) modifier: >

      - :set makeprg=make\ %:r.o
      + :set makeprg=make\ %:r:S.o

      Now the command executed is as follows: >

      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/usr_40.txt
      --- a/runtime/doc/usr_40.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/usr_40.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -209,7 +209,7 @@
      separates the two commands. This also means that a | character can't be used
      inside a map command. To include one, use <Bar> (five characters). Example:
      >
      - :map <F8> :write <Bar> !checkin %<CR>
      + :map <F8> :write <Bar> !checkin %:S<CR>

      The same problem applies to the ":unmap" command, with the addition that you
      have to watch out for trailing white space. These two commands are different:
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/usr_42.txt
      --- a/runtime/doc/usr_42.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/usr_42.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -311,7 +311,7 @@
      item with a bitmap. For example, define a new toolbar item with: >

      :tmenu ToolBar.Compile Compile the current file
      - :amenu ToolBar.Compile :!cc % -o %:r<CR>
      + :amenu ToolBar.Compile :!cc %:S -o %:r:S<CR>

      Now you need to create the icon. For MS-Windows it must be in bitmap format,
      with the name "Compile.bmp". For Unix XPM format is used, the file name is
      diff -r ce302bfd3622 -r 83480ec3a99c runtime/doc/vi_diff.txt
      --- a/runtime/doc/vi_diff.txt Sun Dec 01 00:20:51 2013 +0400
      +++ b/runtime/doc/vi_diff.txt Fri Dec 06 08:22:21 2013 +0400
      @@ -540,7 +540,7 @@
      Added :wnext command. Same as ":write" followed by ":next".

      The ":w!" command always writes, also when the file is write protected. In Vi
      -you would have to do ":!chmod +w %" and ":set noro".
      +you would have to do ":!chmod +w %:S" and ":set noro".

      When 'tildeop' has been set, "~" is an operator (must be followed by a
      movement command).

      --
      --
      You received this message from the "vim_dev" maillist.
      Do not top-post! Type your reply below the text you are replying to.
      For more information, visit http://www.vim.org/maillist.php

      ---
      You received this message because you are subscribed to the Google Groups "vim_dev" group.
      To unsubscribe from this group and stop receiving emails from it, send an email to vim_dev+unsubscribe@....
      For more options, visit https://groups.google.com/groups/opt_out.
    • Show all 4 messages in this topic