vi командная строка, строка перехода и столбец

17

Я давно смешиваю использование emacsand vi( vim). У каждого из них есть свои преимущества. Я анализирую вывод ошибок из процесса, подобного процессу компиляции, и получаю номер строки и столбца, но могу использовать только emacsдля прямого перехода к строке и столбцу:

emacs +15:25 myfile.xml

у viменя есть только номер строки (в соответствии с man-страницей)

vi +15 myfile.xml

Есть опция, чтобы навести курсор на шаблон ( vi +/pattern myfile.xml), который я никогда не получал. Но это не помогло бы мне, поскольку шаблон не всегда является первым вхождением в файл.

Как начать, viчтобы перейти к столбцу 25 в строке 15 моего файла? Могу ли я сделать что-то с -cопцией?

Dominique
источник
3
Так как вы помечено Vim, ты рассмотрел quickfixсистему, которая запускает компилятор изнутри Vim, разбирает вывод ошибок, заполнит список ошибок (перемещаясь с :cp, :cn, :clкоманд), и позиционирует курсор на первый?
Random832
Если вы откроете файл в vi и наберете :15его, вы перейдете к строке 15. Надеюсь, это вам поможет
код ниндзя

Ответы:

17

Ты можешь использовать:

vi '+normal 15G25|'  myfile.xml
Криста
источник
2
Объяснение: большинству команд (т. е. большинство букв) в vi может предшествовать число (или диапазон), чтобы изменить его поведение по умолчанию или повторить его (или применить его к определенному диапазону). Внутри vi в командном режиме вы можете 15Gперейти к строке 15 и 25|перейти к столбцу 25. И Криста показывает, как сделать то же самое из командной строки.
Оливье Дюлак
7

С помощью плагина file-line вы можете просто добавить строку и столбец к имени файла, как при запуске Vim, так и внутри с помощью таких команд :edit:

vim myfile.xml:15:25
Инго Каркат
источник
Приятно знать, что это существует, но я думаю, что я буду использовать ответ, который не требует дополнительного плагина
Доминик
@ Доминик Вы также можете vim myfile.xml +15для строки без плагина, но не столбец, насколько я знаю
Изката
5

просто для удовольствия есть, -c 'normal 14j24l'что поставит вас на линии 15 символов 25

hildred
источник
4

Я не знаю об этом -cварианте, но вы должны быть в состоянии сделать:

vi '+cal cursor(15,25)' myfile.xml

(убедитесь, что вы цитируете из-за круглых скобок ())

Энтон
источник
cursor()использует байтовый индекс для столбца, но обычно это количество символов.
Инго Каркат
@IngoKarkat Это действительно имеет значение? Текст UTF-8.
Доминик
2
Это важно для не-ASCII символов, которые представлены более чем одним байтом. Кроме того, символы табуляции и управления обычно занимают более одного отображаемого столбца.
Инго Каркат
2

Стоит отметить:

-c command 

Запустите данную команду ex при запуске. Для vi разрешена только одна опция -c ; Vim принимает до 10. Более старая форма этой опции, +commandвсе еще поддерживается.

+commandИмеет то же одиночное ex commandограничение при использовании vi.

+/patternТакже ограничивается одной командой с vi.

(взято из Vim и бывшего редактора )

Би Кей
источник
1

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

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Персидский залив
источник