번호 매기기 버퍼 목록


29

한동안 프로젝트를 진행 한 후 연속 버퍼 수 사이에 큰 간격이 생겼습니다. 그 이유는 그들 사이의 버퍼가 여러 가지 이유로 지워졌 기 때문입니다. 불행히도을 입력 한 후 특정 버퍼로 이동하거나 버퍼 범위를 선택하기가 어색 할 수 있습니다 :ls. 모든 파일을 다시 열지 않고 열려있는 모든 버퍼의 번호를 다시 매기는 방법이 있습니까?

답변:


21

아니오 (버퍼를 삭제하지 않고는 아님).

Vim은 버퍼를 열면 수동으로 버퍼 번호를 할당하거나 버퍼를 다시 정렬하는 기능을 지원하지 않습니다. 철학은 각 버퍼가 해당 버퍼의 수명 동안 고정 된 식별자를 얻는다는 :ls것입니다.

그러나 인수 목록을 사용할 수 있습니다. 열려있는 모든 버퍼를 인수 목록에 넣고 모든 미해결 버퍼를 삭제 한 다음 인수 목록에서 모든 것을여십시오. 다음 명령이이를 수행합니다.

  • :argdel * (기존 인수 목록 삭제)
  • :bufdo argadd % (각 버퍼에 대해 버퍼 경로를 목록에 추가하십시오)
  • :1,1000bd (버퍼 1에서 1000을 삭제하십시오. 아마도 더 좋은 방법이 있습니다)
  • :argdo e (각 인수마다 해당 인수를 편집하십시오)

그러면 이전 버퍼를 모두 삭제할 때 vim이 열리는 여분의 빈 버퍼가 남지만 원하는 기능을 합리적으로 근사합니다. :bd여분의 버퍼 만 있으면됩니다.


1
당신의 대답은 '아니요'라고 말하지만, 그것은 잘 작동하는 것 같습니다!
aharris88

(파일을 다시 열지 않고는 할 수 없다는 의미에서 "아니오"를 의미했습니다.) 실제로 1부터 번호가 다시 매겨 집니까? 처음 시도했을 때 그랬다고 생각했지만 지금은 다시 번호가 매겨 지지 않습니다 .

그래, 그것은 나를 위해 번호를 매 깁니다.
aharris88

그래, 난 멍청 해 내 실수를 찾았 어

"각 버퍼는 해당 버퍼의 수명 동안 고정 된 식별자를 얻습니다"실제로 세션!

14

"버퍼 번호가 미쳤어" 말해봐! 하루가 끝날 무렵에는 100 개가 넘는 버퍼가 있습니다. 다행히도이 애니메이션에서 볼 수 있듯이 tab버퍼 이름 을 완성했습니다.

적중 : b se <Tab>

따라서 버퍼 번호를 다시 매길 수 없지만 여전히 쉽게 이동할 수 있습니다.

애니메이션에서 분명한지 모르겠지만 "탭 완성"은 명령 줄 탭 완성과 다릅니다. "모호함 해결 탭 대체 기"와 비슷합니다. 명령 줄에 입력 sctab한 다음 setabvim이 'se'검색을 수행하고 첫 번째 (및 유일한) 일치로 바꿉니다. 내가 입력 testtab하면 'generate_test_data.py'와 일치하고 tab다시 'scripts / setup_test_data.sh'와 일치 한 다음 tab다시 순환됩니다.

요점은 단순히 :b <minimum amount of unambiguous characters>tab원하는 문서로 이동하기 위해 입력하는 습관을들이 는다는 것 입니다. "내 버퍼는 1 : foo 2 : bar 3 : etc"를 기억하는 것보다 이것이 더 낫다고 생각합니다. 이것은 초보자 일 때 사용했던 방식입니다.


7

vim-airline을 이용할 수 있습니다. 이 플러그인에는 문제를 해결할 수있는 동작이 있습니다.

airline.txt의 470-479 행 참조

버퍼 번호는 변경되지 않지만 탭에서 행 번호로 왼쪽에서 오른쪽으로 버퍼를 선택할 수 있습니다. 이것은 다음의 항공사 설정입니다 .vimrc.

"set airline 
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#tab_nr_type = 1 " tab number
let g:airline#extensions#tabline#show_tab_nr = 1
let g:airline#extensions#tabline#formatter = 'default'
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#fnametruncate = 16
let g:airline#extensions#tabline#fnamecollapse = 2

let mapleader=","

let g:airline#extensions#tabline#buffer_idx_mode = 1

nmap <leader>1 <Plug>AirlineSelectTab1
nmap <leader>2 <Plug>AirlineSelectTab2
nmap <leader>3 <Plug>AirlineSelectTab3
nmap <leader>4 <Plug>AirlineSelectTab4
nmap <leader>5 <Plug>AirlineSelectTab5
nmap <leader>6 <Plug>AirlineSelectTab6
nmap <leader>7 <Plug>AirlineSelectTab7
nmap <leader>8 <Plug>AirlineSelectTab8
nmap <leader>9 <Plug>AirlineSelectTab9

내 탭 라인 : 내 탭 라인


놀랄 만한! 나는 그것을 좋아한다 :)
Blasco

질문에 대한 대답은 아니지만 미친 버퍼 번호로 문제를 해결합니다. 그냥 만 표시 buffer_numbers에 추천 : switch_buffers_and_tabs=1buffer_idx_mode=0
칼리 가리

6

설명서에 따르면 버퍼 번호는 절대 바뀌지 않습니다.

    Each buffer has a unique number.  That number will not change,
    so you can always go to a specific buffer with ":buffer N" or
    "N CTRL-^", where N is the buffer number.

버퍼 번호를 다시 매길 수있는 유일한 방법은 vim을 다시 시작하는 것입니다.


0

오래된 질문이지만 Google 검색에서 맨 위에 나오므로 나중에 검색 할 수 있도록 여기에 남겨 두겠습니다. 브루노가 제안했듯이, 버퍼리스트를 지원하는 퍼지 파인더가 갈 길입니다. 나는 개인적으로 fzf-vim을 사용하고 추천 합니다. :FZFBuffers다음과 같은 명령을 제공합니다 .

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

버퍼 번호는 필요할 경우 왼쪽에 표시되지만 퍼지 파인더를 사용하면 다시 사용할 필요가 없습니다. 파일 이름의 일부만 기억하면 보통 2-5 번의 키 스트로크가 발생합니다. 개인적 으로이 명령을 키 입력에 매핑했으며 버퍼 간 전환이 거의 즉각적입니다!

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