다음 명령을 입력한 후 Vim에 "E488:후행 문자" 오류가 나타납니다:

다음 명령을 입력한 후 Vim에 "E488:후행 문자" 오류가 나타납니다:

나는 다음을 썼다.vimrc.vim

:filetype plugin on
:let s:save_cpo = &cpo
:set cpo&vim
:let &cpo = s:save_cpo
:set runtimepath = ~/home/nikcha/.vim/plugin
:set fileformat = unix
:function! print_hi()
:echo "Hi..its done"
:endfunction
:map <F7> : call print_hi()<CR>

파일을 열고 입력할 때 "무엇이 잘못될 수 있나요?"라는 :F7오류가 나타납니다 .E488:Trailing Characters

답변1

다음을 사용하여 매핑을 사용 가능 :map하게 만들 수 있습니다.F7노멀, 비전, 셀렉트, 오퍼레이터 미정모델. 누르시면 :들어갑니다명령줄 모드,지금 바로아니요씌우다.

:help map-modes개요는 참고자료를 참조하세요 .

운영자 일시 중지 모드는 매우 구체적이고 예제 기능이 선택에 적합하지 않으므로 를 통해 (기본) 일반 모드로 제한하는 것이 좋습니다 :nmap.

또한,당신은 사용해야합니다:noremap;매핑이 재매핑 및 재귀에 영향을 받지 않도록 만듭니다. :nnoremap.


명령줄 모드에 대한 바로 가기를 원하면 다음을 정의하십시오.사용자 정의 명령대신에:

:command! Hi call print_hi()

답변2

콜론

줄 시작 부분의 콜론은 선택 사항입니다. 스크립트의 경우 코드를 더 명확하고 읽기 쉽게 만들기 때문에 일반적으로 생략됩니다. 콜론그러나 나중에 설명하는 것처럼 매핑 내부에 필요합니다.

옵션 값 설정

fileformat및 등의 옵션 값을 설정할 때 runtimepath및 값 사이에 공백이 있어서는 안 됩니다. =그것은해야한다:

set fileformat =unix
" or
set fileformat=unix

이는 사실이 아니며 let변수에 값을 할당하거나 옵션을 참조하는 데 사용할 수 있습니다. 이것들은 모두 괜찮습니다:

let s:foo = "bar"
let &fileformat = "unix"

명명된 함수

자신만의 함수를 작성할 때 이름은 대문자로 시작해야 합니다. 귀하의 경우에는 다음과 같습니다.

function! Print_hi()
"         |
"         +----------- Capital

호환 모드

저장 및 복원 cpo루틴은 많은 작업을 수행하지 않습니다. 이것"정상"당신이 해야 할 일은 그것을 저장하고, 스크립트를 작성하고, 마지막으로 복원하는 것뿐입니다.

let s:save_cpo = &cpo
set cpo&vim

" Rest of script

let &cpo = s:save_cpo

현재 스크립트와 마찬가지로 저장하고 설정한 다음 인접한 순서로 복원합니다. 즉, 완전히 생략할 수도 있고, 위에 표시된 패턴을 사용할 수도 있습니다.

이 루틴을 사용하는 이유는 사용자가 호환 모드(vim과 비슷하고 덜 vim과 비슷함)에 있는지 스크립트에서 알 수 없기 때문입니다. 그래서 모드를 저장하고 모드를 vim으로 설정한 뒤 최종적으로 복원하는 것이 일반적이다. 이렇게 하면 문제 없이 Vim 관련 기능을 사용할 수 있습니다.

재작성된 스크립트

전반적으로 이는 원하는 방향에 더 부합해야 합니다.

let s:save_cpo = &cpo
set cpo&vim

function! Print_hi()
    echo "Hi..its done"
endfunction

map <F7> :call Print_hi()<CR>
"        |
"        +-------------------- Note; here we use colon.

let &cpo = s:save_cpo

매핑, E488

다른 답변은 귀하가 얻는 이유에 대해 충분히 설명했습니다.

E488:Trailing Characters

실수. 간단히 말해서, 이렇게 매핑되면 을 누르십시오 F7. 콜론을 먼저 누르지 마십시오. Ingo Karkat은 지도 기능을 사용할 수 있는 몇 가지 훌륭한 제안을 했습니다.

매핑의 콜론은 :Vim이 명령줄 모드로 들어가도록 지시합니다. 그런 다음 명령을 인쇄하십시오 call Print_hi(). 마지막으로 <CR>실행 명령줄을 추가합니다. Enter명령을 수동으로 작성하는 것과 동일합니다. 실제로는 자동 키보드 시퀀스가 ​​됩니다.

더 효과적인 글쓰기

일반적 으로 말하면 자체 파일에 스크립트를 추가하고 .vimrc. .vimrc스크립트를 작성하고 테스트하고 싶을 때 간단히 다음과 같이 말할 수 있습니다.

  • :so %Enter

빠른 로딩을 위해 rc 파일에 다음 매핑이 있습니다.

"^O is CTRL-O (i: Ctrl-V Ctrl-S-O; to prevent cursor movement
" Save + Source
inoremap    <silent>    <C-S-F12>  ^O:w<CR>^O:so %<CR>
nnoremap    <silent>    <C-S-F12>    :w<CR>:so %<CR>
" Source
inoremap    <silent>    <C-F12>  ^O:so %<CR>
nnoremap    <silent>    <C-F12>    :so %<CR>

선택한 코드만 가져오는 기능도 있는데, 포스팅이 좀 길어지니까...

답변3

당신은해야하지유형 :<F7>대신 F7 키를 누르세요. 이것이 의미하는 바는 다음과 같습니다 :map <F7> : call print_hi()<CR>.

:map        # Map the following printable characters:
<F7>        # # How F7 is seen by vim
:           # to
call        # call a function:
print_hi()  # # previously defined function print_hi
<CR>        # and print a new line.

시각적 모드(입력:bla)에서 함수를 호출하려면 키 입력을 사용하지 말고 를 입력해야 합니다 :call print_hi().

관련 정보