vim, vanilla Vim을 사용하여 파일 간을 빠르게 전환 (플러그인 없음) (적어도 생각)의 좋은 이해가 버퍼 , 창

플러그인을 사용하지 않는 바닐라 Vim으로 제한하는 것은 에디터의 능력을 제한한다는 것을 이해합니다.하지만 자주 다른 컴퓨터로 전환하기 때문에 내 환경을 모든 곳으로 옮기는 것이 너무 많은 문제가되는 경우가 많습니다. 바닐라 빔에 머물고 싶어요.

저를 방해하는 것은 파일간에 빠르게 전환 할 수있는 기능입니다. 나는 (적어도 생각)의 좋은 이해가 버퍼 , , ,뿐만 아니라 netrw를 ( Vex, Ex, 등).

그러나 같은 편집기에서 숭고한 텍스트 , 난 그냥 입력 할 수 있습니다 ctrlp즉시 I 파일에서입니다.

필자는 쉘로 내려갈 수 있다는 것을 알고 있지만 파일 이름 이상의 것을 기반으로 Vim에서 파일 사이를 빠르게 전환하는 다른 “숨겨진”비밀이 있는지 궁금합니다.



답변

ST2의 Ctrl+에 가장 가까운 ( “가장 가까운”, “정확한”이 아님) P플러그인은 get ready… CtrlP 입니다. Command-T 또는 FuzzyFinder 와 같은 다른 유사한 플러그인이 있습니다 .

저는 CtrlP를 사용하고 마음에 듭니다.하지만 “플러그인이없는”결정을 진심으로 지원합니다. 가장 쉬운 방법은 아니지만 장기적으로는 효과가있을 것입니다.


파일 열기

파일을 여는 가장 기본적인 방법은 :e /path/to/filename . 고맙게도 탭 완성과 와일드 카드를 얻을 수 있습니다. 클래식 ***“모든 하위 디렉토리”를 나타내는 특수 카드 .

이 모든 것을 결합하면 다음을 수행 할 수 있습니다.

:e **/*foo<Tab>

포함 된 모든 파일에서 선택 foo작업 디렉토리 아래의 이름에 된 하거나 :

:e **/*foo/*bar<Tab>

포함 된 모든 파일에서 선택 bar이름에 포함 된 모든 하위 디렉토리 아래의 이름에 된foo .

물론, 그것은 :tabe[dit] , :sp[lit]:vs[plit]에서도 .

그러나 이러한 명령은 하나의 파일로 제한됩니다. 사용하다:next여러 파일을 여는 데 :

:next **/*.js

그리고 봐 :help arglist .


버퍼 간 점프

:b[uffer] 기본 버퍼 전환 명령입니다.

:b4         " switch to buffer number 4
:bn         " switch to next buffer in the buffer list
:bp         " switch to previous buffer in the buffer list
:bf         " switch to first buffer in the buffer list
:bl         " switch to last buffer in the buffer list
:b foo<Tab> " switch by buffer name with tab-completion
:b#         " switch to the alternate file

이러한 명령과 그 친척 중 많은 수가 카운트를 허용합니다.

:ls명령은로드 된 버퍼 목록을 보여줍니다. 그러나 이것은 약간 “특별한”것입니다. 버퍼가 생성 될 때 버퍼에 번호가 할당되므로 1 2 5버퍼를 삭제 한 것처럼 보이는 목록을 가질 수 있습니다 . 이것은 약간 어색합니다. 그렇기 때문에 그 숫자로 버퍼로 전환하는 것이 너무 번거 롭습니다. 부분 이름 :b foo<Tab>또는 순환으로 전환하는 것을 선호합니다 .:bn :bp .

어쨌든, 여기에로드 된 모든 버퍼를 나열하고 프롬프트를 채우는 멋진 매핑이 있습니다. 버퍼 번호를 입력하고 다음을 누르십시오 <enter>.

nnoremap gb :ls<CR>:b<Space>

이 매핑을 사용하면 다음과 같이 간단하게 다른 버퍼로 전환 할 수 있습니다.

gb
(quickly scanning the list)
3<CR>

또는:

gb
(quickly scanning the list)
foo<tab><CR>

아이디어는 Bairui의 Vim 인포 그래픽 컬렉션에서 가져온 이 이미지 에서 비롯됩니다 .

Vim에는 또한 <C-^>(또는 <C-6>일부 키보드에서):b# 현재 버퍼와 이전 버퍼 사이를 이동할 수있는 있습니다. 두 개의 버퍼를 자주 번갈아 사용하는 경우 사용하십시오.

에서 버퍼에 대한 모든 읽기 :help buffers.


선언으로 이동

파일 내에서 gd또는gD .

