ฉันจะรันเทอร์มินัลภายใน Vim ได้อย่างไร?


303

ฉันคุ้นเคยกับ Emacs แต่ฉันกำลังลอง Vim เพื่อดูว่าฉันชอบอันไหนดีกว่า

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


2
เกี่ยวข้อง: stackoverflow.com/q/1879219/1569
Factor Mystic

42
คือ:! <command>สิ่งที่คุณกำลังมองหา?
takeshin

48
ตั้งแต่ Vim 8.0 มี:termคำสั่งที่เปิดเทอร์มินัลใหม่ในหน้าต่างแยกใหม่ ถ้ามันไม่ทำงานสำหรับคุณตรวจสอบvim --version | grep -o .terminalเพื่อดูว่าคุณลักษณะนี้มีอยู่ ( +terminal) หรือไม่พร้อมใช้งาน ( -terminal)
Susam Pal

คำตอบ:


123

ฉันขอแนะนำscreenบางอย่างเช่นนี้ Vim เป็นตัวแก้ไขข้อความไม่ใช่เชลล์

ฉันจะใช้Ctrl+ASเพื่อแบ่งหน้าต่างปัจจุบันในแนวนอนหรือในหน้าจอของ Ubuntu และเวอร์ชันที่ได้รับการปรับปรุงอื่น ๆ คุณสามารถใช้Ctrl+A|(ไพพ์) เพื่อแยกในแนวตั้ง จากนั้นใช้Ctrl+ATab(หรือเทียบเท่าในบางระบบCtrl+ACtrl+Iซึ่งอาจพิมพ์ได้ง่ายกว่า) เพื่อสลับระหว่างหน้าต่าง มีคำสั่งอื่น ๆ เพื่อเปลี่ยนขนาดและการจัดเรียงของหน้าต่าง

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

GNU หน้าจอคู่มือการอยู่รอดคำถามมีจำนวนของเคล็ดลับที่ดีถ้าคุณไม่คุ้นเคยกับการใช้งาน


7
+1 ฉันเพิ่งได้รับข่าวประเสริฐบนหน้าจอเมื่อเร็ว ๆ นี้ ฉันสงสัยว่าฉันไม่มีชีวิตอยู่ได้อย่างไร
ปืน

118
ฉันอยากจะเลือก tmux แทนหน้าจอ
tomaszkubacki

81
ใช่แน่นอนหนึ่งสามารถเรียกใช้หน้าจอหรือ tmux หรือเทอร์มิเนเตอร์หรือเปิดหน้าต่างและแท็บ alt อื่นหรือแม้กระทั่งใช้สวิตช์ KVM ที่เปิดใช้งานด้วย footpedal แต่นั่นไม่ใช่ประเด็น - โซลูชั่นทั้งหมดนั้นเสียสละการรวมระหว่างเทอร์มินัลและ VIM ซึ่งเป็นเหตุผลว่าทำไมคนเราจึงมองหาวิธีแก้ปัญหาในพื้นที่นี้ ฉันไม่เข้าใจว่าคำตอบนี้เป็นคำตอบได้อย่างไรตอบคำถามหรือตอบคำถามได้ คิดว่าฉันจะไปลอง Conque
Stabledog

33
นี่เป็นคำตอบยอดนิยมอย่างไร คุณต้องยกเลิกการลงคะแนนและโหวตคำตอบถัดไปซึ่งจริง ๆ แล้วตอบคำถามของคุณ การใช้หน้าจอจะไม่เรียกใช้เชลล์ภายในกลุ่ม มันเหมือนกับการบอกใครสักคนให้เริ่มต้นกระสุนใหม่ และสำหรับผู้ที่ขว้างปา ":!" เขารู้ทันเขารู้ว่าจะใช้คำสั่งได้อย่างไรซึ่งไม่ใช่สิ่งที่เขาขอ ... sheesh ความเย่อหยิ่งมีความหนามากในที่นี่คุณสามารถตัดมันด้วยมีด
osirisgothra

6
คำตอบนี้ควรได้รับการอัปเดตเนื่องจากคุณสมบัติ vim 8.1 ใหม่หน้าต่างเทอร์มินัล
Alan Garrido

232

ล้าสมัยตั้งแต่เดือนสิงหาคม 2554

