Я пытаюсь использовать видимые маркеры в VIM.
В моем файле .vimrc есть следующее:

sign define information text=!> linehl=Warning texthl=Error  
exe ":sign place 123 line=" . line(.) ."name=information file=" . expand("%:p")  
map <F7> :exe ":sign place 123 line=" . line(".") ."name=information file=".expand("%:p")<CR>  

Но когда я открываю vim, я получаю сообщение об ошибке в строке exe ":sign etc

line   30:  
E15: Invalid expression: .) ."name=information file=" . expand("%:p")  
E116: Invalid arguments for function line(.) ."name=information file=" . expand("%:p")  
E15: Invalid expression: ":sign place 123 line=" . line(.) ."name=information file=" .   expand("%:p")

В чем проблема с моим синтаксисом?

1 ответ1

2

Ошибка довольно легко обнаружить.

Вы написали

line(.)

вместо

line('.') or line(".")

редактировать

Сообщение об ошибке в вашем вопросе было связано с ошибкой выше, но есть вторая ошибка, пропущен пробел.

  1. Ваша линия:

    exe ":sign place 123 line=" . line(.) ."name=information file=" . expand("%:p")
    
  2. Первая ошибка исправлена путем помещения аргумента для line() в кавычки (также исправлена expand() ):

    exe ":sign place 123 line=" . line('.') ."name=information file=" . expand('%:p')
    
  3. Вторая ошибка исправлена добавлением пропущенного пробела после третьей двойной кавычки:

    exe ":sign place 123 line=" . line('.') ." name=information file=" . expand('%:p')
                                              ^
                                              +-- added missing space
    

Из-за отсутствующего пробела значение аргумента line было примерно таким: 26name=information а аргумент name отсутствовал.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .