Chame uma função Vim silenciosamente

25

Escrevi uma pequena função do Vim que move o cursor para o primeiro caractere da linha atual. Se o cursor já estava no primeiro caractere, ele será movido para a primeira coluna.

" Jump to first character or column
noremap H :call FirstCharOrFirstCol()<cr>

:function! FirstCharOrFirstCol()
:  let current_col = virtcol('.')
:  normal ^
:  let first_char = virtcol('.')
:  if current_col == first_char
:    normal 0
:  endif
:endfunction

Como eu chamo essa função silenciosamente? Prefiro ': call FirstCharOrFirstCol ()' não foi exibido na linha de status. Simplesmente mudar para noremap H :silent call…não parece suficiente.

Jezen Thomas
fonte
7
Apenas uma pequena nota: em um arquivo VimScript (ou seja *.vim), você nunca precisa dos :caracteres iniciais .
Tommcdo 25/05

Respostas:

34

Você pode chamar a função silenciosamente definindo um mapa silencioso:

noremap <silent> H :call FirstCharOrFirstCol()<cr>

Para mais informações, consulte :h :map-<silent>. Observe, em particular, que isso garantirá apenas que o comando não seja exibido na tela quando o mapeamento for executado. O :silentcomando é usado para silenciar a saída da própria função (consulte :h :silent).

Karl Yngve Lervåg
fonte
11
Legal, :silenté o que eu estava procurando. É importante notar que, se houver erros em sua função, você ainda receberá as mensagens, a menos que use !. Eu não sabia que havia deixado o código em um estado inválido e, por isso, pensei que não estava usando :silentcorretamente, pois não estava silenciando o eco e pude ver um erro na saída!
JonnyRaa