2012-01-01 3 views
0

안녕하세요,이 question 여기 stackoverflow에서 본 적이 있지만 내 질문은 약간 다릅니다. 나는 다음과 같은지도를 사용하는 경우vim map long GNU 화면 명령

나는 편리한지도 정의 : 이것은 정말 긴 줄에 becames

map <Leader>r :!screen -p run_and_test -X stuff '(cd /really/long/folder/data/gen_prob; epy gen_data.py)^V^V^M'<CR><CR> 

을, 나는 선으로이 분할하는 것을 선호합니다. 함께 시도 :

let folder = '/really/long/folder/gen_prob' 
let cmd = "'(cd " . folder . "; python gen_data.py)^V^V^M'" 
map <Leader>r :execute "!screen -p run_and_test -X stuff" . cmd <cr><cr> 

하지만 작동하지 않습니다.

몇 줄에 걸쳐이 초기 매핑을 분할하는 방법에 대한 아이디어가 있습니까?

편집 : 최종 해결책은 내가 구현 :

function! Execute_screen() 
    let folder = '/really/long/folder/gen_prob' 
    let cmd = "'(cd " . folder . "; python gen_data.py)\r'" 
    execute "!screen -p run_and_test -X stuff " . cmd 
endfunction 

noremap <Leader>r :call Execute_screen()<cr><cr> 

답변

2

내가

  1. <C-v> 제외하고 여기에 많은 문제가 표시되지 않습니다 AFAIK 이러한 문자가 화면 내부에 따라서 당신 프로그램, :map위한 것이 아닙니다 2 개를 제거 할 수 있습니다 ^V.
  2. stuff 뒤에 공백을 잊어 버렸습니다.

하지만 몇 가지 사소한 문제가 있습니다

  1. 당신이 nore를 생략하는 이유를 모르는 경우 :map를 사용하지 마십시오. 이 경우 :nnoremap이 필요하지만 nore 버전은 :map입니다. :noremap입니다. 비 - nore 명령은 맵핑 수가 많아 질수록 새로운 맵핑이 이전 맵을 뒤틀어 버릴 확률이 높아 지므로 nore 명령을 사용하여 명령이 수행되지 않으므로 명령이 잘못되었습니다.
  2. 텍스트 파일에서 원시 제어 문자를 갖는 나쁜 (가 정상적으로 cat 볼 수없는 다양한 유틸리티에 의해 바이너리 파일로 취급 할 수있다), 그래서 당신은이 목적을 위해 (^M이 곳 \r 또는 \<C-m>를 사용 \n)도 사용할 수 있습니다.
+0

감사합니다. ZyX, 귀하의 답변을 사용하여 함수에서 구현했습니다. 나는 또한 내 vimrc 파일을 살펴보고 모든 noremap 맵을 대체했다. – skeept