67401


## やりたいこと

vimでsubstitute関数を使い，文頭からはじめの`,`までを削除したいです．  
（例えば，`WIP,$HOME/Desktop/WIP`という文字列を`$HOME/Desktop/WIP`に変換したい．）

## うまくいかないこと

Vimを起動した直後に次のようなコマンドを打つと，期待しない動きになります．

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", "^.\{-1,},", "", "")
    WIP,HOME/Desktop/WIP
    
[/code]

特定の文字列を前提とした，次のような例は動きます．

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", "^WIP,", "", "")
    HOME/Desktop/WIP
    :echo substitute("WIP,HOME/Desktop/WIP", "^W.P,", "", "")
    HOME/Desktop/WIP
    
[/code]

以下は他に試したが期待しない動きになったパターンです．

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", "^.\{-},", "", "")
    WIP,HOME/Desktop/WIP
    :echo substitute("WIP,HOME/Desktop/WIP", "^.\+,", "", "")
    WIP,HOME/Desktop/WIP
    :echo substitute("WIP,HOME/Desktop/WIP", "^.{-},", "", "")
    WIP,HOME/Desktop/WIP
    :echo substitute("WIP,HOME/Desktop/WIP", "^.+,", "", "")
    WIP,HOME/Desktop/WIP
    
[/code]

一応次のパターンであれば動きましたが，「1文字以上+`,`」ではありません．

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", "^.*,", "", "")
    HOME/Desktop/WIP
    
[/code]

どうも`\`が入ると繰り返しのパターンがうまく認識されないように見えます．

「行頭から1文字以上の任意の複数文字列+`,`」を削除するための正規表現として，有効な書き方を教えてください．

## 環境

[code]

    $ vim --version
    VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Mar 25 2018 03:02:16)
    macOS version
    Included patches: 1-1633
    Compiled by travis@Traviss-Mac-913.local
    Huge version with MacVim GUI.  Features included (+) or not (-):
    +acl               +file_in_path      -mouse_jsbterm     +tag_binary
    +arabic            +find_in_path      +mouse_netterm     +tag_old_static
    +autocmd           +float             +mouse_sgr         -tag_any_white
    -autoservername    +folding           -mouse_sysmouse    -tcl
    +balloon_eval      -footer            +mouse_urxvt       +termguicolors
    +balloon_eval_term +fork()            +mouse_xterm       +terminal
    +browse            +fullscreen        +multi_byte        +terminfo
    ++builtin_terms    +gettext           +multi_lang        +termresponse
    +byte_offset       +guess_encode      -mzscheme          +textobjects
    +channel           -hangul_input      +netbeans_intg     +timers
    +cindent           +iconv             +num64             +title
    +clientserver      +insert_expand     +odbeditor         +toolbar
    +clipboard         +job               +packages          +transparency
    +cmdline_compl     +jumplist          +path_extra        +user_commands
    +cmdline_hist      +kaoriya           +perl/dyn          +vertsplit
    +cmdline_info      +keymap            +persistent_undo   +virtualedit
    +comments          +lambda            +postscript        +visual
    +conceal           +langmap           +printer           +visualextra
    +cryptv            +libcall           +profile           +viminfo
    +cscope            +linebreak         +python/dyn        +vreplace
    +cursorbind        +lispindent        +python3/dyn       +wildignore
    +cursorshape       +listcmds          +quickfix          +wildmenu
    +dialog_con_gui    +localmap          +reltime           +windows
    +diff              +lua/dyn           +rightleft         +writebackup
    +digraphs          +menu              +ruby/dyn          -X11
    +dnd               +migemo            +scrollbind        -xfontset
    -ebcdic            +mksession         +signs             +xim
    +emacs_tags        +modify_fname      +smartindent       -xpm
    +eval              +mouse             +startuptime       -xsmp
    +ex_extra          +mouseshape        +statusline        -xterm_clipboard
    +extra_search      +mouse_dec         -sun_workshop      -xterm_save
    +farsi             -mouse_gpm         +syntax
       system vimrc file: "$VIM/vimrc"
         user vimrc file: "$HOME/.vimrc"
     2nd user vimrc file: "~/.vim/vimrc"
          user exrc file: "$HOME/.exrc"
      system gvimrc file: "$VIM/gvimrc"
        user gvimrc file: "$HOME/.gvimrc"
    2nd user gvimrc file: "~/.vim/gvimrc"
           defaults file: "$VIMRUNTIME/defaults.vim"
        system menu file: "$VIMRUNTIME/menu.vim"
      fall-back for $VIM: "
    /usr/local/Cellar/macvim-kaoriya/HEAD-db0a1ad/MacVim.app/Contents/Resources/vim
    "
    Compilation: /usr/bin/clang -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_MACVIM -Wall -Wno-unknown-pragmas -pipe  -I/usr/local/Cellar/cmigemo-mk/HEAD-5c014a8/include -I/usr/local/Cellar/gettext/0.19.8.1/include -DMACOS_X -DMACOS_X_DARWIN  -mmacosx-version-min=10.9 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
    Linking: /usr/bin/clang   -L. -L/usr/local/lib -L. -L/usr/local/lib -mmacosx-version-min=10.9 -headerpad_max_install_names -L/usr/local/Cellar/gettext/0.19.8.1/lib -L/usr/local/lib -o Vim -framework Cocoa -framework Carbon       -lm  -lncurses -liconv -lintl -lmigemo -framework AppKit  -pagezero_size 10000 -image_base 100000000   -fstack-protector  -L/System/Library/Perl/5.16/darwin-thread-multi-2level/CORE
    
[/code]


CC BY-SA 4.0
2020-06-07T15:30:37.127
67400
2020-06-07T17:00:07.993
2020-06-07T16:24:57.807
3060
26942
question
正規表現 vim
vimのsubstitute関数で先頭からカンマまでを削除したい


ダブルクォートにバックスラッシュをいれると特殊文字を含む文字列として認識されてしまうからですね。  
正規表現の文字列をシングルクォートで括るとよいかとおもいます。

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", '^.\+,', "", "")
    
[/code]

もし、ダブルクォートで括りたい場合にはバックスラッシュを2回書く必要があります。

[code]

    :echo substitute("WIP,HOME/Desktop/WIP", "^.\\+,", "", "")
    
[/code]


CC BY-SA 4.0
2020-06-07T15:51:18.197
67401
2020-06-07T17:00:07.993
2020-06-07T17:00:07.993
15102
15102
67400
answer