मैं एक पाठ वस्तु के रूप में लाटेक्स उद्धरणों का इलाज कैसे कर सकता हूं?


29

LaTeX में उद्धरण चिह्न सामान्य पाठ की तुलना में भिन्न होते हैं, जिसमें वे स्वरूपित होते हैं ``like this''(या `like this'एकल उद्धरण के लिए)। इससे विम में उनके माध्यम से नेविगेट करना मुश्किल हो जाता है।

मैं आमतौर पर कुछ का उपयोग करता हूं T`ct'(जब तक पीछे की ओर `, जब तक परिवर्तन नहीं ')। हालाँकि, यह क्लूनी और अप्राकृतिक है। मैं की तर्ज पर कुछ का उपयोग करने में सक्षम होना पसंद करेंगे ciq( "उद्धरण में परिवर्तन"), जैसे मैं क्या कर सकते हैं ciw, ca), ci", ca', आदि

क्या विम को ``LaTeX'' `quotes'पाठ वस्तुओं के रूप में मानने का कोई तरीका है ? (प्लस के रूप में, क्या .texफ़ाइल को संपादित करते समय केवल इसे ट्रिगर करने का कोई तरीका है ?)

जवाबों:


10

मैं LaTeX नहीं जानता, लेकिन यह काम करता है:

vnoremap iq :<C-U>silent! normal! t'vT`<CR>
omap iq :normal viq<CR>

मैंने इसे यहाँ पर दी गई जानकारी के आधार पर: http://vim.wikia.com/wiki/Creating_new_text.obbs

आप इसके लिए समर्थन भी जोड़ सकते हैं aq:

vnoremap aq :<C-U>silent! normal! f'vF`<CR>
omap aq :normal vaq<CR>

यह काम करता है iq, लेकिन उदाहरण के लिए, के साथ काम नहीं करता है daq
डॉर्कनोब

सही। आप इसे aqअतिरिक्त समान मैपिंग के साथ काम कर सकते हैं । मैंने उत्तर संपादित किया। मैंने मैपिंग में T` को 't' के साथ स्वैप किया ताकि यह सबसे पहले आगे की खोज करे, जो मुझे अधिक स्वाभाविक लगता है।
सुपरजेर

यह एकल उद्धरण के लिए काम करता है, लेकिन daqपर ``foo''में सिर्फ परिणाम `foo'
Doorknob

मुझे नहीं लगता कि यह विधि एकल से अधिक उद्धरणों के लिए काम कर सकती है। आपको पाठ की गहराई से निरीक्षण करने की आवश्यकता होगी fऔर tऑपरेटरों द्वारा अनुमति दी जाएगी, जिसमें चर और सब कुछ के साथ एक संपूर्ण फ़ंक्शन लिखने की आवश्यकता होगी। मेरे पास अभी ऐसा करने का समय नहीं है।
सुपरजेर

7

संपादित करें : मैंने अभी vim-textobject-latex प्लगइन खोजा है , जो आपके द्वारा ढूंढी जा रही सटीक कार्यक्षमता को जोड़ता है (कुछ अन्य चीजों के अलावा)। प्लगइन की README से:

वर्तमान में समर्थित टेक्स्ट ऑब्जेक्ट हैं:

a   i   Description
a\\ i\\ Inline math surrounded by ``\\(`` and ``\\)``.
a$  i$  Inline math surrounded by dollar signs.
aq  iq  Single-quoted text ``\`like this'``.
aQ  iQ  Double-quoted text ``\``like this''``.
ae  ie  Environment ``\begin{...}–\end{...}``

तो आप उपयोग कर सकते हैं caqऔर जैसा आप चाहते थे। मैंने इसका परीक्षण किया, और यह विज्ञापित के रूप में काम करता है, लेकिन ध्यान दें कि यह vim-textobject-user प्लगइन पर निर्भर है । यह भी ध्यान दें कि आपको यह सुनिश्चित करना होगा कि textobject-userप्लगइन पहले लोड हो , अन्यथा चीजें काम नहीं करेंगी।


यदि आप प्लगइन्स के साथ गड़बड़ नहीं करना चाहते हैं, हालांकि, मेरा मूल उत्तर उपयोगी है:

इन दो पंक्तियों को जोड़ने से आप जो चाहते हैं, उसमें से अधिकांश.vimrc को कवर किया जाएगा ।

onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>

