Vi & Vim

คำถามและคำตอบสำหรับผู้ที่ใช้ตระกูล vi และ Vim ของเครื่องมือแก้ไขข้อความ

3
ฉันจะรู้ได้อย่างไรว่าฉันอยู่ในเชลล์จากคำสั่ง vi: sh?
ใน vi ฉันจะได้รับ shell terminal พร้อม:shคำสั่ง และต่อมาฉันสามารถกลับไปที่ vi โดยexitเชลล์ แต่ถ้าฉันใช้เชลล์เทอร์มินัลเป็นเวลานานและฉันลืมไปว่าexitจะปิดอะไรหรือคืน vi ให้ฉัน มีวิธีการตรวจสอบว่าฉันจะกลับไปที่ vi หรือไม่? jobsหรือfgไม่ทำงาน

1
ทำไมกลุ่มถึงบ่นเกี่ยวกับ crypto ที่อ่อนแอเมื่อใช้ blowfish2
ฉันเปิดเอกสารจาก 2015 ฉันบันทึกโดยใช้ crypto ใน vim ( :X) นั่นคือการบันทึกการใช้blowfishในเวลา ข้อความที่ฉันได้รับตอนนี้ (2017) คือ: Warning: Using a weak encryption method; see :help 'cm' Enter encryption key: ********************************************* Enter same key again: ********************************************* นั่นคือแปลกผมคิดว่า set cryptomethod=blowfish2แต่ฉันคิดว่ามันจะทำอย่างไรกับข้อบกพร่องบางส่วนและหลังจากที่ได้อ่านบนวิธีการเข้ารหัสลับผม มันทำงานหลังจากเปิดมันแสดง cryptomethod เป็น blowfish 2 ปัญหาคือฉันยังได้รับข้อความเกี่ยวกับการใช้การเข้ารหัสที่อ่อนแอ! ทำไม? มีลายเซ็น crypto blowfish1 เก่าหรือไม่ ฉันต้องส่งออกข้อความและบันทึกใหม่เพื่อแก้ไขหรือไม่

3
วิธีที่สง่างามในการรองรับทั้งงูใหญ่และงูหลาม 3 ในปลั๊กอินกลุ่ม
ฉันเพิ่งได้รับคำขอดึงเพื่อเปลี่ยนปลั๊กอิน vim ของฉันเพื่อให้รองรับ python3 แต่การเปลี่ยนแปลงเหล่านี้ทำให้ปลั๊กอินสำหรับกลุ่มใน Mac ของฉันซึ่งดูเหมือนว่าจะฟังหลาม python import sys กับ python3 import sys มีวิธีการที่สวยงามที่จะทำให้สคริปต์ในปลั๊กอินของฉันตรวจสอบคำสั่งที่ควรใช้? สิ่งที่ต้องการ: if has('python') python import ... elseif if has('python3') python3 import ... else finish endif ขอบคุณ

1
วิธีรับตัวอย่างสำหรับคำสั่งการแทนที่?
บ่อยครั้งที่ฉันพบว่าตัวเองต้องการทำการทดแทนที่จะมีการจับคู่แยกกันทั่วทั้งไฟล์ขนาดใหญ่และด้วยการค้นหาที่ไม่สำคัญและการแสดงออกแทน okFunction(arg1, arg2 arg3)ตัวอย่างเช่นสมมติว่าฉันมีบางฟังก์ชั่นการโทรเช่น args จะแตกต่างกันไปกับการเรียกใช้ทุกฟังก์ชั่นแน่นอน arg2ตอนนี้บอกว่าผมได้ค้นพบการทำงานที่ดีกว่าที่ไม่จำเป็น ฉันสามารถปรับไฟล์ทั้งหมดได้อย่างง่ายดายด้วย :%s/\<okFunction(\(\w\+\), \(\w\+\), \(\w\+\))/betterFunction(\1, \3)/gc แม้ว่าแนวคิดง่าย ๆ ฉันไม่แน่ใจว่าฉันมีไวยากรณ์ในรูปแบบที่ค่อนข้างยาวนี้ การcตั้งค่าสถานะช่วยได้ที่นี่จริงๆ แต่ปัญหาคือเมื่อขอการยืนยันเสียงเรียกเข้าจะไม่แสดงว่าการแข่งขันจะถูกแทนที่ด้วยอะไร ฉันหมายความว่ามันจะแสดงการแสดงออกแทน แต่ไม่ได้ผลการประเมิน หากฉันยืนยันการเปลี่ยนตัวด้วยyเสียงเรียกเข้าจะข้ามไปยังนัดถัดไปทันทีและฉันจะไม่ยอมแพ้เพื่อดูว่าฉันทำผิดพลาดหรือไม่ ฉันได้พบปลั๊กอินvim-overที่แก้ปัญหาได้เพียงบางส่วน แต่ก็ต่อเมื่อคณิตศาสตร์ทั้งหมดปรากฏบนหน้าจอเมื่อคุณพิมพ์คำสั่ง เมื่อคุณกด Enter พฤติกรรมจะเหมือนกับที่ฉันได้อธิบายไว้ข้างต้นและฉันไม่ได้รับหน้าตัวอย่าง ดังนั้นมีวิธีรับ vim ประเมินนิพจน์การแทนที่เมื่อขอการยืนยันคำสั่งทดแทนหรือไม่?

