Mac OS X: วิธีเปิด vim in terminal เมื่อดับเบิ้ลคลิกที่ไฟล์


19

ฉันได้กำหนดประเภทไฟล์เสียงเรียกเข้าแบบกำหนดเองของฉันเองด้วยการไฮไลต์และอื่น ๆ ฉันต้องการเปิดไฟล์โดยใช้ vim แบบเทอร์มินัลเมื่อฉันคลิกสองครั้ง ฉันใช้ mac os x ตัวชี้ใด ๆ เกี่ยวกับวิธีเริ่มต้นจากจุดนี้?

คำตอบ:


17

สร้างแอปพลิเคชัน Automator เพื่อเรียกใช้แอปพลิเคชันต่อไปนี้:

on run {input}
   set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      activate
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
   end tell
end run

บันทึกแอปพลิเคชัน automator (เช่นตั้งชื่อเป็นVim Launcher )

คลิกขวา (หรือคลิกควบคุม) บนไฟล์ประเภท vim ที่คุณกำหนดเอง (เช่นใช้. vimเป็นส่วนขยาย) และภายใต้เปิดด้วย ...เลือกตัวเลือกด้านล่างอื่น ๆ ...และค้นหาแอปพลิเคชัน Automator ของคุณ (เช่นVim Launcher ) คลิกที่มัน

ความเจริญ


4
เพื่อสร้างใน Automator คุณสามารถคลิกNew DocumentเลือกApplicationเทมเพลต ในActions->Libraryแท็บคลิกแล้วUtilities Run AppleScript
cevaris

1
ไม่ทำงานในโยเซมิตี
keyvan

ฉันได้รับสิ่งต่าง ๆ ในโยเซมิตีแม้ว่าฉันจะใช้ iTerm: thepugautomatic.com/2015/02/open-in-iterm-vim-from-finder
Henrik N

เหมาะกับฉันในโยเซมิตี มีกรณีขอบแปลก ๆ อยู่หนึ่งอย่าง -
Ilias Karim

1
ดูเหมือนว่าจะไม่ทำงานกับ iTerm ในวันที่ 10.12.5
ประหลาดใจที่

1

จากห้านาทีหรือมากกว่านั้นฉันใช้เวลาเล่นกับมันเพื่อดูว่าฉันจะไม่พบตัวเลือกในตัวที่จะทำ

อย่างไรก็ตามคุณอาจจะเขียน Applescript แบบง่าย ๆ ที่จะพาไฟล์สัมบูรณ์พา ธ ไปใช้งานจากนั้นก็รันvim {path}ใน bash shell


1
set the_path to POSIX path of input
   set cmd to "vim " & quoted form of the_path & "; exit"
   tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
   tell application "Terminal"
      if terminalIsRunning is true then
         do script with command cmd
      else
         do script with command cmd in window 1
      end if
      activate
   end tell
end run

ฉันใช้ AppleScript นี้แทน มันเปิดใช้งานการดำเนินการ Terminal.app หลังจากการดำเนินการ (ไม่ใช่ก่อน!) เพื่อหยุดสิ่งที่ทำหน้าที่แปลกเมื่อใช้ Spaces นอกจากนี้ยังปิดหน้าต่างหลังจากที่ Vim ออก เพียงตั้งค่า Terminal.app ให้ปิดหลังจากออกจากระบบแล้ว


1

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

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

หลังจากผ่านไปหลาย ๆ เว็บไซต์แล้วก็นำมาต่อกันเป็นเวอร์ชันที่ใช้งานได้ดี ฉันแน่ใจว่ามีวิธีที่ดีกว่าที่จะทำ แต่ฉันไม่มีประสบการณ์กับ Applescript และจะปล่อยให้ผู้อื่นแนะนำการปรับปรุงใด ๆ

on run {input}
    set the_path to POSIX path of input
    -- set cmd to "vim " & quoted form of the_path
    -- we can do a change directory to make NerdTree happy
    set cmd to "clear;cd `dirname " & the_path & "`;vim " & quoted form of the_path & "; exit"

    tell application "System Events" to set terminalIsRunning to exists application process "Terminal"
    tell application "Terminal"
        if terminalIsRunning is true then
            -- CHANGED code starts --
            set newWnd to do script with command cmd
            do script with command cmd in newWnd
            -- CHANGED code ends --
        else
            do script with command cmd in window 1
        end if
        activate
    end tell
end run

ใน 2017 Macbook Pro พร้อม Touchbar ฉันพบว่า [คำตอบที่ยอมรับ] ( superuser.com/a/139949/44785 ) ทำงานได้ดี แต่ฉันยังต้องการเพิ่ม "change directory" (cd) บรรทัดเพื่อให้แน่ใจว่า pwd เป็นที่ที่ไฟล์อยู่ วิธีนี้จะช่วยให้ NerdTree แสดงเฉพาะไฟล์จากโฟลเดอร์ของไฟล์ที่เปิด
protoiyer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.