프로젝트 내에서 Vim의 “태그”기능은 친구이지만 ctags 또는 cscope와 같은 외부 코드 인덱서가 필요합니다. 가장 기본적인 명령은 다음 :tag foo<C-]>메소드 이름에 커서를. 두 도구 모두 Vim에 잘 통합되어 있습니다. :help tags, :help ctags:help cscope 있습니다. .

그만한 가치가있는 점은 태그 탐색을 광범위하게 사용하여 프로젝트 내에서 이동 합니다 (대부분 CtrlP :CtrlPTag:CtrlPBufTag명령을 사용 하지만 내장 명령도 사용). 제가 가장 좋아하는 “일반적인”버퍼 전환 방법은 이름입니다.


구성 배포

많은 Vim 사용자가 자신의 구성을 버전 관리하에두기 때문에 새 컴퓨터에 자신의 구성을 매우 빠르고 쉽게 설치할 수 있습니다. 생각해보세요.


편집하다

몇 달 전에는 오래된 Vim을 사용하여 원격 컴퓨터에서 작업해야했습니다. 적절한 Vim을 설치하고 내가 좋아하는 구성을 복제 할 수 있었지만 이번에는 “톱을 날카롭게하기”위해 가볍게 이동하기로 결정했습니다. 저는 신속하게 미니멀리스트를 구축하고 .vimrc잊혀진 몇 가지 기본 기능을 다시 살펴 보았습니다. 그 공연 ​​후 저는 CtrlP가 그다지 필요하지 않다고 판단하고 제거했습니다. 기본 기능과 사용자 지정 매핑은 섹시하지는 않지만 많은 종속성없이 작업을 수행합니다.


파일 저글링

set path=.,**
nnoremap <leader>f :find *
nnoremap <leader>s :sfind *
nnoremap <leader>v :vert sfind *
nnoremap <leader>t :tabfind *

:find당신이 set path올바르게 하자마자 정말 위대한 명령 입니다. 내 설정으로 현재 디렉토리 아래에 ,ffoo<Tab>포함 foo된 모든 파일을 재귀 적으로 찾습니다 . 빠르고 직관적이며 가볍습니다. 물론, 나는 :edit및 친구들 과 동일한 완성 및 와일드 카드의 혜택을받습니다 .

프로세스를 더 빠르게하기 위해 다음 매핑을 사용하면 프로젝트의 전체 부분을 건너 뛰고 현재 파일의 디렉터리에서 재귀 적으로 파일을 찾을 수 있습니다.

nnoremap <leader>F :find <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>S :sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>V :vert sfind <C-R>=expand('%:h').'/*'<CR>
nnoremap <leader>T :tabfind <C-R>=expand('%:h').'/*'<CR>

경고! 이 path옵션은 매우 강력합니다. 전술 값 .,**-works 나를 위해 하지만 내가 사용하는 언어는 표준 라이브러리가 없습니다. 적절한 값에 전적으로 의존 당신 이 필요합니다.


버퍼로 저글링

set wildcharm=<C-z>
nnoremap <leader>b :buffer <C-z><S-Tab>
nnoremap <leader>B :sbuffer <C-z><S-Tab>

위의 매핑은 빈 프롬프트와 함께 “wildmenu”에서 사용 가능한 버퍼를 나열하므로 메뉴를 탐색 <Tab>하거나 몇 개의 문자를 입력 한 다음 <Tab>다시 목록을 좁힐 수 있습니다. 위의 파일 매핑과 마찬가지로 프로세스는 빠르고 마찰이 거의 없습니다.

nnoremap <PageUp>   :bprevious<CR>
nnoremap <PageDown> :bnext<CR>

이러한 매핑은 스스로를 말합니다.


태그로 저글링

nnoremap <leader>j :tjump /

이 매핑은 전체 단어 검색 대신 정규식 검색을 사용하므로 ,jba<Tab>태그를 찾을 수 있습니다 foobarbaz().

예, 퍼지 매칭은 중독성이 있지만 그것 없이도 생산성을 높일 수 있습니다. 그리고 비용의 일부로.


더 많은 편집

몇 가지 추가 팁 / 트릭…


Wildmenu 옵션

으로 활성화 된 “wildmenu” set wildmenu는 파일 / 버퍼 탐색을 더 쉽게 만듭니다. 그 동작은 조사 할 가치가있는 여러 옵션에 의해 결정됩니다.

wildmode Vim에게 “와일드 메뉴”의 작동 방식을 알려줍니다.

set wildmode=list:full

wildignore 모든 잔해를 걸러냅니다.

set wildignore=*.swp,*.bak
set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
set wildignore+=tags
set wildignore+=*.tar.*

wildignorecase다음을 검색 foo하고 찾을 수 있습니다 Foo.

set wildignorecase

파일 마크

