def replace(self, edit, s, replace_what): old, new = (replace_what, '') open_, close_ = _vi_plug_c_s.PAIRS.get(old, (old, old)) if len(open_) == 1 and open_ == 't': open_, close_ = ('<.*?>', '</.*?>') next_ = self.view.find(close_, s.b) prev_ = reverse_search(self.view, open_, end=s.b, start=0) else: # brute force next_ = self.view.find(close_, s.b, sublime.LITERAL) prev_ = reverse_search(self.view, open_, end=s.b, start=0, flags=sublime.LITERAL) if not (next_ and prev_): return self.view.replace(edit, next_, new) self.view.replace(edit, prev_, new)
def replace(self, edit, s, replace_what): old, new = (replace_what, '') open_, close_ = _vi_plug_cs.PAIRS.get(old, (old, old)) if len(open_) == 1 and open_ == 't': open_, close_ = ('<.*?>', '</.*?>') next_ = self.view.find(close_, s.b) prev_ = reverse_search(self.view, open_, end=s.b, start=0) else: # brute force next_ = self.view.find(close_, s.b, sublime.LITERAL) prev_ = reverse_search(self.view, open_, end=s.b, start=0, flags=sublime.LITERAL) if not (next_ and prev_): return self.view.replace(edit, next_, new) self.view.replace(edit, prev_, new)
def f(view, s): if exact_word: pattern = r'\b{0}\b'.format(query) else: pattern = query flags = sublime.IGNORECASE if mode == _MODE_INTERNAL_NORMAL: match = reverse_search(view, pattern, 0, current_sel.a, flags) else: match = reverse_search(view, pattern, 0, current_sel.a, flags) if match: if mode == _MODE_INTERNAL_NORMAL: return sublime.Region(s.b, match.begin()) elif state.mode == MODE_VISUAL: return sublime.Region(s.b, match.begin()) elif state.mode == MODE_NORMAL: return sublime.Region(match.begin(), match.begin()) return s
def run(self, edit, search_string, mode=None, count=1, extend=False): def f(view, s): # FIXME: Readjust carets if we searched for '\n'. if mode == MODE_VISUAL: if s.b > found.a: return sublime.Region(s.end(), found.a) elif mode == _MODE_INTERNAL_NORMAL: if s.b > found.a: return sublime.Region(s.end(), found.a) elif mode == MODE_NORMAL: if s.b > found.a: return sublime.Region(found.a, found.a) return s # This happens when we attempt to repeat the search and there's no search term stored yet. if search_string is None: return current_sel = self.view.sel()[0] # FIXME: What should we do here? Case-sensitive or case-insensitive search? Configurable? found = reverse_search(self.view, search_string, 0, current_sel.a) if not found: print("Vintageous: Pattern not found.") return for x in range(count - 1): found = reverse_search(self.view, search_string, 0, found.a) # XXX: Temporary fix until .find() gets fixed. if not found: print("Vintageous: Pattern not found.") return regions_transformer(self.view, f) self.hilite(search_string)