Vim: мне нужно анализировать язык вручную, если я пытаюсь перемещаться внутри? - PullRequest
2 голосов
/ 30 октября 2011

Я пытаюсь написать несколько функций, которые позволят мне легче перемещаться в исходных файлах JavaScript.Первое, что я понимаю, это то, что мне нужно знать, в какой области находится мой курсор. Просматривая встроенные функции Vim, я не вижу ничего такого, что делает это для меня автоматически.

Мой вопросмне нужно атаковать эту проблему так, как будто у Vim нет понятия области видимости или блочной структуры?То есть найдите первую '{' и соответствующую ей пару, определите все, что между ними, как scopeLevel0, найдите следующую '{' и соответствующую ей пару и назовите ее scopeLevel1 ... и т. Д. Это кажется мне наивным и мне интересно, может ли Vimпозвольте мне автоматически получать доступ и перемещаться между блоками.

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

Вы должны объяснить, какую навигацию вы хотите достичь.

В Vim есть концепция области видимости, которая определена в файле синтаксиса для вашего языка.Есть ряд функций, отображающих объем вашего курсора, плавающего здесь и в других местах.В моем .vimrc есть следующее:

function! SynStack()
    if !exists("*synstack")
        return
    endif
    echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")')
endfunc
nnoremap <C-p> :call SynStack()<CR>

Навигация внутри документа, особенно кода, уже является сильной стороной Vim с движениями текстовых объектов, такими как ( и ) или * 1008.*, [{, ]) и ]} или [m и ]m… См. :help navigation.В сочетании с другими движениями, такими как *, #, / и ? или тегами, у вас уже есть много энергии в пальцах.

Хотите больше детализации?

Для более конкретных нужд вы можете определить свои собственные текстовые объекты .Существует скрипт под названием textobj-user , предназначенный для помощи в этой задаче. Многие специальные текстовые объекты были созданы с этим инструментом или без него и доступны на vim.org.

1 голос
/ 30 октября 2011

Не могу обещать, что это решит вашу конкретную проблему. Но для навигации по исходному коду в vim люди часто используют Ctags. В частности, вы можете использовать Exuberant Ctags .

Если вам нужна помощь для начала работы с ctags:

Также см. Эту статью о том, как заставить его хорошо играть с Javascript:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...