1 (изменено: leilau, 2014-09-03 11:19:58)

Тема: AHK: Перемещение курсора в конец следующего (предыдущего) слова

В текстовых редакторах сочетание Ctrl+стрелка вправо (влево) позволяет перемещаться по тексту в НАЧАЛО каждого следующего (предыдущего) слова.

Я пыталась создать, но не получилось, макрос для перемещения в КОНЕЦ каждого следующего (предыдущего) слова.
Эта функция очень полезна для редактирования текстов, когда надо менять окончания слов.

Первое, что приходит на ум, это Ctrl+стрелка вправо, затем «стрелка влево».
Сложность заключается в том, что в конце слова может стоять либо
(1) пробел (тогда можно просто нажать клавишу «стрелка влево»), либо
(2) знак препинания (, . : ;) без пробела, в этом случае уже не надо нажимать клавишу «стрелка влево», поскольку курсор уже находится в конце слова.

Помогите, пожалуйста, написать правильный код для АНК.

Спасибо!

2

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Это макрос будет заменять сочетание Ctrl+стрелка вправо (влево) на свой как я понимаю, а как же дефолтные операции, они отменяются или на что то заменяются?

И ещё...
Если используется NotePad++ то там реализовано то что ты хочешь, правда я не помню на что надо нажимать.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

3

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Это в не вместо, а в дополнение к Ctrl+стрелка вправо (влево), для назначения программируемым клавишам или сочетаниям клавиш. Например, хочу назначить эту функцию клавише «3» в правой группе клавиш.

4 (изменено: Alectric, 2014-09-03 17:22:17)

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Вот такой "костыль":

#SingleInstance,Force

3::
again:
tmpclip:=clipboardall
Send,{shift down}{ctrl down}
send,{right}
Send,{shift up}{ctrl up}

Send,{ctrl down}
send,{vk43}
Send,{ctrl up}

clip:=clipboard
tooltip,% clip
if (clip=" ")
{
  send,{left}{right}
  goto,again
}
if InStr(clip, " ")
  send,{left}
else
  send,{left}{right}
clipboard:=tmpclip
return
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

5 (изменено: leilau, 2014-09-03 17:35:01)

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Нет, что-то не запускается. Сообщение об ошибке в прилагаемом файле.
Не пойму, там нет букв «яю» в первой строке, на которые ссылается сообщение.

6

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Это я должен извиниться, я его дописываю потихоньку. Соображаю что еще нужно добавить только когда отправляю сообщение (мультипостить ведь запрещено правилами).

Вот конечный вариант... я надеюсь (что меня не "попрет" его опять менять):

#SingleInstance,Force

3::
again:
tmpclip:=clipboardall
Send,{shift down}{ctrl down}
send,{right}
Send,{shift up}{ctrl up}

Send,{ctrl down}
send,{vk43}
Send,{ctrl up}

clip:=clipboard
tooltip,% clip
if (clip=" ")
{
  send,{left}{right}
  goto,again
}
else if (clip="`r`n")
{
  send,{left}
  goto,again
}

if InStr(clip," ")
  send,{left}
else
  send,{left}{right}
clipboard:=tmpclip
return
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

7

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Новый вариант тоже не запустился с таким же сообщением о «яю». А у Вас все работает?

8 (изменено: Alectric, 2014-09-03 17:36:08)

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

У меня работает. Это связанно с кодировкой файла, вроде, в которой сохраняете скрипт. Я сохраняю или в Анси или в юникоде.

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Или с версией АХК. http://ahkscript.org/

Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

10

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Да, обновление версии помогло с запуском  скрипта.
Но работает он у меня своеобразно. При нажатии кнопки"3" на правой клавиатуре печатает тройки, а при нажатии кнопки "3" в верхнем ряду основной клавиатуры ведет себя двояко: если после слова идет пробел, то на мгновение выделяет слово до конца, но курсор остается на месте; если после слова следует знак препинания, то курсор сдвигается на одну букву вправо.

Но раз у Вас работает, буду думать, что у меня не так.

11 (изменено: Alectric, 2014-09-03 18:34:02)

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Для разных редакторов нужны разные "костыли".
Я писал используя UEdit для проверки.

Проверил в Notepad2 - работает как Вы и описали.
Вот для Notepad2:

#SingleInstance,Force

3::
again:
tmpclip:=clipboardall
Send,{shift down}{ctrl down}
send,{right}
Send,{shift up}{ctrl up}

Send,{ctrl down}
send,{vk43}
Send,{ctrl up}

clip:=clipboard
tooltip,% clip
if (clip=" ")
{
  send,{left}{right}
  goto,again
}
else if (clip="`r`n")
{
  send,{left}
  goto,again
}

if InStr(clip," ")
  send,{right}{left}
else
  send,{right}
clipboard:=tmpclip
return
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

12

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова


3::
Numpad3::
NumpadPgDn::
    SendInput ^{Right}+{Left}
    ClipAll := ClipboardAll, Clip := Clipboard, Clipboard := ""
    SendInput ^{vk43}
    ClipWait, 1 
    SendInput % Clipboard = " " ? "{Left}" : "{Right}"
    ClipboardAll := ClipAll, Clipboard := Clip
    Return
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

13

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Здравствуйте, serzh82saratov!

Ваш скрипт срабатывает (на правильной кнопке), но только один раз.

При повторном нажатии курсор уже никуда не перемещается (если после слова стоит знак препинания, то при повторном нажатии клавиши курсор встает в конец этого знака и дальше также прекращает перемещение).

А мне хотелось бы, чтобы он двигался все дальше и дальше, подобно функции Ctrl+стрелка вправо.

14

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

leilau пишет:

<...> При повторном нажатии курсор уже никуда не перемещается <...>

Попробуй так (исправь 4ую строку):

SendInput {Right 2}^{Right}+{Left}

15

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Ура! Работает. Большое спасибо!

16

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Упс, а кнопка «3» в верхней части основной клавиатуры теперь тоже работает согласно скрипту (не печатает цифру 3).

Если трудно обойти эту ситуацию, то меня бы устроило назначение, например кнопки +/=.

17

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Просто уберите 3:: из кода.

18

Re: AHK: Перемещение курсора в конец следующего (предыдущего) слова

Все в порядке! Огромное спасибо, впечатляет.