ตรวจสอบConque Shell (บนGitHub ด้วย ) ให้คุณเรียกใช้โปรแกรมเชิงโต้ตอบภายใน vim ไม่ใช่แค่เชลล์


21
:ConqueTerm bash <CR>, vim <CR>, :ConqueTerm bash.... สยองขวัญ recursive !!
keflavich

1
psihodelia ดูเหมือนจะถูกต้อง ฉันเพิ่งรวบรวม vim ด้วย --enable-pythoninterp (cygwin ไม่แจกจ่าย vim ด้วย + python) และหลังจากติดตั้ง ConqueTerm ฉันได้รับข้อผิดพลาดจาก #set_buffer_settings ฉันไม่สามารถติดตามได้ว่าฟังก์ชั่นนั้นอาศัยอยู่ที่ใดหรือเข้าใจว่าเกิดข้อผิดพลาดใดขึ้น ข้อความมีข้อความเกี่ยวกับอาร์กิวเมนต์ที่ไม่ถูกต้อง "แก้ไข ++ enc = utf-8 bash \ - \ 2" โอ๊ะ
เนทเคนเนดี

47
เพื่อให้เข้าใจถึงการเรียกซ้ำคุณต้องเข้าใจการเรียกซ้ำ
Stabledog

19
@ Łukasz Niemier VIMCEPTION
Sebastián Grignoli

1
ดูเหมือนว่าสิ่งนี้ไม่ได้รับการสนับสนุนอีกต่อไปใครมีทางเลือก?
dykeag

203

ฉันไม่แน่ใจว่าสิ่งที่คุณกำลังพยายามที่จะบรรลุ (ฉันไม่เคยใช้ Emacs) แต่คุณสามารถเรียกใช้คำสั่งในกลุ่มโดยพิมพ์:

:! somecommand [ENTER]

และหากคุณต้องการพิมพ์คำสั่งหลาย ๆ คำสั่งหรือเล่นในเชลล์สักระยะหนึ่งคุณสามารถใช้:

:! bash (or your favourite shell) [ENTER]

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

Vim มีน้ำหนักเบาโดยเจตนาและขาดความสามารถในการทำสิ่งต่าง ๆ ที่ไม่ใช่บรรณาธิการเช่นเดียวกับที่ใช้เชลล์แบบเต็มเป่าภายในบานหน้าต่าง / แท็บ Vim แต่ดังที่ได้กล่าวมาแล้วข้างต้นมีแอดออนของบุคคลที่สามเช่น vim-shell เพื่อทำสิ่งนั้น

โดยทั่วไปถ้าฉันต้องการสลับระหว่าง Vim และ shell ของฉัน (Bash) ฉันเพียงกดCTRL+ Zเพื่อหยุดกระบวนการ Vim เล่นรอบ ๆ เชลล์ของฉันจากนั้นพิมพ์ 'fg' เมื่อฉันต้องการกลับไปที่ Vim - รักษาบรรณาธิการของฉันและของฉัน เปลือกดีและแยก


17
และถ้าคุณต้องการคัดลอกเอาต์พุตของคำสั่งไปยังบัฟเฟอร์ปัจจุบัน:: r! dir
Cyber ​​Oliveira

6
ฉันใช้ทั้ง Emacs และ Vim (และมีประสบการณ์มากขึ้นกับ Vim) แต่ฉันพบว่าบ่อยครั้งที่มันดีกว่าและทำงานได้ง่ายกว่าด้วยสองมุมมองพร้อมกัน (หนึ่งเพื่อดูว่าคุณกำลังแก้ไขอะไรและอีกอันจะทำงานภายในเชลล์แบบโต้ตอบได้ตัวอย่างเช่นเพื่อทดสอบผลกระทบของการเปลี่ยนแปลงการกำหนดค่าที่คุณมี เพิ่งแก้ไข) นอกจากนี้ยังช่วยในเรื่องความรู้ความเข้าใจการเก็บรักษาและขั้นตอนการทำงานของจิตใจเมื่อสิ่งสำคัญที่ฉันต้องตรวจสอบอย่างใกล้ชิดไม่หายไปจากหน้าจอ (เช่นเกิดขึ้นเมื่อคุณใช้ Ctrl-Z หรือ: shell in Vim)
mvanle

