개행시에\begin{hoge}를 인식하여\end{hoge}를 보완한다

3082 단어 VimLaTeX

이 기사의 목표



vim을 사용하여 Latex 코드를 작성하는 사람에게 약간의 편리한 설정을 공유합니다.
\begin{hoge} 의 문장으로 개행을 했을 때에\end{hoge} 를 보완하도록(듯이) vimrc 에 설정을 추기합니다.


환경·전제 사항



내 VIM은 버전 8.2.200입니다. 플러그인은 사용하지 않습니다.
최신 버전에서만 사용할 수 있는 기능 등 특별한 것은 포함되어 있지 않다고 생각합니다.
다만 "\begin{hoge}\begin{fuga}"와 한 줄에 복수회 "\begin{}"를 등장시키는 분에게는,
의도대로 동작하지 않을 가능성이 높습니다.
VIM 버전이 7이면 의도대로 움직이지 않았습니다.
버전 7과 8에서는 count(...) 함수의 사용법이 다르다.
다음을 이용할 때는 버전을 8 이상으로 해 주세요. (2021/04/13 추가)

실천



vimrc에 다음 내용을 추가합니다.
function! s:AutoEndComp()
 let l:line_char=getline('.')
 if count(l:line_char,"\\begin{")
  let l:len=stridx(l:line_char,"}")-(stridx(l:line_char,"\\begin{")+7)
  let l:obj_name=strpart(l:line_char,stridx(l:line_char,"\\begin{")+7,l:len)
  let l:command="\<CR>\\end{"..l:obj_name.."}\<Esc>O "
  call feedkeys(l:command,'n')
 else
  call feedkeys("\<CR>",'n')
 endif
endfunction
inoremap <CR> <C-\><C-O>:call <SID>AutoEndComp()<CR>

해설



줄 바꿈은 AutoEndComp () 함수를 호출합니다. 이 함수의 대략적인 알고리즘은 다음과 같습니다.
먼저 getline () 함수를 사용하여 커서가있는 행을 추출하고 문자열 변수 line_char에 저장합니다. 변수 앞에있는 "l :"은 로컬 변수임을 명시하는 접두사입니다. 이 접두사는 이 페이지

접두사를 함수 내에서 생략하면 "l :"이됩니다.

라고 해설되어 있는 대로, 생략할 수도 있습니다.

그런 다음 count () 함수는 문자열 변수 line_char에 문자열 "\begin {"이 포함되어 있는지 확인합니다.
하나도 포함되어 있지 않은 경우는 else절이 실행되어 통상의 개행이 됩니다.
하나라도 포함되어 있는 경우는 else 전의 부분이 실행되어 이하의 처리가 됩니다.
  • \begin{hoge} 의 "hoge"부분의 문자수를 카운트합니다. 이를 위해 stridx (str, "extr") 함수를 사용합니다. 이 함수는 문자열 변수 str의 문자열 "extr"이 시작되는 위치를 반환합니다. 이 함수를 잘 사용하여 "hoge"의 문자 수를 변수 len에 저장합니다.
  • "hoge"부분의 구체적인 이름을 검사합니다. 이를 위해 strpart (str, "extr", len) 함수를 사용합니다. 이 함수는 문자열 변수 str에서 문자열 "extr"이 시작되는 위치에서 문자 수 len만큼 문자열을 추출합니다. 추출한 문자열을 문자열 변수 obj_name에 저장합니다.
  • \end {hoge}를 보완하기 위해 feedkeys () 함수를 사용하십시오. 첫 번째 인수로 개행했을 때의 행동을 준다. 여기에서는 외관을 우선해, 캐릭터 라인 변수 command 를 도입하고 있습니다. let로 문자열을 결합 할 때 let str = char1..char2와 같이 두 마침표를 사용합니다.

  • 눈치채는 점, 미비 등이 있으면, 꼭 지적해 주세요.

    (5 월 9 일 추가) 문자열을 결합하는 방법에 대해
    수정 전 : let str = char1.char2와 같이 마침표를 사용합니다.
    수정 후 : let str = char1..char2와 같이 두 마침표를 사용합니다.
    문자열의 결합은 여기 페이지 에서 설명한 바와 같이,
    마침표 두 가지 사용이 권장되었습니다.
    실천에 제시된 소스 코드의 해당 부분도 다시 작성했습니다.
    @htsign 같이 지적해 주셨습니다. 다시 한번 감사드립니다.

    좋은 웹페이지 즐겨찾기