사용법 - Vim에서 여러 파일로 효과적으로 작업하는 방법?




정리 단축키 (23)

여러 버퍼를 사용하려는 경우 가장 중요한 것은 숨겨진 버퍼를 변경하지 않아도 버퍼를 전환 할 수 있도록 숨겨진 버퍼를 설정하는 것입니다.

Vim을 사용하여 Perl 스크립트를 개발하기 시작했으며 매우 강력하다는 것을 알기 시작했습니다.

내가 좋아하는 한 가지 예를 들면 vi main.pl maintenance.pl 사용하여 한 번에 여러 파일을 열 수 있고 그 다음에 다음 파일을 vi main.pl maintenance.pl 뛸 수 있습니다.

:n
:prev

어떤 파일이 열려 있는지 확인하십시오.

:args

파일을 추가하려면 다음과 같이 말하면됩니다.

:n test.pl

이 파일은 필자의 파일 목록에 추가 될 것으로 예상되지만 대신 현재 파일 목록을 지 test.pl . 그리고 입력 할 때 :args 나는 test.pl 만 엽니 다.

그래서 어떻게 내 args 목록에 파일을 추가하고 제거 할 수 있습니까?


목록

현재 버퍼 목록을 보려면 다음을 사용합니다.

:ls

열리는

새 파일을 열려면 다음을 사용합니다.

:e ../myFile.pl

향상된 탭 완료 ( .vimrc set wildmenu ).

참고 : :find 를 사용하여 경로 집합을 검색 할 수도 있지만 먼저 경로를 사용자 지정해야합니다.

스위칭

열려있는 모든 파일을 전환하려면

:b myfile

향상된 탭 완성 기능 (여전히 set wildmenu ).

참고 : :b# 는 마지막으로 방문한 파일을 선택하므로 두 파일간에 신속하게 전환 할 수 있습니다.

창 사용

Ctrl-W sCtrl-W v 를 사용하여 현재 창을 수평 및 수직으로 분할합니다. :split:vertical split ( :sp:vs )을 사용할 수도 있습니다 :split

열려있는 창을 전환 Ctrl-W h 를, 열려있는 창을 탐색 Ctrl-W h (또는 j 또는 k 또는 l )를 누르십시오.

현재 창을 닫으려면 Ctrl-W c 를 누르고 현재 창을 제외한 모든 창을 닫으려면 Ctrl-W o 를 누르십시오.

vim을 -o 또는 -O 플래그로 시작하면 각 파일이 자체 분할로 열립니다.

이 모든 것들을 사용하여 빔에서 탭이 필요없고 손가락이 내 눈이 아닌 버퍼를 찾습니다.

참고 : 모든 파일을 Vim의 동일한 인스턴스로 이동하려면 --remote-silent 옵션을 사용하여 Vim을 시작하십시오.


Vim (하지만 원래의 Vi!)에는 버퍼보다 ​​우수한 (많은 문맥에서) 탭이 있습니다. 다음과 같이 말할 수 있습니다 :tabe [filename] 은 새 탭에서 파일을 엽니 다. 탭을 클릭하거나 키 조합 [ n ] gtgT 를 클릭하면 탭 사이를 순환 할 gt 있습니다. 그래픽 Vim에는 그래픽 탭이 있습니다.


이 스레드의 답변 대부분은 평범한 vim 명령을 사용하고 있습니다. 그러나 플러그인과 함수의 조합을 사용하여 광범위한 대답을 제공 할 것이라고 생각했습니다. 특히 유용한 팁 중 일부는 Gary Bernhardt의 파일 에서 왔습니다. 탐색 팁 ) :

  1. 마지막 두 파일 사이를 전환하려면 <leader> 두 번 누르기 만하면됩니다. <leader> 를 스페이스 바에 할당하는 것이 좋습니다.

    nnoremap <leader><leader> <c-^>
    
  2. 프로젝트를 빠르게 돌아 CtrlP 와 같은 CtrlP 매칭 솔루션이 CtrlP 합니다. 빠른 액세스를 위해 <leader>a 에 바인딩합니다.

  3. 현재 열려있는 버퍼의 시각적 표현을보고 싶다면 BufExplorer 플러그인을 사용 합니다 . 간단하지만 효과적인.

  4. 파일 시스템을 둘러보고 싶다면 커맨드 라인이나 외부 유틸리티 (Quicklsilver, Afred 등)를 사용하지만 현재 프로젝트 구조를 살펴보아야합니다. Nerdtree 는 고전입니다. 이 파일을 주 파일 찾기 방법으로 2 자리에 사용하지 마십시오. 정말 너를 늦출거야. 나는 <leader>ff 바인딩을 사용한다.