มันเป็นคำตอบที่ยอดเยี่ยมซึ่งจะช่วยประหยัดเวลาของฉันได้มาก
jerry_sjtu

คำตอบที่ดี! เพื่อเป็นการชมเชยยิ่งไปกว่านั้นฉันยังจะเพิ่มการ:r! command [ENTER]กล่าวถึงในความคิดเห็น
Jeach

151

วิธีที่ฉันได้รับรอบนี้คือ:

  • หยุด Vim ด้วยCtrl+ Z,
  • เล่นในสถานี
  • fgแล้วกลับไปตรงที่คุณทิ้งให้อยู่กับที่เป็นกลุ่มโดยเพียงแค่พิมพ์คำสั่ง

14
:!bashเป็นวิธีที่ดีกว่าในการทำเช่นนั้น
0atman

ฉันคิดว่าเขาต้องการ dreampie เหมือนฟังก์ชั่น
Adam Miller

10
@Oatman ทำไม:!bashดีกว่าCtrl+z? (แค่สงสัย)
Sebastián Grignoli

2
@ SebastiánGrignoliเพราะมีCtrl+Zตัวอย่างเช่นคุณสามารถย้ายไปยังโฟลเดอร์อื่นแล้วlsจากนั้นgit statusเป็นต้นCtrl+Zเป็น "หยุด" คุณสามารถ "ประวัติส่วนตัว" fgกับ แต่ด้วย:! bash อย่างที่ทราบแล้วคุณสามารถรันคำสั่งเดียวในครั้งเดียวหรือแม้ว่าคุณจะสามารถเรียกใช้คำสั่งได้มากกว่าหนึ่งคำในคราวเดียวก็ยังไม่สะดวก โดยรวมแล้ว 'Ctrl + Z' ดีกว่ามาก
Leo

+1 เพราะวิธีนี้ใช้ได้กับทุกสภาพแวดล้อม ทำงานกับระบบต่างประเทศที่ฉันไม่สามารถปรับแต่งและผ่าน PuTTY shell ราคาถูกได้ผลดีมาก
t3sture

121

หากเปิดใช้งานในเวอร์ชัน Vim ของคุณเทอร์มินัลสามารถเริ่มทำงานได้ด้วย:termคำสั่ง

การสนับสนุนหน้าต่างเทอร์มินัลถูกเพิ่มเข้ากับ Vim 8 เป็นฟีเจอร์เสริมที่สามารถเปิดใช้งานเมื่อคอมไพล์ Vim ด้วยคุณสมบัติ + เทอร์มินัล หากเวอร์ชันของ Vim ของคุณรองรับเทอร์มินัล:echo has('terminal')จะส่งออก "1"

การเข้า:termจะทำให้คุณอยู่ในโหมดTerminal-Jobซึ่งคุณสามารถใช้เครื่องได้ตามที่คาดไว้

ภายในโหมดTerminal-JobการกดCtrl-W NหรือCtrl-\ Ctrl-Nสลับโหมดเป็นTerminal-Normalซึ่งจะทำให้เคอร์เซอร์สามารถเคลื่อนย้ายได้และคำสั่งจะทำงานคล้ายกับโหมดNormalของ Vim เพื่อสลับกลับไปเทอร์มิ-Jobiโหมดกด

คำตอบอื่น ๆ พูดถึงฟังก์ชั่นที่คล้ายกันใน Neovim


5
+1 สำหรับวิธีการเปลี่ยนกลับไปเป็นโหมดเทอร์มินัล cmd ด้วยiหลังจากเปลี่ยนจากโหมดเรียกดู ctrl-wN นี่คือคุณสมบัตินักฆ่าแม้กระทั่ง tmux และทำงานบน Windows ได้เช่นกัน
radke

1
เป็นไปได้ไหมที่จะแบ่งแนวตั้งโดยใช้:term?
Vitaly Zdanevich

1
super! เยี่ยมมากที่เทอร์มินัลถูกสร้างขึ้นดังนั้นเราจึงไม่ยุ่งกับปลั๊กอินมากขึ้น อัปเกรดเป็นกลุ่ม 8 ผ่านbrew install vim --override-system-viและ:termทำงานได้อย่างสมบูรณ์แบบ ขอบคุณสำหรับการแบ่งปัน!
LeOn - Han Li

