คุณสมบัติแพ็คเกจ Vim8 คืออะไรและฉันควรใช้งานอย่างไร


108

Vim 8 ได้รับการปล่อยตัวในวันนี้และบันทึกประจำรุ่นระบุถึงคุณสมบัติ "แพ็คเกจ" ใหม่ มันคืออะไรและฉันควรใช้มันอย่างไร?

สิ่งสำคัญที่สุดคือมันจะแทนที่ตัวจัดการปลั๊กอินเก่าที่ดีหรือไม่?

คำตอบ:


74

แรกของทุกเอกสารที่เกี่ยวข้องที่สามารถพบได้กับ:h packagesในรุ่น Vim8 เรียบเรียงใหม่และนี่บน Github

สิ่งสำคัญอันดับแรกคือเกี่ยวกับคำศัพท์: ใน Vim8 แพ็คเกจมีการกำหนดดังนี้:

แพ็คเกจ Vim เป็นไดเรกทอรีที่มีปลั๊กอินหนึ่งรายการขึ้นไป

ซึ่งหมายความว่าผู้จัดการแพ็คเกจใหม่ถูกสร้างขึ้นเพื่อช่วยให้ผู้ใช้จัดการปลั๊กอินทั้งหมดของพวกเขาในการจัดเก็บเดียวกัน เอกสารแสดงข้อดีดังต่อไปนี้:

  • สามารถดาวน์โหลดแพคเกจเป็นไฟล์เก็บถาวรและคลายในไดเรกทอรีของตัวเอง ดังนั้นไฟล์จะไม่รวมกับไฟล์ของปลั๊กอินอื่น ๆ ทำให้ง่ายต่อการอัพเดทและลบ

  • แพคเกจสามารถเป็นคอมไพล์, Mercurial, ฯลฯ พื้นที่เก็บข้อมูล ทำให้ง่ายต่อการอัพเดท

  • แพคเกจสามารถมีหลายปลั๊กอินที่ขึ้นอยู่กับแต่ละอื่น ๆ

  • แพ็คเกจสามารถมีปลั๊กอินที่โหลดโดยอัตโนมัติเมื่อเริ่มต้นและปลั๊กอินที่โหลดเมื่อจำเป็น:packaddเท่านั้น

ดังนั้นความคิดคือการสร้างโฟลเดอร์ที่มีปลั๊กอินทั้งหมดที่มีโครงสร้างต่อไปนี้:

$HOME/.vim/pack/my-plugins/
                        start/
                            foo/
                                plugin/
                                    foo.vim
                                syntax/
                                    some.vim
                            bar/
                                plugin/
                                    bar.vim
                        opt/
                            buzz/
                                plugin/
                                    buzz.vim

ตำแหน่งของโฟลเดอร์ถูกกำหนดโดยตัวเลือกpackpath(ดู:h 'packpath')

สังเกตความสำคัญของโครงสร้างโฟลเดอร์ของคุณ:

  • startโฟลเดอร์มีปลั๊กอินซึ่งจะถูกโหลดโดยอัตโนมัติในการเริ่มต้น
  • optโฟลเดอร์มีปลั๊กอิน "ตัวเลือก" เต็มไปด้วยpackaddคำสั่ง
  • โฟลเดอร์ย่อย ( plugin, autoload, doc, ... ) เป็นคนที่คุณกำลังใช้ในปลั๊กอิน

นี่คือสรุปของโฟลเดอร์:

start/foobar/plugin/foo.vim     " always loaded, defines commands
start/foobar/plugin/bar.vim     " always loaded, defines commands
start/foobar/autoload/foo.vim   " loaded when foo command used
start/foobar/doc/foo.txt        " help for foo.vim
start/foobar/doc/tags           " help tags
opt/fooextra/plugin/extra.vim   " optional plugin, defines commands
opt/fooextra/autoload/extra.vim " loaded when extra command used
opt/fooextra/doc/extra.txt      " help for extra.vim
opt/fooextra/doc/tags           " help tags

เมื่อไฟล์เหล่านี้อยู่ในสถานที่ที่เหมาะสมในการเปิดเป็นกลุ่มจะโหลดปลั๊กอินในstartและทำให้คนที่อยู่ในที่สามารถใช้ได้กับopt:packadd


ตอนนี้คุณสมบัตินี้สามารถแทนที่ตัวจัดการปลั๊กอินที่มีอยู่ได้หรือไม่?

คำเตือน:ส่วนนี้อาจจะดื้อดึงเล็กน้อย

ฉันคิดว่าวิธีการของตัวจัดการแพ็กเกจใหม่นี้แตกต่างจากตัวจัดการปลั๊กอินที่เราคุ้นเคยเพราะมันถูกสร้างขึ้นเพื่อจัดการไฟล์เก็บถาวรหนึ่งไฟล์ (หรือหลายไฟล์) ที่มีปลั๊กอินบางตัว

