отображать некоторые специальные символы как разрыв строки в vim - PullRequest
2 голосов
/ 06 августа 2011

Я хотел бы отобразить некоторые (произвольные) специальные символы как разрыв строки в vim. До сих пор я пытался использовать не по назначению (конечно, крайне неправильно :), неразрывный пробел, набрав

:set list listchars=nbsp:<CR>

, который не работает, по-видимому, потому что команда не принимает . Есть ли что-нибудь, что я могу использовать здесь для ? \ r тоже не работал.

Обратите внимание, что я не хочу редактировать текстовый файл. Цель состоит в том, чтобы блоки строк (некоторый связанный код) рассматривались как одна строка по отношению к действиям vim, но отображались как несколько строк. Специальный символ (подлежит определению) будет использоваться только для сохранения этой структуры блока в файле, заменяя в этих случаях перенос строки \ r.

Ответы [ 3 ]

1 голос
/ 08 августа 2011

Учитывая более широкий контекст проблемы, которую вы задали в своем дополнительном Комментарий, я бы предложил следующее решение. Групповые зависимые строки код в сгибах по отступам, синтаксису языка или маркерам. Любой из этих Три метода автоматические и не требуют ручного создания складок. Который Выбор зависит от того, какой язык вы используете. Смотри :help foldmethod или спроси Я в комментариях, если вам нужна помощь со складыванием.

Если синтаксис языка, который вы используете, не имеет широкой поддержки в Vim, наиболее удобные методы будут использовать маркеры сгиба или определение выражения для рассчитать уровень сгиба каждой линии. Первый метод подразумевает окружение каждую группу строк сворачивать с помощью специальных текстовых маркеров (которые могут быть заключены в в комментарии не нарушать синтаксические правила языка). По умолчанию те маркерами являются {{{ и }}}; см :help fold-marker и :help foldmarker до узнай как их поменять. Используйте

:set foldmethod=marker

, чтобы включить этот режим свертывания.

Определение выражения для расчета уровня сгиба для каждой строки еще более гибкий метод. Это позволяет использовать любую логику (которая может быть выражена в Vim сценарий), чтобы определить уровень сгиба. Например, чтобы сложить группы линий, которые начинается с одного пробела

:set foldmethod=expr
:set foldexpr=getline(v:lnum)[0]=='\ '

См. :help fold-expr для получения дополнительной информации о настройке выражения сгиба.

Когда линии, которые зависят друг от друга, сгруппированы в сгибы, вы можете легко передать сгиб в программу фильтра. Переместить курсор на линию внутри цели сверните, затем введите [zV]z! (чтобы выбрать весь сгиб) и введите команду для запустить. Для сохранения набора вы можете определить отображение

:nnoremap <leader>z [zV]z!

или, если команда всегда одна и та же,

:nnoremap <leader>z [zV]z!cat -n<cr>

(замените cat -n - мой пример команды - на пользовательскую).

0 голосов
/ 08 августа 2011

Мое решение, в конце концов, заключалось в том, чтобы вставить неразрывные пробелы и переносы строк в соответствующие места в файле.:set list listchars=nbsp:$ может затем использоваться для отображения этих «специальных разрывов строк».Их наличие позволяет интерпретировать код для идентификации блоков строк, разделенных этой комбинацией, как связанных строк.

Конечно, это не отвечает на вопрос.Ответ, насколько мне известно сейчас, заключается в том, что ни :set list, ни :wrap не могут быть использованы для достижения этой цели.

0 голосов
/ 07 августа 2011

Думаю, вы захотите проверить этот эпизод vimcasts .Может быть не совсем то, что вы хотите, но может привести вас туда.Удачи!

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