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


1098

Vim을 사용하여 Perl 스크립트를 개발하기 시작했고 매우 강력 해졌습니다.

내가 좋아하는 한 가지는 여러 파일을 한 번에 열 수 있다는 것입니다.

vi main.pl maintenance.pl

그리고 그들 사이를 뛰어 다니다 :

:n
:prev

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

:args

그리고 파일을 추가하기 위해 다음과 같이 말할 수 있습니다.

:n test.pl

파일 목록에 추가 될 것으로 예상되지만 대신 현재 파일 목록을 지우고 입력 :args할 때만 test.pl열었습니다.

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


5
tmux ... 각 창에서 vim 사용
Tommy

4
@Tommy :이 방법으로 파일 사이에 k거나 삭제 된 내용을 붙여 넣을 수 없습니다 (vims 버퍼). 사용 가능한 경우 클립 보드 만 도움이 될 수 있습니다 (승인 된 답변 : stackoverflow.com/questions/5532878/… )
ChristophS

1
:N... 이전 파일로 이동하는 쉬운 방법처럼 보인다
버그 서재 거트 반

vimcasts.org/categories/the-argument-list ? VimCast는 vim을 배울 때 매우 권장됩니다.
mcepl

답변:


1171

Vim 7에 도입 된 탭을 사용하지 않는 이유는 무엇입니까? 당신과 탭 사이를 전환 할 수 있습니다 :tabn:tabp함께, :tabe <filepath>당신은 새 탭을 추가 할 수 있습니다; 그리고 정기적으로 :q또는 :wq탭을 닫습니다. 당신이지도하는 경우 :tabn:tabp당신에 F7/의 F8키는 파일 사이를 쉽게 전환 할 수 있습니다.

파일이 많지 않거나 Vim 7이없는 경우 화면을 여러 파일로 분할 할 수도 있습니다 :sp <filepath>. 그런 다음 Ctrl+ W를 사용하여 분할 화면간에 전환 한 다음 이동하려는 방향으로 화살표 키를 사용하거나 화살표 키 대신 w다음 및 W이전 분할 화면을 전환 할 수 있습니다


72
탭을 저장하고 닫으려면 ZZ대신 :wq(보통 저장하고 닫는 것처럼) 대신 사용할 수도 있습니다.
Andreas Grech

40
Ubuntu 10.10에서 vim-gnome 패키지를 사용하고 있으며 Ctrl + PageUp 및 Ctrl + PageDown을 사용하여 탭 간을 전환 할 수 있습니다. 아무것도 구성 할 필요가 없었습니다. 기본값이었습니다.
Joey Adams

268
또한 편집 모드 gt에서는 다음 탭 gT으로 이동하고 이전 탭으로 이동합니다.
Dean

40
ngt를 사용하여 임의의 탭으로 이동할 수 있습니다. 여기서 n은 탭의 색인입니다 (1부터 시작). 파일 이름 근처에 각 탭의 색인을 표시하는 옵션이 있다고 생각하지만 그것이 무엇인지 모르겠습니다. 누구나 알고 있다면 듣고 싶습니다.
void 포인터

81
또한 -p플래그를 사용 하여 명령 행에서 여러 파일을 탭으로 열 수 있습니다. 예를 gvim -p main.pl maintenance.pl들어이 두 파일을 탭에서 엽니 다.
Matthew Strawbridge

554

리스팅

현재 버퍼 목록을 보려면 다음을 사용하십시오.

:ls

열리는

새 파일을 열려면

:e ../myFile.pl

향상된 탭 완성과 (넣어 set wildmenu당신에 .vimrc).

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


스위칭

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

:b myfile

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

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


창 사용

Ctrl-W sCtrl-W v수평 및 수직 현재 창을 분할. 당신은 또한 사용할 수 있습니다 :split:vertical split( :sp:vs)

Ctrl-W w열린 창 사이를 전환하고 Ctrl-W h(또는 j또는 k또는 l) 열린 창을 탐색합니다.

Ctrl-W c현재 창을 닫고 현재 창을 Ctrl-W o제외한 모든 창을 닫습니다.

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


이 모든 것들로 Vim에서 탭이 필요하지 않으며 손가락이 내 눈이 아닌 버퍼를 찾습니다.

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


4
여러 버퍼를 사용하는 경우 LustyJuggler를 권장 합니다 .
Arun M

1
여러 파일로 작업 할 때 가장 자주 사용되는 vim 명령을 매우 빠르게 참조 해 주셔서 감사합니다.
양자화

