sort — Vim: сортировать все операторы внутри файла php

Я хотел бы узнать, как выбрать все строки, которые начинаются с использования, внутри текущего файла php, а затем отсортировать их. До сих пор: я работал с командой: sort. Также … Я переназначил команду сортировки:

map <Leader>s :sort<CR>

Но я хотел бы создать сложную функцию, которая выбирает все операторы использования внутри php-файла, а после этого сортировать все эти строки.

Я умею сортировать. Но я понятия не имею, как выбрать произвольную группу строк с помощью VimL

function! SortUseStatements()
let g:select='/^use .*$<CR>V' !?!?!?!?!?!?!?!?!?
exec g:select
endfunction

map <F2> :call SortUseStatements()<CR>

Я знаю, что хочу выполнять такие команды, как:

  • перейти к началу текущего файла
  • sarch first ^ use. *; $ оператор
  • начать выбор
  • перейти в конец текущего файла
  • sarch last ^ use. *; $ оператор
  • и, наконец, запустить: сортировать

2

Решение

Это можно сделать аккуратно с :help cmdline-ranges,

Вы хотите, чтобы поиск начинался с начала файла, поэтому ваш начальный адрес 0 (начать до первой строки). Затем найдите первую строку, начинающуюся с use, Когда разделены с ; позиция курсора будет установлена ​​на эту строку перед интерпретацией спецификатора следующей строки. Затем вам нужно перейти к последнему из use заявления (начиная с первого use линия, поэтому снова разделена ;). Сначала я выбираю простой способ, который ищет пустую строку, а затем выбирает предыдущую. С :printВы можете проверить, что диапазон в порядке, прежде чем заменить команду на :sort:

:0;/^use /;/^$/-1 print

Если после строки нет use блок, вы должны использовать более сложный шаблон для любая строка не начинается с use:

:0;/^use /;/^\(use \)\@!/-1 print

альтернативы

Для чего-то более сложного, одного :range наверное не подойдет. Затем я бы определил номера начальной и конечной строк отдельно, используя let lnum = search(...) с соответствующими шаблонами. Затем вы можете вставить числа в команду Ex через :execute startLnum . ',' . endLnum . 'sort'

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]