플러그인을 사용하지 않는 바닐라 Vim으로 제한하는 것은 에디터의 능력을 제한한다는 것을 이해합니다.하지만 자주 다른 컴퓨터로 전환하기 때문에 내 환경을 모든 곳으로 옮기는 것이 너무 많은 문제가되는 경우가 많습니다. 바닐라 빔에 머물고 싶어요.
저를 방해하는 것은 파일간에 빠르게 전환 할 수있는 기능입니다. 나는 (적어도 생각)의 좋은 이해가 버퍼 , 창 , 탭 ,뿐만 아니라 netrw를 ( Vex
, Ex
, 등).
그러나 같은 편집기에서 숭고한 텍스트 , 난 그냥 입력 할 수 있습니다 ctrl– p즉시 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
더 많은 트릭이 있으며 시청하는 것이 좋습니다.