PDA

Показать полную графическую версию : Как выделить слово без пробела в конце


vanvanov
31-07-2014, 01:29
Очень раздражает, что выделение посредством клавиатуры (Ctrl+Shift+Стрелка вправо) приводит к выделению не только самого слова, но также пунктуации и пробела, следующего за ними. Как выделять слово само по себе, без пунктуационных знаков и пробела?

P.S. Я знаю, что это поведение присуще многим windows-программам. На мой взгляд, такое поведение выделения для последующего копирования-вставки в другие приложения крайне неудобно.
P.P.S. Я знаю про Shift+Стрелка влево, однако это костыль и использовать его по 100500 раз в день напрягает. Мне нужно постоянное решение - что угодно: макрос, скрипт, внешнее приложение.

a_axe
31-07-2014, 12:16
vanvanov, объектную модель ворда я представляю смутно, с бедра на вскидку - такой код:
Sub Select_word()
Dim strTxt As String

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
End Sub
Ограничение - курсор должен стоять непосредственно перед тем словом, которое вы хотите выделить.
Соответственно, возможен вариант, чтобы курсор стоял в любом месте слова, тут однако код работает не совсем корректно в граничных условиях (при выделении в начале документа, скобочки и т.д.), если есть желание потестировать - попробуйте код ниже (остановить выполнение кода можно сочетанием ctrl+break , если вдруг зависнет)
Sub s_wd()
Dim strTxt As String
Do
If Selection.Start = 0 Then Exit Do
If Selection.Information(wdFirstCharacterColumnNumber) = 1 Then Exit Do
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
strTxt = Selection.Text
If strTxt = " " Then Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Loop Until strTxt = " "

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select

End Sub

vanvanov
01-08-2014, 00:42
a_axe, спасибо большое! Ваш код работает (я пробовал 1-й вариант), однако, тут возникла другая проблема. Я назначил на макрос Ctrl+Shift+Стрелка вправо, чтобы использовать универсальные сочетания клавиш. Но раньше я мог зажать Ctrl+Shift и выделять соседние слова с помощью стрелки вправо, а теперь таким образом выделяется только текущее слово. Может, как-нибудь можно прописать дальнейшее выделение с помощью стрелки вправо?

a_axe
01-08-2014, 02:35
vanvanov, если вас утроит ограничение, что на словах из одного символа (в смысле предлоги "и", "в", "о" и т.п.) код будет останавливаться и курсор нужно будет передвинуть стрелочкой вручную, то:
Sub Select_word()
Dim strTxt As String
If Len(Selection.Text) <> 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=2
End If

Select Case Selection.Text
Case ".", ",", " ", "!", "?"
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Select

Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select
End Sub
Альтернативный вариант кода:
Sub s_wd()
Dim strTxt As String
If Len(Selection.Text) <> 1 Then
Selection.MoveRight Unit:=wdCharacter, Count:=2
End If

Select Case Selection.Text
Case ".", ",", " ", "!", "?"
Selection.MoveRight Unit:=wdCharacter, Count:=1
End Select

Do
If Selection.Start = 0 Then Exit Do
If Selection.Information(wdFirstCharacterColumnNumber) = 1 Then Exit Do
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
strTxt = Selection.Text
If strTxt = " " Then Selection.MoveRight Unit:=wdCharacter, Count:=2
Selection.MoveLeft Unit:=wdCharacter, Count:=1

Loop Until strTxt = " "



Selection.MoveRight Unit:=wdWord, Count:=1, Extend:=wdExtend

strTxt = Right(Selection.Text, 1)
Select Case strTxt
Case ".", ",", " ", "!", "?"
Selection.MoveLeft Unit:=wdCharacter, Count:=1, Extend:=wdExtend
End Select

End Sub

vanvanov
01-08-2014, 16:45
a_axe, это уже ближе к истине, но не совсем то. Можно ли использовать стрелку вправо не для сдвига выделения на одно слово, а для расширения уже существующего выделения еще на одно слово (но без пробелов, пунктуации на конце)? Я сделал анимированный GIF, который показывает, как в моем представлении это должно происходить: http://i047.radikal.ru/1408/d5/232367c7014f.gif

LEmiD
24-10-2021, 19:36
Шли годы, а решения так и нет.
Скажите в 10 винде это проблема осталась, а в 11 ? (ну то есть повод обновлять есть или нет, ну они же сделали копипасту в консоле)




© OSzone.net 2001-2012