4
ใน neovim ฉันจะแบ่งปันการลงทะเบียนระหว่างอินสแตนซ์ของตัวแก้ไขได้อย่างไร
ฉันรู้ว่ากลุ่มมีไคลเอนต์ / เซิร์ฟเวอร์แบ่งที่อนุญาตให้ลงทะเบียนการแชร์ระหว่างไคลเอนต์กลุ่มที่แตกต่างกัน แต่คุณจะทำสิ่งเดียวกันใน neovim ได้อย่างไร ไม่รองรับการตั้งค่าสถานะไคลเอนต์ / เซิร์ฟเวอร์ ฉันเห็นคำถามนี้แต่เป้าหมายของฉันคือแบ่งปันการลงทะเบียนโดยเฉพาะไม่ใช่การเลียนแบบลูกค้า / เซิร์ฟเวอร์ที่เหลือ สิ่งที่เหมือนneovim remoteเป็นวิธีเดียวหรือมีบางสิ่งที่ง่ายกว่าที่ฉันสามารถทำได้?

1
การอ้างอิง / เอกสารในกลุ่ม
ฉันถือว่าเอกสารเฉพาะที่มาพร้อมกับ vim นั้นเกี่ยวกับ vim หากฉันติดตั้งปลั๊กอินจะมีเอกสารประกอบของปลั๊กอินด้วย แต่มีเอกสารสำหรับภาษาอื่น ๆ ในกลุ่ม? ยกตัวอย่างเช่นฉันกำลังเขียนโค้ดใน python ใน Vim และต้องการค้นหารายการ comprehensions ใน Python อย่างรวดเร็ว มันจะดีมากถ้าฉันสามารถพิมพ์:h python-docVim และเอกสาร Python ถูกแสดงในเอกสาร Vim ตัวอย่างอื่น ๆ คือ:h markdownการนำมาร์กอัปไวยากรณ์ขึ้นเป็นต้น มีเว็บประเภทนี้อยู่แล้วหรือไม่ มีเอกสารประเภทใด:helptagsบ้างที่ฉันสามารถดาวน์โหลดและได้หรือไม่ ฉันพยายามที่จะ google แต่มันไม่ได้ผลเพราะตัวอย่างเช่นถ้าฉัน google vim markdown documentationgoogle คิดว่าฉันต้องการที่จะรู้วิธีการเขียน markdown ในกลุ่มและนำขึ้นลิงค์เช่นปลั๊กอิน markdown สำหรับกลุ่ม ...

1
สามารถกู้คืนไฟล์ข้อความได้จากไฟล์. *. swp เท่านั้นหรือไม่
ฉันแก้ไขไฟล์ใหม่จากระยะไกล: man-01-Intro.txtแต่เครื่องลงไปก่อนที่ฉันจะเขียนลงดิสก์ดังนั้นเฉพาะรุ่น swp เท่านั้นที่ได้รับการอนุรักษ์ มีอะไรที่ฉันสามารถทำได้เพื่อกู้คืนงานที่ทำไปแล้ว? ฉันใช้ Vim 7.4.273

