2012-12-18 3 views
7

Haskell 프로그램의 경우 경로의 실행 파일 이름이 현재 디렉토리 이름과 동일하다는 것을 알고 있습니다. 지금은과 같이 매핑을 만들려면 :Vim 명령의 현재 디렉토리 사용

:map <leader>rr :!curdir()<cr> 

그러나, 내가 알고있는 유일한 명령의 나에게 대신 디렉토리 이름의 전체 경로를 제공하는 getcwd()이다.

디렉토리 이름 만 추출하는 쉬운 방법이 있습니까?

split(getcwd(), "/")[-1] 
+0

[이 답변보기] (http://stackoverflow.com/a/13908273/546861). – romainl

+0

아래의 답변은 좋은 vimscript 솔루션입니다. 지도가 없다면 = register를 사용하여 이것을 동적으로 평가할 수 있습니다. (예 :'! '와 같은 ex 명령의 일부를 타이핑 한 후 아래의 vimscript 솔루션을 사용하여'CR ='을 입력하십시오.) – darcyparker

+0

@darcyparker @darkyparker 어느 쪽도 좋지 않습니다. 이것은'/'와'\'가 * 양쪽 모두 경로 분리 자라고 가정하는 사람은 모두 잘못되었다. windows도 잘못되었습니다. 어떤 상황에서 경로 구분자가':'이 될지 전혀 모르지만 대부분의 \ * nix 시스템은 파일 이름에'\'및':'를 사용할 수 있습니다 – ZyX

답변

13

사용

fnamemodify(getcwd(), ':t') 

또는

fnamemodify('.', ':p:h:t') 

:

0

당신은 같은 것을 사용할 수 있습니다. :p이 후행 경로 구분 기호를 내 놓으므로 (따라서 :t에 의해 선택된 마지막 경로 구성 요소는 이제 빈 문자열 임) 두 번째 경우에는 :h이 필요합니다.

은 당신의 매핑 사용

:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR> 

이 점을 이동합니다. :map을 사용하지 않아야하는 이유에 대한 설명은 here을 참조하십시오.

+0

경로 구분 기호가 없습니다. – ZyX

+0

@ZyX, 무슨 운영 체제에 대해 이야기하고 있습니까? – taro

+0

Windows : 여기에서는 경로 분리 기호가'\ shellslash' 옵션에 따라'\'또는'/'입니다 AFAIK Macintosh는 때로는 경로 구분 기호가' ',하지만 어떤 경우에 나는 모른다. – ZyX