나는 다음을 썼다.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()
.