3
ฉันจะทำให้คำสั่งไฮไลต์ใน. vimrc มีผลทันทีด้วย Vim 7.4 ได้อย่างไร
ฉันมีหลายhighlightคำสั่งใน.vimrcไฟล์ของฉัน ใน Vim 7.3 สิ่งเหล่านี้จะมีผลทันทีหลังจาก Vim เริ่มขึ้น หลังจากอัปเดตเป็น Vim 7.4 นี่ไม่ใช่กรณีอีกต่อไป Vim ใช้การเน้นค่าเริ่มต้นในตอนแรก เมื่อฉันโหลด.vimrcครั้งที่สองโดยเรียกใช้source ~/.vimrcงานการไฮไลต์ทำงานตามที่ฉันต้องการ คุณควรจะทำซ้ำปัญหานี้โดยใช้ขั้นตอนต่อไปนี้: ทำสำเนา.vimrcไฟล์ของคุณ แทนที่ด้วยไฟล์ที่มีเพียงเส้น~/.vimrchighlight Type ctermfg=28 cterm=bold ทำงานvim dummy.cในเทอร์มินัล 256 สี (เช่นเทอร์มินัล GNOME) พิมพ์intลงในบัฟเฟอร์ intควรจะปรากฏในตัวอักษรปกติและจะมีสีเขียวอ่อนซึ่งไม่ได้เป็นสิ่งที่ฉันต้องการ :source ~/.vimrcเข้าสู่ ตอนนี้intควรปรากฏเป็นตัวอักษรหนาและเป็นสีเขียวเข้ม อ้างอิงจากบทความวิธีการควบคุม / สีกำหนดค่าเสียงเรียกเข้าก็ควรจะโอเคที่จะเพียงแค่ใส่คำสั่งลงไปhighlight .vimrcบทความบอกว่าคุณควรใส่syntax enableหลังจากที่highlightคำสั่ง แต่ไม่ได้สร้างความแตกต่างใด ๆ การแก้ไขครั้งแรกของฉันคือการย่อหน้าแต่ละhighlightคำสั่งในด้วย.vimrc autocmd VimEnter *สิ่งนี้ใช้ได้กับไฟล์บางประเภท แต่ไม่เหมาะสำหรับไฟล์ประเภทอื่น (ไฟล์ C เป็นตัวอย่าง) อะไรคือสาเหตุของพฤติกรรมนี้? ฉันจะมีhighlightคำสั่งดำเนินการอย่างไรเมื่อเริ่มต้น Vim …

2
เยื้องไปยังระดับการเยื้องถัดไปด้วย >>
บางครั้งฉันต้องทำงานกับโค้ดที่ไม่ได้เยื้องระดับของการเยื้องฉันได้ตั้งค่ากลุ่ม (4 ช่องว่างต่อระดับ) โดยปกติหลังจากคัดลอก / วางบางสิ่งบางอย่างในไฟล์ ฉันมักจะทำอะไรกับและ<< >>ปัญหาคือพวกเขาไม่ข้ามไปยังระดับการเยื้องถัดไปพวกเขาเพียงแค่เพิ่มหรือลบ 4 ช่องว่าง ถ้าฉันมีรหัสเช่นนี้ if condition: do this do that การทำ>>ต่อไปdo thatจะส่งผลให้ if condition: do this do that ฉันต้องการที่จะไปที่นี้ if condition: do this do that นอกเหนือจากการจับคู่การเยื้องของบรรทัดข้างต้นอย่างง่าย ๆ แล้วฉันต้องการให้มันข้ามไปยังระดับถัดไปของการเยื้องไม่เพิ่ม 4 ช่องว่าง นี่คือสิ่งที่ฉันมีใน. vimrc ของฉันเกี่ยวกับการเยื้อง :set tabstop=4 shiftwidth=4 expandtab

1
ข้อความ Echo ในการเริ่มต้นโดยไม่ต้องแจ้ง
ฉันต้องการที่จะสะท้อนข้อความที่กำหนดเองเมื่อเริ่มต้นขึ้นอยู่กับว่าฟังก์ชั่นการเริ่มต้นบางอย่างประสบความสำเร็จหรือไม่ ฉันลองสิ่งนี้ในของฉัน.vimrc echo 'test' "All my settings ... ฉันต้องการให้กลุ่มสะท้อนข้อความราวกับว่าฉันเพิ่งพิมพ์ echo 'foo' จากบรรทัดคำสั่งหลังจากที่เปิดเป็นกลุ่ม แต่ฉันกลับได้รับกล่องโต้ตอบที่น่ารังเกียจที่เกิดขึ้นก่อนที่หน้าต่าง vim ของฉันจะเปิดขึ้น ฉันก็ลอง exe 'echo "test"' และ silent echo 'test' แต่ก็ไม่ได้ผล
9 vimrc  echo 

