เข้าถึงเทอร์มินัลขณะที่คุณอยู่ในกลุ่ม


40

มีวิธีเข้าถึงเทอร์มินัลขณะใช้Vimหรือไม่?

ฉันไม่ชอบเปิดเทอร์มินัลอื่นหรือบันทึกและออกจากเทอร์มินัลปัจจุบัน


เปิดแท็บใหม่ (Ctrl + Shift + T)
Wilf

2
ทำอย่างนั้นกี่ครั้ง :) ฉันไม่ชอบที่จะทำเช่นนั้น D:
Mohammad Reza Rezwani

1
คุณได้ลองใช้ตัวจัดการหน้าต่างเทอร์มินัลเช่น tmux หรือไม่?
jrg

คำตอบ:


67

คุณสามารถส่งเป็นกลุ่มสัญญาณ SIGTSTP คุณทำเช่นนี้โดยการกด+ctrl zกลุ่มจะถูกระงับในพื้นหลังและคุณสามารถใช้เทอร์มินัล พิมพ์fgเทอร์มินัลเพื่อใช้งานต่อด้วย vim

เคล็ดลับโบนัส: ใช้งานได้กับแอปพลิเคชั่นเทอร์มินัลเกือบทั้งหมด ใช้bgเพื่อเปิดใช้งานแอปพลิเคชันเพื่อทำงานต่อในพื้นหลัง


21
หรือเพียงแค่แทน% fgหรือ%1, %2ฯลฯ ถ้าคุณมีงานหลายพื้นหลัง jobsคำสั่งจะแสดงรายการเหล่านั้น (สมมติว่าbashเป็นเปลือก)
Ruslan

4
ฉันลงคะแนนให้วิธี ^ z (และภายหลัง fg) เนื่องจากสามารถใช้ในกระบวนการเชลล์เกือบทั้งหมด - ไม่ใช่สิ่งที่เป็นกลุ่มมันเป็นกลอุบายวิธีเชลล์ที่มีประโยชน์อย่างมากในบริบทอื่น ๆ
dman

35

ในกลุ่มให้พิมพ์:

:!sh

:!เรียกใช้กระบวนการภายนอก - ในกรณีนี้shคือเชลล์อื่น การควบคุมจะกลับไปเป็นกลุ่มเมื่อคุณออกจากเปลือก หากคุณต้องการใช้เชลล์พร้อมกับ vim ให้เพิ่ม&ที่ส่วนท้ายของคำสั่ง sh:

:!sh&

9
:shellหรือการใช้งานเพียงแค่
wchargin

2
นี่คือคำตอบที่ดีที่สุดสำหรับวัตถุประสงค์ส่วนใหญ่
Frank Conry

เป็นเรื่องที่ดี แต่จะทำอย่างไรเมื่อคำสั่งใช้เซิร์ฟเวอร์เหมือนhttp-serverและจะพิมพ์บันทึกที่ฉันต้องการดู ฉันต้องการที่จะสลับไปยังไฟล์ของฉันทำการแก้ไขแล้วสลับกลับไปยังบันทึก
Costa

21

คุณสามารถใช้:shellคำสั่ง (หรือแบบสั้น:sh) จาก:help :shell:

คำสั่งนี้เริ่มต้นเชลล์ เมื่อเชลล์ออกจาก (หลังจากคำสั่ง "exit") คุณกลับไปเป็นกลุ่ม ชื่อของคำสั่ง shell นั้นมาจากตัวเลือก 'shell'

ตามค่าเริ่มต้นบน Ubuntu สิ่งนี้จะทำให้คุณทุบตี พิมพ์exitเพื่อกลับไปเป็นกลุ่มเมื่อคุณทำเสร็จแล้ว


8

ตั้งแต่เสียงเรียกเข้าล่าสุดคุณสามารถทำได้:

:terminal

สิ่งนี้ถูกเพิ่มเข้ามาใน Vim 8.0.693แต่มีข้อบกพร่องมากมาย ดู:help terminal:

WARNING: THIS IS ONLY PARTLY IMPLEMENTED, ANYTHING CAN STILL CHANGE

The terminal feature is optional, use this to check if your Vim has it: 
        echo has('terminal')
If the result is "1" you have it.   

[...]

The terminal feature requires the +multi_byte, +job and +channel features.

==============================================================================
1. Basic use                                            terminal-use

This feature is for running a terminal emulator in a Vim window.  A job can be
started connected to the terminal emulator. For example, to run a shell: 
     :term bash

Or to run a debugger: 
     :term gdb vim

The job runs asynchronously from Vim, the window will be updated to show
output from the job, also  while editing in any other window.

7

เช่นเดียวกับคำตอบทั้งหมด

คุณสามารถติดตั้งปลั๊กอิน ConqueTerm

ปลั๊กอินนี้ให้ความสามารถในการเรียกใช้โปรแกรมแบบโต้ตอบภายในกลุ่มบัฟเฟอร์

หลังจากการติดตั้งคุณสามารถเพิ่ม 2 บรรทัดนี้ใน.vimrc:

:nnoremap <S-w> :q!<CR>
:nnoremap <S-t> :ConqueTermSplit bash<CR>

และคุณจะสามารถเรียกใช้bashโดยกดShift+ Tและปิดแท็บ Conque ปัจจุบันโดยกดShift+W

มันเป็น perferct bashหากคุณต้องการเปิดอย่างรวดเร็ว

นี่คือgifที่แสดงให้เห็นว่ามันเป็นอย่างไร


คุณสามารถลองปรับปรุงการโพสต์ได้ไหม? ดูเหมือนว่าลิงก์ที่คุณกล่าวถึงจะล้าสมัย
ggulgulia

4

ตัวเลือกอื่นที่มีหน้าจอหรือ byobu คือการเปิดแท็บภายในโปรแกรมเหล่านั้น โปรแกรมเหล่านี้ทำให้เปิด cq shell ได้อย่างง่ายดายและสลับระหว่างหน้าจอเหล่านั้นด้วยคีย์บอร์ด


1

ด้วย vim 8.1 เวอร์ชั่นใหม่ที่คุณต้องทำคือเพียง:terminalvoila! (สิ่งนี้สร้างขึ้นภายใน)

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