Подивимось. У мене gvim
працює, і я хочу відкрити файл, дотримуючись autocmd
s ( який виключає--remote-tab
).
Тепер я знаю, що можу (в основному, з певним виправленням):
gvim --remote-send ":tabe my_file<CR>"
яка працює. Але якщо у файлі є пробіли або дивні символи, я повинен зробити наступне:
gvim --remote-send ":tabe my\\ file<CR>"
(подвійний \\
тому, що один з них з'їдається шкаралупою; це еквівалентно ручному типу
`:tabe my\ file`
в vim
і працює). Тепер я можу знайти спосіб створити цей рядок у оболонці чи будь-що інше, але я сподівався, що зможу "глобально процитувати" рядок у команді ": tabe", як
gvim --remote-send ":tabe 'my file'<CR>"
або
gvim --remote-send ":tabe \"my file\"<CR>"
--- це рівнозначно запису безпосередньо в командному рядку vim :tabe "my file"
; здається, це не працює. Я можу чітко процитувати весь простір у рядку з оболонкою, роблячи щось подібне
# <ESC> because the gvim instance can be in a mode different from normal
# the double CR: do not ask.
# the argument MUST be a full path
file="$(readlink -f "$@")"
fileq="$(echo "$file" | awk '{gsub(/ /,"\\\ ")}1')" # quote spaces FIXME add other chars
exec gvim 2>/dev/null --servername $desktop --remote-send "<ESC>:tabe $fileq <CR><CR>"
але він працює лише для пробілів, а не для інших спеціальних символів, таких як вкладки та "
(ні нові рядки, але якщо у назвах файлів є нові рядки, ви цього заслуговуєте!).
Питання :
Незалежно від конкретної оболонки, з якою я матиму справу після :-), чи є спосіб, коли безпосередньо набираєтеtabe:
рядок vim, глобально цитувати ім’я файлу, не збираючись цитувати "дивні" символи по черзі?
gvim --remote-send ":tabe 'f s.txt'<CR>"
не працювало для мене, ні писати :tabe 'f s.txt'
vim, я зрозумів E77: Too many files names
.
gvim --servername $desktop --remote-send "<ESC>:tabe ${file// /\\ }<CR>"
було б простіше?
shellescape
б функція корисною?
:edit
(та його варіанти) не приймається ім'я файлу, що цитується. Усі спеціальні символи потрібно уникати індивідуально. Отже, :edit "foo bar.txt"
не буде працювати; вам потрібно :edit foo\ bar.txt
. Однак, щось на кшталт :execute 'tabedit' escape('$file', ' ')
може бути на правильному шляху.
gvim --remote-send ':tabe foo\ bar.txt<CR>'
працював на мене на bash і zsh. І цитати, здається, теж мають значення. Якщо я використовую"
внутрішньо, це не спрацювало, але'
зробило:gvim --remote-send ":tabe 'foo bar.txt'<CR>"