У меня есть выход рекурсивного grep
(фактически ag
) в буфере, который имеет форму filename:linenumber: ... [match] ...
, и я хочу иметь возможность перейти к возникновению (файл и номер строки), находящийся под курсором. This сказал мне, что я мог бы выполнять движения нормального режима, так что после извлечения файла : линия часть, я написал эту функцию:Функция, чтобы открыть файл и перейти к указанному номеру строки
function OpenFileNewTab(name)
let l:pair=split(a:name, ":")
execute "tabnew" get(l:pair, 0)
execute "normal!" get(l:pair, 1) . "G"
endfunction
Предполагается открыть указанный файл на вкладке, а затем сделать <lineno>G
, как я могу сделать вручную, чтобы перейти к указанному номеру строки. Однако курсор остается в строке 1. Что я делаю неправильно?
This question, только по названию, будет точным дубликатом, но он говорит о размещении символов в других файлах, в то время как у меня уже есть местоположения.
Edit: Мои отображения для Grep/ае следующим образом:
nnoremap <Leader>ag :execute "new \| read !ag --literal -w" "<C-r><C-w>" g:repo \| :set filetype=c<CR>
nnoremap <Leader>gf ^v2t:"zy :execute OpenFileNewTab("<C-r>z")<CR>
Чтобы получить мои Grep/AG результаты, я поставил курсор на слово, я хочу для поиска и ввода <leader>ag
, то в новом буфере я помещаю курсор в строку и вводим <leader>gf
- он выбирает от начала до второго двоеточия и вызывает OpenFileNewTab
.
Редактировать 2: Я нахожусь на Cygwin, если это имеет какое-либо значение - я в этом сомневаюсь.
Я думаю, что два exec cmds отсутствуют '.' перед' get (...) '. И как вы сделали grep? Лично я чувствую, что полезно иметь результат grep/ag в qf и перепрыгивать здесь и там ... – Kent
Вам нужно оставить пространство после команд tabnew и normal. – SibiCoder
Вы можете поместить панель ('|') и объединить обе команды в одном исполнении. Это должно решить. – SibiCoder