메모장 ++에서 다음 일치 항목 추가 (예 : 숭고한 텍스트의 Ctrl + D)


13

오픈 소스 메모장 ++에서 다음 기능을 사용하는 방법을 찾고 있습니다.

SublimeText에서 Ctrl+ D(mac : cmd+ D생각합니다) 를 누르면 다음이 발생합니다.

  • 선택이 없으면 커서 위치가 확장되어 해당 단어를 선택합니다.
  • 그렇지 않으면 검색 팝업을 열 필요없이 해당 단어의 다음 어커런스도 선택됩니다.

그런 다음 변경할 수있는 단어를 여러 개 선택할 수 있으며 실제로는이 모든 위치를 볼 수 있습니다 (전체 선택과 반대).

Notepad ++에서 수행 할 수있는 방법이 있습니까 (Autohotkey의 도움으로)?

옵션 :에서 숭고한 당신은 또한 이들 각각 취소 할 수 있습니다 Ctrl+ D와의 Ctrl+를 U하고 가진 occurance 건너 Ctrl+를 K.

답변:


2

메모장 ++ 커뮤니티 페이지 에서이 스레드를 찾았습니다.

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

그들은 파이썬 스크립트 플러그인 을 사용하여 다음 스크립트 로이 기능을 만듭니다.

# 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()

이 스크립트는 매우 이상하지만, 누군가가 다중 선택을 필요로하고 신 틸라 소스 코드로 뛰어 들기를 원하지 않는 경우 갈 수있는 방법입니다.
polkovnikov.ph

1

F3검색을 계속하려면 누르십시오 .


예. 그러나 Ctrl + F를 사용하기 전에 사용해야합니다. 유일한 단점은 그것이 최선의 해결책이라고 생각합니다.
Jack

-1

네, "다음을 선택하고 찾기"기능은 메모장 ++에 있습니다.

이를위한 핵심 조합은 다음과 같습니다.

Ctrl + F3

그리고 이전 발생을 선택하십시오.

Ctrl+ Shift+F3

검색 메뉴 에서 확인할 수 있습니다 .


답변에 감사드립니다. 그러나 나는 당신이 그 단어에 대해 다중 선택을하도록 요청했습니다 (각 추가 선택에서 ctrl-doubleclick 한 것처럼). 예 : 단어가 float있고 키 조합을 누르면 두 번째 float항목이 다중 선택에 추가됩니다. 그런 다음 입력 double하여 두 어커런스를 바꾸고 나머지 파일은 변경하지 마십시오.
ben

메모장 ++에서 이와 같은 것을 사용할 수 있는지 확실하지 않습니다. 그러나 나는 그것을 만나거나 그렇게 할 수있는 방법을 찾으면 알려 드리겠습니다.
Ayan

불행히도 Ctrl + F3은 동일한 단어를 모두 선택하지만 동시에 모든 단어를 편집 할 수는 없습니다.
Manuel Di Iorio

교체 기능을 사용해야한다는 점에서 @ManuelDiIorio. 검색 아래에 있거나 Ctrl + H를 누르면됩니다.
Ayan

메모장 + +에서 MultiEditing 기능을 찾았습니다.
Manuel Di Iorio
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.