Vim에서 파일 열기 바로 가기


123

Ctrl+ Shift+ R를 사용하거나 자동 채우기 의 Ctrl+ N옵션을 사용하여 Eclipse에서와 같이 Vim에서 파일을 열고 싶습니다 . 키보드 바로 가기를 호출하고 파일 이름 / 패턴을 입력 한 다음 일치하는 모든 파일 이름 중에서 선택합니다.

나는 그것을 정상적으로 여는 것을 안다.

:tabe <filepath>
:new <filepath>
:edit <filepath>

여기서 문제는 이러한 경우 전체 파일 경로를 지정해야한다는 것입니다.


1
제안 된 명령의 효과 :tabe가 다르면 새 탭에서 파일을 열고 :new창을 가로로 분할 :edit하며 새 파일을 열기 전에 현재 파일을 닫습니다.
Skippy le Grand Gourou

답변:



141

내가 일반적으로하는 일은 e .(e-space-dot) 탐색 가능한 현재 디렉토리를 제공하는 것입니다. 그러면 /텍스트 파일에서 단어를 찾는 것처럼 이름 조각을 검색 할 수 있습니다 . 일반적으로 충분하고 간단하며 빠릅니다.


22
공간이 필요하지 않으므로 추가로 25 %의 타이핑을 절약 할 수 있습니다. ( :e.).
Konrad Rudolph

67
대문자 e를 사용하는 경우 점이 필요하지 않습니다. 예 : : E <ENTER>
Andriy Drozdyuk

2
@drozzy이 :-) 정력에 발생
DerMike

7
사이의 행동에 차이가 :e.하고 :E있지만 : 현재 파일을 편집하고 아직 저장하지 않은 경우, 전자는 (같은 불평 :edit후자는 수평으로 창을 분할 할 때, 때문에 "마지막 변경 이후로 쓰기"의 ()와 같은 :new)를 사용하여 새 파일을 열 수 있습니다 (예 : 수정되지 않은 경우 둘 다 현재 파일을 새 파일로 대체 :edit함).
Skippy le Grand Gourou

1
파일을 연 다음 두 번째 파일로
바꾸면

33

:find 또 다른 옵션입니다.

내 프로젝트의 루트에서 vim을 열고 path거기에 설정합니다.

그런 다음 다음을 사용하여 트리의 아무 곳에 나있는 파일을 열 수 있습니다.

:find **/filena< tab >

탭은 다양한 경기를 통해 자동 완성됩니다. ( **경로를 통해 재귀 적으로 검색하도록 지시합니다).


:find작업 디렉토리에 상대적인 경로를 가져 오기 때문에 유용하지 않습니다 . 질문 및 @romainl 답변은 stackoverflow.com/questions/28224168/…을 참조하십시오 . 작업 디렉토리에 상대적인 경로를 더 쉽게 얻기 위해 더 흥미로운 @strager 대답을 찾습니다.
ziiweb

25

다음을 사용하여 현재 경로에서 파일을 검색 할 수 있습니다 **.

:tabe **/header.h

둘 이상의 일치 항목이있는 경우 탭을 눌러 다양한 완료를 확인합니다.


나는 이것을 사용해 보았지만 이것은 너무 느립니다. 내 응용 프로그램이 크고 편집기가 언젠가 작동을 멈췄다는 의미입니다. 편집기 성능과 속도를 높이기위한 설정을 알고 있습니까?
Techmaddy

