Colons
Os dois pontos no início de suas linhas são opcionais. Para scripts, eles geralmente são omitidos, pois tornam o código mais limpo / fácil de ler. O cólon é necessário, no entanto, dentro do mapeamento, conforme explicado posteriormente.
Definir valores para opções
Quando você define valores de opção como fileformat
e runtimepath
, não é possível ter um espaço entre =
e o valor. Deve ser:
set fileformat =unix
" or
set fileformat=unix
observe que esse não é o caso de let
, que você usa para atribuir valores a variáveis ou ao consultar uma opção. Tudo bem:
let s:foo = "bar"
let &fileformat = "unix"
Funções de nomenclatura
Quando você escreve suas próprias funções, o nome precisa começar com uma letra maiúscula. No seu caso, algo como:
function! Print_hi()
" |
" +----------- Capital
Modo compatível
Sua rotina de salvar e restaurar cpo
não faz muito. A coisa “normal” é salvá-lo, depois ter seu script e, no final, restaurá-lo.
let s:save_cpo = &cpo
set cpo&vim
" Rest of script
let &cpo = s:save_cpo
Como seu script é agora, ele apenas salva, configura e restaura em uma sequência adjacente. Em outras palavras, pode ser omitido como um todo ou você usa o padrão como mostrado acima.
O motivo dessa rotina é que, no seu script, você não sabe se o usuário está no modo compatível, (mais como vi, menos como vim) ou não. Portanto, é normal salvar o modo, definir o modo para vim e restaurá-lo no final. Desta forma, você pode usar a funcionalidade específica do Vim sem problemas.
Script reescrito
Como um todo, isso deve estar mais na direção que você deseja:
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
O mapeamento, E488
As outras respostas deram uma boa explicação sobre por que você recebe o
E488:Trailing Characters
erro. Em suma: quando mapeado como este, apenas pressione F7 . Não pressione dois pontos primeiro. Ingo Karkat tem alguns bons conselhos sobre a função do mapa para usar.
Os dois pontos :
no seu mapeamento dizem ao Vim para entrar no modo de linha de comando. Em seguida, o comando é impresso call Print_hi()
. Finalmente <CR>
é adicionado para executar a linha de comando. O mesmo que Enter se você escreveu o comando manualmente. Com efeito, torna-se uma sequência automatizada de teclado.
Escrita mais eficaz
Geralmente é melhor adicionar scripts aos seus próprios arquivos e, em seguida, carregar os scripts em .vimrc
. Não escreve muitos scripts / funções em .vimrc
. Quando você escreve em um script e quer testá-lo, basta dizer:
Eu tenho esses mapeamentos no meu arquivo rc para carregamento rápido:
"^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>
Também tem uma função para apenas obter código selecionado, mas como este post está ficando um pouco longo ...