2010-01-27 7 views
16

Мне было интересно, есть ли способ открыть многократные файлы с Vim, но каждый файл по определенному номеру строки. Я объясняю:Vim: Открыть многократные файлы на разных строках

Я часто использую синтаксис: ВИМ мой/путь/тоже/далеко/файл +120 для редактирования этого файла в строке 120, потому что НКУ тоже сказал мне :)

Теперь то, что я» m look for - это способ сделать это для многократных файлов одновременно!

Конечно, ВИМ file1 + хх хх file2 + ... не будет работать (опция + влияют только на первый файл ... не спрашивайте меня, почему)

Так что, если кто-нибудь знает способ почини это? Я не нашел его в ...

странице руководства

Кстати, иногда, file1 может быть тот же файл, как file2 ...

ответ

11

Вот способ: vim +6 file1 +"sp +3 file2". Изменить sp на tabnew, если вы предпочитаете табуляции.

Но было бы очень полезно, только если кто-то может сделать скрипт с ним ...

+0

это действительно работа! отлично, теперь мне просто нужно понять, как использовать xargs для перехода из списка file1 +10 file2 +14 ... to vim +10 file1 + "tabnew +14 file2" + "tabnew + ... (да, я предпочитаю tabnew :) Я выложу свою линию cmd, если у меня хватит веры, чтобы написать ее;) thx! – claf

+0

На самом деле, плохо то, что это решение не позволяет больше, чем что-то вроде 10 файлов max в то же время Я использую команду для получения имен файлов и строки и использования xargs для передачи их в vim. Я хотел бы иметь возможность запускать столько файлов, сколько хочу, я разочарован тем, что vim не может обрабатывать более 10 файлов для открытия одновременно ... – claf

+0

Возможно, вы могли бы использовать 'for' в команде ViM, имея список имен файлов a и другой для позиций курсора. – Pikrass

1

Другим вариантом будет использовать сценарий, как utl, автоматически создает файл полный гиперссылка к номерам файлов/линии на основе на выходе gcc (это должно быть тривиально с sed).

Ссылка будет иметь формат с UTL: <url:error.c#line=10>

EDIT: связаны с более подходящим ВИМ связывания сценария.

+0

Предложение Нейла - лучшая версия этого. –

3

vim может прочитать ваш вывод gcc и создать список быстрого списка, который позволяет легко перемещаться, хотя все ошибки в коде. Вы можете прочитать существующий файл ошибок, используя vim -q, или если ваш проект использует Makefile, тогда вы можете использовать команду: make для выполнения make изнутри vim и захвата его вывода.

5

Я просто написал https://gist.github.com/xim/6123691

Благодарности к Pikrass за идею =)

EDIT:

Как claferri говорит, используя '+ tabnew ... ограничивает вас 10 файлов. Обновлен способ использования -S.

Функция vim построит строку ($ script), содержащую скрипт vim, который откроет файлы в соответствующих строках на вкладках. Объясняя, используя пример, это делается путем изменения vim -R file1:42 file2 file3:1337 к vim -S <script> -R file1 file2 file3 - содержащему ВИМ сценарий, в этом случае:

tab all 
tablast 
1337 
tabprev 
tabprev 
42 

Итак: мы открываем файлы, как правило, то выполнение сценария: скакать на последнюю вкладку затем переходим к соответствующей строке для каждого файла, перемещаясь к первому файлу.

Этот хак только умеренно проверен, комментировать любые ошибки.

RE-EDIT:

Исправлен скрипт, так что даже сумасшедший пример, как vim -R 1:3 "a file" foo -- -- "some other file":34 -R работ, как ожидалось.

+0

Было бы полезно, если бы вы включили свой код с объяснением (для vim noobs, таких как я) здесь, на SO. – Enigmadan

1

Чтобы перейти к строке 3 на file1.txt и линии 4 на file2.txt я делаю это:

vim -c ":e file1.txt|:3|:e file2.txt|:4" 
+2

Ницца! Я думаю, что разделить экран будет еще лучше: vim -c ": e file1.txt |: 3 |: vsplit file2.txt |: 4" –

0

Существует ВИМ плагин называется файл строки, которая позволяет легко сделать это, хотя у него есть пара проблем с открытием нескольких файлов в определенные строки в настоящее время. Мне нравятся некоторые из обходных решений выше, но файловая строка работает, если вы хотите получить список буферов :ls, полный файлов со своими номерами строк, а затем вы можете использовать что-то вроде bufdo, чтобы открыть их все в расколах.

https://github.com/bogado/file-line