파일을 찾아서 여는 데 충분해야합니다. 거기에서 물론 수평과 수직 분할을 사용하십시오. 분할에 관해서는이 기능이 특히 유용하다는 것을 알게되었습니다.

  1. 충분한 공간이 없을 때 더 작은 영역에서 새 분할을 열고 탐색 할 때 분할합니다. 이들이 정확하게하는 것에 대한 코멘트는 다음을 참조 하십시오 :

    set winwidth=84
    set winheight=5
    set winminheight=5
    set winheight=999
    
    nnoremap <C-w>v :111vs<CR>
    nnoremap <C-w>s :rightbelow split<CR>
    set splitright
    
  2. 분할에서 쉽게 분할로 이동 :

    nnoremap <C-J> <C-W><C-J>
    nnoremap <C-K> <C-W><C-K>
    nnoremap <C-L> <C-W><C-L>
    nnoremap <C-H> <C-W><C-H>
    

내가 사용하는 버퍼 명령 - :bn (다음 버퍼) :bp (이전 버퍼) :buffers (열린 버퍼 나열) :b<n> (열린 버퍼 n) :bd (버퍼 삭제). :e <filename> 그냥 새 버퍼로 열립니다.


왜 탭 (Vim 7에서 소개)을 사용하지 않습니까? :tabn:tabp , with :tabe <filepath> 를 사용하여 탭간에 전환 할 수 있습니다. 새 탭을 추가 할 수 있습니다. 일반 :q 또는 :wq 를 사용하여 탭을 닫습니다. :tabn:tabpF7 / F8 키에 매핑하면 파일간에 쉽게 전환 할 수 있습니다.

그렇게 많은 파일이 없거나 Vim 7이 없다면 화면을 여러 개의 파일로 나눌 수 있습니다 : :sp <filepath> . 그런 다음 Ctrl + W로 분할 화면을 전환 한 다음 이동하려는 방향으로 화살표 키 (또는 화살표 키 대신 다음에 W , 이전 분할 화면에 W )를 전환 할 수 있습니다.


나는 플러그인을 사용하도록 제안 할 것이다.

NERDtree

다음은 지침이 담긴 github 링크입니다.

Nerdtree

vim-plug를 플러그인 관리자로 사용하지만 Vundle도 사용할 수 있습니다.

vim-plug

Vundle


커맨드 라인과 git을 많이 사용하므로 내 bashrc에이 별칭이 있습니다.

alias gvim="gvim --servername \$(git rev-parse --show-toplevel || echo 'default') --remote-tab"

이렇게하면 기존 창의 새 탭에 새 파일이 열리고 각 저장소에 대해 하나의 창이 생성됩니다. 따라서 repo A에서 두 개의 파일을 열고 repo B에서 세 개의 파일을 열면 두 개의 창이있는 repo A와 세 개의 탭이있는 repo B의 두 개의 창이 나타납니다.

열려는 파일이 자식 레포에 포함되어 있지 않으면 기본 창으로 이동합니다.

탭간에 이동하려면 다음 매핑을 사용합니다.

nmap <C-p> :tabprevious<CR>
nmap <C-n> :tabnext<CR>

한 번에 여러 파일을 열려면 다른 솔루션과 결합해야합니다.


args 리스트에 추가하려면 :

:argadd

args 목록에서 삭제하려면 다음을 수행하십시오.

:argdelete

예제에서 다음을 사용할 수 있습니다 :argedit test.pl args 목록에 test.pl을 추가하고 한 단계로 파일을 편집합니다.

:help args 가 훨씬 더 세세하고 고급 사용법을 제공합니다.