9
:b버퍼 번호와 버퍼 이름을 모두 인수로 사용할 수 있기 때문에 매우 강력한 명령입니다. 더 무엇입니까? 또한 파일 이름의 어느 부분에서나 탭 완성을 지원합니다. 말, 당신은 당신이 입력 할 수 있습니다, 버퍼 2 오픈에 foo.txt이 :b 2<Enter>:b foo.txt또는 :b oo<Tab><Enter>해당 파일을 편집 할 수 있습니다. 예, <Tab>을 누르면 마지막 것이 'oo'에서 'foo.txt'로 완료됩니다.
Susam Pal

21
내 .vimrc 에이 줄이 있습니다 nnoremap gb :ls<cr>:b<space>. gb명령 모드에서 입력하면 열린 버퍼 및 유형이 나열 :b 되어 버퍼 이름 / 번호를 입력 할 수 있습니다.
nkorth

5
:b모호하지 않는 한 부분 문자열 일치를 허용 한다는 점도 언급 할 가치가 있습니다. 당신이 열려있는 파일이있는 경우 그래서 foo, bar그리고 baz, 바로 :b z받는 당신을 전환하기에 충분 baz버퍼 및 :b oo또는 :b o받는 당신을 데려 갈 것이다 foo버퍼입니다.
Soren Bjornstad

233
:ls

열린 버퍼 목록

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

정력의 일부 버전에서 bnbp실제로 bnextbprevious각각. 이 경우 탭 자동 완성이 도움이됩니다.

또는 일반 모드 인 경우을 사용 ^하여 작업중인 마지막 파일로 전환하십시오.

또한, vim 세션을 저장할 수 있습니다

:mksession! ~/today.ses

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

vim -S ~/today.ses

어제 어디에서 떠 났는지 기억하는 번거 로움이 없습니다. ;)


특정 버퍼로 이동 : N CTRL- ^
Tom Yang

8
@shyam 나는 당신을 사랑한다고 생각합니다! 어떻게 든 mksession 명령에 대해 확신하지 못했지만 오늘은 파란색으로 파일 목록을 저장하여 쉽게 열 수있는 방법이 있어야한다고 결정했습니다. 이것은 완전한 상태 (창 분할, 버퍼 위치 등)를 저장하는 것처럼 보이기 때문에 더 좋습니다. 감사합니다!
Kasapo

또한 "마크를 사용하여 마지막으로 파일의 위치로 이동하십시오.
Chromium

113

args목록에 추가하려면 다음을 수행 하십시오.

:argadd

args목록 에서 삭제하려면

:argdelete

예제에서 :argedittest.pl을 사용하여 test.pl을 args목록 에 추가 하고 파일을 한 번에 편집 할 수 있습니다 .

:help args 훨씬 더 자세하고 고급스러운 사용법 제공


4
제목이 주어지면 다른 답변은 완벽하게 공평하지만 이것은 실제로 질문에 대한 답변입니다.
Soren Bjornstad

48

버퍼 명령- :bn(다음 버퍼), :bp(이전 버퍼) :buffers(열린 버퍼 나열) :b<n>(열린 버퍼 n) :bd(버퍼 삭제)를 사용합니다. :e <filename>새 버퍼로 열립니다.


18
: ls 더 빠른 : 버퍼
aehlke

42

열린 파일 목록을 보는 데 잘못된 명령을 사용하고 있다고 생각합니다.

:ls열린 파일 목록을 확인하려면 다음을 수행 하십시오.

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

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

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

옆으로 %는 현재 표시된 파일을 나타내고 #은 대체 파일을 나타냅니다.

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

편집 : 삭제 한 것을 포함하는 0-9 레지스터를 포함하여 레지스터의 현재 내용을 보는 데 :ls사용할 수 있습니다 :reg. 이전에 삭제 한 일부 텍스트를 재사용하려는 경우 특히 유용합니다.


2
% 및 #과 같은 관련 정보를 제쳐두고 반갑습니다. +1
Ashish

35

Vim (그러나 원래 Vi!는 아님)에는 버퍼보다 ​​우수한 탭이 있습니다 (많은 컨텍스트에서). 당신은 말할 수 있습니다:tabe [filename]새 탭에서 파일을 열 . 탭을 클릭하거나 키 조합 [ n ] gt및 을 사용하여 탭 간 순환을 수행합니다 gT. 그래픽 Vim에는 그래픽 탭도 있습니다.


1
고맙게 들릴 것 같지만 불행히도 서버에는 VIM 6.1 만 설치되어 있습니다.
Edward Tanguay