1
จอแสดงผลที่เป็นกลุ่มส่งออกไปยังข้อความ
ฉันสงสัยว่ามีคำสั่งใดที่คล้ายกัน:TOhtmlหรือไม่ แต่สำหรับข้อความธรรมดาเท่านั้นและแทนการแสดง Vim ทั้งหมด ตัวอย่างเช่นกำหนดจอแสดงผล: มันจะสร้างไฟล์ข้อความต่อไปนี้: 1 B 1 a ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ N <me] [+] 100% 1:1 ~ 1 a ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ N <me] [+] 100% 1:1 …
9 vimscript 

1
ความแตกต่างระหว่างคำสั่งเต็มและสั้น
มีความแตกต่างระหว่างการใช้ในทางปฏิบัติ :e และ :edit ยกเว้นความสามารถในการอ่านซึ่งเป็นสิ่งที่สมเหตุสมผลในการทำแผนที่ที่จะใช้:editเพราะมีความชัดเจนมากขึ้น มีความแตกต่างระหว่างพวกเขาหรือไม่? หมายเหตุ:นี้นำไปใช้เช่นกันเพื่อทุกคำสั่งอื่น ๆ

4
หมายเลขบรรทัดเฉพาะการตั้งค่าข้อความความกว้าง
ฉันใช้ gvim เพื่อเขียนอีเมลและใช้tw=72เพื่อแบ่งบรรทัดยาว ๆ ตอนนี้ฉันยังแก้ไขส่วนหัวจดหมายพื้นฐานในเอกสารเดียวกันเช่นฉันกำลังเพิ่มผู้รับในจดหมายของฉัน ตอนนี้tw=72มันยังแบ่งทุกครั้งหลังจาก 72 ตัวอักษร ฉันจะตั้งค่าtw=0ใน 4 บรรทัดแรก (นั่นคือส่วนหัว) และtw=72ส่วนที่เหลือของเอกสารได้อย่างไร ตัวเลือกการจัดรูปแบบของฉันมีลักษณะเช่นนี้หากเกี่ยวข้อง: set fo+=tcqn

1
วิธีกำหนดโอเปอเรเตอร์ที่อัพเดตในขณะที่กำลังรับอินพุตอยู่
ฉันได้กำหนดการแมปโอเปอเรเตอร์ซึ่งใช้พื้นที่ของข้อความจากนั้นขอสตริงการป้อนข้อมูลจากนั้นจัดพื้นที่กับTabularโดยใช้สตริงอินพุตเป็นอาร์กิวเมนต์ มันทำงานได้เป็นอย่างดี ฉันได้ดำเนินการเช่นนี้โดยใช้vim-operator-userเพื่อช่วยกำหนดผู้ประกอบการใหม่: map \aa <Plug>(operator-align) call operator#user#define('align', 'Align') function! Align(motion_wiseness) let expr = input("align: ") if len(expr) != 0 execute "'[,']Tabularize /".expr endif endfunction function! Getchar() let c = getchar() if c =~ '^\d\+$' let c = nr2char(c) endif return c endfunction จากนั้นฉันสงสัยว่าฉันจะทำให้มันทันสมัยขึ้นหรือไม่ในขณะที่เข้าสู่นิพจน์ปกติเพื่อจัดแนว ปัญหาด้วยวิธีการปัจจุบันคือการที่คุณต้องเลิกทำแล้วทำซ้ำถ้าคุณไม่ได้ใช้การแสดงออกที่ถูกต้อง สำหรับความพยายามโต้ตอบฉันทำนี้: map \== <Plug>(operator-align-interactive) call …
9 vimscript 

1
ใช้ backspace เพื่อแก้ไขคำสั่งปัจจุบันในโหมดปกติหรือไม่
บางครั้งเมื่อป้อนคำสั่งในโหมดปกติคุณอาจพิมพ์ผิดเช่นถ้าฉันตั้งใจจะพิมพ์ผมตั้งใจจะเริ่มพิมพ์10dk19d เนื่องจากคำสั่งยังไม่เสร็จสมบูรณ์ / ถูกกำหนดจึงเป็นไปได้หรือไม่ที่จะลบคีย์ที่ไม่ถูกต้องโดยใช้ backspace เช่น: 19d<backspace><backspace>0dkแทนที่จะต้องกดปุ่ม Escape แล้วลองคำสั่งอีกครั้ง? คำถามด้านข้าง: มีคำว่า Vim สำหรับโครงสร้างข้อมูลที่เก็บคำสั่งปัจจุบันก่อนที่จะคอมมิต

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