2017-12-12 4 views
1

커널 커널 코드를 편집하고 있는데 커널 소스 코드를 편집 할 때 vim에 :set noexptab을 설정하는 것을 잊어 버릴 때가 거의 있습니다.vim에서 액세스하고있는 현재 폴더를 기반으로 조건부 함수를 만드는 방법은 무엇입니까?

내 기본값 인 vimrc은 탭을 공백으로 확장하지만 현재 커널 소스 코드를 편집하고 있는지 여부를 구분할 수있는 함수를 갖고 싶습니다. 따라서 expandtab을 적절히 설정하십시오.

기본적으로 커널 소스 내가 정력을 열고 루트 디렉토리입니다 리눅스 x.x.x 디렉토리에 있습니다. 나는 이것이 시작점이라고 생각한다.

+3

관련 : HTTP : // 정력. wikia.com/wiki/Project_specific_settings – rgoliveira

+0

중복 된 https://stackoverflow.com/q/456792/15934? –

+0

@LucHermitte 아마, 잘 모르겠습니다. 프로젝트와 관련이 없기 때문에 실제로는 똑같은 유스 케이스는 아니지만 일종의 경로입니다. 그러나 모든 사람들이 정보를 추출 할 수 있어야한다고 언급 한 게시물에 너무 가깝습니다. 나는 내 대답을 삭제하고 sth의 게시물에 댓글을 달거나 거기에 그대로 둔다. 그러나 그것은 확실히 다른 제목을 가진이 사이트에 더 유용 할 수 있습니다. –

답변

4

프로젝트 별 설정을 처리 할 수있는 많은 플러그인과 다른 방법이 있습니다. 나는 당신의 vimrc을 클러스터링하지 않기 때문에 보통 플러그인 접근법을 강력하게 지원할 것입니다. 그러나 귀하의 경우에는 프로젝트 설정 파일을 모든 새 커널 폴더에 복사해야합니다. 이 경우 내가 다음 자동 명령 사용합니다 그래서 :

autocmd BufNewFile,BufRead /path/to/folder/linux-*/* set noexpandtab 
+0

그게 내가 필요했던 것, 덕분에 @Doktor – phyloflash

0

을 나는 종종 (더 일반적으로 클라이언트 당) 프로젝트 당 설정의 번호를 가지고 그래서 내가 당 클라이언트 설정을 지정하는 일반화 된 방법을 가지고하는 것이 유용합니다. 나는 local.vimrc라는 파일 (또는 더 일반적으로, <client-name>.vimrc 이름과 심볼릭 링크) 그것이 내가이 마법을하자 다음에 노력하고있어 무엇이든 프로젝트의 루트에 ...

function! LoadLocalVimrc(filename) 
    let l:filepath = fnamemodify(a:filename, ':h') 
    let l:file = findfile("local.vimrc", l:filepath . ";/") 
    if l:file != '' 
     let l:file = fnamemodify(l:file, ":p") 
     execute "source" l:file 
     execute "nnoremap <buffer> <F8> :$tabe " . s:this_file . "<CR>:sp " . l:file . "<CR>" 
    endif 
endfunction 

autocmd BufEnter * call LoadLocalVimrc(expand("<afile>")) 

그런 다음 local.vimrc 사용을 만들 map <buffer> ...setlocal을 사용하여 맵핑 및 설정을 사용하는 버퍼에 로컬로 유지합니다 (다른 클라이언트의 파일을 다른 탭에로드하는 경우가 있음).

(즉, 코드에서 나는 내 vimrc에 새로운 탭에서 local.vimrc를 엽니 다 F8를 매핑하고있어 위, s:this_fileexpand("<sfile>")으로 다른 곳에서 캡처됩니다.)

관련 문제