একটি সহজ উপায় হ'ল: কেবল আপনার লাইনগুলি নির্বাচন করুন (শেষটি ব্যতীত সমস্ত) - বা ব্যবহার করুন %
- এবং চালান:
:'<,'>s/\n/,/
অথবা
:'<,'>s/\n/, /
(যেখানে, অবশ্যই, '<,'>
অংশটি ইতিমধ্যে ভিমের পরে সন্নিবেশ করা :
হয়েছিল, নির্বাচনটি লক্ষ্যবস্তু করার জন্য)
(২ য়) আপডেট:
উপরের উপর ভিত্তি করে (এবং সাটো ক্যাটসুরার মন্তব্য), গণনা এবং alচ্ছিক পুনরাবৃত্তি সমর্থন সহ এখানে একটি সম্ভাব্য "ইন্টারেক্টিভ জয়েন" বাস্তবায়ন রয়েছে:
" ================ 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)
এটি কিন্ডা (*) এর মতো J
তবে ইন্টারেক্টিভ - এটি বিভাজক স্ট্রিংয়ের জন্য অনুরোধ জানাবে। ডিফল্ট স্ট্রিংটি একটি স্থান - সুতরাং, উদাহরণস্বরূপ, কোনও বিভাজক ছাড়া লাইনগুলিতে যোগ দেওয়া, Backspace
যখন অনুরোধ করা হবে তখন হিট করুন , ডিফল্ট স্থানের অক্ষর সরিয়ে ফেলতে এবং Enter
(এখন) খালি বিভাজককে স্বীকার করতে। গণনা, যেমন 3J
, এছাড়াও কাজ করে। তাহলে tpope/vim-repeat
প্লাগইনটি ইনস্টল হয়ে, সঙ্গে পুনরায় '।' শেষ বিভাজক এবং (পরিবর্তিত না হলে - উদাহরণস্বরূপ 10.
) শেষ গণনা বা ভিজ্যুয়াল লাইনের পরিসীমা পুনরায় ব্যবহার করেও কাজ করবে ।
(*) এটি ঠিক মত নয় J
, যদিও এটি ইন্ডেন্টেশনটি সরিয়ে ফেলবে, এটির .!?
পরিবর্তে এটি দুটি (দুটি বাক্য) সন্নিবেশ করানোর জন্য অনুসন্ধান করবে না বা এটি অনুপস্থিত থাকলে একটি স্থান সন্নিবেশ করানো হবে (এর মতো কিছু করা শক্ত) এটি, যেহেতু বিভাজক স্ট্রিং এখন কিছু হতে পারে)। এটি পিছনের স্থানগুলিও সরিয়ে ফেলবে (আরও অর্থবোধ করে)।
আমি মনে করি সীমিত অপারেটরদের চিঠি-স্পেসকে ওভারলোড করার এটি একটি দুর্দান্ত উপায় হতে পারে :)
ঠিক আছে, প্রযুক্তিগতভাবে J
কোনও অপারেটর নয়, তবে একটির কাছাকাছি - উদাহরণস্বরূপ, Jaw
"একটি শব্দ" -এ যোগ দিতে আপনি পারবেন না ।
(পরামর্শ স্বাগত জানাই)