2013-05-20 3 views
1

В настоящее время мой vimrc имеет следующие ключевые отображения:ВИМ функции внешнего вызов

map <leader>m :w\|!clear && rspec --drb %<cr> 
map <leader>k :w\|!clear && rspec --drb %:<C-r>=line('.')<CR><cr> 
map <leader>c :w\|:!clear && cucumber --drb -r ./features %<cr> 
map <leader>x :w\|!clear && cucumber --drb -r ./features %:<C-r>=line('.')<CR><cr> 

Однако я хочу, чтобы объединить их в (два) функции, которые имеют ту же раскладку для линии против файла, я попытался следующим но Vim жалуется на отсутствующие круглые скобки:

function! TestCurrentLine() 
    let spec = '*_spec\.rb' 
    if !(expand("%") =~ spec) 
    :!clear && cucumber --drb -r ./features %:<C-r>=line('.')<CR> 
    else 
    :!clear && rspec --drb %:<C-r>=line('.')<CR> 
    end 
endfunction 

function! TestCurrentFile() 
    let spec = '*_spec\.rb' 
    if !(expand("%") =~ spec) 
    :!clear && cucumber --drb -r ./features % 
    else 
    :!clear && rspec --drb % 
    end 
endfunction 

map <leader>m :w\|call TestCurrentFile<cr> 
map <leader>k :w\|call TestCurrentLine<cr> 

Любые идеи?

ответ

3

Добавить скобки вашего вызова функции:

map <leader>m :w\|call TestCurrentFile()<cr> 
map <leader>k :w\|call TestCurrentLine()<cr> 
4

помимо пропущенного () в вашей команде карты. Ваши функции имеют некоторые проблемы тоже:

  • !clear вам не нужен ведущий :
  • '*_spec\.rb' должен быть регулярным выражением. но ведущий * не имеет никакого смысла. вы хотите иметь .*_spe.....? также лучше с .*_spec\.rb$'
  • передать % прямо в вашу команду оболочки не на 100% безопасно. (если ваше имя буфера имеет специальные символы или пробелы). вы можете использовать встроенную функцию shellescape(). Например, shellescape(@%,1) (тогда вам понадобится "execute" для выполнения команды)
  • считают создание этих сопоставлений только для определенного типа файла (через autocmd) в определенном буфере (<buffer>), также при создании сопоставления учитывайте «nore».
+0

+1 для 'nnoremap '. Я также хотел бы предложить, если 'filetype' не установлен правильно для' cucubmer' или 'rspec' для использования автокоманды, подобного этому' autocmd BufNewFile, BufRead * _spec.rb set filetype = cucumber'. Проверьте тип файла с помощью 'set filetype?'. Правильная установка типа файла даст больше, чем просто подсветку синтаксиса. Он также даст вам доступ к ': make'. Вы можете установить компилятор напрямую через ': compiler cucumber' или': compiler rspec', если вам нужно. Я рекомендую учиться использовать список 'quickfix' для перемещения по результатам': make'. –

+0

Я уже полностью переписал команду, но я обязательно посмотрю на конкретную загрузку файла, спасибо. – HaaR

Смежные вопросы