इन नए पाठ वस्तुओं (बनाने aqऔर iq) जो वापस पिछले करने के लिए जाना `, दृश्य चयन मोड में प्रवेश, तो अगला को चुनें '

इस के लिए काम करेंगे ciq, caq, yiq, और diq। हालाँकि, yaqऔर daqबाहरी उद्धरणों को याँक / डिलीट नहीं करेगा, इसलिए मैंने a"इसे संभालने के लिए एक और टेक्स्ट ऑब्जेक्ट बनाया , (जिसकी i"आवश्यकता नहीं है, लेकिन मैंने चीजों को लगातार बनाए रखने के लिए जोड़ा:

onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>

प्रमुख नकारात्मक पक्ष यह है कि यह सामान्य टूट जाएगा है ca", आदि का उपयोग करें। यदि आप उनके साथ प्रस्तावना रखते हैं au FileType tex, तो आपके पास केवल उस समस्या को .texफाइलों में रखना होगा , लेकिन यह अभी भी कभी-कभी एक झुंझलाहट हो सकती है। आप वस्तु को कुछ ऐसा भी नाम दे सकते हैं जैसे ad/ id('डी' 'डबल' उद्धरण के लिए), लेकिन वह मुझे कम सहज लगता था (मैं सामान्य ऑपरेशन से कम से कम अंतर के लिए लक्ष्य कर रहा था)।

जिस तरह से मैं सिर्फ दो पाठ वस्तुओं में लपेटने के बारे में सोच सकता हूं वह एक फ़ंक्शन लिखना होगा जो पहले सेट के बाहर किसी अन्य उद्धरण के लिए जांच करता है और aqपाठ ऑब्जेक्ट्स को कॉल करने के लिए सेट करता है।

नोट : इन के साथ कुछ अन्य छोटे मुद्दे हैं:

  1. यांकिंग आपके कर्सर को अनपेक्षित स्थान पर छोड़ सकता है (इसे कमांड्स (जैसे ma2F`v2f'<cr>`a) में एक निशान जोड़कर तय किया जा सकता है , बस यह सुनिश्चित करें कि एक का उपयोग न करें जिसे आप अक्सर मैन्युअल रूप से उपयोग करते हैं)
  2. कर्सर को उद्धरण के अंदर होना चाहिए; अजीब बात है अगर यह उद्धरण पर है।

उन सभी को लपेटने के लिए, यह वही है जो मैं व्यक्तिगत रूप से .vimrcइस मुद्दे के लिए जोड़ूंगा:

augroup filetype_latex
    au!
    au FileType tex,plaintex onoremap a' :<c-u>normal! muF`vf'<cr>`u
    au FileType tex,plaintex onoremap i' :<c-u>normal! muT`vt'<cr>`u
    au FileType tex,plaintex onoremap a" :<c-u>normal! mu2F`v2f'<cr>`u
    au FileType tex,plaintex onoremap i" :<c-u>normal! mu2T`v2t'<cr>`u
end augroup

जैसा कि आप देख सकते हैं, मैंने सामान्य ca'/ ya"/ आदि कार्यक्षमता को तोड़ने का विकल्प चुना है, इसलिए मुझे उनके लिए नए कमांड सीखने की ज़रूरत नहीं होगी क्योंकि मैं सामान्य कार्यक्षमता का उपयोग नहीं करूँगा क्योंकि लाटेक्स वैसे भी। यह सिर्फ एक व्यक्तिगत प्राथमिकता है; ऑब्जेक्ट नामों को स्विच करना मुश्किल नहीं है। मैंने फ़िल्टाइप डिटेक्शन और मार्क्स में भी जोड़ा।


2

यह एक पुराना प्रश्न है, लेकिन भविष्य के आगंतुकों के लाभ के लिए: मुझे लेटेक्स उद्धरण बदलने में आसानी होती है:

\usepackage{csquotes} % change " " into nice double quotes  
\MakeOuterQuote{"}

और फिर This thing is "Foobar"!विम और लेटेक्स में ठीक काम करेगा।


0

लगाना vim-sandwich

इसके लिए एक और उपयोगी प्लगइन है vim-sandwichजिसने फीट-विशिष्ट परिवेश को परिभाषित किया है

  • l`या के l'लिए `text',
  • l"के लिए ``text''और
  • textobjects आसानी से उन पर काम करते हैं।

काम के बाद डिफ़ॉल्ट मैपिंग के साथ

  • textobject: के भीतर पाठ की जगह `text'के साथ cisl'या अगर आसपास के निकटतम के ऑटो का पता लगाने ठीक है cib(उदाहरण के लिए कर्सर पर hमें `a (phony) text'प्रेस करने की आवश्यकता है vibibc)। हालांकि, अगर आप अतिरिक्त textobject निम्नलिखित परिभाषित कर सकते हैं iq(ओपी उदाहरण) omap <unique> iq <Plug>(textobj-sandwich-query-i)l' xmap <unique> iq <Plug>(textobj-sandwich-query-i)l' omap <unique> aq <Plug>(textobj-sandwich-query-a)l' xmap <unique> aq <Plug>(textobj-sandwich-query-a)l' omap <unique> iQ <Plug>(textobj-sandwich-query-i)l" xmap <unique> iQ <Plug>(textobj-sandwich-query-i)l" omap <unique> aQ <Plug>(textobj-sandwich-query-a)l" xmap <unique> aQ <Plug>(textobj-sandwich-query-a)l" अब बस दबाने ciqया ciQकाम करता है।
  • जोड़ने के लिए textसाथ saiwl'ही अक्षर लोप प्राप्त करने के लिए `text'
    आदेश के पैटर्न है sa{motion/textobject}{surrounding}और ऑपरेटर आह्वान साधन add surroundingपर inner wordऔर चारों ओर प्रकार है latex single quote
  • के साथ sdl'या साथ हटाएँsdb
  • के साथ srl'l"या साथ बदलेंsrbl"

यह समर्थन करता है

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