.vimrc 및 플러그인 용 GitHub


21

많은 사람들이 GitHub에 .vimrc를 저장하여 새 컴퓨터에서 작업하기가 더 쉬워 졌음을 알았습니다. 그러나 플러그인을 포함하는 것은 문제가 있습니다. 사용하는 플러그인은 이미 자식 리포지토리이기 때문입니다. .vimrc와 설치 될 수있는 플러그인을 모두 추적하는 저장소를 어떻게 작성합니까?


나는 이것이 너무 의견 지향적이라고 생각한다. 객관적인 "최고"는없고 각각의 장단점이있는 좋은 옵션이 많이 있습니다. 또한 중첩 리포지토리에 대한 비트는 "git 사용"범주에 대한 질문을 더 많이 가져오고 vim에 대해서는 덜 묻습니다. 아마도 github에 구성을 저장하려고 할 때 vim 또는 vim 플러그인과 관련된 특정 문제에 집중했다면?

3
원하는 경우 최선을 다해 편집 할 수 있습니다 . 내 의도는 "어떻게하면 되나요?" 문제에 대해 내가 생각하는 방식이 이상적이지 않을 것이라는 점을 인정하면서 질문.
Tom

그것은 도움이 될 수 있지만, 그것은 단지 "사물 목록"질문으로 만들 수 있습니다 (다시 말해서, 이것을 효과적으로 수행하는 많은 다른 방법들이 있습니다). 우리가 이런 종류의 질문을 어떻게 다루어야하는지에 대한 토론에 기여하고 싶다면 현재 그러한 질문 에 관한 메타 에 관한 주제가 있습니다.

2
편집했습니다. "어떻게해야합니까?"라는 질문을보다 명확하게 해주 었으면합니다.
Tom

1
neobundle과 같은 플러그인 관리자를 사용하십시오.
Philip

답변:


18

리포지토리 내 리포지토리를 처리하는 방법은 git과 함께 진행중인 질문입니다. Git의 서브 모듈 은 상황을 해결하는 한 가지 방법으로, 추적하기 위해 약간의 복잡성을 추가합니다. 자식 사이트는 서브 모듈을 소개합니다 .

기본 아이디어는 저장소의 경로와 관련된 다른 자식 저장소에 대한 참조를 유지하는 것입니다. 이 참조는 .gitmodules저장소의 루트 에있는 파일 에 저장됩니다 (git에서 관리하므로 혼자 두십시오). 하위 모듈이있는 저장소를 복제 할 때 복잡성이 발생합니다 git submodule init. .gitmodules파일을 명시 적 으로 작성 git submodule update하고 하위 모듈을 복제해야합니다.


다음 은 서브 모듈을 사용하여 dotfiles 저장소에 새 vim 플러그인을 추가하는 방법에 대한 연습입니다 ( ~/.vim/이 repo의 별칭을 가짐 .vim/).

$ cd dotfiles/
$ git submodule add https://github.com/elixir-lang/vim-elixir.git .vim/bundle/vim-elixir

submodule add, A는 git status당신이 수정 된 (또는 생성) 한 것을 보여 것 .gitmodules같은 뭔가, 파일 :

[submodule ".vim/bundle/vim-elixir"]
    path = .vim/bundle/vim-elixir
    url = https://github.com/elixir-lang/vim-elixir.git

또한 .vim/bundle/vim-elixir새 파일로 표시되어야 합니다. Git은이 경로를 지금 특별하게 취급합니다. 파일 시스템의 일반 디렉토리 (vim은 정상적으로로드 함)이지만 git diff저장소에서 특정 커밋으로 처리합니다. 해당 경로 (예 :)의 diff 또는 로그를 git log -1 -u .vim/bundle/vim-elixir볼 때 git은 다음과 같이 한 줄 문자열로 표시합니다.

Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e

플러그인의 최신 버전으로 업데이트하는 것은 서브 모듈의 저장소로 가서 새로운 커밋을 체크 아웃 한 후이를 저장소에 커밋 하는 것에 해당 합니다.

