วิธีง่าย ๆ คือ: เพียงเลือกบรรทัดของคุณ (ทั้งหมดยกเว้นบรรทัดสุดท้าย) - หรือใช้%
- และเรียกใช้:
:'<,'>s/\n/,/
หรือ
:'<,'>s/\n/, /
(แน่นอน'<,'>
ส่วนที่ถูกแทรกหลังจาก:
Vim เพื่อกำหนดเป้าหมายการเลือก)
(2) อัปเดต:
อาคารด้านบน (และความคิดเห็นของSato Katsura ) ต่อไปนี้คือการดำเนินการ "เข้าร่วมแบบโต้ตอบ" ที่เป็นไปได้โดยมีการนับซ้ำและการสนับสนุนซ้ำ ๆ เพิ่มเติม:
" ================ script ===============================================
" interactive 'J', 'gJ' replacement with optional 'vim-repeat' support
" The last used separator is automatically reused as:
" a. default choice
" b. when repeating (=> non-interactive repeats: same range, same separator)
let g:last_join_separator = " "
function! s:interactiveJoin(use_last_sep,...) range
if (a:use_last_sep == 0) "interactive, ask for separator to use
call inputsave()
echohl Question
let l:sep = input("Separator:", g:last_join_separator)
echohl None
call inputrestore()
redraw!
let g:last_join_separator = l:sep "update last separator value
else "non-interactive (when repeating with '.')
let l:sep = g:last_join_separator
endif
if (a:0 == 0) "with no argument, remove indentation *and trailing spaces*
let l:subst = 's/\s*\n\+\s*/\=' . "'" . l:sep . "'/"
else " don't remove indentation or trailing spaces (act like 'gJ')
let l:subst = 's/\n\+/\=' . "'" . l:sep . "'/"
endif
if a:firstline < a:lastline "join given range
execute a:firstline . ',' . (a:lastline - 1) . l:subst
let l:count = a:lastline - a:firstline + 1 "default count for repeat
else "or join only with next line
execute l:subst
let l:count = 1 "default count for repeat
endif
"make command repeatable
"(with the tpope/vim-repeat plugin: optional, recommended)
if (a:0 == 0)
silent! call repeat#set("\<Plug>(repeatJoin)", l:count)
else
silent! call repeat#set("\<Plug>(repeatGJoin)", l:count)
endif
endfunction
noremap <silent> <Plug>(interactiveJoin) :call <SID>interactiveJoin(0)<CR>
noremap <silent> <Plug>(interactiveGJoin) :call <SID>interactiveJoin(0,'g')<CR>
noremap <silent> <Plug>(repeatJoin) :call <SID>interactiveJoin(1)<CR>
noremap <silent> <Plug>(repeatGJoin) :call <SID>interactiveJoin(1,'g')<CR>
และการทำแผนที่จริง:
"================= vimrc ================================================
nmap J <Plug>(interactiveJoin)
xmap J <Plug>(interactiveJoin)
nmap gJ <Plug>(interactiveGJoin)
xmap gJ <Plug>(interactiveGJoin)
นี่เป็น kinda (*) ที่ชอบJ
แต่เป็นแบบโต้ตอบ - มันจะพร้อมต์ให้กับสตริงตัวคั่น สตริงเริ่มต้นคือช่องว่าง - ตัวอย่างเช่นในการเข้าร่วมบรรทัดที่ไม่มีตัวคั่นกดBackspace
เมื่อได้รับแจ้งเพื่อลบอักขระช่องว่างเริ่มต้นและEnter
เพื่อยอมรับตัวคั่นว่าง (ตอนนี้) นับเช่น3J
ทำงานได้เช่นกัน หากtpope/vim-repeat
ติดตั้งปลั๊กอินให้ทำซ้ำด้วย '.' จะใช้งานได้การใช้ตัวคั่นล่าสุดซ้ำและ (หากไม่มีการเปลี่ยนแปลง - เช่น10.
) การนับครั้งล่าสุดหรือช่วงของเส้นภาพ
(*) มันไม่ตรงเช่นJ
แม้ว่า: ในขณะที่มันจะลบเยื้องก็จะไม่ตรวจสอบ.!?
(ตอนจบของวลี) เพื่อแทรก 2 คันแทนหนึ่งหรือใส่เป็นพื้นที่เฉพาะในกรณีที่มันหายไป (มันยากที่จะทำสิ่งที่ชอบ สิ่งนี้เนื่องจากสตริงตัวคั่นสามารถเป็นอะไรก็ได้ในขณะนี้) นอกจากนี้ยังจะลบช่องว่างต่อท้าย (ดูสมเหตุสมผล)
ฉันคิดว่านี่อาจเป็นวิธีที่ดีในการ จำกัด จำนวนผู้ให้บริการพื้นที่จดหมาย :)
ในทางเทคนิคแล้วJ
มันไม่ได้เป็นโอเปอเรเตอร์ แต่ใกล้เคียงกับหนึ่งตัวอย่างเช่นคุณไม่สามารถทำได้Jaw
เพื่อเข้าร่วม "คำ"
(ยินดีต้อนรับคำแนะนำ)