1
좋은 대답입니다. :tabe **/*der.h파일의 전체 이름을 기억하지 못하는 경우 와 같이 사용하십시오 .
ziiweb

16

CtrlP 플러그인 사용을 고려하십시오 .

Janus Distributive에 포함되어 있습니다.

"퍼지 일치"또는 정규식을 사용하여 현재 디렉토리, 열린 버퍼 또는 가장 최근에 사용한 파일에서 파일을 찾을 수 있습니다.


1
사실 저는 이것을 Janus 배포의 일부로 사용합니다.
Alexey

원래의 CtrlP 저장소는 비활성 상태이지만 활성 포크가 있습니다
jpyams

12

내가 뭔가를 놓치고 있지 않는 한, : e filename은 내가 찾은 가장 빠른 방법입니다.

탭을 사용하여 파일 이름을 자동 완성 할 수도 있습니다.


@dirkgently, 그렇습니다. 이 질문의 제목에서 알 수 있듯이 여전히 지름길이지만 질문자가 찾고있는 것이 아닌 것 같습니다.
strager

나를 위해 탭 자동 완성이 작동하지 않습니다. 게다가 항상 무언가로 시작하는 파일 이름을 검색하는 것이 아니라 파일 이름의 중간 단어를 검색하고 싶습니다.
Andriy Drozdyuk


9

.vimrc 파일에 몇 가지 바로 가기를 사용합니다 (아래 정확한 구문).

90 %의 경우 현재 편집중인 파일과 동일한 디렉터리 또는 해당 편집 된 파일과 계층 구조에서 매우 가까운 디렉터리에있는 다른 파일을 열고 싶다는 사실을 기반으로합니다.

명령이 수행하는 작업은 다음과 같습니다.

,cd : 현재 작업 디렉토리를 편집중인 현재 파일이있는 디렉토리로 변경합니다.

,e: 현재 작업 디렉토리가 이미 채워진 파일을 엽니 다 . 따라서 파일 이름 지정 하면됩니다 .

다음을 .vimrc에 넣으십시오.

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

다음은 일련의 이벤트입니다.


  1. "/ home / prog"에서 test.java라는 파일을 편집하고 있습니다.
  2. ,cd -> 현재 작업 디렉토리는 이제 "/ home / prog"가됩니다.
  3. ,e -> 파일 이름 만 입력 할 수 있도록 ": e / home / prog"로 확장됩니다 (예 : test.h).

  1. ,e -> ": e / home"으로 확장
  2. tab -> / home의 하위 디렉토리 순환
  3. enter-> cd원하는 디렉토리에 / home / prog
  4. ,e -> ": e / home / prog"로 확장

8

내가 뭉치 중 최고라고 생각하는 command-t도 있습니다 (그리고 나는 그들 모두를 시도했습니다). 설치하는 것은 사소한 번거롭지 만 일단 설치하면 사용하는 것이 꿈입니다.

https://wincent.com/products/command-t/


1
ctrlp.vim ( github.com/kien/ctrlp.vim )도 시도해 볼 수 있습니다 . 기본적으로 Command-T와 동일하지만 순수한 Vimscript로 작성되었습니다. (IMHO도 사용하는 것이 더 간단합니다)
datentyp

6

탭을 사용하면 vim 이스케이프 모드에서 파일 경로를 입력 할 때 작동합니다!


4

태그가있는 경우 (필요한 경우), "vim -t DBPlaylist"를 사용하여 "vim -t DBPlaylist"를 사용하여 클래스 또는 메서드 또는 c 함수의 이름으로 만 명령 줄에서 파일을 열 수 있으며 ": tag ShowList를 사용하여 vim 내에서 파일을 열 수 있습니다. ".


4

공통 디렉토리에서 파일을 편집하는 경우 :cd해당 디렉토리로 이동 한 다음 :e파일 이름에만 사용할 수 있습니다 .

예를 들면 다음과 같습니다.

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

넌 할 수있어:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

또는 원하는 디렉토리에 이미 파일이 열려 %있는 경우 현재 파일 이름에 대한 속기를 사용 하고 :h수정 자 ( :help :_%:) 를 사용하여 현재 디렉토리로 트리밍 할 수 있습니다 .

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

그리고 다른 사람들이 말한 것처럼 ex-line에서 파일 이름을 탭으로 완성 할 수 있습니다 (자세한 내용 :help cmdline-completion은 참조).


4

이것은 정확히 당신이 찾고있는 것은 아니지만 많은 경우에 좋습니다 (모두는 아니지만).

VIM을 열고 버퍼에 파일 이름이있는 경우 해당 파일 이름에 커서를 놓고 gf. 그러면 이름이 같은 버퍼의 커서 아래에있는 파일이 열립니다. 그것은

:e CTRL+r CTRL+w


1
나는 gf를 눌렀고 이제 커서 아래에있는 새 파일을 열었습니다. 이제 원본 파일로 돌아가는 방법. !!
vrbilgi 2011 년

@ user430294 : 다른 버퍼에서 열려 있습니다. 사용:b oldname
Nathan Fellman 2011 년

@vrbilgi, Ctrl + o를 사용하여 이전에 편집 한 파일로 돌아갑니다. Ctrl + i를 사용하여 이전 파일로 다시 이동합니다.
Беров

3

파일 열기를 허용하고, 자동 완성을 지원하며, 열기 위해 파일의 전체 경로 이름을 입력 할 필요가없는 세 가지 플러그인을 알고 있습니다 (파일이 &pathvim 옵션 의 디렉토리 중 하나에있는 경우 ). :

최근에 비슷한 기능을 가진 다른 플러그인을 보았지만 이름이 기억 나지 않습니다.

곧 : find는 자동 완성 기능을 지원할 가능성이 높습니다. 요즘이 주제에 대한 패치가 vim_dev 메일 링리스트에 배포되고 있습니다.


1
  • 사용할 수 있습니다 (와일드 메뉴 설정)
  • 탭을 사용하여 파일 이름을 자동 완성 할 수 있습니다.
  • 예를 들어 : e p*.dat또는 이와 유사한 것 ( 예 : old 'dos)과 같은 매칭을 사용할 수도 있습니다.
  • 당신은 또한 : 찾아보기 확인 e (그래픽 창)

  • 그러나 사용중인 vim 버전과 emacs의 작동 방식도 지정해야합니다. 정확한 vim 대안을 찾을 수있을 것입니다.


1

FuzzyFinder가 언급되었지만 모든 하위 디렉토리를 포함하도록 동작을 확장하는 FuzzyFinderTextmate 플러그인의 동작과 같은 textmate를 좋아 합니다.

fuzzyfinder.vim 버전 2.16을 사용하고 있는지 확인하십시오.-높은 버전은 플러그인을 중단합니다.


1

Exuberant ctags를 사용하면 파일 정보가 포함 된 태그 파일을 만들 수 있습니다.

ctags --extra=+f -R *

그런 다음 VIM에서 파일을 엽니 다.

:tag filename

<tab>파일 이름을 자동 완성 하는 데 사용할 수도 있습니다 .


1

GVIM에서는 열기 / 읽기 / 쓰기 대화 상자를 사용하여 파일을 찾아 볼 수 있습니다.

:browse {command}

{command}-열기 / 읽기 / 쓰기

open- 파일 읽기 열기 - 파일 쓰기 추가 -다른 이름으로 저장 대화 상자


0

FuzzyFinder를 설치했습니다. 그러나 한계는 현재 디렉토리에서만 파일을 찾는 것입니다. 한 가지 해결 방법은 FuzzyFinderTextmate를 추가하는 것입니다. 그러나 문서와 설명에 따르면 안정적으로 작동하지 않습니다. 올바른 버전의 FuzzyFinder가 필요하고 Ruby 지원으로 컴파일하려면 Vim 사본이 필요합니다.

지금 시도중인 다른 해결 방법은 편집 세션을 시작할 때 필요한 모든 파일을 여는 것입니다. 예를 들어 키 디렉토리의 모든 파일을 엽니 다.

:args app/**
:args config/**
:args test/**
etc...

(이것은 아마도 수십 개의 파일을 열었을 수도 있지만 지금까지는 여전히 정상적으로 작동하는 것 같습니다.)

그 후 버퍼 모드에서 FuzzyFinder를 사용할 수 있으며 TextMate의 command-o바로 가기 처럼 작동합니다 .

:FuzzyFinderBuffer

확실해? 내 .vimrc에 일부 구성이 있고 "g : fuf_abbrevMap"을 찾습니다. 문서에서 예제를 찾았을 것입니다. 바로 가기를 입력 할 때 "web :"과 같은 약어를 입력하면 선택한 폴더 내의 모든 파일을 조회합니다. 내 문제는 실제로 어떤 이유로 파일이 더 이상 열리지 않는다는 것입니다. 대신 상태 표시 줄에 [NEW DIRECTORY]가 표시됩니다. 그러나 나는 : o와 동일한 문제가 있으며 fuf와 관련이없는 것 같습니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.