ทางลัดเพื่อเปิดไฟล์ใน Vim


123

ฉันต้องการเปิดไฟล์ใน Vim เช่นใน Eclipse โดยใช้Ctrl+ Shift+ Rหรือผ่านตัวเลือกCtrl+ Nของการป้อนอัตโนมัติ เรียกใช้แป้นพิมพ์ลัดพิมพ์ชื่อไฟล์ / รูปแบบและเลือกจากชื่อไฟล์ที่ตรงกันทั้งหมด

ฉันรู้ว่าการเปิดมันตามปกติเช่น:

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

ปัญหาคือฉันต้องระบุเส้นทางไฟล์ทั้งหมดในกรณีเหล่านี้


1
โปรดทราบว่าคำสั่งที่แนะนำมีผลแตกต่างกัน:tabeจะเปิดไฟล์ในแท็บใหม่:newจะแบ่งหน้าต่างในแนวนอนและ:editจะปิดไฟล์ปัจจุบันก่อนที่จะเปิดไฟล์ใหม่
Skippy le Grand Gourou

คำตอบ:


61

ฉันเพิ่งตกหลุมรักกับfuzzyfinder.vim ... :-)

: FuzzyFinderFileจะให้คุณเปิดไฟล์โดยพิมพ์ชื่อหรือรูปแบบบางส่วน


141

สิ่งที่ฉันทำตามปกติคือe .(e-space-dot) ซึ่งทำให้ฉันมีไดเร็กทอรีปัจจุบันที่สามารถเรียกดูได้จากนั้นฉันก็สามารถ/ค้นหาส่วนชื่อได้เช่นเดียวกับการค้นหาคำในไฟล์ข้อความ ฉันพบว่าโดยทั่วไปดีเพียงพอเรียบง่ายและรวดเร็ว


22
คุณไม่ต้องการพื้นที่ช่วยประหยัดเวลาในการพิมพ์เพิ่มอีก 25% ( :e.).
Konrad Rudolph

67
คุณไม่จำเป็นต้องใช้จุดหากคุณใช้ตัวพิมพ์ใหญ่เช่น E <ENTER>
Andriy Drozdyuk

2
@drozzy สิ่งนี้เกิดขึ้นกับ vim :-)
DerMike

7
มีความแตกต่างในลักษณะการทำงานระหว่าง:e.และ:Eแม้ว่า: ถ้าไฟล์ปัจจุบันได้รับการแก้ไขและยังไม่ได้บันทึกไฟล์เดิมจะบ่น (เหมือน:edit) เนื่องจาก "ไม่มีการเขียนตั้งแต่การเปลี่ยนแปลงครั้งล่าสุด" ในขณะที่ไฟล์หลังจะแบ่งหน้าต่างในแนวนอน (เช่น:new) เพื่ออนุญาตให้เปิดไฟล์ใหม่ (ในขณะที่ทั้งสองจะแทนที่ไฟล์ปัจจุบันด้วยไฟล์ใหม่หากไม่ได้รับการแก้ไข (เช่น:edit))
Skippy le Grand Gourou

1
หากคุณเปิดไฟล์จากนั้นแทนที่ด้วยไฟล์ที่สองคุณสามารถกลับไปที่ไฟล์แรกโดยใช้ "e #"
dkretz

33

:find เป็นอีกทางเลือกหนึ่ง

ฉันเปิดกลุ่มจากรากของโปรเจ็กต์ของฉันและ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 จำหน่าย

ช่วยให้คุณค้นหาไฟล์ในไดเร็กทอรีปัจจุบันเปิดบัฟเฟอร์หรือไฟล์ที่ใช้ล่าสุดโดยใช้ "การจับคู่แบบคลุมเครือ" หรือนิพจน์ทั่วไป


1
จริงๆแล้วฉันใช้มันเป็นส่วนหนึ่งของการแจกแจงของเจนัส
Alexey

CtrlP repo เดิมไม่ได้ใช้งาน แต่มีส้อมที่ใช้งานอยู่
jpyams

12

เว้นแต่ฉันจะขาดอะไรไป: e filename เป็นวิธีที่เร็วที่สุดที่ฉันพบ

คุณสามารถใช้แท็บเพื่อเติมชื่อไฟล์อัตโนมัติได้เช่นกัน


@dirkgently มันคือ. ยังคงเป็นทางลัดตามที่ชื่อของคำถามนี้แนะนำ แต่ฉันไม่คิดว่าเป็นสิ่งที่ผู้ถามกำลังมองหา
strager