$ cd .vim/bundle/vim-elixir
$ git remote -v            # note: the submodule repo's origin, not my repo's
origin  https://github.com/elixir-lang/vim-elixir.git (fetch)
origin  https://github.com/elixir-lang/vim-elixir.git (push)

$ git pull
# ...

$ cd -     # back to my repository's root
$ git status
# ...
    modified:   .vim/bundle/vim-elixir (new commits)

$ git diff .vim/bundle/vim-elixir
# ...
-Subproject commit 2d59d1d52a9bcf9342d42fa7d6b59e6a1aaa7b9e
+Subproject commit d59784e7afbd0d55c501e40c43b57cbe6f6e04c2

$ git commit -m "update vim-elixir" .vim/bundle/vim-elixir

고마워, 내가 찾던 것 같아!
Tom

아, 나는 내 시간을 편집 한 이후로 귀하의 답변이 게시 된 것을 보지 못했습니다.
muru

23

VCS에 플러그인을 저장할 필요는 없습니다. Vim 패키지 관리자를 사용할 수도 있습니다. 어제부터 vim-plug를 사용합니다 .

vimrc에서 플러그인을 다음과 같이 정의 할 수 있습니다.

call plug#begin('~/.vim/plugged')

Plug 'embear/vim-localvimrc'
Plug 'kchmck/vim-coffee-script'
" ... etc

call plug#end()

그런 다음 Vim을 다시 시작한 후 다음을 사용하여 플러그인을 설치하십시오.

:PlugInstall

또는 전화 하기 전에 FAQ 에서 vimrc 파일 로이 스 니펫을 추가 할 수 있습니다 plug#begin().

if empty(glob('~/.vim/autoload/plug.vim'))
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
  autocmd VimEnter * PlugInstall
endif

플러그인이에 배치됩니다 ~/.vim/plugged. 이 파일을 VCS에 보관할 필요는 없습니다 . 다른 시스템에서이 vimrc를 사용하려면 :PlugInstall해당 시스템을 호출하십시오 .

플러그인을 제거하려면 vimrc 파일에서 플러그인을 제거하고 다음을 실행하십시오.

:PlugClean

vim-plug는 Vim 스크립트 웹 사이트에서 스크립트 설치를 지원하지 않지만 해당 스크립트는 GitHub에 미러링 되므로 그렇게 할 필요가 없습니다.

더 쉬운 플러그인 업데이트 및 더 나은 성능을위한 주문형로드와 같은 추가 이점도 있습니다. 또한 vimrc 파일과 함께 배포하는 플러그인의 라이센스 조건을 위반할 위험이 없습니다.

참조 :


5

vimrc를 github에 저장하고 플러그인을 저장소의 하위 모듈로 저장합니다.

readme.md 파일에서 리포지토리를 가져온 다음 설정 스크립트를 실행하는 하나의 라이너를 넣습니다.이 방법으로 한 줄을 편집기에 복사하여 모든 것을 설정할 수 있습니다. 그것은 단지 vim (그러나 별로는 아닙니다)보다 조금 더합니다.

https://github.com/Loki-Astari/UnixConfig

그것을 사용하려면 :

cd
git clone git@github.com:Loki-Astari/UnixConfig.git ~/.config
cd .config
git submodule init
git submodule update
chmod +x init
./init
cd

추신. 어떤 조언도 할 의향이있다

참고 : 내가 가장 좋아하는 부분은 git도 설정하고 git의 diff 도구로 vim을 사용하도록 설정한다는 것입니다. Vimdiff는 최고의 diff 도구입니다.


5

병원체를 고수하고 싶다면 Git 서브 모듈 을 사용하는 것이 좋습니다 . 서브 모듈을 추가하면 git은 다른 리포지토리에서 서브 모듈을 인식하고 그 내용을 그대로 둡니다 (변경되지 않은 경우에는 수행 할 때 추적되지 않은 내용이있는 것으로 git status표시됨). 모든 Github 기반 플러그인이에 bundle/있다면 하위 모듈로 추가하는 것은 좋은 쉘을 가진 상당히 간단한 작업입니다.