augroup VIMRC
  autocmd!

  autocmd BufLeave *.css  normal! mC
  autocmd BufLeave *.html normal! mH
  autocmd BufLeave *.js   normal! mJ
  autocmd BufLeave *.php  normal! mP
augroup END

최근에 다른 사람의 ~/.vimrc. 버퍼를 떠날 때마다 커서의 정확한 위치에 파일 표시를 생성하여 어디에 있든 'J편집 한 최신 JavaScript 버퍼로 이동합니다. 대박.


답변

대답은 귀하의 선호도와 상황에 따라 크게 달라집니다. 몇 가지 예 :

  • 대부분 두 개의 파일 (예 : C 헤더 및 구현 파일) 인 <C-^>경우 매우 편리합니다. 일반적으로 대체 파일 은 중요한 개념입니다.
  • 큰 편집기 창을 사용하는 경우 창은 창 :split을 찾는 데 버퍼를 찾는 문제를 해결합니다 (모든 버퍼가 열리면). [N]<C-w><C-w>빠르게 전환하는 데 사용할 수 있습니다 .
  • (몇 가지) 버퍼 번호를 기억할 수 있다면 :[N]b[uffer]:[N]sb[uffer]명령이 매우 편리합니다. :ls숫자를 알려줍니다.

플러그인 (또는 적어도 사용자 정의 매핑)은 많은 것을 개선 할 수 있으며 vim.org 에서이 주제에 대한 전체적인 다양성이 있습니다 . 구성 (Pathogen + GitHub, Dropbox, …)을 배포하는 다양한 메커니즘이 있으며 Vim과 함께 제공 되는 netrw 플러그인을 통해 서버 파일을 원격으로 편집 할 수 있습니다.


답변

때로는 파일 목록을 순차적으로 살펴 보는 것도 편리합니다 (예 : vim *.php한 번에 여러 파일을 여는 것과 같은 작업 을 수행 한 경우). 그럼 당신은 사용할 수 있습니다 :n[ext](물론 :prev[ious], :fir[st]:la[st]) (다른 답변에서 제안 된 것 외에) 탐색을위한.


답변

플러그인없이 명령 줄에서 와일드 카드 탭 완성을 수행 할 수 있습니다. 예 :

:e src/**/foo*<tab>

./src 아래의 디렉토리 트리에서 ‘foo’로 시작하는 모든 파일을 순환하고 편집 할 파일을 선택할 수 있습니다.

이미 파일을 편집했고 여전히 버퍼에있는 경우 다음을 사용하여 파일로 전환 할 수 있습니다.

:b foo<tab>

경로에 ‘foo’가있는 모든 버퍼를 순환합니다. 원하는 동작을 얻으려면 wildmode 및 wildmenu 옵션을 설정해야 할 수 있습니다. 나는 가지고있다

wildmode=longest:full
wildmenu

내 .vimrc.


답변

파일 이름에 있고 해당 파일로 이동하려는 경우에서 자동으로 gf수행합니다. 나는 또한 플러그인이 아닌 ctags 사용하는 것을 좋아합니다 . 태그를 작성하기 만하면 코드베이스를 쉽게 이동할 수 있습니다.


답변

vim 편집기에서 파일 사이를 전환하려면 아래 답변을 참조하십시오.

Esc편집 모드를 종료하려면 먼저 키를 누릅니다 .

그런 다음 입력 :e하여 현재 파일 경로를 확인하십시오.

다른 파일로 이동 :e /path-of-file.txt/하려면 이것을 사용하여 입력 하면 전환 할 수 있습니다.

이전 파일로 이동 :e#하려면 이전 파일 경로로 전환 할 스위치를 입력하기 만하면 됩니다.


답변

Vim과 같은 문제가있었습니다.

내가 원하는 마지막 것은 파일 전환과 같은 평범한 작업을 플러그인에 의존하는 것입니다.

다음 줄을 추가했습니다. .vimrc

set path+=**
set wildmenu

그리고 BAM! 이제 :find any/filename/in/any/folder/vim이 프로젝트의 루트 디렉토리에 있으면 할 수 있습니다 . 탭 완성이 작동합니다. 와일드 카드가 작동합니다!

파일이 이미 열리고 백그라운드에 수많은 버퍼가 있으면 ( :ls모든 버퍼를 보는 데 사용할 수 있음 ) 실행 :b any/file <TAB>하면 모든 버퍼를 퍼지 검색하고 필요한 파일로 이동합니다. 고유하지 않은 경우 탭을 사용하여 선택할 수있는 탭 의 와일드 메뉴 (따라서 .vimrc의 두 번째 줄)가 있습니다.

내 대답은이 멋진 비디오에서 나옵니다.
https://www.youtube.com/watch?v=XA2WjJbmmoM&feature=youtu.be&t=489
더 많은 트릭이 있으며 시청하는 것이 좋습니다.