18
@VitalyZdanevich :vertical :termจะแยกแนวตั้งด้วยเทอร์มินัลในหน้าต่างด้านซ้าย :vertical :botright :termจะแยกในแนวตั้งกับเครื่องในหน้าต่างด้านขวา หรือคุณสามารถจัดวางหน้าต่างด้วยตนเองจากนั้นใช้:term ++curwinเพื่อเปิดเทอร์มินัลในหน้าต่างที่ใช้งานอยู่
Daniel S.

esc ctrl-w w อนุญาตให้คุณสลับระหว่าง windows
user1869582

87

:shจากนั้นctrl+dกลับเข้ามาใหม่ (ทุบตี)

อัปเดต :

คุณสามารถแมปctrl+dเป็นกลุ่มเพื่อเรียกใช้:shซึ่งอนุญาตให้คุณสลับระหว่าง bash และ vim ได้อย่างรวดเร็ว

noremap <C-d> :sh<cr>


1
ฉันคิดว่าctrl+zและfgเร็วกว่าเล็กน้อยเนื่องจากคุณไม่ต้องพิมพ์:shในกรณีนั้น
อเล็กซ์

@ ไม่ต้องพิมพ์:shถ้าคุณทำแผนที่ หลังจากนั้นnoremapคุณสามารถเพียงแค่Ctrl+Dเป็นกลุ่มshและเนื่องจาก^Dเป็น EOF ซึ่งจะยกเลิกshดังนั้นคุณจะกลับไปเป็นกลุ่ม ปุ่มเดียวสามารถสลับระหว่างshและเป็นกลุ่ม
no1xsyzy

42

คุณสมบัติใหม่ที่สำคัญของ Vim 8.1 คือรองรับการใช้งานเทอร์มินัลในหน้าต่าง Vim

:term จะเปิด terminal ในหน้าต่างอื่นภายใน Vim


2
มันทำงานได้อย่างสมบูรณ์ขอบคุณ! คำตอบของคุณมีมากขึ้นในจิตวิญญาณของคำถามเดิม
subelsky

สวัสดีคุณรู้วิธีการออกจากโหมดนี้หรือไม่?
user3289737

2
เหมือนในเทอร์มินัลปกติexitจะปิดจากเทอร์มินัลแล้วใช้:qเพื่อปิดหน้าต่าง
Yossarian42

2
@ user3289737 อีกวิธีหนึ่งคุณสามารถกด Ctrl + W สองครั้งติดต่อกันเพื่อสลับระหว่างหน้าต่าง นี่ไม่ใช่เฉพาะหน้าต่างเทอร์มินัล แต่ทำงานได้ดี
flarn2006

39

ในที่สุด:terminalคำสั่งเนทีฟถูกเพิ่มเข้าไปในกลุ่มในปี 2560

นี่คือข้อความที่ตัดตอนมาจาก: terminal readme:

คุณลักษณะนี้ใช้สำหรับการรันเทอร์มินัลอีมูเลเตอร์ในหน้าต่าง Vim สามารถเริ่มงานเชื่อมต่อกับเทอร์มินัลอีมูเลเตอร์ได้ ตัวอย่างเช่นการเรียกใช้เชลล์:

 :term bash

หรือเรียกใช้คำสั่ง build:

 :term make myprogram

งานรันแบบอะซิงโครนัสจาก Vim หน้าต่างจะถูกอัพเดตเพื่อแสดงเอาต์พุตจากงานรวมถึงขณะที่แก้ไขในหน้าต่างอื่น


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

1
@ArunMKumar ใช้ [Ctrl + W] เพื่อ "escape" จากเทอร์มินัลจากนั้นทำ:bnตามปกติ ไม่จำเป็นต้องฆ่าขั้วและมันไม่ได้เป็นจุดกลับไม่มี :)
fjardon

ขอบคุณเพื่อนคิดถึงทั้งหมด ฉันได้คีย์แมป: พันล้านถึงคีย์และหยุดทำงานมันกลับมาทำงานอีกครั้ง มันเป็นสิ่งที่ไม่ดีของฉัน
ArunMKumar

