답변:
500 개가 넘는 약어를 관리하는 가장 좋은 방법이 무엇인지 모르겠습니다. @statox가 설명했듯이 장기적으로는이 숫자를 줄이기 위해 스 니펫을 볼 수 있습니다.
약어를 자동 완성하려면 다음 코드를 시도하십시오.
augroup GetAbbrev
autocmd!
autocmd VimEnter * let s:abbrev_list = [] |
\ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END
set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
if a:findstart
return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
else
return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
endif
endfunction
그것을 사용하려면 C-x C-u
약어가 시작된 후에 적중해야합니다 .
autocmd는 s:abbrev_list
모든 약어를 포함해야하는 변수 를 설정합니다 .
함수 CompleteAbbrev()
는 커서 앞의 단어를 기반으로 후보 목록을 리턴해야합니다.
'completefunc'
옵션의 값은 명중 할 때 호출하는 기능 빔을 알려줍니다 C-x C-u
.
이 옵션은 버퍼에 국한되므로 autocmd 및 FileType
이벤트 와 같은 다른 종류의 버퍼에서 다른 기능을 계속 사용할 수 있습니다 .
:h complete-functions
기능 작동 방법에 대한 자세한 내용 을 참조하십시오 .
다른 해결책은 동의어 완성을 사용하는 것입니다. 보낸 사람 :h i_^x^t
:
*i_CTRL-X_CTRL-T*
CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
the 'thesaurus' option instead of 'dictionary'. If a
match is found in the thesaurus file, all the
remaining words on the same line are included as
matches, even though they don't complete the word.
Thus a word can be completely replaced.
For an example, imagine the 'thesaurus' file has a
line like this:
angry furious mad enraged
Placing the cursor after the letters "ang" and typing
CTRL-X CTRL-T would complete the word "angry";
subsequent presses would change the word to "furious",
"mad" etc.
Other uses include translation between two languages,
or grouping API functions by keyword.
이 솔루션을 사용하려면 다음 3 가지를 수행해야합니다.
{lhs}
모든 약어를 전용 파일 안에 작성 하십시오. /home/user/mysynonyms.txt
. 그리고 비슷한 주제를 중심으로 그룹화하십시오.이 파일의 경로를 옵션에 추가하십시오 'thesaurus'
.
set thesaurus+=/home/user/mysynonyms.txt
C-x C-t
그룹 내부의 약어 이름이 시작된 후에 적중 합니다.
예를 들어 다음과 같은 약어가 있다고 가정합니다.
iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC
iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC
iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC
자신이 속한 프로그래밍 언어에 따라 그룹화 할 수 있습니다.
내부 /home/user/mysynonyms.txt
에 다음과 같이 작성합니다.
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
이제 C-x C-t
약어 이름 (또는 시작 부분)을 따라갈 때마다 Vim은 팝업 메뉴에서 같은 줄에있는 모든 약어를 표시해야합니다.
그 모습은 다음과 같습니다.
약어는 그룹화하기 위해 동일한 문자로 시작할 필요가 없으며 완전히 다를 수 있습니다. 동의어 파일에서 같은 줄에있는 한 Vim은 모든 것을 보여줍니다.
그리고 어떤 그룹에서 약어를 넣을지를 결정하기 위해 프로그래밍 언어를 사용할 필요가 없습니다. 의미있는 유사성 / 주제 / 카테고리에 따라 그룹화 할 수 있습니다.
따라서 특정 약어를 잊어 버린 경우 카테고리의 첫 글자를 입력 C-x C-t
하고 메뉴에서 관련 글자를 선택하고 선택할 수 있습니다.
편집 :
안에 모든 약어를 덤프하려면 /home/user/mysynonyms.txt
다음 3 Ex 명령을 사용할 수 있습니다.
:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')
Edit2 : 대체가 필요하지 않기 때문에 함수가 호출 될 때
플래그를 추가했습니다 . 그것의 유일한 목적은 하나를 찾을 때마다 목록 안에 약어를 추가하는 것입니다.
그러나 많은 약어가 있기 때문에 프로세스가 쓸모없이 느려질 수 있습니다. 처음에는 사용중인 Vim 버전을 모르기 때문에 넣지 않았습니다. 버전이 7.3.627 보다 최신 인 경우에는 정상 이어야하며, 그렇지 않으면 플래그 를 제거해야합니다 .n
substitute()
n
\vi?abbr\s+(\k+)
? 문제를 재현 할 수 있는지 확인하기 위해 약어에서 발췌 한 링크를 제공해 주시겠습니까?
n
대체 통화에 플래그를 추가하십시오 (포함하도록 답변을 편집했습니다). 에서 검색을 vimrc
하고 이것을 복사하여 붙여 넣으면 \v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+
약어가 강조 표시됩니까?
Wikia 팁 은 약어를 선택적으로 표시하는 방법을 제안합니다.
모든 약어를
:ab<CR>
(교체 ab
로 iab
전용 모드의 약어 삽입 목록)
그리고 당신은 같은 접두사와 함께 모든 약어를 나열 할 수 있습니다
:ab prefix<CR>
이것은 약어를 완성하는 것만 큼 이상적이지는 않지만 기존 약어 목록을 신속하게 얻는 좋은 방법이 될 수 있습니다.
이 솔루션을보다 효율적으로 사용하려면 파일 유형별로 약어를 만드는 것이 좋습니다. 예를 들어이 약어는 Java 버퍼에서만 유용합니다.
iabbrev syso System.out.println("");
따라서 다음과 같이 정의하는 것이 좋습니다.
autocmd! FileType java :iabbrev <buffer> syso System.out.println("");
자동 명령 부분을 사용하면 Java 버퍼에있을 때만 약어를 작성할 수 있으며이 버퍼 <buffer>
에서만 약어에 액세스 할 수 있는 옵션이 있습니다.
이 방법 :iab
은 자바 버퍼에있을 때만 약어를 표시합니다. 약어가 많은 경우 모든 약어를 정의하고 자동 명령이 함수를 호출하게하는 파일 유형별로 함수를 작성하는 것이 흥미로울 수 있습니다. 다음과 같은 것 :
autocmd! FileType latex call CreateLatexAbbrev()
function! CreateLatexAbbrev()
iabbrev <buffer> something something else
" All the other latex abbreviations
endfunction
또 다른 해결책은 약어 목록을 키워드 소스로 사용하여 자체 자동 완성 기능을 만드는 것입니다.
마지막으로 나는 "500 개가 넘는 약어"에 깊은 인상을 받았다고 말해야합니다. 어떤 것을 사용하고 있는지 모르지만 아마도 익숙하지 않으면 스 니펫의 개념을 살펴 보는 것이 흥미로울 것입니다 그들과 함께. 키워드를 입력하고 핫키를 누르면 트리거되는 템플릿이므로 약어보다 융통성이 있으므로 사용중인 약어 수를 줄일 수 있습니다. 흥미로운 소개는 여기 를 참조 하십시오 .
파일 유형별로 약어를 그룹화하는 것은 어떻습니까?
~/.vimrc
파일에 파일 을 모두 넣는 대신 파일을 분리하여 런타임 디렉토리의 적절한 위치 ( ~/.vim
UNIX와 유사한 운영 체제) 에 두십시오 .
예를 들어, Markdown 약어는 파일 ~/.vim/after/ftplugin/markdown.vim
에 있으며 Vim 은 Markdown 파일 유형 플러그인이로드 된 후 확인 합니다.
우리는 거대한 .vimrc
파일을 가져서는 안된다는 것이 밝혀졌습니다 . 를 사용하면 더 많은 유연성을 얻을 수 있습니다 $VIMRUNTIME
. 런타임 경로는 Vim의 도움말 시스템에 문서화되어 :h 'runtimepath'
있습니다.
Vim을 테마로 한 출현 달력 Vimways 의 .vimrc에서 .vim까지 훌륭한 기사 에서 처음으로 이것에 대해 배웠습니다 .