Завершение файла при отображении команд в VIM - PullRequest
3 голосов
/ 25 января 2012

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

Типичный пример:

:map <leader>f :w<cr>:! bundle exec cucumber features/account/sign_in.feature:41<cr>

Я хочу файл features/account/sign_in.featureдля автозаполнения из текущего каталога.

Это должно просто сохранить текущий файл и оболочку на <leader>f для запуска команды.

Это позволяет мне легко работать накусок кода, не задумываясь о переходе к определенному файлу и его запуске.

Проблема в том, что создание такой привязки является громоздким и подверженным ошибкам .

VIM не позволяет завершать имя файла при отображении .Также использование % совершенно другое (я хочу сопоставить файл статически ).

Как лучше это сделать?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 25 января 2012

Несмотря на то, что я думаю, что ваш вопрос должен быть прояснен, вот несколько подсказок:

:nnoremap <leader>f :w<bar>!exec "bundle exec cucumber " . expand('%') . ":" . line('.')<CR>

Правильно сохранит и вставит текущее имя файла / номер строки в команду

Также,вам нужно знать о параметре autowrite:

:se autowrite

Наконец, я обычно использую makeprg для этой цели:

:let &makeprg="bundle exec cucumber %"

Это дает дополнительное преимущество:работа с командами быстрого исправления (:copen, :colder, :cnewer) и (при наличии правильного makef) также переход к ошибочным строкам

1 голос
/ 25 января 2012

Я не знаю ответа, но на вашем месте я бы использовал cabbr:

:cabbr fas features/account/sign_in.features:

или что-то в этом роде.Это не автозаполнение, но оно, безусловно, уменьшает необходимое вам количество нажатий клавиш.

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

Обновление: да, вы можете настроить пользовательскую команду.См. :help user-command

Что-то вроде этого должно помочь вам начать:

command -complete=file_in_path -nargs=1 Map call CreateMap(expand('<args>'))

function CreateMap(filename)
    exec 'map <leader>f :w<cr>:! bundle exec cucumber ' . a:filename . ':41<cr>'
endfun

После того, как вы это сделаете, убедитесь, что в настройке вашего пути указан текущий каталог ".", Или если выхочу заставить его искать рекурсивно "./**".Затем вы можете использовать пользовательскую команду Map следующим образом:

:Map fea<tab>ac<tab>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...