LaTeX alıntılarını bir metin nesnesi olarak nasıl değerlendirebilirim?


29

LaTeX'teki tırnak işaretleri, normal metinlerden farklıdır, biçimlendirilmeleri ``like this''(veya `like this'tek tırnaklar için). Bu Vim'de aralarında gezinmeyi zorlaştırıyor.

Genellikle gibi bir şey kullanırım T`ct'(kadar geriye `, değişene kadar '). Ancak, bu clunky ve doğal değil. Ben çizgisinde bir şey kullanabilmek için tercih edeceğini ciqYapabileceğim gibi, ( "tırnak içinde değişim") ciw, ca), ci", ca', vb

Vim'e ``LaTeX'' `quotes'metin nesnesi gibi davranmasını söylemenin bir yolu var mı ? (Artı olarak, yalnızca .texdosyayı düzenlerken bunu tetiklemenin herhangi bir yolu var mı?)

Yanıtlar:


10

LaTeX'i bilmiyorum ama bu işe yarıyor:

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

Bu bilgiyi buraya dayandırdım: http://vim.wikia.com/wiki/Creating_new_text_objects

Siz de destek ekleyebilirsiniz aq:

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

Bu işe yarar iq, ancak örneğin, bununla iş görünmüyor daq.
Doorknob

Sağ. aqEk bir benzer haritalama ile de çalışmasını sağlayabilirsiniz . Cevabı değiştirdim. Ayrıca T`yi t 'ile eşleştirdim, böylece ilk önce ileriye bakacak, bu da benim için daha doğal görünüyor.
superjer

Bu ancak, tek tırnak için çalışır daqüzerinde ``foo''sadece sonuçlarla `foo'.
Doorknob

Bu yöntemin tekli tırnaktan daha fazla işe yarayacağını sanmıyorum. Metnin fve toperatörlerin izin verdiğinden daha derin bir inceleme yapmanız gerekir; bu , değişkenler ve her şeyle bütün bir işlev yazmayı gerektirir. Bunu şimdi yapacak vaktim yok.
superjer

7

Düzenleme : Ben sadece aradığınız tam işlevselliği ekleyen vim-textobject-lateks eklentisini keşfettim (bir kaç şeye ek olarak). Eklentinin README'sinden:

Şu anda desteklenen metin nesneleri:

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{...}``

Böylece istediğiniz gibi kullanabilirsiniz caq. Test ettim ve reklamı yapıldığı gibi çalışıyor, ancak vim-textobject-user eklentisine bağlı olduğuna dikkat edin . Ayrıca , textobject-usereklentinin önce yüklendiğinden emin olmalısınız , aksi halde işler işe yaramaz.


Bununla birlikte, eklentilerle uğraşmak istemiyorsanız, orijinal cevabım faydalı olmaya devam ediyor:

Bu iki çizgiyi size eklemek , istediklerinizin çoğunu.vimrc kapsayacaktır .

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

Bunlar öncekine geri dönen yeni metin nesneleri ( aqve iq) yaratır `, görsel seçim moduna girip bir sonrakini seçer '.

Bu için çalışacak ciq, caq, yiq, ve diq. Ancak yaqve daqyank / dış tırnak silmez, ben başka bir metin nesnesi oluşturulur, böylece a", (yani işlemek için i"gerekli değildir, ancak tutarlı tutmak eklendi:

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

Buradaki en büyük dezavantajı bunun normal ca"vb. Kullanımı bozmasıdır. Bunları ön planda au FileType textutarsanız, bu sorunu yalnızca .texdosyalarda görürsünüz , ancak yine de sıkıntı olabilir. Ayrıca nesneyi ad/ id('çifte' fiyat teklifi için 'd') gibi bir adla da isimlendirebilirsiniz , ancak bu bana daha az sezgisel göründü (normal operasyondan en az farkı hedefliyordum).

Bunları sadece iki metin nesnesine sarmayı düşünebilmemin tek yolu, ilk kümenin dışındaki başka bir alıntıyı kontrol eden ve aqonu çağırmak için metin nesnelerini ayarlayan bir işlev yazmak olacaktır .

Not : Bunlarla ilgili birkaç küçük sorun daha var:

  1. Yanking, imlecinizi beklenmeyen bir yerde bırakabilir (bu, komutlara bir işaret kullanılarak eklenebilir (örn. ma2F`v2f'<cr>`a, Yalnızca sık kullandığınızdan emin olun).
  2. İmleç tırnak içinde olmalıdır; tırnak üzerinde ise garip şeyler olur.

Hepsini sarmak .vimrciçin, bu sorun için şahsen ekleyeceğim şey bu:

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

Gördüğünüz gibi, normal ca'/ ya"/ etc işlevlerini kırmayı seçtim, bu yüzden onlar için yeni komutlar öğrenmek zorunda kalmamıştım, çünkü normal işlevi zaten LaTeX içinde bu kadar fazla kullanmayacağım. Bu sadece kişisel bir tercih; Nesne adlarını değiştirmek zor değil. Ayrıca dosya tespiti ve işaretlerini de ekledim.


2

Bu eski bir sorudur, ancak gelecekteki ziyaretçilerin yararına: Lateks tekliflerini şu şekilde değiştirmeyi daha kolay buluyorum:

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

Ve sonra This thing is "Foobar"!vim ve lateks iyi çalışacak.


0

Eklenti vim-sandwich

Bunun için bir başka faydalı eklenti vim-sandwichft-spesifik çevreyi tanımlayan

  • l`ya l'yönelik `text',
  • l"için ``text''ve
  • textobjects üzerinde kolayca işlem yapmak için.

Çalışmayı takip eden varsayılan eşlemeler

  • textobject: iç metni değiştirmek `text'ile cisl'ya da çevredeki en yakın otomatik algılama ince ise cib(örneğin imlecin üzerinde hde `a (phony) text'basına gerektirir vibibc). Bununla birlikte, aşağıdaki ek metinleri takip etmeyi tanımlayabilirsiniz iq(OP örneği) 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" Şimdi sadece düğmesine basarak ciqveya çalışarak ciQ.
  • eklemek için textbirlikte saiwl'almak için tek kesme işareti `text'
    komuta desen olan sa{motion/textobject}{surrounding}ve vasıta operatöre çağırmak add surroundingüzerinde inner wordve surround türüdür latex single quote.
  • ile sdl'veya ile silsdb
  • ile srl'l"veya ile değiştirmeksrbl"

Destekler

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.