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)
Example #2
0
    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)
Example #3
0
        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
Example #4
0
        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
Example #5
0
    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)