Vim 글로벌 마크 를 사용할 수 있습니다.

이렇게하면 파일간에 빠르게 바운스 할 수 있으며 파일의 표시된 위치까지 신속하게 바운스 할 수 있습니다. 또한, 핵심 명령은 짧습니다 : 'C 는 내가 작업중인 코드로 이동합니다 'T 는 제가 작업중인 단위 테스트로 이동합니다.

장소를 변경하면 마크를 다시 설정하는 것이 빠릅니다. mC 는 새 코드 스폿을 표시하고 mT 는 새 테스트 스팟을 표시합니다.


여러 파일을 편리하게 편집 할 수 있도록지도를 따라 해보세요.

"분할 창

nmap <leader>sh :leftabove vnew<CR>

nmap <leader>sl :rightbelow vnew<CR>

nmap <leader>sk :leftabove new<CR>

nmap <leader>sj :rightbelow new<CR>

"주위를 돌아 다니며

nmap <Cj> <Cw>j

nmap <Ck> <Cw>k

nmap <Cl> <Cw>l

nmap <Ch> <Cw>h


이 스레드의 일부 대답은 탭을 사용하여 제안하고 다른 사람들은 버퍼를 사용하여 동일한 작업을 수행하도록 제안합니다. 탭과 버퍼는 다릅니다. 나는 강력 하게이 기사를 읽으십시오. Vim Tab madness - Buffers vs Tabs

다음은 기사에서 가져온 멋진 요약입니다.

개요:

  • 버퍼는 파일의 메모리 내 텍스트입니다.
  • 윈도우는 버퍼의 뷰포트입니다.
  • 탭 페이지는 창 모음입니다.

여기에 많은 답이 있습니다! 내가 바퀴를 재발 명함없이 사용하는 것 - 가장 빠르고 (괴상한 일이 아니며 많은 사람들이 사용하는) 가장 유명한 플러그인입니다.

  • ctrlpvim / ctrlp.vim - 위치 또는 이름으로 퍼지 검색을 통해 파일 찾기
  • jlanzarotta / bufexplorer - 열린 버퍼를 탐색합니다 (최근에 열고 여는 파일의 수를 기억하지 못하고 Ag를 검색했기 때문에 그 위치를 기억하지 못하는 경우)
  • rking / ag.vim 을 사용하여 gitignore와 관련하여 파일을 검색하십시오.
  • scrooloose / nerdtree 를 사용하여 디렉토리 구조, 둘러보기, 파일 추가 / 삭제 / 수정

업데이트 : 최근에 dyng / ctrlsf.vim 을 사용하여 상황 별보기 (Sublime 검색과 같은)로 검색하고 ag 에서 ripgrep으로 엔진을 전환했습니다. 성능이 뛰어납니다.


:ls

열려있는 버퍼 목록

  • :bp 이전 버퍼
  • :bn 다음 버퍼
  • :bn ( n 숫자) n 번째 버퍼로 이동
  • :b <filename-part> 자동 완성 기능을 제공하는 탭키 (awesome !!)

vim의 몇몇 버전에서, bnbp 는 실제로 각각 bnextbprevious 입니다. 이 경우 탭 자동 완성 기능이 유용합니다.

또는 정상 모드에서 ^ 를 사용하여 작업중인 마지막 파일로 전환하십시오.

게다가 vim의 세션을 저장할 수 있습니다.

:mksession! ~/today.ses

위의 명령은 현재 열려있는 파일 버퍼 및 설정을 ~/today.ses 합니다. 다음을 사용하여 해당 세션을로드 할 수 있습니다.

vim -S ~/today.ses

어제 그만 둔 곳을 기억하는 번거 로움이 없습니다. ;)


상황은 :e 과 같습니다 :e:badd 는 하나의 인수만을 허용합니다. 따라서 다음은 실패합니다