ผู้จัดการแพ็คเกจไม่ได้ให้ฟีเจอร์ในการอัปเดตปลั๊กอินของคุณทีละรายการเพื่อดึงข้อมูลเหล่านั้นโดยอัตโนมัติจากที่อยู่ Github หรือเพื่อเลือกปลั๊กอินที่คุณต้องการเปิด / ปิดใช้งาน

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

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


แก้ไขตามที่แนะนำโดย @Sato Katsura นี่คือหมายเหตุเกี่ยวกับhelptagsคำสั่ง Vim8 คอมมิชชันที่แนะนำสองบรรทัดในhelptagเอกสาร :

:helpt[ags] [++t] {dir}

Generate the help tags file(s) for directory {dir}.
When {dir} is ALL then all "doc" directories in 'runtimepath' will be used.

ซึ่งหมายความว่าตัวจัดการแพคเกจใหม่ช่วยให้การสร้าง helptags ในการจัดเก็บถาวรของผู้ใช้ง่ายขึ้น ด้วยคำสั่งเดียว:helptags ALLhelptags ทั้งหมดจะถูกสร้างขึ้น


11
สรุปที่ดี ในที่สุดpackageฟีเจอร์นี้ก็มีจุดมุ่งหมายที่จะทำให้ vimballs และไดโนเสาร์ที่เกี่ยวข้องไม่สามารถแข่งขันกับผู้จัดการปลั๊กอินที่ทันสมัยได้ มันเป็นสิ่งทดแทนที่ใช้pathogenงานได้โดยที่คุณไม่ต้องพึ่งพาpathogenคุณสมบัติที่คลุมเครือมากขึ้น Vundleมันทำให้ความพยายามที่จะเข้ามาแทนที่ไม่มีการพูด แนวคิดของแพ็คเกจเป็นชุดของปลั๊กอินนั้นคำนึงถึงและอาจเป็นประโยชน์ แต่ฉันกลัวว่าจะไม่มีใครใช้เพราะผู้จัดการปลั๊กอินที่ทันสมัยไม่รองรับมัน และผู้จัดการปลั๊กอินจะไม่สนับสนุนเพราะไม่มีใครใช้มัน มันเป็นปัญหาของไก่และไข่
Sato Katsura

2
ไม่เกี่ยวข้อง: :helptags ALLคุณอาจต้องการที่จะเพิ่มหมายเหตุเกี่ยวกับ
Sato Katsura

1
@Sato ขอบคุณสำหรับบันทึกเกี่ยวกับ vimballs: เนื่องจากฉันไม่เคยใช้มันฉันไม่ได้คิดเกี่ยวกับมัน แต่ตอนนี้เมื่อคุณพูดถึงมันดูเหมือนจะค่อนข้างชัดเจน ฉันเห็นด้วยกับคุณเกี่ยวกับ "ไม่มีใครจะใช้มัน" โปรดทราบฉันไม่ได้มองโลกในแง่ดีเกี่ยวกับเรื่องนี้ สำหรับ:helptag ALLฉันจะดูและเพิ่มขอบคุณสำหรับคำแนะนำ!
Statox

ผมย้ายการอภิปรายนอกเรื่องที่จะสนทนา
Martin Tournoij

4
minpacเป็นผู้จัดการแพ็คเกจใหม่สำหรับ Vim 8 (และ NeoVim) มันสร้างขึ้นบนแพ็คเกจของ Vim 8 โดยให้คำสั่งกับupdateปลั๊กอินของคุณหรือcleanพวกมัน (ลบปลั๊กอินที่ไม่ได้ใช้) สำหรับคะแนนโบนัสมันยังใช้คุณสมบัติการควบคุมงานใหม่เพื่อทำการอัพเดตหลายแบบพร้อมกัน ฉันคิดว่ามันเป็นสัญญาที่ดีเพราะมันช่วยปรับปรุงแพ็คเกจในตัวด้วย UX ที่ดีกว่า
nelstrom

11

เพื่อขยายใน "มันสามารถแทนที่ผู้จัดการปลั๊กอิน"

ฉันเคยใช้ Vundle ซึ่งยอดเยี่ยม แต่ตอนนี้แทนที่ด้วยทุบตี 18 บรรทัดหรือมากกว่านั้น

ฉันพบว่ามีประโยชน์ในการใช้โฟลเดอร์ย่อยในไดเรกทอรี pack เพื่อจัดกลุ่มปลั๊กอินที่เกี่ยวข้อง เช่น "ไวยากรณ์" หรือ "ทับทิม"

ตัวอย่างทุบตีที่เกี่ยวข้องอยู่ด้านล่าง วางไฟล์และเรียกใช้

การอภิปรายเพิ่มเติมเกี่ยวกับหัวข้อที่: https://stories.abletech.nz/get-rid-of-your-vim-plugin-manager-7c8ff742f643#.abnjauzgk

