OVH Cloud OVH Cloud

Compter les mots avec VI

3 réponses
Avatar
Laurent
j'ai besoin de compter ponctuellement le nombre de mot par phrase.
Comment puis-je bidouiller un truc pareil avec vi ? Sachant qu'une
phrase commence par une majuscule et finie par un point. Il y a bien
le !wc mais je ne vois pas comment transmettre l'adresse d'une colonne
en ligne de commande.

Une idée ?

--
Laurent

3 réponses

Avatar
Philippe Delsol
j'ai besoin de compter ponctuellement le nombre de mot par phrase.
Comment puis-je bidouiller un truc pareil avec vi ? Sachant qu'une
phrase commence par une majuscule et finie par un point. Il y a bien
le !wc mais je ne vois pas comment transmettre l'adresse d'une colonne
en ligne de commande.

Une idée ?


Une solution qui en vaut d'autres :

head -N fichier|tail -1|wc -c

Où N = le numéro de ligne et fichier le nom du fichier.

--
Laurent


Philippe

Avatar
Pascal Bourguignon
Laurent writes:

j'ai besoin de compter ponctuellement le nombre de mot par phrase.
Comment puis-je bidouiller un truc pareil avec vi ? Sachant qu'une
phrase commence par une majuscule et finie par un point. Il y a bien
le !wc mais je ne vois pas comment transmettre l'adresse d'une colonne
en ligne de commande.

Une idée ?

--
Laurent



cat >~/bin/count-words-per-sentence <<EOF
#!/bin/bash
cat > /tmp/cwps.$$
emacs --batch --find-file /tmp/cwps.$$ --eval '
(progn
(require '''cl)

(defun count-words (start end)
(interactive "r")
(save-excursion
(goto-char start)
(let ((count 0))
(forward-word 1)
(while (<= (point) end)
(incf count)
(forward-word 1))
(message "%d words." count)
count)));;count-words

(defun count-words-per-sentence (start end)
(interactive "*r")
(save-excursion
(let ((end (set-marker (make-marker) end)))
(block :exit
(goto-char start)
(forward-sentence)
(while (< (point) (marker-position end))
(let ((count (count-words start (point))))
(when (= 0 count) (return-from :exit))
(delete-region start (point))
(insert (format "%3dn" count))
(setf start (point)))
(forward-sentence)))
(set-marker end nil))));;count-words-per-sentence

(count-words-per-sentence (point-min) (point-max))
(save-buffer 0))
' --kill >/dev/null 2>&1
cat /tmp/cwps.$$
rm /tmp/cwps.$$
#### count-words-per-sentence -- -- ####
EOF

vi file.txt
:10,30!~/bin/count-words-per-sentence

--
__Pascal Bourguignon__ http://www.informatimago.com/

Our enemies are innovative and resourceful, and so are we. They never
stop thinking about new ways to harm our country and our people, and
neither do we.

Avatar
no
On Thu, 19 Aug 2004 20:14:54 +0000, Laurent wrote:


j'ai besoin de compter ponctuellement le nombre de mot par phrase. Comment
puis-je bidouiller un truc pareil avec vi ? Sachant qu'une phrase commence
par une majuscule et finie par un point. Il y a bien le !wc mais je ne
vois pas comment transmettre l'adresse d'une colonne en ligne de commande.

Une idée ?


Tu peux te deplacer de phrase en phrase avec les touches '(' pour
te positionner au début d'une phrase et ')' le début de la phrase
suivante.

Avec Vim on peut donc imaginer quelque chose dans ce style :

:map <C-P> <ESC>(v)hy<ESC>:new<CR><ESC>p<ESC>:%!wc -w<CR><ESC>"pY<ESC>:bd!<CR><ESC>:echo getreg('p')
<CR>

Tu positionnes le curseur sur une phrase et tu tapes Control+p et ça
t'affiche le nombre de mots comptés par la commande `wc -w'.