วิธีที่มีประสิทธิภาพในการค้นหาและเปิดไฟล์อย่างลึกซึ้งในแผนผังโครงการหรือไม่


12

หากไม่มีปลั๊กอินเช่นctrlpและวิธีNERDTreeใดจะเป็นวิธีที่มีประสิทธิภาพมากที่สุดในการค้นหาและเปิดไฟล์ในแผนผังโครงการ

การตั้งค่าpathto **/*ส่งผลให้ไฟล์ที่ไม่มีประโยชน์ใน.gitและไดเรกทอรีที่ซ่อนอยู่อื่น ๆ ดังนั้นที่ดูเหมือนจะออกจากคำถาม

มีวิธีการตั้งค่าเส้นทางในลักษณะสมาร์ทเพื่อให้มีเพียงไฟล์ในgit ls-filesหรืออะไร?

คำตอบ:


24

นี่คือส่วนที่เกี่ยวข้องในการตั้งค่าของฉัน:

  • เปิดใช้งาน wildmenu

    set wildmenu
    
  • ทำให้การเติมชื่อไฟล์ข้ามไฟล์และไดเรกทอรีเหล่านี้อย่างสมบูรณ์

    set wildignore+=*.swp,*.bak
    set wildignore+=*.pyc,*.class,*.sln,*.Master,*.csproj,*.csproj.user,*.cache,*.dll,*.pdb,*.min.*
    set wildignore+=*/.git/**/*,*/.hg/**/*,*/.svn/**/*
    set wildignore+=*/min/*
    set wildignore+=tags,cscope.*
    set wildignore+=*.tar.*
    
  • ทำให้เป็นกรณี ๆ ไป

    set wildignorecase
    
  • รายการไฟล์และให้ผู้ใช้เลือกด้วย wildmenu

    set wildmode=list:full
    
  • เพิ่มไดเรกทอรีของแฟ้มปัจจุบันและทุกไดเรกทอรีภายใต้ไดเรกทอรีการทำงานกับกลุ่มของpath,

    set path=.,**
    

    คำเตือน! ตัวเลือกเส้นทางมีประโยชน์อย่างยิ่ง ค่าข้างต้น - .,**- ใช้งานได้สำหรับฉันแต่ภาษาที่ฉันใช้ไม่มีห้องสมุดมาตรฐาน ที่เหมาะสมคุ้มค่าขึ้นอยู่กับคุณความต้องการ

  • พวงของ:findการแมปตัวแปรตัวพิมพ์ใหญ่เริ่มการค้นหาจากไดเรกทอรีของไฟล์ปัจจุบันเพื่อประสิทธิภาพที่ดีขึ้น

    nnoremap ,f :find *
    nnoremap ,F :find <C-R>=expand('%:p:h').'/**/*'<CR>
    nnoremap ,s :sfind *
    nnoremap ,S :sfind <C-R>=expand('%:p:h').'/**/*'<CR>
    nnoremap ,v :vert sfind *
    nnoremap ,V :vert sfind <C-R>=expand('%:p:h').'/**/*'<CR>
    

และนี่คือลักษณะที่ปรากฏ:

:หา


1
ว้าวเหล่านี้คือการแมปและการตั้งค่าที่ยอดเยี่ยม ขอบคุณสำหรับคำตอบโดยละเอียด

3

ดู :h :command-completion-custom

เราสามารถปรับตัวอย่างสุดท้ายเพื่อเติมไฟล์ที่แสดงโดย git เท่านั้น

command! -nargs=1 -bang -complete=customlist,GitFindComplete
      \ GitFind edit<bang> <args>

function! GitFindComplete(ArgLead, CmdLine, CursorPos)
  let search_pattern = "*" . a:ArgLead . "*"
  let shell_cmd = "git ls-files " . shellescape(search_pattern)
  return split(system(shell_cmd), "\n")
endfunction

ตอนนี้คุณสามารถใช้การเติมข้อมูลอัตโนมัติเพื่อเปิดไฟล์ที่แสดงโดย git:

:GitFind ome_f<Tab>

โปรดทราบว่าในฟังก์ชั่นความสมบูรณ์แบบกำหนดเองเราต้องทำมากกว่าเพียงแค่รายการไฟล์ที่สามารถทำให้เสร็จได้ นอกจากนี้เรายังจะต้องกรองArgLeadรายการเทียบกับอาร์กิวเมนต์ commandline ปัจจุบัน ในตัวอย่างนี้เราขอgitให้ทำการกรองสำหรับเราโดยส่งผ่านอาร์กิวเมนต์ที่ห่อด้วย*อักขระตัวแทน


นี่เป็นเคล็ดลับที่ยอดเยี่ยม

1

วิธีการของฉันรวมถึงฟังก์ชั่นเปลือกต่อไปนี้ใน~/.bash_profile:

vimf() {
  vim $(find . -name $1)
}

จากนั้นเมื่อต้องการเปิดไฟล์ใด ๆ ที่อยู่ลึกลงไปในแผนผังโครงการให้พิมพ์:

vimf some_file.c
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.