Переменная x содержит
1 # "~/Session.vim" line 5
2 "~/.vimrc" line 34
3 ".vim/vscripts/makesess.vim" line 4
4 "~/Documents/vimcht" line 62
5 "~/.fluxbox/startup" line 5
6 "~/Documents/Notes" line 2604
7 "~/Documents/bashcht" line 21
8 %a "junk" line 10
По моему прочтению: h / [], в частности "... Без" _ "или" \ n "коллекция не соответствует концу строки ...", тогда
:let y = ""
:let y = substitute(x, '[.]*\("[.]*"\)[.]*', '\1', "g")
должен был сделать работу. Но это доставлено
"junk"
так же, как и без [].
Я тогда попробовал
:let y = ""
:let y = substitute(x, '[^\n]*\("[^\n]*"\)[^\n]*', '\1', "g")
и получил точно такой же результат.
Очевидно, что vim не использует действительный символ новой строки внутри себя, ни для переменных, ни для регистров. Поэтому он рассматривает переменную как одну строку. Что привело меня к этому решению
:let y = substitute(x, '[^"]*\("[^"]\+"\)[^"]*', ':tabe \1\n', 'g')
с y
:tabe "~/Session.vim"
:tabe "~/.vimrc"
:tabe ".vim/vscripts/makesess.vim"
:tabe "~/Documents/vimcht"
:tabe "~/.fluxbox/startup"
:tabe "~/Documents/Notes"
:tabe "~/Documents/bashcht"
:tabe "junk"
по желанию для формирования моего файла Session.vim