Vim에게 커스텀 .vimrc를 사용하도록하는 것은 쉽지만 ~ / .vim 대신 다른 경로를 사용하도록 지시하는 방법은 무엇입니까?


15

내가 사용할 수있는 vim -u filename사용하는 filename대신 내 기본의 .vimrc. (사용자 컨텍스트를 전환 할 때이 방법을 사용하고 있습니다 su)를 사용하여 .vimrc 도 수퍼 유저로 실행하지만.

기본적으로 명령 줄 에서 대체 폴더로 Vim 가리킬 수 있는 폴더에 대해서도 같은 작업 을 수행~/.vim 할 수 있습니까?


내가 달성하고 싶은 것

사용자 joe( HOME=/home/joe)와 사용자 root( HOME=/root)로 가정합니다 . 사용자 joe에게는 vim다음과 같은 별칭 세트가 있습니다 (그러나 원래는 $HOME변수를 사용하여 동적으로 설정합니다).

alias vim='vim -p -N -n -i NONE -u "/home/joe/.vimrc"'

그런 다음 사용자 joe는 라인을 따라 무언가를 수행 sudo su -하지만 (마법이 추가됨) .bashrc및를 /home/joe위한 다른 상품 이로드됩니다 root. 사용자 root는 이제 vim위에 표시된 것과 동일한 별칭을 설정했습니다.

문제는 .vimrc다양한 시스템과 다양한 시나리오에서 사용 된다는 것 입니다. 종종 Joe의 계정은이라고도 joe하지만 때로는 local.joe다른 것과 같 거나 다른 값이되어에 대한 값이 다를 수 $HOME있습니다. 따라서 ~/.vim폴더 의 절대 경로를 하드 코딩하는 것은 좋은 생각이 아닙니다. 그러나 위 시나리오에서 사용자 root에게는 /root/.vim기본적으로로드 된 .vimrc( /home/joe/.vimrc)을 통해 존재 하는 폴더가 없습니다 .

내가 원하는 것은-바람직하게는 명령 줄에서 Vim이 /home/joe/.vim시작될 때 아래에서 플러그인 등을 사용하도록 root하는 alias것입니다 (표시 된 것처럼 가정 -다른 경우는 무시할 수 있음). VimScript를 통한 동적 방법이있는 경우 포인터를 제공하십시오. 그러나 $HOME캐치 22로 이어질 같은 변수를 사용 한다고 생각합니다.


당신은 아마 좋은 오래된 일을 할 수 있습니다 ln. 'mv ~ / .vim ~ / .vim-whatever && ln -s ~ / .vim-whatever ~ / .vim`과 같이 동일한 작업을 수행하십시오 .vimrc. 어떤 방법 으로든 다른 방법으로 쉽게 전환 할 수 있도록 모든 것을 bash 별칭으로 마무리하십시오.
jar

답변:


9

해당 디렉토리가 'runtimepath'의 기본 목록에 'rtp'로 약식되어 있기 때문에 Vim은 ~ / .vim을 찾습니다. Vim이 다른 곳을 보도록하려면, 다른 'rtp'값을 완전히 지정하거나 replace () 호출을 사용하여 기본값을 편집해야합니다. 만약 당신이 Vim이 당신의 설정 파일들을 다른 곳에서 먼저 찾길 원한다면, ~ / .vim을 찾는 것도 신경 쓰지 말고, 디렉토리 뒤의 다른 파일을 보지 말아라. 매우 간단합니다.

vim --cmd 'set rtp^=alternate_dir'

보다

:help --cmd
:help :set^=

.vim을 다른 디렉토리로 바꾸려면 조금 더 입력해야합니다.

vim --cmd 'let &rtp = substitute(&rtp, "\.vim", "alternate", "g")'

~/.vim다른 경로로 바꾸려고했지만에 일치하지 않아서 ~내가 가진 것을 게시했습니다.

편집하다

나는 일치하지 않을 수있는 이유 ~'RTP'의 값은 값이의 값으로 얻을 때이다 &rtp보다는의 출력 :set rtp?은이 ~사용자의 홈 디렉토리의 전체 경로 이름으로 확장됩니다. ~결과 가 없습니다 .

다음과 같이 작동합니다.

vim --cmd 'let &rtp = substitute(&rtp, $HOME."/\.vim", "alternate", "g")'

시간을내어 답변 해 주셔서 감사합니다. 이것은 매우 유망한 것으로 보입니다 . 나는 내일이 문제에 대해 고민하고 어떻게 진행되는지 알려줄 것이다. VimScript fu가 더 강력 해 졌으면 좋겠다.하지만 노력하고 있으며 이것이 유망한 방향이다.
0xC0000022L

@ 0xC0000022L : \\~작업 을 보여 주었던 방식 . 배쉬를위한 탈출구라고 생각합니다. 어쨌든 VimScript가을 처리하는 방식이 다르기 때문에 여전히 작동하지 않습니다 ~.
0xC0000022L

나는 그것을 가지고 있다고 생각합니다. 공지 사항이 :set rtp?쇼 "~ / .vim"그러나 그 :echo &rtp팽창 ~의 전체 경로 이름. `vim --cmd 'let & rtp = replacement (& rtp, $ HOME. "/ \. vim", "alternate", "g")'와 같이 작동하는 것 같습니다. 답변을 업데이트하겠습니다.
garyjohn

매우 흥미롭고 미묘한 차이 덕분입니다. 특정 사건에 더 문제가 될 수 있지만 동의 할 것입니다. 이것은 더 많은 것을 얻었습니다.
0xC0000022L

3

선택한 .vimrc에서 런타임 경로를 지정할 수 있습니다.

let &runtimepath=/path/to/specific/vim/folder

당신이 당신의 사람 .vimrc을 사용하는 경우, 당신은 당신의 개인 .vim디렉토리로 설정할 수 있으며 그것은 su일반 계정 으로 작동해야 합니다.


이것은 정확히 명령 행이 아닙니다. 이것을 역동적으로 만들 수있는 방법이 있습니까? 참조, 나는 $HOME내 자신의 계정에서 다음 과 같은 것을 사용해야한다면 그것이 해결 /home/joe되었지만 여전히 루트 로 생각되면 /root아무것도 얻지 못한다고 가정합니다. 이것은 .vimrc플랫폼과 Vim 버전에서 작동하며 절대 경로를 설정하면 완전히 중단됩니다. 하지만 시간을내어 답변 해 주셔서 감사합니다.
0xC0000022L

@ 0xC 명령 행에서 이미 vimrc를 지정하고 있으며 이는 런타임 경로를 지정합니다. vimrc에서는 스크립트를 실행하여 변수를 정의 할 수 있으므로 정확한 결과로 질문을 편집하면 그 방법을 사용할 수 있습니다.
Paul

내 질문을 편집했습니다. 인내 주셔서 감사합니다 :)
0xC0000022L

users .bashrc에서 변수를 설정할 수 있습니까? 예 를 들어, $REALHOME에서 제외 된 sudo reset_env다음이를 기준으로 사용할 수 rtp있습니까?
Paul

하나의 실행 가능한 옵션 처럼 들립니다 . 그러나 이런 식으로 변수를 밀수하는 것이 더 쉽다는 것을 알았습니다.alias sudosu='sudo su -l root -c "REALHOME='\''/home/joe'\'' /bin/bash --rcfile /home/joe/.bashrc"'
0xC0000022L
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.