2017? คุณหมายถึง 2018?
flarn2006

1
@ flarn2006 เกี่ยวกับ 2017 เทียบกับ 2018, Vim 8.1 ได้ประกาศใน vim.org เมื่อวันที่ 18 พฤษภาคม 2018 โดยมี "การสนับสนุนการใช้งานเทอร์มินัลในหน้าต่าง Vim" ซึ่งระบุว่าเป็น "คุณสมบัติใหม่ที่สำคัญ" คุณลักษณะนี้มีให้ใช้ก่อนหน้านี้ก่อนวันที่ 7 กรกฎาคม 2017 ในแพทช์ 8.0.0693 github.com/vim/vim/commit/…
Daniel S.

32

คำถามนี้ค่อนข้างเก่า แต่สำหรับคนที่ค้นพบแล้วมันมีวิธีแก้ปัญหาที่เป็นไปได้ใหม่: Neovim มีตัวจำลองเทอร์มินัลระดับเฟิร์สคลาสเต็มรูปแบบซึ่งทำในสิ่งที่ ConqueTerm พยายามทำ :term <your command here>ทำงานเพียงแค่

<C-\><C-n>จะออกจากโหมดคำกลับเป็นโหมดปกติ หากคุณชอบฉันและชอบโหมด Escape ที่ยังคงออกจากคำศัพท์คุณสามารถเพิ่มสิ่งนี้ลงใน nvimrc ของคุณ

tnoremap <ESC><ESC> <C-\><C-N>

จากนั้นกดปุ่ม ESC สองครั้งจะออกจากโหมดเทอร์มินัลกลับสู่โหมดปกติดังนั้นคุณสามารถจัดการบัฟเฟอร์ที่คำสั่งที่ยังทำงานอยู่กำลังเขียนอยู่

แม้ว่าโปรดทราบว่าเนื่องจาก nvim อยู่ภายใต้การพัฒนาอย่างมากในขณะที่ฉันโพสต์คำตอบนี้อาจมีการเพิ่มวิธีอื่นในการออกจากโหมดเทอร์มินัล เมื่อCtrl+\Ctrl+nเปลี่ยนเป็นโหมดปกติจากเกือบทุกโหมดฉันไม่คาดหวังว่าคำตอบนี้จะผิด แต่โปรดทราบว่าหากไม่ได้ผลคำตอบนี้อาจล้าสมัย

https://github.com/neovim/neovim


29

:term

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


มันถูกเพิ่มเข้ามาก่อนเป็นกลุ่ม 8.1 นี่เป็นเพียงฟีเจอร์หลักที่สำคัญที่กลุ่ม 8.0.001 ไม่มี นั่นเป็นเหตุผลว่าทำไมมันถึงถูกโฆษณาว่าเป็น vim 8.1 novelty ดูคำตอบของ Daniel ในเดือนตุลาคม 2017 และ fjardon ในเดือนเมษายน 2018 -> github.com/vim/vim/blob/master/runtime/doc/version8.txt#L18814
Luc Hermitte

17

ฉันรู้ว่าฉันไม่ได้ตอบคำถามโดยตรง แต่ฉันคิดว่ามันเป็นวิธีการที่ดี ไม่มีใครได้พูดถึง tmux (หรืออย่างน้อยก็ไม่ใช่คำตอบแบบสแตนด์อโลน) Tmux เป็นเทอร์มินัลมัลติเพล็กเซอร์เช่นหน้าจอ สิ่งต่าง ๆ ส่วนใหญ่สามารถทำได้ทั้งมัลติเพล็กซ์ แต่ afaik tmux ง่ายต่อการกำหนดค่า tmux ยังตอนนี้ได้รับการพัฒนาอย่างแข็งขันมากกว่าหน้าจอและมีระบบนิเวศขนาดใหญ่รอบ ๆ มันเช่นเครื่องมือที่ช่วยกำหนดค่า ecc

นอกจากนี้สำหรับกลุ่มมีปลั๊กอินอื่น: ViMUXที่ช่วยในการโต้ตอบระหว่างเครื่องมือทั้งสอง คุณสามารถโทรคำสั่งด้วย:

:call VimuxRunCommand("ls")