#!/usr/bin/env bash
# This file lives in ~/.vim/pack/install.sh
# Remember to add executable: chmod +x ~/.vim/pack/install.sh
#
# Create new folder in ~/.vim/pack that contains a start folder and cd into it.
#
# Arguments:
#   package_group, a string folder name to create and change into.
#
# Examples:
#   set_group syntax-highlighting
#
function set_group () {
  package_group=$1
  path="$HOME/.vim/pack/$package_group/start"
  mkdir -p "$path"
  cd "$path" || exit
}
# Clone or update a git repo in the current directory.
#
# Arguments:
#   repo_url, a URL to the git repo.
#
# Examples:
#   package https://github.com/tpope/vim-endwise.git
#
function package () {
  repo_url=$1
  expected_repo=$(basename "$repo_url" .git)
  if [ -d "$expected_repo" ]; then
    cd "$expected_repo" || exit
    result=$(git pull --force)
    echo "$expected_repo: $result"
  else
    echo "$expected_repo: Installing..."
    git clone -q "$repo_url"
  fi
}
(
set_group ruby
package https://github.com/tpope/vim-rails.git &
package https://github.com/tpope/vim-rake.git &
package https://github.com/tpope/vim-bundler.git &
package https://github.com/tpope/vim-endwise.git &
wait
) &
(
set_group syntax
package https://github.com/kchmck/vim-coffee-script.git &
package https://github.com/tpope/vim-markdown.git &
package https://github.com/ap/vim-css-color.git &
wait
) &
(
set_group colorschemes
package https://github.com/altercation/vim-colors-solarized.git &
wait
) &
wait

4

คำตอบที่ได้รับจาก @statox นั้นมีความหมายมาก แต่สำหรับผู้ใช้ใหม่ที่สามารถทำให้เสียสมาธิเพราะพวกเขาสามารถอ่านไฟล์ช่วยเหลือได้โดยตรง ฉันต้องการร่างสิ่งที่คุณต้องทำในพอยน์เตอร์

  1. สร้างpack/*/startไดเรกทอรีภายใต้การใด ๆ set packpathของไดเรกทอรีที่มีให้โดย ~/.config/nvim/pack/*/startฉันได้ใน โปรดทราบว่าคุณสามารถใช้ชื่อไดเรกทอรีใด ๆ ที่คุณต้องการแทน*แต่คุณไม่สามารถละเว้นได้ทั้งหมดฉันไม่รู้ว่าเพราะอะไร ตัวอย่างเช่นคุณสามารถใช้ไดเรกทอรี~/.config/nvim/pack/foo/startหรือ~/.config/nvim/pack/bar/startไม่~/.config/nvim/pack/startก็ได้

  2. ไปที่pack/*/startไดเรกทอรีและคัดลอกแพ็กเกจที่นั่น

  3. ไฟ n / เป็นกลุ่มและทำ:scriptnamesเพื่อตรวจสอบว่าทุกอย่างโหลด autoload/plugin.vimไม่ต้องกังวลถ้าไม่ได้ทุกส่วนมีการโหลดเพราะบางไฟล์จะหมายถึงการโหลดหลังจากเบ็ดบางส่วนเช่น
  4. หากต้องการถอนการติดตั้งเพียงลบไดเรกทอรีที่คุณโคลนแพ็คเกจ ไม่จำเป็นต้องทำอะไรอีก
  5. ทำ:helptags ALLเพื่อสร้างแท็กสำหรับเอกสารช่วยเหลือทั้งหมด ทำสำหรับการสร้างแท็กสำหรับเอกสารความช่วยเหลือภายใต้ไดเรกทอรี:helptags {dir} dirตัวอย่างเช่นถ้าคุณใส่ปลั๊กอินของคุณแล้วทำ~/.config/nvim/pack/foo/plugin_name :helptags ~/.config/nvim/pack/foo/plugin_name/docที่จะสร้างtagsไฟล์ในไดเรกทอรี doc ของปลั๊กอิน หากคุณลบปลั๊กอินออกจากไดเรกทอรีไฟล์แท็กจะหายไปและกลุ่มจะไม่พบไฟล์ช่วยเหลือดังนั้นคุณไม่จำเป็นต้องถอนการติดตั้งไฟล์ doc ด้วยตนเอง

2

รูปแบบใหม่นั้นสามารถเทียบเท่ากับ Pathogen ได้ดังนั้นยังมีพื้นที่สำหรับผู้จัดการที่สามารถดาวน์โหลดปลั๊กอินที่คุณต้องการ มีผู้จัดการปลั๊กอินใหม่ไม่กี่คนที่ใช้ประโยชน์จากแพ็ครูปแบบใหม่นี้ แต่ฉันยังคงทำVire อยู่เพราะพวกเขาไม่ต้องกังวลกับการจัดการvimrcกับคุณ หากคุณมีเครื่องหลายเครื่องและต้องการกำหนดค่าเดียวกัน Vire ทำให้มันง่ายมาก


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