Notepad ++ 'da sonraki eşleşmeyi ekle (Sublime Text'deki Ctrl + D gibi)


13

Açık kaynak Notepad ++ aşağıdaki işlevselliği kullanmak için bir yol arıyorum.

SublimeText'te Ctrl+ tuşuna basarsanız D(mac: cmd+ Dsanırım) bu olur:

  • Seçim yoksa imleç konumu o kelimeyi seçmek için genişletilir.
  • Aksi takdirde, o kelimenin bir sonraki tekrarlaması da seçilir (bir arama açılır penceresi açmaya gerek kalmadan).

Daha sonra değiştirebileceğiniz çok sayıda kelimeye sahipsiniz ve aslında bu yerlerin her birini gördünüz (hepsinin aksine).

Bu Notepad ++ (belki Autohotkey yardımı ile) yapılabilir herhangi bir yolu var mı?

İsteğe bağlı: In Sublime ayrıca bunların her biri geri alabilirsiniz Ctrl+ Dile 's Ctrl+ Uve bir durum oluşmasına atlamak Ctrl+ K.

Yanıtlar:


2

Bu konu Notepad ++ Topluluk sayfasında buldum:

https://notepad-plus-plus.org/community/topic/11360/multi-selection-and-multi-edit

Aşağıdaki komut dosyasıyla bu işlevi oluşturmak için python komut dosyası eklentisini kullanıyorlar :

# this script implements the enhanced multi cursor edit functionality

def default_positions():
    return 0, editor.getLength()

def get_pos_of_bookmarks():
    npp_bookmark_marker_id_number = 24
    npp_bookmark_marker_mask = 1 << npp_bookmark_marker_id_number
    _start_position, _end_position = default_positions()

    line_nbr = editor.markerNext(_start_position, npp_bookmark_marker_mask)
    if line_nbr != -1:
        _start_position = editor.positionFromLine(line_nbr)
        line_nbr = editor.markerNext(line_nbr + 1, npp_bookmark_marker_mask)
        if line_nbr != -1:
            _end_position = editor.getLineEndPosition(line_nbr)
    return _start_position, _end_position

def get_pos_of_visible_lines():
    first_visible_line = editor.getFirstVisibleLine()
    _start_position = editor.positionFromLine(first_visible_line)
    lines_visible = editor.linesOnScreen()
    last_visible_line = editor.docLineFromVisible(first_visible_line+lines_visible)
    _end_position = editor.getLineEndPosition(last_visible_line)
    return _start_position, _end_position

def get_pos_of_selections():
    _start_position, _end_position = default_positions()
    if editor.getSelections() == 2:
        _start_position = editor.getSelectionNStart(0)
        _end_position = editor.getSelectionNEnd(1)
    return _start_position, _end_position


area_dict = {'a':default_positions,
             'b':get_pos_of_bookmarks,
             's':get_pos_of_selections,
             'v':get_pos_of_visible_lines}

editor.beginUndoAction()

def Main():
    _text = editor.getTextRange(editor.getSelectionNStart(0), editor.getSelectionNEnd(0))
    if len(_text) != 0:

        _current_position = editor.getCurrentPos()
        _current_line = editor.lineFromPosition(_current_position)
        _current_word_start_pos = editor.getLineSelStartPosition(_current_line)
        _current_word_end_pos = editor.getLineSelEndPosition(_current_line)

        find_flag = 2 # 0=DEFAULT, 2=WHOLEWORD 4=MATCHCASE 6=WHOLEWORD | MATCHCASE
        mode_options = ' 0=replace,  1=before,  2=afterwards\n'
        area_options = ' a=all, b=bookmarks, s=selected, v=visible'
        expected_results = [x+y for x in ['0','1','2'] for y in ['a','b','s','v']]

        result = notepad.prompt(mode_options + area_options, 'Choose the desired option', '0a')
        while result not in expected_results: 
            if result is None:
                return
            result = notepad.prompt(mode_options + area_options, 'Choose the desired option', '0a')

        chosen_mode, chosen_area = result
        area_start_position, area_end_position = area_dict[chosen_area]()

        if chosen_mode == '0': # replace whole string version
            editor.setEmptySelection(_current_position)       
            position_tuple = editor.findText(find_flag, area_start_position, area_end_position, _text)

            while position_tuple is not None:
                if _current_position not in position_tuple:
                    editor.addSelection(*position_tuple)
                position_tuple = editor.findText(find_flag, position_tuple[1], area_end_position, _text)


        elif chosen_mode == '1': # insert before selected string version
            editor.setEmptySelection(_current_word_start_pos)
            position_tuple = editor.findText(find_flag, area_start_position, area_end_position, _text)

            while position_tuple is not None: 
                startpos, endpos = position_tuple
                if startpos != _current_position and endpos != _current_position:
                    editor.addSelection(startpos, startpos)
                else:
                    _current_word_start_pos, _current_word_end_pos = startpos, startpos
                position_tuple = editor.findText(find_flag, endpos, area_end_position, _text)


        elif chosen_mode == '2': # insert after selected string version
            editor.setEmptySelection(_current_word_end_pos)
            position_tuple = editor.findText(find_flag, area_start_position, area_end_position, _text)

            while position_tuple is not None: 
                startpos, endpos = position_tuple
                if startpos != _current_position and endpos != _current_position:
                    editor.addSelection(endpos, endpos)
                else:
                    _current_word_start_pos, _current_word_end_pos = endpos, endpos
                position_tuple = editor.findText(find_flag, endpos, area_end_position, _text)


        # now add the current selection
        editor.addSelection(_current_word_start_pos, _current_word_end_pos)

Main()
editor.endUndoAction()

Bu komut dosyası oldukça garip olsa da, birisinin çoklu seçime ihtiyacı varsa ve Scintilla kaynak koduna dalmak istemiyorsa bu yol.
polkovnikov.ph

1

Aramaya F3devam etmek için düğmesine basmanız yeterlidir.


Evet, ancak yapmadan önce Ctrl + F tuşlarını kullanmanız gerekir. Tek dezavantajı, bence en iyi çözüm.
Jack

-1

Evet, Notepad ++ uygulamasında "Sonrakini Seç ve Bul" özelliği vardır.

Bunun anahtar kombinasyonu.

Ctrl + F3

Ve önceki olayı seçmek için.

Ctrl+ Shift+F3

Arama menüsünden kontrol edebilirsiniz .


Cevabınız için teşekkürler ama özellikle bu kelimeler üzerinde çoktan seçmenizi istedim (her ek seçimde ctrl-doubleclicked gibi). Örnek: Kelimeye sahipsiniz float, tuş kombinasyonuna basarsınız, şimdi ikinci floatseçimi çoklu seçime eklenir. Daha sonra doubleiki oluşumu değiştirmek için yazabilirsiniz (ve dosyanın geri kalanını değiştirmeden saklayabilirsiniz )
ben

Notepad ++ 'da böyle bir şey olup olmadığından emin değilim. Ama onunla karşılaşırsam veya bunu yapmanın bir yolunu bulursam size bildireceğim.
Ayan

Ne yazık ki Ctrl + F3 sadece aynı kelimeleri seçer, ancak aynı anda hepsini düzenleyemezsiniz.
Manuel Di Iorio

@ManuelDiIorio bunun için değiştirme işlevini kullanmanız gerekir. Arama altında ya da sadece Ctrl + H tuşlarına basabilirsiniz
Ayan

Peki ben MultiEditing özelliğini notepad ++ 'da buldum ve beğendim!
Manuel Di Iorio
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.