:e foo.txt bar.txt
:e /foo/bar/*.txt
:badd /foo/bar/*

vim에서 여러 파일을 추가하려면 arga[dd]

:arga foo.txt bar.txt
:arga /foo/bar/*.txt
:argadd /foo/bar/*

~/.vimrc 파일에 숨겨진 여러 버퍼를 사용합니다.

미니 버퍼 탐색기 스크립트는 버퍼의 좋은 압축 목록을 얻는 데 유용합니다. 그런 다음 :b1 또는 :b2 ... 적절한 버퍼로 이동하거나 버퍼를 통해 미니 버퍼 탐색기 및 탭을 사용하십시오.


난 당신이 열려있는 파일의 목록을보고 잘못된 명령을 사용하는 것 같아요.

:ls 를 실행하여 열려있는 파일 목록을 확인하면 다음이 표시됩니다.

   1 %a   "./checkin.pl"            line 1
  2 #    "./grabakamailogs.pl"     line 1
  3      "./grabwmlogs.pl"         line 0
  etc.

그런 다음 나열된 번호로 파일을 참조하여 파일을 바운스 할 수 있습니다 (예 : 3b).

또는 숫자를 입력하고 b 대신에 sb를 사용하여 화면을 분할 할 수 있습니다.

aside %는 현재 보이는 파일을 참조하고 #은 대체 파일을 참조합니다.

Ctrl Shift 6 을 눌러이 두 파일을 쉽게 전환 할 수 있습니다.

편집 : like :ls :reg 를 사용하면 삭제 한 내용이 포함 된 0-9 레지스터를 비롯하여 레지스터의 현재 내용을 볼 수 있습니다. 이는 이전에 삭제 한 텍스트를 다시 사용하려는 경우 특히 유용합니다.


이것으로 답변을 추가 할 수 없기 때문에 다른 답변을 추가 할 수 있습니다.

모든 버퍼를 tab 보기로 변경합니다.

 :tab sball

탭보기로 모든 버퍼가 열립니다. 그런 다음 탭 관련 명령을 사용할 수 있습니다.

gt or :tabn           "    go to next tab
gT or :tabp or :tabN  "    go to previous tab

자세한 내용은 :help tab-page-commands .

우리는 vim에게 vim -p file1 file2 의해 여러개의 파일을 탭 뷰로 열도록 지시 할 수있다. alias vim='vim -p' 가 유용합니다.
~/.vimrc 에서 다음과 같은 자동 명령을 사용하면 같은 결과를 얻을 수 있습니다

 au VimEnter * if !&diff | tab all | tabfirst | endif

어쨌든 질문에 대답 : arg 목록에 추가하려면 : arga file ,

arg리스트에서 삭제하려면 : argd pattern

더보기 :help arglist


VIM을 사용하기 시작했을 때 탭이 다른 창 레이아웃으로 사용되어야한다는 것을 알지 못했으며 버퍼는 여러 파일 편집 / 서로 전환하는 역할을합니다. 실제로 처음 탭에서는 v7.0 이전에는 탭이 없었고 터미널 탭 안에 하나의 VIM을 열었습니다 (현재 gnome-terminal을 사용하고있었습니다). Alt + 숫자를 사용하여 탭 사이를 전환합니다. : 버퍼, : bn 및 : bp는 나를 위해 너무 많았습니다. VIM 7.0이 출시되었을 때 많은 파일을 관리하는 것이 더 쉬웠다 고 생각했지만 최근에는 버퍼가 항상 작동해야한다는 것을 깨달았습니다. 한 가지만 제외하고는 제대로 작동하도록 구성해야합니다.

그래서 vim-airline을 사용하고 시각적 인 탭 상단의 버퍼 막대를 활성화했지만 그래픽은 iTerm2에 문제가있어서 몇 가지를 시도해 보았습니다. MBE가 가장 잘 작동하는 것 같습니다. 또한 Shift + h / l을 단축키로 설정했습니다. 원래 페이지 (현재 페이지의 머리 / 꼬리로 이동)가 나에게는별로 유용하지 않기 때문입니다.

map <Sh> :bprev<Return>
map <Sl> :bnext<Return>

그것은 gt와 gT보다 훨씬 더 쉬운 것으로 보이며, e는 tabnew보다 쉽습니다. 나는 찾는다 : bd는 다음과 같이 편리하지 않다 : q (MBE는 그것에 약간의 문제가있다).하지만 나는 생각하는 버퍼 내의 모든 파일들과 함께 살 수있다.


나는 다음을 사용한다, 이것은 당신에게 당신이 Sublime Text / Textmate와 같은 다른 편집자에서 가지고 있다고 기대할 수있는 많은 기능을 제공한다.

  1. '탭 페이지'가 아닌 버퍼를 사용하십시오. 버퍼는 다른 모든 편집자의 탭과 동일한 개념입니다.
  2. 탭이있는 동일한 모양을 원하면 .vimrc 에서 다음 설정으로 vim-airline 플러그인을 사용할 수 있습니다. let g:airline#extensions#tabline#enabled = 1 . 탭 페이지가 열리지 않으면 모든 버퍼가 탭 헤더로 자동 표시됩니다.
  3. Tim Pope의 vim-unimpaired 를 사용하여 각각 이전 / 다음 버퍼로 이동하기 위해 [ b] b 를 준다 .
  4. .vimrc set wildmenuset wildmenu 한 후 다음을 입력하십시오 :b <file part> + 버퍼의 왼쪽 / 오른쪽 화살표를 사용하여 스크롤 할 수있는 가능한 버퍼 목록을 가져옵니다.
  5. Tim Pope의 vim-obsession 플러그인을 사용하여 항공사와 잘 작동하는 세션을 저장합니다 ( 세션 및 플러그인에 많은 고통을 겪었습니다 )
  6. Tim Pope의 vim-vinegar 플러그인을 사용하십시오. 이 기능은 기본 :Explore 과 작동하지만 훨씬 쉽게 작업 할 수 있습니다. 탐색기의 디렉토리를 탐색하는 것과 동일한 키인 탐색기를 열려면 - 를 입력하기 만하면됩니다. 더 빨리 탐색하게합니다 (그러나 fzf로는 거의 사용하지 않습니다).
  7. fzf (vim 플러그인으로 설치 될 수 있음)는 또한 파일 (및 버퍼)을 검색하는 데 사용할 수있는 매우 강력한 퍼지 파인더입니다. fzf는 또한 fd (find의 더 빠른 버전)
  8. Ripgrepvim-ripgrep Ripgrep 과 함께 사용하여 코드베이스를 검색하면 결과에 :cdo 를 사용하여 검색 및 바꾸기를 할 수 있습니다 :cdo

내가 사용하는 워크 플로우를 보여주는 매우 간단한 비디오 를 만들었습니다. 기본적으로 Ctrl-P Vim 플러그인을 사용하고 버퍼 탐색을 Enter 키에 매핑했습니다.

이렇게하면 일반 모드에서 Enter 키를 누를 수 있고, 열려있는 파일 목록 (화면 하단의 작은 새 창에 나타남)을보고 편집하려는 파일을 선택하고 Enter를 다시 누를 수 있습니다. 여러 개의 열린 파일을 빠르게 검색하려면 파일 이름의 일부만 입력하고 파일을 선택하고 Enter 키를 누릅니다.

비디오에 많은 파일이 열려 있지 않지만 많은 파일을 가지고 시작할 때 매우 도움이됩니다.

플러그인은 MRU 순서를 사용하여 버퍼를 정렬하기 때문에 Enter 키를 두 번 누르고 편집중인 가장 최근의 파일로 바로 이동할 수 있습니다.

플러그인을 설치 한 후에 필요한 구성은 다음과 같습니다.

nmap <CR> :CtrlPBuffer<CR>

물론 그것을 다른 키에 매핑 할 수는 있지만 매우 편리하게 입력 할 매핑을 찾습니다.


vim에서 여러 파일을 사용할 때, 나는 ~ 350 개의 파일을 열어서 다음 명령을 주로 사용합니다.

  • :b <partial filename><tab> (버퍼로 점프)
  • :bw (버퍼 지우기, 버퍼 제거)
  • :e <file path> (편집, 새 버퍼 열기>
  • pltags - 서브 루틴 / 메소드 정의로 점프 할 수 있습니다.

Windows에서 Git 클라이언트를 설치하여 Vim을 얻었습니다. :q 는 나를 위해 Vim을 종료하지 않을 것이다. :exit 하지만 :exit 가 ...







vim vi