2013-05-20 4 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> 

아이디어가 있으십니까? 누락 된 ()에서 떨어져

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

답변

3

괄호를 추가합니다. 귀하의 기능도 몇 가지 문제가 있습니다

  • !clear 당신이 정규식 있어야하는데 선도적 인 :
  • '*_spec\.rb' 필요하지 않습니다. 그러나 선두 인 *은 의미가 없습니다. .*_spe.....을 원하십니까? .*_spec\.rb$'
  • %에 직접 전달하는 것이 쉘 명령에 100 % 안전하지 않습니다. (버퍼 이름에 특수 문자 또는 공백이있는 경우). 빌드 shellescape() 함수를 사용할 수 있습니다. 예를 들어, shellescape(@%,1) (명령을 실행하려면 "execute"이 필요합니다.)
  • 맵핑을 만들 때 특정 버퍼 (<buffer>)의 특정 파일 유형 (autocmd를 통해)에 대해서만 맵핑을 생성하려면 "nore"를 고려하십시오.
4

을지도 명령에서 : 함수 호출에

+0

+1 'nnoremap '에 +1. 나는'filetype'이'autocmd BufNewFile, BufRead * _spec.rb set filetype = cucumber'와 같이 자동 명령을 사용하여'cucubmer' 또는'rspec'에 정확하게 설정되지 않았 으면 제안합니다. 'set filetype? '을 통해 파일 형식을 확인하십시오. 파일 형식을 올바르게 설정하면 구문 강조 표시 외에 여러 가지 이점이 있습니다. 또한': make'에 접근 할 수 있습니다. 필요할 경우': compiler cucumber' 또는': compiler rspec'을 통해 직접 컴파일러를 설정할 수 있습니다. 'quickfix'리스트를 사용하여': make' 결과로 이동하는 방법을 배우는 것이 좋습니다. –

+0

나는 명령을 완전히 다시 작성했지만 필자는 확실히 파일 유형별 로딩을 살펴볼 것이다. – HaaR