คำถามติดแท็ก substitute

การดำเนินการใด ๆ ที่เกี่ยวข้องกับการแทนที่ข้อความตามนิพจน์ทั่วไปเช่นคำสั่ง ex-mode ": s` อย่าสับสนกับแท็ก [แทนที่]

3
แทนด้วย vimscript บริสุทธิ์ (ไม่มี `: s`)
ฉันมีดังต่อไปนี้ใน vimrc ของฉัน: func! AddSpaceBeforeEqual() s/\([a-z)_0-9"'\[\]]\)=/\1 =/ge endfunc ฉันใช้vintเพื่อกำจัด vimrc ของฉันและได้รับคำเตือนต่อไปนี้: ProhibitCommandWithUnintendedSideEffect หลีกเลี่ยงคำสั่งที่มีผลข้างเคียงที่ไม่ได้ตั้งใจ หลีกเลี่ยงการใช้: [ubstitute] ในขณะที่เลื่อนเคอร์เซอร์และพิมพ์ข้อความผิดพลาด ชอบฟังก์ชั่น (เช่นการค้นหา ()) ที่เหมาะสมกับสคริปต์ สำหรับคำสั่ง vim จำนวนมากฟังก์ชั่นมีอยู่ที่ทำสิ่งเดียวกันโดยมีผลข้างเคียงน้อย โปรดดู: ฟังก์ชั่นช่วยเหลือ () สำหรับรายการฟังก์ชั่นในตัว คู่มือสไตล์ Google Vimscript อย่างไรก็ตามฉันไม่คิดว่าพวกเขาเป็นวิธีการทดแทนโดยไม่ต้องใช้:sคำสั่ง ตัวอย่างเช่นsearch()ฟังก์ชันให้บรรทัดที่จับคู่รูปแบบ แต่ไม่มีวิธีการทดแทน substitute()ฟังก์ชั่นดำเนินการในสตริงและไม่ทดแทนในไฟล์ทั้งหมด ฉันควรใช้วิธีการทดแทนด้วยตัวเองหรือพวกเขาเป็นวิธีที่ชาญฉลาดในการเขียนฟังก์ชั่นของฉันใหม่?

1
การแทนที่โกลบอลกลุ่มนั้นไม่ได้แทนที่ทุกการแข่งขัน
บางครั้งคำบรรยายย่อทั่วโลกของฉันไม่ได้แทนที่การแข่งขันทั้งหมดในบรรทัด มันได้รับการยืนยันจากความจริงที่ว่าฉันสามารถเห็นได้เมื่อฉันทำการทดแทนด้วยการยืนยันการแข่งขันจะพบในแถวที่มีการแข่งขันที่เป็นไปได้หลายรายการ แต่จากนั้นจะไปที่อีกสายหนึ่ง ผมใช้gหรือพารามิเตอร์การดำเนินงานในไฟล์ทั้งหมดที่มีgc% ในไฟล์นี้: hello hello hello hello hello hello hello ถ้าฉันจะ%s/hello/goodbye/gได้รับ goodbye hello goodbye goodbye hello hello goodbye สิ่งที่ฉันมีในการ.vimrcค้นหา / แทนที่คือ set hlsearch set ignorecase set incsearch
12 substitute 

1
วิธีการแทนที่ในหลายบรรทัด?
ฉันต้องการแทรกคำในหลายบรรทัดมีคำสั่งใด ๆ ไหม :[2,3,5,7,11]s/^/word\ /g ซึ่งจะแทรกwordที่จุดเริ่มต้นของบรรทัด 2, 3 บรรทัด, 5 บรรทัด, 7 และ 11 ที่นี่มีหลายบรรทัดไม่ต่อเนื่องกัน

6
วิธีต่อท้ายบรรทัดท้ายไฟล์ถ้ายังไม่มีเท่านั้น?
ฉันต้องการแก้ไขไฟล์ในสถานที่โดยต่อท้ายบรรทัดเฉพาะในกรณีที่ยังไม่มีหลักฐานของสคริปต์ของฉัน ปกติฉันจะทำสิ่งที่ชอบ: cat >> ~/.bashrc <<EOF export PATH=~/.composer/vendor/bin:\$PATH EOF นอกจากนี้ยังเป็นไปได้ที่จะทำผ่าน ansible ( line+ insertafter=EOF+ regexp) แต่เป็นอีกเรื่องหนึ่ง ใน vi / ex ฉันสามารถทำสิ่งที่ชอบ: ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc แต่แล้วฉันจะตรวจสอบได้อย่างไรว่ามีบรรทัดนั้นอยู่แล้ว (และไม่ทำอะไรเลย) โดยสมบูรณ์โดยไม่ต้องทำซ้ำบรรทัดเดิม? หรืออาจจะมีวิธีที่ง่ายกว่าในการแก้ไขใน Ex?

4
การ จำกัด การทำงานให้กับส่วนของรหัส
มีหลายครั้งในชีวิตการทำงานในแต่ละวันของฉันที่ฉันจำเป็นต้องใช้ในฟังก์ชั่นเฉพาะสิ่งต่าง ๆ เช่นการเน้นหรือค้นหาตัวแปร แต่ฉันไม่เคยจัดการเพื่อ จำกัด ขอบเขตของการแก้ไข / การค้นหา มีวิธีในการพูดเลือกคัดสรรค้นหาการอ้างอิงทั้งหมด$colorภายในชุดของวงเล็บปีกกาหรือพับนี้ ฯลฯ หากเป็นไปได้มันจะเหมาะอย่างยิ่งที่นี่เป็นเรื่องธรรมดาที่ค่อนข้างเพื่อที่จะสามารถนำไปใช้กับการแก้ไข / เปลี่ยนข้อความ ตัวอย่างเช่น: $color = "#fff"; function PickColor () { $color = "#bbb"; $newColors = ["#000", "#fbf", $color]; foreach ($newColors as $c) { if ($c == "#fff") { break; } } } $differentColor = $color; รหัสนี้เป็นตัวอย่างที่ค่อนข้างแย่อย่างไรก็ตามถ้าฉันต้องการแทนที่อินสแตนซ์ทั้งหมดของ $ color เราจะทำสิ่งนี้ในบริบทของฟังก์ชัน …

1
ใช้คำสั่งโหมดปกติเพื่อจับคู่ regex
ฉันใช้นิพจน์ทั่วไปต่อไปนี้เพื่อจับคู่สตริงเอกสารภายใต้นิยามฟังก์ชัน Clojure: \vdefn.*\n\s*\zs"([^"]|\n)*" มีวิธีเรียกใช้gqคำสั่งโหมดปกติ(บรรทัดรูปแบบ) ในทุกการแข่งขันของรูปแบบนี้ในไฟล์ที่กำหนดหรือไม่?

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