Показать полную графическую версию : Как выделить слово без пробела в конце
vanvanov
31-07-2014, 01:29
Очень раздражает, что выделение посредством клавиатуры (Ctrl+Shift+Стрелка вправо) приводит к выделению не только самого слова, но также пунктуации и пробела, следующего за ними. Как выделять слово само по себе, без пунктуационных знаков и пробела?
P.S. Я знаю, что это поведение присуще многим windows-программам. На мой взгляд, такое поведение выделения для последующего копирования-вставки в другие приложения крайне неудобно.
P.P.S. Я знаю про Shift+Стрелка влево, однако это костыль и использовать его по 100500 раз в день напрягает. Мне нужно постоянное решение - что угодно: макрос, скрипт, внешнее приложение.
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 и выделять соседние слова с помощью стрелки вправо, а теперь таким образом выделяется только текущее слово. Может, как-нибудь можно прописать дальнейшее выделение с помощью стрелки вправо?
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
Шли годы, а решения так и нет.
Скажите в 10 винде это проблема осталась, а в 11 ? (ну то есть повод обновлять есть или нет, ну они же сделали копипасту в консоле)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC