새 탭을 기본값으로 여는 방법은 무엇입니까?


10

vim여러 파일 ( vim f1 f2 ...)로 열 때 어떻게 사용하지 않고 탭에서 직접 열 수 -p있습니까?

쉘 동작을 vim 동작과 분리하고 vim기반 별칭을 제거하는 등을 찾고 있습니다. 따라서 별칭 등을 사용하지 않는 것이 좋습니다 (따라서 no -p).

나는 이것이 하나의 SE 사이트 (예 : SO ) 에서 요청되었다고 확신합니다 . 그러나이 작업을 수행하는 가장 좋은 방법을 판단 할 수있는 입장이 아니므로 제안 된 방법이 좋은 이유에 대한 메모를 원합니다.

링크 된 특정 SO 게시물의 경우 :

  • 허용 된 답변은 tabpagemax=9999. 그것을 개인적인 편견이라고 부르지 만, 한계가 많이 설정되어 있고 무언가 잘못되었다고 생각합니다 (보았을 때 느끼는 방식 chmod 777).

    :au VimEnter * set tabpagemax=9999|sil tab ball|set tabpagemax&vim
    
  • 다른 대답은 훨씬 더 간결하면서 빈 탭이 추가로 열립니다.

    :autocmd VimEnter * argdo tabedit
    

추가 탭이 열리지 않고 큰 값으로 제한을 설정하지 않는 답변을 원합니다 (또는 왜 나쁜 것이 아닌지 설명하십시오).



@OrangeTux 나는 Gilles의 답변 정신에 게시했습니다. 그러나 downvote와 함께 Gilles가 기존 게시물과 연결된 게시물에 대해 어떻게 말할지 궁금합니다.
muru

@Carpetsmoker 댓글 업데이트가 없습니다. 빈 탭은 세션이 :qa습관에 의해 끝나는 경향이있을 때 큰 문제가되지 않습니다 . 그것이 다른 하나와 함께 갈 수있는 유일한 이점이라면 그것이 더 단순 해 보이기 때문입니다.
muru

3
@muru WWGS? 스택 오버플 로 에 대한 답변 이 만족스럽지 않다고 생각할 이유가 있습니까? 그렇다면 질문에 설명하십시오. 어쨌든 질문에 대한 답변을 요약하십시오. 그로 인해 답변이 포함 된 질문이 있으면 게시하지 마십시오.
Gilles 'SO- 악마 그만'

@Gilles 업데이트. 실제 명령을 게시하지 않았습니다. 어떻게해야한다고 생각하십니까?
muru

답변:


4

실험을 한 후에 이것이 최선의 방법이라는 것을 알았습니다. 다음과 동일하게 작동해야합니다 vim -p.

au VimEnter * if !&diff | tab all | tabfirst | endif

먼저 tab all인수 목록 ( :args) 의 모든 항목을 탭 에서 엽니 다 . 인수 목록은 시작할 때 Vim에 전달한 파일 목록입니다. 그리고 tabfirst첫 번째 탭이 마지막 탭이 아닌 초점이 맞도록합니다 (선택 사항).

우리는 하지 않는 경우이 중 하나를 수행 &diff집합이다; 이 경우, 우리는 사용하고 vimdiff또는 vim -d우리가 여기서 원하는 2 창, 그리고 2 개의 탭을 가지고.

에서 이 대답 또한 인수 목록에 대해 조금 작성한 tab all관심이있을 수 있습니다.


다른 솔루션에 대한 참고 사항 :

  • tab ball인수 목록이 아닌 버퍼 목록의 모든 항목에 대한 탭을 엽니 다 . 은 "문제는"(경우 버퍼 목록 종료에 viminfo 파일에 저장하고, 시작시 복원 할 수 있다는 것이다 %'viminfo'기본적으로 사용되지 않습니다). 입력 만하면 vim해당 파일이 열립니다. 나는 이것이 바람직하지 않다고 생각하지만 일부 사람들은 그것이 유용하다고 생각할 수있다. 원하는 것을 사용하십시오.

  • set tabpagemax=9999필요하지 않습니다; 기본값은 10입니다. 이것은 괜찮습니다. 더 많은 것을 원한다면 vimrc에서 이것을 늘릴 수 있지만 9999어리석은 숫자입니다. 를 사용 -p하면 tabpagemax탭도 있습니다. 따라서이를 존중해야합니다. 시작시 버퍼가 열리므로 (읽기) 속도가 느립니다.

  • autocmd VimEnter * argdo tabedit그냥 같은 말입니다 tab all. 그러나 초기 버퍼는 지워지지 않으므로 추가 탭이 남아 있습니다 ( tab all모든 탭을 대체 함). 이 문제를 해결하려면 Josh Petrie의 답변에서 해결 방법이 필요합니다.


2

나는 당신과 같은 것을 추가하면 .vimrc문제를 해결할 수 있다고 생각 합니다 (그러나 실제로 이것을 사용하지 않고 최소한의 테스트 만 수행하면 경우에 따라 이상한 일이 발생할 수 있음).

function! OpenArgumentsInTabs()
  ardo tabedit
  if tabpagenr("$") > 1
    tabclose
  endif
endfunction

autocmd VimEnter * call OpenArgumentsInTabs()

언급했듯이 argdo tabedit빈 추가 탭이 남습니다. 따라서 해당 탭을 자동으로 닫을 수 있습니다. 그러나, 당신은 tabclose체크되지 않은 상태로 호출 할 수 없거나 , 인수 나 단일 파일없이 그것을 시작할 때 vim은 오류를 줄 것입니다 ( "마지막 탭을 닫을 수 없습니다"). 대신 총 탭 수가 1보다 큰지 확인한 다음 (이로 $인해 tabpagenr반환 되는 원인 ) 마지막 탭을 닫아야합니다.


즉, vim의 탭이 다른 편집자의 탭과는 다르다는 것을 지적 할 가치가 있다고 생각합니다. 워크 플로우에서 탭을 사용하는 방법을 고려할 때 명심해야 할 것입니다. 스스로 독자적인 결정을 내릴 수없는 미래의 독자들에게 도움이 되길 원합니다.)

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