कैसे लिखें लंबवत?


22

आइए बताते हैं कि मैं अपने दस्तावेज़ में निम्नलिखित पाठ का उत्पादन करना चाहता हूं:

%
%            Not Important
%    O ------------------------->
%    |
%  S |
%  o |
%  m |
%  e |
%    |
%  M |
%  s |
%  g |
%    |
%    V

क्या प्रत्येक पंक्ति में प्रत्येक वर्ण को मैन्युअल रूप से सम्मिलित किए बिना "उपरोक्त रूप से कुछ संदेश" लिखने का कोई आसान तरीका है?


5
आप अपने पाठ को सामान्य रूप से लिख सकते हैं, और फिर और newlines :s/./% \0\r/जोड़ने के लिए कर सकते हैं %... एक महान समाधान नहीं है , हालांकि ...
मार्टिन टूरनोइज

अच्छा समाधान, यह थोड़े काम करता है। अभी के लिए उपयोग कर रहा होगा, धन्यवाद।
एलन हसेगावा

जवाबों:


16

वास्तव में अच्छा समाधान शायद कुछ और काम की आवश्यकता होगी, लेकिन "बुरा नहीं" प्राप्त करना बहुत कठिन नहीं है।

विचार

हम सभी की जरूरत है कि प्रत्येक चरित्र के बाद एक रेखा नीचे जाए, तो चलो बस InsertCharPreऑटो-कमांड के माध्यम से !

कोड

निर्देशिका के .vimrcअंतर्गत कुछ फ़ाइल में इसे अभी या बेहतर तरीके से रखें plugin/

" enters insert mode to write vertically
function! VertStart()
    augroup Vert
        autocmd!
        " handles each entered character and moves cursor down
        autocmd InsertCharPre * call feedkeys("\<left>\<down>", 'n')
        autocmd InsertLeave * call VertEnd()
    augroup END

    inoremap <BS> <Up><Del>
    startinsert
endfunction

" cleans up on leaving insert mode
function! VertEnd()
    iunmap <BS>
    augroup Vert
        autocmd!
    augroup END
endfunction

" command to start writing vertically
command! Vert call VertStart()

प्रयोग

:Vertलंबवत लिखना शुरू करने के लिए कमांड दर्ज करें । डालने मोड को स्वचालित रूप से इस "मोड" को निष्क्रिय करता है। बेशक, आप इसे शॉर्टकट में मैप कर सकते हैं यदि आपको अक्सर इस कमांड का उपयोग करने की आवश्यकता होती है।

ज्ञात पहलु

  1. यदि आप इंसर्ट मोड छोड़ते हैं तो वर्टिकल राइटिंग अक्षम नहीं होगी Ctrl-C(यह घटना के Ctrl-Cसंबंध में थोड़े अजीब तरीके से कार्यान्वित होने का परिणाम है InsertLeave, जिसे निकाल नहीं दिया जाता है; इस प्रकार कुंजी का उपयोग करने के लिए सावधानी बरतने की आवश्यकता होती है)।

1
ज्ञात समस्या # 1 का खंडन: आपको इन्सर्ट मोड नहीं छोड़ना चाहिए <C-C>
तोमकाडो

@tommcdo, मैं नहीं, लेकिन अगर यह वहाँ है, कोई इसका उपयोग करता है। संक्षिप्त रूप से विस्तार से बचने के लिए यह वास्तव में उपयोगी है, मैं सोच रहा हूं कि InsertLeaveइस कुंजी के लिए ट्रिगर क्यों नहीं किया गया है।
xaizek

1
मुझे लगता है कि मेरा मतलब है कि <C-C>इन्सर्ट मोड से बाहर निकलने का एक अच्छा तरीका है। जिस तरह से आपने इसका उल्लेख किया है, इसका मतलब यह हो सकता है कि यह कभी-कभी एक अच्छा तरीका है। यह कहने की तरह है "यदि आप अपने कंप्यूटर को अनप्लग करके Microsoft Word को बंद कर देते हैं, तो आपके दस्तावेज़ सहेजे नहीं जाएंगे।"
तोमकाडो

@tommcdo को नहीं लगा कि यह इस तरह लग सकता है। <C-C>मुद्दे के कारण होने के बारे में एक नोट जोड़ा । मैं संक्षिप्त विवरण विस्तार को दबाने वाली मोड को छोड़ने के लिए किसी अन्य विधि से अवगत नहीं हूं <C-C>, यदि कोई नहीं है, तो यह कम से कम मानचित्रण के भाग के रूप में उपयोगी है inoremap <silent> <c-c> <c-c>:doautocmd InsertLeave<cr>
xaizek

मैंने संक्षिप्त रूप से विचार नहीं किया, यह एक अच्छी बात है। यहां तक ​​कि मुझे सहायता के कुछ स्थान भी मिले, जो <C-C>संक्षिप्त विवरण के बिना इंसर्ट मोड को छोड़ने का वर्णन करते हैं , और इस बात का कोई उल्लेख नहीं है कि यह InsertLeaveघटनाओं को कैसे ट्रिगर नहीं करता है । मैं अब उत्सुक हूँ अगर ऐसा करने का कोई अंतर्निहित तरीका है, लेकिन अभी के लिए आपकी मैपिंग एक महान विचार है।
13 दिसंबर को tommcdo

4

आप हमेशा की तरह टाइप कर सकते हैं और फिर Vim में प्रतिस्थापन के रूप में वर्तमान क्षैतिज पाठ को ऊर्ध्वाधर में परिवर्तित कर सकते हैं (वर्तमान लाइन पर लागू होता है):