1
탭은 와일드 카드로 매우 유용합니다 : vim -p dir/*. 최대 탭 크기는 10이지만 ~/.vimrc설정 tabpagemax에서 다른 값으로 변경할 수 있습니다 .
Campa

27

여기에 많은 답변이 있습니다! 바퀴를 다시 만들지 않고 내가 사용하는 것-가장 유명한 플러그인 (곧 죽지 않을 것이며 많은 사람들이 사용하는 플러그인)은 매우 빠르고 괴짜입니다.

  • ctrlpvim / ctrlp.vim- 이름으로 파일을 찾으려면 위치 또는 이름만으로 퍼지 검색
  • jlanzarotta / bufexplorer- 열린 버퍼를 탐색하기 위해
  • gitignore와 관련하여 파일을 검색하는 rking / ag.vim
  • scrooloose / nerdtree 는 디렉토리 구조를보고, 둘러보기, 파일 추가 / 삭제 / 수정

편집 : 최근에 dyng / ctrlsf.vim 을 사용하여 Sublime 검색과 같은 컨텍스트보기로 검색하고 엔진을 ag 에서 ripgrep 로 전환했습니다 . 성능이 뛰어납니다.

EDIT2 : 함께 CtrlSF 사용할 수 mg979 / VIM-영상 멀티 , 여러 파일에 화장 변경 한 번하고 한 번에 그들을 저장 끝.


2
ctrlp 가 옮겨졌으며 이제 ctrlpvim / ctrlp.vim에 있습니다.
Dave

1
이것이 정답입니다! 더 많은 투표가없는 이유는 무엇입니까?
토마스 뫼비우스

2
2008 년에 그 질문이 제기 되었기 때문에 더 많은
투표를

바로 그거죠. 플러그인이 없으면 dev 설정에서 vim을 상상할 수 없습니다.
Edgar Alloro

25

하나의 인수 만 좋아 :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/*

21

이 스레드의 일부 답변은 탭 사용을 제안하고 다른 답변은 동일한 작업을 수행하기 위해 버퍼 사용을 제안합니다. 탭과 버퍼가 다릅니다. 이 기사 " Vim Tab madness-Buffers vs Tabs " 를 읽어 보시기 바랍니다 .

다음은 기사에서 가져온 훌륭한 요약입니다.

요약:

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

2
:help windowVim
icc97

19

vim에서 여러 파일을 사용할 때 다음 명령을 주로 사용합니다 (~ 350 개 파일을 연 상태).

  • :b <partial filename><tab> (버퍼로 점프)
  • :bw (버퍼 와이프, 버퍼 제거)
  • :e <file path> (편집, 새 버퍼 열기>
  • pltags -서브 루틴 / 방법 정의로 점프 가능

2
350 개 파일 !!! 인상적입니다. 올바른 버퍼를 어떻게 찾을 수 있습니까? 당신은 분열을합니까?
Brian O'Dell

3
@ BrianO'Dell :b <partial filename><tab>플러스 set wildmenu당신의 .vimrc잘 열려 버퍼의 톤을 가지고 때 작동합니다. 그런 다음 부분 일치하고 찾은 것을 스크롤합니다. 다른 괜찮은 편집기에서는 퍼지 찾기가 있지만 일반적으로 퍼지 찾기를 열린 파일로 제한 할 수는 없습니다.
icc97

17

답변에 포함되지 않은 다른 답변 추가

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

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

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

:help arglist


16

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

이런 식으로 파일간에, 심지어 파일에서 표시된 위치까지 빠르게 바운스 할 수 있습니다. 또한 주요 명령은 짧습니다. 'C 작업중인 코드로 이동하고 작업중인 'T 단위 테스트로 이동합니다.

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


12

gVim과 명령 줄 Vim에 동일한 .vimrc 파일을 사용합니다. 명령 줄 Vim에서 gVim의 탭과 버퍼를 사용하는 경향이 있으므로 두 가지를 모두 사용하기 쉽도록 .vimrc를 설정했습니다.

" Movement between tabs OR buffers
nnoremap L :call MyNext()<CR>
nnoremap H :call MyPrev()<CR>

" MyNext() and MyPrev(): Movement between tabs OR buffers
function! MyNext()
    if exists( '*tabpagenr' ) && tabpagenr('$') != 1
        " Tab support && tabs open
        normal gt
    else
        " No tab support, or no tabs open
        execute ":bnext"
    endif
endfunction
function! MyPrev()
    if exists( '*tabpagenr' ) && tabpagenr('$') != '1'
        " Tab support && tabs open
        normal gT
    else
        " No tab support, or no tabs open
        execute ":bprev"
    endif
endfunction

이는 HL에 대한 기존 매핑을 방해 하지만 파일간에 매우 빠르고 쉽게 전환 할 수 있습니다. H다음과 L이전을 누르십시오 . 탭을 사용하든 버퍼를 사용하든 원하는 결과를 얻을 수 있습니다.


1
나는 이러한 매핑을 좋아한다. 또한 Ctrl-H, Ctrl-L을 사용해보십시오. Firefox와 gnome 터미널을 동일한 매핑으로 설정했습니다. 일관된 탭 키 바로 가기를 사용하는 것이 좋습니다.
cmcginty

4
기존 매핑의
방해

10

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


9

vim 내장 명령 만 사용하는 경우 여러 버퍼 사이를 전환하는 가장 좋은 방법은 다음과 같습니다.

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

이 명령 은 명령 :ls:b명령을 완벽하게 결합하여 열려있는 모든 버퍼를 나열 하고 명령을 입력하여 버퍼를 전환 할 때까지 기다립니다.

vimrc에 위의 매핑이 주어지면을 입력 <Leader>f하면

  • 열린 모든 버퍼가 표시됩니다
  • 당신은 할 수 있습니다 :
    • 23버퍼 23으로 이동하기 위해 입력하십시오 .
    • #대체 / MRU 버퍼로 이동하려면 입력하십시오 .
    • 파일의 부분 이름을 입력 한 다음을 입력 <Tab>하거나 <C-i>자동 완성하려면
    • 또는 현재 버퍼에 그대로 <CR>두거나<Esc>

위의 키 매핑에 대한 출력 스냅 샷은 다음과 같습니다.

:set nomore|:ls|:set more
  1  h    "script.py"    line 1
  2 #h  + "file1.txt"    line 6  -- '#' for alternative buffer
  3 %a    "README.md"    line 17 -- '%' for current buffer
  4       "file3.txt"    line 0  -- line 0 for hasn't switched to
  5     + "/etc/passwd"  line 42 -- '+' for modified
:b '<Cursor> here'

위 스냅 샷에서 :

  • 두 번째 열 : %a현재, h숨김,# 이전, 비어 있음이 전환되지 않았습니다.
  • 세 번째 열 : +수정 됨

또한 강력하게 제안 set hidden합니다. 참조하십시오 :help 'hidden'.


이것은 좋은 생각입니다! 내가 사용하고 한 :b:ls독립적으로 많은하지만합니다. 나는 페이지 가치 이상의 버퍼를 가질 때 이것이 유용하지 않다고 생각하지만 여전히 다음으로 넘어갈 수있다:b
icc97

도움이 되니 다행입니다. 건배! :)
qeatzy

Vim wikia 에서는 nnoremap <leader>f :ls<cr>:b<space>'more'명령을 사용하면 문제가 발생할 수 있습니다.
icc97

예, 적은 수의 파일이 열려 있으면 (일반적인 사용 사례) 완벽하게 작동합니다. set more예를 들어 vim /usr/include/*, 비록 유용하지는 않지만 많은 파일이 열려있는 경우 (한 페이지 이상)에만 차이가 있습니다 .
qeatzy

8

다음을 사용하면 Sublime Text / Textmate와 같은 다른 편집기에서 기대할 수있는 많은 기능을 제공합니다.

  1. '탭 페이지'가 아닌 버퍼를 사용하십시오. 버퍼는 거의 모든 다른 편집기의 탭과 동일한 개념입니다.
  2. 당신은 당신이 사용할 수있는 탭을 갖는 동일한 모양하려면 VIM 항공 귀하의에서 다음과 같은 설정으로 플러그인을 .vimrc: let g:airline#extensions#tabline#enabled = 1. 탭 페이지를 열지 않으면 모든 버퍼가 탭 헤더로 자동 표시됩니다.
  3. 사용 팀 교황의 VIM-손상되지 않은 제공하는 [b]b (다른 케이크의 플러스 전체 호스트) 각각 이전 / 다음 버퍼로 이동
  4. set wildmenu당신에 .vimrc입력 할 때 다음 :b <file part>+Tab 당신이 스크롤 할 / 오른쪽 화살표를 왼쪽으로 사용할 수있는 가능한 버퍼의 목록을 얻을 것이다 버퍼
  5. Tim Pope의 vim-obsession 플러그인을 사용하여 항공사와 잘 어울리는 세션을 저장하십시오 ( 세션과 플러그인에 많은 고통 이있었습니다 )
  6. Tim Pope의 vim-vinegar 플러그인을 사용하십시오 . 이것은 네이티브와 함께 작동 :Explore하지만 훨씬 쉽게 작업 할 수 있습니다. -탐색기에서 디렉토리를 올리는 것과 동일한 키인 탐색기를 열려면 입력 하십시오. 더 빨리 탐색합니다 (그러나 fzf에서는 거의 사용하지 않습니다)
  7. fzf (vim 플러그인으로 설치 가능)는 파일 (및 버퍼) 검색에도 사용할 수있는 강력한 퍼지 파인더입니다. fzf는 fd (빠른 버전의 찾기) 와도 잘 어울립니다.
  8. vim- ripgrep 와 함께 Ripgrep 을 사용 하여 코드 기반을 검색 한 다음 결과를 사용 하여 검색 및 교체:cdo

fzf와 fzf-vim은 제 인생을 바꿨습니다. 콘솔에서도 파일 검색을 퍼지하기 위해 Windows에서도 매우 잘 작동합니다. Windows에서는 ripgrep (rg) 백엔드를 사용합니다. 내 경험상 다른 find / grep 도구보다 성능이 뛰어납니다 (silversearcher 또는 기본 창과 같이 fzf는 iirc를 사용합니다). 가장 최근에 사용한 파일, 현재 열린 버퍼, 현재 버퍼의 라인, 코드베이스의 라인 (cwd), 태그 등 모든 항목 목록을 검색하는 데 사용할 수 있습니다. 고유 한 목록 퍼지 검색을 쉽게 프로그래밍 할 수 있습니다. 너무 좋아! (나는 ctrl-p에서 왔고 결코 뒤돌아 보지 않았다)
Emile Vrijdags

7

여러 파일로 효과적으로 작업하는 방법은 tmux를 사용하는 것입니다.

다음과 같이 창을 세로 및 가로로 분할 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

내 Mac과 Linux 컴퓨터 에서이 방법으로 작업하고 있으며 Mac에서 제공되는 기본 창 창 전환 메커니즘보다 더 좋습니다. 전환이 더 쉽고 tmux에서만 내 Mac에서 작동하는 '같은 현재 디렉토리의 새 페이지'를 얻을 수있었습니다 (같은 디렉토리에 새 창을 여는 옵션이있는 것처럼 보이지만). 놀랍도록 중요한 작품. 현재 위치의 새로운 창은 매우 유용합니다. 두 OS 모두에 대해 동일한 키 콤보로 새 창을 만드는 방법은 나에게 중요하며 향후 개인 호환성을 위해 모두에게 보너스입니다. 여러 tmux 창 외에도 여러 탭을 사용해 보았습니다.여기에 이미지 설명을 입력하십시오 여러 개의 새 창)을여기에 이미지 설명을 입력하십시오그리고 궁극적으로 여러 tmux 창이 가장 유용하다는 것을 알았습니다. 나는 매우 '시각적'이며 다양한 맥락을 내 앞에서 바로 유지하고 창으로 연결했습니다.

tmux는 또한 이전과는 달리 수평 및 수직 창 screen을 지원합니다 (Mac의 iterm2는 그것을 지원하는 것처럼 보이지만 다시 현재 디렉토리 설정은 작동하지 않았습니다). tmux 1.8


1
"여러 개의 창문"에 대한 당신의 인공적인 예를 보았을 때 나는 울어야했습니다. 어쨌든 아무도 그렇게하지 않기를 바랍니다 :-) 어쨌든, 나는 더 나은 타일링 wm을 사용합니다 (tmux에서 i3wm으로 전환했습니다). 답을 완성하십시오.
lzap

1
Tmux는 훌륭하고 오랫동안이 접근법을 사용했지만 두 파일 간의 탐색 및 복사 및 붙여 넣기가 더 어려워졌습니다.
초에 neallred

1
예전에는이 작업을 수행했지만 여러 vim 버퍼를 사용하는 것은 yank / paste가 필요할 때 우수합니다.
Titou

3

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

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

이렇게하면 기존 창의 새 탭에서 각 새 파일이 열리고 각 자식 저장소마다 하나의 창이 만들어집니다. 따라서 repo A에서 두 개의 파일을, repo B에서 3 개의 파일을 열면 두 개의 창이 있습니다. 하나는 두 개의 탭이있는 repo A 용이고 다른 하나는 세 개의 탭이있는 repo B 용입니다.

여는 파일이 자식 저장소에 포함되어 있지 않으면 기본 창으로 이동합니다.

탭 사이를 이동하려면 다음 매핑을 사용하십시오.

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

한 번에 여러 파일을 열려면이 파일을 다른 솔루션 중 하나와 결합해야합니다.


3

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

미니 버퍼 탐색기 스크립트는 버퍼 목록을 작게 만드는 것도 좋습니다. 그런 다음 :b1또는 :b2...을 사용하여 적절한 버퍼로 이동하거나 미니 버퍼 탐색기를 사용하고 버퍼를 탭하십시오.


2

여러 파일을 편리하게 편집하기 위해지도를 따라보십시오.

"분할 창

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 <C-j> <C-w>j

nmap <C-k> <C-w>k

nmap <C-l> <C-w>l

nmap <C-h> <C-w>h


2

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

이 방법으로 일반 모드에서 Enter 키를 누르고 열린 파일 목록 (화면 하단의 작은 새 창에 표시됨)을보고 편집 할 파일을 선택한 다음 Enter 키를 다시 누릅니다. 열려있는 여러 파일을 빠르게 검색하려면 파일 이름의 일부를 입력하고 파일을 선택한 후 Enter를 누르십시오.

비디오에 많은 파일이 열려 있지 않지만 많은 파일을 시작하면 매우 유용합니다.

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

플러그인이 설치된 후 필요한 유일한 구성은 다음과 같습니다.

nmap <CR> :CtrlPBuffer<CR>

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



2

저와 다른 많은 vim 사용자들에게 가장 좋은 방법은

  • 다음을 사용하여 파일을 엽니 다.

: e file_name.extension

그런 다음 Ctrl + 6을 눌러 마지막 버퍼로 변경하십시오. 또는 언제든지 누를 수 있습니다

: ls를 사용하여 버퍼를 나열한 다음 b 다음에 버퍼 번호를 사용하여 버퍼를 변경하십시오.

  • 우리는 수직 또는 수평 분할을 사용하여

수직 분할의 경우 : vsp

수평 분할 용 : sp

그런 다음 <C-W><C-H/K/L/j>작업 분할을 변경합니다.

물론 여러 개의 분할에서 파일을 편집 할 수 있습니다.


제발 편집 은이 질문에 이미 존재하는 다른 답변에 개선하도록 답변을.
hongsy

1

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

그래서 vim-airline을 시도하고 시각적 인 상단 탭과 같은 버퍼 바를 활성화했지만 그래픽이 iTerm2에 문제가 있었으므로 다른 몇 가지를 시도했는데 MBE가 가장 잘 작동하는 것 같습니다. 또한 원래 항목 (현재 페이지의 머리 / 꼬리로 이동) 이별로 유용하지 않기 때문에 shift + h / l을 바로 가기로 설정했습니다.

map <S-h> :bprev<Return>
map <S-l> :bnext<Return>

gt 및 gT보다 훨씬 쉬운 것처럼 보이며 : e는 : tabnew보다 쉽습니다. 나는 : bd가 : q만큼 편리하지 않다는 것을 알지만 (MBE는 그것에 문제가 있음) 버퍼에있는 모든 파일로 살 수 있다고 생각합니다.



0

이 스레드에서 대부분의 답변은 물론 일반 vim 명령을 사용하고 있지만 특히 유용한 플러그인과 기능의 조합을 사용하여 광범위한 답변을 제공 할 것이라고 생각했습니다 (적어도 이러한 팁 중 일부는 Gary Bernhardt의 파일 에서 가져 왔습니다) 탐색 팁 ) :

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

    nnoremap <leader><leader> <c-^>
    
  2. 프로젝트 주위를 빠르게 이동하려면 CtrlP 와 같은 퍼지 매칭 솔루션이 정답 입니다. <leader>a빠른 액세스 를 위해 바인딩합니다 .

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

  4. 파일 시스템을 탐색하려면 명령 줄이나 외부 유틸리티 (Quicklsilver, Afred 등)를 사용하지만 현재 프로젝트 구조를 보는 것은 NERD 트리 가 고전적입니다. 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>
    

0

에 다음을 추가 하여 절대 미치광이 및 별칭 vim이 될 수 있습니다 .vim -p.bashrc

alias vim="vim -p"

그러면 :tab ball나중에 vim 내 에서 호출하지 않고도 탭의 셸에서 여러 파일을 열 수 있습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.