สำหรับฉันการเติมข้อความอัตโนมัติของแท็บใช้ไม่ได้กับ: e. นอกจากนี้คุณไม่ต้องการค้นหาชื่อไฟล์ที่ขึ้นต้นด้วยบางสิ่งเสมอไป แต่ให้ค้นหาคำกลางในชื่อไฟล์
Andriy Drozdyuk


9

ฉันใช้ทางลัดสองสามทางในไฟล์. vimrc ของฉัน (ไวยากรณ์ที่แน่นอนด้านล่าง)

โดยอ้างอิงจากข้อเท็จจริงที่ว่าใน 90% ของกรณีนี้ฉันต้องการเปิดไฟล์อื่นในไดเร็กทอรีเดียวกับไฟล์ที่ฉันกำลังแก้ไขอยู่หรือในไดเร็กทอรีที่อยู่ใกล้กันมากในลำดับชั้นของไฟล์ที่แก้ไขนั้น

นี่คือสิ่งที่คำสั่งทำ:

,cd : เปลี่ยนไดเร็กทอรีการทำงานปัจจุบันเป็นไดเร็กทอรีที่ไฟล์ปัจจุบันที่คุณกำลังแก้ไขอยู่

,e: เปิดไฟล์ที่มีไดเร็กทอรีการทำงานปัจจุบันที่กรอกไว้แล้วดังนั้นคุณต้องระบุเฉพาะชื่อไฟล์

ใส่สิ่งเหล่านี้ลงใน. vimrc ของคุณ:

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

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

นี่คือลำดับเหตุการณ์:


  1. คุณกำลังแก้ไขไฟล์ชื่อ test.java ใน "/ home / prog"
  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

ใช้แท็บพวกมันทำงานเมื่อป้อนเส้นทางไฟล์ในโหมดหลบหนีเป็นกลุ่ม!


4

หากคุณมีแท็ก (และคุณควร) คุณสามารถเปิดไฟล์จากบรรทัดคำสั่งโดยใช้ชื่อของคลาสหรือวิธีการหรือฟังก์ชัน c โดยมี "vim -t DBPlaylist" และภายในกลุ่มด้วย ": tag ShowList "


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