:s/\(.\)/\1\r/g

या याद रखने की विधि के लिए बहुत आसान है निम्न कमांड में से किसी एक को निष्पादित करना (सभी लाइनों के लिए):

:%!fold -w1
:%!grep -o .

केवल वर्तमान लाइन या अधिक लाइनों के लिए आवेदन करने के लिए, पूर्ववर्ती के साथ V, यदि आवश्यक हो, तो अधिक लाइनों के लिए क्षेत्र का विस्तार करें और ऊपर (लेकिन बिना %) निष्पादित करें ।

Windows पर PowerShell के लिए, तह के लिए प्रतिस्थापन की जाँच करें

सरल कुंजी मानचित्रण (जैसे F2) को परिभाषित करने के लिए , निम्नलिखित प्रयास करें:

:nnoremap <F2> V:!fold -w1<CR>

फिर कुछ टाइप करें और F2टेक्स्ट को वर्टिकल बनाने के लिए दबाएं , जैसा कि सरल है।


अन्य विकल्प स्वचालित शब्द रैपिंग, उदाहरण के लिए सेट करना है

:set tw=1 " textwidth
:set formatoptions+=t

यह स्वचालित रूप से पाठ को 1 वर्ण के करीब लपेट देगा क्योंकि सफेद स्थान अनुमति देता है। नुकसान यह है कि प्रत्येक पत्र को अंतरिक्ष द्वारा पालन करने की आवश्यकता है (इसलिए यह लगभग उसी तरह है जैसे आप दबाएंगेEnter


1
इसके बजाय :s/\(.\)/\1\r/g, आप बस इस्तेमाल कर सकते हैं :s/./\0\r/gजो कार्यात्मक रूप से समान है।
वाइल्डकार्ड

1

मुझे लगता है कि मैक्रों असामान्य सामान करने के लिए एक बढ़िया तरीका है यदि आप ऐसा करने में रुचि रखते हैं जो एक नीला चाँद में एक बार से अधिक नहीं है। मान लें कि आपके पास निम्न तालिका है:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  S |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    V

और मान लीजिए कि आप बदलना चाहते हैं मान लीजिए Some Msgके साथ Other Message। सबसे पहले, आइए अतिरिक्त वर्ण के लिए तालिका का विस्तार करें (अंतिम से पहले की पंक्ति yy5p:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  S |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

जिस मैक्रो के साथ मैं आने वाला हूं, वह पुराने टेक्स्ट की जगह टेक्स्ट को क्षैतिज से ऊर्ध्वाधर में बदलने का ध्यान रखने वाला है। पहले स्थान पर टेक्स्ट टाइप करके शुरू करें (कर्सर सबसे अंत में है Other Message):

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  SOther Message |
%  o | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

निम्नलिखित मैक्रो रिकॉर्ड करें:

  • qq: मैक्रो नाम की रिकॉर्डिंग शुरू करें q
  • ^: लाइन की शुरुआत करने के लिए जाओ
  • 3l: उस कॉलम पर जाएं जहां टेक्स्ट रखा जा रहा है
  • x: पुराने चरित्र को हटाएं
  • l: पुराने चरित्र के स्थान पर संदेश के एक पात्र को छोड़ते हुए दाईं ओर जाएं:
  • v: विजुअल मोड पर जाएं
  • f|: पर कूदना |
  • 2h: दो वर्ण वापस ले जाएँ
  • d: कट का चयन
  • j: नीचे की ओर
  • P: कर्सर से पहले पेस्ट करें
  • q: मैक्रो की रिकॉर्डिंग समाप्त करें

इस समय आपके पास है:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  other Message | So you can't just write your
%  m |
%  e | text and transform it into
%    |
%  M | the shape that you want
%  s |
%  g | Macros help here
%    |
%    |
%    |
%    |
%    |
%    |
%    V

मैक्रो को पर्याप्त संख्या में दोहराएं (यानी, वर्णों की संख्या, लेकिन आपको इसे पहले से जानने की आवश्यकता नहीं है। बस कम से कम समझें, और एक बार जारी रखने के बाद देखें कि आपका अनुमान कितना करीब था)। तो चलिए साथ चलते हैं 10@q। आपको मिला:

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  t | So you can't just write your
%  h |
%  e | text and transform it into
%  r |
%    | the shape that you want
%  M |
%  e | Macros help here
%  s |
%  s |
%  a |
%   ge |
%    |
%    |
%    V

ठीक है, एक और ( @q):

%
%            Not Important
%    O ------------------------->
%    | Stuff in side the table
%  O |
%  t | So you can't just write your
%  h |
%  e | text and transform it into
%  r |
%    | the shape that you want
%  M |
%  e | Macros help here
%  s |
%  s |
%  a |
%  g |
%   e |
%    |
%    V

आपका कर्सर अब अंतिम पर है e। मैक्रो अंतिम पत्र के साथ अच्छी तरह से काम नहीं करता है (आप असंतोषजनक परिणामों के लिए @qऔर फिर u(पूर्ववत) के साथ प्रयास कर सकते हैं )। बस इसे अपने आप को समायोजित करें ( Xबैकस्पेस के लिए)।


बहुत अच्छा। मैक्रों विम में जाने का रास्ता हैं। मेरा त्वरित प्रयास अनिवार्य रूप से आपका ही था; qq03lxldt|i ^[jPxq@q
वाइल्डकार्ड

@Wildcard, मैं खतरनाक हो सकता है?
शाहबाज़

1
हा! मेरे दिमाग से निकल गया; मुझे लगा कि मेरे पास है। :)
वाइल्डकार्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.