vimrc의 여러 줄 약어로 된 탭/공백 관련 vim 문제

vimrc의 여러 줄 약어로 된 탭/공백 관련 vim 문제

C로 템플릿 프로그램을 만들기 위해 vim 약어를 작성하려고 합니다.

.vimrc에 다음 약어를 제공했습니다.

abbr main #include<stdio.h>
\^M#include<string.h>
\^M#include<math.h>
\^M#include<stdlib.h>
\^M
\^Mint main() {
\^M int T, N;
\^M scanf("%d", &T);
\^M while(T-- > 0) {
\^M     scanf("%d", &N);
\^M }
\^M return 0;
\^M}

단어를 입력하면 main약어는 작동하지만 들여쓰기가 올바르지 않습니다. 공백/탭/조합만 사용해 보았지만 코드를 완벽하게 들여쓰기하는 데 아무 것도 작동하지 않습니다. 왜?

약어 트위스트

도움이 필요하세요?

업데이트: 나는 시도했다

 abbr main #include<stdio.h>
\<CR>#include<string.h>
\<CR>
\<CR>int main() {
\<CR>int T, N;
\<CR>scanf("%d", &T);
\<CR>while(T-- > 0) {
\<CR>scanf("%d", &N);
\<CR>}
\<CR>return 0;
\<CR>}

이는 동일한 결과로 이어집니다. 올바른 들여쓰기로 여러 줄 약어를 추가하는 방법을 알려줄 수 있는 사람이 있나요?

답변1

사실 내 생각엔 네 문제는XY 문제How can I do a multiline abbreviation?:실제 질문 은 아닌 것 같습니다 How can I easily add a sample function with a few keystrokes?. 이렇게 하려면 약어를 사용하지 말고 단편을 사용해야 합니다.

약어를 사용하지 않는 이유는 무엇입니까?

먼저 살펴 보겠습니다.:h abbreviations:

[약어]는 자주 사용하는 긴 단어를 입력하여 저장하는 데 사용할 수 있습니다. 이를 사용하여 명백한 철자 오류를 자동으로 수정할 수 있습니다.

전체 기능보다 작은 변경 사항에 대해서는 약어를 사용하는데, 이는 전혀 목표가 아닙니다. 당신이 원하는 것은 일반적으로 조각을 만드는 것이고,엄청난도구는 이미 존재하므로 바퀴를 다시 만들 필요가 없습니다.

조각이란 무엇입니까?

내용을 명확하고 간결하게 유지하기 위해 인용하겠습니다.위키피디아:

스니펫은 재사용 가능한 소스 코드, 기계 코드 또는 텍스트의 작은 부분을 나타내는 프로그래밍 용어입니다.

조각을 어떻게 얻을 수 있나요?

먼저, 스니펫 저장소가 필요합니다. 물론 수동으로 하나씩 만들 수도 있지만 Vim에는 문제를 해결해 주는 멋진 커뮤니티가 있습니다.

그래서Vim 스니펫당신이 찾고 있는 것: 60개 이상의 언어로 된 수백 개의 스니펫(C main() 함수 포함)이것은 좋은 기초입니다. 물론, 조각이 누락된 경우 직접 추가할 수 있습니다.

이 조각을 어떻게 사용합니까?

이제 조각이 있으므로 조각을 버퍼에 추가할 수 있는 조각 엔진이 필요합니다. vim-snippets의 추가 정보 파일은 다음과 같습니다.단락지원되는 엔진 전용입니다.

나는 추천하고 싶다울티스닙그러나 이것은 개인적인 문제일 뿐이므로 제안된 다양한 엔진을 사용해 보고 어떤 엔진이 가장 마음에 드는지 확인해야 합니다.

어떻게 얻을 수 있나요?

당신이 사용하는 경우플러그인 관리자그것은 간단합니다. 예를 들어vim 플러그인다음 줄을 다음 줄에 추가하면 됩니다 .vimrc.

Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

그런 다음 아래의 권장 기본 구성을 따를 수 있습니다.얼티스닙 읽어보기:

let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsJumpForwardTrigger="<c-b>"
let g:UltiSnipsJumpBackwardTrigger="<c-z>"

일단 사용하고 나면 :PluginInstall스니펫 사용을 시작할 수 있습니다 tab.

관련 정보