활용 - 맥 vim 사용법




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

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

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

:n
:prev

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

:args

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

:n test.pl

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

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

https://code.i-harness.com


목록

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

: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을 사용하기 시작했을 때 탭이 다른 창 레이아웃으로 사용되어야한다는 것을 알지 못했으며 버퍼는 여러 파일 편집 / 서로 전환하는 역할을합니다. 실제로 처음 탭에서는 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는 그것에 약간의 문제가있다).하지만 나는 생각하는 버퍼 내의 모든 파일들과 함께 살 수있다.


osx에서 탭을 클릭하고 싶다면 MouseTerm과 SIMBL ( here 에서 가져옴)을 사용 here . 또한이 관련 토론을 확인하십시오.


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

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

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

NERDtree

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

Nerdtree

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

vim-plug

Vundle


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

: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 레지스터를 비롯하여 레지스터의 현재 내용을 볼 수 있습니다. 이는 이전에 삭제 한 텍스트를 다시 사용하려는 경우 특히 유용합니다.


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


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

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

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

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

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

nmap <CR> :CtrlPBuffer<CR>

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


상황은 :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/*

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

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

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


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

"분할 창

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


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

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

나는이 방법으로 내 Mac과 Linux 컴퓨터에서 모두 작동하며, Mac에서 제공되는 기본 창 분할 메커니즘보다 더 좋습니다. 나는 전환이 더 쉽고 tmux만이 동일한 맥 디렉토리에서 새로운 페이지를 얻을 수 있었다는 사실을 발견했다. (같은 디렉토리에 새로운 창을 여는 옵션이있는 것 같지만) 놀랍게 중요한 작품. 현재 위치의 새로운 창은 놀랍도록 유용합니다. 두 운영체제 모두에 대해 동일한 키 콤보로 새로운 창을 작성하는 방법은 나에게 중요하며 향후 개인적 호환성을 위해 모두에게 보너스가됩니다. 여러 개의 tmux 창을 제외하고 여러 탭을 사용해 보았습니다. 및 여러 개의 새 창 (예 : 궁극적으로 필자는 여러 개의 tmux 패널이 나를 위해 가장 유용하다는 것을 알게되었습니다. 나는 아주 '시각적'이고 내 앞에서 다양한 컨텍스트를 유지하기를 원합니다. 서로 연결되어 있습니다.

tmux는 이전 screen 에서는 볼 수 없었던 수평 및 수직 창도 지원합니다 (mac의 iterm2가 지원하지만, 현재 디렉토리 설정이 나에게 도움이되지 못함). tmux 1.8


이 스레드의 답변 대부분은 평범한 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>
    

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

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

개요:

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

저는 GVim과 명령 행 vim에 대해 동일한 .vimrc 파일을 사용합니다. 저는 GVim의 탭과 vim 커맨드 라인의 버퍼를 사용하는 경향이 있습니다. 따라서 .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

이렇게하면 H와 L의 기존 매핑이 손상되지만 파일을 매우 빠르고 쉽게 전환 할 수 있습니다. 다음에 "H"를 누르고 이전에 "L"을 누르십시오. 탭 또는 버퍼를 사용하든 관계없이 원하는 결과를 얻을 수 있습니다.


커맨드 라인과 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 내장 명령 만 사용하는 경우, 여러 버퍼 사이를 전환하는 가장 좋은 방법은 다음과 같습니다.

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

:ls:b 명령 - 열린 모든 버퍼를 나열하고 버퍼를 전환하라는 명령을 입력하기를 기다리고 있습니다.

vimrc에서 위의 매핑을 감안할 때 <Leader>f 를 입력하면,

  • 열려있는 모든 버퍼가 표시됩니다.
  • 할 수있는 일 :
    • 23 을 입력하여 버퍼 23 으로 이동하고,
    • 대체 / MRU 버퍼로 이동하려면 # 을 입력하고,
    • 파일의 부분 이름을 입력하고 <Tab> 또는 <Ci> 를 입력하여 자동 완성을 수행합니다.
    • 또는 <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 제안 set hidden . 참고 :help 'hidden' .







vi