คำสั่งนั้นจะสร้างการแบ่งแนวนอนขนาดเล็กด้านล่างบานหน้าต่างปัจจุบันเป็นกลุ่ม

นอกจากนี้ยังสามารถให้คุณเรียกใช้จากพรอมต์ในกรณีที่คุณไม่ต้องการเรียกใช้คำสั่งทั้งหมด:

<Leader>vp :VimuxPromptCommand<CR>

เนื่องจากมันไม่เพียงพอมีอย่างน้อย 6 'ปลั๊กอินเฉพาะแพลตฟอร์ม':

  • vim-vroom : รองชนะเลิศอันดับ rspec, แตงกวาและทดสอบ / หน่วย; การสนับสนุน vimux ผ่านทางg:vroom_use_vimux
  • vimux-ruby-test : ชุดคำสั่งเพื่อเรียกใช้การทดสอบ ruby ​​ได้อย่างง่ายดาย
  • vimux-แตงกวา : เรียกใช้คุณสมบัติแตงกวาผ่าน Vimux
  • vim-turbux : การทดสอบ Turbo Ruby ด้วย tmux
  • vimux-pyutils : ชุดของฟังก์ชันสำหรับ vimux ที่อนุญาตให้เรียกใช้การบล็อกโค้ดใน ipython
  • vimux-nose-test : เรียกใช้การทดสอบจมูกใน vimux

นี่คือ "กรณีการใช้งาน" ที่ดี: การทดสอบตามความต้องการโดยใช้ Vimux และ Turbux กับ Spork and Guard


สนใจที่จะอธิบายว่าทำไมมันจึงถูกลดระดับลง (นอกเหนือจากการเป็นคำตอบจาก 6 ปีที่แล้ว)
Pablo Olmos de Aguilera C.

13

มีคนแนะนำhttps://github.com/Shougo/vimshell.vimแล้ว แต่พวกเขาไม่ได้พูดถึงสาเหตุ ดังนั้นเมื่อฉันออกไปจากคำถามนี้ฉันเสียเวลาไปกับการลองตัวเลือกอื่น ๆ

Shougo / vimshellคือคำตอบ นี่คือเหตุผล:

นอกเหนือจากการเป็นเทอร์มินัลอีมูเลเตอร์แล้ว VimShell ยังให้คุณสามารถนำทางผ่านเทอร์มินัลเอาท์พุตในโหมดปกติและภาพ ดังนั้นหากคำสั่งที่คุณเรียกใช้ผลลัพธ์เป็นผลลัพธ์ที่คุณต้องการคัดลอกและวางโดยใช้แป้นพิมพ์เท่านั้น ... VimShell ครอบคลุมสิ่งนี้

ไม่มีตัวเลือกอื่น ๆ ที่กล่าวถึงรวมถึง: คำสั่ง terminal ใน NeoVim ทำสิ่งนี้ Neovim's: เทอร์มินัลเข้ามาใกล้ แต่อย่างน้อยก็ต้องทำตามวิธีต่อไปนี้ตั้งแต่วันที่ 2/18/2017:

  • ย้ายเคอร์เซอร์ไปที่จุดสิ้นสุดของบัฟเฟอร์แทนที่จะเก็บไว้ที่จุดสุดท้ายในตำแหน่งเดียวกับที่ VimShell ทำ เสียเวลามาก

  • ไม่รองรับmodifiable = 1ดูการสนทนาเกี่ยวกับเรื่องนี้ที่ Githubดังนั้นปลั๊กอินที่มีประโยชน์เช่น vim-easymotion จึงไม่สามารถใช้ได้

  • ไม่รองรับการแสดงหมายเลขบรรทัดเช่น Vimshell

อย่าเสียเวลากับตัวเลือกอื่น ๆ รวมถึง Neovim's: terminal ไปกับ VimShell


1
NeoVim ช่วยให้คุณสามารถนำทางและคัดลอกจากขั้วเอาท์พุทในโหมดปกติ / ภาพ ฉันทำสิ่งนี้ตลอดเวลา ใช้ NVIM 0.1.6-dev
Alice Heaton

