Откройте файл под курсором с разрывом строки в vim

Я хочу настроить сопоставление клавиш, чтобы открыть имя файла с абсолютным путем, выделенное в визуальном режиме, которое может иметь разрыв строки посередине.

Большинство файлов, которые у меня есть, отформатированы следующим образом, и я хотел бы выделить путь между одинарными кавычками и открыть этот файл (для любопытных отформатирован для MSC NASTRAN):

INCLUDE '/directory/directory/directory/directory/
directory/filename'

Что сложно, так это то, что выдергивание всего раздела приводит к появлению символа новой строки ^M в середине пути. Мой подход был следующим (проходя через команду :map ниже):

  1. Выдернуть путь из выделенного (сохранено в @0)
  2. Создайте новый регистр @f, где пустая строка была заменена символом новой строки из @0
  3. Путь к открытому файлу в @f

    map <F8> y \| :let @f=substitute(strtrans(@0),'\^@','','g') \| :e <C-R>f<CR>
    

Проблема в том, что если он запускается во второй раз с новым путем к файлу, vim использует предыдущий путь, хранящийся в регистре @f, перед обновлением @f.

Любые идеи, чтобы исправить это или другой подход? Очистка реестра с помощью :let @f='' в конце тоже не сработала.

У меня также нет прав администратора, так как это рабочий компьютер, поэтому я не думаю, что смогу устанавливать плагины, но я все еще новичок в vim, любые мысли приветствуются. Спасибо!


person cjtytler    schedule 06.12.2013    source источник


Ответы (1)


Вспомогательный регистр не нужен; используйте :exec для вычисления выражения и использования результата в качестве аргумента команды. Я не уверен, выгодно ли strtrans(), но замена \n напрямую работает. В любом случае обязательно используйте fnameescape(). Кроме того, используйте noremap, чтобы избежать рекурсивных сопоставлений, если они вам не нужны. Если это конкретное сопоставление предназначено только для визуального режима, xnoremap даже лучше.

xnoremap <F8> y \| :exec "e" fnameescape(substitute(getreg('"'),'\n','','g'))<CR>
person Nikita Kouevda    schedule 06.12.2013