for f in bundle/*/ 
do 
    git submodule add $(awk '/url =/{print $3}' "$f/.git/config") "$f"
done

vimrc repo 에서 서브 모듈이 어떻게 나타나는지 살펴볼 수 있습니다 .


서브 모듈에 파일을 추가하거나 리포지토리에 영향을 미치지 않는 일부 변경을 수행해도 git status커밋되지 않은 변경 또는 추적되지 않은 파일이있는 서브 모듈에 대해 여전히 불평합니다. 파일 ignore = dirty의 하위 모듈 구성에 추가 하여 git이 이러한 변경 사항을 무시하도록 할 수 있습니다 .gitmodules. 예를 들면 다음과 같습니다.

[submodule "bundle/LaTeX-Box"]
    path = bundle/syntastic
    url = https://github.com/scrooloose/syntastic.git
    ignore = dirty

하위 모듈의 한 가지 장점은 하위 모듈의 개정판이 git 저장소에 추가되어 git init특정 개정판을 자동으로 체크 아웃하는 것입니다. 그것을 버리고 git에게 파일에 ignore = all구성 을 추가 하여 하위 모듈을 추가하면 무시 하도록 할 수 .gitmodules있습니다. 예를 들면 다음과 같습니다.

[submodule "bundle/LaTeX-Box"]
    path = bundle/LaTeX-Box
    url = https://github.com/LaTeX-Box-Team/LaTeX-Box.git
    ignore = all

마지막으로 하나의 명령으로 모두 업데이트합니다!

git submodule foreach git pull

주의 사항 : 저는 서브 모듈을 처음 사용합니다. 나는 그들이 어떻게 행동하는지 잘 모르겠습니다.


vim-pandemic 은 서브 모듈을 사용할 필요없이 병원체를 향상시키는 또 다른 방법입니다. Pandemic은 Pathogen이 런타임 경로를 처리하도록하는 원격 리포지토리를 처리합니다. 즉, 두 가지 도구가 필요하지만 개별적으로 "처리해야"하는 별도의 작업에 필요합니다.
jalanb

병원체 읽어보기의 tpope가 왜 서브 모듈이 가지 않는 이유를 말할 수 있습니까? 나는 서브 모듈을 모른다. (그리고 플러그인 관리자조차없이 내 솔루션이 훌륭하게 작동한다.)하지만 서브 서브 모듈 군중이 흥미로운 것을 추측하고있다.
dash-tom-bang

1
@ 그가 말하는대로 내가 그 비트를 읽지 않는 대시 - 톰 - 쾅 당신이 서브 모듈을 사용할 수 없습니다. 나는 그가 단지 그것이 아니다라고 생각 자신의 선호하는 방법.
Rich

1
TBH를 몇 년 동안 사용한 후 서브 모듈에 짜증이났습니다. 이제는 사용하지 않는 것이 좋습니다. 나는 지금 vim-plug를 사용하고 있으며 그것은 내 인생을 더 쉽게 만들었습니다.
muru

4

.gitignore플러그인을 추가하여 모든 플러그인을 무시하고 커밋하지 않을 수 있습니다.

vim/bundle

또한 플러그인 코드가 이미 github repos이기 때문에 플러그인 코드를 포함시키는 것이 문제가 있다고 말했습니다. 난 당신이 코드를 복제하지 않으려는 것을 의미하는 것 같아요,하지만 난 당신이 의존성 당신은 항상 당신의 코드에서 특정 지점으로 돌아가 수 있도록하다고 가서 중복 코드를해야한다고 말했다 들었어요 알고 있음 작동합니다. James Shore의 기사에 대한 내용은 다음과 같습니다. http://www.letscodejavascript.com/v3/blog/2014/12/the_reliable_build , http://www.letscodejavascript.com/v3/blog/2014/03/ the_npm_debacle . 그는 프로그래밍 코드와 npm (vim과 반대)에 대해 이야기하고 있지만, 논쟁이 여전히 적용된다고 생각합니다. 당신은 코드를 작성하거나 쓸 수있는 안정적인 환경을 원합니다.


1
"이 라인을 .vimrc에 추가 할 수 있습니다 ...".gitignore을 의미 했습니까?
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.