2014-11-07 6 views
0

Я ищу простой способ поиска и замены вещей в vim как «обходной путь» для рефакторинга.vim: Поиск и замена

На какой-то другой StackOverflow-вопрос, который я нашел этот фрагмент кода:

nnoremap gR gD:%s/<C-R>///gc<left><left><left> 

Я думал Б-жьей выбирает текущее слово под курсором во всем документе и % S затем поиск и заменяет после ввода шаблона замены. gc означает глобально с подтверждением?!

Однако: Это не работает должным образом. Например, в каком-то классе python я могу легко переименовать события самостоятельно во весь файл, но он не работает с идентификаторами методов или идентификаторами полей с длиной одного.

def __init__(self): 
    self.test = [] 
    self.A = [] 
    ... 

Так само может быть изменен с помощью этого фрагмента кода, но делать Gr на поле просто не работает.

Как я могу получить эту работу, чтобы сделать простой поиск и заменить на один файл?

Любые советы по интеллектуальному рефакторингу также будут оценены. После нескольких часов поиска я только что нашел плагины и обходные пути, которые работают в основном с файлами C, но мне также понадобится хотя бы совместимость с Java, Python и PHP.

Спасибо за каждый ответ :)

UPDATE: Недавно я узнал, что это просто работает, если исходный выбранный шаблон на начало строки. Если шаблон находится где-то посередине линии, он не работает ... какие-либо идеи?

ответ

1

gD является «Перейти к глобальной декларации», см. :help gD.

Отображение:

  • переходит к 1 вхождению слова под курсором в буфере с gD,

  • заполнит командную строку с %s/, что означает «замену в целом буфер ",

  • с последующим поисковым шаблоном, используемым gD, вставляется с <C-r>/,

  • пустая пара косых черт, //, для замены,

  • флаги gc, что значит «делать свою магию на каждом матче на линии и запросить подтверждение»,

  • и идет <left><left><left> чтобы поместить курсор между //, чтобы вы могли ввести замену.

Это сопоставление делает именно то, что он утверждает, здесь, независимо от того, как долго слово под курсором.


Vim - это не IDE, не ожидайте ничего «умного».

+0

спасибо за объяснение и быстрый ответ :) но на самом деле, если я нажимаю gR, когда курсор включен * сам * он работает, как ожидалось, делает то же самое на * A * от * self.A * он просто выделяет каждый * A * в файле, но не предлагает командной строки с заполненным поиском и заменяет материал. Командная строка просто пуста ...? – daniel451

+0

Редактирование: одна длинная переменная работает тоже, но только если начальное появление находится в начале строки. В дополнение к этому: также более длинные слова, такие как * append * или stuff do ** not ** работают, если они находятся где-то посередине линии ... любые идеи? – daniel451

+1

Ошибки 'gD', когда слово под курсором является первым вхождением в буфер. – romainl

Смежные вопросы