หรือหากคุณมีไฟล์ในไดเร็กทอรีที่ต้องการเปิดอยู่แล้วคุณสามารถใช้%ชวเลขสำหรับชื่อไฟล์ปัจจุบันและตัดแต่งลงในไดเร็กทอรีปัจจุบันโดยใช้:hmodifier ( :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

และเช่นเดียวกับที่คนอื่น ๆ กล่าวไว้คุณสามารถเติมชื่อไฟล์ด้วยแท็บในบรรทัดเก่าได้ (ดู:help cmdline-completionข้อมูลเพิ่มเติม)


4

นี้ไม่ได้ว่าสิ่งที่คุณกำลังมองหา แต่เป็นเรื่องที่ดีในหลาย ๆ กรณี ( แต่ไม่ใช่ทั้งหมด)

หากคุณ VIM เปิดขึ้นและมีชื่อไฟล์ในบัฟเฟอร์คุณสามารถวางเคอร์เซอร์ไว้ที่ชื่อไฟล์และประเภทgfนั้นได้ ซึ่งจะเปิดไฟล์ที่มีชื่ออยู่ใต้เคอร์เซอร์ในบัฟเฟอร์เดียวกัน มันเหมือนกับ

:e CTRL+r CTRL+w


1
ฉันกด gf และตอนนี้ฉันได้เปิดไฟล์ใหม่ซึ่งอยู่ภายใต้เคอร์เซอร์ ทีนี้จะกลับมาเป็นไฟล์เดิมได้อย่างไร. !!
vrbilgi

@ user430294: เปิดในบัฟเฟอร์อื่น ใช้:b oldname
Nathan Fellman

@vrbilgi ใช้ Ctrl + o เพื่อกลับไปยังไฟล์ที่แก้ไขก่อนหน้านี้ ใช้ Ctrl + i เพื่อไปข้างหน้าอีกครั้งไปยังไฟล์ที่คุณกลับมา
Беров

3

ฉันรู้จักปลั๊กอินสามตัวที่อนุญาตให้เปิดไฟล์รองรับการเติมข้อความอัตโนมัติและไม่จำเป็นต้องป้อนชื่อพา ธ เต็มของไฟล์เพื่อเปิด (ตราบใดที่ไฟล์นั้นอยู่ภายใต้ไดเร็กทอรีจาก&pathตัวเลือก vim) :

เมื่อเร็ว ๆ นี้ฉันได้เห็นปลั๊กอินอื่นที่มีคุณสมบัติคล้ายกัน แต่ฉันจำชื่อไม่ได้

เร็ว ๆ นี้: find น่าจะรองรับการเติมข้อความอัตโนมัติ - แพตช์ในหัวข้อนี้กำลังแพร่กระจายอยู่ในรายชื่ออีเมล vim_dev ในปัจจุบัน


1
  • คุณสามารถใช้ (ตั้งค่าเมนูป่า)
  • คุณสามารถใช้แท็บเพื่อเติมชื่อไฟล์อัตโนมัติ
  • คุณยังสามารถใช้การจับคู่เช่น e p*.datหรืออะไรทำนองนั้น (เช่นใน 'dos ​​เก่า)
  • คุณยังสามารถ: เรียกดูยืนยัน e (สำหรับหน้าต่างกราฟิก)

  • แต่คุณควรระบุด้วยว่าคุณกำลังใช้ vim เวอร์ชันใดและสิ่งนั้นใน emacs ทำงานอย่างไร บางทีเราอาจพบคุณเป็นกลุ่มทางเลือกที่แน่นอน


1

FuzzyFinder ได้รับการกล่าวถึง แต่ฉันชอบ textmate เหมือนพฤติกรรมของปลั๊กอินFuzzyFinderTextmateซึ่งขยายพฤติกรรมเพื่อรวม subdirs ทั้งหมด

ตรวจสอบให้แน่ใจว่าคุณใช้ fuzzyfinder.vim เวอร์ชัน 2.16 - เวอร์ชันที่สูงกว่าจะทำลายปลั๊กอิน


1

ด้วยซีแท็กที่อุดมสมบูรณ์คุณสามารถสร้างไฟล์แท็กด้วยข้อมูลไฟล์:

ctags --extra=+f -R *

จากนั้นเปิดไฟล์จาก VIM ด้วย

:tag filename

คุณยังสามารถใช้<tab>เพื่อเติมชื่อไฟล์อัตโนมัติ


1

ใน GVIM ไฟล์สามารถเรียกดูได้โดยใช้กล่องโต้ตอบเปิด / อ่าน / เขียน

:browse {command}

{command} - เปิด / อ่าน / เขียน

เปิด - เปิดอ่านไฟล์ - ต่อท้ายการเขียนไฟล์ - กล่องโต้ตอบ SaveAs


0

ฉันติดตั้ง FuzzyFinder อย่างไรก็ตามข้อ จำกัด คือพบเฉพาะไฟล์ใน dir ปัจจุบันเท่านั้น วิธีแก้ปัญหาอย่างหนึ่งคือการเพิ่ม FuzzyFinderTextmate อย่างไรก็ตามจากเอกสารและคำอธิบายนั้นไม่ได้ผลอย่างน่าเชื่อถือ คุณต้องการ FuzzyFinder เวอร์ชันที่ถูกต้องและคุณต้องการสำเนาของ Vim เพื่อรวบรวมด้วยการสนับสนุน Ruby

วิธีแก้ปัญหาอื่นที่ฉันกำลังพยายามทำอยู่ตอนนี้คือการเปิดไฟล์ทั้งหมดที่ฉันน่าจะต้องการเมื่อเริ่มเซสชันการแก้ไข เช่นเปิดไฟล์ทั้งหมดในไดเรกทอรีหลัก ...

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

(ซึ่งหมายความว่าฉันอาจจะมีไฟล์จำนวนมากที่เปิดอยู่อย่างไรก็ตามจนถึงตอนนี้ก็ยังใช้งานได้ดี)

หลังจากนั้นฉันสามารถใช้ FuzzyFinder ในโหมดบัฟเฟอร์และมันจะทำหน้าที่เหมือนcommand-oทางลัดของ TextMate ...

:FuzzyFinderBuffer

แน่ใจนะ? ฉันมี config บางอย่างใน. vimrc ของฉันให้มองหา "g: fuf_abopsisMap" ฉันต้องพบตัวอย่างในเอกสาร เมื่อฉันพิมพ์ทางลัดฉันก็พิมพ์ตัวย่อเช่น "web:" แล้วมันจะค้นหาไฟล์ทั้งหมดในโฟลเดอร์ที่ฉันเลือก จริงๆแล้วปัญหาของฉันคือด้วยเหตุผลบางประการที่ไม่สามารถเปิดไฟล์ได้อีกต่อไปฉันจึงเห็น [NEW DIRECTORY] ในแถบสถานะแทน แต่ฉันมีปัญหาเดียวกันกับ: o ดูเหมือนจะไม่เกี่ยวข้องกับ fuf
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.