denops.vim로 괄호 보완 플러그인을 썼어요.
개시하다
안녕하세요, 저는 히가시입니다.
이번엔 denops.vim로 괄호 보완 플러그인을 만들었기 때문에 소개해 드릴게요.
이번에 만든 플러그인.
플러그인dps-kakkonan.
원래 제작된 플러그인vim-kakkonan을 denops로 사용합니다.vim로 이루어진 형식입니다.
denops.vim 정보
이 글의 저자인 lambdalisue가 해설을 진행하였다.
간단히 말해서 Vim/Neovim의 플러그인을 쓰기 위해 Deno를 사용할 수 있습니다.
TypeScript로 기술할 수 있기 때문에 금형 외에 이미 존재하는 Deno 자산도 사용할 수 있다.
dps-Cakkonan 기능
괄호 보완.
일반적인 괄호 보완.
이쪽gif를 보시면 알 수 있습니다.
설치 정보
start(async (vim) => {
const getLineChar = async (diff: number): Promise<string> => {
if (typeof diff !== "number") {
throw new Error(`'diff' attribute of 'getLineChar' in must be a number`)
}
const cursorStr = await vim.call('getline', '.');
if (typeof cursorStr !== "string") {
throw new Error(`'cursorStr' attribute of 'kakkonanCompletion' in must be a string`)
}
const cursorLine = await vim.call('line', '.');
if (typeof cursorLine !== "number") {
throw new Error(`'cursorLine' attribute of 'kakkonanCompletion' in must be a number`)
}
const cursorCol = await vim.call('col', '.');
if (typeof cursorCol !== "number") {
throw new Error(`'cursorCol' attribute of 'kakkonanCompletion' in must be a number`)
}
const cursorChar = cursorStr.substr(cursorCol + diff, 1);
return cursorChar;
}
})
이렇게 Arror 함수로 함수를 등록해서 쓰기가 아주 좋아요.또한, 반환 값이Vim/Neovim에 직접 전달되기 때문에inoremap 등으로 insertmode에서 이 함수를 호출할 때 반환 값은 파일에 삽입됩니다.
async hogehogefugafuga(inputBrackets: unknown): Promise<string> {
if (typeof inputBrackets !== "string") {
throw new Error(`'inputBrackets' attribute of 'kakkonanCompletion' in must be a string`);
}
return "hogehoge" + inputBrackets;
}
이 경우 hogehoge
매개 변수 문자열을 결합하여 삽입합니다.이 방법을 이용하여 괄호 보완을 만들었다.
작은 지도의 정의도 간단하다.vim.다만 excute () 에 평소vimrc에 적힌 열쇠 그림 설정을 추가합니다.
vim.execute(`
inoremap <expr> ( denops#request("kakkonan", "kakkonanCompletion", ['(']) . "\<left>"
inoremap <expr> { denops#request("kakkonan", "kakkonanCompletion", ['{']) . "\<left>"
inoremap <expr> [ denops#request("kakkonan", "kakkonanCompletion", ['[']) . "\<left>"
inoremap <expr> " denops#request("kakkonan", "kakkonanCompletion", ['"']) != "" ? '""' . "\<left>" : "\<right>"
inoremap <expr> ' denops#request("kakkonan", "kakkonanCompletion", ["'"]) != "" ? "''" . "\<left>" : "\<right>"
inoremap <expr> ${backQuote} denops#request("kakkonan", "kakkonanCompletion", ['${backQuote}']) != "" ? '${backQuote + backQuote}' . "\<left>" : "\<right>"
inoremap <expr> ) denops#request("kakkonan", "kakkonanEscapeBrackets", [')']) == v:false ? ")" : "\<right>"
inoremap <expr> } denops#request("kakkonan", "kakkonanEscapeBrackets", ['}']) == v:false ? "}" : "\<right>"
inoremap <expr> ] denops#request("kakkonan", "kakkonanEscapeBrackets", [']']) == v:false ? "]" : "\<right>"
inoremap <expr> <CR> denops#request("kakkonan", "kakkonanBackSpaceEnter", []) == v:false ? "\<CR>" : "\<CR>\<C-o>\<S-o>"
inoremap <expr> <BS> denops#request("kakkonan", "kakkonanBackSpaceEnter", []) == v:false ? "\<BS>" : "\<BS>\<right>\<BS>"
`);
이것은 dps-Cakkonan에서 정의한 명령입니다.이렇게 하면 여러 줄 문자열을 전달하여 명령을 한꺼번에 정의할 수 있다.
참고로 다음과 같은 정의를 내릴 수도 있다.
vim.execute(`inoremap <expr> ( denps#request("kakkonan", "kakkonanCompletion", ['('])`)
vim.execute(`inoremap <expr> [ denps#request("kakkonan", "kakkonanCompletion", ['['])`)
최후
denops.vim 덕분에 저는 Deno를 이용해서 Vim pluggin을 만들 수 있었습니다.
나는 이렇게 플러그인의 제작 범위를 확장하는 것이 매우 좋다고 생각한다.
저도 이를 계기로 타입 스크립트를 열심히 배우고 싶어요.
여기까지 읽어주셔서 감사합니다.
denops.vim에 관심이 있는 사람은 반드시vim-jp의 슬랙 안의 #tech-denops에 참가하세요.
이쪽부터 vim-jp Slack에 참여를 하도록 하겠습니다.
Reference
이 문제에 관하여(denops.vim로 괄호 보완 플러그인을 썼어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/higashi000/articles/d1efa3676ceca46fc357텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)