LaTeX 따옴표를 텍스트 객체로 어떻게 취급 할 수 있습니까?


29

LaTeX의 따옴표는 일반 텍스트와 다릅니다 ``like this''( 형식이 작 거나 `like this'작은 따옴표로 표시됨). 이로 인해 Vim에서 탐색하기가 어렵습니다.

나는 보통 같은 것을 사용합니다 T`ct'(뒤로,까지 `변경 '). 그러나 이것은 어색하고 부자연 스럽습니다. 나는의 라인을 따라 뭔가 사용할 수 있도록하는 것을 선호 ciq내가 할 수있는 것처럼, ( "인용 부호의 변화를") ciw, ca), ci", ca', 등

Vim에게 ``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_objects

다음에 대한 지원도 추가 할 수 있습니다 aq.

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

이것은 작동 iq하지만 예를 들어 작동하지 않는 것 같습니다 daq.
Doorknob

권리. aq비슷한 매핑을 추가로 사용할 수 있습니다 . 나는 대답을 편집했다. 또한 매핑에서 T`를 t '와 스왑하여 먼저 탐색하므로 더 자연스럽게 보입니다.
superjer

작은 따옴표 daq``foo''대해서만 작동하지만 결과는 `foo'.
Doorknob

나는이 방법이 작은 따옴표보다 더 효과적이라고 생각하지 않습니다. 연산자 ft연산자가 허용하는 것 보다 텍스트를 심도있게 검사해야합니다. 이렇게하려면 변수와 모든 항목으로 전체 함수를 작성해야합니다. 지금 할 시간이 없습니다.
superjer

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>

이것은 새로운 텍스트 객체 ( aqiq)를 만들어 이전 텍스트 로 돌아가서 `시각적 선택 모드로 들어간 다음 다음까지 선택합니다 '.

이것은 작동합니다 ciq, caq, yiq,와 diq. 그러나 yaqdaq십중팔구 / 외부 따옴표를 삭제하지 않습니다, 나는 다른 텍스트 객체를 생성하므로 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( 'double'quote의 경우 'd') 와 같은 이름으로 지정할 수도 있지만 직관적이지 않은 것으로 보입니다 (정상 작업과의 최소 차이를 목표로하고있었습니다).

이것을 두 개의 텍스트 객체로 감싸는 유일한 방법은 첫 번째 세트 이외의 다른 따옴표를 확인하고 aq텍스트 객체를 호출하도록 설정하는 함수를 작성하는 것 입니다.

참고 : 다음과 같은 몇 가지 사소한 문제가 있습니다.

  1. Yanking은 커서를 예기치 않은 위치에 놓을 수 있습니다 (예 : 명령에 표시를 사용하여 추가하면 수정 될 수 있음 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"/ etc 기능 을 중단하기로 결정 했기 때문에 LaTeX 내에서 일반적인 기능을 많이 사용하지 않기 때문에 새로운 명령을 배울 필요가 없습니다. 그것은 개인적인 취향 일뿐입니다. 개체 이름을 전환하기 어렵지 않습니다. 또한 파일 형식 감지 및 표시에 추가했습니다.


2

이것은 오래된 질문이지만 미래 방문자의 이익을 위해 : 라텍스 따옴표를 다음과 같이 변경하는 것이 더 쉽다는 것을 알았습니다.

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

그런 다음 This thing is "Foobar"!vim과 라텍스에서 잘 작동합니다.


0

플러그인 vim-sandwich

이것에 대한 또 다른 유용한 플러그인은 vim-sandwichft 특정 환경을 정의한 것입니다.

  • l`l'에 대한 `text',
  • l"대한 ``text''
  • 텍스트 객체를 쉽게 조작 할 수 있습니다.

기본 매핑이 작동합니다.

  • textobject : 내부 텍스트 `text'cisl' 또는 주변의 가까운의 자동 감지가 잘 된 경우를 cib(예를 들어, 커서에 h있는이 `a (phony) text'언론에 필요 vibibc). 그러나 다음과 같은 추가 텍스트 객체 iq(OP 예)를 정의 할 수 있습니다 . 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 surroundinginner word서라운드 형이다 latex single quote.
  • 와 함께 sdl'또는 함께 삭제sdb
  • 변경 으로 srl'l"또는 함께srbl"

지원합니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.