ขอบคุณฉันจะลอง VimShell อย่างไรก็ตามฉันมีอิสระในการลบข้อความที่ไม่ถูกต้องออกจากคำตอบ @Alice ชี้ให้เห็นว่า NeoVim :terminalสามารถทำสิ่งเดียวกันได้อย่างแน่นอน
Konrad Rudolph

:terminalไม่สามารถทำเช่นเดียวกับ:VimShellในแง่ของการนำทางและการแก้ไขและในรูปแบบพื้นฐาน ดูคำอธิบายการแก้ไขด้านบน
user3751385


8

ไม่คุณไม่สามารถ:

http://vimdoc.sourceforge.net/htmldoc/tips.html#shell-window


2
อย่าใช้คำแนะนำsplitvt- มันอาจทำให้รหัสควบคุมสีและทำให้vimใช้ไม่ได้อย่างเต็มที่
new123456

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

2
@AnishRamaswamy มันยังคงเป็นไปไม่ได้ที่จะรันเชลล์ภายในบัฟเฟอร์ vim โดยใช้สต็อค vim (ต่างจาก emacs) นั่นคือสิ่งที่คำถามของ OP คือ
แอมเบอร์

1
@Amber, ใช่ว่าจะดียกเว้น OP ไม่ได้กล่าวถึงการใช้เป็นกลุ่มหุ้น
Anish Ramaswamy

3
บางคนควรแก้ไขคำตอบนี้เพื่อบอกว่าคุณไม่สามารถทำได้ด้วย stock vim
still_dreaming_1

4

วิธีเดียวที่ฉันรู้คือใช้vim-shellซึ่งเป็นโปรแกรมปะแก้ของบุคคลที่สาม


ในการเป็นคนที่คลั่งไคล้ vim-shell เป็น patch ไม่ใช่ 'add-on' (อย่างน้อยสำหรับฉันก็หมายความว่ามันเป็นสคริปต์) ฉันไม่ได้ลองเป็นการส่วนตัว แต่หน้า vim-shell บน Vim wiki น่าเสียดายที่มันไม่ได้รวบรวม Vim 7.1+
Yewge

เปลี่ยนเพื่อเอาใจคนอวดรู้ :) (. มีการพิมพ์สิ่งที่เกินกว่า 15 ตัวอักษร 'ถาวร' ไม่นานพอ)
romandas

Shougo / vimshell ( github.com/Shougo/vimshell.vim ) ดูเหมือนว่าจะทำงานได้ค่อนข้างดี มันต้องการการสร้างไลบรารี่แบบไดนามิก แต่มันค่อนข้างง่าย (cd <vim> / vimproc; make)
Wayne Walker


2

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


2

สมมติว่าเวอร์ชัน vim ของคุณรองรับ+termคำสั่งแรกให้ตั้งค่า shell เพื่อให้ vim ใช้ในหนึ่งคำสั่ง (เช่นset=/usr/bin/zsh) จากนั้นเรียกใช้คำสั่ง+term(เช่นbo 15vs +term) คุณอาจต้องทำการเลื่อนหน้าต่างเพิ่มเติม (เช่นลบและหมุน) แต่คุณจะต้องติดตั้งเครื่อง


0

ฉันรับทราบว่าฉันไม่ได้ตอบคำถามของคุณอย่างเคร่งครัด แต่สิ่งที่ได้ผลดีกว่าสำหรับฉันเมื่อใช้ Vim และ Terminals ในหน้าต่างเดียวกันคือ Tmux (ซึ่งเป็นซอฟต์แวร์ประเภท "รันในพื้นหลัง" คล้ายกับหน้าจอแม้ว่าจะเป็นแบบนี้ก็ตาม หนึ่งทำงานได้ดีขึ้นด้วยการแยกและแท็บ)

โพสต์นี้จะช่วยให้คุณเข้าใจว่าพวกเขาทำงานร่วมกัน: 'Tmux และเป็นกลุ่ม - แม้ดีกว่ากัน'

วิธีนี้เราสามารถแปลง Vim ให้เป็น IDE ที่ทรงพลัง


0

แยกหน้าจอและเรียกใช้คำสั่งterm ++curwinเพื่อรันเทอร์มินัลภายในบัฟเฟอร์ Vim คำสั่งต่อไปนี้ทำทั้งสองอย่างและทำงานให้ฉัน:

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